Re: [PATCH 4/4] alpha: expect test-float32x-float64-div to fail
Adhemerval Zanella Netto <[email protected]> Tue, 4 Aug 2026 09:58:44 -0300
| Newsgroups | gmane.comp.lib.glibc.alpha |
|---|---|
| Organization | Linaro |
| Message-ID | <[email protected]> |
On 03/08/26 20:55, Matt Turner wrote: > _Float32x and _Float64 are both binary64 on Alpha, so this narrowing > divide is a plain divide and the hardware alone decides whether to signal > underflow. > > IEEE 754 determines tininess after rounding from the result rounded as if > the exponent range were unbounded, while Alpha determines it from the > delivered result. The two differ for a quotient that is tiny but rounds > up to the smallest normal, as in DBL_MIN / (1 + 2^-52) under a rounding > mode that rounds away from zero: the binade below DBL_MIN has a finer > spacing than the subnormals, so the unbounded rounding stays below > DBL_MIN and the result is tiny, but the delivered result is DBL_MIN and > looks normal. Alpha signals no underflow for it. > > Nothing in software can correct this. The hardware detects no underflow, > so no software completion trap is taken and the kernel emulation never > runs, and as the operation is not really narrowing there is no wider > intermediate for libm to examine. LGTM, thanks. I wonder if we should add a header like tininess.h to handle this operation in a generic manner and avoid the xfail definition; but it seems really alpha-specific. Reviewed-by: Adhemerval Zanella <[email protected]> > --- > sysdeps/alpha/Makefile | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git ./sysdeps/alpha/Makefile ./sysdeps/alpha/Makefile > index 60a369e255..faa59ab27a 100644 > --- ./sysdeps/alpha/Makefile > +++ ./sysdeps/alpha/Makefile > @@ -53,6 +53,20 @@ CFLAGS-s_lrint.c += -mieee-with-inexact > CFLAGS-test-misc.c += -mieee-with-inexact > # Avoid "conflicting types for built-in function" warnings > CFLAGS-s_isnan.c += -fno-builtin-isnanf > + > +# _Float32x and _Float64 are both binary64 on Alpha, so this narrowing > +# divide is a plain divide and the hardware alone decides whether to > +# signal underflow. IEEE 754 determines tininess after rounding from the > +# result rounded as if the exponent range were unbounded, but Alpha > +# determines it from the delivered result. For a quotient that is tiny > +# but rounds up to the smallest normal -- DBL_MIN / (1 + 2^-52) under a > +# rounding mode that rounds away from zero -- the unbounded rounding > +# stays below DBL_MIN, because that binade has a finer spacing than the > +# subnormals, while the delivered result is DBL_MIN and looks normal. > +# Alpha raises no underflow for it. No trap is taken, so the kernel > +# emulation cannot correct this, and the operation has no wider > +# intermediate for libm to examine. > +test-xfail-test-float32x-float64-div = yes > endif > > # Build everything with full IEEE math support, and with dynamic rounding;