aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>1999-03-27 20:52:02 +0000
committerJohn Wehle <wehle@gcc.gnu.org>1999-03-27 20:52:02 +0000
commit94b596a711af0e33849bf9cd4167246693fb5397 (patch)
tree4117d776427500465758362a37417fdc0d0eb60f /gcc
parentb9ae34718a346c0a4393f2688ab4c21ce189292e (diff)
downloadgcc-94b596a711af0e33849bf9cd4167246693fb5397.zip
gcc-94b596a711af0e33849bf9cd4167246693fb5397.tar.gz
gcc-94b596a711af0e33849bf9cd4167246693fb5397.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c15
-rw-r--r--gcc/config/i386/i386.md35
3 files changed, 23 insertions, 32 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 99c5e1e..1e95cfd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a989cac..e9da36b 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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:
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index be4f0da..d2137fe 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -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")