On Thu, Aug 9, 2018 at 4:15 PM, Ivan Gerasimov <ivan.gerasi...@oracle.com> wrote:
> Hello! > > Integer.numberOfTrailingZeros() and Long.numberOfTrailingZeros() are > intrinsified by Hotspot, so the Java implementation of these is not too > important. > However, they still can be improved by a tiny bit :) > > Could you please help review the fix? > > Bug: https://bugs.openjdk.java.net/browse/JDK-8209171 > Webrev: http://cr.openjdk.java.net/~igerasim/8209171/00/webrev/ > Benchmark for Integer: http://cr.openjdk.java.net/~ig > erasim/8209171/00/bench/int/MyBenchmark.java > Benchmark for Long: http://cr.openjdk.java.net/~ig > erasim/8209171/00/bench/long/MyBenchmark.java > > The resulting code is both smaller and faster. It may also help to warm > up Integer.numberOfLeadingZeros() quicker. > > On average, the new Integer.numberOfTrailingZeros() has got +11% to > performance for -client and +1% for -server. > Long.numberOfTrailingZeros() is faster on 17% for -client and +20% for > -server. It seems to me the benchmark is not entirely fair to the old java implementation, since the new one gets the benefit of the intrinsification of numberOfLeadingZeros. A fairer comparison would use turn off intrinsification of both. I guess benchmarking on 32-bit platforms is no longer relevant, given that they are all legacy now.