s390.c (s390_delegitimize_address): Fix offset handling for PLTOFF/GOTOFF.
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Tue, 22 Mar 2011 09:07:26 +0000 (09:07 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Tue, 22 Mar 2011 09:07:26 +0000 (09:07 +0000)
2011-03-22  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

* config/s390/s390.c (s390_delegitimize_address): Fix offset
handling for PLTOFF/GOTOFF.

From-SVN: r171281

gcc/ChangeLog
gcc/config/s390/s390.c

index 42d2b14df57db3dd9ade495826273f80ffe3cbb3..d164a0218f691d6a02460180407b0bc709710a33 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-22  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * config/s390/s390.c (s390_delegitimize_address): Fix offset
+       handling for PLTOFF/GOTOFF.
+
 2011-03-22  Nick Clifton  <nickc@redhat.com>
 
        * config/i386/cygming.h (SUBTARGET_OVERRIDE_OPTIONS): Remove
index 050129847c14e829d0a6ba1fb8ace9c109b6b70c..ab1005a6c8aa38819c2354af5acfe76bec4901b2 100644 (file)
@@ -5030,17 +5030,22 @@ s390_delegitimize_address (rtx orig_x)
       && REGNO (XEXP (x, 0)) == PIC_OFFSET_TABLE_REGNUM
       && GET_CODE (XEXP (x, 1)) == CONST)
     {
+      HOST_WIDE_INT offset = 0;
+
       /* The const operand.  */
       y = XEXP (XEXP (x, 1), 0);
 
       if (GET_CODE (y) == PLUS
          && GET_CODE (XEXP (y, 1)) == CONST_INT)
-       y = XEXP (y, 0);
+       {
+         offset = INTVAL (XEXP (y, 1));
+         y = XEXP (y, 0);
+       }
 
       if (GET_CODE (y) == UNSPEC
          && (XINT (y, 1) == UNSPEC_GOTOFF
              || XINT (y, 1) == UNSPEC_PLTOFF))
-       return XVECEXP (y, 0, 0);
+       return plus_constant (XVECEXP (y, 0, 0), offset);
     }
 
   if (GET_CODE (x) != MEM)