diff options
Diffstat (limited to 'src/runtime/tls_arm64.s')
| -rw-r--r-- | src/runtime/tls_arm64.s | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/runtime/tls_arm64.s b/src/runtime/tls_arm64.s index 999914d655..3f02974d5b 100644 --- a/src/runtime/tls_arm64.s +++ b/src/runtime/tls_arm64.s @@ -9,33 +9,35 @@ #include "tls_arm64.h" TEXT runtime·load_g(SB),NOSPLIT,$0 +#ifndef TLS_darwin MOVB runtime·iscgo(SB), R0 CBZ R0, nocgo +#endif MRS_TPIDR_R0 -#ifdef GOOS_darwin +#ifdef TLS_darwin // Darwin sometimes returns unaligned pointers AND $0xfffffffffffffff8, R0 #endif MOVD runtime·tls_g(SB), R27 - ADD R27, R0 - MOVD 0(R0), g + MOVD (R0)(R27), g nocgo: RET TEXT runtime·save_g(SB),NOSPLIT,$0 +#ifndef TLS_darwin MOVB runtime·iscgo(SB), R0 CBZ R0, nocgo +#endif MRS_TPIDR_R0 -#ifdef GOOS_darwin +#ifdef TLS_darwin // Darwin sometimes returns unaligned pointers AND $0xfffffffffffffff8, R0 #endif MOVD runtime·tls_g(SB), R27 - ADD R27, R0 - MOVD g, 0(R0) + MOVD g, (R0)(R27) nocgo: RET |
