diff options
author | John Baldwin <jhb@FreeBSD.org> | 2020-02-06 21:46:15 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2020-02-06 21:46:15 +0000 |
commit | f5a7e78d32681503919519f13bae92bbd2db7eb2 (patch) | |
tree | 4047f4cb2574619f96ba7c7990dfa57fa8b448b3 /lib/libc/riscv | |
parent | b09e7a4f42b5a40521d91c1c615edc7dff0fb44f (diff) | |
download | src-f5a7e78d32681503919519f13bae92bbd2db7eb2.tar.gz src-f5a7e78d32681503919519f13bae92bbd2db7eb2.zip |
Tidy the _set_tp function for RISC-V.
- Use a constant for the offset instead of a magic number.
- Use an addi instruction that writes to tp directly instead of a mv
that writes the result of a compiler-generated addi.
Reviewed by: mhorne
MFC after: 1 week
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D23521
Notes
Notes:
svn path=/head/; revision=357643
Diffstat (limited to 'lib/libc/riscv')
-rw-r--r-- | lib/libc/riscv/gen/_set_tp.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/libc/riscv/gen/_set_tp.c b/lib/libc/riscv/gen/_set_tp.c index a880465253a4..49295e26857c 100644 --- a/lib/libc/riscv/gen/_set_tp.c +++ b/lib/libc/riscv/gen/_set_tp.c @@ -38,13 +38,14 @@ __FBSDID("$FreeBSD$"); #include <string.h> #include <sys/types.h> -#include <machine/sysarch.h> - #include <stdlib.h> +/* NB: size of 'struct tcb'. */ +#define TP_OFFSET (sizeof(void *) * 2) + void _set_tp(void *tp) { - __asm __volatile("mv tp, %0" :: "r"((char*)tp + 0x10)); + __asm __volatile("addi tp, %0, %1" :: "r" (tp), "I" (TP_OFFSET)); } |