sh.md (cmpgtdi_t): Must be split.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Tue, 25 Jul 2000 22:10:38 +0000 (22:10 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Tue, 25 Jul 2000 22:10:38 +0000 (23:10 +0100)
* sh.md (cmpgtdi_t): Must be split.
(cmpgtdi_t+1): New splitter.

From-SVN: r35257

gcc/ChangeLog
gcc/config/sh/sh.md

index 90527ac01fdbf3f1a854a1c0acc812cfbc62a974..346c8f80d9921864b4b6750781a5092b7acf7ad0 100644 (file)
@@ -1,3 +1,8 @@
+Tue Jul 25 23:08:33 2000  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md (cmpgtdi_t): Must be split.
+       (cmpgtdi_t+1): New splitter.
+
 2000-07-25  Zack Weinberg  <zack@wolery.cumb.org>
 
        * cpplib.c (_cpp_check_directive): Issue -Wtraditional
index 49631d30af2b8e2f8e34b9d0c296d8025ca9a23d..5e73c1f90c4c53b90292a978aa3be102fcbc33fc 100644 (file)
   [(set (reg:SI 18) (eq:SI (match_operand:DI 0 "arith_reg_operand" "r,r")
                           (match_operand:DI 1 "arith_reg_or_0_operand" "N,r")))]
   ""
-  "*
-  return output_branchy_insn
-   (EQ,
-    (which_alternative
-     ? \"cmp/eq\\t%S1,%S0\;bf\\t%l9\;cmp/eq\\t%R1,%R0\"
-     : \"tst\\t%S0,%S0\;bf\\t%l9\;tst\\t%R0,%R0\"),
-    insn, operands);"
+  "#"
   [(set_attr "length" "6")
    (set_attr "type" "arith3b")])
 
+(define_split
+  [(set (reg:SI 18) (eq:SI (match_operand:DI 0 "arith_reg_operand" "r,r")
+                          (match_operand:DI 1 "arith_reg_or_0_operand" "N,r")))]
+  "reload_completed"
+  [(set (reg:SI 18) (eq:SI (match_dup 2) (match_dup 3)))
+   (set (pc) (if_then_else (ne (reg:SI 18) (const_int 0))
+                          (label_ref (match_dup 6))
+                          (pc)))
+   (set (reg:SI 18) (eq:SI (match_dup 4) (match_dup 5)))
+   (match_dup 6)]
+  "
+{
+  operands[2]
+    = gen_rtx_REG (SImode,
+                  true_regnum (operands[0]) + (TARGET_LITTLE_ENDIAN ? 1 : 0));
+  operands[3]
+    = (operands[1] == const0_rtx
+       ? const0_rtx
+       : gen_rtx_REG (SImode,
+                     true_regnum (operands[1])
+                     + (TARGET_LITTLE_ENDIAN ? 1 : 0)));
+  operands[4] = gen_lowpart (SImode, operands[0]);
+  operands[5] = gen_lowpart (SImode, operands[1]);
+  operands[6] = gen_label_rtx ();
+}")
+
 (define_insn "cmpgtdi_t"
   [(set (reg:SI 18) (gt:SI (match_operand:DI 0 "arith_reg_operand" "r,r")
                           (match_operand:DI 1 "arith_reg_or_0_operand" "r,N")))]