diff --git a/libc/src/__support/FPUtil/BasicOperations.h b/libc/src/__support/FPUtil/BasicOperations.h index ccc61a89c5f83..a19d6d0bef08f 100644 --- a/libc/src/__support/FPUtil/BasicOperations.h +++ b/libc/src/__support/FPUtil/BasicOperations.h @@ -19,9 +19,7 @@ namespace fputil { template , int> = 0> LIBC_INLINE T abs(T x) { - FPBits bits(x); - bits.set_sign(Sign::POS); - return bits.get_val(); + return FPBits(x).abs().get_val(); } template , int> = 0> diff --git a/libc/src/math/generic/acoshf.cpp b/libc/src/math/generic/acoshf.cpp index 54b66bf42fc69..a4a75a7b04385 100644 --- a/libc/src/math/generic/acoshf.cpp +++ b/libc/src/math/generic/acoshf.cpp @@ -33,12 +33,8 @@ LLVM_LIBC_FUNCTION(float, acoshf, (float x)) { } if (LIBC_UNLIKELY(x_u >= 0x4f8ffb03)) { - // Check for exceptional values. - uint32_t x_abs = xbits.abs().uintval(); - if (LIBC_UNLIKELY(x_abs >= 0x7f80'0000U)) { - // x is +inf or NaN. + if (LIBC_UNLIKELY(xbits.is_inf_or_nan())) return x; - } // Helper functions to set results for exceptional cases. auto round_result_slightly_down = [](float r) -> float { diff --git a/libc/src/math/generic/asinhf.cpp b/libc/src/math/generic/asinhf.cpp index ac059910b4ef2..6e351786e3eca 100644 --- a/libc/src/math/generic/asinhf.cpp +++ b/libc/src/math/generic/asinhf.cpp @@ -59,10 +59,8 @@ LLVM_LIBC_FUNCTION(float, asinhf, (float x)) { }; if (LIBC_UNLIKELY(x_abs >= 0x4bdd'65a5U)) { - if (LIBC_UNLIKELY(x_abs >= 0x7f80'0000U)) { - // x is +-inf or nan + if (LIBC_UNLIKELY(xbits.is_inf_or_nan())) return x; - } // Exceptional cases when x > 2^24. switch (x_abs) {