Commit ec98f9a0 authored by Maciej W. Rozycki's avatar Maciej W. Rozycki Committed by Ralf Baechle

MIPS: math-emu: Update sNaN quieting handlers

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: default avatarMaciej W. Rozycki <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/9685/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 1f6d2c29
...@@ -49,14 +49,9 @@ union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp r) ...@@ -49,14 +49,9 @@ union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp r)
if (!ieee754dp_issnan(r)) /* QNAN does not cause invalid op !! */ if (!ieee754dp_issnan(r)) /* QNAN does not cause invalid op !! */
return r; return r;
if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION)) { /* If not enabled convert to a quiet NaN. */
/* not enabled convert to a quiet NaN */ if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION))
DPMANT(r) &= (~DP_MBIT(DP_FBITS-1)); return ieee754dp_indef();
if (ieee754dp_isnan(r))
return r;
else
return ieee754dp_indef();
}
return r; return r;
} }
......
...@@ -49,14 +49,9 @@ union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp r) ...@@ -49,14 +49,9 @@ union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp r)
if (!ieee754sp_issnan(r)) /* QNAN does not cause invalid op !! */ if (!ieee754sp_issnan(r)) /* QNAN does not cause invalid op !! */
return r; return r;
if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION)) { /* If not enabled convert to a quiet NaN. */
/* not enabled convert to a quiet NaN */ if (!ieee754_setandtestcx(IEEE754_INVALID_OPERATION))
SPMANT(r) &= (~SP_MBIT(SP_FBITS-1)); return ieee754sp_indef();
if (ieee754sp_isnan(r))
return r;
else
return ieee754sp_indef();
}
return r; return r;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment