diff options
author | R David Murray <rdmurray@bitdance.com> | 2015-08-13 14:07:54 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2015-08-13 14:07:54 (GMT) |
commit | 587748e2717bd481b8becf6bd23a80ff425550af (patch) | |
tree | 86877a449fd6949ffd1aa9dd3468bb8e9ca1d67a /Include | |
parent | 32867187083e4f4fcf544cb6530db1083785379b (diff) | |
parent | c77088d055ea23e5e28648864b62421c7eae20c5 (diff) | |
download | cpython-587748e2717bd481b8becf6bd23a80ff425550af.zip cpython-587748e2717bd481b8becf6bd23a80ff425550af.tar.gz cpython-587748e2717bd481b8becf6bd23a80ff425550af.tar.bz2 |
Merge: #21167: Fix definition of NAN when ICC used without -fp-model strict.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/pymath.h | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Include/pymath.h b/Include/pymath.h index 62a6c42..1ea9ac1 100644 --- a/Include/pymath.h +++ b/Include/pymath.h @@ -150,7 +150,29 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); * doesn't support NaNs. */ #if !defined(Py_NAN) && !defined(Py_NO_NAN) -#define Py_NAN (Py_HUGE_VAL * 0.) +#if !defined(__INTEL_COMPILER) + #define Py_NAN (Py_HUGE_VAL * 0.) +#else /* __INTEL_COMPILER */ + #if defined(ICC_NAN_STRICT) + #pragma float_control(push) + #pragma float_control(precise, on) + #pragma float_control(except, on) + #if defined(_MSC_VER) + __declspec(noinline) + #else /* Linux */ + __attribute__((noinline)) + #endif /* _MSC_VER */ + static double __icc_nan() + { + return sqrt(-1.0); + } + #pragma float_control (pop) + #define Py_NAN __icc_nan() + #else /* ICC_NAN_RELAXED as default for Intel Compiler */ + static union { unsigned char buf[8]; double __icc_nan; } __nan_store = {0,0,0,0,0,0,0xf8,0x7f}; + #define Py_NAN (__nan_store.__icc_nan) + #endif /* ICC_NAN_STRICT */ +#endif /* __INTEL_COMPILER */ #endif /* Py_OVERFLOWED(X) |