aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/math-emu/ieee754.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/math-emu/ieee754.h')
-rw-r--r--arch/mips/math-emu/ieee754.h42
1 files changed, 29 insertions, 13 deletions
diff --git a/arch/mips/math-emu/ieee754.h b/arch/mips/math-emu/ieee754.h
index df94720714c7..d3be351aed15 100644
--- a/arch/mips/math-emu/ieee754.h
+++ b/arch/mips/math-emu/ieee754.h
@@ -221,15 +221,16 @@ union ieee754dp ieee754dp_dump(char *s, union ieee754dp x);
221#define IEEE754_SPCVAL_NTEN 5 /* -10.0 */ 221#define IEEE754_SPCVAL_NTEN 5 /* -10.0 */
222#define IEEE754_SPCVAL_PINFINITY 6 /* +inf */ 222#define IEEE754_SPCVAL_PINFINITY 6 /* +inf */
223#define IEEE754_SPCVAL_NINFINITY 7 /* -inf */ 223#define IEEE754_SPCVAL_NINFINITY 7 /* -inf */
224#define IEEE754_SPCVAL_INDEF 8 /* quiet NaN */ 224#define IEEE754_SPCVAL_INDEF_LEG 8 /* legacy quiet NaN */
225#define IEEE754_SPCVAL_PMAX 9 /* +max norm */ 225#define IEEE754_SPCVAL_INDEF_2008 9 /* IEEE 754-2008 quiet NaN */
226#define IEEE754_SPCVAL_NMAX 10 /* -max norm */ 226#define IEEE754_SPCVAL_PMAX 10 /* +max norm */
227#define IEEE754_SPCVAL_PMIN 11 /* +min norm */ 227#define IEEE754_SPCVAL_NMAX 11 /* -max norm */
228#define IEEE754_SPCVAL_NMIN 12 /* -min norm */ 228#define IEEE754_SPCVAL_PMIN 12 /* +min norm */
229#define IEEE754_SPCVAL_PMIND 13 /* +min denorm */ 229#define IEEE754_SPCVAL_NMIN 13 /* -min norm */
230#define IEEE754_SPCVAL_NMIND 14 /* -min denorm */ 230#define IEEE754_SPCVAL_PMIND 14 /* +min denorm */
231#define IEEE754_SPCVAL_P1E31 15 /* + 1.0e31 */ 231#define IEEE754_SPCVAL_NMIND 15 /* -min denorm */
232#define IEEE754_SPCVAL_P1E63 16 /* + 1.0e63 */ 232#define IEEE754_SPCVAL_P1E31 16 /* + 1.0e31 */
233#define IEEE754_SPCVAL_P1E63 17 /* + 1.0e63 */
233 234
234extern const union ieee754dp __ieee754dp_spcvals[]; 235extern const union ieee754dp __ieee754dp_spcvals[];
235extern const union ieee754sp __ieee754sp_spcvals[]; 236extern const union ieee754sp __ieee754sp_spcvals[];
@@ -243,7 +244,8 @@ extern const union ieee754sp __ieee754sp_spcvals[];
243#define ieee754dp_zero(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PZERO+(sn)]) 244#define ieee754dp_zero(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PZERO+(sn)])
244#define ieee754dp_one(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PONE+(sn)]) 245#define ieee754dp_one(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PONE+(sn)])
245#define ieee754dp_ten(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PTEN+(sn)]) 246#define ieee754dp_ten(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PTEN+(sn)])
246#define ieee754dp_indef() (ieee754dp_spcvals[IEEE754_SPCVAL_INDEF]) 247#define ieee754dp_indef() (ieee754dp_spcvals[IEEE754_SPCVAL_INDEF_LEG + \
248 ieee754_csr.nan2008])
247#define ieee754dp_max(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMAX+(sn)]) 249#define ieee754dp_max(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMAX+(sn)])
248#define ieee754dp_min(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIN+(sn)]) 250#define ieee754dp_min(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIN+(sn)])
249#define ieee754dp_mind(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIND+(sn)]) 251#define ieee754dp_mind(sn) (ieee754dp_spcvals[IEEE754_SPCVAL_PMIND+(sn)])
@@ -254,7 +256,8 @@ extern const union ieee754sp __ieee754sp_spcvals[];
254#define ieee754sp_zero(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PZERO+(sn)]) 256#define ieee754sp_zero(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PZERO+(sn)])
255#define ieee754sp_one(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PONE+(sn)]) 257#define ieee754sp_one(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PONE+(sn)])
256#define ieee754sp_ten(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PTEN+(sn)]) 258#define ieee754sp_ten(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PTEN+(sn)])
257#define ieee754sp_indef() (ieee754sp_spcvals[IEEE754_SPCVAL_INDEF]) 259#define ieee754sp_indef() (ieee754sp_spcvals[IEEE754_SPCVAL_INDEF_LEG + \
260 ieee754_csr.nan2008])
258#define ieee754sp_max(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMAX+(sn)]) 261#define ieee754sp_max(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMAX+(sn)])
259#define ieee754sp_min(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIN+(sn)]) 262#define ieee754sp_min(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIN+(sn)])
260#define ieee754sp_mind(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIND+(sn)]) 263#define ieee754sp_mind(sn) (ieee754sp_spcvals[IEEE754_SPCVAL_PMIND+(sn)])
@@ -266,12 +269,25 @@ extern const union ieee754sp __ieee754sp_spcvals[];
266 */ 269 */
267static inline int ieee754si_indef(void) 270static inline int ieee754si_indef(void)
268{ 271{
269 return INT_MAX; 272 return ieee754_csr.nan2008 ? 0 : INT_MAX;
270} 273}
271 274
272static inline s64 ieee754di_indef(void) 275static inline s64 ieee754di_indef(void)
273{ 276{
274 return S64_MAX; 277 return ieee754_csr.nan2008 ? 0 : S64_MAX;
278}
279
280/*
281 * Overflow integer value
282 */
283static inline int ieee754si_overflow(int xs)
284{
285 return ieee754_csr.nan2008 && xs ? INT_MIN : INT_MAX;
286}
287
288static inline s64 ieee754di_overflow(int xs)
289{
290 return ieee754_csr.nan2008 && xs ? S64_MIN : S64_MAX;
275} 291}
276 292
277/* result types for xctx.rt */ 293/* result types for xctx.rt */