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
--- 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; }
--- 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; }