about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCaleb Zulawski <caleb.zulawski@gmail.com>2021-04-19 01:46:52 -0400
committerGitHub <noreply@github.com>2021-04-19 01:46:52 -0400
commitb2e25bc8c8ab536e0c5abd8175258cfc63c83a1b (patch)
tree3729a8427335599beb6267f9c32cb596df832c84
parente73985f25d1616c48caf9f66786320f05cc0b1db (diff)
parent9acc11209019b7d3f31bd1945066522ea9c2f88c (diff)
downloadrust-b2e25bc8c8ab536e0c5abd8175258cfc63c83a1b.tar.gz
rust-b2e25bc8c8ab536e0c5abd8175258cfc63c83a1b.zip
Merge pull request #95 from rust-lang/intrinsic-fabs
Use fabs intrinsic
-rw-r--r--crates/core_simd/src/intrinsics.rs3
-rw-r--r--crates/core_simd/src/vector/float.rs3
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<T>(x: T) -> T;
 
+    /// fabs
+    pub(crate) fn simd_fabs<T>(x: T) -> T;
+
     pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U;
     pub(crate) fn simd_ne<T, U>(x: T, y: T) -> U;
     pub(crate) fn simd_lt<T, U>(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) }
             }
         }