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?

Reply via email to