@@ -68,8 +68,10 @@ pub struct AtomicOption<T> {
68
68
}
69
69
70
70
pub enum Ordering {
71
+ Relaxed ,
71
72
Release ,
72
73
Acquire ,
74
+ AcqRel ,
73
75
SeqCst
74
76
}
75
77
@@ -318,6 +320,7 @@ pub unsafe fn atomic_store<T>(dst: &mut T, val: T, order:Ordering) {
318
320
319
321
match order {
320
322
Release => intrinsics:: atomic_store_rel ( dst, val) ,
323
+ Relaxed => intrinsics:: atomic_store_relaxed ( dst, val) ,
321
324
_ => intrinsics:: atomic_store ( dst, val)
322
325
}
323
326
}
@@ -328,6 +331,7 @@ pub unsafe fn atomic_load<T>(dst: &T, order:Ordering) -> T {
328
331
329
332
cast:: transmute ( match order {
330
333
Acquire => intrinsics:: atomic_load_acq ( dst) ,
334
+ Relaxed => intrinsics:: atomic_load_relaxed ( dst) ,
331
335
_ => intrinsics:: atomic_load ( dst)
332
336
} )
333
337
}
@@ -340,6 +344,8 @@ pub unsafe fn atomic_swap<T>(dst: &mut T, val: T, order: Ordering) -> T {
340
344
cast:: transmute ( match order {
341
345
Acquire => intrinsics:: atomic_xchg_acq ( dst, val) ,
342
346
Release => intrinsics:: atomic_xchg_rel ( dst, val) ,
347
+ AcqRel => intrinsics:: atomic_xchg_acqrel ( dst, val) ,
348
+ Relaxed => intrinsics:: atomic_xchg_relaxed ( dst, val) ,
343
349
_ => intrinsics:: atomic_xchg ( dst, val)
344
350
} )
345
351
}
@@ -353,6 +359,8 @@ pub unsafe fn atomic_add<T>(dst: &mut T, val: T, order: Ordering) -> T {
353
359
cast:: transmute ( match order {
354
360
Acquire => intrinsics:: atomic_xadd_acq ( dst, val) ,
355
361
Release => intrinsics:: atomic_xadd_rel ( dst, val) ,
362
+ AcqRel => intrinsics:: atomic_xadd_acqrel ( dst, val) ,
363
+ Relaxed => intrinsics:: atomic_xadd_relaxed ( dst, val) ,
356
364
_ => intrinsics:: atomic_xadd ( dst, val)
357
365
} )
358
366
}
@@ -366,6 +374,8 @@ pub unsafe fn atomic_sub<T>(dst: &mut T, val: T, order: Ordering) -> T {
366
374
cast:: transmute ( match order {
367
375
Acquire => intrinsics:: atomic_xsub_acq ( dst, val) ,
368
376
Release => intrinsics:: atomic_xsub_rel ( dst, val) ,
377
+ AcqRel => intrinsics:: atomic_xsub_acqrel ( dst, val) ,
378
+ Relaxed => intrinsics:: atomic_xsub_relaxed ( dst, val) ,
369
379
_ => intrinsics:: atomic_xsub ( dst, val)
370
380
} )
371
381
}
@@ -379,6 +389,8 @@ pub unsafe fn atomic_compare_and_swap<T>(dst:&mut T, old:T, new:T, order: Orderi
379
389
cast:: transmute ( match order {
380
390
Acquire => intrinsics:: atomic_cxchg_acq ( dst, old, new) ,
381
391
Release => intrinsics:: atomic_cxchg_rel ( dst, old, new) ,
392
+ AcqRel => intrinsics:: atomic_cxchg_acqrel ( dst, old, new) ,
393
+ Relaxed => intrinsics:: atomic_cxchg_relaxed ( dst, old, new) ,
382
394
_ => intrinsics:: atomic_cxchg ( dst, old, new) ,
383
395
} )
384
396
}
0 commit comments