On Mon, 11 Sep 2023 12:50:43 GMT, Martin Doerr <mdo...@openjdk.org> wrote:
> Your earlier version didn't work. The one which I have successfully tested is > after 2nd commit. I think this looks OK. This patch probably reverts performance numbers on little-endian on some measures to pre-JDK-8310929 levels. A follow-up could examine if we can recuperate, e.g. differentiate the logic on big-endian, e.g. something like: charPos -= 2; if (BIG_ENDIAN) { putPair(..); } else { int packed = (int) StringLatin1.PACKED_DIGITS[-i]; int inflated = ((packed & 0xFF00) << 8) | (packed & 0xFF); ByteArrayLittleEndian.setInt(buf, charPos << 1, inflated); } It might also work generally if we made `int inflated = ((packed & 0xFF) << (16 + HI_BYTE_SHIFT)) | ((packed & 0xFF00) << HI_BYTE_SHIFT)`, but I have no way to test that and the performance of `ByteArrayLittleEndian` might be poor on AIX. ------------- PR Comment: https://git.openjdk.org/jdk/pull/15652#issuecomment-1713907279