diff options
Diffstat (limited to 'src/loom/std/atomic_u64.rs')
-rw-r--r-- | src/loom/std/atomic_u64.rs | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/src/loom/std/atomic_u64.rs b/src/loom/std/atomic_u64.rs index 8ea6bd4..ce391be 100644 --- a/src/loom/std/atomic_u64.rs +++ b/src/loom/std/atomic_u64.rs @@ -7,65 +7,13 @@ // `#[cfg(target_has_atomic = "64")]`. // Refs: https://github.com/rust-lang/rust/tree/master/src/librustc_target cfg_has_atomic_u64! { - pub(crate) use std::sync::atomic::AtomicU64; + #[path = "atomic_u64_native.rs"] + mod imp; } cfg_not_has_atomic_u64! { - use crate::loom::sync::Mutex; - use std::sync::atomic::Ordering; - - #[derive(Debug)] - pub(crate) struct AtomicU64 { - inner: Mutex<u64>, - } - - impl AtomicU64 { - pub(crate) fn new(val: u64) -> Self { - Self { - inner: Mutex::new(val), - } - } - - pub(crate) fn load(&self, _: Ordering) -> u64 { - *self.inner.lock() - } - - pub(crate) fn store(&self, val: u64, _: Ordering) { - *self.inner.lock() = val; - } - - pub(crate) fn fetch_or(&self, val: u64, _: Ordering) -> u64 { - let mut lock = self.inner.lock(); - let prev = *lock; - *lock = prev | val; - prev - } - - pub(crate) fn compare_exchange( - &self, - current: u64, - new: u64, - _success: Ordering, - _failure: Ordering, - ) -> Result<u64, u64> { - let mut lock = self.inner.lock(); - - if *lock == current { - *lock = new; - Ok(current) - } else { - Err(*lock) - } - } - - pub(crate) fn compare_exchange_weak( - &self, - current: u64, - new: u64, - success: Ordering, - failure: Ordering, - ) -> Result<u64, u64> { - self.compare_exchange(current, new, success, failure) - } - } + #[path = "atomic_u64_as_mutex.rs"] + mod imp; } + +pub(crate) use imp::{AtomicU64, StaticAtomicU64}; |