From edbc28ce81f46d042f9d5ddf9c5bc8cecebc715a Mon Sep 17 00:00:00 2001 From: R David Murray Date: Thu, 13 Aug 2015 09:58:07 -0400 Subject: [PATCH] #21167: Fix definition of NAN when ICC used without -fp-model strict. Patch from Chris Hogan of Intel, reviewed by Mark Dickinson. --- Include/pymath.h | 24 +++++++++++++++++++++++- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Include/pymath.h b/Include/pymath.h index 62a6c42bbf0..1ea9ac1437a 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) diff --git a/Misc/ACKS b/Misc/ACKS index 93b2a0b17b9..f5868f9647d 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -583,6 +583,7 @@ Gregor Hoffleit Chris Hoffman Stefan Hoffmeister Albert Hofkamp +Chris Hogan Tomas Hoger Jonathan Hogg Kamilla Holanda diff --git a/Misc/NEWS b/Misc/NEWS index e2da905cb0f..16b33bc272b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Release date: tba Core and Builtins ----------------- +- Issue #21167: NAN operations are now handled correctly when python is + compiled with ICC even if -fp-model strict is not specified. + - Issue #4395: Better testing and documentation of binary operators. Patch by Martin Panter.