rtx operands[];
{
int code = GET_CODE (operands[1]);
- enum machine_mode mode;
- rtx xops[4];
/* This is very tricky. We have to do it right. For a code segement
like:
&& (cc_prev_status.flags & CC_NO_OVERFLOW))
return NULL_PTR;
- mode = GET_MODE (operands [0]);
- if (mode == DImode)
- {
- xops [0] = gen_rtx_SUBREG (SImode, operands [0], 1);
- xops [1] = operands [1];
- xops [2] = gen_rtx_SUBREG (SImode, operands [2], 1);
- xops [3] = gen_rtx_SUBREG (SImode, operands [3], 1);
- }
-
switch (which_alternative)
{
case 0:
/* r <- cond ? arg : r */
output_asm_insn (AS2 (cmov%C1,%2,%0), operands);
- if (mode == DImode)
- output_asm_insn (AS2 (cmov%C1,%2,%0), xops);
break;
case 1:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (cmov%c1,%3,%0), operands);
- if (mode == DImode)
- output_asm_insn (AS2 (cmov%c1,%3,%0), xops);
break;
default:
"TARGET_CMOVE && reload_completed"
[(set (cc0)
(match_dup 2))
- (set (match_dup 0)
- (if_then_else:DI (match_op_dup 1 [(cc0) (const_int 0)])
- (match_dup 3) (match_dup 4)))]
- "")
+ (set (match_dup 5)
+ (if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
+ (match_dup 7) (match_dup 9)))
+ (set (match_dup 6)
+ (if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
+ (match_dup 8) (match_dup 10)))]
+ "split_di (&operands[0], 1, &operands[5], &operands[6]);
+ split_di (&operands[3], 1, &operands[7], &operands[8]);
+ split_di (&operands[4], 1, &operands[9], &operands[10]);")
(define_split
[(set (match_operand:DI 0 "register_operand" "=&r,&r")
(match_operand:DI 5 "nonimmediate_operand" "0,ro")))]
"TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3)))
- (set (match_dup 0)
- (if_then_else:DI (match_op_dup 1 [(cc0) (const_int 0)])
- (match_dup 4) (match_dup 5)))]
- "")
-
-(define_insn ""
- [(set (match_operand:DI 0 "register_operand" "=&r,&r")
- (if_then_else:DI (match_operator 1 "comparison_operator"
- [(cc0) (const_int 0)])
- (match_operand:DI 2 "nonimmediate_operand" "ro,0")
- (match_operand:DI 3 "nonimmediate_operand" "0,ro")))]
- "TARGET_CMOVE && reload_completed"
- "* return output_int_conditional_move (which_alternative, operands);")
+ (set (match_dup 6)
+ (if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
+ (match_dup 8) (match_dup 10)))
+ (set (match_dup 7)
+ (if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
+ (match_dup 9) (match_dup 11)))]
+ "split_di (&operands[0], 1, &operands[6], &operands[7]);
+ split_di (&operands[4], 1, &operands[8], &operands[9]);
+ split_di (&operands[5], 1, &operands[10], &operands[11]);")
(define_insn "strlensi_unroll"
[(set (match_operand:SI 0 "register_operand" "=&r,&r")