Merge pull request #224 from rust-lang/feature/min-max-intrinsic
Use intrinsic for min/max
This commit is contained in:
commit
41db15373a
@ -46,6 +46,10 @@ extern "platform-intrinsic" {
|
|||||||
/// fabs
|
/// fabs
|
||||||
pub(crate) fn simd_fabs<T>(x: T) -> T;
|
pub(crate) fn simd_fabs<T>(x: T) -> T;
|
||||||
|
|
||||||
|
// minnum/maxnum
|
||||||
|
pub(crate) fn simd_fmin<T>(x: T, y: T) -> T;
|
||||||
|
pub(crate) fn simd_fmax<T>(x: T, y: T) -> T;
|
||||||
|
|
||||||
pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U;
|
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_ne<T, U>(x: T, y: T) -> U;
|
||||||
pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U;
|
pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U;
|
||||||
|
@ -141,11 +141,7 @@ macro_rules! impl_float_vector {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use = "method returns a new vector and does not mutate the original value"]
|
#[must_use = "method returns a new vector and does not mutate the original value"]
|
||||||
pub fn min(self, other: Self) -> Self {
|
pub fn min(self, other: Self) -> Self {
|
||||||
// TODO consider using an intrinsic
|
unsafe { intrinsics::simd_fmin(self, other) }
|
||||||
self.is_nan().select(
|
|
||||||
other,
|
|
||||||
self.lanes_ge(other).select(other, self)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the maximum of each lane.
|
/// Returns the maximum of each lane.
|
||||||
@ -154,11 +150,7 @@ macro_rules! impl_float_vector {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use = "method returns a new vector and does not mutate the original value"]
|
#[must_use = "method returns a new vector and does not mutate the original value"]
|
||||||
pub fn max(self, other: Self) -> Self {
|
pub fn max(self, other: Self) -> Self {
|
||||||
// TODO consider using an intrinsic
|
unsafe { intrinsics::simd_fmax(self, other) }
|
||||||
self.is_nan().select(
|
|
||||||
other,
|
|
||||||
self.lanes_le(other).select(other, self)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Restrict each lane to a certain interval unless it is NaN.
|
/// Restrict each lane to a certain interval unless it is NaN.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user