alpha.c (secondary_reload_class): For !BWX, sub-simode outputs require a register.
authorRichard Henderson <rth@cygnus.com>
Wed, 8 Dec 1999 11:47:38 +0000 (03:47 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 8 Dec 1999 11:47:38 +0000 (03:47 -0800)
        * alpha.c (secondary_reload_class): For !BWX, sub-simode
        outputs require a register.

From-SVN: r30829

gcc/ChangeLog
gcc/config/alpha/alpha.c

index e8a7f4c9e69790e2b6646ad3623a15068b677715..2e284ab912d58eecaf0443f52f4bb03fff36f193 100644 (file)
@@ -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
index 5f73964e81c35f09b8b09e20e9828660f29ec9ae..e790fc0d9d7c96226bce2a8da19473015b5a2fb1 100644 (file)
@@ -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)
     {