Found this while cleaning up x86_32 code for removal.

In our current code there is a block added by 
[JDK-8076373](https://bugs.openjdk.org/browse/JDK-8076373):
https://github.com/openjdk/jdk/blob/3b21a298c29d88720f6bfb2dc1f3305b6a3db307/src/hotspot/share/compiler/compileBroker.cpp#L1451-L1473

Ostensibly, that block is for x86_32 handling of signalling NaNs -- x87 FPU has 
a peculiarity with them. See other funky bugs we seen with it: 
[JDK-8285985](https://bugs.openjdk.org/browse/JDK-8285985), 
[JDK-8293991](https://bugs.openjdk.org/browse/JDK-8293991).

But the way current block is coded, it is enabled for X86 wholesale, which also 
means x86_64! In fact, it is likely even worse on x86_64, because the related 
"fast" entries are generated only for x86_32:
https://github.com/openjdk/jdk/blob/3b21a298c29d88720f6bfb2dc1f3305b6a3db307/src/hotspot/share/interpreter/templateInterpreterGenerator.cpp#L493-L502

This can be solved by checking `IA32` instead of `X86`. This block would be 
gone completely once we remove x86_32 port. Meanwhile, we can make it right by 
x86_64, and make eventual x86_32 removal less confusing. This issue seems to 
only affect the compilation of native methods, while most of the hot code is 
riding on compiler intrinsics. I'll put performance data in comments.

Additional testing:
 - [ ] Linux x86_64 server fastdebug, `all`

-------------

Commit messages:
 - Fix

Changes: https://git.openjdk.org/jdk/pull/22446/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22446&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8345219
  Stats: 208 lines in 3 files changed: 206 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/22446.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22446/head:pull/22446

PR: https://git.openjdk.org/jdk/pull/22446

Reply via email to