@@ -164,6 +164,7 @@ pub trait TyVisitor {
164
164
fn visit_self ( & mut self ) -> bool ;
165
165
}
166
166
167
+ #[ cfg( stage0) ]
167
168
extern "rust-intrinsic" {
168
169
pub fn atomic_cxchg < T > ( dst : & mut T , old : T , src : T ) -> T ;
169
170
pub fn atomic_cxchg_acq < T > ( dst : & mut T , old : T , src : T ) -> T ;
@@ -244,6 +245,96 @@ extern "rust-intrinsic" {
244
245
pub fn atomic_umax_rel < T > ( dst : & mut T , src : T ) -> T ;
245
246
pub fn atomic_umax_acqrel < T > ( dst : & mut T , src : T ) -> T ;
246
247
pub fn atomic_umax_relaxed < T > ( dst : & mut T , src : T ) -> T ;
248
+ }
249
+
250
+ #[ cfg( not( stage0) ) ]
251
+ extern "rust-intrinsic" {
252
+
253
+ // NB: These intrinsics take unsafe pointers because they mutate aliased
254
+ // memory, which is not valid for either `&` or `&mut`.
255
+
256
+ pub fn atomic_cxchg < T > ( dst : * mut T , old : T , src : T ) -> T ;
257
+ pub fn atomic_cxchg_acq < T > ( dst : * mut T , old : T , src : T ) -> T ;
258
+ pub fn atomic_cxchg_rel < T > ( dst : * mut T , old : T , src : T ) -> T ;
259
+ pub fn atomic_cxchg_acqrel < T > ( dst : * mut T , old : T , src : T ) -> T ;
260
+ pub fn atomic_cxchg_relaxed < T > ( dst : * mut T , old : T , src : T ) -> T ;
261
+
262
+ pub fn atomic_load < T > ( src : * T ) -> T ;
263
+ pub fn atomic_load_acq < T > ( src : * T ) -> T ;
264
+ pub fn atomic_load_relaxed < T > ( src : * T ) -> T ;
265
+
266
+ pub fn atomic_store < T > ( dst : * mut T , val : T ) ;
267
+ pub fn atomic_store_rel < T > ( dst : * mut T , val : T ) ;
268
+ pub fn atomic_store_relaxed < T > ( dst : * mut T , val : T ) ;
269
+
270
+ pub fn atomic_xchg < T > ( dst : * mut T , src : T ) -> T ;
271
+ pub fn atomic_xchg_acq < T > ( dst : * mut T , src : T ) -> T ;
272
+ pub fn atomic_xchg_rel < T > ( dst : * mut T , src : T ) -> T ;
273
+ pub fn atomic_xchg_acqrel < T > ( dst : * mut T , src : T ) -> T ;
274
+ pub fn atomic_xchg_relaxed < T > ( dst : * mut T , src : T ) -> T ;
275
+
276
+ pub fn atomic_xadd < T > ( dst : * mut T , src : T ) -> T ;
277
+ pub fn atomic_xadd_acq < T > ( dst : * mut T , src : T ) -> T ;
278
+ pub fn atomic_xadd_rel < T > ( dst : * mut T , src : T ) -> T ;
279
+ pub fn atomic_xadd_acqrel < T > ( dst : * mut T , src : T ) -> T ;
280
+ pub fn atomic_xadd_relaxed < T > ( dst : * mut T , src : T ) -> T ;
281
+
282
+ pub fn atomic_xsub < T > ( dst : * mut T , src : T ) -> T ;
283
+ pub fn atomic_xsub_acq < T > ( dst : * mut T , src : T ) -> T ;
284
+ pub fn atomic_xsub_rel < T > ( dst : * mut T , src : T ) -> T ;
285
+ pub fn atomic_xsub_acqrel < T > ( dst : * mut T , src : T ) -> T ;
286
+ pub fn atomic_xsub_relaxed < T > ( dst : * mut T , src : T ) -> T ;
287
+
288
+ pub fn atomic_and < T > ( dst : * mut T , src : T ) -> T ;
289
+ pub fn atomic_and_acq < T > ( dst : * mut T , src : T ) -> T ;
290
+ pub fn atomic_and_rel < T > ( dst : * mut T , src : T ) -> T ;
291
+ pub fn atomic_and_acqrel < T > ( dst : * mut T , src : T ) -> T ;
292
+ pub fn atomic_and_relaxed < T > ( dst : * mut T , src : T ) -> T ;
293
+
294
+ pub fn atomic_nand < T > ( dst : * mut T , src : T ) -> T ;
295
+ pub fn atomic_nand_acq < T > ( dst : * mut T , src : T ) -> T ;
296
+ pub fn atomic_nand_rel < T > ( dst : * mut T , src : T ) -> T ;
297
+ pub fn atomic_nand_acqrel < T > ( dst : * mut T , src : T ) -> T ;
298
+ pub fn atomic_nand_relaxed < T > ( dst : * mut T , src : T ) -> T ;
299
+
300
+ pub fn atomic_or < T > ( dst : * mut T , src : T ) -> T ;
301
+ pub fn atomic_or_acq < T > ( dst : * mut T , src : T ) -> T ;
302
+ pub fn atomic_or_rel < T > ( dst : * mut T , src : T ) -> T ;
303
+ pub fn atomic_or_acqrel < T > ( dst : * mut T , src : T ) -> T ;
304
+ pub fn atomic_or_relaxed < T > ( dst : * mut T , src : T ) -> T ;
305
+
306
+ pub fn atomic_xor < T > ( dst : * mut T , src : T ) -> T ;
307
+ pub fn atomic_xor_acq < T > ( dst : * mut T , src : T ) -> T ;
308
+ pub fn atomic_xor_rel < T > ( dst : * mut T , src : T ) -> T ;
309
+ pub fn atomic_xor_acqrel < T > ( dst : * mut T , src : T ) -> T ;
310
+ pub fn atomic_xor_relaxed < T > ( dst : * mut T , src : T ) -> T ;
311
+
312
+ pub fn atomic_max < T > ( dst : * mut T , src : T ) -> T ;
313
+ pub fn atomic_max_acq < T > ( dst : * mut T , src : T ) -> T ;
314
+ pub fn atomic_max_rel < T > ( dst : * mut T , src : T ) -> T ;
315
+ pub fn atomic_max_acqrel < T > ( dst : * mut T , src : T ) -> T ;
316
+ pub fn atomic_max_relaxed < T > ( dst : * mut T , src : T ) -> T ;
317
+
318
+ pub fn atomic_min < T > ( dst : * mut T , src : T ) -> T ;
319
+ pub fn atomic_min_acq < T > ( dst : * mut T , src : T ) -> T ;
320
+ pub fn atomic_min_rel < T > ( dst : * mut T , src : T ) -> T ;
321
+ pub fn atomic_min_acqrel < T > ( dst : * mut T , src : T ) -> T ;
322
+ pub fn atomic_min_relaxed < T > ( dst : * mut T , src : T ) -> T ;
323
+
324
+ pub fn atomic_umin < T > ( dst : * mut T , src : T ) -> T ;
325
+ pub fn atomic_umin_acq < T > ( dst : * mut T , src : T ) -> T ;
326
+ pub fn atomic_umin_rel < T > ( dst : * mut T , src : T ) -> T ;
327
+ pub fn atomic_umin_acqrel < T > ( dst : * mut T , src : T ) -> T ;
328
+ pub fn atomic_umin_relaxed < T > ( dst : * mut T , src : T ) -> T ;
329
+
330
+ pub fn atomic_umax < T > ( dst : * mut T , src : T ) -> T ;
331
+ pub fn atomic_umax_acq < T > ( dst : * mut T , src : T ) -> T ;
332
+ pub fn atomic_umax_rel < T > ( dst : * mut T , src : T ) -> T ;
333
+ pub fn atomic_umax_acqrel < T > ( dst : * mut T , src : T ) -> T ;
334
+ pub fn atomic_umax_relaxed < T > ( dst : * mut T , src : T ) -> T ;
335
+ }
336
+
337
+ extern "rust-intrinsic" {
247
338
248
339
pub fn atomic_fence ( ) ;
249
340
pub fn atomic_fence_acq ( ) ;
0 commit comments