i386.md (movdicc+3, movdicc+4): Rewrite using split_di.
authorJohn Wehle <john@feith.com>
Sat, 27 Mar 1999 20:52:02 +0000 (20:52 +0000)
committerJohn Wehle <wehle@gcc.gnu.org>
Sat, 27 Mar 1999 20:52:02 +0000 (20:52 +0000)
* i386.md (movdicc+3, movdicc+4): Rewrite using split_di.
* i386.c (output_int_conditional_move): Delete unused code.

From-SVN: r26026

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index 99c5e1e..1e95cfd 100644 (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.
index a989cac..e9da36b 100644 (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:
index be4f0da..d2137fe 100644 (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")