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