8203352: Improve java implementation of Integer/Long.numberOfLeadingZeros

Co-authored-by: Ivan Gerasimov <ivan.gerasimov@oracle.com>
Reviewed-by: martin, igerasim
This commit is contained in:
Claes Redestad 2018-05-22 14:44:18 +02:00
parent bff7296db3
commit 55ba3cad8b
4 changed files with 35 additions and 31 deletions

View file

@ -1761,18 +1761,9 @@ public final class Long extends Number implements Comparable<Long> {
*/
@HotSpotIntrinsicCandidate
public static int numberOfLeadingZeros(long i) {
// HD, Figure 5-6
if (i <= 0)
return i == 0 ? 64 : 0;
int n = 1;
int x = (int)(i >>> 32);
if (x == 0) { n += 32; x = (int)i; }
if (x >>> 16 == 0) { n += 16; x <<= 16; }
if (x >>> 24 == 0) { n += 8; x <<= 8; }
if (x >>> 28 == 0) { n += 4; x <<= 4; }
if (x >>> 30 == 0) { n += 2; x <<= 2; }
n -= x >>> 31;
return n;
return x == 0 ? 32 + Integer.numberOfLeadingZeros((int)i)
: Integer.numberOfLeadingZeros(x);
}
/**