summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1999-03-13 18:05:38 -0800
committerJeff Law <law@gcc.gnu.org>1999-03-13 19:05:38 -0700
commit60aadc205a2e4270503d455820b43201df08563e (patch)
tree7f3c9e314e075b3f6818eef02c10fa042b9897d8
parent3c674cd258153ff247ac4177916a594d9b266a1b (diff)
downloadgcc-60aadc205a2e4270503d455820b43201df08563e.tar.gz
alpha.h (HARD_REGNO_MODE_OK): Disallow QI/HImode in fp regs.
* alpha.h (HARD_REGNO_MODE_OK): Disallow QI/HImode in fp regs. (MODES_TIEABLE_P): Update. From-SVN: r25761
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/alpha/alpha.h12
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6dd29b27e44..3e8515aaef6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Mar 11 14:00:58 1999 Richard Henderson <rth@cygnus.com>
+
+ * alpha.h (HARD_REGNO_MODE_OK): Disallow QI/HImode in fp regs.
+ (MODES_TIEABLE_P): Update.
+
Thu Mar 11 00:20:52 1999 Alexandre Oliva <oliva@dcc.unicamp.br>
* gcc.texi: Update bug reporting instructions to match
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 2f69908284f..43b0deed743 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -611,18 +611,20 @@ extern void override_options ();
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
On Alpha, the integer registers can hold any mode. The floating-point
registers can hold 32-bit and 64-bit integers as well, but not 16-bit
- or 8-bit values. If we only allowed the larger integers into FP registers,
- we'd have to say that QImode and SImode aren't tiable, which is a
- pain. So say all registers can hold everything and see how that works. */
+ or 8-bit values. */
-#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
+#define HARD_REGNO_MODE_OK(REGNO, MODE) \
+ ((REGNO) < 32 || ((MODE) != QImode && (MODE) != HImode))
/* Value is 1 if it is a good idea to tie two pseudo registers
when one has mode MODE1 and one has mode MODE2.
If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
for any hard reg, then this must be 0 for correct output. */
-#define MODES_TIEABLE_P(MODE1, MODE2) 1
+#define MODES_TIEABLE_P(MODE1, MODE2) \
+ ((MODE1) == QImode || (MODE1) == HImode \
+ ? (MODE2) == QImode || (MODE2) == HImode \
+ : 1)
/* Specify the registers used for certain standard purposes.
The values of these macros are register numbers. */