OSDN Git Service

* config/rs6000/rs6000.md (andsi3): Add attribute "compare" for
[pf3gnuchains/gcc-fork.git] / gcc / optabs.c
index 8354f78..cc0627b 100644 (file)
@@ -834,11 +834,19 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
      force expensive constants into a register.  */
   if (CONSTANT_P (op0) && optimize
       && rtx_cost (op0, binoptab->code) > COSTS_N_INSNS (1))
-    op0 = force_reg (mode, op0);
+    {
+      if (GET_MODE (op0) != VOIDmode)
+       op0 = convert_modes (mode, VOIDmode, op0, unsignedp);
+      op0 = force_reg (mode, op0);
+    }
 
   if (CONSTANT_P (op1) && optimize
       && ! shift_op && rtx_cost (op1, binoptab->code) > COSTS_N_INSNS (1))
-    op1 = force_reg (mode, op1);
+    {
+      if (GET_MODE (op1) != VOIDmode)
+       op1 = convert_modes (mode, VOIDmode, op1, unsignedp);
+      op1 = force_reg (mode, op1);
+    }
 
   /* Record where to delete back to if we backtrack.  */
   last = get_last_insn ();
@@ -5145,7 +5153,7 @@ expand_vec_cond_expr (tree vec_cond_expr, rtx target)
   if (!target)
     target = gen_reg_rtx (mode);
 
-  /* Get comparision rtx. First expand both cond expr operands.  */
+  /* Get comparison rtx.  First expand both cond expr operands.  */
   comparison = vector_compare_rtx (TREE_OPERAND (vec_cond_expr, 0), 
                                   unsignedp, icode);
   cc_op0 = XEXP (comparison, 0);