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?