On Wed, May 15, 2013 at 9:00 PM, Leif Ekblad <l...@rdos.net> wrote: > I made the suggested changes, and enclose a new patch.
<...> > It's been tested with target RDOS, but not with target Linux. > > Uros, could you commit the patch if it is acceptable? I have committed attached patch with following ChangeLog: 2013-05-15 Leif Ekblad <l...@rdos.net> * config/i386/i386.c (ix86_decompose_address): Use DEFAULT_TLS_SEG_REG to access TLS segment register. * config/i386/i386.h (DEFAULT_TLS_SEG_REG): New define. * config/i386/rdos.h (DEFAULT_TLS_SEG_REG): Ditto. (TARGET_TLS_DIRECT_SEG_REFS_DEFAULT): Ditto. Patch was also tested on x86_64-pc-linux-gnu {,-m32}. Uros.
Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 198944) +++ config/i386/i386.c (working copy) @@ -11698,7 +11698,7 @@ ix86_decompose_address (rtx addr, struct ix86_addr if (XINT (op, 1) == UNSPEC_TP && TARGET_TLS_DIRECT_SEG_REFS && seg == SEG_DEFAULT) - seg = TARGET_64BIT ? SEG_FS : SEG_GS; + seg = DEFAULT_TLS_SEG_REG; else return 0; break; @@ -13650,7 +13650,7 @@ ix86_delegitimize_tls_address (rtx orig_x) if (GET_CODE (x) != PLUS || GET_MODE (x) != Pmode) return orig_x; if (ix86_decompose_address (x, &addr) == 0 - || addr.seg != (TARGET_64BIT ? SEG_FS : SEG_GS) + || addr.seg != DEFAULT_TLS_SEG_REG || addr.disp == NULL_RTX || GET_CODE (addr.disp) != CONST) return orig_x; Index: config/i386/i386.h =================================================================== --- config/i386/i386.h (revision 198944) +++ config/i386/i386.h (working copy) @@ -543,6 +543,9 @@ extern tree x86_mfence; /* The default abi used by target. */ #define DEFAULT_ABI SYSV_ABI +/* The default TLS segment register used by target. */ +#define DEFAULT_TLS_SEG_REG (TARGET_64BIT ? SEG_FS : SEG_GS) + /* Subtargets may reset this to 1 in order to enable 96-bit long double with the rounding mode forced to 53 bits. */ #define TARGET_96_ROUND_53_LONG_DOUBLE 0 Index: config/i386/rdos.h =================================================================== --- config/i386/rdos.h (revision 198944) +++ config/i386/rdos.h (working copy) @@ -21,6 +21,12 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_EXECUTABLE_SUFFIX #define TARGET_EXECUTABLE_SUFFIX ".exe" +#undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT +#define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT MASK_TLS_DIRECT_SEG_REFS + +#undef DEFAULT_TLS_SEG_REG +#define DEFAULT_TLS_SEG_REG SEG_GS + #undef TARGET_RDOS #define TARGET_RDOS 1