On Mon, 28 Jul 2025 01:06:46 GMT, Shaojin Wen <s...@openjdk.org> wrote:

>> 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);

String uses `<< coder` in many places. I think the following way of writing is 
also good:

        Unsafe.getUnsafe().copyMemory(
                ca,
                Unsafe.ARRAY_CHAR_BASE_OFFSET + (long) off << String.UTF16,
                val,
                Unsafe.ARRAY_CHAR_BASE_OFFSET + (long) off << String.UTF16,
                (long) (end - off) << 1);

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24773#discussion_r2234242815

Reply via email to