On Sun, 27 Jul 2025 04:37:32 GMT, Shaojin Wen <s...@openjdk.org> 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

Reply via email to