re PR bootstrap/12371 ([m68k-linux] bootstrap error in make compare)
authorRoman Zippel <zippel@linux-m68k.org>
Wed, 10 Mar 2004 05:07:45 +0000 (05:07 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Wed, 10 Mar 2004 05:07:45 +0000 (21:07 -0800)
2004-03-10  Roman Zippel  <zippel@linux-m68k.org>

        PR bootstrap/12371
        * config/m68k/m68k.h (FIXED_REGISTERS): Add arg pointer.
        (CALL_USED_REGISTERS): Likewise.
        (REG_CLASS_CONTENTS): Likewise.
        (REG_ALLOC_ORDER): New.
        (REGNO_REG_CLASS): Use regno_reg_class.
        * config/m68k/m68k.c: Add regno_reg_class array.

From-SVN: r79221

gcc/ChangeLog
gcc/config/m68k/m68k.c
gcc/config/m68k/m68k.h

index 65b91f7f5a3f4bc9ec1e5741d8f77ffbc7a72642..e6a791c8c6ac0be81adf8fc733d368c852aa6a6f 100644 (file)
@@ -1,3 +1,13 @@
+2004-03-10  Roman Zippel  <zippel@linux-m68k.org>
+
+       PR bootstrap/12371
+       * config/m68k/m68k.h (FIXED_REGISTERS): Add arg pointer.
+       (CALL_USED_REGISTERS): Likewise.
+        (REG_CLASS_CONTENTS): Likewise.
+       (REG_ALLOC_ORDER): New.
+       (REGNO_REG_CLASS): Use regno_reg_class.
+       * config/m68k/m68k.c: Add regno_reg_class array.
+
 2004-03-09  Steve Ellcey  <sje@cup.hp.com>
 
        * config/ia64/ia64.md (divsi3): Fix algorithm.
index f289185c9529670e2fa259ad1c59dcad403840c3..69a62a6ee446eee192e882fc0502f94e52dbbd9d 100644 (file)
@@ -44,6 +44,18 @@ Boston, MA 02111-1307, USA.  */
 #include "debug.h"
 #include "flags.h"
 
+enum reg_class regno_reg_class[] =
+{
+  DATA_REGS, DATA_REGS, DATA_REGS, DATA_REGS,
+  DATA_REGS, DATA_REGS, DATA_REGS, DATA_REGS,
+  ADDR_REGS, ADDR_REGS, ADDR_REGS, ADDR_REGS,
+  ADDR_REGS, ADDR_REGS, ADDR_REGS, ADDR_REGS,
+  FP_REGS, FP_REGS, FP_REGS, FP_REGS,
+  FP_REGS, FP_REGS, FP_REGS, FP_REGS,
+  ADDR_REGS
+};
+
+
 /* The ASM_DOT macro allows easy string pasting to handle the differences
    between MOTOROLA and MIT syntaxes in asm_fprintf(), which doesn't
    support the %. option.  */
index 6f05bec1b86705e99fb9a4b333e9069e1a3bd4ef..83ff83e3b2e9388834f079763f1223decf48d32b 100644 (file)
@@ -486,7 +486,10 @@ extern int target_flags;
                                \
   /* Floating point registers  \
      (if available).  */       \
-  0, 0, 0, 0, 0, 0, 0, 0 }
+  0, 0, 0, 0, 0, 0, 0, 0,      \
+                               \
+  /* Arg pointer.  */          \
+  1 }
 
 /* 1 for registers not available across function calls.
    These must include the FIXED_REGISTERS and also any
@@ -497,7 +500,18 @@ extern int target_flags;
 #define CALL_USED_REGISTERS \
  {1, 1, 0, 0, 0, 0, 0, 0,   \
   1, 1, 0, 0, 0, 0, 0, 1,   \
-  1, 1, 0, 0, 0, 0, 0, 0 }
+  1, 1, 0, 0, 0, 0, 0, 0, 1 }
+
+#define REG_ALLOC_ORDER                \
+{ /* d0/d1/a0/a1 */            \
+  0, 1, 8, 9,                  \
+  /* d2-d7 */                  \
+  2, 3, 4, 5, 6, 7,            \
+  /* a2-a7/arg */              \
+  10, 11, 12, 13, 14, 15, 24,  \
+  /* fp0-fp7 */                        \
+  16, 17, 18, 19, 20, 21, 22, 23\
+}
 
 
 /* Make sure everything's fine if we *don't* have a given processor.
@@ -636,12 +650,12 @@ enum reg_class {
 {                                      \
   {0x00000000},  /* NO_REGS */         \
   {0x000000ff},  /* DATA_REGS */       \
-  {0x0000ff00},  /* ADDR_REGS */       \
+  {0x0100ff00},  /* ADDR_REGS */       \
   {0x00ff0000},  /* FP_REGS */         \
-  {0x0000ffff},  /* GENERAL_REGS */    \
+  {0x0100ffff},  /* GENERAL_REGS */    \
   {0x00ff00ff},  /* DATA_OR_FP_REGS */ \
-  {0x00ffff00},  /* ADDR_OR_FP_REGS */ \
-  {0x00ffffff},  /* ALL_REGS */                \
+  {0x01ffff00},  /* ADDR_OR_FP_REGS */ \
+  {0x01ffffff},  /* ALL_REGS */                \
 }
 
 /* The same information, inverted:
@@ -649,7 +663,8 @@ enum reg_class {
    reg number REGNO.  This could be a conditional expression
    or could index an array.  */
 
-#define REGNO_REG_CLASS(REGNO) (((REGNO)>>3)+1)
+extern enum reg_class regno_reg_class[];
+#define REGNO_REG_CLASS(REGNO) (regno_reg_class[(REGNO)])
 
 /* The class value for index registers, and the one for base regs.  */