From 0b93d20012ccc7bcd1ed034e7822edce40d13812 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Thu, 18 Jan 2007 19:31:15 +0000 Subject: [PATCH] gcc/ 200x-xx-xx Kazu Hirata Richard Sandiford * config/m68k/m68k.h (DATA_REGNO_P, ADDRESS_REGNO_P, INT_REGNO_P) (FP_REGNO_P): New macros. (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_DATA_P) (REGNO_OK_FOR_FP_P, REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P): Use them. (EH_RETURN_STACKADJ_RTX): Use A0_REG. * config/m68k/m68k.c (m68k_regno_mode_ok): Use the new REGNO macros. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120918 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/m68k/m68k.c | 6 +++--- gcc/config/m68k/m68k.h | 42 +++++++++++++++++++++++++++++++----------- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a23a4aab6d..94e18bfc326 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2007-01-18 Kazu Hirata + Richard Sandiford + + * config/m68k/m68k.h (DATA_REGNO_P, ADDRESS_REGNO_P, INT_REGNO_P) + (FP_REGNO_P): New macros. + (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_DATA_P) + (REGNO_OK_FOR_FP_P, REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P): Use them. + (EH_RETURN_STACKADJ_RTX): Use A0_REG. + * config/m68k/m68k.c (m68k_regno_mode_ok): Use the new REGNO macros. + 2007-01-18 Nathan Sidwell * config.gcc (m68k-*-aout*, m68k-*-coff*, m68020-*-elf*, m68k-*-elf*) diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index 057b3256a8d..393aec50989 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -3832,13 +3832,13 @@ m68k_hard_regno_rename_ok (unsigned int old_reg ATTRIBUTE_UNUSED, bool m68k_regno_mode_ok (int regno, enum machine_mode mode) { - if (regno < 8) + if (DATA_REGNO_P (regno)) { /* Data Registers, can hold aggregate if fits in. */ if (regno + GET_MODE_SIZE (mode) / 4 <= 8) return true; } - else if (regno < 16) + else if (ADDRESS_REGNO_P (regno)) { /* Address Registers, can't hold bytes, can hold aggregate if fits in. */ @@ -3847,7 +3847,7 @@ m68k_regno_mode_ok (int regno, enum machine_mode mode) if (regno + GET_MODE_SIZE (mode) / 4 <= 16) return true; } - else if (regno < 24) + else if (FP_REGNO_P (regno)) { /* FPU registers, hold float or complex float of long double or smaller. */ diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 434c25d76a9..382a8bc074e 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -741,14 +741,33 @@ __transfer_from_trampoline () \ /* Macros to check register numbers against specific register classes. */ -#define REGNO_OK_FOR_INDEX_P(REGNO) \ -((REGNO) < 16 || (unsigned) reg_renumber[REGNO] < 16) -#define REGNO_OK_FOR_BASE_P(REGNO) \ -(((REGNO) ^ 010) < 8 || (unsigned) (reg_renumber[REGNO] ^ 010) < 8) -#define REGNO_OK_FOR_DATA_P(REGNO) \ -((REGNO) < 8 || (unsigned) reg_renumber[REGNO] < 8) -#define REGNO_OK_FOR_FP_P(REGNO) \ -(((REGNO) ^ 020) < 8 || (unsigned) (reg_renumber[REGNO] ^ 020) < 8) +/* True for data registers, D0 through D7. */ +#define DATA_REGNO_P(REGNO) ((unsigned int) (REGNO) < 8) + +/* True for address registers, A0 through A7. */ +#define ADDRESS_REGNO_P(REGNO) (((unsigned int) (REGNO) - 8) < 8) + +/* True for integer registers, D0 through D7 and A0 through A7. */ +#define INT_REGNO_P(REGNO) ((unsigned int) (REGNO) < 16) + +/* True for floating point registers, FP0 through FP7. */ +#define FP_REGNO_P(REGNO) (((unsigned int) (REGNO) - 16) < 8) + +#define REGNO_OK_FOR_INDEX_P(REGNO) \ + (INT_REGNO_P (REGNO) \ + || INT_REGNO_P (reg_renumber[REGNO])) + +#define REGNO_OK_FOR_BASE_P(REGNO) \ + (ADDRESS_REGNO_P (REGNO) \ + || ADDRESS_REGNO_P (reg_renumber[REGNO])) + +#define REGNO_OK_FOR_DATA_P(REGNO) \ + (DATA_REGNO_P (REGNO) \ + || DATA_REGNO_P (reg_renumber[REGNO])) + +#define REGNO_OK_FOR_FP_P(REGNO) \ + (FP_REGNO_P (REGNO) \ + || FP_REGNO_P (reg_renumber[REGNO])) /* Now macros that check whether X is a register and also, strictly, whether it is in a specified class. @@ -793,10 +812,11 @@ __transfer_from_trampoline () \ /* Nonzero if X is a hard reg that can be used as an index or if it is a pseudo reg. */ -#define REG_OK_FOR_INDEX_P(X) ((REGNO (X) ^ 020) >= 8) +#define REG_OK_FOR_INDEX_P(X) !FP_REGNO_P (REGNO (X)) /* Nonzero if X is a hard reg that can be used as a base reg or if it is a pseudo reg. */ -#define REG_OK_FOR_BASE_P(X) ((REGNO (X) & ~027) != 0) +#define REG_OK_FOR_BASE_P(X) \ + (!DATA_REGNO_P (REGNO (X)) && !FP_REGNO_P (REGNO (X))) #else @@ -1077,7 +1097,7 @@ do { if (cc_prev_status.flags & CC_IN_68881) \ /* Describe how we implement __builtin_eh_return. */ #define EH_RETURN_DATA_REGNO(N) \ ((N) < 2 ? (N) : INVALID_REGNUM) -#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 8) +#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, A0_REG) #define EH_RETURN_HANDLER_RTX \ gen_rtx_MEM (Pmode, \ gen_rtx_PLUS (Pmode, arg_pointer_rtx, \ -- 2.11.0