Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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 */
	}

+1 −0
Original line number Diff line number Diff line
@@ -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)
{
+10 −0
Original line number Diff line number Diff line
@@ -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  */
+1 −0
Original line number Diff line number Diff line
@@ -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)
{
+4 −4
Original line number Diff line number Diff line
@@ -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 */
	}