After some experimentation, I couldn't find anything faster than the
variant with the check (value >= 0), so let's go ahead with it.
Here's the updated webrev:
http://cr.openjdk.java.net/~igerasim/8196740/01/webrev/
With kind regards,
Ivan
On 2/2/18 5:47 PM, Claes Redestad wrote:
Hi Ivan,
On 2018-02-03 02:14, Ivan Gerasimov wrote:
Would you please help review the fix?
BUGURL: https://bugs.openjdk.java.net/browse/JDK-8196740
WEBREV: http://cr.openjdk.java.net/~igerasim/8196740/00/webrev/
yes, an obvious error in hindsight!
I suspect that this version may even work a tiny bit faster, as we
perform less comparisons in a common case.
Counter-intuitively it actually seems the compiler generates faster
code in the end when keeping the
value >= 0 test around.
Your version:
Benchmark Mode Cnt Score Error Units
UUIDBenchmark.benchmarkUUIDFromString avgt 4 0.326 ± 0.017 us/op
UUIDBenchmark.benchmarkUUIDFromString:branches avgt 289.750
#/op
UUIDBenchmark.benchmarkUUIDFromString:cycles avgt 1044.087 #/op
With:
int value = DIGITS[ch];
return (value >= 0 && value < radix && radix >=
Character.MIN_RADIX
&& radix <= Character.MAX_RADIX) ? value : -1;
Benchmark Mode Cnt Score Error Units
UUIDBenchmark.benchmarkUUIDFromString avgt 4 0.310 ± 0.018 us/op
UUIDBenchmark.benchmarkUUIDFromString:branches avgt 256.489
#/op
UUIDBenchmark.benchmarkUUIDFromString:cycles avgt 988.998 #/op
/Claes
--
With kind regards,
Ivan Gerasimov