re PR target/47715 ([x32] TLS doesn't work)
authorUros Bizjak <uros@gcc.gnu.org>
Thu, 28 Jul 2011 14:42:45 +0000 (16:42 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 28 Jul 2011 14:42:45 +0000 (16:42 +0200)
PR target/47715
* config/i386/i386.md (*tls_global_dynamic_64): Remove mode from
tls_symbolic_operand check.  Update code sequence for TARGET_X32.
(tls_global_dynamic_64): Remove mode from tls_symbolic_operand check.
(tls_dynamic_gnu2_64): Ditto.
(*tls_dynamic_gnu2_lea_64): Ditto.
(*tls_dynamic_gnu2_call_64): Ditto.
(*tls_dynamic_gnu2_combine_64): Ditto.

From-SVN: r176872

gcc/ChangeLog
gcc/config/i386/i386.md

index 59e1cd553f5b182f08262e506ad52bdb652a4825..707bd26e518d8df43f0a3c57420b38396eacf915 100644 (file)
@@ -1,3 +1,14 @@
+2011-07-28  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/47715
+       * config/i386/i386.md (*tls_global_dynamic_64): Remove mode from
+       tls_symbolic_operand check.  Update code sequence for TARGET_X32.
+       (tls_global_dynamic_64): Remove mode from tls_symbolic_operand check.
+       (tls_dynamic_gnu2_64): Ditto.
+       (*tls_dynamic_gnu2_lea_64): Ditto.
+       (*tls_dynamic_gnu2_call_64): Ditto.
+       (*tls_dynamic_gnu2_combine_64): Ditto.
+
 2011-07-28  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config.gcc: Set need_64bit_hwint to yes for x86 targets.
 
 2011-07-28  Kai Tietz  <ktietz@redhat.com>
 
-       * tree-vrp.c (simplify_stmt_using_ranges): Remove
-       TRUTH_NOT_EXPR case.
+       * tree-vrp.c (simplify_stmt_using_ranges): Remove TRUTH_NOT_EXPR case.
        (simplify_truth_ops_using_ranges): Likewise.
        (build_assert_expr_for): Likewise.
        (build_assert_expr_for_1): Remove TRUTH_NOT_EXPR case
        and handle BIT_NOT_EXPR for truth-operation.
 
 2011-07-28  Georg-Johann Lay  <avr@gjlay.de>
-       
+
        PR target/49313
        Undo r176835 from trunk
        2011-07-27  Georg-Johann Lay
 
 2011-07-28  Georg-Johann Lay  <avr@gjlay.de>
-       
+
        PR target/49687
        * config/avr/t-avr (LIB1ASMFUNCS): Remove _xmulhisi3_exit.
        Add _muluhisi3, _mulshisi3, _usmulhisi3.
index fce426868beb46f060f1075d56773a297e1d5bfb..01e9a383feaa97134f71e44accba04c3357c7a4c 100644 (file)
        (call:DI
         (mem:QI (match_operand:DI 2 "constant_call_address_operand" "z"))
         (match_operand:DI 3 "" "")))
-   (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")]
+   (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")]
              UNSPEC_TLS_GD)]
   "TARGET_64BIT"
 {
-  fputs (ASM_BYTE "0x66\n", asm_out_file);
+  if (!TARGET_X32)
+    fputs (ASM_BYTE "0x66\n", asm_out_file);
   output_asm_insn
     ("lea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}", operands);
   fputs (ASM_SHORT "0x6666\n", asm_out_file);
          (call:DI
           (mem:QI (match_operand:DI 2 "constant_call_address_operand" ""))
           (const_int 0)))
-     (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")]
+     (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")]
                UNSPEC_TLS_GD)])])
 
 (define_insn "*tls_local_dynamic_base_32_gnu"
   ix86_tls_descriptor_calls_expanded_in_cfun = true;
 })
 
-(define_insn "*tls_dynamic_lea_32"
+(define_insn "*tls_dynamic_gnu2_lea_32"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (plus:SI (match_operand:SI 1 "register_operand" "b")
                 (const:SI
    (set_attr "length" "6")
    (set_attr "length_address" "4")])
 
-(define_insn "*tls_dynamic_call_32"
+(define_insn "*tls_dynamic_gnu2_call_32"
   [(set (match_operand:SI 0 "register_operand" "=a")
        (unspec:SI [(match_operand:SI 1 "tls_symbolic_operand" "")
                    (match_operand:SI 2 "register_operand" "0")
 
 (define_expand "tls_dynamic_gnu2_64"
   [(set (match_dup 2)
-       (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")]
+       (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")]
                   UNSPEC_TLSDESC))
    (parallel
     [(set (match_operand:DI 0 "register_operand" "")
   ix86_tls_descriptor_calls_expanded_in_cfun = true;
 })
 
-(define_insn "*tls_dynamic_lea_64"
+(define_insn "*tls_dynamic_gnu2_lea_64"
   [(set (match_operand:DI 0 "register_operand" "=r")
-       (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")]
+       (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")]
                   UNSPEC_TLSDESC))]
   "TARGET_64BIT && TARGET_GNU2_TLS"
   "lea{q}\t{%a1@TLSDESC(%%rip), %0|%0, %a1@TLSDESC[rip]}"
    (set_attr "length" "7")
    (set_attr "length_address" "4")])
 
-(define_insn "*tls_dynamic_call_64"
+(define_insn "*tls_dynamic_gnu2_call_64"
   [(set (match_operand:DI 0 "register_operand" "=a")
-       (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")
+       (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")
                    (match_operand:DI 2 "register_operand" "0")
                    (reg:DI SP_REG)]
                   UNSPEC_TLSDESC))
                     (reg:DI SP_REG)]
                    UNSPEC_TLSDESC)
         (const:DI (unspec:DI
-                   [(match_operand:DI 1 "tls_symbolic_operand" "")]
+                   [(match_operand 1 "tls_symbolic_operand" "")]
                    UNSPEC_DTPOFF))))
    (clobber (reg:CC FLAGS_REG))]
   "TARGET_64BIT && TARGET_GNU2_TLS"