Joe, thanks for taking a look on that.

Would something like "Here d is either (signed) zero or NaN (JLS 15.20.1)" make more sense?

-Dmitry

On 7/10/20 10:06 PM, Joe Darcy wrote:
Hello,

The comment

+        // NaN is here by JLS 15.20.1

is not correct; either NaN or (signed) zero is present at that point in the code.

-Joe

On 7/10/2020 11:11 AM, Dmitry Chuyko wrote:
Hello,

Please review a small change in Math.signum(double d) and Math.signum(float f) that improves performance for positive and negative numbers.

Current version first checks if the number is NaN or zero, and for all other numbers it extracts sign bit and constructs fp result. That makes all regular numbers case ~1.2-1.5x slower than two special number cases.

Improved version checks for regular number cases first, and does not use bit extraction. For positive and negative double numbers improvement is ~1.31-1.47x, for floats it is 1.06-1.46x. Micro-benchmark results are provided for tiered C2 on x86_64 and aarch64. For NaN and zero we see ~1.00-1.26x slowdown in same conditions.

Please find benchmarks and results in the webrev.

rfe: https://bugs.openjdk.java.net/browse/JDK-8249198

webrev: http://cr.openjdk.java.net/~dchuyko/8249198/webrev.00/

results: http://cr.openjdk.java.net/~dchuyko/8249198/webrev.00/results.txt

testing: JCK tests, jtreg tests on different platforms.

-Dmitry

Reply via email to