aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchenxiaolong <chenxiaolong@loongson.cn>2023-10-24 14:40:14 +0800
committerLulu Cheng <chenglulu@loongson.cn>2023-10-25 21:11:16 +0800
commit1b30ef7cea773e0af527dbf821e0be42b6a264f8 (patch)
tree59be8a85b7adb9d77291c497c9ed407d1013bf33
parentfb28d5c6b0a47ab704290d0122f978d1e6346551 (diff)
downloadgcc-1b30ef7cea773e0af527dbf821e0be42b6a264f8.zip
gcc-1b30ef7cea773e0af527dbf821e0be42b6a264f8.tar.gz
gcc-1b30ef7cea773e0af527dbf821e0be42b6a264f8.tar.bz2
LoongArch: Implement __builtin_thread_pointer for TLS.
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.
-rw-r--r--gcc/config/loongarch/loongarch.md7
-rw-r--r--gcc/doc/extend.texi5
-rw-r--r--gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c10
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md
index 1347347..4dd716e 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -113,6 +113,7 @@
(define_constants
[(RETURN_ADDR_REGNUM 1)
+ (TP_REGNUM 2)
(T0_REGNUM 12)
(T1_REGNUM 13)
(S0_REGNUM 23)
@@ -3647,6 +3648,12 @@
[(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 bf941e6..9923a18 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 0000000..541e3b1
--- /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 ();
+}