On Wed, 11 Sep 2024 13:15:57 GMT, Per Minborg <[email protected]> wrote:
>> src/java.base/share/classes/jdk/internal/foreign/SegmentBulkOperations.java
>> line 244:
>>
>>> 242: return (Architecture.isLittleEndian()
>>> 243: ? Long.numberOfTrailingZeros(x)
>>> 244: : Long.numberOfLeadingZeros(x)) / 8;
>>
>> Would there be value in having a constant LongToIntFunction lambda to
>> capture this logic?
>>
>>
>> private static final LongToIntFunction LONG_LEADING_ZEROS =
>> Architecture.isLittleEndian() ? Long::numberOfTrailingZeros :
>> Long::numberOfLeadingZeros;
>
> Performance-wise, I suspect there would not be that much of a difference. The
> compiler will see that Architecture.isLittleEndian provides a stable value
> and can optimize and eliminate code (I think). I am unsure which is easier to
> read.
part of the value would be if it allowed just removing this method entirely and
moving the logic above:
if (s != d) {
return start + offset + mismatch(s, d);
}
would become:
if (s != d) {
return start + offset + (LONG_LEADING_ZEROS.apply(s^d) / 8);
}
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20848#discussion_r1758828018