]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/mips/math-emu/ieee754sp.h
MIPS: math-emu: Get rid of the useless parts of exception handling.
[mirror_ubuntu-artful-kernel.git] / arch / mips / math-emu / ieee754sp.h
index 754fd54649b51787eed7756cc496fed150c9d180..e5295d7e8ce9a04ad54cec6f74ef39f8b4b1a0fe 100644 (file)
  * ########################################################################
  */
 
+#include <linux/compiler.h>
 
 #include "ieee754int.h"
 
 #define assert(expr) ((void)0)
 
+#define SP_EBIAS       127
+#define SP_EMIN                (-126)
+#define SP_EMAX                127
+#define SP_FBITS       23
+#define SP_MBITS       23
+
+#define SP_MBIT(x)     ((u32)1 << (x))
+#define SP_HIDDEN_BIT  SP_MBIT(SP_FBITS)
+#define SP_SIGN_BIT    SP_MBIT(31)
+
+#define SPSIGN(sp)     (sp.parts.sign)
+#define SPBEXP(sp)     (sp.parts.bexp)
+#define SPMANT(sp)     (sp.parts.mant)
+
+static inline int ieee754sp_finite(union ieee754sp x)
+{
+       return SPBEXP(x) != SP_EMAX + 1 + SP_EBIAS;
+}
+
 /* 3bit extended single precision sticky right shift */
-#define SPXSRSXn(rs) \
-  (xe += rs, \
-   xm = (rs > (SP_MBITS+3))?1:((xm) >> (rs)) | ((xm) << (32-(rs)) != 0))
+#define SPXSRSXn(rs)                                                   \
+       (xe += rs,                                                      \
+        xm = (rs > (SP_FBITS+3))?1:((xm) >> (rs)) | ((xm) << (32-(rs)) != 0))
 
 #define SPXSRSX1() \
-  (xe++, (xm = (xm >> 1) | (xm & 1)))
+       (xe++, (xm = (xm >> 1) | (xm & 1)))
 
-#define SPXSRSYn(rs) \
-   (ye+=rs, \
-    ym = (rs > (SP_MBITS+3))?1:((ym) >> (rs)) | ((ym) << (32-(rs)) != 0))
+#define SPXSRSYn(rs)                                                           \
+       (ye+=rs,                                                                \
+        ym = (rs > (SP_FBITS+3))?1:((ym) >> (rs)) | ((ym) << (32-(rs)) != 0))
 
 #define SPXSRSY1() \
-   (ye++, (ym = (ym >> 1) | (ym & 1)))
+       (ye++, (ym = (ym >> 1) | (ym & 1)))
 
 /* convert denormal to normalized with extended exponent */
 #define SPDNORMx(m,e) \
-  while( (m >> SP_MBITS) == 0) { m <<= 1; e--; }
+       while ((m >> SP_FBITS) == 0) { m <<= 1; e--; }
 #define SPDNORMX       SPDNORMx(xm, xe)
 #define SPDNORMY       SPDNORMx(ym, ye)
 
-static inline ieee754sp buildsp(int s, int bx, unsigned m)
+static inline union ieee754sp buildsp(int s, int bx, unsigned m)
 {
-       ieee754sp r;
+       union ieee754sp r;
 
        assert((s) == 0 || (s) == 1);
        assert((bx) >= SP_EMIN - 1 + SP_EBIAS
               && (bx) <= SP_EMAX + 1 + SP_EBIAS);
-       assert(((m) >> SP_MBITS) == 0);
+       assert(((m) >> SP_FBITS) == 0);
 
        r.parts.sign = s;
        r.parts.bexp = bx;
@@ -66,23 +86,6 @@ static inline ieee754sp buildsp(int s, int bx, unsigned m)
        return r;
 }
 
-extern int ieee754sp_isnan(ieee754sp);
-extern int ieee754sp_issnan(ieee754sp);
-extern int ieee754si_xcpt(int, const char *, ...);
-extern s64 ieee754di_xcpt(s64, const char *, ...);
-extern ieee754sp ieee754sp_xcpt(ieee754sp, const char *, ...);
-extern ieee754sp ieee754sp_nanxcpt(ieee754sp, const char *, ...);
-extern ieee754sp ieee754sp_bestnan(ieee754sp, ieee754sp);
-extern ieee754sp ieee754sp_format(int, int, unsigned);
-
-
-#define SPNORMRET2(s, e, m, name, a0, a1) \
-{ \
-    ieee754sp V = ieee754sp_format(s, e, m); \
-    if(TSTX()) \
-      return ieee754sp_xcpt(V, name, a0, a1); \
-    else \
-      return V; \
-}
-
-#define SPNORMRET1(s, e, m, name, a0)  SPNORMRET2(s, e, m, name, a0, a0)
+extern int ieee754sp_isnan(union ieee754sp);
+extern union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp);
+extern union ieee754sp ieee754sp_format(int, int, unsigned);