Pushed to r14-4925.

在 2023/10/24 下午2:40, chenxiaolong 写道:
gcc/ChangeLog:

        * config/loongarch/loongarch.md (get_thread_pointer<mode>):Adds the
         instruction template corresponding to the __builtin_thread_pointer
         function.
        * doc/extend.texi:Add the __builtin_thread_pointer function support
         description to the documentation.

gcc/testsuite/ChangeLog:

        * gcc.target/loongarch/builtin_thread_pointer.c: New test.
---
  gcc/config/loongarch/loongarch.md                      |  7 +++++++
  gcc/doc/extend.texi                                    |  5 +++++
  .../gcc.target/loongarch/builtin_thread_pointer.c      | 10 ++++++++++
  3 files changed, 22 insertions(+)
  create mode 100644 gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c

diff --git a/gcc/config/loongarch/loongarch.md 
b/gcc/config/loongarch/loongarch.md
index 13473472171..4dd716e1941 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -113,6 +113,7 @@ (define_c_enum "unspecv" [
(define_constants
    [(RETURN_ADDR_REGNUM                1)
+   (TP_REGNUM                  2)
     (T0_REGNUM                 12)
     (T1_REGNUM                 13)
     (S0_REGNUM                 23)
@@ -3647,6 +3648,12 @@ (define_insn "@stack_tie<mode>"
    [(set_attr "length" "0")
     (set_attr "type" "ghost")])
+;; Named pattern for expanding thread pointer reference.
+(define_expand "get_thread_pointer<mode>"
+  [(set (match_operand:P 0 "register_operand" "=r")
+       (reg:P TP_REGNUM))]
+  "HAVE_AS_TLS"
+  {})
  
  (define_split
    [(match_operand 0 "small_data_pattern")]
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index bf941e6b93a..9923a18bde9 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -16749,6 +16749,11 @@ __float128 __builtin_nanq (void);
  __float128 __builtin_nansq (void);
  @end smallexample
+Returns the value that is currently set in the @samp{tp} register.
+@smallexample
+    void * __builtin_thread_pointer (void)
+@end smallexample
+
  @node MIPS DSP Built-in Functions
  @subsection MIPS DSP Built-in Functions
diff --git a/gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c b/gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c
new file mode 100644
index 00000000000..541e3b143bd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls_native } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler "or\t\\\$r4,\\\$r2,\\\$r0" } } */
+
+void *
+get_tp ()
+{
+  return __builtin_thread_pointer ();
+}

Reply via email to