Curve25519 polynomial arithmetic is performed with intrinsincs implemented in GPR related instructions for multiplication operations (method mult()). Benchmark improvements include:
- X25519 encapsulation: +17% - X25519 decapsulation: +17% - X25519-MLKEM encapsulation: +12% - X25519-MLKEM decapsulation: +9% - X22518 key agreement: +16% - X25519 key-pair generation: +16% - X25519-MLKEM key-pair generation: +10% - EdDSA key-pair generation: +19% - EdDSA signing: +17% --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - Use separate intrinsics flag: UseIntPoly25519Intrinsics - Remove AVX-512 related code - 8371305: X25519 should utilize intrinsics - Fix variable names and eliminate unneeded variables - Remove unnecessary left and right shift for unsigned to signed conversion - Ferenc comments: use separate registers for B - Account for when both limbs are negative and correct the carry-add reduction - Fix multiple mask issues - Optimize normalization with mask subtraction technique - Optimize return value with moves of 1 + 4 quad words - ... and 25 more: https://git.openjdk.org/jdk/compare/78580f1e...87a210b1 Changes: https://git.openjdk.org/jdk/pull/31087/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=31087&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8371305 Stats: 261 lines in 17 files changed: 252 ins; 0 del; 9 mod Patch: https://git.openjdk.org/jdk/pull/31087.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/31087/head:pull/31087 PR: https://git.openjdk.org/jdk/pull/31087
