(ix86_expand_binary_operator): Allow for operand1 of MINUS to be CONST_INT
authorStan Cox <coxs@gnu.org>
Fri, 16 Feb 1996 16:59:27 +0000 (16:59 +0000)
committerStan Cox <coxs@gnu.org>
Fri, 16 Feb 1996 16:59:27 +0000 (16:59 +0000)
From-SVN: r11289

gcc/config/i386/i386.c

index aef0c8ec4796d4408f52a519fba6da27153caa5a..212c67b3aa032f256fb750fdd84be3269803f8e3 100644 (file)
@@ -1560,6 +1560,14 @@ ix86_expand_binary_operator (code, mode, operands)
 
       if (GET_CODE (operands[2]) == MEM)
        operands[2] = force_reg (GET_MODE (operands[2]), operands[2]);
+
+      if (GET_CODE (operands[1]) == CONST_INT && code == MINUS)
+       {
+         rtx temp = gen_reg_rtx (GET_MODE (operands[0]));
+         emit_move_insn (temp, operands[1]);
+         operands[1] = temp;
+         return TRUE;
+       }         
     }
 
   if (!ix86_binary_operator_ok (code, mode, operands))
@@ -1584,6 +1592,14 @@ ix86_expand_binary_operator (code, mode, operands)
              modified = TRUE;
            }
 
+         if (GET_CODE (operands[1]) == CONST_INT && code == MINUS)
+           {
+             rtx temp = gen_reg_rtx (GET_MODE (operands[0]));
+             emit_move_insn (temp, operands[1]);
+             operands[1] = temp;
+             return TRUE;
+           }     
+
          if (modified && !ix86_binary_operator_ok (code, mode, operands))
            return FALSE;
        }
@@ -1603,7 +1619,9 @@ ix86_binary_operator_ok (code, mode, operands)
      enum machine_mode mode;
      rtx operands[3];
 {
-  return TRUE;
+  return (GET_CODE (operands[1]) != MEM && GET_CODE (operands[2]) != MEM
+         && GET_CODE (operands[1]) != CONST_INT)
+    || GET_RTX_CLASS (code) == 'c';
 }
 \f
 /* Attempt to expand a unary operator.  Make the expansion closer to the