diff mbox

[1/2] xtensa: fix TLS calls for call0 ABI

Message ID 1442311251-28016-2-git-send-email-jcmvbkbc@gmail.com
State New
Headers show

Commit Message

Max Filippov Sept. 15, 2015, 10 a.m. UTC
2015-09-15  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
	* config/xtensa/xtensa.c (xtensa_call_tls_desc): Use a10 or a2
	to pass TLS call argument, according to current ABI.
	* config/xtensa/xtensa.md (tls_call pattern): Use callx8 or
	callx0 for TLS call, according to current ABI.
---
 gcc/config/xtensa/xtensa.c  | 12 ++++++------
 gcc/config/xtensa/xtensa.md |  7 ++++++-
 2 files changed, 12 insertions(+), 7 deletions(-)

Comments

augustine.sterling@gmail.com Sept. 15, 2015, 6:21 p.m. UTC | #1
On Tue, Sep 15, 2015 at 3:00 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
> 2015-09-15  Max Filippov  <jcmvbkbc@gmail.com>
> gcc/
>         * config/xtensa/xtensa.c (xtensa_call_tls_desc): Use a10 or a2
>         to pass TLS call argument, according to current ABI.
>         * config/xtensa/xtensa.md (tls_call pattern): Use callx8 or

Approved, please apply.
Max Filippov Sept. 15, 2015, 9:54 p.m. UTC | #2
On Tue, Sep 15, 2015 at 9:21 PM, augustine.sterling@gmail.com
<augustine.sterling@gmail.com> wrote:
> On Tue, Sep 15, 2015 at 3:00 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
>> 2015-09-15  Max Filippov  <jcmvbkbc@gmail.com>
>> gcc/
>>         * config/xtensa/xtensa.c (xtensa_call_tls_desc): Use a10 or a2
>>         to pass TLS call argument, according to current ABI.
>>         * config/xtensa/xtensa.md (tls_call pattern): Use callx8 or
>
> Approved, please apply.

Applied both patches to trunk. Thank you!

-- Max
diff mbox

Patch

diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
index eb039ba..0aa6a0a 100644
--- a/gcc/config/xtensa/xtensa.c
+++ b/gcc/config/xtensa/xtensa.c
@@ -1891,23 +1891,23 @@  xtensa_tls_module_base (void)
 static rtx_insn *
 xtensa_call_tls_desc (rtx sym, rtx *retp)
 {
-  rtx fn, arg, a10;
+  rtx fn, arg, a_io;
   rtx_insn *call_insn, *insns;
 
   start_sequence ();
   fn = gen_reg_rtx (Pmode);
   arg = gen_reg_rtx (Pmode);
-  a10 = gen_rtx_REG (Pmode, 10);
+  a_io = gen_rtx_REG (Pmode, WINDOW_SIZE + 2);
 
   emit_insn (gen_tls_func (fn, sym));
   emit_insn (gen_tls_arg (arg, sym));
-  emit_move_insn (a10, arg);
-  call_insn = emit_call_insn (gen_tls_call (a10, fn, sym, const1_rtx));
-  use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), a10);
+  emit_move_insn (a_io, arg);
+  call_insn = emit_call_insn (gen_tls_call (a_io, fn, sym, const1_rtx));
+  use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), a_io);
   insns = get_insns ();
   end_sequence ();
 
-  *retp = a10;
+  *retp = a_io;
   return insns;
 }
 
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index 6d84384..e3c517d 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -1867,7 +1867,12 @@ 
 				  UNSPEC_TLS_CALL))
 	      (match_operand 3 "" "i")))]
   "TARGET_THREADPTR && HAVE_AS_TLS"
-  "callx8.tls %1, %2@TLSCALL"
+{
+  if (TARGET_WINDOWED_ABI)
+    return "callx8.tls %1, %2@TLSCALL";
+  else
+    return "callx0.tls %1, %2@TLSCALL";
+}
   [(set_attr "type"	"call")
    (set_attr "mode"	"none")
    (set_attr "length"	"3")])