pub mod affinity;
pub mod prefetch;
#[inline(always)]
pub unsafe fn barrier() {
#[cfg(target_arch = "aarch64")]
{
core::arch::asm!("dmb ish", options(nostack, preserves_flags));
}
#[cfg(not(target_arch = "aarch64"))]
{
core::sync::atomic::fence(core::sync::atomic::Ordering::SeqCst);
}
}
#[inline(always)]
pub unsafe fn fence() {
#[cfg(target_arch = "aarch64")]
{
core::arch::asm!("dsb ish", options(nostack, preserves_flags));
}
#[cfg(not(target_arch = "aarch64"))]
{
core::sync::atomic::fence(core::sync::atomic::Ordering::SeqCst);
}
}
#[inline(always)]
pub unsafe fn isb() {
#[cfg(target_arch = "aarch64")]
{
core::arch::asm!("isb", options(nostack, preserves_flags));
}
#[cfg(not(target_arch = "aarch64"))]
{
}
}
#[inline(always)]
pub unsafe fn wait() {
#[cfg(target_arch = "aarch64")]
{
core::arch::asm!("wfe", options(nostack, preserves_flags));
}
#[cfg(not(target_arch = "aarch64"))]
{
std::thread::yield_now();
}
}
#[inline(always)]
pub unsafe fn wake() {
#[cfg(target_arch = "aarch64")]
{
core::arch::asm!("sev", options(nostack, preserves_flags));
}
#[cfg(not(target_arch = "aarch64"))]
{
}
}