diff options
author | John David Anglin <dave@hiauly1.hia.nrc.ca> | 2002-05-12 00:01:54 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2002-05-12 00:01:54 +0000 |
commit | 12877f09db217202ba7105136a6b944425295ff5 (patch) | |
tree | ceb4fe308949f01c063a9f63f510ed81892a8c17 | |
parent | 387f9e323b1b61d355b3ee6a0d843e26d21bf2de (diff) | |
download | gcc-12877f09db217202ba7105136a6b944425295ff5.zip gcc-12877f09db217202ba7105136a6b944425295ff5.tar.gz gcc-12877f09db217202ba7105136a6b944425295ff5.tar.bz2 |
pa32-regs.h (HARD_REGNO_MODE_OK): Revise sets of general registers used for DImode and TImode.
* pa/pa32-regs.h (HARD_REGNO_MODE_OK): Revise sets of general registers
used for DImode and TImode.
From-SVN: r53387
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/pa/pa32-regs.h | 13 |
2 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0ef43a3..d02a3a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-05-11 John David Anglin <dave@hiauly1.hia.nrc.ca> + + * pa/pa32-regs.h (HARD_REGNO_MODE_OK): Revise sets of general registers + used for DImode and TImode. + 2002-05-11 Neil Booth <neil@daikokuya.demon.co.uk> * cpplex.c (_cpp_lex_direct): When in a directive at EOF diff --git a/gcc/config/pa/pa32-regs.h b/gcc/config/pa/pa32-regs.h index 2cd0154..19553c9 100644 --- a/gcc/config/pa/pa32-regs.h +++ b/gcc/config/pa/pa32-regs.h @@ -164,8 +164,11 @@ : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. - On the HP-PA, the cpu registers can hold any mode. We - force this to be an even register is it cannot hold the full mode. */ + On the HP-PA, the cpu registers can hold any mode. For DImode, we + choose a set of general register that includes the incoming arguments + and the return value. We specify a set with no overlaps so that we don't + have to specify that the destination register in patterns using this mode + is an early clobber. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \ /* On 1.0 machines, don't allow wide non-fp modes in fp regs. */ \ @@ -173,9 +176,11 @@ ? GET_MODE_SIZE (MODE) <= 4 || GET_MODE_CLASS (MODE) == MODE_FLOAT \ : FP_REGNO_P (REGNO) \ ? GET_MODE_SIZE (MODE) <= 4 || ((REGNO) & 1) == 0 \ - /* Make wide modes be in aligned registers. */ \ : (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \ - || (GET_MODE_SIZE (MODE) <= 4 * UNITS_PER_WORD && ((REGNO) & 1) == 0))) + || (GET_MODE_SIZE (MODE) == 2 * UNITS_PER_WORD \ + && ((((REGNO) & 1) == 1 && (REGNO) <= 25) || (REGNO) == 28)) \ + || (GET_MODE_SIZE (MODE) == 4 * UNITS_PER_WORD \ + && (((REGNO) & 3) == 3 && (REGNO) <= 23)))) /* How to renumber registers for dbx and gdb. |