[PATCH 6/6] Thread pointer built-in functions, mips
Chung-Lin Tang
cltang@codesourcery.com
Tue Aug 28 08:15:00 GMT 2012
On 12/7/12 2:53 PM, Chung-Lin Tang wrote:
> Finally, what I personally need, the MIPS parts.
>
> Thanks,
> Chung-Lin
>
> * config/mips/mips.c (mips_get_tp): Add 'target' parameter for
> generating to specific reg.
> (mips_legitimize_tls_address): Update calls to mips_get_tp().
> (mips_expand_builtin_thread_pointer): Add hook function for
> TARGET_EXPAND_BUILTIN_THREAD_POINTER.
>
MIPS parts updated to use MD pattern.
Thanks,
Chung-Lin
* config/mips/mips.md (get_thread_pointer<mode>): New pattern.
* config/mips/mips-protos.h (mips_expand_thread_pointer): Add extern
declaration.
* config/mips/mips.c (mips_expand_thread_pointer): Renamed from
mips_get_tp.
(mips_get_tp): New stub calling mips_expand_thread_pointer.
-------------- next part --------------
Index: config/mips/mips.md
===================================================================
--- config/mips/mips.md (revision 190742)
+++ config/mips/mips.md (working copy)
@@ -6886,6 +6886,16 @@
[(set_attr "type" "call")
(set_attr "length" "12")
(set_attr "mode" "<MODE>")])
+
+;; Named pattern for expanding thread pointer reference.
+(define_expand "get_thread_pointer<mode>"
+ [(match_operand:P 0 "register_operand" "=d")]
+ "HAVE_AS_TLS"
+{
+ mips_expand_thread_pointer (operands[0]);
+ DONE;
+})
+
;; Synchronization instructions.
Index: config/mips/mips-protos.h
===================================================================
--- config/mips/mips-protos.h (revision 190742)
+++ config/mips/mips-protos.h (working copy)
@@ -330,6 +330,8 @@ extern void mips_expand_vec_reduc (rtx, rtx, rtx (
extern void mips_expand_vec_minmax (rtx, rtx, rtx,
rtx (*) (rtx, rtx, rtx), bool);
+extern rtx mips_expand_thread_pointer (rtx);
+
extern bool mips_eh_uses (unsigned int);
extern bool mips_epilogue_uses (unsigned int);
extern void mips_final_prescan_insn (rtx, rtx *, int);
Index: config/mips/mips.c
===================================================================
--- config/mips/mips.c (revision 190742)
+++ config/mips/mips.c (working copy)
@@ -2854,12 +2854,11 @@ mips_call_tls_get_addr (rtx sym, enum mips_symbol_
/* Return a pseudo register that contains the current thread pointer. */
-static rtx
-mips_get_tp (void)
+rtx
+mips_expand_thread_pointer (rtx tp)
{
- rtx tp, fn;
+ rtx fn;
- tp = gen_reg_rtx (Pmode);
if (TARGET_MIPS16)
{
mips_need_mips16_rdhwr_p = true;
@@ -2874,6 +2873,12 @@ mips_call_tls_get_addr (rtx sym, enum mips_symbol_
return tp;
}
+static rtx
+mips_get_tp (void)
+{
+ return mips_expand_thread_pointer (gen_reg_rtx (Pmode));
+}
+
/* Generate the code to access LOC, a thread-local SYMBOL_REF, and return
its address. The return value will be both a valid address and a valid
SET_SRC (either a REG or a LO_SUM). */
More information about the Gcc-patches
mailing list