atomic_s390x.mx raw
1 // Copyright 2016 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 package atomic
6
7 import "unsafe"
8
9 // Export some functions via linkname to assembly in sync/atomic.
10 //
11 //go:linkname Load
12 //go:linkname Loadp
13 //go:linkname Load64
14
15 //go:nosplit
16 //go:noinline
17 func Load(ptr *uint32) uint32 {
18 return *ptr
19 }
20
21 //go:nosplit
22 //go:noinline
23 func Loadp(ptr unsafe.Pointer) unsafe.Pointer {
24 return *(*unsafe.Pointer)(ptr)
25 }
26
27 //go:nosplit
28 //go:noinline
29 func Load8(ptr *uint8) uint8 {
30 return *ptr
31 }
32
33 //go:nosplit
34 //go:noinline
35 func Load64(ptr *uint64) uint64 {
36 return *ptr
37 }
38
39 //go:nosplit
40 //go:noinline
41 func LoadAcq(ptr *uint32) uint32 {
42 return *ptr
43 }
44
45 //go:nosplit
46 //go:noinline
47 func LoadAcq64(ptr *uint64) uint64 {
48 return *ptr
49 }
50
51 //go:nosplit
52 //go:noinline
53 func LoadAcquintptr(ptr *uintptr) uintptr {
54 return *ptr
55 }
56
57 //go:noescape
58 func Store(ptr *uint32, val uint32)
59
60 //go:noescape
61 func Store8(ptr *uint8, val uint8)
62
63 //go:noescape
64 func Store64(ptr *uint64, val uint64)
65
66 // NO go:noescape annotation; see atomic_pointer.go.
67 func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
68
69 //go:nosplit
70 //go:noinline
71 func StoreRel(ptr *uint32, val uint32) {
72 *ptr = val
73 }
74
75 //go:nosplit
76 //go:noinline
77 func StoreRel64(ptr *uint64, val uint64) {
78 *ptr = val
79 }
80
81 //go:nosplit
82 //go:noinline
83 func StoreReluintptr(ptr *uintptr, val uintptr) {
84 *ptr = val
85 }
86
87 //go:noescape
88 func And8(ptr *uint8, val uint8)
89
90 //go:noescape
91 func Or8(ptr *uint8, val uint8)
92
93 // NOTE: Do not add atomicxor8 (XOR is not idempotent).
94
95 //go:noescape
96 func And(ptr *uint32, val uint32)
97
98 //go:noescape
99 func Or(ptr *uint32, val uint32)
100
101 //go:noescape
102 func And32(ptr *uint32, val uint32) uint32
103
104 //go:noescape
105 func Or32(ptr *uint32, val uint32) uint32
106
107 //go:noescape
108 func And64(ptr *uint64, val uint64) uint64
109
110 //go:noescape
111 func Or64(ptr *uint64, val uint64) uint64
112
113 //go:noescape
114 func Anduintptr(ptr *uintptr, val uintptr) uintptr
115
116 //go:noescape
117 func Oruintptr(ptr *uintptr, val uintptr) uintptr
118
119 //go:noescape
120 func Xadd(ptr *uint32, delta int32) uint32
121
122 //go:noescape
123 func Xadd64(ptr *uint64, delta int64) uint64
124
125 //go:noescape
126 func Xadduintptr(ptr *uintptr, delta uintptr) uintptr
127
128 //go:noescape
129 func Xchg(ptr *uint32, new uint32) uint32
130
131 //go:nosplit
132 func Xchg8(addr *uint8, v uint8) uint8 {
133 return goXchg8(addr, v)
134 }
135
136 //go:noescape
137 func Xchg64(ptr *uint64, new uint64) uint64
138
139 //go:noescape
140 func Xchguintptr(ptr *uintptr, new uintptr) uintptr
141
142 //go:noescape
143 func Cas64(ptr *uint64, old, new uint64) bool
144
145 //go:noescape
146 func CasRel(ptr *uint32, old, new uint32) bool
147