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
This commit is contained in:
John Wehle 1999-03-27 20:52:02 +00:00 committed by John Wehle
parent b9ae34718a
commit 94b596a711
3 changed files with 23 additions and 32 deletions

View File

@ -1,3 +1,8 @@
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>
* rs6000/{aix41.h,aix43.h} (ASM_CPU_SPEC): Add 604e.

View File

@ -5517,8 +5517,6 @@ output_int_conditional_move (which_alternative, operands)
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:
@ -5538,29 +5536,16 @@ output_int_conditional_move (which_alternative, operands)
&& (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:

View File

@ -7840,10 +7840,15 @@ byte_xor_operation:
"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")
@ -7854,19 +7859,15 @@ byte_xor_operation:
(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")