Commit 94b596a7 by John Wehle Committed by John Wehle

i386.md (movdicc+3, movdicc+4): Rewrite using split_di.

	* i386.md (movdicc+3, movdicc+4): Rewrite using split_di.
	* i386.c (output_int_conditional_move): Delete unused code.

From-SVN: r26026
parent b9ae3471
Sat Mar 27 23:37:40 EST 1999 John Wehle (john@feith.com)
* i386.md (movdicc+3, movdicc+4): Rewrite using split_di.
* i386.c (output_int_conditional_move): Delete unused code.
Sat Mar 27 21:17:36 1999 David Edelsohn <edelsohn@gnu.org> Sat Mar 27 21:17:36 1999 David Edelsohn <edelsohn@gnu.org>
* rs6000/{aix41.h,aix43.h} (ASM_CPU_SPEC): Add 604e. * rs6000/{aix41.h,aix43.h} (ASM_CPU_SPEC): Add 604e.
......
...@@ -5517,8 +5517,6 @@ output_int_conditional_move (which_alternative, operands) ...@@ -5517,8 +5517,6 @@ output_int_conditional_move (which_alternative, operands)
rtx operands[]; rtx operands[];
{ {
int code = GET_CODE (operands[1]); 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 /* This is very tricky. We have to do it right. For a code segement
like: like:
...@@ -5538,29 +5536,16 @@ output_int_conditional_move (which_alternative, operands) ...@@ -5538,29 +5536,16 @@ output_int_conditional_move (which_alternative, operands)
&& (cc_prev_status.flags & CC_NO_OVERFLOW)) && (cc_prev_status.flags & CC_NO_OVERFLOW))
return NULL_PTR; 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) switch (which_alternative)
{ {
case 0: case 0:
/* r <- cond ? arg : r */ /* r <- cond ? arg : r */
output_asm_insn (AS2 (cmov%C1,%2,%0), operands); output_asm_insn (AS2 (cmov%C1,%2,%0), operands);
if (mode == DImode)
output_asm_insn (AS2 (cmov%C1,%2,%0), xops);
break; break;
case 1: case 1:
/* r <- cond ? r : arg */ /* r <- cond ? r : arg */
output_asm_insn (AS2 (cmov%c1,%3,%0), operands); output_asm_insn (AS2 (cmov%c1,%3,%0), operands);
if (mode == DImode)
output_asm_insn (AS2 (cmov%c1,%3,%0), xops);
break; break;
default: default:
......
...@@ -7840,10 +7840,15 @@ byte_xor_operation: ...@@ -7840,10 +7840,15 @@ byte_xor_operation:
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
(set (match_dup 0) (set (match_dup 5)
(if_then_else:DI (match_op_dup 1 [(cc0) (const_int 0)]) (if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
(match_dup 3) (match_dup 4)))] (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 (define_split
[(set (match_operand:DI 0 "register_operand" "=&r,&r") [(set (match_operand:DI 0 "register_operand" "=&r,&r")
...@@ -7854,19 +7859,15 @@ byte_xor_operation: ...@@ -7854,19 +7859,15 @@ byte_xor_operation:
(match_operand:DI 5 "nonimmediate_operand" "0,ro")))] (match_operand:DI 5 "nonimmediate_operand" "0,ro")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3))) [(set (cc0) (compare (match_dup 2) (match_dup 3)))
(set (match_dup 0) (set (match_dup 6)
(if_then_else:DI (match_op_dup 1 [(cc0) (const_int 0)]) (if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
(match_dup 4) (match_dup 5)))] (match_dup 8) (match_dup 10)))
"") (set (match_dup 7)
(if_then_else:SI (match_op_dup 1 [(cc0) (const_int 0)])
(define_insn "" (match_dup 9) (match_dup 11)))]
[(set (match_operand:DI 0 "register_operand" "=&r,&r") "split_di (&operands[0], 1, &operands[6], &operands[7]);
(if_then_else:DI (match_operator 1 "comparison_operator" split_di (&operands[4], 1, &operands[8], &operands[9]);
[(cc0) (const_int 0)]) split_di (&operands[5], 1, &operands[10], &operands[11]);")
(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);")
(define_insn "strlensi_unroll" (define_insn "strlensi_unroll"
[(set (match_operand:SI 0 "register_operand" "=&r,&r") [(set (match_operand:SI 0 "register_operand" "=&r,&r")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment