OSDN Git Service

(ix86_expand_binary_operator): Allow for operand1 of MINUS to be CONST_INT
authorcoxs <coxs@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Feb 1996 16:59:27 +0000 (16:59 +0000)
committercoxs <coxs@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Feb 1996 16:59:27 +0000 (16:59 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@11289 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/i386/i386.c

index aef0c8e..212c67b 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