aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2015-07-15 15:42:07 +0200
committerUros Bizjak <uros@gcc.gnu.org>2015-07-15 15:42:07 +0200
commite6c9b417dee38febf870197b4f1156de9b6fbb7c (patch)
tree66e95d77c976fd44aef1ef99d2bd7ee12cf3476d /gcc
parent28ef6a27c84e800fd56081cf653c6b17f896ac0f (diff)
downloadgcc-e6c9b417dee38febf870197b4f1156de9b6fbb7c.zip
gcc-e6c9b417dee38febf870197b4f1156de9b6fbb7c.tar.gz
gcc-e6c9b417dee38febf870197b4f1156de9b6fbb7c.tar.bz2
re PR target/58066 (__tls_get_addr is called with misaligned stack on x86-64)
PR target/58066 * config/i386/i386.md (*tls_global_dynamic_64_<mode>): Depend on SP_REG. (*tls_local_dynamic_base_64_<mode>): Ditto. (*tls_local_dynamic_base_64_largepic): Ditto. (tls_global_dynamic_64_<mode>): Update expander pattern. (tls_local_dynamic_base_64_<mode>): Ditto. From-SVN: r225829
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.md17
2 files changed, 19 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6750820..244e81e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2015-07-15 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/58066
+ * config/i386/i386.md (*tls_global_dynamic_64_<mode>): Depend on SP_REG.
+ (*tls_local_dynamic_base_64_<mode>): Ditto.
+ (*tls_local_dynamic_base_64_largepic): Ditto.
+ (tls_global_dynamic_64_<mode>): Update expander pattern.
+ (tls_local_dynamic_base_64_<mode>): Ditto.
+
2015-07-15 Richard Biener <rguenther@suse.de>
* fold-const.c (fold_binary_loc): Move bool_var != 0 -> bool_var
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 354532a..b7b795e 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -13158,7 +13158,8 @@
(call:P
(mem:QI (match_operand 2 "constant_call_address_operand" "Bz"))
(match_operand 3)))
- (unspec:P [(match_operand 1 "tls_symbolic_operand")]
+ (unspec:P [(match_operand 1 "tls_symbolic_operand")
+ (reg:P SP_REG)]
UNSPEC_TLS_GD)]
"TARGET_64BIT"
{
@@ -13182,8 +13183,9 @@
(mem:QI (plus:DI (match_operand:DI 2 "register_operand" "b")
(match_operand:DI 3 "immediate_operand" "i")))
(match_operand 4)))
- (unspec:DI [(match_operand 1 "tls_symbolic_operand")]
- UNSPEC_TLS_GD)]
+ (unspec:DI [(match_operand 1 "tls_symbolic_operand")
+ (reg:DI SP_REG)]
+ UNSPEC_TLS_GD)]
"TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
&& GET_CODE (operands[3]) == CONST
&& GET_CODE (XEXP (operands[3], 0)) == UNSPEC
@@ -13204,7 +13206,8 @@
(call:P
(mem:QI (match_operand 2))
(const_int 0)))
- (unspec:P [(match_operand 1 "tls_symbolic_operand")]
+ (unspec:P [(match_operand 1 "tls_symbolic_operand")
+ (reg:P SP_REG)]
UNSPEC_TLS_GD)])]
"TARGET_64BIT"
"ix86_tls_descriptor_calls_expanded_in_cfun = true;")
@@ -13254,7 +13257,7 @@
(call:P
(mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
(match_operand 2)))
- (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)]
+ (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)]
"TARGET_64BIT"
{
output_asm_insn
@@ -13272,7 +13275,7 @@
(mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
(match_operand:DI 2 "immediate_operand" "i")))
(match_operand 3)))
- (unspec:DI [(const_int 0)] UNSPEC_TLS_LD_BASE)]
+ (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)]
"TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
&& GET_CODE (operands[2]) == CONST
&& GET_CODE (XEXP (operands[2], 0)) == UNSPEC
@@ -13293,7 +13296,7 @@
(call:P
(mem:QI (match_operand 1))
(const_int 0)))
- (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)])]
+ (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)])]
"TARGET_64BIT"
"ix86_tls_descriptor_calls_expanded_in_cfun = true;")