On Wed, 4 Jan 2017, Matthew Fortune wrote: > > The MIPS sfp-machine.h has an _FP_CHOOSENAN implementation which > > emulates hardware semantics of not preserving signaling NaN payloads for > > an operation with two NaN arguments (although that doesn't suffice to > > avoid sNaN payload preservation in any case with just one NaN argument). > > > > However, those are only hardware semantics in the legacy NaN case; in > > the NAN2008 case, the architecture documentation says hardware preserves > > payloads in such cases. Furthermore, this implementation assumes legacy > > NaN semantics, so in the NAN2008 case the implementation actually has > > the effect of preserving sNaN payloads but not preserving qNaN payloads, > > when both should be preserved. > > > > This patch fixes the code just to copy from the first argument (at the > > level of libgcc, it's not meaningful which argument is the first and > > which is the second). > > > > Tested for mips64-linux-gnu (soft float, NAN2008) with the glibc math/ > > tests. OK to commit? > > > > 2017-01-02 Joseph Myers <jos...@codesourcery.com> > > > > * config/mips/sfp-machine.h (_FP_CHOOSENAN): Always preserve NaN > > payload if [__mips_nan2008]. > > Thanks for finding and fixing this. > > OK to commit.
AFAIR we deliberately decided not to define a 2008-NaN soft-float ABI, and chose to require all soft-float binaries to use the legacy encoding. The implementation of all toolchain pieces reflects this, although perhaps the case of passing `-mnan=2008 -msoft-float' to GCC (also keeping in mind a `--with-nan=2008' default) has been missed and is not handled correctly, either by refusing compilation or by staying with the legacy NaN encoding. GAS might need some tweaks here too. FWIW, Maciej