Index: src/runtime/tls_riscv64.s
--- src/runtime/tls_riscv64.s.orig
+++ src/runtime/tls_riscv64.s
@@ -11,20 +11,16 @@
 //
 // NOTE: mcall() assumes this clobbers only X31 (REG_TMP).
 TEXT runtime·save_g(SB),NOSPLIT|NOFRAME,$0-0
+#ifndef GOOS_openbsd
 	MOVB	runtime·iscgo(SB), X31
-	BEQ	X0, X31, nocgo
-
-	MOV	runtime·tls_g(SB), X31
-	ADD	TP, X31		// add offset to thread pointer (X4)
-	MOV	g, (X31)
-
+	BEQZ	X31, nocgo
+#endif
+	MOV	g, runtime·tls_g(SB)
 nocgo:
 	RET
 
 TEXT runtime·load_g(SB),NOSPLIT|NOFRAME,$0-0
-	MOV	runtime·tls_g(SB), X31
-	ADD	TP, X31		// add offset to thread pointer (X4)
-	MOV	(X31), g
+	MOV	runtime·tls_g(SB), g
 	RET
 
 GLOBL runtime·tls_g(SB), TLSBSS, $8
