Optimizing byte reverse code for int value

Andrew Haley aph at redhat.com
Fri Apr 7 17:58:45 UTC 2017


On 07/04/17 18:51, Hiroshi H Horii wrote:
>> I suggest replacing the use of loadI by endianness specific code
>> (which could possibly use lwbrx on big endian).
> 
> I believe that lwbrx is necessary for BE.
> 
>> Surely the source code needs fixing.  It could be:
>>
>> public float readFloat(InputStream in) throws IOException {
>>   readFully(in, aByteBuffer, 0, 4);
>>   int val = aByteBuffer.getInt(0);
>>
>>   return Float.intBitsToFloat(val);
>> }
> 
> In my understanding, ByteBuffer.getInt() does the similar thing.

It doesn't.

> I guess that application does not use ByteBuffer only for calling getInt().
> 
> Heap-X-Buffer.java.template
>     public int getInt() {
>         return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
>     }

This is old code.  In JDK9 it looks like

    public int getInt() {
        return unsafe.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
    }

Unsafe.getIntUnaligned is a HotSpot intrinsic.

Bits.java is not used for this.

Andrew.



More information about the hotspot-dev mailing list