...
Text file
src/runtime/tls_arm64.s
Documentation: runtime
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
11TEXT 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
29nocgo:
30 RET
31
32TEXT 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
50nocgo:
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.
57DATA runtime·tls_g+0(SB)/8, $16
58#endif
59GLOBL runtime·tls_g+0(SB), NOPTR, $8
60#else
61GLOBL runtime·tls_g+0(SB), TLSBSS, $8
62#endif
View as plain text