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