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
This commit is contained in:
John Baldwin 2020-02-06 21:46:15 +00:00
parent b09e7a4f42
commit f5a7e78d32
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=357643

View File

@ -38,13 +38,14 @@ __FBSDID("$FreeBSD$");
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include <machine/sysarch.h>
#include <stdlib.h> #include <stdlib.h>
/* NB: size of 'struct tcb'. */
#define TP_OFFSET (sizeof(void *) * 2)
void void
_set_tp(void *tp) _set_tp(void *tp)
{ {
__asm __volatile("mv tp, %0" :: "r"((char*)tp + 0x10)); __asm __volatile("addi tp, %0, %1" :: "r" (tp), "I" (TP_OFFSET));
} }