http://bugs.winehq.org/show_bug.cgi?id=30465 --- Comment #4 from Ulrik Dickow <u.dickow(a)gmail.com> 2012-04-17 06:43:25 CDT --- Created attachment 39836 --> http://bugs.winehq.org/attachment.cgi?id=39836 Small stand-alone C(++) test program fiddling with the floating point CW This small C/C++ test program demonstrates the effect of the floating point control word on the x86 platform using old-fashioned 387 code (the default on 32-bit compiles). It shows that if the CW, as in the wine crash, is 0x1372 when we reach the cast (int32_t) d then that cast will indeed trigger an Invalid floating point operation exception IF d is too large to fit in an int32_t -- but not if it just has a value at or between two valid 32 bit integers. So a simple and portable way of avoiding the problem, modifying only Gecko C++ source code, would be to replace if (JSDOUBLE_IS_NEGZERO(d)) with if (JSDOUBLE_IS_NEGZERO(d) || d < INT32_MIN || d > INT32_MAX) in JSDOUBLE_IS_INT32 in wine-gecko/js/src/jsval.h. Oops, now I see that only a few days ago in the main git repo for wine-gecko, it was replaced with MOZ_DOUBLE_IS_INT32 -- but the same implementation, so the same fix can apply. It will make the code slower, though. The test program also proves that if you compile with -mfpmath=sse -msse2, it will not crash. -- Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email Do not reply to this email, post in Bugzilla using the above URL to reply. ------- You are receiving this mail because: ------- You are watching all bug changes.