# HG changeset patch # User igerasim # Date 1521530116 25200 # Tue Mar 20 00:15:16 2018 -0700 # Node ID e670e060ce2360ede622df78bcac16c53fb7a6f3 # Parent 778e4516409c902dcad1af49adf05b5a339af86a [mq]: 8199843-Optimize-Integer-Long-highestOneBit diff --git a/src/java.base/share/classes/java/lang/Integer.java b/src/java.base/share/classes/java/lang/Integer.java --- a/src/java.base/share/classes/java/lang/Integer.java +++ b/src/java.base/share/classes/java/lang/Integer.java @@ -1574,13 +1574,7 @@ * @since 1.5 */ public static int highestOneBit(int i) { - // HD, Figure 3-1 - i |= (i >> 1); - i |= (i >> 2); - i |= (i >> 4); - i |= (i >> 8); - i |= (i >> 16); - return i - (i >>> 1); + return i == 0 ? 0 : MIN_VALUE >>> numberOfLeadingZeros(i); } /** diff --git a/src/java.base/share/classes/java/lang/Long.java b/src/java.base/share/classes/java/lang/Long.java --- a/src/java.base/share/classes/java/lang/Long.java +++ b/src/java.base/share/classes/java/lang/Long.java @@ -1719,14 +1719,7 @@ * @since 1.5 */ public static long highestOneBit(long i) { - // HD, Figure 3-1 - i |= (i >> 1); - i |= (i >> 2); - i |= (i >> 4); - i |= (i >> 8); - i |= (i >> 16); - i |= (i >> 32); - return i - (i >>> 1); + return i == 0 ? 0 : MIN_VALUE >>> numberOfLeadingZeros(i); } /**