[libc-commits] [libc] [libc][math] Add Generic Comparison Operations for floating point types (PR #144983)
via libc-commits
libc-commits at lists.llvm.org
Fri Jul 11 11:44:39 PDT 2025
================
@@ -184,29 +184,30 @@ template <size_t Bits> struct DyadicFloat {
int unbiased_exp = get_unbiased_exponent();
- if (unbiased_exp + FPBits::EXP_BIAS >= FPBits::MAX_BIASED_EXPONENT) {
- if constexpr (ShouldSignalExceptions) {
- set_errno_if_required(ERANGE);
- raise_except_if_required(FE_OVERFLOW | FE_INEXACT);
- }
+ if constexpr (!cpp::is_constant_evaluated())
+ if (unbiased_exp + FPBits::EXP_BIAS >= FPBits::MAX_BIASED_EXPONENT) {
+ if constexpr (ShouldSignalExceptions) {
+ set_errno_if_required(ERANGE);
+ raise_except_if_required(FE_OVERFLOW | FE_INEXACT);
+ }
- switch (quick_get_round()) {
- case FE_TONEAREST:
- return FPBits::inf(sign).get_val();
- case FE_TOWARDZERO:
- return FPBits::max_normal(sign).get_val();
- case FE_DOWNWARD:
- if (sign.is_pos())
- return FPBits::max_normal(Sign::POS).get_val();
- return FPBits::inf(Sign::NEG).get_val();
- case FE_UPWARD:
- if (sign.is_neg())
- return FPBits::max_normal(Sign::NEG).get_val();
- return FPBits::inf(Sign::POS).get_val();
- default:
- __builtin_unreachable();
+ switch (quick_get_round()) {
----------------
overmighty wrote:
```suggestion
int rounding_mode = FE_TONEAREST;
if constexpr (!cpp::is_constant_evaluated())
rounding_mode = quick_get_round();
switch (rounding_mode) {
```
https://github.com/llvm/llvm-project/pull/144983
More information about the libc-commits
mailing list