diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24dbd2d45b6..a4f86aa9d17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-02-28 Kazu Hirata + + * 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 * config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Wrap in diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index beb4534c903..162b9a3f95d 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -592,8 +592,7 @@ [(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")]) @@ -604,8 +603,7 @@ (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) @@ -3514,6 +3512,27 @@ (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.