Commit fdffbafb [Lots of FPU bug fixes from Kjeld Borch Egevang.] replaced the two single `ieee754sp_nanxcpt' and `ieee754dp_nanxcpt' places, where sNaN quieting used to happen for single and double floating-point operations respectively, with individual qNaN instantiations across all the call sites instead. It also made most of these two functions dead code as where called on a qNaN they return right away. To revert the damage and make sNaN quieting uniform again first rewrite `ieee754sp_nanxcpt' and `ieee754dp_nanxcpt' to do the same quieting all the call sites do, that is return the default qNaN encoding for all input sNaN values; never propagate any sNaN payload bits from its trailing significand field. Signed-off-by: Maciej W. Rozycki <macro@xxxxxxxxxxxxxx> --- linux-mips-emu-nanxcpt-snan.diff Index: linux/arch/mips/math-emu/ieee754dp.c =================================================================== --- linux.orig/arch/mips/math-emu/ieee754dp.c 2015-04-02 20:18:51.033516000 +0100 +++ linux/arch/mips/math-emu/ieee754dp.c 2015-04-02 20:27:54.976193000 +0100 @@ -49,14 +49,9 @@ union ieee754dp __cold ieee754dp_nanxcpt if (!ieee754dp_issnan(r)) /* QNAN does not cause invalid op !! */ return r; - if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION)) { - /* not enabled convert to a quiet NaN */ - DPMANT(r) &= (~DP_MBIT(DP_FBITS-1)); - if (ieee754dp_isnan(r)) - return r; - else - return ieee754dp_indef(); - } + /* If not enabled convert to a quiet NaN. */ + if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION)) + return ieee754dp_indef(); return r; } Index: linux/arch/mips/math-emu/ieee754sp.c =================================================================== --- linux.orig/arch/mips/math-emu/ieee754sp.c 2015-04-02 20:18:51.036515000 +0100 +++ linux/arch/mips/math-emu/ieee754sp.c 2015-04-02 20:27:54.979190000 +0100 @@ -49,14 +49,9 @@ union ieee754sp __cold ieee754sp_nanxcpt if (!ieee754sp_issnan(r)) /* QNAN does not cause invalid op !! */ return r; - if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION)) { - /* not enabled convert to a quiet NaN */ - SPMANT(r) &= (~SP_MBIT(SP_FBITS-1)); - if (ieee754sp_isnan(r)) - return r; - else - return ieee754sp_indef(); - } + /* If not enabled convert to a quiet NaN. */ + if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION)) + return ieee754sp_indef(); return r; }