From fba16d3f0bcf697775d91e91064f8584b9697042 Mon Sep 17 00:00:00 2001 From: varkor Date: Sat, 30 Dec 2017 21:38:43 +0000 Subject: [PATCH] Optimise min/max Swapping the conditions generates more efficient x86 assembly. See https://github.com/rust-lang/rust/pull/46926#issuecomment-354567412. --- src/libcore/num/f32.rs | 4 ++-- src/libcore/num/f64.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 7f758f2a23b19..0dc58d61e496f 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -263,7 +263,7 @@ impl Float for f32 { // Since we do not support sNaN in Rust yet, we do not need to handle them. // FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by // multiplying by 1.0. Should switch to the `canonicalize` when it works. - (if self < other || self.is_nan() { other } else { self }) * 1.0 + (if self.is_nan() || self < other { other } else { self }) * 1.0 } /// Returns the minimum of the two numbers. @@ -277,6 +277,6 @@ impl Float for f32 { // Since we do not support sNaN in Rust yet, we do not need to handle them. // FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by // multiplying by 1.0. Should switch to the `canonicalize` when it works. - (if self < other || other.is_nan() { self } else { other }) * 1.0 + (if other.is_nan() || self < other { self } else { other }) * 1.0 } } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index b9db4990a7e5f..0e76000efe9d5 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -261,7 +261,7 @@ impl Float for f64 { // Since we do not support sNaN in Rust yet, we do not need to handle them. // FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by // multiplying by 1.0. Should switch to the `canonicalize` when it works. - (if self < other || self.is_nan() { other } else { self }) * 1.0 + (if self.is_nan() || self < other { other } else { self }) * 1.0 } /// Returns the minimum of the two numbers. @@ -275,6 +275,6 @@ impl Float for f64 { // Since we do not support sNaN in Rust yet, we do not need to handle them. // FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by // multiplying by 1.0. Should switch to the `canonicalize` when it works. - (if self < other || other.is_nan() { self } else { other }) * 1.0 + (if other.is_nan() || self < other { self } else { other }) * 1.0 } }