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 63