* gcc optimizes loops badly.
@ 2003-01-01 14:44 Joakim Tjernlund
0 siblings, 0 replies; 4+ messages in thread
From: Joakim Tjernlund @ 2003-01-01 14:44 UTC (permalink / raw)
To: linuxppc-embedded
I have spent some time to optimize the crc32 function since JFFS2 uses it heavily. I found that
gcc 2.95.3 optimizes loops badly, even gcc 2.96 RH produces better code for x86 in some cases.
So I optimized the C code a bit and got much better results.
Now I wounder how recent(>= 3.2) gcc performs. Could somebody run gcc -S -O2 -mregnames on
functions below and mail me the results?
Jocke
These are different version of the same crc32 function:
#include <linux/types.h>
extern const __u32 crc32_table[256];
/* Return a 32-bit CRC of the contents of the buffer. */
__u32 crc32org(__u32 val, const void *ss, unsigned int len)
{
const unsigned char *s = ss;
while (len--){
val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8);
}
return val;
}
__u32 crc32do_while(__u32 val, const void *ss, unsigned int len)
{
const unsigned char *s = ss;
if(len){
do {
val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8);
} while (--len);
}
return val;
}
__u32 crc32do_while_dec(__u32 val, const void *ss, unsigned int len)
{
const unsigned char *s = ss;
if(len){
--s;
do {
val = crc32_table[(val ^ *(++s)) & 0xff] ^ (val >> 8);
} while (--len);
}
return val;
}
and the resulting assembly:
.file "crc32.c"
gcc2_compiled.:
.section ".text"
.align 2
.globl crc32org
.type crc32org,@function
crc32org:
cmpwi %cr0,%r5,0
addi %r5,%r5,-1
bclr 12,2
lis %r9,crc32_table@ha
la %r10,crc32_table@l(%r9)
.L18:
lbz %r0,0(%r4)
cmpwi %cr0,%r5,0
xor %r0,%r3,%r0
rlwinm %r0,%r0,2,22,29
lwzx %r11,%r10,%r0
srwi %r9,%r3,8
xor %r3,%r11,%r9
addi %r4,%r4,1
addi %r5,%r5,-1
bc 4,2,.L18
blr
.Lfe1:
.size crc32org,.Lfe1-crc32org
.align 2
.globl crc32do_while
.type crc32do_while,@function
crc32do_while:
mr. %r0,%r5
mtctr %r0
bclr 12,2
lis %r9,crc32_table@ha
la %r10,crc32_table@l(%r9)
.L25:
lbz %r0,0(%r4)
srwi %r11,%r3,8
xor %r0,%r3,%r0
rlwinm %r0,%r0,2,22,29
lwzx %r9,%r10,%r0
addi %r4,%r4,1
xor %r3,%r9,%r11
bdnz .L25
blr
.Lfe2:
.size crc32do_while,.Lfe2-crc32do_while
.align 2
.globl crc32do_while_dec
.type crc32do_while_dec,@function
crc32do_while_dec:
mr. %r0,%r5
mtctr %r0
bclr 12,2
lis %r9,crc32_table@ha
la %r10,crc32_table@l(%r9)
addi %r4,%r4,-1
.L31:
lbzu %r0,1(4)
srwi %r11,%r3,8
xor %r0,%r3,%r0
rlwinm %r0,%r0,2,22,29
lwzx %r9,%r10,%r0
xor %r3,%r9,%r11
bdnz .L31
blr
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 4+ messages in thread[parent not found: <8608421EC5CBD511B5090002A55C004802618343@uswaumsx04medge.med.ge.com>]
* RE: gcc optimizes loops badly.
[not found] <8608421EC5CBD511B5090002A55C004802618343@uswaumsx04medge.med.ge.com>
@ 2003-01-02 15:57 ` Joakim Tjernlund
0 siblings, 0 replies; 4+ messages in thread
From: Joakim Tjernlund @ 2003-01-02 15:57 UTC (permalink / raw)
To: Eisenhut, Daniel (MED)
Cc: Linuxppc-Embedded@Lists. Linuxppc. Org,
Petersen, David (MED, GEMS-IT)
Hi Daniel
Thanks for running the test for me.
The option "-mregnames" exists only on gcc for PPC.
Results are as before for x86. crc32do_while is the
winner followed by crc32do_while_dec.
Gcc should be able generate the same code for
crc32org and crc32do_while, it's a simple optimization.
crc32do_while_dec is possibly only useful on PPC.
On PPC I expect crc32do_while_dec to be the winner.
Do you have a gcc 3.2 which will generate PPC assembly?
Jocke
PS.
You don't have to be on the list to post to it. I will
CC the list for now.
>
>
> Jocke,
>
> The option "-mregnames" no longer exists in version 3.2 of gcc. I
> couldn't find anything equivalent. I ran it without that option (gcc -S
> -O2 testcode.c) and produced the following on a i686 RedHat 7.3 box
> using gcc 3.2 (gcc 3.2.1 is the latest release I believe)
>
> I am not on the list, hence I cannot CC the list. This message was
> forwarded to me from someone else.
>
> Dan Eisenhut
> GE Medical Systems - Information Technologies
> daniel.eisenhut@med.ge.com
> 414-362-3151
>
>
> .file "testcode.c"
> .text
> .align 2
> .p2align 4,,15
> .globl crc32org
> .type crc32org,@function
> crc32org:
> pushl %ebp
> movl %esp, %ebp
> pushl %esi
> movl 16(%ebp), %edx
> pushl %ebx
> movl 8(%ebp), %ecx
> movl 12(%ebp), %ebx
> decl %edx
> cmpl $-1, %edx
> je .L7
> movl $crc32_table, %esi
> .p2align 4,,15
> .L5:
> movzbl (%ebx), %eax
> decl %edx
> incl %ebx
> xorb %cl, %al
> shrl $8, %ecx
> movzbl %al, %eax
> xorl (%esi,%eax,4), %ecx
> cmpl $-1, %edx
> jne .L5
> .L7:
> popl %ebx
> movl %ecx, %eax
> popl %esi
> popl %ebp
> ret
> .Lfe1:
> .size crc32org,.Lfe1-crc32org
> .align 2
> .p2align 4,,15
> .globl crc32do_while
> .type crc32do_while,@function
> crc32do_while:
> pushl %ebp
> movl %esp, %ebp
> pushl %esi
> movl 8(%ebp), %edx
> pushl %ebx
> movl 16(%ebp), %ebx
> movl 12(%ebp), %ecx
> testl %ebx, %ebx
> je .L9
> movl $crc32_table, %esi
> .p2align 4,,15
> .L10:
> movzbl (%ecx), %eax
> incl %ecx
> xorb %dl, %al
> shrl $8, %edx
> movzbl %al, %eax
> xorl (%esi,%eax,4), %edx
> decl %ebx
> jne .L10
> .L9:
> popl %ebx
> movl %edx, %eax
> popl %esi
> popl %ebp
> ret
> .Lfe2:
> .size crc32do_while,.Lfe2-crc32do_while
> .align 2
> .p2align 4,,15
> .globl crc32do_while_dec
> .type crc32do_while_dec,@function
> crc32do_while_dec:
> pushl %ebp
> movl %esp, %ebp
> pushl %esi
> movl 8(%ebp), %edx
> pushl %ebx
> movl 16(%ebp), %ebx
> movl 12(%ebp), %ecx
> testl %ebx, %ebx
> je .L15
> decl %ecx
> movl $crc32_table, %esi
> .p2align 4,,15
> .L16:
> incl %ecx
> movzbl (%ecx), %eax
> xorb %dl, %al
> shrl $8, %edx
> movzbl %al, %eax
> xorl (%esi,%eax,4), %edx
> decl %ebx
> jne .L16
> .L15:
> popl %ebx
> movl %edx, %eax
> popl %esi
> popl %ebp
> ret
> .Lfe3:
> .size crc32do_while_dec,.Lfe3-crc32do_while_dec
> .ident "GCC: (GNU) 3.2"
>
>
> -----Original Message-----
> From: Joakim Tjernlund [mailto:Joakim.Tjernlund@lumentis.se]
> Sent: Wednesday, January 01, 2003 8:45 AM
> To: linuxppc-embedded@lists.linuxppc.org
> Subject: gcc optimizes loops badly.
>
>
>
> I have spent some time to optimize the crc32 function since JFFS2 uses
> it heavily. I found that
> gcc 2.95.3 optimizes loops badly, even gcc 2.96 RH produces better code
> for x86 in some cases.
>
> So I optimized the C code a bit and got much better results.
> Now I wounder how recent(>= 3.2) gcc performs. Could somebody run gcc -S
> -O2 -mregnames on
> functions below and mail me the results?
>
> Jocke
>
> These are different version of the same crc32 function:
> #include <linux/types.h>
>
> extern const __u32 crc32_table[256];
>
> /* Return a 32-bit CRC of the contents of the buffer. */
>
> __u32 crc32org(__u32 val, const void *ss, unsigned int len)
> {
> const unsigned char *s = ss;
>
> while (len--){
> val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8);
> }
> return val;
> }
> __u32 crc32do_while(__u32 val, const void *ss, unsigned int len)
> {
> const unsigned char *s = ss;
>
> if(len){
> do {
> val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8);
> } while (--len);
> }
> return val;
> }
> __u32 crc32do_while_dec(__u32 val, const void *ss, unsigned int len)
> {
> const unsigned char *s = ss;
>
> if(len){
> --s;
> do {
> val = crc32_table[(val ^ *(++s)) & 0xff] ^ (val >> 8);
> } while (--len);
> }
> return val;
> }
>
> and the resulting assembly:
> .file "crc32.c"
> gcc2_compiled.:
> .section ".text"
> .align 2
> .globl crc32org
> .type crc32org,@function
> crc32org:
> cmpwi %cr0,%r5,0
> addi %r5,%r5,-1
> bclr 12,2
> lis %r9,crc32_table@ha
> la %r10,crc32_table@l(%r9)
> .L18:
> lbz %r0,0(%r4)
> cmpwi %cr0,%r5,0
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r11,%r10,%r0
> srwi %r9,%r3,8
> xor %r3,%r11,%r9
> addi %r4,%r4,1
> addi %r5,%r5,-1
> bc 4,2,.L18
> blr
> .Lfe1:
> .size crc32org,.Lfe1-crc32org
> .align 2
> .globl crc32do_while
> .type crc32do_while,@function
> crc32do_while:
> mr. %r0,%r5
> mtctr %r0
> bclr 12,2
> lis %r9,crc32_table@ha
> la %r10,crc32_table@l(%r9)
> .L25:
> lbz %r0,0(%r4)
> srwi %r11,%r3,8
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> addi %r4,%r4,1
> xor %r3,%r9,%r11
> bdnz .L25
> blr
> .Lfe2:
> .size crc32do_while,.Lfe2-crc32do_while
> .align 2
> .globl crc32do_while_dec
> .type crc32do_while_dec,@function
> crc32do_while_dec:
> mr. %r0,%r5
> mtctr %r0
> bclr 12,2
> lis %r9,crc32_table@ha
> la %r10,crc32_table@l(%r9)
> addi %r4,%r4,-1
> .L31:
> lbzu %r0,1(4)
> srwi %r11,%r3,8
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> xor %r3,%r9,%r11
> bdnz .L31
> blr
>
>
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: gcc optimizes loops badly.
@ 2003-01-02 16:12 Eisenhut, Daniel (MED)
2003-01-02 17:34 ` Joakim Tjernlund
0 siblings, 1 reply; 4+ messages in thread
From: Eisenhut, Daniel (MED) @ 2003-01-02 16:12 UTC (permalink / raw)
To: 'joakim.tjernlund@lumentis.se'
Cc: Linuxppc-Embedded@Lists. Linuxppc. Org,
Petersen, David (MED, GEMS-IT)
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,@function
crc32org:
cmpwi %cr0,%r5,0
addi %r5,%r5,-1
beqlr- %cr0
addi %r5,%r5,1
lis %r9,crc32_table@ha
mtctr %r5
la %r10,crc32_table@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,@function
crc32do_while:
cmpwi %cr0,%r5,0
beqlr- %cr0
lis %r9,crc32_table@ha
mtctr %r5
la %r10,crc32_table@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,@function
crc32do_while_dec:
cmpwi %cr0,%r5,0
beqlr- %cr0
lis %r9,crc32_table@ha
mtctr %r5
la %r10,crc32_table@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"
-----Original Message-----
From: Joakim Tjernlund [mailto:joakim.tjernlund@lumentis.se]
Sent: Thursday, January 02, 2003 9:57 AM
To: Eisenhut, Daniel (MED)
Cc: Linuxppc-Embedded@Lists. Linuxppc. Org; Petersen, David (MED,
GEMS-IT)
Subject: RE: gcc optimizes loops badly.
Hi Daniel
Thanks for running the test for me.
The option "-mregnames" exists only on gcc for PPC.
Results are as before for x86. crc32do_while is the
winner followed by crc32do_while_dec.
Gcc should be able generate the same code for
crc32org and crc32do_while, it's a simple optimization.
crc32do_while_dec is possibly only useful on PPC.
On PPC I expect crc32do_while_dec to be the winner.
Do you have a gcc 3.2 which will generate PPC assembly?
Jocke
PS.
You don't have to be on the list to post to it. I will
CC the list for now.
>
>
> Jocke,
>
> The option "-mregnames" no longer exists in version 3.2 of gcc. I
> couldn't find anything equivalent. I ran it without that option (gcc
-S
> -O2 testcode.c) and produced the following on a i686 RedHat 7.3 box
> using gcc 3.2 (gcc 3.2.1 is the latest release I believe)
>
> I am not on the list, hence I cannot CC the list. This message was
> forwarded to me from someone else.
>
> Dan Eisenhut
> GE Medical Systems - Information Technologies
> daniel.eisenhut@med.ge.com
> 414-362-3151
>
>
> .file "testcode.c"
> .text
> .align 2
> .p2align 4,,15
> .globl crc32org
> .type crc32org,@function
> crc32org:
> pushl %ebp
> movl %esp, %ebp
> pushl %esi
> movl 16(%ebp), %edx
> pushl %ebx
> movl 8(%ebp), %ecx
> movl 12(%ebp), %ebx
> decl %edx
> cmpl $-1, %edx
> je .L7
> movl $crc32_table, %esi
> .p2align 4,,15
> .L5:
> movzbl (%ebx), %eax
> decl %edx
> incl %ebx
> xorb %cl, %al
> shrl $8, %ecx
> movzbl %al, %eax
> xorl (%esi,%eax,4), %ecx
> cmpl $-1, %edx
> jne .L5
> .L7:
> popl %ebx
> movl %ecx, %eax
> popl %esi
> popl %ebp
> ret
> .Lfe1:
> .size crc32org,.Lfe1-crc32org
> .align 2
> .p2align 4,,15
> .globl crc32do_while
> .type crc32do_while,@function
> crc32do_while:
> pushl %ebp
> movl %esp, %ebp
> pushl %esi
> movl 8(%ebp), %edx
> pushl %ebx
> movl 16(%ebp), %ebx
> movl 12(%ebp), %ecx
> testl %ebx, %ebx
> je .L9
> movl $crc32_table, %esi
> .p2align 4,,15
> .L10:
> movzbl (%ecx), %eax
> incl %ecx
> xorb %dl, %al
> shrl $8, %edx
> movzbl %al, %eax
> xorl (%esi,%eax,4), %edx
> decl %ebx
> jne .L10
> .L9:
> popl %ebx
> movl %edx, %eax
> popl %esi
> popl %ebp
> ret
> .Lfe2:
> .size crc32do_while,.Lfe2-crc32do_while
> .align 2
> .p2align 4,,15
> .globl crc32do_while_dec
> .type crc32do_while_dec,@function
> crc32do_while_dec:
> pushl %ebp
> movl %esp, %ebp
> pushl %esi
> movl 8(%ebp), %edx
> pushl %ebx
> movl 16(%ebp), %ebx
> movl 12(%ebp), %ecx
> testl %ebx, %ebx
> je .L15
> decl %ecx
> movl $crc32_table, %esi
> .p2align 4,,15
> .L16:
> incl %ecx
> movzbl (%ecx), %eax
> xorb %dl, %al
> shrl $8, %edx
> movzbl %al, %eax
> xorl (%esi,%eax,4), %edx
> decl %ebx
> jne .L16
> .L15:
> popl %ebx
> movl %edx, %eax
> popl %esi
> popl %ebp
> ret
> .Lfe3:
> .size crc32do_while_dec,.Lfe3-crc32do_while_dec
> .ident "GCC: (GNU) 3.2"
>
>
> -----Original Message-----
> From: Joakim Tjernlund [mailto:Joakim.Tjernlund@lumentis.se]
> Sent: Wednesday, January 01, 2003 8:45 AM
> To: linuxppc-embedded@lists.linuxppc.org
> Subject: gcc optimizes loops badly.
>
>
>
> I have spent some time to optimize the crc32 function since JFFS2 uses
> it heavily. I found that
> gcc 2.95.3 optimizes loops badly, even gcc 2.96 RH produces better
code
> for x86 in some cases.
>
> So I optimized the C code a bit and got much better results.
> Now I wounder how recent(>= 3.2) gcc performs. Could somebody run gcc
-S
> -O2 -mregnames on
> functions below and mail me the results?
>
> Jocke
>
> These are different version of the same crc32 function:
> #include <linux/types.h>
>
> extern const __u32 crc32_table[256];
>
> /* Return a 32-bit CRC of the contents of the buffer. */
>
> __u32 crc32org(__u32 val, const void *ss, unsigned int len)
> {
> const unsigned char *s = ss;
>
> while (len--){
> val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8);
> }
> return val;
> }
> __u32 crc32do_while(__u32 val, const void *ss, unsigned int len)
> {
> const unsigned char *s = ss;
>
> if(len){
> do {
> val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8);
> } while (--len);
> }
> return val;
> }
> __u32 crc32do_while_dec(__u32 val, const void *ss, unsigned int len)
> {
> const unsigned char *s = ss;
>
> if(len){
> --s;
> do {
> val = crc32_table[(val ^ *(++s)) & 0xff] ^ (val >> 8);
> } while (--len);
> }
> return val;
> }
>
> and the resulting assembly:
> .file "crc32.c"
> gcc2_compiled.:
> .section ".text"
> .align 2
> .globl crc32org
> .type crc32org,@function
> crc32org:
> cmpwi %cr0,%r5,0
> addi %r5,%r5,-1
> bclr 12,2
> lis %r9,crc32_table@ha
> la %r10,crc32_table@l(%r9)
> .L18:
> lbz %r0,0(%r4)
> cmpwi %cr0,%r5,0
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r11,%r10,%r0
> srwi %r9,%r3,8
> xor %r3,%r11,%r9
> addi %r4,%r4,1
> addi %r5,%r5,-1
> bc 4,2,.L18
> blr
> .Lfe1:
> .size crc32org,.Lfe1-crc32org
> .align 2
> .globl crc32do_while
> .type crc32do_while,@function
> crc32do_while:
> mr. %r0,%r5
> mtctr %r0
> bclr 12,2
> lis %r9,crc32_table@ha
> la %r10,crc32_table@l(%r9)
> .L25:
> lbz %r0,0(%r4)
> srwi %r11,%r3,8
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> addi %r4,%r4,1
> xor %r3,%r9,%r11
> bdnz .L25
> blr
> .Lfe2:
> .size crc32do_while,.Lfe2-crc32do_while
> .align 2
> .globl crc32do_while_dec
> .type crc32do_while_dec,@function
> crc32do_while_dec:
> mr. %r0,%r5
> mtctr %r0
> bclr 12,2
> lis %r9,crc32_table@ha
> la %r10,crc32_table@l(%r9)
> addi %r4,%r4,-1
> .L31:
> lbzu %r0,1(4)
> srwi %r11,%r3,8
> xor %r0,%r3,%r0
> rlwinm %r0,%r0,2,22,29
> lwzx %r9,%r10,%r0
> xor %r3,%r9,%r11
> bdnz .L31
> blr
>
>
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 4+ messages in thread* RE: gcc optimizes loops badly.
2003-01-02 16:12 Eisenhut, Daniel (MED)
@ 2003-01-02 17:34 ` Joakim Tjernlund
0 siblings, 0 replies; 4+ messages in thread
From: Joakim Tjernlund @ 2003-01-02 17:34 UTC (permalink / raw)
To: Eisenhut, Daniel (MED)
Cc: Linuxppc-Embedded@Lists. Linuxppc. Org,
Petersen, David (MED, GEMS-IT)
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,@function
> crc32org:
> cmpwi %cr0,%r5,0
> addi %r5,%r5,-1
> beqlr- %cr0
> addi %r5,%r5,1
> lis %r9,crc32_table@ha
> mtctr %r5
> la %r10,crc32_table@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,@function
> crc32do_while:
> cmpwi %cr0,%r5,0
> beqlr- %cr0
> lis %r9,crc32_table@ha
> mtctr %r5
> la %r10,crc32_table@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,@function
> crc32do_while_dec:
> cmpwi %cr0,%r5,0
> beqlr- %cr0
> lis %r9,crc32_table@ha
> mtctr %r5
> la %r10,crc32_table@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/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2003-01-02 17:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-01 14:44 gcc optimizes loops badly Joakim Tjernlund
[not found] <8608421EC5CBD511B5090002A55C004802618343@uswaumsx04medge.med.ge.com>
2003-01-02 15:57 ` Joakim Tjernlund
-- strict thread matches above, loose matches on Subject: below --
2003-01-02 16:12 Eisenhut, Daniel (MED)
2003-01-02 17:34 ` Joakim Tjernlund
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox