#[derive(Debug, Clone, Copy, Default, serde::Serialize)]
pub struct CpuFeatures {
pub sse2: bool,
pub avx: bool,
pub avx2: bool,
pub avx512f: bool,
pub neon: bool,
}
impl CpuFeatures {
pub fn detect() -> Self {
let mut features = CpuFeatures::default();
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
{
features.sse2 = std::is_x86_feature_detected!("sse2");
features.avx = std::is_x86_feature_detected!("avx");
features.avx2 = std::is_x86_feature_detected!("avx2");
features.avx512f = std::is_x86_feature_detected!("avx512f");
}
#[cfg(target_arch = "aarch64")]
{
features.neon = true;
}
features
}
}