reload.c (operands_match_p): Only increment register number for SCALAR_INT_MODE_P...
authorDavid Edelsohn <edelsohn@gnu.org>
Thu, 24 Feb 2005 22:06:06 +0000 (22:06 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Thu, 24 Feb 2005 22:06:06 +0000 (17:06 -0500)
        * reload.c (operands_match_p): Only increment register number for
        SCALAR_INT_MODE_P modes in multiple hard registers.

From-SVN: r95519

gcc/ChangeLog
gcc/reload.c

index 6f81778ec68ccc863d9fb51199f1089e4b718e08..48cbd3a5f8b58d5a6a1ecea53fb817c027e757eb 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-24  David Edelsohn  <edelsohn@gnu.org>
+
+       PR target/19019
+       * reload.c (operands_match_p): Only increment register number for
+       SCALAR_INT_MODE_P modes in multiple hard registers.
+
 2005-02-24  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        * ChangeLog.5: Fix log message typo(s).
index 015637e47aa11b6a1bf26f8df942c1f28a569733..7d42492a98d6899b0c9284b6a7f41e1647c8362d 100644 (file)
@@ -2160,12 +2160,15 @@ operands_match_p (rtx x, rtx y)
        j = REGNO (y);
 
       /* On a WORDS_BIG_ENDIAN machine, point to the last register of a
-        multiple hard register group, so that for example (reg:DI 0) and
-        (reg:SI 1) will be considered the same register.  */
+        multiple hard register group of scalar integer registers, so that
+        for example (reg:DI 0) and (reg:SI 1) will be considered the same
+        register.  */
       if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
+         && SCALAR_INT_MODE_P (GET_MODE (x))
          && i < FIRST_PSEUDO_REGISTER)
        i += hard_regno_nregs[i][GET_MODE (x)] - 1;
       if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
+         && SCALAR_INT_MODE_P (GET_MODE (y))
          && j < FIRST_PSEUDO_REGISTER)
        j += hard_regno_nregs[j][GET_MODE (y)] - 1;