Skip to content

Commit 8282896

Browse files
committed
remove (more) CAS API from Atomic* types where not natively supported
closes #54276
1 parent d3cba9b commit 8282896

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

src/libcore/sync/atomic.rs

+23
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ impl AtomicBool {
558558
/// ```
559559
#[inline]
560560
#[stable(feature = "extended_compare_and_swap", since = "1.10.0")]
561+
#[cfg(target_has_atomic = "cas")]
561562
pub fn compare_exchange_weak(&self,
562563
current: bool,
563564
new: bool,
@@ -1041,6 +1042,7 @@ impl<T> AtomicPtr<T> {
10411042
/// ```
10421043
#[inline]
10431044
#[stable(feature = "extended_compare_and_swap", since = "1.10.0")]
1045+
#[cfg(target_has_atomic = "cas")]
10441046
pub fn compare_exchange_weak(&self,
10451047
current: *mut T,
10461048
new: *mut T,
@@ -1434,6 +1436,7 @@ loop {
14341436
```"),
14351437
#[inline]
14361438
#[$stable_cxchg]
1439+
#[cfg(target_has_atomic = "cas")]
14371440
pub fn compare_exchange_weak(&self,
14381441
current: $int_type,
14391442
new: $int_type,
@@ -1471,6 +1474,7 @@ assert_eq!(foo.load(Ordering::SeqCst), 10);
14711474
```"),
14721475
#[inline]
14731476
#[$stable]
1477+
#[cfg(target_has_atomic = "cas")]
14741478
pub fn fetch_add(&self, val: $int_type, order: Ordering) -> $int_type {
14751479
unsafe { atomic_add(self.v.get(), val, order) }
14761480
}
@@ -1502,6 +1506,7 @@ assert_eq!(foo.load(Ordering::SeqCst), 10);
15021506
```"),
15031507
#[inline]
15041508
#[$stable]
1509+
#[cfg(target_has_atomic = "cas")]
15051510
pub fn fetch_sub(&self, val: $int_type, order: Ordering) -> $int_type {
15061511
unsafe { atomic_sub(self.v.get(), val, order) }
15071512
}
@@ -1536,6 +1541,7 @@ assert_eq!(foo.load(Ordering::SeqCst), 0b100001);
15361541
```"),
15371542
#[inline]
15381543
#[$stable]
1544+
#[cfg(target_has_atomic = "cas")]
15391545
pub fn fetch_and(&self, val: $int_type, order: Ordering) -> $int_type {
15401546
unsafe { atomic_and(self.v.get(), val, order) }
15411547
}
@@ -1571,6 +1577,7 @@ assert_eq!(foo.load(Ordering::SeqCst), !(0x13 & 0x31));
15711577
```"),
15721578
#[inline]
15731579
#[$stable_nand]
1580+
#[cfg(target_has_atomic = "cas")]
15741581
pub fn fetch_nand(&self, val: $int_type, order: Ordering) -> $int_type {
15751582
unsafe { atomic_nand(self.v.get(), val, order) }
15761583
}
@@ -1605,6 +1612,7 @@ assert_eq!(foo.load(Ordering::SeqCst), 0b111111);
16051612
```"),
16061613
#[inline]
16071614
#[$stable]
1615+
#[cfg(target_has_atomic = "cas")]
16081616
pub fn fetch_or(&self, val: $int_type, order: Ordering) -> $int_type {
16091617
unsafe { atomic_or(self.v.get(), val, order) }
16101618
}
@@ -1639,6 +1647,7 @@ assert_eq!(foo.load(Ordering::SeqCst), 0b011110);
16391647
```"),
16401648
#[inline]
16411649
#[$stable]
1650+
#[cfg(target_has_atomic = "cas")]
16421651
pub fn fetch_xor(&self, val: $int_type, order: Ordering) -> $int_type {
16431652
unsafe { atomic_xor(self.v.get(), val, order) }
16441653
}
@@ -1688,6 +1697,7 @@ assert_eq!(x.load(Ordering::SeqCst), 9);
16881697
#[unstable(feature = "no_more_cas",
16891698
reason = "no more CAS loops in user code",
16901699
issue = "48655")]
1700+
#[cfg(target_has_atomic = "cas")]
16911701
pub fn fetch_update<F>(&self,
16921702
mut f: F,
16931703
fetch_order: Ordering,
@@ -1748,6 +1758,7 @@ assert!(max_foo == 42);
17481758
#[unstable(feature = "atomic_min_max",
17491759
reason = "easier and faster min/max than writing manual CAS loop",
17501760
issue = "48655")]
1761+
#[cfg(target_has_atomic = "cas")]
17511762
pub fn fetch_max(&self, val: $int_type, order: Ordering) -> $int_type {
17521763
unsafe { $max_fn(self.v.get(), val, order) }
17531764
}
@@ -1799,6 +1810,7 @@ assert_eq!(min_foo, 12);
17991810
#[unstable(feature = "atomic_min_max",
18001811
reason = "easier and faster min/max than writing manual CAS loop",
18011812
issue = "48655")]
1813+
#[cfg(target_has_atomic = "cas")]
18021814
pub fn fetch_min(&self, val: $int_type, order: Ordering) -> $int_type {
18031815
unsafe { $min_fn(self.v.get(), val, order) }
18041816
}
@@ -1987,6 +1999,7 @@ unsafe fn atomic_swap<T>(dst: *mut T, val: T, order: Ordering) -> T {
19871999

19882000
/// Returns the previous value (like __sync_fetch_and_add).
19892001
#[inline]
2002+
#[cfg(target_has_atomic = "cas")]
19902003
unsafe fn atomic_add<T>(dst: *mut T, val: T, order: Ordering) -> T {
19912004
match order {
19922005
Acquire => intrinsics::atomic_xadd_acq(dst, val),
@@ -1999,6 +2012,7 @@ unsafe fn atomic_add<T>(dst: *mut T, val: T, order: Ordering) -> T {
19992012

20002013
/// Returns the previous value (like __sync_fetch_and_sub).
20012014
#[inline]
2015+
#[cfg(target_has_atomic = "cas")]
20022016
unsafe fn atomic_sub<T>(dst: *mut T, val: T, order: Ordering) -> T {
20032017
match order {
20042018
Acquire => intrinsics::atomic_xsub_acq(dst, val),
@@ -2035,6 +2049,7 @@ unsafe fn atomic_compare_exchange<T>(dst: *mut T,
20352049
}
20362050

20372051
#[inline]
2052+
#[cfg(target_has_atomic = "cas")]
20382053
unsafe fn atomic_compare_exchange_weak<T>(dst: *mut T,
20392054
old: T,
20402055
new: T,
@@ -2059,6 +2074,7 @@ unsafe fn atomic_compare_exchange_weak<T>(dst: *mut T,
20592074
}
20602075

20612076
#[inline]
2077+
#[cfg(target_has_atomic = "cas")]
20622078
unsafe fn atomic_and<T>(dst: *mut T, val: T, order: Ordering) -> T {
20632079
match order {
20642080
Acquire => intrinsics::atomic_and_acq(dst, val),
@@ -2070,6 +2086,7 @@ unsafe fn atomic_and<T>(dst: *mut T, val: T, order: Ordering) -> T {
20702086
}
20712087

20722088
#[inline]
2089+
#[cfg(target_has_atomic = "cas")]
20732090
unsafe fn atomic_nand<T>(dst: *mut T, val: T, order: Ordering) -> T {
20742091
match order {
20752092
Acquire => intrinsics::atomic_nand_acq(dst, val),
@@ -2081,6 +2098,7 @@ unsafe fn atomic_nand<T>(dst: *mut T, val: T, order: Ordering) -> T {
20812098
}
20822099

20832100
#[inline]
2101+
#[cfg(target_has_atomic = "cas")]
20842102
unsafe fn atomic_or<T>(dst: *mut T, val: T, order: Ordering) -> T {
20852103
match order {
20862104
Acquire => intrinsics::atomic_or_acq(dst, val),
@@ -2092,6 +2110,7 @@ unsafe fn atomic_or<T>(dst: *mut T, val: T, order: Ordering) -> T {
20922110
}
20932111

20942112
#[inline]
2113+
#[cfg(target_has_atomic = "cas")]
20952114
unsafe fn atomic_xor<T>(dst: *mut T, val: T, order: Ordering) -> T {
20962115
match order {
20972116
Acquire => intrinsics::atomic_xor_acq(dst, val),
@@ -2104,6 +2123,7 @@ unsafe fn atomic_xor<T>(dst: *mut T, val: T, order: Ordering) -> T {
21042123

21052124
/// returns the max value (signed comparison)
21062125
#[inline]
2126+
#[cfg(target_has_atomic = "cas")]
21072127
unsafe fn atomic_max<T>(dst: *mut T, val: T, order: Ordering) -> T {
21082128
match order {
21092129
Acquire => intrinsics::atomic_max_acq(dst, val),
@@ -2116,6 +2136,7 @@ unsafe fn atomic_max<T>(dst: *mut T, val: T, order: Ordering) -> T {
21162136

21172137
/// returns the min value (signed comparison)
21182138
#[inline]
2139+
#[cfg(target_has_atomic = "cas")]
21192140
unsafe fn atomic_min<T>(dst: *mut T, val: T, order: Ordering) -> T {
21202141
match order {
21212142
Acquire => intrinsics::atomic_min_acq(dst, val),
@@ -2128,6 +2149,7 @@ unsafe fn atomic_min<T>(dst: *mut T, val: T, order: Ordering) -> T {
21282149

21292150
/// returns the max value (signed comparison)
21302151
#[inline]
2152+
#[cfg(target_has_atomic = "cas")]
21312153
unsafe fn atomic_umax<T>(dst: *mut T, val: T, order: Ordering) -> T {
21322154
match order {
21332155
Acquire => intrinsics::atomic_umax_acq(dst, val),
@@ -2140,6 +2162,7 @@ unsafe fn atomic_umax<T>(dst: *mut T, val: T, order: Ordering) -> T {
21402162

21412163
/// returns the min value (signed comparison)
21422164
#[inline]
2165+
#[cfg(target_has_atomic = "cas")]
21432166
unsafe fn atomic_umin<T>(dst: *mut T, val: T, order: Ordering) -> T {
21442167
match order {
21452168
Acquire => intrinsics::atomic_umin_acq(dst, val),

0 commit comments

Comments
 (0)