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

Reply via email to