diff options
-rw-r--r-- | include/math-emu/op-common.h | 12 | ||||
-rw-r--r-- | include/math-emu/soft-fp.h | 19 |
2 files changed, 27 insertions, 4 deletions
diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h index bb46e7645d53..cc1ec396f8d6 100644 --- a/include/math-emu/op-common.h +++ b/include/math-emu/op-common.h | |||
@@ -73,7 +73,7 @@ do { \ | |||
73 | X##_c = FP_CLS_NAN; \ | 73 | X##_c = FP_CLS_NAN; \ |
74 | /* Check for signaling NaN */ \ | 74 | /* Check for signaling NaN */ \ |
75 | if (!(_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)) \ | 75 | if (!(_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)) \ |
76 | FP_SET_EXCEPTION(FP_EX_INVALID); \ | 76 | FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_SNAN); \ |
77 | } \ | 77 | } \ |
78 | break; \ | 78 | break; \ |
79 | } \ | 79 | } \ |
@@ -324,7 +324,7 @@ do { \ | |||
324 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ | 324 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ |
325 | R##_s = _FP_NANSIGN_##fs; \ | 325 | R##_s = _FP_NANSIGN_##fs; \ |
326 | R##_c = FP_CLS_NAN; \ | 326 | R##_c = FP_CLS_NAN; \ |
327 | FP_SET_EXCEPTION(FP_EX_INVALID); \ | 327 | FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_ISI); \ |
328 | break; \ | 328 | break; \ |
329 | } \ | 329 | } \ |
330 | /* FALLTHRU */ \ | 330 | /* FALLTHRU */ \ |
@@ -431,7 +431,7 @@ do { \ | |||
431 | R##_s = _FP_NANSIGN_##fs; \ | 431 | R##_s = _FP_NANSIGN_##fs; \ |
432 | R##_c = FP_CLS_NAN; \ | 432 | R##_c = FP_CLS_NAN; \ |
433 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ | 433 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ |
434 | FP_SET_EXCEPTION(FP_EX_INVALID); \ | 434 | FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_IMZ);\ |
435 | break; \ | 435 | break; \ |
436 | \ | 436 | \ |
437 | default: \ | 437 | default: \ |
@@ -490,11 +490,15 @@ do { \ | |||
490 | break; \ | 490 | break; \ |
491 | \ | 491 | \ |
492 | case _FP_CLS_COMBINE(FP_CLS_INF,FP_CLS_INF): \ | 492 | case _FP_CLS_COMBINE(FP_CLS_INF,FP_CLS_INF): \ |
493 | R##_s = _FP_NANSIGN_##fs; \ | ||
494 | R##_c = FP_CLS_NAN; \ | ||
495 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ | ||
496 | FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_IDI);\ | ||
493 | case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_ZERO): \ | 497 | case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_ZERO): \ |
494 | R##_s = _FP_NANSIGN_##fs; \ | 498 | R##_s = _FP_NANSIGN_##fs; \ |
495 | R##_c = FP_CLS_NAN; \ | 499 | R##_c = FP_CLS_NAN; \ |
496 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ | 500 | _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ |
497 | FP_SET_EXCEPTION(FP_EX_INVALID); \ | 501 | FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_ZDZ);\ |
498 | break; \ | 502 | break; \ |
499 | \ | 503 | \ |
500 | default: \ | 504 | default: \ |
diff --git a/include/math-emu/soft-fp.h b/include/math-emu/soft-fp.h index a6f873b45f98..3f284bc03180 100644 --- a/include/math-emu/soft-fp.h +++ b/include/math-emu/soft-fp.h | |||
@@ -51,6 +51,25 @@ | |||
51 | #ifndef FP_EX_INVALID | 51 | #ifndef FP_EX_INVALID |
52 | #define FP_EX_INVALID 0 | 52 | #define FP_EX_INVALID 0 |
53 | #endif | 53 | #endif |
54 | #ifndef FP_EX_INVALID_SNAN | ||
55 | #define FP_EX_INVALID_SNAN 0 | ||
56 | #endif | ||
57 | /* inf - inf */ | ||
58 | #ifndef FP_EX_INVALID_ISI | ||
59 | #define FP_EX_INVALID_ISI 0 | ||
60 | #endif | ||
61 | /* inf / inf */ | ||
62 | #ifndef FP_EX_INVALID_IDI | ||
63 | #define FP_EX_INVALID_IDI 0 | ||
64 | #endif | ||
65 | /* 0 / 0 */ | ||
66 | #ifndef FP_EX_INVALID_ZDZ | ||
67 | #define FP_EX_INVALID_ZDZ 0 | ||
68 | #endif | ||
69 | /* inf * 0 */ | ||
70 | #ifndef FP_EX_INVALID_IMZ | ||
71 | #define FP_EX_INVALID_IMZ 0 | ||
72 | #endif | ||
54 | #ifndef FP_EX_OVERFLOW | 73 | #ifndef FP_EX_OVERFLOW |
55 | #define FP_EX_OVERFLOW 0 | 74 | #define FP_EX_OVERFLOW 0 |
56 | #endif | 75 | #endif |