From: Andreas Krebbel Date: Tue, 22 Mar 2011 09:07:26 +0000 (+0000) Subject: s390.c (s390_delegitimize_address): Fix offset handling for PLTOFF/GOTOFF. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ab081dd6234db09f2d8023f1f09777fc8cf10efb;p=gcc.git s390.c (s390_delegitimize_address): Fix offset handling for PLTOFF/GOTOFF. 2011-03-22 Andreas Krebbel * config/s390/s390.c (s390_delegitimize_address): Fix offset handling for PLTOFF/GOTOFF. From-SVN: r171281 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 42d2b14df57..d164a0218f6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-03-22 Andreas Krebbel + + * config/s390/s390.c (s390_delegitimize_address): Fix offset + handling for PLTOFF/GOTOFF. + 2011-03-22 Nick Clifton * config/i386/cygming.h (SUBTARGET_OVERRIDE_OPTIONS): Remove diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 050129847c1..ab1005a6c8a 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -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)