Autoincrement example (Was: Re: Loop patch update (Was: Re: Autoincrement examples))
Joern Rennecke
amylaar@cygnus.co.uk
Fri Dec 31 23:54:00 GMT 1999
> typedef struct { char a,b,c,d,e,f,g,h; } s;
> f (p, q, endp)
> s *p, *q;
> int *endp;
> {
> int i;
>
> for (i = 0; i < *endp; i++)
> {
> p->a = q->b;
> p->b = q->c;
> p->c = q->d;
> p->d = q->e;
> p->e = q->f;
> p++, q++;
>
> p->a = q->c;
> p->b = q->d;
> p->c = q->e;
> p->d = q->f;
> p->e = q->g;
> p++, q++;
>
> p->a = q->d;
> p->b = q->e;
> p->c = q->f;
> p->d = q->g;
> p->e = q->h;
> p++, q++;
> }
> }
P.S.: This is also an example where my regmove patch gives better code
(+ in the diff below) than your flow patch (-).
Target: SH
Options: -O2 -fno-schedule-insns2
(I disabled scheduling to make the comparison easier.)
--- /b/egcs-ai-mh-sh/gcc/lben.s Mon Dec 13 22:50:13 1999
+++ lben.s Mon Dec 13 22:52:13 1999
@@ -7,20 +7,18 @@ gcc2_compiled.:
_f:
mov.l r14,@-r15
mov r15,r14
- mov #0,r3
+ mov #0,r2
mov.l @r6,r1
- cmp/ge r1,r3
+ cmp/ge r1,r2
bt .L4
add #1,r5
.align 2
.L6:
- mov r5,r2
- mov.b @r2+,r1
+ mov.b @r5+,r1
mov.b r1,@r4
- mov.b @r2,r1
+ mov.b @r5+,r1
add #1,r4
mov.b r1,@r4
- add #2,r5
mov.b @r5+,r1
add #1,r4
mov.b r1,@r4
@@ -60,13 +58,13 @@ _f:
add #1,r4
mov.b r1,@r4
mov.b @r5,r1
+ add #2,r5
add #1,r4
mov.b r1,@r4
add #4,r4
- add #2,r5
- add #1,r3
+ add #1,r2
mov.l @r6,r1
- cmp/ge r1,r3
+ cmp/ge r1,r2
bf .L6
.L4:
mov r14,r15
More information about the Gcc
mailing list