MIPS: math-emu: Cleanup definition of structs describe sp/dp floats.
authorRalf Baechle <ralf@linux-mips.org>
Fri, 25 Apr 2014 13:48:40 +0000 (15:48 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 23 May 2014 13:11:15 +0000 (15:11 +0200)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/math-emu/dp_sqrt.c
arch/mips/math-emu/ieee754.c
arch/mips/math-emu/ieee754.h
arch/mips/math-emu/ieee754dp.h
arch/mips/math-emu/ieee754sp.h

index 3c36a86d1473402e3828002e3a2742d8bd9b8698..8e88bde51f71ece0bc321c45f0f5b2988cdb0194 100644 (file)
@@ -110,13 +110,13 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
        /* triple to almost 56 sig. bits: y ~= sqrt(x) to within 1 ulp */
        /* t=y*y; z=t;  pt[n0]+=0x00100000; t+=z; z=(x-z)*y; */
        z = t = ieee754dp_mul(y, y);
-       t.parts.bexp += 0x001;
+       t.bexp += 0x001;
        t = ieee754dp_add(t, z);
        z = ieee754dp_mul(ieee754dp_sub(x, z), y);
 
        /* t=z/(t+x) ;  pt[n0]+=0x00100000; y+=t; */
        t = ieee754dp_div(z, ieee754dp_add(t, x));
-       t.parts.bexp += 0x001;
+       t.bexp += 0x001;
        y = ieee754dp_add(y, t);
 
        /* twiddle last bit to force y correctly rounded */
@@ -155,7 +155,7 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
        }
 
        /* py[n0]=py[n0]+scalx; ...scale back y */
-       y.parts.bexp += scalx;
+       y.bexp += scalx;
 
        /* restore rounding mode, possibly set inexact */
        ieee754_csr = oldcsr;
index ab53f849f2c7c2b851fa00dfa27fc63aa88bfbe7..670d19b29f9934ba23e1035c712ebd89074a70b3 100644 (file)
 
 #include <linux/compiler.h>
 
-#include "ieee754int.h"
+#include "ieee754.h"
 #include "ieee754sp.h"
 #include "ieee754dp.h"
 
 /* special constants
 */
 
-#define DPSTR(s, b, mh, ml)                                            \
+#define DPCNST(s, b, m)                                                        \
 {                                                                      \
        .sign   = (s),                                                  \
-       .bexp   = (b),                                                  \
-       .manthi = (mh),                                                 \
-       .mantlo = (ml)                                                  \
+       .bexp   = (b) + DP_EBIAS,                                       \
+       .mant   = (m)                                                   \
 }
 
-const struct ieee754dp_const __ieee754dp_spcvals[] = {
-       DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* + zero   */
-       DPSTR(1, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* - zero   */
-       DPSTR(0, DP_EBIAS, 0, 0),       /* + 1.0   */
-       DPSTR(1, DP_EBIAS, 0, 0),       /* - 1.0   */
-       DPSTR(0, 3 + DP_EBIAS, 0x40000, 0),     /* + 10.0   */
-       DPSTR(1, 3 + DP_EBIAS, 0x40000, 0),     /* - 10.0   */
-       DPSTR(0, DP_EMAX + 1 + DP_EBIAS, 0, 0), /* + infinity */
-       DPSTR(1, DP_EMAX + 1 + DP_EBIAS, 0, 0), /* - infinity */
-       DPSTR(0, DP_EMAX+1+DP_EBIAS, 0x7FFFF, 0xFFFFFFFF), /* + indef quiet Nan */
-       DPSTR(0, DP_EMAX + DP_EBIAS, 0xFFFFF, 0xFFFFFFFF),      /* + max */
-       DPSTR(1, DP_EMAX + DP_EBIAS, 0xFFFFF, 0xFFFFFFFF),      /* - max */
-       DPSTR(0, DP_EMIN + DP_EBIAS, 0, 0),     /* + min normal */
-       DPSTR(1, DP_EMIN + DP_EBIAS, 0, 0),     /* - min normal */
-       DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 1), /* + min denormal */
-       DPSTR(1, DP_EMIN - 1 + DP_EBIAS, 0, 1), /* - min denormal */
-       DPSTR(0, 31 + DP_EBIAS, 0, 0),  /* + 1.0e31 */
-       DPSTR(0, 63 + DP_EBIAS, 0, 0),  /* + 1.0e63 */
+const union ieee754dp __ieee754dp_spcvals[] = {
+       DPCNST(0, DP_EMIN - 1, 0x0000000000000ULL),     /* + zero   */
+       DPCNST(1, DP_EMIN - 1, 0x0000000000000ULL),     /* - zero   */
+       DPCNST(0, 0,           0x0000000000000ULL),     /* + 1.0   */
+       DPCNST(1, 0,           0x0000000000000ULL),     /* - 1.0   */
+       DPCNST(0, 3,           0x4000000000000ULL),     /* + 10.0   */
+       DPCNST(1, 3,           0x4000000000000ULL),     /* - 10.0   */
+       DPCNST(0, DP_EMAX + 1, 0x0000000000000ULL),     /* + infinity */
+       DPCNST(1, DP_EMAX + 1, 0x0000000000000ULL),     /* - infinity */
+       DPCNST(0, DP_EMAX + 1, 0x7FFFFFFFFFFFFULL),     /* + indef quiet Nan */
+       DPCNST(0, DP_EMAX,     0xFFFFFFFFFFFFFULL),     /* + max */
+       DPCNST(1, DP_EMAX,     0xFFFFFFFFFFFFFULL),     /* - max */
+       DPCNST(0, DP_EMIN,     0x0000000000000ULL),     /* + min normal */
+       DPCNST(1, DP_EMIN,     0x0000000000000ULL),     /* - min normal */
+       DPCNST(0, DP_EMIN - 1, 0x0000000000001ULL),     /* + min denormal */
+       DPCNST(1, DP_EMIN - 1, 0x0000000000001ULL),     /* - min denormal */
+       DPCNST(0, 31,          0x0000000000000ULL),     /* + 1.0e31 */
+       DPCNST(0, 63,          0x0000000000000ULL),     /* + 1.0e63 */
 };
 
-#define SPSTR(s, b, m)                                                 \
+#define SPCNST(s, b, m)                                                        \
 {                                                                      \
        .sign   = (s),                                                  \
-       .bexp   = (b),                                                  \
+       .bexp   = (b) + SP_EBIAS,                                       \
        .mant   = (m)                                                   \
 }
 
-const struct ieee754sp_const __ieee754sp_spcvals[] = {
-       SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 0),    /* + zero   */
-       SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 0),    /* - zero   */
-       SPSTR(0, SP_EBIAS, 0),  /* + 1.0   */
-       SPSTR(1, SP_EBIAS, 0),  /* - 1.0   */
-       SPSTR(0, 3 + SP_EBIAS, 0x200000),       /* + 10.0   */
-       SPSTR(1, 3 + SP_EBIAS, 0x200000),       /* - 10.0   */
-       SPSTR(0, SP_EMAX + 1 + SP_EBIAS, 0),    /* + infinity */
-       SPSTR(1, SP_EMAX + 1 + SP_EBIAS, 0),    /* - infinity */
-       SPSTR(0, SP_EMAX+1+SP_EBIAS, 0x3FFFFF),     /* + indef quiet Nan  */
-       SPSTR(0, SP_EMAX + SP_EBIAS, 0x7FFFFF), /* + max normal */
-       SPSTR(1, SP_EMAX + SP_EBIAS, 0x7FFFFF), /* - max normal */
-       SPSTR(0, SP_EMIN + SP_EBIAS, 0),        /* + min normal */
-       SPSTR(1, SP_EMIN + SP_EBIAS, 0),        /* - min normal */
-       SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 1),    /* + min denormal */
-       SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 1),    /* - min denormal */
-       SPSTR(0, 31 + SP_EBIAS, 0),     /* + 1.0e31 */
-       SPSTR(0, 63 + SP_EBIAS, 0),     /* + 1.0e63 */
+const union ieee754sp __ieee754sp_spcvals[] = {
+       SPCNST(0, SP_EMIN - 1, 0x000000),       /* + zero   */
+       SPCNST(1, SP_EMIN - 1, 0x000000),       /* - zero   */
+       SPCNST(0, 0,           0x000000),       /* + 1.0   */
+       SPCNST(1, 0,           0x000000),       /* - 1.0   */
+       SPCNST(0, 3,           0x200000),       /* + 10.0   */
+       SPCNST(1, 3,           0x200000),       /* - 10.0   */
+       SPCNST(0, SP_EMAX + 1, 0x000000),       /* + infinity */
+       SPCNST(1, SP_EMAX + 1, 0x000000),       /* - infinity */
+       SPCNST(0, SP_EMAX + 1, 0x3FFFFF),       /* + indef quiet Nan  */
+       SPCNST(0, SP_EMAX,     0x7FFFFF),       /* + max normal */
+       SPCNST(1, SP_EMAX,     0x7FFFFF),       /* - max normal */
+       SPCNST(0, SP_EMIN,     0x000000),       /* + min normal */
+       SPCNST(1, SP_EMIN,     0x000000),       /* - min normal */
+       SPCNST(0, SP_EMIN - 1, 0x000001),       /* + min denormal */
+       SPCNST(1, SP_EMIN - 1, 0x000001),       /* - min denormal */
+       SPCNST(0, 31,          0x000000),       /* + 1.0e31 */
+       SPCNST(0, 63,          0x000000),       /* + 1.0e63 */
 };
index e87a6361149bee0c06ad19b14c28ba18e69f5222..4f89f854bb45d159ecb2de9730f94785aeb5618d 100644 (file)
 #include <linux/sched.h>
 #include <asm/bitfield.h>
 
-struct ieee754dp_const {
-       __BITFIELD_FIELD(unsigned sign:1,
-       __BITFIELD_FIELD(unsigned bexp:11,
-       __BITFIELD_FIELD(unsigned manthi:20,
-       __BITFIELD_FIELD(unsigned mantlo:32,
-       ;))))
-};
-
 union ieee754dp {
-       struct ieee754dp_const oparts;
        struct {
                __BITFIELD_FIELD(unsigned int sign:1,
                __BITFIELD_FIELD(unsigned int bexp:11,
                __BITFIELD_FIELD(u64 mant:52,
                ;)))
-       } parts;
-       double d;
+       };
        u64 bits;
 };
 
-struct ieee754sp_const {
-       __BITFIELD_FIELD(unsigned sign:1,
-       __BITFIELD_FIELD(unsigned bexp:8,
-       __BITFIELD_FIELD(unsigned mant:23,
-       ;)))
-};
-
 union ieee754sp {
-       struct ieee754sp_const parts;
-       float f;
+       struct {
+               __BITFIELD_FIELD(unsigned sign:1,
+               __BITFIELD_FIELD(unsigned bexp:8,
+               __BITFIELD_FIELD(unsigned mant:23,
+               ;)))
+       };
        u32 bits;
 };
 
@@ -299,8 +286,8 @@ union ieee754dp ieee754dp_dump(char *s, union ieee754dp x);
 #define IEEE754_SPCVAL_P1E31   15      /* + 1.0e31 */
 #define IEEE754_SPCVAL_P1E63   16      /* + 1.0e63 */
 
-extern const struct ieee754dp_const __ieee754dp_spcvals[];
-extern const struct ieee754sp_const __ieee754sp_spcvals[];
+extern const union ieee754dp __ieee754dp_spcvals[];
+extern const union ieee754sp __ieee754sp_spcvals[];
 #define ieee754dp_spcvals ((const union ieee754dp *)__ieee754dp_spcvals)
 #define ieee754sp_spcvals ((const union ieee754sp *)__ieee754sp_spcvals)
 
index 91d785e491019bef8a7d16a0cd751c8d3ee67d43..231bd761c5b1ec58c795ba6bc9d4899d42e90009 100644 (file)
@@ -40,9 +40,9 @@
 #define DP_HIDDEN_BIT  DP_MBIT(DP_FBITS)
 #define DP_SIGN_BIT    DP_MBIT(63)
 
-#define DPSIGN(dp)     (dp.parts.sign)
-#define DPBEXP(dp)     (dp.parts.bexp)
-#define DPMANT(dp)     (dp.parts.mant)
+#define DPSIGN(dp)     (dp.sign)
+#define DPBEXP(dp)     (dp.bexp)
+#define DPMANT(dp)     (dp.mant)
 
 static inline int ieee754dp_finite(union ieee754dp x)
 {
@@ -74,9 +74,10 @@ static inline union ieee754dp builddp(int s, int bx, u64 m)
               && (bx) <= DP_EMAX + 1 + DP_EBIAS);
        assert(((m) >> DP_FBITS) == 0);
 
-       r.parts.sign = s;
-       r.parts.bexp = bx;
-       r.parts.mant = m;
+       r.sign = s;
+       r.bexp = bx;
+       r.mant = m;
+
        return r;
 }
 
index e5295d7e8ce9a04ad54cec6f74ef39f8b4b1a0fe..35da62f791c9dbf75999b7a155e57aea7098b962 100644 (file)
@@ -40,9 +40,9 @@
 #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)
+#define SPSIGN(sp)     (sp.sign)
+#define SPBEXP(sp)     (sp.bexp)
+#define SPMANT(sp)     (sp.mant)
 
 static inline int ieee754sp_finite(union ieee754sp x)
 {
@@ -79,9 +79,9 @@ static inline union ieee754sp buildsp(int s, int bx, unsigned m)
               && (bx) <= SP_EMAX + 1 + SP_EBIAS);
        assert(((m) >> SP_FBITS) == 0);
 
-       r.parts.sign = s;
-       r.parts.bexp = bx;
-       r.parts.mant = m;
+       r.sign = s;
+       r.bexp = bx;
+       r.mant = m;
 
        return r;
 }