#[cfg(all(target_arch = "aarch64", feature = "std"))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn neon_available() -> bool {
if cfg!(memspan_force_scalar) {
return false;
}
std::arch::is_aarch64_feature_detected!("neon")
}
#[cfg(all(target_arch = "aarch64", not(feature = "std")))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn neon_available() -> bool {
!cfg!(memspan_force_scalar) && cfg!(target_feature = "neon")
}
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), feature = "std"))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn sse42_available() -> bool {
if cfg!(memspan_force_scalar) || cfg!(memspan_disable_sse42) {
return false;
}
std::arch::is_x86_feature_detected!("sse4.2")
}
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), not(feature = "std")))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn sse42_available() -> bool {
!cfg!(memspan_force_scalar) && !cfg!(memspan_disable_sse42) && cfg!(target_feature = "sse4.2")
}
#[cfg(all(target_arch = "x86_64", feature = "std"))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn avx2_available() -> bool {
if cfg!(memspan_force_scalar) || cfg!(memspan_disable_avx2) {
return false;
}
std::arch::is_x86_feature_detected!("avx2")
}
#[cfg(all(target_arch = "x86_64", not(feature = "std")))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn avx2_available() -> bool {
!cfg!(memspan_force_scalar) && !cfg!(memspan_disable_avx2) && cfg!(target_feature = "avx2")
}
#[cfg(all(target_arch = "x86_64", feature = "std"))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn avx512bw_available() -> bool {
if cfg!(memspan_force_scalar) || cfg!(memspan_disable_avx512) {
return false;
}
std::arch::is_x86_feature_detected!("avx512bw")
}
#[cfg(all(target_arch = "x86_64", not(feature = "std")))]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn avx512bw_available() -> bool {
!cfg!(memspan_force_scalar) && !cfg!(memspan_disable_avx512) && cfg!(target_feature = "avx512bw")
}
#[cfg(target_arch = "wasm32")]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn simd128_available() -> bool {
!cfg!(memspan_force_scalar) && !cfg!(memspan_disable_simd128) && cfg!(target_feature = "simd128")
}