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: Paul 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: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
d728f6709b
commit
e2d11e1a83
|
@ -36,16 +36,15 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
|
|||
|
||||
COMPXDP;
|
||||
COMPYDP;
|
||||
|
||||
u64 zm; int ze; int zs __maybe_unused; int zc;
|
||||
COMPZDP;
|
||||
|
||||
EXPLODEXDP;
|
||||
EXPLODEYDP;
|
||||
EXPLODEDP(z, zc, zs, ze, zm)
|
||||
EXPLODEZDP;
|
||||
|
||||
FLUSHXDP;
|
||||
FLUSHYDP;
|
||||
FLUSHDP(z, zc, zs, ze, zm);
|
||||
FLUSHZDP;
|
||||
|
||||
ieee754_clearcx();
|
||||
|
||||
|
@ -54,7 +53,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
|
|||
ieee754_setcx(IEEE754_INVALID_OPERATION);
|
||||
return ieee754dp_nanxcpt(z);
|
||||
case IEEE754_CLASS_DNORM:
|
||||
DPDNORMx(zm, ze);
|
||||
DPDNORMZ;
|
||||
/* QNAN is handled separately below */
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ static inline int ieee754dp_finite(union ieee754dp x)
|
|||
while ((m >> DP_FBITS) == 0) { m <<= 1; e--; }
|
||||
#define DPDNORMX DPDNORMx(xm, xe)
|
||||
#define DPDNORMY DPDNORMx(ym, ye)
|
||||
#define DPDNORMZ DPDNORMx(zm, ze)
|
||||
|
||||
static inline union ieee754dp builddp(int s, int bx, u64 m)
|
||||
{
|
||||
|
|
|
@ -55,6 +55,9 @@ static inline int ieee754_class_nan(int xc)
|
|||
#define COMPYSP \
|
||||
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) \
|
||||
{ \
|
||||
vs = SPSIGN(v); \
|
||||
|
@ -81,6 +84,7 @@ static inline int ieee754_class_nan(int xc)
|
|||
}
|
||||
#define EXPLODEXSP EXPLODESP(x, xc, xs, xe, xm)
|
||||
#define EXPLODEYSP EXPLODESP(y, yc, ys, ye, ym)
|
||||
#define EXPLODEZSP EXPLODESP(z, zc, zs, ze, zm)
|
||||
|
||||
|
||||
#define COMPXDP \
|
||||
|
@ -89,6 +93,9 @@ static inline int ieee754_class_nan(int xc)
|
|||
#define COMPYDP \
|
||||
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) \
|
||||
{ \
|
||||
vm = DPMANT(v); \
|
||||
|
@ -115,6 +122,7 @@ static inline int ieee754_class_nan(int xc)
|
|||
}
|
||||
#define EXPLODEXDP EXPLODEDP(x, xc, xs, xe, xm)
|
||||
#define EXPLODEYDP EXPLODEDP(y, yc, ys, ye, ym)
|
||||
#define EXPLODEZDP EXPLODEDP(z, zc, zs, ze, zm)
|
||||
|
||||
#define FLUSHDP(v, vc, vs, ve, vm) \
|
||||
if (vc==IEEE754_CLASS_DNORM) { \
|
||||
|
@ -140,7 +148,9 @@ static inline int ieee754_class_nan(int xc)
|
|||
|
||||
#define FLUSHXDP FLUSHDP(x, xc, xs, xe, xm)
|
||||
#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 FLUSHYSP FLUSHSP(y, yc, ys, ye, ym)
|
||||
#define FLUSHZSP FLUSHSP(z, zc, zs, ze, zm)
|
||||
|
||||
#endif /* __IEEE754INT_H */
|
||||
|
|
|
@ -65,6 +65,7 @@ static inline int ieee754sp_finite(union ieee754sp x)
|
|||
while ((m >> SP_FBITS) == 0) { m <<= 1; e--; }
|
||||
#define SPDNORMX SPDNORMx(xm, xe)
|
||||
#define SPDNORMY SPDNORMx(ym, ye)
|
||||
#define SPDNORMZ SPDNORMx(zm, ze)
|
||||
|
||||
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,
|
|||
|
||||
COMPXSP;
|
||||
COMPYSP;
|
||||
u32 zm; int ze; int zs __maybe_unused; int zc;
|
||||
COMPZSP;
|
||||
|
||||
EXPLODEXSP;
|
||||
EXPLODEYSP;
|
||||
EXPLODESP(z, zc, zs, ze, zm)
|
||||
EXPLODEZSP;
|
||||
|
||||
FLUSHXSP;
|
||||
FLUSHYSP;
|
||||
FLUSHSP(z, zc, zs, ze, zm);
|
||||
FLUSHZSP;
|
||||
|
||||
ieee754_clearcx();
|
||||
|
||||
|
@ -53,7 +53,7 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
|
|||
ieee754_setcx(IEEE754_INVALID_OPERATION);
|
||||
return ieee754sp_nanxcpt(z);
|
||||
case IEEE754_CLASS_DNORM:
|
||||
SPDNORMx(zm, ze);
|
||||
SPDNORMZ;
|
||||
/* QNAN is handled separately below */
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue