From 16d544b769579efed30cfcd3900192ae49156457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Fri, 18 Jun 2021 20:55:54 +0200 Subject: [PATCH] Fixes target arch detection. --- src/simd.rs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/simd.rs b/src/simd.rs index 9724d64..aac92a3 100755 --- a/src/simd.rs +++ b/src/simd.rs @@ -1,14 +1,14 @@ use std::ops::{Index, IndexMut}; -#[cfg(target_arch = "aarch64")] +#[cfg(all(target_arch = "aarch64", target_feature = "neon"))] pub use std::arch::aarch64::*; -#[cfg(target_arch = "arm")] +#[cfg(all(target_arch = "arm", target_feature = "neon"))] pub use std::arch::arm::*; -#[cfg(target_arch = "wasm32")] +#[cfg(all(target_arch = "wasm32", target_feature = "simd128"))] pub use std::arch::wasm32::*; -#[cfg(target_arch = "x86")] +#[cfg(all(target_arch = "x86", target_feature = "sse2"))] pub use std::arch::x86::*; -#[cfg(target_arch = "x86_64")] +#[cfg(all(target_arch = "x86_64", target_feature = "sse2"))] pub use std::arch::x86_64::*; #[derive(Clone, Copy)] @@ -63,9 +63,17 @@ pub union Simd32x2 { #[macro_export] macro_rules! match_architecture { ($Simd:ident, $native:tt, $fallback:tt,) => {{ - #[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "arm", target_arch = "aarch64", target_arch = "wasm32"))] + #[cfg(any( + all(any(target_arch = "x86", target_arch = "x86_64"), target_feature = "sse2"), + all(any(target_arch = "arm", target_arch = "aarch64"), target_feature = "neon"), + all(target_arch = "wasm32", target_feature = "simd128"), + ))] { $Simd $native } - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "arm", target_arch = "aarch64", target_arch = "wasm32")))] + #[cfg(not(any( + all(any(target_arch = "x86", target_arch = "x86_64"), target_feature = "sse2"), + all(any(target_arch = "arm", target_arch = "aarch64"), target_feature = "neon"), + all(target_arch = "wasm32", target_feature = "simd128"), + )))] unsafe { $Simd $fallback } }}; ($Simd:ident, $x86:tt, $arm:tt, $web:tt, $fallback:tt,) => {{ @@ -75,7 +83,11 @@ macro_rules! match_architecture { unsafe { $Simd $arm } #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))] unsafe { $Simd $web } - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "arm", target_arch = "aarch64", target_arch = "wasm32")))] + #[cfg(not(any( + all(any(target_arch = "x86", target_arch = "x86_64"), target_feature = "sse2"), + all(any(target_arch = "arm", target_arch = "aarch64"), target_feature = "neon"), + all(target_arch = "wasm32", target_feature = "simd128"), + )))] unsafe { $Simd $fallback } }}; }