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

Commit f80cc08d authored by Ralf Baechle's avatar Ralf Baechle
Browse files

MIPS: math-emu: Use __BITFIELD_FIELD to eleminate redundant definitions.



Union _ieee754sp was even duplicated even though there are no endian
dependencies in it all.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 64a17a0f
Loading
Loading
Loading
Loading
+23 −63
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <asm/byteorder.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <asm/bitfield.h>

/*
 * Not very pretty, but the Linux kernel's normal va_list definition
@@ -36,60 +37,31 @@
#include <stdarg.h>
#endif

#ifdef __LITTLE_ENDIAN
struct ieee754dp_konst {
	unsigned mantlo:32;
	unsigned manthi:20;
	unsigned bexp:11;
	unsigned sign:1;
};
struct ieee754sp_konst {
	unsigned mant:23;
	unsigned bexp:8;
	unsigned sign:1;
	__BITFIELD_FIELD(unsigned sign:1,
	__BITFIELD_FIELD(unsigned bexp:11,
	__BITFIELD_FIELD(unsigned manthi:20,
	__BITFIELD_FIELD(unsigned mantlo:32,
	;))))
};

typedef union _ieee754dp {
	struct ieee754dp_konst oparts;
	struct {
		u64 mant:52;
		unsigned int bexp:11;
		unsigned int sign:1;
	} parts;
	u64 bits;
	double d;
} ieee754dp;

typedef union _ieee754sp {
	struct ieee754sp_konst parts;
	float f;
	u32 bits;
} ieee754sp;
#endif

#ifdef __BIG_ENDIAN
struct ieee754dp_konst {
	unsigned sign:1;
	unsigned bexp:11;
	unsigned manthi:20;
	unsigned mantlo:32;
};

typedef union _ieee754dp {
	struct ieee754dp_konst oparts;
	struct {
		unsigned int sign:1;
		unsigned int bexp:11;
		u64 mant:52;
		__BITFIELD_FIELD(unsigned int sign:1,
		__BITFIELD_FIELD(unsigned int bexp:11,
		__BITFIELD_FIELD(u64 mant:52,
		;)))
	} parts;
	double d;
	u64 bits;
} ieee754dp;

struct ieee754sp_konst {
	unsigned sign:1;
	unsigned bexp:8;
	unsigned mant:23;
	__BITFIELD_FIELD(unsigned sign:1,
	__BITFIELD_FIELD(unsigned bexp:8,
	__BITFIELD_FIELD(unsigned mant:23,
	;)))
};

typedef union _ieee754sp {
@@ -97,7 +69,6 @@ typedef union _ieee754sp {
	float f;
	u32 bits;
} ieee754sp;
#endif

/*
 * single precision (often aka float)
@@ -307,26 +278,15 @@ char *ieee754dp_tstr(ieee754dp x, int prec, int fmt, int af);
 * The control status register
 */
struct _ieee754_csr {
#ifdef __BIG_ENDIAN
	unsigned pad0:7;
	unsigned nod:1;		/* set 1 for no denormalised numbers */
	unsigned c:1;		/* condition */
	unsigned pad1:5;
	unsigned cx:6;		/* exceptions this operation */
	unsigned mx:5;		/* exception enable  mask */
	unsigned sx:5;		/* exceptions total */
	unsigned rm:2;		/* current rounding mode */
#endif
#ifdef __LITTLE_ENDIAN
	unsigned rm:2;		/* current rounding mode */
	unsigned sx:5;		/* exceptions total */
	unsigned mx:5;		/* exception enable  mask */
	unsigned cx:6;		/* exceptions this operation */
	unsigned pad1:5;
	unsigned c:1;		/* condition */
	unsigned nod:1;		/* set 1 for no denormalised numbers */
	unsigned pad0:7;
#endif
	__BITFIELD_FIELD(unsigned pad0:7,
	__BITFIELD_FIELD(unsigned nod:1,	/* set 1 for no denormalised numbers */
	__BITFIELD_FIELD(unsigned c:1,		/* condition */
	__BITFIELD_FIELD(unsigned pad1:5,
	__BITFIELD_FIELD(unsigned cx:6,		/* exceptions this operation */
	__BITFIELD_FIELD(unsigned mx:5,		/* exception enable  mask */
	__BITFIELD_FIELD(unsigned sx:5,		/* exceptions total */
	__BITFIELD_FIELD(unsigned rm:2,		/* current rounding mode */
	;))))))))
};
#define ieee754_csr (*(struct _ieee754_csr *)(&current->thread.fpu.fcr31))