This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: missed optimization in m68k
- From: Peter Barada <pbarada at mail dot wm dot sps dot mot dot com>
- To: Peter dot Barada at motorola dot com
- Cc: gcc at gcc dot gnu dot org
- Date: Fri, 14 Jun 2002 19:46:09 -0400
- Subject: Re: missed optimization in m68k
- References: <200206142340.g5ENexO23975@hyper.wm.sps.mot.com>
Ugghh, way to much work going on here. I got this *all* wrong.
I'll start over....
When I compile:
char *copy(const char *src, char *dst)
{
char *dst0 = dst;
while (*dst++ = *src++)
;
return dst0;
}
using a ColdFire v4e modified verion of 3.0.4 using '-mc68020 -O4
-fomit-frame-pointer' I get:
copy:
move.l %a2,-(%sp)
move.l 8(%sp),%a1
move.l 12(%sp),%a0
move.l %a0,%a2
.L2:
move.b (%a1)+,(%a0)
tst.b (%a0)+
jbne .L2
move.l %a2,%d0
move.l (%sp)+,%a2
rts
When I compile it using '-mcfv4e -O4' using the same 3.0.4 v4e
modified compiler I get:
copy:
move.l 4(%sp),%a1
move.l 8(%sp),%a0
move.l %a0,%d0
.L2:
move.b (%a1)+,(%a0)
tst.b (%a0)+
jbne .L2
rts
So I'm wondering where to check for the extra move of %a0 to %a2 came
from instead of moveing it to %d0.
Any ideas will be most appreciated. TIA...