case TLS_MODEL_INITIAL_EXEC:
if (TARGET_64BIT)
{
- if (TARGET_SUN_TLS && !TARGET_X32)
- {
- /* The Sun linker took the AMD64 TLS spec literally
- and can only handle %rax as destination of the
- initial executable code sequence. */
-
- dest = gen_reg_rtx (DImode);
- emit_insn (gen_tls_initial_exec_64_sun (dest, x));
- return dest;
- }
-
/* Generate DImode references to avoid %fs:(%reg32)
problems and linker IE->LE relaxation bug. */
tp_mode = DImode;
UNSPEC_TLS_GD
UNSPEC_TLS_LD_BASE
UNSPEC_TLSDESC
- UNSPEC_TLS_IE_SUN
;; Other random patterns
UNSPEC_SCAS
set_mem_addr_space (operands[2], as);
})
-;; The Sun linker took the AMD64 TLS spec literally and can only handle
-;; %rax as destination of the initial executable code sequence.
-(define_insn "tls_initial_exec_64_sun"
- [(set (match_operand:DI 0 "register_operand" "=a")
- (unspec:DI
- [(match_operand 1 "tls_symbolic_operand")]
- UNSPEC_TLS_IE_SUN))
- (clobber (reg:CC FLAGS_REG))]
- "TARGET_64BIT && TARGET_SUN_TLS"
-{
- output_asm_insn
- ("mov{q}\t{%%fs:0, %0|%0, QWORD PTR fs:0}", operands);
- return "add{q}\t{%a1@gottpoff(%%rip), %0|%0, %a1@gottpoff[rip]}";
-}
- [(set_attr "type" "multi")])
-
;; GNU2 TLS patterns can be split.
(define_expand "tls_dynamic_gnu2_32"