Commit 5bf13618 by Richard Kenner

(movsi): New strategy for moving small constants into dregs, if it

can't be done with moveq.

From-SVN: r6902
parent 3d0f0ad0
...@@ -763,45 +763,18 @@ ...@@ -763,45 +763,18 @@
return \"moveq %1,%0\"; return \"moveq %1,%0\";
#endif #endif
} }
#ifndef NO_ADDSUB_Q
else if (DATA_REG_P (operands[0])
/* Do this with a moveq #N-8, dreg; addq #8,dreg */
&& INTVAL (operands[1]) < 136
&& INTVAL (operands[1]) >= 128)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
#if defined(MOTOROLA) && !defined(CRDS)
return \"moveq%.l %1,%0\;addq%.w %#8,%0\";
#else
return \"moveq %1,%0\;addq%.w %#8,%0\";
#endif
}
else if (DATA_REG_P (operands[0]) else if (DATA_REG_P (operands[0])
/* Do this with a moveq #N+8, dreg; subq #8,dreg */ /* if -256 < N < 256 but N is not in range for a moveq
&& INTVAL (operands[1]) < -128 N^ff will be, so use moveq #N^ff, dreg; not.b dreg. */
&& INTVAL (operands[1]) >= -136) && INTVAL (operands[1]) < 256
&& INTVAL (operands[1]) >= -256)
{ {
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) + 8); operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) ^ 0xff);
#if defined(MOTOROLA) && !defined(CRDS) #if defined(MOTOROLA) && !defined(CRDS)
return \"moveq%.l %1,%0;subq%.w %#8,%0\"; return \"moveq%.l %1,%0\;not%.b %0\";
#else #else
return \"moveq %1,%0;subq%.w %#8,%0\"; return \"moveq %1,%0\;not%.b %0\";
#endif #endif
}
#endif
else if (DATA_REG_P (operands[0])
/* If N is in the right range and is even, then use
moveq #N/2, dreg; addl dreg,dreg */
&& INTVAL (operands[1]) > 127
&& INTVAL (operands[1]) <= 254
&& INTVAL (operands[1]) % 2 == 0)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) / 2);
#if defined(MOTOROLA) && !defined(CRDS)
return \"moveq%.l %1,%0\;add%.w %0,%0\";
#else
return \"moveq %1,%0\;add%.w %0,%0\";
#endif
} }
else if (ADDRESS_REG_P (operands[0]) else if (ADDRESS_REG_P (operands[0])
&& INTVAL (operands[1]) < 0x8000 && INTVAL (operands[1]) < 0x8000
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment