#[inline(always)]
pub fn bkpt() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("bkpt" :::: "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __bkpt();
}
__bkpt();
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn delay(_n: u32) {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe {
llvm_asm!("1:
nop
subs $0, $$1
bne.n 1b"
: "+r"(_n / 4 + 1)
:
: "cpsr"
: "volatile");
},
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __delay(n: u32);
}
__delay(_n / 4 + 1);
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn nop() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("nop" :::: "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __nop();
}
__nop()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn udf() -> ! {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe {
llvm_asm!("udf" :::: "volatile");
core::hint::unreachable_unchecked();
},
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __udf();
}
__udf();
core::hint::unreachable_unchecked();
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn wfe() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("wfe" :::: "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __wfe();
}
__wfe()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn wfi() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("wfi" :::: "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __wfi();
}
__wfi()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn sev() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("sev" :::: "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __sev();
}
__sev()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn isb() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("isb 0xF" ::: "memory" : "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __isb();
}
__isb()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn dsb() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("dsb 0xF" ::: "memory" : "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __dsb();
}
__dsb()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
pub fn dmb() {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => unsafe { llvm_asm!("dmb 0xF" ::: "memory" : "volatile") },
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __dmb();
}
__dmb()
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
#[cfg(armv8m)]
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn tt(addr: *mut u32) -> u32 {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => {
let tt_resp: u32;
unsafe {
llvm_asm!("tt $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
}
tt_resp
}
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __tt(_: *mut u32) -> u32;
}
__tt(addr)
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
#[cfg(armv8m)]
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn ttt(addr: *mut u32) -> u32 {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => {
let tt_resp: u32;
unsafe {
llvm_asm!("ttt $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
}
tt_resp
}
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __ttt(_: *mut u32) -> u32;
}
__ttt(addr)
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
#[cfg(armv8m)]
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn tta(addr: *mut u32) -> u32 {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => {
let tt_resp: u32;
unsafe {
llvm_asm!("tta $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
}
tt_resp
}
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __tta(_: *mut u32) -> u32;
}
__tta(addr)
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}
#[inline]
#[cfg(armv8m)]
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn ttat(addr: *mut u32) -> u32 {
match () {
#[cfg(all(cortex_m, feature = "inline-asm"))]
() => {
let tt_resp: u32;
unsafe {
llvm_asm!("ttat $0, $1" : "=r"(tt_resp) : "r"(addr) :: "volatile");
}
tt_resp
}
#[cfg(all(cortex_m, not(feature = "inline-asm")))]
() => unsafe {
extern "C" {
fn __ttat(_: *mut u32) -> u32;
}
__ttat(addr)
},
#[cfg(not(cortex_m))]
() => unimplemented!(),
}
}