From 5faeb43a5cf2d4acf83c664051f8945296ea5bd2 Mon Sep 17 00:00:00 2001 From: Juho Kahala <57393910+quaternic@users.noreply.github.com> Date: Wed, 17 Dec 2025 07:56:27 +0200 Subject: [PATCH] remove uses of Ord::clamp in scalbn (#1047) Avoid using `Ord::clamp` in the `f16`-specific part of the generic `scalbn`. It turned out to be redundant anyway, as both callsites follow a pattern like ``` if n < negative_val { let foo = (n + positive_val).clamp(negative_val, positive_val); } ``` and `n < negative_val < 0` implies `n + positive_val < positive_val`. Fixes: rust-lang/compiler-builtins#1046 --- library/compiler-builtins/libm/src/math/generic/scalbn.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/compiler-builtins/libm/src/math/generic/scalbn.rs b/library/compiler-builtins/libm/src/math/generic/scalbn.rs index 6dd9b1a9b84a..68de41757913 100644 --- a/library/compiler-builtins/libm/src/math/generic/scalbn.rs +++ b/library/compiler-builtins/libm/src/math/generic/scalbn.rs @@ -96,14 +96,14 @@ pub fn scalbn(mut x: F, mut n: i32) -> F // Work aroudn this by using a different algorithm that calculates the prescale // dynamically based on the maximum possible value. This adds more operations per round // since it needs to construct the scale, but works better in the general case. - let add = -(n + sig_total_bits as i32).clamp(exp_min, sig_total_bits as i32); + let add = -(n + sig_total_bits as i32).max(exp_min); let mul = F::from_parts(false, (F::EXP_BIAS as i32 - add) as u32, zero); x *= mul; n += add; if n < exp_min { - let add = -(n + sig_total_bits as i32).clamp(exp_min, sig_total_bits as i32); + let add = -(n + sig_total_bits as i32).max(exp_min); let mul = F::from_parts(false, (F::EXP_BIAS as i32 - add) as u32, zero); x *= mul;