--- old/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template 2018-10-12 20:19:03.000000000 -0700 +++ new/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template 2018-10-12 20:19:03.000000000 -0700 @@ -186,10 +186,17 @@ @ForceInline static boolean compareAndSet(ArrayHandle handle, Object oba, int index, $type$ expected, $type$ value) { byte[] ba = (byte[]) oba; +#if[Object] + return UNSAFE.compareAndSetReference( + ba, + address(ba, index(ba, index)), + convEndian(handle.be, expected), convEndian(handle.be, value)); +#else[Object] return UNSAFE.compareAndSet$RawType$( ba, address(ba, index(ba, index)), convEndian(handle.be, expected), convEndian(handle.be, value)); +#end[Object] } @ForceInline @@ -261,11 +268,19 @@ @ForceInline static $type$ getAndSet(ArrayHandle handle, Object oba, int index, $type$ value) { byte[] ba = (byte[]) oba; +#if[Object] + return convEndian(handle.be, + UNSAFE.getAndSetReference( + ba, + address(ba, index(ba, index)), + convEndian(handle.be, value))); +#else[Object] return convEndian(handle.be, UNSAFE.getAndSet$RawType$( ba, address(ba, index(ba, index)), convEndian(handle.be, value))); +#end[Object] } @ForceInline @@ -537,13 +552,13 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); #if[floatingPoint] $rawType$ rawValue = UNSAFE.get$RawType$Unaligned( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), ((long) index(bb, index)) + UNSAFE.getLong(bb, BUFFER_ADDRESS), handle.be); return $Type$.$rawType$BitsTo$Type$(rawValue); #else[floatingPoint] return UNSAFE.get$Type$Unaligned( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), ((long) index(bb, index)) + UNSAFE.getLong(bb, BUFFER_ADDRESS), handle.be); #end[floatingPoint] @@ -554,13 +569,13 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); #if[floatingPoint] UNSAFE.put$RawType$Unaligned( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), ((long) indexRO(bb, index)) + UNSAFE.getLong(bb, BUFFER_ADDRESS), $Type$.$type$ToRaw$RawType$Bits(value), handle.be); #else[floatingPoint] UNSAFE.put$Type$Unaligned( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), ((long) indexRO(bb, index)) + UNSAFE.getLong(bb, BUFFER_ADDRESS), value, handle.be); @@ -572,7 +587,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.get$RawType$Volatile( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, index(bb, index)))); } @@ -580,7 +595,7 @@ static void setVolatile(ByteBufferHandle handle, Object obb, int index, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); UNSAFE.put$RawType$Volatile( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, value)); } @@ -590,7 +605,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.get$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, index(bb, index)))); } @@ -598,7 +613,7 @@ static void setRelease(ByteBufferHandle handle, Object obb, int index, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); UNSAFE.put$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, value)); } @@ -608,7 +623,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.get$RawType$Opaque( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, index(bb, index)))); } @@ -616,7 +631,7 @@ static void setOpaque(ByteBufferHandle handle, Object obb, int index, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); UNSAFE.put$RawType$Opaque( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, value)); } @@ -625,10 +640,17 @@ @ForceInline static boolean compareAndSet(ByteBufferHandle handle, Object obb, int index, $type$ expected, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); +#if[Object] + return UNSAFE.compareAndSetReference( + UNSAFE.getReference(bb, BYTE_BUFFER_HB), + address(bb, indexRO(bb, index)), + convEndian(handle.be, expected), convEndian(handle.be, value)); +#else[Object] return UNSAFE.compareAndSet$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value)); +#end[Object] } @ForceInline @@ -636,7 +658,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.compareAndExchange$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value))); } @@ -646,7 +668,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.compareAndExchange$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value))); } @@ -656,7 +678,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.compareAndExchange$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value))); } @@ -665,7 +687,7 @@ static boolean weakCompareAndSetPlain(ByteBufferHandle handle, Object obb, int index, $type$ expected, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return UNSAFE.weakCompareAndSet$RawType$Plain( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value)); } @@ -674,7 +696,7 @@ static boolean weakCompareAndSet(ByteBufferHandle handle, Object obb, int index, $type$ expected, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return UNSAFE.weakCompareAndSet$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value)); } @@ -683,7 +705,7 @@ static boolean weakCompareAndSetAcquire(ByteBufferHandle handle, Object obb, int index, $type$ expected, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return UNSAFE.weakCompareAndSet$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value)); } @@ -692,7 +714,7 @@ static boolean weakCompareAndSetRelease(ByteBufferHandle handle, Object obb, int index, $type$ expected, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return UNSAFE.weakCompareAndSet$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, expected), convEndian(handle.be, value)); } @@ -700,11 +722,19 @@ @ForceInline static $type$ getAndSet(ByteBufferHandle handle, Object obb, int index, $type$ value) { ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); +#if[Object] + return convEndian(handle.be, + UNSAFE.getAndSetReference( + UNSAFE.getReference(bb, BYTE_BUFFER_HB), + address(bb, indexRO(bb, index)), + convEndian(handle.be, value))); +#else[Object] return convEndian(handle.be, UNSAFE.getAndSet$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, value))); +#end[Object] } @ForceInline @@ -712,7 +742,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.getAndSet$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, value))); } @@ -722,7 +752,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); return convEndian(handle.be, UNSAFE.getAndSet$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), convEndian(handle.be, value))); } @@ -734,7 +764,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndAdd$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), delta); } else { @@ -747,7 +777,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndAdd$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), delta); } else { @@ -760,7 +790,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndAdd$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), delta); } else { @@ -771,7 +801,7 @@ @ForceInline static $type$ getAndAddConvEndianWithCAS(ByteBuffer bb, int index, $type$ delta) { $type$ nativeExpectedValue, expectedValue; - Object base = UNSAFE.getObject(bb, BYTE_BUFFER_HB); + Object base = UNSAFE.getReference(bb, BYTE_BUFFER_HB); long offset = address(bb, indexRO(bb, index)); do { nativeExpectedValue = UNSAFE.get$RawType$Volatile(base, offset); @@ -788,7 +818,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseOr$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -801,7 +831,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseOr$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -814,7 +844,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseOr$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -825,7 +855,7 @@ @ForceInline static $type$ getAndBitwiseOrConvEndianWithCAS(ByteBuffer bb, int index, $type$ value) { $type$ nativeExpectedValue, expectedValue; - Object base = UNSAFE.getObject(bb, BYTE_BUFFER_HB); + Object base = UNSAFE.getReference(bb, BYTE_BUFFER_HB); long offset = address(bb, indexRO(bb, index)); do { nativeExpectedValue = UNSAFE.get$RawType$Volatile(base, offset); @@ -840,7 +870,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseAnd$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -853,7 +883,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseAnd$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -866,7 +896,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseAnd$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -877,7 +907,7 @@ @ForceInline static $type$ getAndBitwiseAndConvEndianWithCAS(ByteBuffer bb, int index, $type$ value) { $type$ nativeExpectedValue, expectedValue; - Object base = UNSAFE.getObject(bb, BYTE_BUFFER_HB); + Object base = UNSAFE.getReference(bb, BYTE_BUFFER_HB); long offset = address(bb, indexRO(bb, index)); do { nativeExpectedValue = UNSAFE.get$RawType$Volatile(base, offset); @@ -893,7 +923,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseXor$RawType$( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -906,7 +936,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseXor$RawType$Release( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -919,7 +949,7 @@ ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb); if (handle.be == BE) { return UNSAFE.getAndBitwiseXor$RawType$Acquire( - UNSAFE.getObject(bb, BYTE_BUFFER_HB), + UNSAFE.getReference(bb, BYTE_BUFFER_HB), address(bb, indexRO(bb, index)), value); } else { @@ -930,7 +960,7 @@ @ForceInline static $type$ getAndBitwiseXorConvEndianWithCAS(ByteBuffer bb, int index, $type$ value) { $type$ nativeExpectedValue, expectedValue; - Object base = UNSAFE.getObject(bb, BYTE_BUFFER_HB); + Object base = UNSAFE.getReference(bb, BYTE_BUFFER_HB); long offset = address(bb, indexRO(bb, index)); do { nativeExpectedValue = UNSAFE.get$RawType$Volatile(base, offset);