From a4e9467d735cfdbcbe64902f9a3dd30c440c71fb Mon Sep 17 00:00:00 2001 From: Roman Zippel Date: Wed, 10 Mar 2004 05:07:45 +0000 Subject: [PATCH] re PR bootstrap/12371 ([m68k-linux] bootstrap error in make compare) 2004-03-10 Roman Zippel 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 | 10 ++++++++++ gcc/config/m68k/m68k.c | 12 ++++++++++++ gcc/config/m68k/m68k.h | 29 ++++++++++++++++++++++------- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 65b91f7f5a3..e6a791c8c6a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2004-03-10 Roman Zippel + + 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 * config/ia64/ia64.md (divsi3): Fix algorithm. diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index f289185c952..69a62a6ee44 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -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. */ diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 6f05bec1b86..83ff83e3b2e 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -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. */ -- 2.30.2