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: [rz@linux-m68k.org: Re: m68k, extendqidi2 problem]


On Wed, 2004-03-17 at 14:11, Richard Zidlicky wrote:
> ..  makes more sense to me. The "move.l %2,%0" will set or clear upper 24
> bits, smi the lower 8 bits of the high word register. Pure curiosity, why
> isn't the same trick used in the 68020 branch?

Looking at gcc-2.7, we see that it was first
  if (TARGET_68020)
    return \"move%.b %1,%2\;extb%.l %2\;smi %0\;extb%.l %0\";
  else
    return \"move%.b %1,%2\;ext%.w %0\;ext%.l %2\;smi %0\;ext%.w
%0\;ext%.l %0\\";
and then between between 2.7 and 2.8 the non-68020 case was optimized to
delete one instruction by using this trick.  Not clear when exactly this
happened, just by looking at the ChangeLogs.

Perhaps the 68020 case was left alone to avoid the risk of breaking it. 
Or maybe it was left alone because smi/ext is a lot easier to understand
than movl/smi.

Your revised pattern looks right to me.
-- 
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com


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