rs6000.c (rs6000_legitimate_offset_address_p): Accept TOC addresses.
authorDavid Edelsohn <edelsohn@gnu.org>
Sun, 27 Jun 2004 15:56:34 +0000 (15:56 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Sun, 27 Jun 2004 15:56:34 +0000 (11:56 -0400)
        * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
        Accept TOC addresses.

From-SVN: r83736

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index edfb656615c9af7816775e0c3031caf7372d7f95..1fe1b439e319e51ed6c1321d51370b71b4f307ba 100644 (file)
@@ -1,3 +1,8 @@
+2004-06-27  David Edelsohn  <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
+       Accept TOC addresses.
+
 2004-06-27  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * config/s390/s390-protos.h (s390_load_got): Update prototype.
index ac99a17d1a8b171c6c32b644e376e289fc997f5c..0aa96b99ff66893c836a316f9db3233518cf5cb2 100644 (file)
@@ -2625,9 +2625,6 @@ toc_relative_expr_p (rtx op)
   return constant_pool_expr_1 (op, &have_sym, &have_toc) && have_toc;
 }
 
-/* SPE offset addressing is limited to 5-bits worth of double words.  */
-#define SPE_CONST_OFFSET_OK(x) (((x) & ~0xf8) == 0)
-
 bool
 legitimate_constant_pool_address_p (rtx x)
 {
@@ -2647,6 +2644,9 @@ legitimate_small_data_p (enum machine_mode mode, rtx x)
          && small_data_operand (x, mode));
 }
 
+/* SPE offset addressing is limited to 5-bits worth of double words.  */
+#define SPE_CONST_OFFSET_OK(x) (((x) & ~0xf8) == 0)
+
 bool
 rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
 {
@@ -2658,6 +2658,8 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
     return false;
   if (!INT_REG_OK_FOR_BASE_P (XEXP (x, 0), strict))
     return false;
+  if (legitimate_constant_pool_address_p (x))
+    return true;
   if (GET_CODE (XEXP (x, 1)) != CONST_INT)
     return false;