This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: missed optimization in m68k


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...


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]