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.