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