sh.md (cmpeqsi_ior_t, [...]): New insns.
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 30 Aug 2000 21:49:07 +0000 (21:49 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Wed, 30 Aug 2000 21:49:07 +0000 (21:49 +0000)
* config/sh/sh.md (cmpeqsi_ior_t, cmpeqsi_and_t): New insns.
(cmpeqdi_t splitter): Use cmpeqsi_and_t instead of emitting jumps
and labels.

From-SVN: r36072

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

index 041371447dee042f88fe968ae71d1c38e84d9757..2fff75873c1c641de3e471156908cf9c626681d4 100644 (file)
@@ -1,3 +1,9 @@
+2000-08-30  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/sh/sh.md (cmpeqsi_ior_t, cmpeqsi_and_t): New insns.
+       (cmpeqdi_t splitter): Use cmpeqsi_and_t instead of emitting jumps
+       and labels.
+
 2000-08-30  J. David Anglin  <dave@hiauly1.hia.nrc.ca>
 
        * fixinc/gnu-regex.c: Don't define `const'.
index 051acb8e1a737784a7589d07b6c175966c3e6280..fc3068491241fa69703c869f3acc068312cc0961 100644 (file)
        cmp/eq  %1,%0
        cmp/eq  %1,%0")
 
+(define_insn "cmpeqsi_ior_t"
+  [(set (reg:SI 18)
+       (ior:SI (reg:SI 18)
+               (eq:SI (match_operand:SI 0 "arith_reg_operand" "r,z,r")
+                      (match_operand:SI 1 "arith_operand" "N,rI,r"))))]
+  ""
+  "@
+       bt .+4\;tst     %0,%0
+       bt .+4\;cmp/eq  %1,%0
+       bt .+4\;cmp/eq  %1,%0"
+  [(set_attr "length" "4")])
+
+(define_insn "cmpeqsi_and_t"
+  [(set (reg:SI 18)
+       (and:SI (reg:SI 18)
+               (eq:SI (match_operand:SI 0 "arith_reg_operand" "r,z,r")
+                      (match_operand:SI 1 "arith_operand" "N,rI,r"))))]
+  ""
+  "@
+       bf .+4\;tst     %0,%0
+       bf .+4\;cmp/eq  %1,%0
+       bf .+4\;cmp/eq  %1,%0"
+  [(set_attr "length" "4")])
+
 (define_insn "cmpgtsi_t"
   [(set (reg:SI 18) (gt:SI (match_operand:SI 0 "arith_reg_operand" "r,r")
                           (match_operand:SI 1 "arith_reg_or_0_operand" "r,N")))]
                           (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 (eq (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)]
+   (set (reg:SI 18)
+       (and:SI (reg:SI 18)
+               (eq:SI (match_dup 4) (match_dup 5))))]
   "
 {
   operands[2]
                      + (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"