@@ -250,85 +250,88 @@ extern "rust-intrinsic" {
250
250
#[ cfg( not( stage0) ) ]
251
251
extern "rust-intrinsic" {
252
252
253
- pub fn atomic_cxchg < T > ( dst : & T , old : T , src : T ) -> T ;
254
- pub fn atomic_cxchg_acq < T > ( dst : & T , old : T , src : T ) -> T ;
255
- pub fn atomic_cxchg_rel < T > ( dst : & T , old : T , src : T ) -> T ;
256
- pub fn atomic_cxchg_acqrel < T > ( dst : & T , old : T , src : T ) -> T ;
257
- pub fn atomic_cxchg_relaxed < T > ( dst : & T , old : T , src : T ) -> T ;
258
-
259
- pub fn atomic_load < T > ( src : & T ) -> T ;
260
- pub fn atomic_load_acq < T > ( src : & T ) -> T ;
261
- pub fn atomic_load_relaxed < T > ( src : & T ) -> T ;
262
-
263
- pub fn atomic_store < T > ( dst : & T , val : T ) ;
264
- pub fn atomic_store_rel < T > ( dst : & T , val : T ) ;
265
- pub fn atomic_store_relaxed < T > ( dst : & T , val : T ) ;
266
-
267
- pub fn atomic_xchg < T > ( dst : & T , src : T ) -> T ;
268
- pub fn atomic_xchg_acq < T > ( dst : & T , src : T ) -> T ;
269
- pub fn atomic_xchg_rel < T > ( dst : & T , src : T ) -> T ;
270
- pub fn atomic_xchg_acqrel < T > ( dst : & T , src : T ) -> T ;
271
- pub fn atomic_xchg_relaxed < T > ( dst : & T , src : T ) -> T ;
272
-
273
- pub fn atomic_xadd < T > ( dst : & T , src : T ) -> T ;
274
- pub fn atomic_xadd_acq < T > ( dst : & T , src : T ) -> T ;
275
- pub fn atomic_xadd_rel < T > ( dst : & T , src : T ) -> T ;
276
- pub fn atomic_xadd_acqrel < T > ( dst : & T , src : T ) -> T ;
277
- pub fn atomic_xadd_relaxed < T > ( dst : & T , src : T ) -> T ;
278
-
279
- pub fn atomic_xsub < T > ( dst : & T , src : T ) -> T ;
280
- pub fn atomic_xsub_acq < T > ( dst : & T , src : T ) -> T ;
281
- pub fn atomic_xsub_rel < T > ( dst : & T , src : T ) -> T ;
282
- pub fn atomic_xsub_acqrel < T > ( dst : & T , src : T ) -> T ;
283
- pub fn atomic_xsub_relaxed < T > ( dst : & T , src : T ) -> T ;
284
-
285
- pub fn atomic_and < T > ( dst : & T , src : T ) -> T ;
286
- pub fn atomic_and_acq < T > ( dst : & T , src : T ) -> T ;
287
- pub fn atomic_and_rel < T > ( dst : & T , src : T ) -> T ;
288
- pub fn atomic_and_acqrel < T > ( dst : & T , src : T ) -> T ;
289
- pub fn atomic_and_relaxed < T > ( dst : & T , src : T ) -> T ;
290
-
291
- pub fn atomic_nand < T > ( dst : & T , src : T ) -> T ;
292
- pub fn atomic_nand_acq < T > ( dst : & T , src : T ) -> T ;
293
- pub fn atomic_nand_rel < T > ( dst : & T , src : T ) -> T ;
294
- pub fn atomic_nand_acqrel < T > ( dst : & T , src : T ) -> T ;
295
- pub fn atomic_nand_relaxed < T > ( dst : & T , src : T ) -> T ;
296
-
297
- pub fn atomic_or < T > ( dst : & T , src : T ) -> T ;
298
- pub fn atomic_or_acq < T > ( dst : & T , src : T ) -> T ;
299
- pub fn atomic_or_rel < T > ( dst : & T , src : T ) -> T ;
300
- pub fn atomic_or_acqrel < T > ( dst : & T , src : T ) -> T ;
301
- pub fn atomic_or_relaxed < T > ( dst : & T , src : T ) -> T ;
302
-
303
- pub fn atomic_xor < T > ( dst : & T , src : T ) -> T ;
304
- pub fn atomic_xor_acq < T > ( dst : & T , src : T ) -> T ;
305
- pub fn atomic_xor_rel < T > ( dst : & T , src : T ) -> T ;
306
- pub fn atomic_xor_acqrel < T > ( dst : & T , src : T ) -> T ;
307
- pub fn atomic_xor_relaxed < T > ( dst : & T , src : T ) -> T ;
308
-
309
- pub fn atomic_max < T > ( dst : & T , src : T ) -> T ;
310
- pub fn atomic_max_acq < T > ( dst : & T , src : T ) -> T ;
311
- pub fn atomic_max_rel < T > ( dst : & T , src : T ) -> T ;
312
- pub fn atomic_max_acqrel < T > ( dst : & T , src : T ) -> T ;
313
- pub fn atomic_max_relaxed < T > ( dst : & T , src : T ) -> T ;
314
-
315
- pub fn atomic_min < T > ( dst : & T , src : T ) -> T ;
316
- pub fn atomic_min_acq < T > ( dst : & T , src : T ) -> T ;
317
- pub fn atomic_min_rel < T > ( dst : & T , src : T ) -> T ;
318
- pub fn atomic_min_acqrel < T > ( dst : & T , src : T ) -> T ;
319
- pub fn atomic_min_relaxed < T > ( dst : & T , src : T ) -> T ;
320
-
321
- pub fn atomic_umin < T > ( dst : & T , src : T ) -> T ;
322
- pub fn atomic_umin_acq < T > ( dst : & T , src : T ) -> T ;
323
- pub fn atomic_umin_rel < T > ( dst : & T , src : T ) -> T ;
324
- pub fn atomic_umin_acqrel < T > ( dst : & T , src : T ) -> T ;
325
- pub fn atomic_umin_relaxed < T > ( dst : & T , src : T ) -> T ;
326
-
327
- pub fn atomic_umax < T > ( dst : & T , src : T ) -> T ;
328
- pub fn atomic_umax_acq < T > ( dst : & T , src : T ) -> T ;
329
- pub fn atomic_umax_rel < T > ( dst : & T , src : T ) -> T ;
330
- pub fn atomic_umax_acqrel < T > ( dst : & T , src : T ) -> T ;
331
- pub fn atomic_umax_relaxed < T > ( dst : & T , src : T ) -> T ;
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 ;
332
335
}
333
336
334
337
extern "rust-intrinsic" {
0 commit comments