On Thu, Feb 23, 2012 at 05:38:37PM +0100, Kai Tietz wrote: > --- config/i386/i386.c (revision 184486) > +++ config/i386/i386.c (working copy) > @@ -13241,6 +13241,22 @@ > > 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) == UNSPEC > + && XINT (x, 1) == UNSPEC_PCREL) > + return XVECEXP (x, 0, 0);
Here you don't need the MEM_P (orig_x) handling? That's strange. > if (GET_CODE (x) != CONST > || GET_CODE (XEXP (x, 0)) != UNSPEC > || (XINT (XEXP (x, 0), 1) != UNSPEC_GOTPCREL Jakub