200x-xx-xx Kazu Hirata <kazu@codesourcery.com> Richard Sandiford <richard@codesourcery.com>

gcc/
200x-xx-xx  Kazu Hirata  <kazu@codesourcery.com>
	    Richard Sandiford  <richard@codesourcery.com>

	* 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.

Co-Authored-By: Richard Sandiford <richard@codesourcery.com>

From-SVN: r120918
This commit is contained in:
Kazu Hirata 2007-01-18 19:31:15 +00:00 committed by Richard Sandiford
parent 47b41fa34a
commit 36e04090c1
3 changed files with 44 additions and 14 deletions

View File

@ -1,3 +1,13 @@
2007-01-18 Kazu Hirata <kazu@codesourcery.com>
Richard Sandiford <richard@codesourcery.com>
* 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 <nathan@codesourcery.com>
* config.gcc (m68k-*-aout*, m68k-*-coff*, m68020-*-elf*, m68k-*-elf*)

View File

@ -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. */

View File

@ -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, \