@@ -250,85 +250,88 @@ extern "rust-intrinsic" {
250250#[ cfg( not( stage0) ) ]
251251extern "rust-intrinsic" {
252252
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 ;
332335}
333336
334337extern "rust-intrinsic" {
0 commit comments