diff options
author | Mark Dickinson <mdickinson@enthought.com> | 2012-04-15 14:12:37 (GMT) |
---|---|---|
committer | Mark Dickinson <mdickinson@enthought.com> | 2012-04-15 14:12:37 (GMT) |
commit | b0f00476a0f8c97f3bb835d24fed82e98cb9cd72 (patch) | |
tree | 2bae2eeeadac56ae621bc72718c393fec19a61e4 /Include | |
parent | 69c635266ec20945142d6fb3beb2555769fed1ad (diff) | |
parent | 18e3d81f96a592a0307fa41645017483eabcfc51 (diff) | |
download | cpython-b0f00476a0f8c97f3bb835d24fed82e98cb9cd72.zip cpython-b0f00476a0f8c97f3bb835d24fed82e98cb9cd72.tar.gz cpython-b0f00476a0f8c97f3bb835d24fed82e98cb9cd72.tar.bz2 |
Issue #13889: Merge fix from 3.2.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/pyport.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Include/pyport.h b/Include/pyport.h index 1fd4dcc..eba34f9 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -557,6 +557,30 @@ extern "C" { _Py_set_387controlword(old_387controlword) #endif +/* get and set x87 control word for VisualStudio/x86 */ +#if defined(_MSC_VER) && !defined(_WIN64) /* x87 not supported in 64-bit */ +#define HAVE_PY_SET_53BIT_PRECISION 1 +#define _Py_SET_53BIT_PRECISION_HEADER \ + unsigned int old_387controlword, new_387controlword, out_387controlword +/* We use the __control87_2 function to set only the x87 control word. + The SSE control word is unaffected. */ +#define _Py_SET_53BIT_PRECISION_START \ + do { \ + __control87_2(0, 0, &old_387controlword, NULL); \ + new_387controlword = \ + (old_387controlword & ~(_MCW_PC | _MCW_RC)) | (_PC_53 | _RC_NEAR); \ + if (new_387controlword != old_387controlword) \ + __control87_2(new_387controlword, _MCW_PC | _MCW_RC, \ + &out_387controlword, NULL); \ + } while (0) +#define _Py_SET_53BIT_PRECISION_END \ + do { \ + if (new_387controlword != old_387controlword) \ + __control87_2(old_387controlword, _MCW_PC | _MCW_RC, \ + &out_387controlword, NULL); \ + } while (0) +#endif + /* default definitions are empty */ #ifndef HAVE_PY_SET_53BIT_PRECISION #define _Py_SET_53BIT_PRECISION_HEADER |