# HG changeset patch # User bpb # Date 1521126661 25200 # Node ID 3c0a129721657f05953797bf518e27e2503d5338 # Parent 7443b946694ab110772b256aa1f48345f5ab03cd 8189230: JDK method:java.lang.Integer.numberOfLeadingZeros(int) can be optimized Summary: Directly return zero for a negative parameter instead of calculating Reviewed-by: psandoz diff -r 7443b946694a -r 3c0a12972165 src/java.base/share/classes/java/lang/Integer.java --- a/src/java.base/share/classes/java/lang/Integer.java Thu Mar 15 12:07:59 2018 +0100 +++ b/src/java.base/share/classes/java/lang/Integer.java Thu Mar 15 08:11:01 2018 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1625,8 +1625,8 @@ @HotSpotIntrinsicCandidate public static int numberOfLeadingZeros(int i) { // HD, Figure 5-6 - if (i == 0) - return 32; + if (i <= 0) + return i == 0 ? 32 : 0; int n = 1; if (i >>> 16 == 0) { n += 16; i <<= 16; } if (i >>> 24 == 0) { n += 8; i <<= 8; } diff -r 7443b946694a -r 3c0a12972165 src/java.base/share/classes/java/lang/Long.java --- a/src/java.base/share/classes/java/lang/Long.java Thu Mar 15 12:07:59 2018 +0100 +++ b/src/java.base/share/classes/java/lang/Long.java Thu Mar 15 08:11:01 2018 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1771,8 +1771,8 @@ @HotSpotIntrinsicCandidate public static int numberOfLeadingZeros(long i) { // HD, Figure 5-6 - if (i == 0) - return 64; + if (i <= 0) + return i == 0 ? 64 : 0; int n = 1; int x = (int)(i >>> 32); if (x == 0) { n += 32; x = (int)i; }