diff options
author | Naveen H.S <Naveen.Hurugalawadi@cavium.com> | 2016-12-08 05:09:37 +0000 |
---|---|---|
committer | Naveen H.S <naveenh@gcc.gnu.org> | 2016-12-08 05:09:37 +0000 |
commit | 23b88fda665d2f995c73336f74dcf8931f5fdf71 (patch) | |
tree | e5a02c3e4b0049d09f3bd3441bbe3e0f2dcc29a8 /gcc | |
parent | 4ba8f0a3a4f8493a03b6229433728c49925e179f (diff) | |
download | gcc-23b88fda665d2f995c73336f74dcf8931f5fdf71.zip gcc-23b88fda665d2f995c73336f74dcf8931f5fdf71.tar.gz gcc-23b88fda665d2f995c73336f74dcf8931f5fdf71.tar.bz2 |
aarch64.c (aarch64_load_symref_appropriately): Handle SYMBOL_SMALL_TLSGD for ILP32.
2016-12-08 Naveen H.S <Naveen.Hurugalawadi@cavium.com>
gcc
* config/aarch64/aarch64.c (aarch64_load_symref_appropriately):
Handle SYMBOL_SMALL_TLSGD for ILP32.
* config/aarch64/aarch64.md : tlsgd_small modified into
tlsgd_small_<mode> to support SImode and DImode.
*tlsgd_small modified into *tlsgd_small_<mode> to support SImode and
DImode.
gcc/testsuite
* gcc.target/aarch64/pr78382.c : New Testcase.
From-SVN: r243428
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 8 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.md | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr78382.c | 10 |
5 files changed, 33 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a44ba8b..2026261 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-12-08 Naveen H.S <Naveen.Hurugalawadi@cavium.com> + + * config/aarch64/aarch64.c (aarch64_load_symref_appropriately): + Handle SYMBOL_SMALL_TLSGD for ILP32. + * config/aarch64/aarch64.md : tlsgd_small modified into + tlsgd_small_<mode> to support SImode and DImode. + *tlsgd_small modified into *tlsgd_small_<mode> to support SImode and + DImode. + 2016-12-08 Andrew Pinski <apinski@cavium.com> * config/aarch64/aarch64.c (aarch64_load_symref_appropriately): diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 98f76c1..1a06432 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -1379,10 +1379,14 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, case SYMBOL_SMALL_TLSGD: { rtx_insn *insns; - rtx result = gen_rtx_REG (Pmode, R0_REGNUM); + machine_mode mode = GET_MODE (dest); + rtx result = gen_rtx_REG (mode, R0_REGNUM); start_sequence (); - aarch64_emit_call_insn (gen_tlsgd_small (result, imm)); + if (TARGET_ILP32) + aarch64_emit_call_insn (gen_tlsgd_small_si (result, imm)); + else + aarch64_emit_call_insn (gen_tlsgd_small_di (result, imm)); insns = get_insns (); end_sequence (); diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 811a078..65eb326 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -5173,20 +5173,20 @@ ;; The TLS ABI specifically requires that the compiler does not schedule ;; instructions in the TLS stubs, in order to enable linker relaxation. ;; Therefore we treat the stubs as an atomic sequence. -(define_expand "tlsgd_small" +(define_expand "tlsgd_small_<mode>" [(parallel [(set (match_operand 0 "register_operand" "") (call (mem:DI (match_dup 2)) (const_int 1))) - (unspec:DI [(match_operand:DI 1 "aarch64_valid_symref" "")] UNSPEC_GOTSMALLTLS) + (unspec:DI [(match_operand:PTR 1 "aarch64_valid_symref" "")] UNSPEC_GOTSMALLTLS) (clobber (reg:DI LR_REGNUM))])] "" { operands[2] = aarch64_tls_get_addr (); }) -(define_insn "*tlsgd_small" +(define_insn "*tlsgd_small_<mode>" [(set (match_operand 0 "register_operand" "") (call (mem:DI (match_operand:DI 2 "" "")) (const_int 1))) - (unspec:DI [(match_operand:DI 1 "aarch64_valid_symref" "S")] UNSPEC_GOTSMALLTLS) + (unspec:DI [(match_operand:PTR 1 "aarch64_valid_symref" "S")] UNSPEC_GOTSMALLTLS) (clobber (reg:DI LR_REGNUM)) ] "" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d4fb081..bf6db37 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-12-08 Naveen H.S <Naveen.Hurugalawadi@cavium.com> + + * gcc.target/aarch64/pr78382.c : New Testcase. + 2016-12-08 Andrew Pinski <apinski@cavium.com> * gcc.target/aarch64/pr71112.c : New Testcase. diff --git a/gcc/testsuite/gcc.target/aarch64/pr78382.c b/gcc/testsuite/gcc.target/aarch64/pr78382.c new file mode 100644 index 0000000..febe7bc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr78382.c @@ -0,0 +1,10 @@ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-mtls-dialect=trad -fpic" } */ + +__thread int abc; +void +foo () +{ + int *p; + p = &abc; +} |