OSDN Git Service

2011-05-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
authorro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 May 2011 15:45:56 +0000 (15:45 +0000)
committerro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 May 2011 15:45:56 +0000 (15:45 +0000)
    Uros Bizjak <ubizjak@gmail.com>

* configure.ac (gcc_cv_as_ix86_tlsgdplt): Check for @tlsgdplt
(HAVE_AS_IX86_TLSGDPTL): Define.
(gcc_cv_as_ix86_tlsldmplt): Check for @tlsldmplt.
(HAVE_AS_IX86_TLSLDMPLT): Define.
* configure: Regenerate.
* config.in: Regenerate.
* config/i386/i386.c (ix86_print_operand): Handle code 'p'.
* config/i386/i386.md (*tls_global_dynamic_32_gnu): If
TARGET_SUN_TLS, use @tlsgdplt or @plt.
(*tls_global_dynamic_64): Use @plt if TARGET_SUN_TLS.
(*tls_local_dynamic_base_32_gnu): If TARGET_SUN_TLS, use
@tlsldmplt or @plt.
(*tls_local_dynamic_base_64): Use @plt if TARGET_SUN_TLS.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174340 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config.in
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/configure
gcc/configure.ac

index ecfab77..7bd3193 100644 (file)
@@ -1,3 +1,20 @@
+2011-05-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+           Uros Bizjak <ubizjak@gmail.com>
+
+       * configure.ac (gcc_cv_as_ix86_tlsgdplt): Check for @tlsgdplt
+       (HAVE_AS_IX86_TLSGDPTL): Define.
+       (gcc_cv_as_ix86_tlsldmplt): Check for @tlsldmplt.
+       (HAVE_AS_IX86_TLSLDMPLT): Define.
+       * configure: Regenerate.
+       * config.in: Regenerate.
+       * config/i386/i386.c (ix86_print_operand): Handle code 'p'.
+       * config/i386/i386.md (*tls_global_dynamic_32_gnu): If
+       TARGET_SUN_TLS, use @tlsgdplt or @plt.
+       (*tls_global_dynamic_64): Use @plt if TARGET_SUN_TLS.
+       (*tls_local_dynamic_base_32_gnu): If TARGET_SUN_TLS, use
+       @tlsldmplt or @plt.
+       (*tls_local_dynamic_base_64): Use @plt if TARGET_SUN_TLS.
+
 2011-05-27  Bernd Schmidt  <bernds@codesourcery.com>
 
        * sched-int.h (struct _haifa_deps_insn_data): New members cond
index 43aa919..d202b03 100644 (file)
 #endif
 
 
+/* Define if your assembler supports @tlsgdplt. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_IX86_TLSGDPLT
+#endif
+
+
+/* Define if your assembler supports @tlsldmplt. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_IX86_TLSLDMPLT
+#endif
+
+
 /* Define if your assembler supports the lituse_jsrdirect relocation. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AS_JSRDIRECT_RELOCS
index c7da6d3..ae81d62 100644 (file)
@@ -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, int code)
        case 'x':
        case 'X':
        case 'P':
+       case 'p':
          break;
 
        case 's':
@@ -14522,7 +14524,7 @@ ix86_print_operand (FILE *file, rtx x, int code)
          x = const0_rtx;
        }
 
-      if (code != 'P')
+      if (code != 'P' && code != 'p')
        {
          if (CONST_INT_P (x) || GET_CODE (x) == CONST_DOUBLE)
            {
index 13a1cde..2e7633d 100644 (file)
@@ -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
 {
   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")
     ("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")
 {
   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")
 {
   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")
index 274af3e..0873e98 100755 (executable)
@@ -24086,6 +24086,68 @@ $as_echo "#define HAVE_AS_IX86_REP_LOCK_PREFIX 1" >>confdefs.h
 
 fi
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
+$as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
+if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_ix86_tlsgdplt=no
+  if test x$gcc_cv_as != x; then
+    echo 'call    tls_gd@tlsgdplt' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+       gcc_cv_as_ix86_tlsgdplt=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_tlsgdplt" >&5
+$as_echo "$gcc_cv_as_ix86_tlsgdplt" >&6; }
+if test $gcc_cv_as_ix86_tlsgdplt = yes; then
+
+$as_echo "#define HAVE_AS_IX86_TLSGDPLT 1" >>confdefs.h
+
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_LDM_PLT reloc" >&5
+$as_echo_n "checking assembler for R_386_TLS_LDM_PLT reloc... " >&6; }
+if test "${gcc_cv_as_ix86_tlsldmplt+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_ix86_tlsldmplt=no
+  if test x$gcc_cv_as != x; then
+    echo 'call    tls_ld@tlsldmplt' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+       gcc_cv_as_ix86_tlsldmplt=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_tlsldmplt" >&5
+$as_echo "$gcc_cv_as_ix86_tlsldmplt" >&6; }
+if test $gcc_cv_as_ix86_tlsldmplt = yes; then
+
+$as_echo "#define HAVE_AS_IX86_TLSLDMPLT 1" >>confdefs.h
+
+fi
+
     ;;
 
   ia64*-*-*)
index 9ace66d..dbc825a 100644 (file)
@@ -3550,6 +3550,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*-*-*)