1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 package atomic
40
41 import "unsafe"
42
43
44
45 func Load(ptr *uint32) uint32 {
46 return *ptr
47 }
48
49
50
51 func Loadp(ptr unsafe.Pointer) unsafe.Pointer {
52 return *(*unsafe.Pointer)(ptr)
53 }
54
55
56
57 func LoadAcq(ptr *uint32) uint32 {
58 return *ptr
59 }
60
61
62
63 func LoadAcq64(ptr *uint64) uint64 {
64 return *ptr
65 }
66
67
68
69 func LoadAcquintptr(ptr *uintptr) uintptr {
70 return *ptr
71 }
72
73
74
75 func Load8(ptr *uint8) uint8 {
76 return *ptr
77 }
78
79
80
81 func Load64(ptr *uint64) uint64 {
82 return *ptr
83 }
84
85
86
87 func Xadd(ptr *uint32, delta int32) uint32 {
88 new := *ptr + uint32(delta)
89 *ptr = new
90 return new
91 }
92
93
94
95 func Xadd64(ptr *uint64, delta int64) uint64 {
96 new := *ptr + uint64(delta)
97 *ptr = new
98 return new
99 }
100
101
102
103 func Xadduintptr(ptr *uintptr, delta uintptr) uintptr {
104 new := *ptr + delta
105 *ptr = new
106 return new
107 }
108
109
110
111 func Xchg(ptr *uint32, new uint32) uint32 {
112 old := *ptr
113 *ptr = new
114 return old
115 }
116
117
118 func Xchg8(addr *uint8, v uint8) uint8 {
119 return goXchg8(addr, v)
120 }
121
122
123
124 func Xchg64(ptr *uint64, new uint64) uint64 {
125 old := *ptr
126 *ptr = new
127 return old
128 }
129
130
131
132 func Xchgint32(ptr *int32, new int32) int32 {
133 old := *ptr
134 *ptr = new
135 return old
136 }
137
138
139
140 func Xchgint64(ptr *int64, new int64) int64 {
141 old := *ptr
142 *ptr = new
143 return old
144 }
145
146
147
148 func Xchguintptr(ptr *uintptr, new uintptr) uintptr {
149 old := *ptr
150 *ptr = new
151 return old
152 }
153
154
155
156 func And8(ptr *uint8, val uint8) {
157 *ptr = *ptr & val
158 }
159
160
161
162 func Or8(ptr *uint8, val uint8) {
163 *ptr = *ptr | val
164 }
165
166
167
168
169
170 func And(ptr *uint32, val uint32) {
171 *ptr = *ptr & val
172 }
173
174
175
176 func Or(ptr *uint32, val uint32) {
177 *ptr = *ptr | val
178 }
179
180
181
182 func Cas64(ptr *uint64, old, new uint64) bool {
183 if *ptr == old {
184 *ptr = new
185 return true
186 }
187 return false
188 }
189
190
191
192 func Store(ptr *uint32, val uint32) {
193 *ptr = val
194 }
195
196
197
198 func StoreRel(ptr *uint32, val uint32) {
199 *ptr = val
200 }
201
202
203
204 func StoreRel64(ptr *uint64, val uint64) {
205 *ptr = val
206 }
207
208
209
210 func StoreReluintptr(ptr *uintptr, val uintptr) {
211 *ptr = val
212 }
213
214
215
216 func Store8(ptr *uint8, val uint8) {
217 *ptr = val
218 }
219
220
221
222 func Store64(ptr *uint64, val uint64) {
223 *ptr = val
224 }
225
226
227
228
229
230 func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer)
231
232
233
234 func Casint32(ptr *int32, old, new int32) bool {
235 if *ptr == old {
236 *ptr = new
237 return true
238 }
239 return false
240 }
241
242
243
244 func Casint64(ptr *int64, old, new int64) bool {
245 if *ptr == old {
246 *ptr = new
247 return true
248 }
249 return false
250 }
251
252
253
254 func Cas(ptr *uint32, old, new uint32) bool {
255 if *ptr == old {
256 *ptr = new
257 return true
258 }
259 return false
260 }
261
262
263
264 func Casp1(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool {
265 if *ptr == old {
266 *ptr = new
267 return true
268 }
269 return false
270 }
271
272
273
274 func Casuintptr(ptr *uintptr, old, new uintptr) bool {
275 if *ptr == old {
276 *ptr = new
277 return true
278 }
279 return false
280 }
281
282
283
284 func CasRel(ptr *uint32, old, new uint32) bool {
285 if *ptr == old {
286 *ptr = new
287 return true
288 }
289 return false
290 }
291
292
293
294 func Storeint32(ptr *int32, new int32) {
295 *ptr = new
296 }
297
298
299
300 func Storeint64(ptr *int64, new int64) {
301 *ptr = new
302 }
303
304
305
306 func Storeuintptr(ptr *uintptr, new uintptr) {
307 *ptr = new
308 }
309
310
311
312 func Loaduintptr(ptr *uintptr) uintptr {
313 return *ptr
314 }
315
316
317
318 func Loaduint(ptr *uint) uint {
319 return *ptr
320 }
321
322
323
324 func Loadint32(ptr *int32) int32 {
325 return *ptr
326 }
327
328
329
330 func Loadint64(ptr *int64) int64 {
331 return *ptr
332 }
333
334
335
336 func Xaddint32(ptr *int32, delta int32) int32 {
337 new := *ptr + delta
338 *ptr = new
339 return new
340 }
341
342
343
344 func Xaddint64(ptr *int64, delta int64) int64 {
345 new := *ptr + delta
346 *ptr = new
347 return new
348 }
349
View as plain text