@@ -13918,6 +13918,7 @@ get_some_local_dynamic_name (void)
d -- print duplicated register operand for AVX instruction.
D -- print condition for SSE cmp instruction.
P -- if PIC, print an @PLT suffix.
+ p -- print raw symbol name.
X -- don't print any sort of PIC '@' suffix for a symbol.
& -- print some in-use local-dynamic symbol name.
H -- print a memory address offset by 8; used for sse high-parts
@@ -14123,6 +14124,7 @@ ix86_print_operand (FILE *file, rtx x, i
case 'x':
case 'X':
case 'P':
+ case 'p':
break;
case 's':
@@ -14522,7 +14524,7 @@ ix86_print_operand (FILE *file, rtx x, i
x = const0_rtx;
}
- if (code != 'P')
+ if (code != 'P' && code != 'p')
{
if (CONST_INT_P (x) || GET_CODE (x) == CONST_DOUBLE)
{
@@ -53,6 +53,7 @@
;; d -- print duplicated register operand for AVX instruction.
;; D -- print condition for SSE cmp instruction.
;; P -- if PIC, print an @PLT suffix.
+;; p -- print raw symbol name.
;; X -- don't print any sort of PIC '@' suffix for a symbol.
;; & -- print some in-use local-dynamic symbol name.
;; H -- print a memory address offset by 8; used for sse high-parts
@@ -12367,6 +12368,12 @@
{
output_asm_insn
("lea{l}\t{%a2@tlsgd(,%1,1), %0|%0, %a2@tlsgd[%1*1]}", operands);
+ if (TARGET_SUN_TLS)
+#ifdef HAVE_AS_IX86_TLSGDPLT
+ return "call\t%a2@tlsgdplt";
+#else
+ return "call\t%p3@plt";
+#endif
return "call\t%P3";
}
[(set_attr "type" "multi")
@@ -12397,6 +12404,8 @@
("lea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}", operands);
fputs (ASM_SHORT "0x6666\n", asm_out_file);
fputs ("\trex64\n", asm_out_file);
+ if (TARGET_SUN_TLS)
+ return "call\t%p2@plt";
return "call\t%P2";
}
[(set_attr "type" "multi")
@@ -12424,6 +12433,12 @@
{
output_asm_insn
("lea{l}\t{%&@tlsldm(%1), %0|%0, %&@tlsldm[%1]}", operands);
+ if (TARGET_SUN_TLS)
+#ifdef HAVE_AS_IX86_TLSLDMPLT
+ return "call\t%&@tlsldmplt";
+#else
+ return "call\t%p2@plt";
+#endif
return "call\t%P2";
}
[(set_attr "type" "multi")
@@ -12450,6 +12465,8 @@
{
output_asm_insn
("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
+ if (TARGET_SUN_TLS)
+ return "call\t%p1@plt";
return "call\t%P1";
}
[(set_attr "type" "multi")
@@ -3649,6 +3649,18 @@ foo: nop
[AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
[Define if the assembler supports 'rep <insn>, lock <insn>'.])])
+ gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
+ gcc_cv_as_ix86_tlsgdplt,,,
+ [call tls_gd@tlsgdplt],,
+ [AC_DEFINE(HAVE_AS_IX86_TLSGDPLT, 1,
+ [Define if your assembler supports @tlsgdplt.])])
+
+ gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc],
+ gcc_cv_as_ix86_tlsldmplt,,,
+ [call tls_ld@tlsldmplt],,
+ [AC_DEFINE(HAVE_AS_IX86_TLSLDMPLT, 1,
+ [Define if your assembler supports @tlsldmplt.])])
+
;;
ia64*-*-*)