On Fri, 9 Jul 2021 21:30:22 GMT, Brian Burkhalter <b...@openjdk.org> wrote:

>> Please consider this change to make the `float` and `double` versions of 
>> `java.lang.Math.abs()` branch-free.
>
> Brian Burkhalter has refreshed the contents of this pull request, and 
> previous commits have been removed. The incremental views will show 
> differences compared to the previous content of the PR.

src/java.base/share/classes/jdk/internal/math/DoubleConsts.java line 89:

> 87:                 ((SIGN_BIT_MASK & SIGNIF_BIT_MASK) == 0L) &&
> 88:                 ((EXP_BIT_MASK & SIGNIF_BIT_MASK) == 0L)) &&
> 89:                 ((SIGN_BIT_MASK | MAG_BIT_MASK) == ~0));

Nit: please use "~0L" instead so the long-ness of 0 is explicit.

test/jdk/java/lang/Math/AbsTests.java line 202:

> 200:             return Float.floatToRawIntBits(result) !=
> 201:                 Float.floatToRawIntBits(f) ? 1 : 0;
> 202:         } else if ((f >= 0 && result != f) || (f < 0 && result != -f)) {

Please look at the Tests.java file in the jdk/test/java/lang/Math directory. 
One of the methods like

    public static int test(String testName, double input,
                           double result, double expected

will be helpful here; e.g.

Tests.test("Math.abs", f, Math.abs(-f), f)

I would also add combination for StrictMath.abs and negations:

Tests.test("Math.abs", f, Math.abs(f), f)
Tests.test("StrictMath.abs", -f, Math.abs(f), f)
Tests.test("StrictMath.abs", f, Math.abs(f), f)

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

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

Reply via email to