github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/runtime/tls_arm64.s (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "go_asm.h" 6 #include "go_tls.h" 7 #include "funcdata.h" 8 #include "textflag.h" 9 #include "tls_arm64.h" 10 11 TEXT runtime·load_g(SB),NOSPLIT,$0 12 #ifndef GOOS_darwin 13 #ifndef GOOS_openbsd 14 #ifndef GOOS_windows 15 MOVB runtime·iscgo(SB), R0 16 CBZ R0, nocgo 17 #endif 18 #endif 19 #endif 20 21 MRS_TPIDR_R0 22 #ifdef TLS_darwin 23 // Darwin sometimes returns unaligned pointers 24 AND $0xfffffffffffffff8, R0 25 #endif 26 MOVD runtime·tls_g(SB), R27 27 MOVD (R0)(R27), g 28 29 nocgo: 30 RET 31 32 TEXT runtime·save_g(SB),NOSPLIT,$0 33 #ifndef GOOS_darwin 34 #ifndef GOOS_openbsd 35 #ifndef GOOS_windows 36 MOVB runtime·iscgo(SB), R0 37 CBZ R0, nocgo 38 #endif 39 #endif 40 #endif 41 42 MRS_TPIDR_R0 43 #ifdef TLS_darwin 44 // Darwin sometimes returns unaligned pointers 45 AND $0xfffffffffffffff8, R0 46 #endif 47 MOVD runtime·tls_g(SB), R27 48 MOVD g, (R0)(R27) 49 50 nocgo: 51 RET 52 53 #ifdef TLSG_IS_VARIABLE 54 #ifdef GOOS_android 55 // Use the free TLS_SLOT_APP slot #2 on Android Q. 56 // Earlier androids are set up in gcc_android.c. 57 DATA runtime·tls_g+0(SB)/8, $16 58 #endif 59 GLOBL runtime·tls_g+0(SB), NOPTR, $8 60 #else 61 GLOBL runtime·tls_g+0(SB), TLSBSS, $8 62 #endif