[PATCH 26/48] MIPS: math-emu: Remove redundant code from NaN comparison

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

 



Remove a redundant call to `ieee754_setandtestcx' in `ieee754sp_cmp' and 
`ieee754dp_cmp'.  The IEEE 754 exception requested will have already 
been set by a call to `ieee754_setcx' immediately above, because `sig' 
has to be non-zero to reach here, and the comparison result returned 
will be 0 regardless of the result from the call.  Simplify the return 
expression remaining.  All this reducing the size of code by 16 and 12 
instructions or 64 and 48 bytes respectively.

Signed-off-by: Maciej W. Rozycki <macro@xxxxxxxxxxxxxx>
---
linux-mips-emu-cmp.diff
Index: linux/arch/mips/math-emu/dp_cmp.c
===================================================================
--- linux.orig/arch/mips/math-emu/dp_cmp.c	2015-04-03 13:23:31.663867000 +0100
+++ linux/arch/mips/math-emu/dp_cmp.c	2015-04-03 13:23:37.279924000 +0100
@@ -39,13 +39,7 @@ int ieee754dp_cmp(union ieee754dp x, uni
 		if (sig ||
 		    xc == IEEE754_CLASS_SNAN || yc == IEEE754_CLASS_SNAN)
 			ieee754_setcx(IEEE754_INVALID_OPERATION);
-		if (cmp & IEEE754_CUN)
-			return 1;
-		if (cmp & (IEEE754_CLT | IEEE754_CGT)) {
-			if (sig && ieee754_setandtestcx(IEEE754_INVALID_OPERATION))
-				return 0;
-		}
-		return 0;
+		return (cmp & IEEE754_CUN) != 0;
 	} else {
 		vx = x.bits;
 		vy = y.bits;
Index: linux/arch/mips/math-emu/sp_cmp.c
===================================================================
--- linux.orig/arch/mips/math-emu/sp_cmp.c	2015-04-03 13:23:31.680870000 +0100
+++ linux/arch/mips/math-emu/sp_cmp.c	2015-04-03 13:23:37.281921000 +0100
@@ -39,13 +39,7 @@ int ieee754sp_cmp(union ieee754sp x, uni
 		if (sig ||
 		    xc == IEEE754_CLASS_SNAN || yc == IEEE754_CLASS_SNAN)
 			ieee754_setcx(IEEE754_INVALID_OPERATION);
-		if (cmp & IEEE754_CUN)
-			return 1;
-		if (cmp & (IEEE754_CLT | IEEE754_CGT)) {
-			if (sig && ieee754_setandtestcx(IEEE754_INVALID_OPERATION))
-				return 0;
-		}
-		return 0;
+		return (cmp & IEEE754_CUN) != 0;
 	} else {
 		vx = x.bits;
 		vy = y.bits;





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

  Powered by Linux