http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55666



             Bug #: 55666

           Summary: Use scratch register to avoid save/restore of callee

                    saved register

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: enhancement

          Priority: P3

         Component: target

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: car...@google.com





Compile the attached source code with options:  -march=armv7-a -mthumb -O2



I get the following instructions





YUY2ToUVRow_NEON:

    @ args = 4, pretend = 0, frame = 0

    @ frame_needed = 0, uses_anonymous_args = 0

    @ link register save eliminated.

    push    {r4}

    ldr    r4, [sp, #4]

#APP

@ 5 "tx.i" 1

    adds       r1, r0, r1                     

.p2align  2                               

1:                                          

vld4.8     {d0, d1, d2, d3}, [r0]!        

vld4.8     {d4, d5, d6, d7}, [r1]!        

vrhadd.u8  d1, d1, d5                     

vrhadd.u8  d3, d3, d7                     

vst1.u8    {d1}, [r2]!                    

vst1.u8    {d3}, [r3]!                    

subs       r4, r4, #16                    

bgt        1b                             



@ 0 "" 2

    .thumb

    ldr    r4, [sp], #4

    bx    lr





If we replace all usage of r4 with a scratch register r12, then we can avoid

the save/restore of r4.

Reply via email to