https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111709
--- Comment #26 from John David Anglin <danglin at gcc dot gnu.org> --- (In reply to Joseph S. Myers from comment #23) > hppa is an after-rounding architecture and this test is only meant to > produce underflow on before-rounding architectures. You should investigate > why the code in question is entered at all. I'd have expected > > /* If the exponent would be in the normal range when > rounding to normal precision with unbounded exponent > range, the exact result is known and spurious underflows > must be avoided on systems detecting tininess after > rounding. */ > if (TININESS_AFTER_ROUNDING) > { > w.d = a1 + u.d; > if (w.ieee.exponent == 109) > return w.d * 0x1p-108; > } The return in the above hunk isn't taken because the exponent calculated for "a1 + u.d" is 108. Note: The "w.d = a1 + u.d;" line seems redundant as "a1 + u.d" is previously calculated in this hunk: if (__glibc_unlikely (adjust < 0)) { if ((u.ieee.mantissa1 & 1) == 0) u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0; v.d = a1 + u.d; /* Ensure the addition is not scheduled after fetestexcept call. */ math_force_eval (v.d); } adjust = -1 Should we just return "v.d * 0x1p-108" when TININESS_AFTER_ROUNDING is true?