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:
jhb 2020-02-06 21:46:15 +00:00
parent 81f3d74b03
commit 2eae6e6484

View File

@ -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));
}