Intel® AVX10 ISA [1] extensions added new floating point comparison 
instructions. They set the EFLAGS register so that relationships can be tested 
independently to avoid extra checks when one of the inputs is NaN.

Most of the work is covered in the architecture definition (`x86.ad`) file. A 
new comparison operand was created to be used by new CMove and JMP definitions 
with the APX specific portions of the CMove section being updated to rely on 
the new instructions because both sets of instructions are always expected to 
be available on the same platform. New floating point comparison definitions 
were also added.

This change uses the new AVX10.2 (UCOMXSS or UCOMXSD) instructions on supported 
platforms to avoid the extra handling required with existing (UCOMISS or 
UCOMISD) instructions. To make sure no new failures were introduced, tier1, 
tier2, and tier3 tests were run on builds with and without the changes. 
Additionally, the JTREG tests listed below were used to verify correctness with 
`-XX:-UseAPX` / `-XX:+UseAPX` options. The baseline build used is [OpenJDK 
v26-b26](https://github.com/openjdk/jdk/releases/tag/jdk-26%2B26).

1. `jtreg:test/hotspot/jtreg/compiler/c2/irTests/CMoveLConstants.java`
2. `jtreg:test/hotspot/jtreg/compiler/c2/irTests/TestFPComparison.java`
3. `jtreg:test/hotspot/jtreg/compiler/intrinsics/math/TestSignumIntrinsic.java`
4. `jtreg:test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java`

Finally, the JMH micro-benchmark listed below was updated to separately 
exercise CMove and JMP code paths.

1. `micro:test/micro/org/openjdk/bench/java/lang/FPComparison.java`

[1] 
https://www.intel.com/content/www/us/en/content-details/856721/intel-advanced-vector-extensions-10-2-intel-avx10-2-architecture-specification.html?wapkw=AVX10

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

Commit messages:
 - Fix CMove IR tests to account for APX presence
 - Merge branch 'master' into user/missa-prime/avx10_2
 - Update the copyright year in modified files - Happy New Year!
 - Re-introduce two missing UseAPX flag checks in cmov section of x86.ad file
 - Further cmov re-ordering in x86.ad file
 - Re-order cmov definitions for easier review readability
 - Increase measurement iteration duration to 5 seconds in FPComparison.java
 - Correct expensive fixup formatting and use AVX10.2 instructions in new 
three-way comparison definitions
 - Merge branch 'master' into user/missa-prime/avx10_2
 - Manually resolve conflicts in FPComparion.java
 - ... and 7 more: https://git.openjdk.org/jdk/compare/dd20e915...1e62b5a3

Changes: https://git.openjdk.org/jdk/pull/28337/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28337&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8371955
  Stats: 1036 lines in 9 files changed: 852 ins; 92 del; 92 mod
  Patch: https://git.openjdk.org/jdk/pull/28337.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28337/head:pull/28337

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

Reply via email to