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