On Sun, 27 Jul 2025 04:37:32 GMT, Shaojin Wen <[email protected]> wrote:
>> src/java.base/share/classes/java/lang/StringUTF16.java line 1489:
>>
>>> 1487: Unsafe.ARRAY_CHAR_BASE_OFFSET + ((long) off << 1),
>>> 1488: val,
>>> 1489: Unsafe.ARRAY_BYTE_BASE_OFFSET + ((long) index << 1),
>>
>> Suggestion:
>>
>> Unsafe.ARRAY_BYTE_BASE_OFFSET + ((long) index << 1) *
>> Unsafe.ARRAY_BYTE_INDEX_SCALE,
>
> If we want to use ARRAY_CHAR_INDEX_SCALE, it should be used as follows
>
> Unsafe.getUnsafe().copyMemory(
> ca,
> Unsafe.ARRAY_CHAR_BASE_OFFSET + (long) off *
> Unsafe.ARRAY_CHAR_INDEX_SCALE,
> val,
> Unsafe.ARRAY_CHAR_BASE_OFFSET + (long) off *
> Unsafe.ARRAY_CHAR_INDEX_SCALE,
> (long) (end - off) << 1);
I prefer to calculate an ARRAY_CHAR_SHIFT in the constant like ShortVector
does, like this
static final int ARRAY_CHAR_SHIFT
= 31 -
Integer.numberOfLeadingZeros(Unsafe.ARRAY_CHAR_INDEX_SCALE);
Unsafe.getUnsafe().copyMemory(
ca,
Unsafe.ARRAY_CHAR_BASE_OFFSET + (long) off << ARRAY_CHAR_SHIFT,
val,
Unsafe.ARRAY_CHAR_BASE_OFFSET + (long) off << ARRAY_CHAR_SHIFT,
(long) (end - off) << 1);
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24773#discussion_r2234230546