aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <dave@hiauly1.hia.nrc.ca>2002-05-12 00:01:54 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2002-05-12 00:01:54 +0000
commit12877f09db217202ba7105136a6b944425295ff5 (patch)
treeceb4fe308949f01c063a9f63f510ed81892a8c17
parent387f9e323b1b61d355b3ee6a0d843e26d21bf2de (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/pa/pa32-regs.h13
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.