about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCaleb Zulawski <caleb.zulawski@gmail.com>2021-03-11 01:02:47 -0500
committerCaleb Zulawski <caleb.zulawski@gmail.com>2021-04-09 16:31:03 -0400
commit4b8cbd5385e8d6e851edb2d1e37ddbf843dda02a (patch)
tree1f8a098201ed96208f5e0565a743be0f771eb8a7
parent64f564866bf09f98ae7a044fa8ca98a53bbbff1f (diff)
downloadrust-4b8cbd5385e8d6e851edb2d1e37ddbf843dda02a.tar.gz
rust-4b8cbd5385e8d6e851edb2d1e37ddbf843dda02a.zip
Fix i586 detection
-rw-r--r--crates/core_simd/src/reduction.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/crates/core_simd/src/reduction.rs b/crates/core_simd/src/reduction.rs
index 684879021b4..e59bf93baa3 100644
--- a/crates/core_simd/src/reduction.rs
+++ b/crates/core_simd/src/reduction.rs
@@ -55,11 +55,12 @@ macro_rules! impl_float_reductions {
         where
             Self: crate::LanesAtMost32
         {
+
             /// Produces the sum of the lanes of the vector.
             #[inline]
             pub fn sum(self) -> $scalar {
                 // f32 SIMD sum is inaccurate on i586
-                if cfg!(target_arch = "i586") && core::mem::size_of::<$scalar>() == 4 {
+                if cfg!(all(target_arch = "x86", not(target_feature = "sse2"))) && core::mem::size_of::<$scalar>() == 4 {
                     self.as_slice().iter().sum()
                 } else {
                     unsafe { crate::intrinsics::simd_reduce_add_ordered(self, 0.) }
@@ -70,7 +71,7 @@ macro_rules! impl_float_reductions {
             #[inline]
             pub fn product(self) -> $scalar {
                 // f32 SIMD product is inaccurate on i586
-                if cfg!(target_arch = "i586") && core::mem::size_of::<$scalar>() == 4 {
+                if cfg!(all(target_arch = "x86", not(target_feature = "sse2"))) && core::mem::size_of::<$scalar>() == 4 {
                     self.as_slice().iter().product()
                 } else {
                     unsafe { crate::intrinsics::simd_reduce_mul_ordered(self, 1.) }