rs6000.c (rs6000_legitimize_address): Do not reduce offset by units of 0x10000 for...
authorJoseph Myers <joseph@codesourcery.com>
Thu, 27 Sep 2007 14:01:16 +0000 (15:01 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Thu, 27 Sep 2007 14:01:16 +0000 (15:01 +0100)
* config/rs6000/rs6000.c (rs6000_legitimize_address): Do not
reduce offset by units of 0x10000 for SPE vector modes or modes
used with E500 double instructions.

From-SVN: r128837

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

index 6c177147c26686c907cb55c56fede45859e309ed..f7a438291bb53388fe376cae96c92b577ffd8ca3 100644 (file)
@@ -1,3 +1,9 @@
+2007-09-27  Joseph Myers  <joseph@codesourcery.com>
+
+       * config/rs6000/rs6000.c (rs6000_legitimize_address): Do not
+       reduce offset by units of 0x10000 for SPE vector modes or modes
+       used with E500 double instructions.
+
 2007-09-04  Paolo Bonzini  <bonzini@gnu.org>
 
        * simplify-rtx.c (comparison_result): New.
index aa4da105fa192699c72a0b7be2b251b7b4a93d20..8a840ef568aebcd53158a820c8c222654366f3c5 100644 (file)
@@ -3381,7 +3381,10 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
   if (GET_CODE (x) == PLUS
       && GET_CODE (XEXP (x, 0)) == REG
       && GET_CODE (XEXP (x, 1)) == CONST_INT
-      && (unsigned HOST_WIDE_INT) (INTVAL (XEXP (x, 1)) + 0x8000) >= 0x10000)
+      && (unsigned HOST_WIDE_INT) (INTVAL (XEXP (x, 1)) + 0x8000) >= 0x10000
+      && !(SPE_VECTOR_MODE (mode)
+          || (TARGET_E500_DOUBLE && (mode == DFmode || mode == TFmode
+                                     || mode == DImode))))
     {
       HOST_WIDE_INT high_int, low_int;
       rtx sum;