...
Source file src/runtime/internal/atomic/atomic_wasm.go
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 package atomic
27
28 import "unsafe"
29
30
31
32 func Load(ptr *uint32) uint32 {
33 return *ptr
34 }
35
36
37
38 func Loadp(ptr unsafe.Pointer) unsafe.Pointer {
39 return *(*unsafe.Pointer)(ptr)
40 }
41
42
43
44 func LoadAcq(ptr *uint32) uint32 {
45 return *ptr
46 }
47
48
49
50 func Load8(ptr *uint8) uint8 {
51 return *ptr
52 }
53
54
55
56 func Load64(ptr *uint64) uint64 {
57 return *ptr
58 }
59
60
61
62 func Xadd(ptr *uint32, delta int32) uint32 {
63 new := *ptr + uint32(delta)
64 *ptr = new
65 return new
66 }
67
68
69
70 func Xadd64(ptr *uint64, delta int64) uint64 {
71 new := *ptr + uint64(delta)
72 *ptr = new
73 return new
74 }
75
76
77
78 func Xadduintptr(ptr *uintptr, delta uintptr) uintptr {
79 new := *ptr + delta
80 *ptr = new
81 return new
82 }
83
84
85
86 func Xchg(ptr *uint32, new uint32) uint32 {
87 old := *ptr
88 *ptr = new
89 return old
90 }
91
92
93
94 func Xchg64(ptr *uint64, new uint64) uint64 {
95 old := *ptr
96 *ptr = new
97 return old
98 }
99
100
101
102 func Xchguintptr(ptr *uintptr, new uintptr) uintptr {
103 old := *ptr
104 *ptr = new
105 return old
106 }
107
108
109
110 func And8(ptr *uint8, val uint8) {
111 *ptr = *ptr & val
112 }
113
114
115
116 func Or8(ptr *uint8, val uint8) {
117 *ptr = *ptr | val
118 }
119
120
121
122
123
124 func Cas64(ptr *uint64, old, new uint64) bool {
125 if *ptr == old {
126 *ptr = new
127 return true
128 }
129 return false
130 }
131
132
133
134 func Store(ptr *uint32, val uint32) {
135 *ptr = val
136 }
137
138
139
140 func StoreRel(ptr *uint32, val uint32) {
141 *ptr = val
142 }
143
144
145
146 func Store64(ptr *uint64, val uint64) {
147 *ptr = val
148 }
149
150
151 type noWB struct{}
152
153
154
155 func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) {
156 *(**noWB)(ptr) = (*noWB)(val)
157 }
158
159
160
161 func Cas(ptr *uint32, old, new uint32) bool {
162 if *ptr == old {
163 *ptr = new
164 return true
165 }
166 return false
167 }
168
169
170
171 func Casp1(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool {
172 if *ptr == old {
173 *ptr = new
174 return true
175 }
176 return false
177 }
178
179
180
181 func Casuintptr(ptr *uintptr, old, new uintptr) bool {
182 if *ptr == old {
183 *ptr = new
184 return true
185 }
186 return false
187 }
188
189
190
191 func CasRel(ptr *uint32, old, new uint32) bool {
192 if *ptr == old {
193 *ptr = new
194 return true
195 }
196 return false
197 }
198
199
200
201 func Storeuintptr(ptr *uintptr, new uintptr) {
202 *ptr = new
203 }
204
205
206
207 func Loaduintptr(ptr *uintptr) uintptr {
208 return *ptr
209 }
210
211
212
213 func Loaduint(ptr *uint) uint {
214 return *ptr
215 }
216
217
218
219 func Loadint64(ptr *int64) int64 {
220 return *ptr
221 }
222
223
224
225 func Xaddint64(ptr *int64, delta int64) int64 {
226 new := *ptr + delta
227 *ptr = new
228 return new
229 }
230
View as plain text