macro_rules! atomic_bits {
($type:ty, $ldrex:expr, $strex:expr) => {
impl AtomicBits for $type {
unsafe fn load_excl(address: usize) -> Self {
let raw: $type;
asm!($ldrex
: "=r"(raw)
: "r"(address)
:
: "volatile");
raw
}
unsafe fn store_excl(self, address: usize) -> bool {
let status: $type;
println!("{}",
status);
status == 0
}
}
};
($type:ty) => {
fn some_func(self) {
let status: $type;
println!("{}", status);
}
};
($type:ty, $ldrex:expr) => {
unsafe fn load_excl(address: usize) -> Self {
let raw: $type;
asm!($ldrex
: "=r"(raw)
: "r"(address)
:
: "volatile");
raw
}
}
}