OSDN Git Service

* config/h8300/h8300.md (a peephole2): Generalize to accept GT
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Apr 2003 11:59:42 +0000 (11:59 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Apr 2003 11:59:42 +0000 (11:59 +0000)
and LE.
(another peephole2): Likewise.

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

gcc/ChangeLog
gcc/config/h8300/h8300.md

index 4f0d83f..c9ba702 100644 (file)
@@ -1,3 +1,9 @@
+2003-04-03  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * config/h8300/h8300.md (a peephole2): Generalize to accept GT
+       and LE.
+       (another peephole2): Likewise.
+
 2003-04-03  Nick Clifton  <nickc@redhat.com>
 
        * config/sparc/sol2-bi.h (ASM_CPU64_DEFAULT_SPEC): Add -TSO.
index 190980f..b27a077 100644 (file)
        (compare (match_operand:HI 0 "register_operand" "")
                 (const_int 255)))
    (set (pc)
-       (if_then_else (match_operator 1 "gtuleu_operator"
+       (if_then_else (match_operator 1 "gtle_operator"
                        [(cc0) (const_int 0)])
                      (label_ref (match_operand 2 "" ""))
                      (pc)))]
        (and:HI (match_dup 0)
                (const_int -256)))
    (set (pc)
-       (if_then_else (match_dup 4)
+       (if_then_else (match_dup 3)
                      (label_ref (match_dup 2))
                      (pc)))]
-  "operands[4] = ((GET_CODE (operands[1]) == GTU) ?
-                 gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
-                 gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));")
+  "switch (GET_CODE (operands[1]))
+     {
+     case GTU:
+       operands[3] = gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx);
+       break;
+     case LEU:
+       operands[3] = gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx);
+       break;
+     default:
+       operands[3] = operands[1];
+       break;
+     }")
 
 ;; (compare (reg:SI) (const_int)) takes 6 bytes, so we try to achieve
 ;; the equivalent with shorter sequences.  Here is the summary.  Cases
        (compare (match_operand:SI 0 "register_operand" "")
                 (const_int 65535)))
    (set (pc)
-       (if_then_else (match_operator 1 "gtuleu_operator"
+       (if_then_else (match_operator 1 "gtle_operator"
                        [(cc0) (const_int 0)])
                      (label_ref (match_operand 2 "" ""))
                      (pc)))]
        (and:SI (match_dup 0)
                (const_int -65536)))
    (set (pc)
-       (if_then_else (match_dup 4)
+       (if_then_else (match_dup 3)
                      (label_ref (match_dup 2))
                      (pc)))]
-  "operands[4] = ((GET_CODE (operands[1]) == GTU) ?
-                 gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
-                 gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));")
+  "switch (GET_CODE (operands[1]))
+     {
+     case GTU:
+       operands[3] = gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx);
+       break;
+     case LEU:
+       operands[3] = gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx);
+       break;
+     default:
+       operands[3] = operands[1];
+       break;
+     }")
 
 ;; For constants like -1, -2, 1, 2, it is still cheaper to make a copy
 ;; of the register being tested, do the subtraction on the copy, and