(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