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//go:build arm64
6
7package atomic
8
9import (
10	"internal/cpu"
11	"unsafe"
12)
13
14const (
15	offsetARM64HasATOMICS = unsafe.Offsetof(cpu.ARM64.HasATOMICS)
16)
17
18//go:noescape
19func Xadd(ptr *uint32, delta int32) uint32
20
21//go:noescape
22func Xadd64(ptr *uint64, delta int64) uint64
23
24//go:noescape
25func Xadduintptr(ptr *uintptr, delta uintptr) uintptr
26
27//go:noescape
28func Xchg(ptr *uint32, new uint32) uint32
29
30//go:noescape
31func Xchg64(ptr *uint64, new uint64) uint64
32
33//go:noescape
34func Xchguintptr(ptr *uintptr, new uintptr) uintptr
35
36//go:noescape
37func Load(ptr *uint32) uint32
38
39//go:noescape
40func Load8(ptr *uint8) uint8
41
42//go:noescape
43func Load64(ptr *uint64) uint64
44
45// NO go:noescape annotation; *ptr escapes if result escapes (#31525)
46func Loadp(ptr unsafe.Pointer) unsafe.Pointer
47
48//go:noescape
49func LoadAcq(addr *uint32) uint32
50
51//go:noescape
52func LoadAcq64(ptr *uint64) uint64
53
54//go:noescape
55func LoadAcquintptr(ptr *uintptr) uintptr
56
57//go:noescape
58func Or8(ptr *uint8, val uint8)
59
60//go:noescape
61func And8(ptr *uint8, val uint8)
62
63//go:noescape
64func And(ptr *uint32, val uint32)
65
66//go:noescape
67func Or(ptr *uint32, val uint32)
68
69//go:noescape
70func And32(ptr *uint32, val uint32) uint32
71
72//go:noescape
73func Or32(ptr *uint32, val uint32) uint32
74
75//go:noescape
76func And64(ptr *uint64, val uint64) uint64
77
78//go:noescape
79func Or64(ptr *uint64, val uint64) uint64
80
81//go:noescape
82func Anduintptr(ptr *uintptr, val uintptr) uintptr
83
84//go:noescape
85func Oruintptr(ptr *uintptr, val uintptr) uintptr
86
87//go:noescape
88func Cas64(ptr *uint64, old, new uint64) bool
89
90//go:noescape
91func CasRel(ptr *uint32, old, new uint32) bool
92
93//go:noescape
94func Store(ptr *uint32, val uint32)
95
96//go:noescape
97func Store8(ptr *uint8, val uint8)
98
99//go:noescape
100func Store64(ptr *uint64, val uint64)
101
102// NO go:noescape annotation; see atomic_pointer.go.
103func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
104
105//go:noescape
106func StoreRel(ptr *uint32, val uint32)
107
108//go:noescape
109func StoreRel64(ptr *uint64, val uint64)
110
111//go:noescape
112func StoreReluintptr(ptr *uintptr, val uintptr)
113