reload.c (push_reload): If WORD_REGISTER_OPERATIONS...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Wed, 28 Jan 1998 19:09:41 +0000 (19:09 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 28 Jan 1998 19:09:41 +0000 (12:09 -0700)
        * reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
        SUBREG_REG if the word count is unchanged, also in the input reload
        case.  Disable non-applicable sanity checks.

From-SVN: r17541

gcc/ChangeLog
gcc/reload.c

index 5095ab23c972d3b4c281b7ecf6a815a5264e71fa..c84c110820ce06e3b085c40a1310237e5d6cd83b 100644 (file)
@@ -1,3 +1,9 @@
+Wed Jan 28 20:11:06 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
+       SUBREG_REG if the word count is unchanged, also in the input reload
+       case.  Disable non-applicable sanity checks.
+
 Wed Jan 28 20:08:26 1998  Jeffrey A Law  (law@cygnus.com)
 
        * config/t-svr4 (TARGET_LIBGCC2_CFLAGS): Add -fPIC.
index 2fcdd5a6aea942503416f4ed6e5b591537312f9d..6006357da29032d6e1a57bb92bb38ce6cd872795 100644 (file)
@@ -885,6 +885,13 @@ push_reload (in, out, inloc, outloc, class,
                          > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
                      && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in)))
                      && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != NIL)
+#endif
+#ifdef WORD_REGISTER_OPERATIONS
+                 || ((GET_MODE_SIZE (inmode)
+                      < GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
+                     && ((GET_MODE_SIZE (inmode) - 1) / UNITS_PER_WORD ==
+                         ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) - 1)
+                          / UNITS_PER_WORD)))
 #endif
                  ))
          || (GET_CODE (SUBREG_REG (in)) == REG
@@ -923,7 +930,7 @@ push_reload (in, out, inloc, outloc, class,
       in_subreg_loc = inloc;
       inloc = &SUBREG_REG (in);
       in = *inloc;
-#ifndef LOAD_EXTEND_OP
+#if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
       if (GET_CODE (in) == MEM)
        /* This is supposed to happen only for paradoxical subregs made by
           combine.c.  (SUBREG (MEM)) isn't supposed to occur other ways.  */
@@ -1027,7 +1034,7 @@ push_reload (in, out, inloc, outloc, class,
       out_subreg_loc = outloc;
       outloc = &SUBREG_REG (out);
       out = *outloc; 
-#ifndef LOAD_EXTEND_OP
+#if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
      if (GET_CODE (out) == MEM
          && GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode))
        abort ();