http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44025
--- Comment #7 from Steven Bosscher <steven at gcc dot gnu.org> 2012-07-24 18:16:17 UTC --- Prototype patch attached to this email: http://gcc.gnu.org/ml/gcc/2012-07/msg00189.html It's not a finished patch, but it should be a good starting point for anyone who really wants to fix this problem: bar4: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r3, r0 ldr r0, [r0, #520] push {r4, r5, r6, lr} mov r2, r3 mov r1, r3 adds r0, r3, r0 movs r6, #0 b .L9 .L4: ldrb r5, [r2], #1 @ zero_extendqisi2 cmp r5, #10 bne .L9 mov r1, r2 movs r4, #0 strb r6, [r2, #-1] .L9: subs r5, r0, r2 cmp r5, #0 bgt .L4 cmp r1, r3 bne .L5 strb r4, [r1, #512] pop {r4, r5, r6, pc} .L10: subs r4, r1, r3 mov r0, r3 mov r2, r4 bl memmove mov r3, r0 .L11: str r4, [r3, #520] pop {r4, r5, r6, pc} .L5: ldr r2, [r3, #520] adds r2, r3, r2 cmp r1, r2 bcs .L11 b .L10