summaryrefslogtreecommitdiffstats
path: root/arch/mips/math-emu/dp_sqrt.c
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2015-04-04 00:25:30 +0200
committerRalf Baechle <ralf@linux-mips.org>2015-04-08 01:09:29 +0200
commit539bfb579babbe5a14b405370ecc99b4ed53bc4e (patch)
tree3ff8ef8e4a4d6796685b292f9a74f5fa1ecc7048 /arch/mips/math-emu/dp_sqrt.c
parentMIPS: math-emu: Factor out NaN FP format conversions (diff)
downloadlinux-539bfb579babbe5a14b405370ecc99b4ed53bc4e.tar.xz
linux-539bfb579babbe5a14b405370ecc99b4ed53bc4e.zip
MIPS: math-emu: Don't pass qNaNs through quieting handlers
Don't call the `ieee754sp_nanxcpt' and `ieee754dp_nanxcpt' sNaN quieting handlers for a qNaN supplied to floating-point format conversions or SQRT.S/SQRT.D instructions, or for a qNaN produced out of a negative operand supplied to SQRT.S/SQRT.D instructions. Return the qNaN right away in these cases. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/9687/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/math-emu/dp_sqrt.c')
-rw-r--r--arch/mips/math-emu/dp_sqrt.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/mips/math-emu/dp_sqrt.c b/arch/mips/math-emu/dp_sqrt.c
index 041bbb6124bb..0d8e7ffdba5e 100644
--- a/arch/mips/math-emu/dp_sqrt.c
+++ b/arch/mips/math-emu/dp_sqrt.c
@@ -44,7 +44,7 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
switch (xc) {
case IEEE754_CLASS_QNAN:
/* sqrt(Nan) = Nan */
- return ieee754dp_nanxcpt(x);
+ return x;
case IEEE754_CLASS_SNAN:
ieee754_setcx(IEEE754_INVALID_OPERATION);
@@ -58,7 +58,7 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
if (xs) {
/* sqrt(-Inf) = Nan */
ieee754_setcx(IEEE754_INVALID_OPERATION);
- return ieee754dp_nanxcpt(ieee754dp_indef());
+ return ieee754dp_indef();
}
/* sqrt(+Inf) = Inf */
return x;
@@ -71,7 +71,7 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
if (xs) {
/* sqrt(-x) = Nan */
ieee754_setcx(IEEE754_INVALID_OPERATION);
- return ieee754dp_nanxcpt(ieee754dp_indef());
+ return ieee754dp_indef();
}
break;
}