[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