(movsi): New strategy for moving small constants into dregs, if it
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 25 Mar 1994 22:51:43 +0000 (17:51 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 25 Mar 1994 22:51:43 +0000 (17:51 -0500)
can't be done with moveq.

From-SVN: r6902

gcc/config/m68k/m68k.md

index a23732547b55f98fd8fb99f19a849b725f216fca..d5220aa039e40cc73030021a973e3dc036621da5 100644 (file)
           return \"moveq%.l %1,%0\";
 #else
          return \"moveq %1,%0\";
-#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])
-              /* Do this with a moveq #N+8, dreg; subq #8,dreg */
-              && INTVAL (operands[1]) < -128
-              && INTVAL (operands[1]) >= -136)
+               /* if -256 < N < 256 but N is not in range for a moveq
+                  N^ff will be, so use moveq #N^ff, dreg; not.b dreg.  */
+              && 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)
-          return \"moveq%.l %1,%0;subq%.w %#8,%0\";
+          return \"moveq%.l %1,%0\;not%.b %0\";
 #else
-         return \"moveq %1,%0;subq%.w %#8,%0\";
-#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
+         return \"moveq %1,%0\;not%.b %0\";
+#endif  
        }
       else if (ADDRESS_REG_P (operands[0])
               && INTVAL (operands[1]) < 0x8000