Commit a758fa89 by Aurelien Jarno Committed by John David Anglin

pa.md: Split tgd_load, tld_load and tie_load into pic and non-pic versions.

	* config/pa/pa.md: Split tgd_load, tld_load and tie_load
	into pic and non-pic versions. Mark r19 as used for 
	tgd_load_pic, tld_load_pic and tie_load_pic. Mark r27 as used 
	for tgd_load, tld_load and tie_load .
	* config/pa/pa.c (legitimize_tls_address): Emit pic or non-pic
	version of tgd_load, tld_load and tie_load depending on the 
	value of flag_pic.

From-SVN: r124468
parent a2aa65f0
2007-05-05 Aurelien Jarno <aurelien@aurel32.net>
* config/pa/pa.md: Split tgd_load, tld_load and tie_load
into pic and non-pic versions. Mark r19 as used for
tgd_load_pic, tld_load_pic and tie_load_pic. Mark r27 as used
for tgd_load, tld_load and tie_load .
* config/pa/pa.c (legitimize_tls_address): Emit pic or non-pic
version of tgd_load, tld_load and tie_load depending on the
value of flag_pic.
2007-05-04 Ulrich Drepper <drepper@redhat.com> 2007-05-04 Ulrich Drepper <drepper@redhat.com>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
......
...@@ -733,7 +733,10 @@ legitimize_tls_address (rtx addr) ...@@ -733,7 +733,10 @@ legitimize_tls_address (rtx addr)
{ {
case TLS_MODEL_GLOBAL_DYNAMIC: case TLS_MODEL_GLOBAL_DYNAMIC:
tmp = gen_reg_rtx (Pmode); tmp = gen_reg_rtx (Pmode);
emit_insn (gen_tgd_load (tmp, addr)); if (flag_pic)
emit_insn (gen_tgd_load_pic (tmp, addr));
else
emit_insn (gen_tgd_load (tmp, addr));
ret = hppa_tls_call (tmp); ret = hppa_tls_call (tmp);
break; break;
...@@ -741,7 +744,10 @@ legitimize_tls_address (rtx addr) ...@@ -741,7 +744,10 @@ legitimize_tls_address (rtx addr)
ret = gen_reg_rtx (Pmode); ret = gen_reg_rtx (Pmode);
tmp = gen_reg_rtx (Pmode); tmp = gen_reg_rtx (Pmode);
start_sequence (); start_sequence ();
emit_insn (gen_tld_load (tmp, addr)); if (flag_pic)
emit_insn (gen_tld_load_pic (tmp, addr));
else
emit_insn (gen_tld_load (tmp, addr));
t1 = hppa_tls_call (tmp); t1 = hppa_tls_call (tmp);
insn = get_insns (); insn = get_insns ();
end_sequence (); end_sequence ();
...@@ -757,7 +763,10 @@ legitimize_tls_address (rtx addr) ...@@ -757,7 +763,10 @@ legitimize_tls_address (rtx addr)
tmp = gen_reg_rtx (Pmode); tmp = gen_reg_rtx (Pmode);
ret = gen_reg_rtx (Pmode); ret = gen_reg_rtx (Pmode);
emit_insn (gen_tp_load (tp)); emit_insn (gen_tp_load (tp));
emit_insn (gen_tie_load (tmp, addr)); if (flag_pic)
emit_insn (gen_tie_load_pic (tmp, addr));
else
emit_insn (gen_tie_load (tmp, addr));
emit_move_insn (ret, gen_rtx_PLUS (Pmode, tp, tmp)); emit_move_insn (ret, gen_rtx_PLUS (Pmode, tp, tmp));
break; break;
......
...@@ -39,6 +39,9 @@ ...@@ -39,6 +39,9 @@
(UNSPEC_TLSLDBASE 7) (UNSPEC_TLSLDBASE 7)
(UNSPEC_TLSIE 8) (UNSPEC_TLSIE 8)
(UNSPEC_TLSLE 9) (UNSPEC_TLSLE 9)
(UNSPEC_TLSGD_PIC 10)
(UNSPEC_TLSLDM_PIC 11)
(UNSPEC_TLSIE_PIC 12)
]) ])
;; UNSPEC_VOLATILE: ;; UNSPEC_VOLATILE:
...@@ -10148,14 +10151,25 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" ...@@ -10148,14 +10151,25 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
(define_insn "tgd_load" (define_insn "tgd_load"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand 1 "tgd_symbolic_operand" "")] UNSPEC_TLSGD)) (unspec:SI [(match_operand 1 "tgd_symbolic_operand" "")] UNSPEC_TLSGD))
(clobber (reg:SI 1))] (clobber (reg:SI 1))
(use (reg:SI 27))]
"" ""
"* "*
{ {
if (flag_pic) return \"addil LR'%1-$tls_gdidx$,%%r27\;ldo RR'%1-$tls_gdidx$(%%r1),%0\";
return \"addil LT'%1-$tls_gdidx$,%%r19\;ldo RT'%1-$tls_gdidx$(%%r1),%0\"; }"
else [(set_attr "type" "multi")
return \"addil LR'%1-$tls_gdidx$,%%r27\;ldo RR'%1-$tls_gdidx$(%%r1),%0\"; (set_attr "length" "8")])
(define_insn "tgd_load_pic"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand 1 "tgd_symbolic_operand" "")] UNSPEC_TLSGD_PIC))
(clobber (reg:SI 1))
(use (reg:SI 19))]
""
"*
{
return \"addil LT'%1-$tls_gdidx$,%%r19\;ldo RT'%1-$tls_gdidx$(%%r1),%0\";
}" }"
[(set_attr "type" "multi") [(set_attr "type" "multi")
(set_attr "length" "8")]) (set_attr "length" "8")])
...@@ -10163,14 +10177,25 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" ...@@ -10163,14 +10177,25 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
(define_insn "tld_load" (define_insn "tld_load"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand 1 "tld_symbolic_operand" "")] UNSPEC_TLSLDM)) (unspec:SI [(match_operand 1 "tld_symbolic_operand" "")] UNSPEC_TLSLDM))
(clobber (reg:SI 1))] (clobber (reg:SI 1))
(use (reg:SI 27))]
"" ""
"* "*
{ {
if (flag_pic) return \"addil LR'%1-$tls_ldidx$,%%r27\;ldo RR'%1-$tls_ldidx$(%%r1),%0\";
return \"addil LT'%1-$tls_ldidx$,%%r19\;ldo RT'%1-$tls_ldidx$(%%r1),%0\"; }"
else [(set_attr "type" "multi")
return \"addil LR'%1-$tls_ldidx$,%%r27\;ldo RR'%1-$tls_ldidx$(%%r1),%0\"; (set_attr "length" "8")])
(define_insn "tld_load_pic"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand 1 "tld_symbolic_operand" "")] UNSPEC_TLSLDM_PIC))
(clobber (reg:SI 1))
(use (reg:SI 19))]
""
"*
{
return \"addil LT'%1-$tls_ldidx$,%%r19\;ldo RT'%1-$tls_ldidx$(%%r1),%0\";
}" }"
[(set_attr "type" "multi") [(set_attr "type" "multi")
(set_attr "length" "8")]) (set_attr "length" "8")])
...@@ -10200,14 +10225,25 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" ...@@ -10200,14 +10225,25 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
(define_insn "tie_load" (define_insn "tie_load"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand 1 "tie_symbolic_operand" "")] UNSPEC_TLSIE)) (unspec:SI [(match_operand 1 "tie_symbolic_operand" "")] UNSPEC_TLSIE))
(clobber (reg:SI 1))] (clobber (reg:SI 1))
(use (reg:SI 27))]
"" ""
"* "*
{ {
if (flag_pic) return \"addil LR'%1-$tls_ieoff$,%%r27\;ldw RR'%1-$tls_ieoff$(%%r1),%0\";
return \"addil LT'%1-$tls_ieoff$,%%r19\;ldw RT'%1-$tls_ieoff$(%%r1),%0\"; }"
else [(set_attr "type" "multi")
return \"addil LR'%1-$tls_ieoff$,%%r27\;ldw RR'%1-$tls_ieoff$(%%r1),%0\"; (set_attr "length" "8")])
(define_insn "tie_load_pic"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand 1 "tie_symbolic_operand" "")] UNSPEC_TLSIE_PIC))
(clobber (reg:SI 1))
(use (reg:SI 19))]
""
"*
{
return \"addil LT'%1-$tls_ieoff$,%%r19\;ldw RT'%1-$tls_ieoff$(%%r1),%0\";
}" }"
[(set_attr "type" "multi") [(set_attr "type" "multi")
(set_attr "length" "8")]) (set_attr "length" "8")])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment