[PATCH 21/48] MIPS: math-emu: Update sNaN quieting handlers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
 }





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux