MIPS: math-emu: Remove redundant code from NaN comparison
authorMaciej W. Rozycki <macro@linux-mips.org>
Fri, 3 Apr 2015 22:25:43 +0000 (23:25 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 7 Apr 2015 23:09:38 +0000 (01:09 +0200)
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@linux-mips.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/9690/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/math-emu/dp_cmp.c
arch/mips/math-emu/sp_cmp.c

index 99623c12ef03f894d7590c4b2bfa7fbdbdf60262..a29880e29ae45508b9fbaf1888b240c960e389ee 100644 (file)
@@ -39,13 +39,7 @@ int ieee754dp_cmp(union ieee754dp x, union ieee754dp y, int cmp, int sig)
                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 d765ba1c7b82ce57d358ed1c9c175f57a83d7442..67b82f1e2c4a3e7240bf882009fd9923a45e7710 100644 (file)
@@ -39,13 +39,7 @@ int ieee754sp_cmp(union ieee754sp x, union ieee754sp y, int cmp, int sig)
                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;