Commit e2d11e1a authored by Paul Burton's avatar Paul Burton Committed by Ralf Baechle

MIPS: math-emu: Add z argument macros

Introduce macros for handling the "z" argument to maddf & msubf, making
its handling consistent with that of the "x" & "y" arguments rather than
open-coding equivalents.
Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
Cc: Maciej W. Rozycki <macro@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/13156/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent d728f670
...@@ -36,16 +36,15 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x, ...@@ -36,16 +36,15 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
COMPXDP; COMPXDP;
COMPYDP; COMPYDP;
COMPZDP;
u64 zm; int ze; int zs __maybe_unused; int zc;
EXPLODEXDP; EXPLODEXDP;
EXPLODEYDP; EXPLODEYDP;
EXPLODEDP(z, zc, zs, ze, zm) EXPLODEZDP;
FLUSHXDP; FLUSHXDP;
FLUSHYDP; FLUSHYDP;
FLUSHDP(z, zc, zs, ze, zm); FLUSHZDP;
ieee754_clearcx(); ieee754_clearcx();
...@@ -54,7 +53,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x, ...@@ -54,7 +53,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
ieee754_setcx(IEEE754_INVALID_OPERATION); ieee754_setcx(IEEE754_INVALID_OPERATION);
return ieee754dp_nanxcpt(z); return ieee754dp_nanxcpt(z);
case IEEE754_CLASS_DNORM: case IEEE754_CLASS_DNORM:
DPDNORMx(zm, ze); DPDNORMZ;
/* QNAN is handled separately below */ /* QNAN is handled separately below */
} }
......
...@@ -60,6 +60,7 @@ static inline int ieee754dp_finite(union ieee754dp x) ...@@ -60,6 +60,7 @@ static inline int ieee754dp_finite(union ieee754dp x)
while ((m >> DP_FBITS) == 0) { m <<= 1; e--; } while ((m >> DP_FBITS) == 0) { m <<= 1; e--; }
#define DPDNORMX DPDNORMx(xm, xe) #define DPDNORMX DPDNORMx(xm, xe)
#define DPDNORMY DPDNORMx(ym, ye) #define DPDNORMY DPDNORMx(ym, ye)
#define DPDNORMZ DPDNORMx(zm, ze)
static inline union ieee754dp builddp(int s, int bx, u64 m) static inline union ieee754dp builddp(int s, int bx, u64 m)
{ {
......
...@@ -55,6 +55,9 @@ static inline int ieee754_class_nan(int xc) ...@@ -55,6 +55,9 @@ static inline int ieee754_class_nan(int xc)
#define COMPYSP \ #define COMPYSP \
unsigned ym; int ye; int ys; int yc unsigned ym; int ye; int ys; int yc
#define COMPZSP \
unsigned zm; int ze; int zs; int zc
#define EXPLODESP(v, vc, vs, ve, vm) \ #define EXPLODESP(v, vc, vs, ve, vm) \
{ \ { \
vs = SPSIGN(v); \ vs = SPSIGN(v); \
...@@ -81,6 +84,7 @@ static inline int ieee754_class_nan(int xc) ...@@ -81,6 +84,7 @@ static inline int ieee754_class_nan(int xc)
} }
#define EXPLODEXSP EXPLODESP(x, xc, xs, xe, xm) #define EXPLODEXSP EXPLODESP(x, xc, xs, xe, xm)
#define EXPLODEYSP EXPLODESP(y, yc, ys, ye, ym) #define EXPLODEYSP EXPLODESP(y, yc, ys, ye, ym)
#define EXPLODEZSP EXPLODESP(z, zc, zs, ze, zm)
#define COMPXDP \ #define COMPXDP \
...@@ -89,6 +93,9 @@ static inline int ieee754_class_nan(int xc) ...@@ -89,6 +93,9 @@ static inline int ieee754_class_nan(int xc)
#define COMPYDP \ #define COMPYDP \
u64 ym; int ye; int ys; int yc u64 ym; int ye; int ys; int yc
#define COMPZDP \
u64 zm; int ze; int zs; int zc
#define EXPLODEDP(v, vc, vs, ve, vm) \ #define EXPLODEDP(v, vc, vs, ve, vm) \
{ \ { \
vm = DPMANT(v); \ vm = DPMANT(v); \
...@@ -115,6 +122,7 @@ static inline int ieee754_class_nan(int xc) ...@@ -115,6 +122,7 @@ static inline int ieee754_class_nan(int xc)
} }
#define EXPLODEXDP EXPLODEDP(x, xc, xs, xe, xm) #define EXPLODEXDP EXPLODEDP(x, xc, xs, xe, xm)
#define EXPLODEYDP EXPLODEDP(y, yc, ys, ye, ym) #define EXPLODEYDP EXPLODEDP(y, yc, ys, ye, ym)
#define EXPLODEZDP EXPLODEDP(z, zc, zs, ze, zm)
#define FLUSHDP(v, vc, vs, ve, vm) \ #define FLUSHDP(v, vc, vs, ve, vm) \
if (vc==IEEE754_CLASS_DNORM) { \ if (vc==IEEE754_CLASS_DNORM) { \
...@@ -140,7 +148,9 @@ static inline int ieee754_class_nan(int xc) ...@@ -140,7 +148,9 @@ static inline int ieee754_class_nan(int xc)
#define FLUSHXDP FLUSHDP(x, xc, xs, xe, xm) #define FLUSHXDP FLUSHDP(x, xc, xs, xe, xm)
#define FLUSHYDP FLUSHDP(y, yc, ys, ye, ym) #define FLUSHYDP FLUSHDP(y, yc, ys, ye, ym)
#define FLUSHZDP FLUSHDP(z, zc, zs, ze, zm)
#define FLUSHXSP FLUSHSP(x, xc, xs, xe, xm) #define FLUSHXSP FLUSHSP(x, xc, xs, xe, xm)
#define FLUSHYSP FLUSHSP(y, yc, ys, ye, ym) #define FLUSHYSP FLUSHSP(y, yc, ys, ye, ym)
#define FLUSHZSP FLUSHSP(z, zc, zs, ze, zm)
#endif /* __IEEE754INT_H */ #endif /* __IEEE754INT_H */
...@@ -65,6 +65,7 @@ static inline int ieee754sp_finite(union ieee754sp x) ...@@ -65,6 +65,7 @@ static inline int ieee754sp_finite(union ieee754sp x)
while ((m >> SP_FBITS) == 0) { m <<= 1; e--; } while ((m >> SP_FBITS) == 0) { m <<= 1; e--; }
#define SPDNORMX SPDNORMx(xm, xe) #define SPDNORMX SPDNORMx(xm, xe)
#define SPDNORMY SPDNORMx(ym, ye) #define SPDNORMY SPDNORMx(ym, ye)
#define SPDNORMZ SPDNORMx(zm, ze)
static inline union ieee754sp buildsp(int s, int bx, unsigned m) static inline union ieee754sp buildsp(int s, int bx, unsigned m)
{ {
......
...@@ -36,15 +36,15 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x, ...@@ -36,15 +36,15 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
COMPXSP; COMPXSP;
COMPYSP; COMPYSP;
u32 zm; int ze; int zs __maybe_unused; int zc; COMPZSP;
EXPLODEXSP; EXPLODEXSP;
EXPLODEYSP; EXPLODEYSP;
EXPLODESP(z, zc, zs, ze, zm) EXPLODEZSP;
FLUSHXSP; FLUSHXSP;
FLUSHYSP; FLUSHYSP;
FLUSHSP(z, zc, zs, ze, zm); FLUSHZSP;
ieee754_clearcx(); ieee754_clearcx();
...@@ -53,7 +53,7 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x, ...@@ -53,7 +53,7 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
ieee754_setcx(IEEE754_INVALID_OPERATION); ieee754_setcx(IEEE754_INVALID_OPERATION);
return ieee754sp_nanxcpt(z); return ieee754sp_nanxcpt(z);
case IEEE754_CLASS_DNORM: case IEEE754_CLASS_DNORM:
SPDNORMx(zm, ze); SPDNORMZ;
/* QNAN is handled separately below */ /* QNAN is handled separately below */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment