aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/riscv
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2020-02-06 21:46:15 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2020-02-06 21:46:15 +0000
commitf5a7e78d32681503919519f13bae92bbd2db7eb2 (patch)
tree4047f4cb2574619f96ba7c7990dfa57fa8b448b3 /lib/libc/riscv
parentb09e7a4f42b5a40521d91c1c615edc7dff0fb44f (diff)
downloadsrc-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.c7
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));
}