awkernel_sync 0.1.0

no_std synchronization primitives (mutex, rwlock, spinlock, MCS lock) with interrupt guards for the Awkernel operating system.
use core::arch::asm;

#[inline(always)]
pub fn get_flag() -> usize {
    let v: u64;
    unsafe { asm!("mrs {}, daif", lateout(reg) v) };
    v as usize
}

#[inline(always)]
pub fn disable() {
    unsafe { core::arch::asm!("msr daifset, #0b0010",) };
}

#[inline(always)]
pub fn set_flag(flag: usize) {
    unsafe { asm!("msr daif, {}", in(reg) flag as u64) };
}

#[inline(always)]
pub fn are_enabled() -> bool {
    let v: u64;
    unsafe { asm!("mrs {}, daif", lateout(reg) v) };
    (v & (1 << 7)) == 0
}