OSDN Git Service

2010-04-06 Matthias Klose <doko@ubuntu.com>
[pf3gnuchains/gcc-fork.git] / gcc / genemit.c
index 35e5691..9df559b 100644 (file)
@@ -1,6 +1,6 @@
 /* Generate code from machine description to emit insns as rtl.
    Copyright (C) 1987, 1988, 1991, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
-   2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -520,12 +520,13 @@ gen_expand (rtx expand)
         (unless we aren't going to use them at all).  */
       if (XVEC (expand, 1) != 0)
        {
-         for (i = 0; i < operands; i++)
-           printf ("    operand%d = operands[%d];\n", i, i);
-         for (; i <= max_dup_opno; i++)
-           printf ("    operand%d = operands[%d];\n", i, i);
-         for (; i <= max_scratch_opno; i++)
-           printf ("    operand%d = operands[%d];\n", i, i);
+         for (i = 0;
+              i < MAX (operands, MAX (max_scratch_opno, max_dup_opno) + 1);
+              i++)
+           {
+             printf ("    operand%d = operands[%d];\n", i, i);
+             printf ("    (void) operand%d;\n", i);
+           }
        }
       printf ("  }\n");
     }
@@ -647,7 +648,10 @@ gen_split (rtx split)
 
   /* Output code to copy the arguments back out of `operands'  */
   for (i = 0; i < operands; i++)
-    printf ("  operand%d = operands[%d];\n", i, i);
+    {
+      printf ("  operand%d = operands[%d];\n", i, i);
+      printf ("  (void) operand%d;\n", i);
+    }
 
   /* Output code to construct the rtl for the instruction bodies.
      Use emit_insn to add them to the sequence being accumulated.
@@ -782,9 +786,7 @@ output_peephole2_scratches (rtx split)
 {
   int i;
   int insn_nr = 0;
-
-  printf ("  HARD_REG_SET _regs_allocated;\n");
-  printf ("  CLEAR_HARD_REG_SET (_regs_allocated);\n");
+  bool first = true;
 
   for (i = 0; i < XVECLEN (split, 0); i++)
     {
@@ -803,6 +805,13 @@ output_peephole2_scratches (rtx split)
            else if (GET_CODE (XVECEXP (split, 0, j)) != MATCH_SCRATCH)
              cur_insn_nr++;
 
+         if (first)
+           {
+             printf ("  HARD_REG_SET _regs_allocated;\n");
+             printf ("  CLEAR_HARD_REG_SET (_regs_allocated);\n");
+             first = false;
+           }
+
          printf ("  if ((operands[%d] = peep2_find_free_register (%d, %d, \"%s\", %smode, &_regs_allocated)) == NULL_RTX)\n\
     return NULL;\n",
                  XINT (elt, 0),
@@ -844,7 +853,6 @@ from the machine description file `md'.  */\n\n");
   printf ("#include \"function.h\"\n");
   printf ("#include \"expr.h\"\n");
   printf ("#include \"optabs.h\"\n");
-  printf ("#include \"real.h\"\n");
   printf ("#include \"dfp.h\"\n");
   printf ("#include \"flags.h\"\n");
   printf ("#include \"output.h\"\n");