h8300.md (*tst_extzv_bitqi_1_n): Accept the test of bit 7.
authorKazu Hirata <kazu@cs.umass.edu>
Fri, 28 Feb 2003 13:34:31 +0000 (13:34 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 28 Feb 2003 13:34:31 +0000 (13:34 +0000)
* config/h8300/h8300.md (*tst_extzv_bitqi_1_n): Accept the
test of bit 7.
(*tst_extzv_memqi_1_n): Likewise.
(a peephole2): New.

From-SVN: r63558

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

index 24dbd2d45b6c8ab8398ba5a02c0465940a220f4b..a4f86aa9d17748eb2fe793685aeb7881da370a9a 100644 (file)
@@ -1,3 +1,10 @@
+2003-02-28  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * config/h8300/h8300.md (*tst_extzv_bitqi_1_n): Accept the
+       test of bit 7.
+       (*tst_extzv_memqi_1_n): Likewise.
+       (a peephole2): New.
+
 2002-02-28  Richard Sandiford  <rsandifo@redhat.com>
 
        * config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Wrap in
index beb4534c9036a35e17dea5cb0c65ed921960175d..162b9a3f95d6e5e54d6febf363227d0abb08341a 100644 (file)
   [(set (cc0) (zero_extract:SI (match_operand:QI 0 "bit_operand" "r,U")
                               (const_int 1)
                               (match_operand 1 "const_int_operand" "n,n")))]
-  "(TARGET_H8300H || TARGET_H8300S)
-   && INTVAL (operands[1]) != 7"
+  "(TARGET_H8300H || TARGET_H8300S)"
   "btst        %Z1,%Y0"
   [(set_attr "length" "2,8")
    (set_attr "cc" "set_zn,set_zn")])
                               (match_operand 1 "const_int_operand" "n")))
    (clobber (match_scratch:QI 2 "=&r"))]
   "(TARGET_H8300H || TARGET_H8300S)
-   && !EXTRA_CONSTRAINT (operands[0], 'U')
-   && INTVAL (operands[1]) != 7"
+   && !EXTRA_CONSTRAINT (operands[0], 'U')"
   "#"
   "&& reload_completed"
   [(set (match_dup 2)
                      (pc)))]
   "")
 
+(define_peephole2
+  [(set (cc0)
+       (zero_extract:SI (match_operand:QI 0 "register_operand" "")
+                        (const_int 1)
+                        (const_int 7)))
+   (set (pc)
+       (if_then_else (match_operator 1 "eqne_operator"
+                       [(cc0) (const_int 0)])
+                     (label_ref (match_operand 2 "" ""))
+                     (pc)))]
+  "(TARGET_H8300H || TARGET_H8300S)"
+  [(set (cc0)
+        (match_dup 0))
+   (set (pc)
+       (if_then_else (match_op_dup 3 [(cc0) (const_int 0)])
+                     (label_ref (match_dup 2))
+                     (pc)))]
+  "operands[3] = ((GET_CODE (operands[1]) == EQ)
+                 ? gen_rtx_GE (VOIDmode, cc0_rtx, const0_rtx)
+                 : gen_rtx_LT (VOIDmode, cc0_rtx, const0_rtx));")
+
 ;; (compare (reg:SI) (const_int)) takes 6 bytes, so we try to achieve
 ;; the equivalent with shorter sequences.  Here is the summary.  Cases
 ;; are grouped for each define_peephole2.