On 10/17/2014 08:58 PM, Staffan Friberg wrote:
Here is a new webrev with the updates from Alan's and Peter's suggestions. http://cr.openjdk.java.net/~sfriberg/JDK-6321472/webrev.01

Hi Staffan,

A few more comments...

 217                 if (Unsafe.ADDRESS_SIZE == 4) {
 218                     // On 32 bit platforms read two ints instead of a 
single 64bit long


When you're reading from byte[] using Unsafe (updateBytes), you have the option of reading 64bit values on 64bit platforms. When you're reading from DirectByteBuffer memory (updateDirectByteBuffer), you're only using 32bit reads.

Also, in updateBytes, the usage of Unsafe.ARRAY_INT_INDEX_SCALE/ARRAY_LONG_INDEX_SCALE to index a byte array sounds a little scary. To be ultra portable you could check that ARRAY_BYTE_INDEX_SCALE == 1 first and refuse to use Unsafe for byte arrays if it is not 1. Then use Integer.BYTES/Long.BYTES to manipulate 'offsets' instead. In updateDirectByteBuffer it would be more appropriate to use Integer.BYTES/Long.BYTES too.

 225                         firstHalf = (int) (value & 0xFFFFFFFF);
 226                         secondHalf = (int) (value >>> 32);
 227                     } else { // ByteOrder.BIG_ENDIAN
 228                         firstHalf = (int) (value >>> 32);
 229                         secondHalf = (int) (value & 0xFFFFFFFF);


firstHalf = (int) value; // this is equivalent for line 225
secondHalf = (int) value; // this is equivalent for line 229


Regards, Peter

Reply via email to