(const_string "SI")
(const_string "<MODE>")))])
-(define_insn_and_split "*scc_bt<mode>"
- [(set (match_operand:QI 0 "nonimmediate_operand")
- (match_operator 1 "bt_comparison_operator"
- [(zero_extract:SWI48
- (match_operand:SWI48 2 "nonimmediate_operand")
- (const_int 1)
- (match_operand:SI 3 "nonmemory_operand"))
- (const_int 0)]))
- (clobber (reg:CC FLAGS_REG))]
- "(TARGET_USE_BT || optimize_function_for_size_p (cfun))
- && (CONST_INT_P (operands[3])
- ? (INTVAL (operands[3]) < GET_MODE_BITSIZE (<MODE>mode)
- && INTVAL (operands[3])
- >= (optimize_function_for_size_p (cfun) ? 8 : 32))
- : !memory_operand (operands[2], <MODE>mode))
- && can_create_pseudo_p ()"
- "#"
- "&& 1"
- [(set (reg:CCC FLAGS_REG)
- (compare:CCC
- (zero_extract:SWI48
- (match_dup 2)
- (const_int 1)
- (match_dup 3))
- (const_int 0)))
- (set (match_dup 0)
- (match_op_dup 1 [(reg:CCC FLAGS_REG) (const_int 0)]))]
-{
- operands[1] = shallow_copy_rtx (operands[1]);
- PUT_CODE (operands[1], reverse_condition (GET_CODE (operands[1])));
-})
-
-(define_insn_and_split "*scc_bt<mode>_1"
- [(set (match_operand:QI 0 "nonimmediate_operand")
- (match_operator 1 "bt_comparison_operator"
- [(zero_extract:SWI48
- (match_operand:SWI48 2 "register_operand")
- (const_int 1)
- (zero_extend:SI
- (match_operand:QI 3 "register_operand")))
- (const_int 0)]))
- (clobber (reg:CC FLAGS_REG))]
- "(TARGET_USE_BT || optimize_function_for_size_p (cfun))
- && can_create_pseudo_p ()"
- "#"
- "&& 1"
- [(set (reg:CCC FLAGS_REG)
- (compare:CCC
- (zero_extract:SWI48
- (match_dup 2)
- (const_int 1)
- (match_dup 3))
- (const_int 0)))
- (set (match_dup 0)
- (match_op_dup 1 [(reg:CCC FLAGS_REG) (const_int 0)]))]
-{
- operands[3] = lowpart_subreg (SImode, operands[3], QImode);
- operands[1] = shallow_copy_rtx (operands[1]);
- PUT_CODE (operands[1], reverse_condition (GET_CODE (operands[1])));
-})
-
-;; Avoid useless masking of bit offset operand.
-(define_insn_and_split "*scc_bt<mode>_mask"
- [(set (match_operand:QI 0 "nonimmediate_operand")
- (match_operator 1 "bt_comparison_operator"
- [(zero_extract:SWI48
- (match_operand:SWI48 2 "register_operand")
- (const_int 1)
- (and:SI
- (match_operand:SI 3 "register_operand")
- (match_operand 4 "const_int_operand")))]))
- (clobber (reg:CC FLAGS_REG))]
- "(TARGET_USE_BT || optimize_function_for_size_p (cfun))
- && (INTVAL (operands[4]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
- == GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
- "#"
- "&& 1"
- [(set (reg:CCC FLAGS_REG)
- (compare:CCC
- (zero_extract:SWI48
- (match_dup 2)
- (const_int 1)
- (match_dup 3))
- (const_int 0)))
- (set (match_dup 0)
- (match_op_dup 1 [(reg:CCC FLAGS_REG) (const_int 0)]))]
-{
- operands[1] = shallow_copy_rtx (operands[1]);
- PUT_CODE (operands[1], reverse_condition (GET_CODE (operands[1])));
-})
-
(define_insn_and_split "*jcc_bt<mode>"
[(set (pc)
(if_then_else (match_operator 0 "bt_comparison_operator"