aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1999-12-08 03:47:38 -0800
committerRichard Henderson <rth@gcc.gnu.org>1999-12-08 03:47:38 -0800
commit35a414df38bfe8df947d399720eef481309540a9 (patch)
tree569942f692fcc5dfa864cb67b502cb2da372f199 /gcc
parent8dcd865f3b58166136cdd1e0447e410e042e8a23 (diff)
downloadgcc-35a414df38bfe8df947d399720eef481309540a9.zip
gcc-35a414df38bfe8df947d399720eef481309540a9.tar.gz
gcc-35a414df38bfe8df947d399720eef481309540a9.tar.bz2
alpha.c (secondary_reload_class): For !BWX, sub-simode outputs require a register.
* alpha.c (secondary_reload_class): For !BWX, sub-simode outputs require a register. From-SVN: r30829
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/alpha/alpha.c26
2 files changed, 20 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e8a7f4c..2e284ab 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Wed Dec 8 03:45:40 1999 Richard Henderson <rth@cygnus.com>
+
+ * alpha.c (secondary_reload_class): For !BWX, sub-simode
+ outputs require a register.
+
1999-12-08 Brendan Kehoe <brendan@cygnus.com>
* Makefile.in (FPBIT_FUNCS, DPBIT_FUNCS): Add _sf_to_usi
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 5f73964..e790fc0 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1065,17 +1065,21 @@ secondary_reload_class (class, mode, x, in)
rtx x;
int in;
{
- if ((GET_CODE (x) == MEM
- || (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER)
- || (GET_CODE (x) == SUBREG
- && (GET_CODE (SUBREG_REG (x)) == MEM
- || (GET_CODE (SUBREG_REG (x)) == REG
- && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER))))
- && ((class == FLOAT_REGS
- && (mode == SImode || mode == HImode || mode == QImode))
- || ((mode == QImode || mode == HImode)
- && ! TARGET_BWX && ! aligned_memory_operand (x, mode))))
- return GENERAL_REGS;
+ if (GET_CODE (x) == MEM
+ || (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER)
+ || (GET_CODE (x) == SUBREG
+ && (GET_CODE (SUBREG_REG (x)) == MEM
+ || (GET_CODE (SUBREG_REG (x)) == REG
+ && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER))))
+ {
+ if (class == FLOAT_REGS && mode != DImode)
+ return GENERAL_REGS;
+ if ((mode == QImode || mode == HImode) && ! TARGET_BWX)
+ {
+ if (!in || !aligned_memory_operand(x, mode))
+ return GENERAL_REGS;
+ }
+ }
if (class == FLOAT_REGS)
{