...

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