OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Jan 2007 13:42:00 +0000 (13:42 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Jan 2007 13:42:00 +0000 (13:42 +0000)
* config/m68k/m68k.md (adddi_dilshr32): Rename to...
(*adddi_dilshr32): ...this.  Fix formatting.  Remove commented-out
non-canonical pattern.  Restrict to !TARGET_COLDFIRE.
(*adddi_dilshr32_cf): New pattern.
(adddi3, subdi3): Remove first alternatives.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120963 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/m68k/m68k.md

index bfe2438..6fb680a 100644 (file)
@@ -1,5 +1,13 @@
 2007-01-19  Richard Sandiford  <richard@codesourcery.com>
 
 2007-01-19  Richard Sandiford  <richard@codesourcery.com>
 
+       * config/m68k/m68k.md (adddi_dilshr32): Rename to...
+       (*adddi_dilshr32): ...this.  Fix formatting.  Remove commented-out
+       non-canonical pattern.  Restrict to !TARGET_COLDFIRE.
+       (*adddi_dilshr32_cf): New pattern.
+       (adddi3, subdi3): Remove first alternatives.
+
+2007-01-19  Richard Sandiford  <richard@codesourcery.com>
+
        * config/m68k/m68k.c (notice_update_cc): If an SFmode move is
        implemented using move.l, do not use its cc result for floating-point
        comparisons.
        * config/m68k/m68k.c (notice_update_cc): If an SFmode move is
        implemented using move.l, do not use its cc result for floating-point
        comparisons.
index 4d92e18..77a0dd0 100644 (file)
     return "move%.w %1,%3\;ext%.l %3\;add%.l %3,%0";
 })
 
     return "move%.w %1,%3\;ext%.l %3\;add%.l %3,%0";
 })
 
-(define_insn "adddi_dilshr32"
+(define_insn "*adddi_dilshr32"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=d,o")
   [(set (match_operand:DI 0 "nonimmediate_operand" "=d,o")
-;;    (plus:DI (match_operand:DI 2 "general_operand" "%0")
-;;     (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro")
-;;            (const_int 32))))]
-    (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,d")
-            (const_int 32))
-        (match_operand:DI 2 "general_operand" "0,0")))]
-  ""
+       (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,d")
+                             (const_int 32))
+                (match_operand:DI 2 "general_operand" "0,0")))]
+  "!TARGET_COLDFIRE"
 {
   CC_STATUS_INIT;
   if (GET_CODE (operands[0]) == REG)
 {
   CC_STATUS_INIT;
   if (GET_CODE (operands[0]) == REG)
   return "add%.l %1,%2\;negx%.l %0\;neg%.l %0";
 })
 
   return "add%.l %1,%2\;negx%.l %0\;neg%.l %0";
 })
 
+(define_insn "*adddi_dilshr32_cf"
+  [(set (match_operand:DI 0 "register_operand" "=d")
+       (plus:DI (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "ro")
+                             (const_int 32))
+                (match_operand:DI 2 "register_operand" "0")))]
+  "TARGET_COLDFIRE"
+{
+  CC_STATUS_INIT;
+  return "add%.l %1,%R0\;negx%.l %0\;neg%.l %0";
+})
+
 (define_insn "adddi_dishl32"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o")
 ;;    (plus:DI (match_operand:DI 2 "general_operand" "%0")
 (define_insn "adddi_dishl32"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o")
 ;;    (plus:DI (match_operand:DI 2 "general_operand" "%0")
 })
 
 (define_insn "adddi3"
 })
 
 (define_insn "adddi3"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,o<>,d,d,d")
-       (plus:DI (match_operand:DI 1 "general_operand" "%0,0,0,0,0")
-                (match_operand:DI 2 "general_operand" "<,d,no>,d,a")))
-   (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))]
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o<>,d,d,d")
+       (plus:DI (match_operand:DI 1 "general_operand" "%0,0,0,0")
+                (match_operand:DI 2 "general_operand" "d,no>,d,a")))
+   (clobber (match_scratch:SI 3 "=&d,&d,X,&d"))]
   ""
 {
   if (DATA_REG_P (operands[0]))
   ""
 {
   if (DATA_REG_P (operands[0]))
   else
     {
       gcc_assert (GET_CODE (operands[0]) == MEM);
   else
     {
       gcc_assert (GET_CODE (operands[0]) == MEM);
-      if (GET_CODE (operands[2]) == MEM
-         && GET_CODE (XEXP (operands[2], 0)) == PRE_DEC)
-       return "add%.l %2,%0\;addx%.l %2,%0";
       CC_STATUS_INIT;
       if (GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        {
       CC_STATUS_INIT;
       if (GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        {
 })
 
 (define_insn "subdi3"
 })
 
 (define_insn "subdi3"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,o<>,d,d,d")
-       (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0,0")
-                (match_operand:DI 2 "general_operand" "<,d,no>,d,a")))
-   (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))]
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o<>,d,d,d")
+       (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0")
+                (match_operand:DI 2 "general_operand" "d,no>,d,a")))
+   (clobber (match_scratch:SI 3 "=&d,&d,X,&d"))]
   ""
 {
   if (DATA_REG_P (operands[0]))
   ""
 {
   if (DATA_REG_P (operands[0]))
   else
     {
       gcc_assert (GET_CODE (operands[0]) == MEM);
   else
     {
       gcc_assert (GET_CODE (operands[0]) == MEM);
-      if (GET_CODE (operands[2]) == MEM
-         && GET_CODE (XEXP (operands[2], 0)) == PRE_DEC)
-       return "sub%.l %2,%0\;subx%.l %2,%0";
       CC_STATUS_INIT;
       if (GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        {
       CC_STATUS_INIT;
       if (GET_CODE (XEXP (operands[0], 0)) == POST_INC)
        {