diff options
author | Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl> | 2001-02-03 02:25:03 +0100 |
---|---|---|
committer | Michael Hayes <m.hayes@gcc.gnu.org> | 2001-02-03 01:25:03 +0000 |
commit | 40eef757425806fdf01462bde3455eaefaf1abd7 (patch) | |
tree | 366497f2b0e4c4187021c1c84b0a37c450e8e2fd /gcc | |
parent | 0d6882a0f12103e8f69f216278edeae2c2584ce1 (diff) | |
download | gcc-40eef757425806fdf01462bde3455eaefaf1abd7.zip gcc-40eef757425806fdf01462bde3455eaefaf1abd7.tar.gz gcc-40eef757425806fdf01462bde3455eaefaf1abd7.tar.bz2 |
c4x.c (c4x_hard_regno_rename_ok): New.
* c4x.c (c4x_hard_regno_rename_ok): New.
* c4x-protos.h (c4x_hard_regno_rename_ok): New.
* c4x.h (HARD_REGNO_RENAME_OK): Define.
From-SVN: r39419
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/c4x/c4x-protos.h | 2 | ||||
-rw-r--r-- | gcc/config/c4x/c4x.c | 23 | ||||
-rw-r--r-- | gcc/config/c4x/c4x.h | 5 |
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4cfb125..8a52bed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-02-03 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl> + + * c4x.c (c4x_hard_regno_rename_ok): New. + * c4x-protos.h (c4x_hard_regno_rename_ok): New. + * c4x.h (HARD_REGNO_RENAME_OK): Define. + Fri Feb 2 20:03:50 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * diagnostic.h: Add missing "extern" in all declarations. diff --git a/gcc/config/c4x/c4x-protos.h b/gcc/config/c4x/c4x-protos.h index 9685f39..6449aa7 100644 --- a/gcc/config/c4x/c4x-protos.h +++ b/gcc/config/c4x/c4x-protos.h @@ -88,6 +88,8 @@ extern int c4x_check_legit_addr PARAMS ((enum machine_mode, rtx, int)); extern int c4x_hard_regno_mode_ok PARAMS ((unsigned int, enum machine_mode)); +extern int c4x_hard_regno_rename_ok PARAMS ((unsigned int, unsigned int)); + extern struct rtx_def *c4x_legitimize_address PARAMS ((rtx, enum machine_mode)); diff --git a/gcc/config/c4x/c4x.c b/gcc/config/c4x/c4x.c index 36c0bb6..a52d350 100644 --- a/gcc/config/c4x/c4x.c +++ b/gcc/config/c4x/c4x.c @@ -429,6 +429,29 @@ c4x_hard_regno_mode_ok (regno, mode) return 0; } +/* Return non-zero if REGNO1 can be renamed to REGNO2. */ +int +c4x_hard_regno_rename_ok (regno1, regno2) + unsigned int regno1; + unsigned int regno2; +{ + /* We can not copy call saved registers from mode QI into QF or from + mode QF into QI. */ + if ((regno1 == R6_REGNO || regno1 == R7_REGNO) + && (regno2 == R4_REGNO || regno2 == R5_REGNO || regno2 == R8_REGNO)) + return 0; + if ((regno1 == R4_REGNO || regno1 == R5_REGNO || regno1 == R8_REGNO) + && (regno2 == R6_REGNO || regno2 == R7_REGNO)) + return 0; + /* We cannot copy from an extended (40 bit) register to a standard + (32 bit) register because we only set the condition codes for + extended registers. */ + if (IS_EXT_REGNO (regno1) && ! IS_EXT_REGNO (regno2)) + return 0; + if (IS_EXT_REGNO (regno2) && ! IS_EXT_REGNO (regno1)) + return 0; + return 1; +} /* The TI C3x C compiler register argument runtime model uses 6 registers, AR2, R2, R3, RC, RS, RE. diff --git a/gcc/config/c4x/c4x.h b/gcc/config/c4x/c4x.h index 9927821..a64c038 100644 --- a/gcc/config/c4x/c4x.h +++ b/gcc/config/c4x/c4x.h @@ -614,6 +614,11 @@ extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string; IR0_REGNO, IR1_REGNO, \ SP_REGNO, DP_REGNO, ST_REGNO, IE_REGNO, IF_REGNO, IOF_REGNO} +/* A C expression that is nonzero if hard register number REGNO2 can be + considered for use as a rename register for REGNO1 */ + +#define HARD_REGNO_RENAME_OK(REGNO1,REGNO2) \ + c4x_hard_regno_rename_ok((REGNO1), (REGNO2)) /* Determine which register classes are very likely used by spill registers. local-alloc.c won't allocate pseudos that have these classes as their |