From 15498cfa4ee495c125aaf847a77bf1001505178b Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Fri, 24 Feb 2012 17:31:41 +0100 Subject: [PATCH] i386.c (ix86_delegitimize_address): Handle UNSPEC_PCREL plus displacement. * config/i386/i386.c (ix86_delegitimize_address): Handle UNSPEC_PCREL plus displacement. From-SVN: r184560 --- gcc/ChangeLog | 5 +++++ gcc/config/i386/i386.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e0c1e6..121d74a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-02-23 Kai Tietz + + * config/i386/i386.c (ix86_delegitimize_address): Handle + UNSPEC_PCREL plus displacement. + 2012-02-24 Georg-Johann Lay PR target/52261 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 24dbc49..52fcb61 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -13241,6 +13241,19 @@ ix86_delegitimize_address (rtx x) if (TARGET_64BIT) { + if (GET_CODE (x) == CONST + && GET_CODE (XEXP (x, 0)) == PLUS + && GET_MODE (XEXP (x, 0)) == Pmode + && CONST_INT_P (XEXP (XEXP (x, 0), 1)) + && GET_CODE (XEXP (XEXP (x, 0), 0)) == UNSPEC + && XINT (XEXP (XEXP (x, 0), 0), 1) == UNSPEC_PCREL) + { + rtx x2 = XVECEXP (XEXP (XEXP (x, 0), 0), 0, 0); + x = gen_rtx_PLUS (Pmode, XEXP (XEXP (x, 0), 1), x2); + if (MEM_P (orig_x)) + x = replace_equiv_address_nv (orig_x, x); + return x; + } if (GET_CODE (x) != CONST || GET_CODE (XEXP (x, 0)) != UNSPEC || (XINT (XEXP (x, 0), 1) != UNSPEC_GOTPCREL -- 2.7.4