#[cfg(target_feature = "avx512f")]
pub const LANES: usize = 16;

#[cfg(all(target_feature = "avx2", not(target_feature = "avx512f")))]
pub const LANES: usize = 8;

#[cfg(all(target_feature = "sse2", not(target_feature = "avx2")))]
pub const LANES: usize = 4;

#[cfg(target_arch = "aarch64")]
pub const LANES: usize = 4;

#[cfg(all(target_arch = "arm", target_feature = "neon"))]
pub const LANES: usize = 4;

#[cfg(all(target_arch = "wasm32", target_feature = "simd128"))]
pub const LANES: usize = 4;

#[cfg(not(any(
    target_feature = "avx512f",
    target_feature = "avx2",
    target_feature = "sse2",
    all(target_arch = "aarch64"),
    all(target_arch = "arm", target_feature = "neon"),
    all(target_arch = "wasm32", target_feature = "simd128"),
)))]
pub const LANES: usize = 1;

pub type Vf32 = std::simd::Simd<f32, LANES>;
pub type Vusize = std::simd::Simd<usize, LANES>; // Note: Could there be edge cases here on different arch?
