diff options
Diffstat (limited to 'arch/mips/math-emu/ieee754.h')
-rw-r--r-- | arch/mips/math-emu/ieee754.h | 42 |
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 | ||
234 | extern const union ieee754dp __ieee754dp_spcvals[]; | 235 | extern const union ieee754dp __ieee754dp_spcvals[]; |
235 | extern const union ieee754sp __ieee754sp_spcvals[]; | 236 | extern 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 | */ |
267 | static inline int ieee754si_indef(void) | 270 | static inline int ieee754si_indef(void) |
268 | { | 271 | { |
269 | return INT_MAX; | 272 | return ieee754_csr.nan2008 ? 0 : INT_MAX; |
270 | } | 273 | } |
271 | 274 | ||
272 | static inline s64 ieee754di_indef(void) | 275 | static 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 | */ | ||
283 | static inline int ieee754si_overflow(int xs) | ||
284 | { | ||
285 | return ieee754_csr.nan2008 && xs ? INT_MIN : INT_MAX; | ||
286 | } | ||
287 | |||
288 | static 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 */ |