include!("common.rs");
mod ffi {
pub(crate) use crate::utils::ffi::{c_int, c_ulong};
sys_const!({
pub(crate) const SC_IMPL: c_int = 2;
pub(crate) const POWER_8: c_ulong = 0x10000;
pub(crate) const POWER_9: c_ulong = 0x20000;
});
pub(crate) const POWER_10: c_ulong = 0x40000;
sys_fn!({
extern "C" {
pub(crate) fn getsystemcfg(name: c_int) -> c_ulong;
}
});
}
#[cold]
fn _detect(info: &mut CpuInfo) {
let impl_ = unsafe { ffi::getsystemcfg(ffi::SC_IMPL) };
if impl_ == ffi::c_ulong::MAX {
return;
}
if impl_ & (ffi::POWER_8 | ffi::POWER_9 | ffi::POWER_10) != 0 {
info.set(CpuInfoFlag::quadword_atomics);
}
}