include!("common.rs");
mod ffi {
pub(crate) use crate::utils::ffi::c_uint;
sys_const!({
pub(crate) const AV_AARCH64_LSE: u32 = 1 << 15;
pub(crate) const AV_AARCH64_2_LSE2: u32 = 1 << 2;
});
sys_fn!({
extern "C" {
pub(crate) fn getisax(array: *mut u32, n: c_uint) -> c_uint;
}
});
}
#[cold]
fn _detect(info: &mut CpuInfo) {
const OUT_LEN: ffi::c_uint = 2;
let mut out = [0_u32; OUT_LEN as usize];
unsafe {
ffi::getisax(out.as_mut_ptr(), OUT_LEN);
}
if out[0] & ffi::AV_AARCH64_LSE != 0 {
info.set(CpuInfo::HAS_LSE);
}
if out[1] & ffi::AV_AARCH64_2_LSE2 != 0 {
info.set(CpuInfo::HAS_LSE2);
}
}