#![feature(mips_target_feature)]
#![feature(aarch64_target_feature)]
#![feature(wasm_target_feature)]
+#![feature(avx512_target_feature)]
#![feature(const_slice_len)]
#![feature(const_str_as_bytes)]
#![feature(const_str_len)]
return DropLock
}
unsafe {
- let r = wasm32::atomic::wait_i32(
+ let r = wasm32::i32_atomic_wait(
&LOCKED as *const AtomicI32 as *mut i32,
1, // expected value
-1, // timeout
let r = LOCKED.swap(0, SeqCst);
debug_assert_eq!(r, 1);
unsafe {
- wasm32::atomic::wake(
+ wasm32::atomic_notify(
&LOCKED as *const AtomicI32 as *mut i32,
1, // only one thread
);
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use arch::wasm32::atomic;
+use arch::wasm32;
use cmp;
use mem;
use sync::atomic::{AtomicUsize, Ordering::SeqCst};
pub unsafe fn notify_one(&self) {
self.cnt.fetch_add(1, SeqCst);
- atomic::wake(self.ptr(), 1);
+ wasm32::atomic_notify(self.ptr(), 1);
}
#[inline]
pub unsafe fn notify_all(&self) {
self.cnt.fetch_add(1, SeqCst);
- atomic::wake(self.ptr(), -1); // -1 == "wake everyone"
+ wasm32::atomic_notify(self.ptr(), u32::max_value()); // -1 == "wake everyone"
}
pub unsafe fn wait(&self, mutex: &Mutex) {
// wake us up once we're asleep.
let ticket = self.cnt.load(SeqCst) as i32;
mutex.unlock();
- let val = atomic::wait_i32(self.ptr(), ticket, -1);
+ let val = wasm32::i32_atomic_wait(self.ptr(), ticket, -1);
// 0 == woken, 1 == not equal to `ticket`, 2 == timeout (shouldn't happen)
debug_assert!(val == 0 || val == 1);
mutex.lock();
// If the return value is 2 then a timeout happened, so we return
// `false` as we weren't actually notified.
- let ret = atomic::wait_i32(self.ptr(), ticket, nanos as i64) != 2;
+ let ret = wasm32::i32_atomic_wait(self.ptr(), ticket, nanos as i64) != 2;
mutex.lock();
return ret
}
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use arch::wasm32::atomic;
+use arch::wasm32;
use cell::UnsafeCell;
use mem;
use sync::atomic::{AtomicUsize, AtomicU32, Ordering::SeqCst};
pub unsafe fn lock(&self) {
while !self.try_lock() {
- let val = atomic::wait_i32(
+ let val = wasm32::i32_atomic_wait(
self.ptr(),
1, // we expect our mutex is locked
-1, // wait infinitely
pub unsafe fn unlock(&self) {
let prev = self.locked.swap(0, SeqCst);
debug_assert_eq!(prev, 1);
- atomic::wake(self.ptr(), 1); // wake up one waiter, if any
+ wasm32::atomic_notify(self.ptr(), 1); // wake up one waiter, if any
}
#[inline]
pub unsafe fn lock(&self) {
let me = thread::my_id();
while let Err(owner) = self._try_lock(me) {
- let val = atomic::wait_i32(self.ptr(), owner as i32, -1);
+ let val = wasm32::i32_atomic_wait(self.ptr(), owner as i32, -1);
debug_assert!(val == 0 || val == 1);
}
}
match *self.recursions.get() {
0 => {
self.owner.swap(0, SeqCst);
- atomic::wake(self.ptr() as *mut i32, 1); // wake up one waiter, if any
+ wasm32::atomic_notify(self.ptr() as *mut i32, 1); // wake up one waiter, if any
}
ref mut n => *n -= 1,
}
#[cfg(target_feature = "atomics")]
pub fn sleep(dur: Duration) {
- use arch::wasm32::atomic;
+ use arch::wasm32;
use cmp;
// Use an atomic wait to block the current thread artificially with a
while nanos > 0 {
let amt = cmp::min(i64::max_value() as u128, nanos);
let mut x = 0;
- let val = unsafe { atomic::wait_i32(&mut x, 0, amt as i64) };
+ let val = unsafe { wasm32::i32_atomic_wait(&mut x, 0, amt as i64) };
debug_assert_eq!(val, 2);
nanos -= amt;
}
panic!("thread local data not implemented on wasm with atomics yet")
}
- pub fn tcb_set(ptr: *mut u8) {
+ pub fn tcb_set(_ptr: *mut u8) {
panic!("thread local data not implemented on wasm with atomics yet")
}
} else {
-Subproject commit 3c0503db8439928e42c1175f0009c506fc874ae9
+Subproject commit 513e067908f3e2eb8b31ad1c12b2e0a62817e557