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