Fix i586 detection

This commit is contained in:
Caleb Zulawski 2021-03-11 01:02:47 -05:00
parent 64f564866b
commit 4b8cbd5385

View File

@ -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.) }