------- Comment #12 from steven at gcc dot gnu dot org 2010-02-04 14:54 ------- With the patches from bug 42617 applied, I get the following:
.file "tst.c" .text .align 2 .global Unroll .type Unroll, %function Unroll: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. mov r0, r0, asl #16 stmfd sp!, {r4, r5, r6, r7, r8} mov r0, r0, asr #16 add r8, r1, #256 .L2: ldr ip, [r1, #0] mov r7, r1 mul r2, ip, r0 str r2, [r7], #4 ldr r3, [r1, #4] ldr r5, [r7, #4] mul r6, r3, r0 str r6, [r7, #0] ldr r4, [r1, #12] ldr ip, [r1, #16] add r2, r1, #20 ldmia r2, {r2, r3, r7} @ phole ldm mul r6, r5, r0 mul r5, r4, r0 mul r4, ip, r0 mul ip, r2, r0 mul r2, r3, r0 mul r3, r7, r0 str r6, [r1, #8] str r5, [r1, #12] str r4, [r1, #16] str ip, [r1, #20] str r2, [r1, #24] add r1, r1, #32 cmp r1, r8 str r3, [r1, #-4] bne .L2 ldmfd sp!, {r4, r5, r6, r7, r8} bx lr .size Unroll, .-Unroll .ident "GCC: (GNU) 4.5.0 20100204 (experimental) [trunk revision 156492]" (flags: -std=c99 -mcpu=arm9 -O2 -funroll-loops) This is good but not perfect. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36712