(ashrdi_const, ashrdi3): Allow 31 as shift count.
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 19 Jan 1997 23:45:13 +0000 (18:45 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 19 Jan 1997 23:45:13 +0000 (18:45 -0500)
From-SVN: r13528

gcc/config/m68k/m68k.md

index 877f4423cab3f78c910005b89a67a3d08acd45c9..1ad55fc8e3eab56f4cda49b08d4c55b0ce80785f 100644 (file)
   "!TARGET_5200 
     && ((INTVAL (operands[2]) == 1 || INTVAL (operands[2]) == 2
     || INTVAL (operands[2]) == 3 || INTVAL (operands[2]) == 8
-    || INTVAL (operands[2]) == 16 || INTVAL (operands[2]) == 63))"
+    || INTVAL (operands[2]) == 16 || INTVAL (operands[2]) == 31
+    || INTVAL (operands[2]) == 63))"
   "*
 {
   operands[1] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
     return \"move%.b %0,%1\;asr%.l %#8,%0\;ror%.l %#8,%1\";
   else if (INTVAL (operands[2]) == 16)
     return \"move%.w %0,%1\;clr%.w %0\;swap %1\;ext%.l %0\";
+  else if (INTVAL (operands[2]) == 31)
+    return \"add%.l %1,%1\;addx%.l %0,%0\;move%.l %0,%1\;subx%.l %0,%0\";
   else if (INTVAL (operands[2]) == 2)
     return \"asr%.l %#1,%0\;roxr%.l %#1,%1\;asr%.l %#1,%0\;roxr%.l %#1,%1\";
   else/* if (INTVAL (operands[2]) == 3)*/
   if (GET_CODE (operands[2]) != CONST_INT
   || (INTVAL (operands[2]) != 1 && INTVAL (operands[2]) != 2
      && INTVAL (operands[2]) != 3 && INTVAL (operands[2]) != 8
-     && INTVAL (operands[2]) != 16 && INTVAL (operands[2]) != 32
-     && INTVAL (operands[2]) != 63))
+     && INTVAL (operands[2]) != 16 && INTVAL (operands[2]) != 31
+     && INTVAL (operands[2]) != 32 && INTVAL (operands[2]) != 63))
     FAIL;
 } ")