On Thu, Jul 28, 2011 at 4:55 AM, H.J. Lu <hongjiu...@intel.com> wrote: > TLS on X32 is almost identical to TLS on x86-64. The only difference is > x32 address space is 32bit. That means TLS symbols can be in either > SImode or DImode with upper 32bit zero. This patch updates > tls_global_dynamic_64 to support x32. OK for trunk?
> 2011-07-27 H.J. Lu <hongjiu...@intel.com> > > PR target/47715 > * config/i386/i386.md (PTR64): New. > (*tls_global_dynamic_64): Rename to ... > (*tls_global_dynamic_64_<mode>): This. Put PTR64 on operand 1. > (tls_global_dynamic_64): Rename to ... > (tls_global_dynamic_64_<mode>): This. Put PTR64 on operand 1. > * config/i386/i386.c (legitimize_tls_address): Updated. Just remove mode check, so: (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")] at both sites. - fputs (ASM_BYTE "0x66\n", asm_out_file); + if (!TARGET_X32) + fputs (ASM_BYTE "0x66\n", asm_out_file); Are you sure? There are some scary comments in binutils that these sequences have to be written _exactly_ as shown to enable certain linker relaxations w.r.t. TLS relocs. Uros.