OSDN Git Service

* config/rs6000/rs6000.c (rs6000_legitimize_address): Do not
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Sep 2007 14:01:16 +0000 (14:01 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Sep 2007 14:01:16 +0000 (14:01 +0000)
reduce offset by units of 0x10000 for SPE vector modes or modes
used with E500 double instructions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128837 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 6c17714..f7a4382 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 aa4da10..8a840ef 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;