Re: NetBSD 9.2 Alpha: error in handling of IEEE 754 binary 32-bit subnormals
Jason Thorpe <[email protected]> Tue, 14 Sep 2021 18:54:48 -0700
| Newsgroups | gmane.os.netbsd.ports.alpha |
|---|---|
| Message-ID | <[email protected]> |
> On Sep 14, 2021, at 10:23 AM, Nelson H. F. Beebe <[email protected]> wrote: > > I've now begun testing on NetBSD Alpha a large mathematical library > that I'm developing, and already have running successfully on numerous > operating systems and CPU architectures (AMD64 (x86_64), ARM32, ARM64, > Alpha, HPPA (PA-RISC), M68K, MIPS32, MIPS64, RISC-V64, S390x, SPARC64, > and x86) in various physical and virtual machines in our large test > farm of more than 500 O/S--CPU pairs. > > The Debian 11 Alpha port of my library passes all of its tests, and > test output matches satisfactorily with that from other CPU types. > > However, for NetBSD Alpha, I quickly found an anomaly: IEEE 754 binary > 32-bit subnormals are printed incorrectly. As you might be aware, the FP situation on the Alpha is kind of complicated. It's possible that this is a bug in the kernel's FP completion code (certainly wouldn't be the first time). > > The C compiler versions are gcc 10.2.1 on Debian, and 10.3.0 on > NetBSD. > > Another anomaly is shown by the ufl32.c program: it reports the status > of the IEEE 754 floating-point underflow and inexact flags, and > whether the result is subnormal or not. The SPARC64 flag settings are > as expected, and the AMD64 flags differ because of the different > rounding behavior of those two architectures. There is a discussion > and explanation here in the section that begins on page 10: > > http://www.math.utah.edu/~beebe/ufl/pages-13-21.pdf > > However, the Linux and NetBSD outputs of ufl32.c show that the Linux > Alpha test shows correct expected exception flags, but the NetBSD > Alpha demonstrates that underflow is abrupt: subnormals are computed > as zero. Yes, there some bugs in the this area in NetBSD/alpha at the moment. > Adding the compiler flag -mieee to the tests produces the output in > the *.lst-*-mieee files. For the ufl32.c test, that flag produces no > changes in the Linux output, but the NetBSD output now has nonzero > subnormals, and the exception flags are all unexpectedly zero. The > NetBSD is consistent with what DEC did on our physical Alpha systems > (all now retired) on OSF/1 and Tru64: default to abrupt underflow, but > restore it with gcc's -mieee, or its equivalent, but differently > named, flag for DEC's native compilers. > > Because both Debian and NetBSD VMs are running on QEMU (6.0.0 and > 6.1.0, respectively), the Alpha architecture is almost 30 years old, > and QEMU is generally a solid and reliable emulation of numerous > architectures, the different flag behavior for subnormals is > unexpected, and it seems that NetBSD is wrong here too. I do have some changes sitting in the Project Queue that should improve some of this stuff, but I haven't had time / motivation to get around to finishing them. I'll try to bubble this up in priority and I will definitely take a look at your math library to glean additional test cases. -- thorpej