RFR 8203279 : Faster calculation of power of two
Claes Redestad
claes.redestad at oracle.com
Fri May 18 10:40:56 UTC 2018
On 2018-05-17 22:44, Ivan Gerasimov wrote:
> The following variant showed slightly better performance on my machine:
>
> static final int numberOfLeadingZeros(int i) {
> if (i <= 0)
> return i == 0 ? 32 : 0;
> int n = 31;
> if (i >= 1 << 16) { n -= 16; i >>>= 16; }
> if (i >= 1 << 8) { n -= 8; i >>>= 8; }
> if (i >= 1 << 4) { n -= 4; i >>>= 4; }
> if (i >= 1 << 2) { n -= 2; i >>>= 2; }
> return n - (i >>> 1);
> }
Nice, this version also wins on all of -Xint and
-XX:TieredStopAtLevel=1-3 (my version lost out slightly versus
the baseline on -Xint), so is potentially a startup enhancement even on
platforms with C2 intrinsics.
>
> I agree that improving Java implementation of numberOfLeadingZeros()
> can be done as a separate RFE.
I filed https://bugs.openjdk.java.net/browse/JDK-8203352 for this.
/Claes
More information about the core-libs-dev
mailing list