RFR: 8265491: Math Signum optimization for x86

Marcus G K Williams github.com+168222+mgkwill at openjdk.java.net
Mon Apr 19 23:06:32 UTC 2021


For x86 Math.Signum() uses two floating point compares and a copy sign operation involving data movement to gpr and XMM.

We can optimize to one floating point compare and sign computation in XMM. We observe ~25% performance improvement with this optimization.

Base:
Benchmark Mode Cnt Score Error Units
Signum._1_signumFloatTest avgt 5 4.660 ? 0.040 ns/op
Signum._3_signumDoubleTest avgt 5 4.809 ? 0.043 ns/op
 
Optimized:
signum intrinsic patch
Benchmark Mode Cnt Score Error Units
Signum._1_signumFloatTest avgt 5 3.782 ? 0.019 ns/op
Signum._3_signumDoubleTest avgt 5 3.782 ? 0.017 ns/op

Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>

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

Commit messages:
 - Add x86 signum intrinsic

Changes: https://git.openjdk.java.net/jdk/pull/3581/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3581&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8265491
  Stats: 189 lines in 4 files changed: 186 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3581.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3581/head:pull/3581

PR: https://git.openjdk.java.net/jdk/pull/3581


More information about the hotspot-dev mailing list