changeset: 76322:bf3b77722c9f branch: 2.7 parent: 76295:225126c9d4b5 user: Mark Dickinson date: Sun Apr 15 15:19:06 2012 +0100 files: Include/pyport.h Misc/NEWS description: Issue #13889: On MSVC builds, set FPU control word at runtime for all string <-> float conversions. Patch by Samuel Iseli and Stefan Krah. diff -r 225126c9d4b5 -r bf3b77722c9f Include/pyport.h --- a/Include/pyport.h Fri Apr 13 21:27:00 2012 -0400 +++ b/Include/pyport.h Sun Apr 15 15:19:06 2012 +0100 @@ -549,6 +549,30 @@ _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 diff -r 225126c9d4b5 -r bf3b77722c9f Misc/NEWS --- a/Misc/NEWS Fri Apr 13 21:27:00 2012 -0400 +++ b/Misc/NEWS Sun Apr 15 15:19:06 2012 +0100 @@ -9,6 +9,10 @@ Core and Builtins ----------------- +- Issue #13889: Check and (if necessary) set FPU control word before calling + any of the dtoa.c string <-> float conversion functions, on MSVC builds of + Python. This fixes issues when embedding Python in a Delphi app. + - Issue #14505: Fix file descriptor leak when deallocating file objects created with PyFile_FromString().

AltStyle によって変換されたページ (->オリジナル) /