diff options
author | chenxiaolong <chenxiaolong@loongson.cn> | 2023-10-24 14:40:14 +0800 |
---|---|---|
committer | Lulu Cheng <chenglulu@loongson.cn> | 2023-10-25 21:11:16 +0800 |
commit | 1b30ef7cea773e0af527dbf821e0be42b6a264f8 (patch) | |
tree | 59be8a85b7adb9d77291c497c9ed407d1013bf33 | |
parent | fb28d5c6b0a47ab704290d0122f978d1e6346551 (diff) | |
download | gcc-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.md | 7 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c | 10 |
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 (); +} |