From 9acc11209019b7d3f31bd1945066522ea9c2f88c Mon Sep 17 00:00:00 2001 From: Jubilee Young Date: Tue, 13 Apr 2021 19:24:20 -0700 Subject: [PATCH] Use fabs intrinsic --- crates/core_simd/src/intrinsics.rs | 3 +++ crates/core_simd/src/vector/float.rs | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/core_simd/src/intrinsics.rs b/crates/core_simd/src/intrinsics.rs index 4f89d00deb2..b85a3ad9922 100644 --- a/crates/core_simd/src/intrinsics.rs +++ b/crates/core_simd/src/intrinsics.rs @@ -51,6 +51,9 @@ extern "platform-intrinsic" { #[cfg(feature = "std")] pub(crate) fn simd_ceil(x: T) -> T; + /// fabs + pub(crate) fn simd_fabs(x: T) -> T; + pub(crate) fn simd_eq(x: T, y: T) -> U; pub(crate) fn simd_ne(x: T, y: T) -> U; pub(crate) fn simd_lt(x: T, y: T) -> U; diff --git a/crates/core_simd/src/vector/float.rs b/crates/core_simd/src/vector/float.rs index 393e39023d9..46e4229ddb5 100644 --- a/crates/core_simd/src/vector/float.rs +++ b/crates/core_simd/src/vector/float.rs @@ -32,8 +32,7 @@ macro_rules! impl_float_vector { /// equivalently-indexed lane in `self`. #[inline] pub fn abs(self) -> Self { - let no_sign = crate::$bits_ty::splat(!0 >> 1); - Self::from_bits(self.to_bits() & no_sign) + unsafe { crate::intrinsics::simd_fabs(self) } } }