On 02/21/2014 10:06 AM, Paul Sandoz wrote:
I think we should try and use zero, as John says (alas @Stable is package
private to j.l.invoke), and replace 0 with another value such as MIN_VALUE if
one is unsure of the bounds:
int lsb;
if ((lsb = lowestSetBit) == 0) {
...
lowestSetBit = lsb != 0 ? lsb : Integer.MIN_VALUE;
}
return lsb != Integer.MIN_VALUE : lsb ? 0;
Hm, would the following be any better or worse?
int lsb = lowestSetBit;
if (lsb <= 0) {
if (lsb == Integer.MIN_VALUE) {
lsb = 0;
} else {
...
lowestSetBit = lsb != 0 ? lsb : Integer.MIN_VALUE;
}
}
return lsb;
I wonder if any of the above is better than current code that offsets
the value space. Current code only contains a single
compare+conditional-branch on fast-path while both of above variants
contain more than one. Does eliminating a single add instruction on
fast-path pay up for that? What do measurements show?
Regards, Peter