OSDN Git Service

(NEEDS_UNTYPED_CALL): Define.
[pf3gnuchains/gcc-fork.git] / gcc / reg-stack.c
index 5277cd2..7c92c41 100644 (file)
@@ -442,8 +442,7 @@ get_true_reg (pat)
   while (GET_CODE (*pat) == SUBREG
         || GET_CODE (*pat) == FLOAT
         || GET_CODE (*pat) == FIX
-        || GET_CODE (*pat) == FLOAT_EXTEND
-        || GET_CODE (*pat) == FLOAT_TRUNCATE)
+        || GET_CODE (*pat) == FLOAT_EXTEND)
     pat = & XEXP (*pat, 0);
 
   return pat;
@@ -817,7 +816,7 @@ record_asm_reg_life (insn, regstack, operands, constraints,
   bzero (reg_used_as_output, sizeof (reg_used_as_output));
   for (i = 0; i < n_outputs; i++)
     if (STACK_REG_P (operands[i]))
-      if (reg_class_size[operand_class[i]] != 1)
+      if (reg_class_size[(int) operand_class[i]] != 1)
        {
          error_for_asm
            (insn, "Output constraint %d must specify a single register", i);
@@ -1588,6 +1587,9 @@ emit_swap_insn (insn, regstack, reg)
        return;
     }
 
+  if (sets_cc0_p (PATTERN (i1)))
+    link_cc0_insns (i1);
+
   swap_rtx = gen_swapdf (FP_mode_reg[hard_regno][(int) DFmode],
                         FP_mode_reg[FIRST_STACK_REG][(int) DFmode]);
   swap_insn = emit_insn_after (swap_rtx, i1);
@@ -1773,9 +1775,12 @@ compare_for_stack_reg (insn, regstack, pat)
     {
       rtx temp, next;
 
-      temp = *src1;
-      *src1 = *src2;
-      *src2 = temp;
+      temp = XEXP (SET_SRC (pat), 0);
+      XEXP (SET_SRC (pat), 0) = XEXP (SET_SRC (pat), 1);
+      XEXP (SET_SRC (pat), 1) = temp;
+
+      src1 = get_true_reg (&XEXP (SET_SRC (pat), 0));
+      src2 = get_true_reg (&XEXP (SET_SRC (pat), 1));
 
       next = next_cc0_user (insn);
       if (next == NULL_RTX)
@@ -1783,6 +1788,7 @@ compare_for_stack_reg (insn, regstack, pat)
 
       swap_rtx_condition (PATTERN (next));
       INSN_CODE (next) = -1;
+      INSN_CODE (insn) = -1;
     }
 
   /* We will fix any death note later. */
@@ -1893,6 +1899,7 @@ subst_stack_regs_pat (insn, regstack, pat)
 
        /* Fall through. */
 
+      case FLOAT_TRUNCATE:
       case SQRT:
       case ABS:
       case NEG: