gcc optimizes loops badly.
Joakim Tjernlund
joakim.tjernlund at lumentis.se
Fri Jan 3 04:34:37 EST 2003
Thanks Daniel
The results are somewhat better. Now the loop part for crc32org is better(same as crc32do_while) but
crc32org needs 2 more instructions to prepare the loop.
crc32do_while_dec is still the winner with one less instruction in the loop.
It seems like there is lots of loop optimization work to do in gcc when it comes
to the PPC arch.
Jocke
>
> Jocke,
>
> It just happens that I have a ppc cross compiler using gcc v3.2.1
> handy. "-mregnames" worked fine with it. Here's the output file:
>
>
> .file "testcode.c"
> .section ".text"
> .align 2
> .globl crc32org
> .type crc32org, at function
> crc32org:
> cmpwi %cr0,%r5,0
> addi %r5,%r5,-1
> beqlr- %cr0
> addi %r5,%r5,1
> lis %r9,crc32_table at ha
> mtctr %r5
> la %r10,crc32_table at l(%r9)
> .L18:
> lbz %r0,0(%r4)
> srwi %r11,%r3,8
> addi %r4,%r4,1
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> xor %r3,%r9,%r11
> bdnz .L18
> blr
> .Lfe1:
> .size crc32org,.Lfe1-crc32org
> .align 2
> .globl crc32do_while
> .type crc32do_while, at function
> crc32do_while:
> cmpwi %cr0,%r5,0
> beqlr- %cr0
> lis %r9,crc32_table at ha
> mtctr %r5
> la %r10,crc32_table at l(%r9)
> .L25:
> lbz %r0,0(%r4)
> srwi %r11,%r3,8
> addi %r4,%r4,1
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> xor %r3,%r9,%r11
> bdnz .L25
> blr
> .Lfe2:
> .size crc32do_while,.Lfe2-crc32do_while
> .align 2
> .globl crc32do_while_dec
> .type crc32do_while_dec, at function
> crc32do_while_dec:
> cmpwi %cr0,%r5,0
> beqlr- %cr0
> lis %r9,crc32_table at ha
> mtctr %r5
> la %r10,crc32_table at l(%r9)
> addi %r4,%r4,-1
> .L32:
> lbzu %r0,1(%r4)
> srwi %r11,%r3,8
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> xor %r3,%r9,%r11
> bdnz .L32
> blr
> .Lfe3:
> .size crc32do_while_dec,.Lfe3-crc32do_while_dec
> .ident "GCC: (GNU) 3.2.1"
>
[snip]
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list