RFR: 8295159: DSO created with -ffast-math breaks Java floating-point arithmetic [v11]
Joe Darcy
darcy at openjdk.org
Thu Oct 19 01:32:03 UTC 2023
On Tue, 17 Oct 2023 11:43:59 GMT, Andrew Haley <aph at openjdk.org> wrote:
>> A bug in GCC causes shared libraries linked with -ffast-math to disable denormal arithmetic. This breaks Java's floating-point semantics.
>>
>> The bug is https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55522
>>
>> One solution is to save and restore the floating-point control word around System.loadLibrary(). This isn't perfect, because some shared library might load another shared library at runtime, but it's a lot better than what we do now.
>>
>> However, this fix is not complete. `dlopen()` is called from many places in the JDK. I guess the best thing to do is find and wrap them all. I'd like to hear people's opinions.
>
> Andrew Haley has updated the pull request incrementally with three additional commits since the last revision:
>
> - Review feedback
> - Merge branch 'JDK-8295159' of https://github.com/theRealAph/jdk into JDK-8295159
> - Remove change to RestoreMXCSROnJNICalls
src/hotspot/os/linux/os_linux.cpp line 1853:
> 1851:
> 1852: #ifndef IA32
> 1853: // Quickly test to make sure denormals are correctly handled.
Nit: I recommend using "subnormal" rather than "denormal" for general terminology on this point. While "denormal" was used in the original IEEE 754 standard from 1985, subsequent iterations of the standard using "subnormal" The term "subnormal" has also been used for the last several editions of JLS and JVMS.
src/hotspot/share/runtime/stubRoutines.cpp line 333:
> 331: // performed at runtime. Making _small_denormal volatile ensures
> 332: // that the following expression isn't evaluated at compile time:
> 333: return (_large_denormal + _small_denormal == _large_denormal
As a possible future expansion, if there are cases where foreign or native code sets the rounding mode to something other than round to nearest, expressions in the same vein can be used to detect that case and restore that other aspect of the control word.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/10661#discussion_r1364765074
PR Review Comment: https://git.openjdk.org/jdk/pull/10661#discussion_r1364766165
More information about the build-dev
mailing list