diff --git a/src/avx2.rs b/src/avx2.rs index 78aa5d6..cb60b0a 100644 --- a/src/avx2.rs +++ b/src/avx2.rs @@ -432,7 +432,7 @@ mod test { #[test] fn test_transpose() { - if !is_x86_feature_detected!("avx2") { + if !crate::platform::avx2_detected() { return; } @@ -464,7 +464,7 @@ mod test { #[test] fn test_parents() { - if !is_x86_feature_detected!("avx2") { + if !crate::platform::avx2_detected() { return; } @@ -519,7 +519,7 @@ mod test { #[test] fn test_chunks() { - if !is_x86_feature_detected!("avx2") { + if !crate::platform::avx2_detected() { return; } @@ -596,7 +596,7 @@ mod test { #[test] fn test_hash_many() { - if !is_x86_feature_detected!("avx2") { + if !crate::platform::avx2_detected() { return; } diff --git a/src/lib.rs b/src/lib.rs index 67f9d52..1a9dc4e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(feature = "std"), no_std)] + use arrayref::{array_refs, mut_array_refs}; use arrayvec::ArrayString; use core::fmt; diff --git a/src/platform.rs b/src/platform.rs index 439346f..5723e17 100644 --- a/src/platform.rs +++ b/src/platform.rs @@ -21,10 +21,10 @@ impl Platform { pub fn detect() -> Self { #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] { - if is_x86_feature_detected!("avx2") { + if avx2_detected() { return Platform::AVX2; } - if is_x86_feature_detected!("sse4.1") { + if sse41_detected() { return Platform::SSE41; } } @@ -114,3 +114,39 @@ impl Platform { } } } + +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +#[inline(always)] +pub fn avx2_detected() -> bool { + // Static check, e.g. for building with target-cpu=native. + #[cfg(target_feature = "avx2")] + { + return true; + } + // Dyanmic check, if std is enabled. + #[cfg(feature = "std")] + { + if is_x86_feature_detected!("avx2") { + return true; + } + } + false +} + +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +#[inline(always)] +pub fn sse41_detected() -> bool { + // Static check, e.g. for building with target-cpu=native. + #[cfg(target_feature = "sse4.1")] + { + return true; + } + // Dyanmic check, if std is enabled. + #[cfg(feature = "std")] + { + if is_x86_feature_detected!("sse4.1") { + return true; + } + } + false +} diff --git a/src/sse41.rs b/src/sse41.rs index 89169cd..0ecf804 100644 --- a/src/sse41.rs +++ b/src/sse41.rs @@ -670,7 +670,7 @@ mod test { #[test] fn test_transpose() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; } @@ -702,7 +702,7 @@ mod test { #[test] fn test_compress() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; } @@ -737,7 +737,7 @@ mod test { #[test] fn test_parents() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; } @@ -784,7 +784,7 @@ mod test { #[test] fn test_chunks() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; } @@ -853,7 +853,7 @@ mod test { #[test] fn test_hash1_1() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; } @@ -893,7 +893,7 @@ mod test { #[test] fn test_hash1_3() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; } @@ -934,7 +934,7 @@ mod test { #[test] fn test_hash_many() { - if !is_x86_feature_detected!("sse4.1") { + if !crate::platform::sse41_detected() { return; }