rs6000.md (ashrdi3_no_power): New.
authorFranz Sirl <Franz.Sirl-kernel@lauterbach.com>
Sun, 19 May 2002 17:10:49 +0000 (17:10 +0000)
committerFranz Sirl <sirl@gcc.gnu.org>
Sun, 19 May 2002 17:10:49 +0000 (17:10 +0000)
2002-05-19  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

* config/rs6000/rs6000.md (ashrdi3_no_power): New.
(ashrdi3): Use it.

From-SVN: r53634

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index d5d6d85..96e6199 100644 (file)
@@ -1,3 +1,8 @@
+2002-05-19  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+
+       * config/rs6000/rs6000.md (ashrdi3_no_power): New.
+       (ashrdi3): Use it.
+
 2002-05-18  Mark Mitchell  <mark@codesourcery.com>
 
        * configure.in (AC_CHECK_FUNCS): Add checks for scandir and
index 793d21f..3c437da 100644 (file)
    {srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2
    sraiq %0,%1,%h2\;srliq %L0,%L1,%h2"
   [(set_attr "length" "8")])
+
+(define_insn "ashrdi3_no_power"
+  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r")
+       (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
+                    (match_operand:SI 2 "const_int_operand" "M,i")))]
+  "TARGET_32BIT && !TARGET_POWER"
+  "@
+   {srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2
+   {sri|srwi} %L0,%L1,%h2\;insrwi %L0,%1,%h2,0\;{srai|srawi} %0,%1,%h2"
+  [(set_attr "length" "8,12")])
 \f
 ;; PowerPC64 DImode operations.
 
   [(set (match_operand:DI 0 "gpc_reg_operand" "")
        (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "")
                     (match_operand:SI 2 "reg_or_cint_operand" "")))]
-  "TARGET_POWERPC64 || TARGET_POWER"
+  ""
   "
 {
   if (TARGET_POWERPC64)
       emit_insn (gen_ashrdi3_power (operands[0], operands[1], operands[2]));
       DONE;
     }
+  else if (TARGET_32BIT && GET_CODE (operands[2]) == CONST_INT)
+    {
+      emit_insn (gen_ashrdi3_no_power (operands[0], operands[1], operands[2]));
+      DONE;
+    }
   else
     FAIL;
 }")