aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/tls_riscv64.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/tls_riscv64.s')
-rw-r--r--src/runtime/tls_riscv64.s16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/runtime/tls_riscv64.s b/src/runtime/tls_riscv64.s
index 8386980421..22b550b761 100644
--- a/src/runtime/tls_riscv64.s
+++ b/src/runtime/tls_riscv64.s
@@ -9,10 +9,22 @@
// If !iscgo, this is a no-op.
//
-// NOTE: mcall() assumes this clobbers only R23 (REGTMP).
-// FIXME: cgo
+// NOTE: mcall() assumes this clobbers only X31 (REG_TMP).
TEXT runtime·save_g(SB),NOSPLIT|NOFRAME,$0-0
+ MOVB runtime·iscgo(SB), X31
+ BEQ X0, X31, nocgo
+
+ MOV runtime·tls_g(SB), X31
+ ADD X4, X31 // add offset to thread pointer (X4)
+ MOV g, (X31)
+
+nocgo:
RET
TEXT runtime·load_g(SB),NOSPLIT|NOFRAME,$0-0
+ MOV runtime·tls_g(SB), X31
+ ADD X4, X31 // add offset to thread pointer (X4)
+ MOV (X31), g
RET
+
+GLOBL runtime·tls_g(SB), TLSBSS, $8