mirror of
https://github.com/darlinghq/darling-openjdk.git
synced 2024-11-30 07:40:37 +00:00
8207146: Rename jdk.internal.misc.Unsafe::xxxObject to xxxReference
Reviewed-by: dholmes, thartmann
This commit is contained in:
parent
fd8d1cd6bf
commit
5e6d6b8642
@ -53,8 +53,8 @@ define GenerateVarHandle
|
||||
endif
|
||||
|
||||
$$($1_FILENAME): $(VARHANDLES_SRC_DIR)/X-VarHandle.java.template $(BUILD_TOOLS_JDK)
|
||||
ifeq ($$($1_Type), Object)
|
||||
$$(eval $1_type := $$($1_Type))
|
||||
ifeq ($$($1_Type), Reference)
|
||||
$$(eval $1_type := Object)
|
||||
else
|
||||
$$(eval $1_type := $$$$(shell $(TR) '[:upper:]' '[:lower:]' <<< $$$$($1_Type)))
|
||||
endif
|
||||
@ -158,7 +158,7 @@ endef
|
||||
################################################################################
|
||||
|
||||
# List the types to generate source for, with capitalized first letter
|
||||
VARHANDLES_TYPES := Boolean Byte Short Char Int Long Float Double Object
|
||||
VARHANDLES_TYPES := Boolean Byte Short Char Int Long Float Double Reference
|
||||
$(foreach t, $(VARHANDLES_TYPES), \
|
||||
$(eval $(call GenerateVarHandle,VAR_HANDLE_$t,$t)))
|
||||
|
||||
|
@ -126,7 +126,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) {
|
||||
case vmIntrinsics::_getAndSetLong:
|
||||
if (!VM_Version::supports_atomic_getset8()) return false;
|
||||
break;
|
||||
case vmIntrinsics::_getAndSetObject:
|
||||
case vmIntrinsics::_getAndSetReference:
|
||||
#ifdef _LP64
|
||||
if (!UseCompressedOops && !VM_Version::supports_atomic_getset8()) return false;
|
||||
if (UseCompressedOops && !VM_Version::supports_atomic_getset4()) return false;
|
||||
@ -167,7 +167,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) {
|
||||
case vmIntrinsics::_dpow:
|
||||
case vmIntrinsics::_fmaD:
|
||||
case vmIntrinsics::_fmaF:
|
||||
case vmIntrinsics::_getObject:
|
||||
case vmIntrinsics::_getReference:
|
||||
case vmIntrinsics::_getBoolean:
|
||||
case vmIntrinsics::_getByte:
|
||||
case vmIntrinsics::_getShort:
|
||||
@ -176,7 +176,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) {
|
||||
case vmIntrinsics::_getLong:
|
||||
case vmIntrinsics::_getFloat:
|
||||
case vmIntrinsics::_getDouble:
|
||||
case vmIntrinsics::_putObject:
|
||||
case vmIntrinsics::_putReference:
|
||||
case vmIntrinsics::_putBoolean:
|
||||
case vmIntrinsics::_putByte:
|
||||
case vmIntrinsics::_putShort:
|
||||
@ -185,7 +185,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) {
|
||||
case vmIntrinsics::_putLong:
|
||||
case vmIntrinsics::_putFloat:
|
||||
case vmIntrinsics::_putDouble:
|
||||
case vmIntrinsics::_getObjectVolatile:
|
||||
case vmIntrinsics::_getReferenceVolatile:
|
||||
case vmIntrinsics::_getBooleanVolatile:
|
||||
case vmIntrinsics::_getByteVolatile:
|
||||
case vmIntrinsics::_getShortVolatile:
|
||||
@ -194,7 +194,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) {
|
||||
case vmIntrinsics::_getLongVolatile:
|
||||
case vmIntrinsics::_getFloatVolatile:
|
||||
case vmIntrinsics::_getDoubleVolatile:
|
||||
case vmIntrinsics::_putObjectVolatile:
|
||||
case vmIntrinsics::_putReferenceVolatile:
|
||||
case vmIntrinsics::_putBooleanVolatile:
|
||||
case vmIntrinsics::_putByteVolatile:
|
||||
case vmIntrinsics::_putShortVolatile:
|
||||
@ -221,7 +221,7 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) {
|
||||
#endif
|
||||
case vmIntrinsics::_vectorizedMismatch:
|
||||
case vmIntrinsics::_compareAndSetInt:
|
||||
case vmIntrinsics::_compareAndSetObject:
|
||||
case vmIntrinsics::_compareAndSetReference:
|
||||
case vmIntrinsics::_getCharStringU:
|
||||
case vmIntrinsics::_putCharStringU:
|
||||
#ifdef JFR_HAVE_INTRINSICS
|
||||
|
@ -3471,7 +3471,7 @@ void GraphBuilder::build_graph_for_intrinsic(ciMethod* callee, bool ignore_retur
|
||||
|
||||
// Some intrinsics need special IR nodes.
|
||||
switch(id) {
|
||||
case vmIntrinsics::_getObject : append_unsafe_get_obj(callee, T_OBJECT, false); return;
|
||||
case vmIntrinsics::_getReference : append_unsafe_get_obj(callee, T_OBJECT, false); return;
|
||||
case vmIntrinsics::_getBoolean : append_unsafe_get_obj(callee, T_BOOLEAN, false); return;
|
||||
case vmIntrinsics::_getByte : append_unsafe_get_obj(callee, T_BYTE, false); return;
|
||||
case vmIntrinsics::_getShort : append_unsafe_get_obj(callee, T_SHORT, false); return;
|
||||
@ -3480,7 +3480,7 @@ void GraphBuilder::build_graph_for_intrinsic(ciMethod* callee, bool ignore_retur
|
||||
case vmIntrinsics::_getLong : append_unsafe_get_obj(callee, T_LONG, false); return;
|
||||
case vmIntrinsics::_getFloat : append_unsafe_get_obj(callee, T_FLOAT, false); return;
|
||||
case vmIntrinsics::_getDouble : append_unsafe_get_obj(callee, T_DOUBLE, false); return;
|
||||
case vmIntrinsics::_putObject : append_unsafe_put_obj(callee, T_OBJECT, false); return;
|
||||
case vmIntrinsics::_putReference : append_unsafe_put_obj(callee, T_OBJECT, false); return;
|
||||
case vmIntrinsics::_putBoolean : append_unsafe_put_obj(callee, T_BOOLEAN, false); return;
|
||||
case vmIntrinsics::_putByte : append_unsafe_put_obj(callee, T_BYTE, false); return;
|
||||
case vmIntrinsics::_putShort : append_unsafe_put_obj(callee, T_SHORT, false); return;
|
||||
@ -3497,7 +3497,7 @@ void GraphBuilder::build_graph_for_intrinsic(ciMethod* callee, bool ignore_retur
|
||||
case vmIntrinsics::_putCharUnaligned : append_unsafe_put_obj(callee, T_CHAR, false); return;
|
||||
case vmIntrinsics::_putIntUnaligned : append_unsafe_put_obj(callee, T_INT, false); return;
|
||||
case vmIntrinsics::_putLongUnaligned : append_unsafe_put_obj(callee, T_LONG, false); return;
|
||||
case vmIntrinsics::_getObjectVolatile : append_unsafe_get_obj(callee, T_OBJECT, true); return;
|
||||
case vmIntrinsics::_getReferenceVolatile : append_unsafe_get_obj(callee, T_OBJECT, true); return;
|
||||
case vmIntrinsics::_getBooleanVolatile : append_unsafe_get_obj(callee, T_BOOLEAN, true); return;
|
||||
case vmIntrinsics::_getByteVolatile : append_unsafe_get_obj(callee, T_BYTE, true); return;
|
||||
case vmIntrinsics::_getShortVolatile : append_unsafe_get_obj(callee, T_SHORT, true); return;
|
||||
@ -3506,7 +3506,7 @@ void GraphBuilder::build_graph_for_intrinsic(ciMethod* callee, bool ignore_retur
|
||||
case vmIntrinsics::_getLongVolatile : append_unsafe_get_obj(callee, T_LONG, true); return;
|
||||
case vmIntrinsics::_getFloatVolatile : append_unsafe_get_obj(callee, T_FLOAT, true); return;
|
||||
case vmIntrinsics::_getDoubleVolatile : append_unsafe_get_obj(callee, T_DOUBLE, true); return;
|
||||
case vmIntrinsics::_putObjectVolatile : append_unsafe_put_obj(callee, T_OBJECT, true); return;
|
||||
case vmIntrinsics::_putReferenceVolatile : append_unsafe_put_obj(callee, T_OBJECT, true); return;
|
||||
case vmIntrinsics::_putBooleanVolatile : append_unsafe_put_obj(callee, T_BOOLEAN, true); return;
|
||||
case vmIntrinsics::_putByteVolatile : append_unsafe_put_obj(callee, T_BYTE, true); return;
|
||||
case vmIntrinsics::_putShortVolatile : append_unsafe_put_obj(callee, T_SHORT, true); return;
|
||||
@ -3517,12 +3517,12 @@ void GraphBuilder::build_graph_for_intrinsic(ciMethod* callee, bool ignore_retur
|
||||
case vmIntrinsics::_putDoubleVolatile : append_unsafe_put_obj(callee, T_DOUBLE, true); return;
|
||||
case vmIntrinsics::_compareAndSetLong:
|
||||
case vmIntrinsics::_compareAndSetInt:
|
||||
case vmIntrinsics::_compareAndSetObject: append_unsafe_CAS(callee); return;
|
||||
case vmIntrinsics::_compareAndSetReference : append_unsafe_CAS(callee); return;
|
||||
case vmIntrinsics::_getAndAddInt:
|
||||
case vmIntrinsics::_getAndAddLong : append_unsafe_get_and_set_obj(callee, true); return;
|
||||
case vmIntrinsics::_getAndSetInt :
|
||||
case vmIntrinsics::_getAndSetLong :
|
||||
case vmIntrinsics::_getAndSetObject : append_unsafe_get_and_set_obj(callee, false); return;
|
||||
case vmIntrinsics::_getAndSetReference : append_unsafe_get_and_set_obj(callee, false); return;
|
||||
case vmIntrinsics::_getCharStringU : append_char_access(callee, false); return;
|
||||
case vmIntrinsics::_putCharStringU : append_char_access(callee, true); return;
|
||||
default:
|
||||
|
@ -3057,7 +3057,7 @@ void LIRGenerator::do_Intrinsic(Intrinsic* x) {
|
||||
// java.nio.Buffer.checkIndex
|
||||
case vmIntrinsics::_checkIndex: do_NIOCheckIndex(x); break;
|
||||
|
||||
case vmIntrinsics::_compareAndSetObject:
|
||||
case vmIntrinsics::_compareAndSetReference:
|
||||
do_CompareAndSwap(x, objectType);
|
||||
break;
|
||||
case vmIntrinsics::_compareAndSetInt:
|
||||
|
@ -527,7 +527,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_getAndAddLong:
|
||||
case vmIntrinsics::_getAndSetInt:
|
||||
case vmIntrinsics::_getAndSetLong:
|
||||
case vmIntrinsics::_getAndSetObject:
|
||||
case vmIntrinsics::_getAndSetReference:
|
||||
case vmIntrinsics::_loadFence:
|
||||
case vmIntrinsics::_storeFence:
|
||||
case vmIntrinsics::_fullFence:
|
||||
@ -589,7 +589,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_updateByteBufferCRC32:
|
||||
if (!UseCRC32Intrinsics) return true;
|
||||
break;
|
||||
case vmIntrinsics::_getObject:
|
||||
case vmIntrinsics::_getReference:
|
||||
case vmIntrinsics::_getBoolean:
|
||||
case vmIntrinsics::_getByte:
|
||||
case vmIntrinsics::_getShort:
|
||||
@ -598,7 +598,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_getLong:
|
||||
case vmIntrinsics::_getFloat:
|
||||
case vmIntrinsics::_getDouble:
|
||||
case vmIntrinsics::_putObject:
|
||||
case vmIntrinsics::_putReference:
|
||||
case vmIntrinsics::_putBoolean:
|
||||
case vmIntrinsics::_putByte:
|
||||
case vmIntrinsics::_putShort:
|
||||
@ -607,7 +607,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_putLong:
|
||||
case vmIntrinsics::_putFloat:
|
||||
case vmIntrinsics::_putDouble:
|
||||
case vmIntrinsics::_getObjectVolatile:
|
||||
case vmIntrinsics::_getReferenceVolatile:
|
||||
case vmIntrinsics::_getBooleanVolatile:
|
||||
case vmIntrinsics::_getByteVolatile:
|
||||
case vmIntrinsics::_getShortVolatile:
|
||||
@ -616,7 +616,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_getLongVolatile:
|
||||
case vmIntrinsics::_getFloatVolatile:
|
||||
case vmIntrinsics::_getDoubleVolatile:
|
||||
case vmIntrinsics::_putObjectVolatile:
|
||||
case vmIntrinsics::_putReferenceVolatile:
|
||||
case vmIntrinsics::_putBooleanVolatile:
|
||||
case vmIntrinsics::_putByteVolatile:
|
||||
case vmIntrinsics::_putShortVolatile:
|
||||
@ -625,7 +625,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_putLongVolatile:
|
||||
case vmIntrinsics::_putFloatVolatile:
|
||||
case vmIntrinsics::_putDoubleVolatile:
|
||||
case vmIntrinsics::_getObjectAcquire:
|
||||
case vmIntrinsics::_getReferenceAcquire:
|
||||
case vmIntrinsics::_getBooleanAcquire:
|
||||
case vmIntrinsics::_getByteAcquire:
|
||||
case vmIntrinsics::_getShortAcquire:
|
||||
@ -634,7 +634,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_getLongAcquire:
|
||||
case vmIntrinsics::_getFloatAcquire:
|
||||
case vmIntrinsics::_getDoubleAcquire:
|
||||
case vmIntrinsics::_putObjectRelease:
|
||||
case vmIntrinsics::_putReferenceRelease:
|
||||
case vmIntrinsics::_putBooleanRelease:
|
||||
case vmIntrinsics::_putByteRelease:
|
||||
case vmIntrinsics::_putShortRelease:
|
||||
@ -643,7 +643,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_putLongRelease:
|
||||
case vmIntrinsics::_putFloatRelease:
|
||||
case vmIntrinsics::_putDoubleRelease:
|
||||
case vmIntrinsics::_getObjectOpaque:
|
||||
case vmIntrinsics::_getReferenceOpaque:
|
||||
case vmIntrinsics::_getBooleanOpaque:
|
||||
case vmIntrinsics::_getByteOpaque:
|
||||
case vmIntrinsics::_getShortOpaque:
|
||||
@ -652,7 +652,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_getLongOpaque:
|
||||
case vmIntrinsics::_getFloatOpaque:
|
||||
case vmIntrinsics::_getDoubleOpaque:
|
||||
case vmIntrinsics::_putObjectOpaque:
|
||||
case vmIntrinsics::_putReferenceOpaque:
|
||||
case vmIntrinsics::_putBooleanOpaque:
|
||||
case vmIntrinsics::_putByteOpaque:
|
||||
case vmIntrinsics::_putShortOpaque:
|
||||
@ -665,7 +665,7 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_getAndAddLong:
|
||||
case vmIntrinsics::_getAndSetInt:
|
||||
case vmIntrinsics::_getAndSetLong:
|
||||
case vmIntrinsics::_getAndSetObject:
|
||||
case vmIntrinsics::_getAndSetReference:
|
||||
case vmIntrinsics::_loadFence:
|
||||
case vmIntrinsics::_storeFence:
|
||||
case vmIntrinsics::_fullFence:
|
||||
@ -679,20 +679,20 @@ bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
case vmIntrinsics::_weakCompareAndSetIntPlain:
|
||||
case vmIntrinsics::_weakCompareAndSetIntAcquire:
|
||||
case vmIntrinsics::_weakCompareAndSetIntRelease:
|
||||
case vmIntrinsics::_compareAndSetObject:
|
||||
case vmIntrinsics::_weakCompareAndSetObject:
|
||||
case vmIntrinsics::_weakCompareAndSetObjectPlain:
|
||||
case vmIntrinsics::_weakCompareAndSetObjectAcquire:
|
||||
case vmIntrinsics::_weakCompareAndSetObjectRelease:
|
||||
case vmIntrinsics::_compareAndSetReference:
|
||||
case vmIntrinsics::_weakCompareAndSetReference:
|
||||
case vmIntrinsics::_weakCompareAndSetReferencePlain:
|
||||
case vmIntrinsics::_weakCompareAndSetReferenceAcquire:
|
||||
case vmIntrinsics::_weakCompareAndSetReferenceRelease:
|
||||
case vmIntrinsics::_compareAndExchangeInt:
|
||||
case vmIntrinsics::_compareAndExchangeIntAcquire:
|
||||
case vmIntrinsics::_compareAndExchangeIntRelease:
|
||||
case vmIntrinsics::_compareAndExchangeLong:
|
||||
case vmIntrinsics::_compareAndExchangeLongAcquire:
|
||||
case vmIntrinsics::_compareAndExchangeLongRelease:
|
||||
case vmIntrinsics::_compareAndExchangeObject:
|
||||
case vmIntrinsics::_compareAndExchangeObjectAcquire:
|
||||
case vmIntrinsics::_compareAndExchangeObjectRelease:
|
||||
case vmIntrinsics::_compareAndExchangeReference:
|
||||
case vmIntrinsics::_compareAndExchangeReferenceAcquire:
|
||||
case vmIntrinsics::_compareAndExchangeReferenceRelease:
|
||||
if (!InlineUnsafeOps) return true;
|
||||
break;
|
||||
case vmIntrinsics::_getShortUnaligned:
|
||||
|
@ -1084,8 +1084,8 @@
|
||||
do_alias( isCompileConstant_signature, object_boolean_signature) \
|
||||
\
|
||||
/* unsafe memory references (there are a lot of them...) */ \
|
||||
do_signature(getObject_signature, "(Ljava/lang/Object;J)Ljava/lang/Object;") \
|
||||
do_signature(putObject_signature, "(Ljava/lang/Object;JLjava/lang/Object;)V") \
|
||||
do_signature(getReference_signature, "(Ljava/lang/Object;J)Ljava/lang/Object;") \
|
||||
do_signature(putReference_signature, "(Ljava/lang/Object;JLjava/lang/Object;)V") \
|
||||
do_signature(getBoolean_signature, "(Ljava/lang/Object;J)Z") \
|
||||
do_signature(putBoolean_signature, "(Ljava/lang/Object;JZ)V") \
|
||||
do_signature(getByte_signature, "(Ljava/lang/Object;J)B") \
|
||||
@ -1103,7 +1103,7 @@
|
||||
do_signature(getDouble_signature, "(Ljava/lang/Object;J)D") \
|
||||
do_signature(putDouble_signature, "(Ljava/lang/Object;JD)V") \
|
||||
\
|
||||
do_name(getObject_name,"getObject") do_name(putObject_name,"putObject") \
|
||||
do_name(getReference_name,"getReference") do_name(putReference_name,"putReference") \
|
||||
do_name(getBoolean_name,"getBoolean") do_name(putBoolean_name,"putBoolean") \
|
||||
do_name(getByte_name,"getByte") do_name(putByte_name,"putByte") \
|
||||
do_name(getShort_name,"getShort") do_name(putShort_name,"putShort") \
|
||||
@ -1113,7 +1113,7 @@
|
||||
do_name(getFloat_name,"getFloat") do_name(putFloat_name,"putFloat") \
|
||||
do_name(getDouble_name,"getDouble") do_name(putDouble_name,"putDouble") \
|
||||
\
|
||||
do_intrinsic(_getObject, jdk_internal_misc_Unsafe, getObject_name, getObject_signature, F_RN) \
|
||||
do_intrinsic(_getReference, jdk_internal_misc_Unsafe, getReference_name, getReference_signature, F_RN) \
|
||||
do_intrinsic(_getBoolean, jdk_internal_misc_Unsafe, getBoolean_name, getBoolean_signature, F_RN) \
|
||||
do_intrinsic(_getByte, jdk_internal_misc_Unsafe, getByte_name, getByte_signature, F_RN) \
|
||||
do_intrinsic(_getShort, jdk_internal_misc_Unsafe, getShort_name, getShort_signature, F_RN) \
|
||||
@ -1122,7 +1122,7 @@
|
||||
do_intrinsic(_getLong, jdk_internal_misc_Unsafe, getLong_name, getLong_signature, F_RN) \
|
||||
do_intrinsic(_getFloat, jdk_internal_misc_Unsafe, getFloat_name, getFloat_signature, F_RN) \
|
||||
do_intrinsic(_getDouble, jdk_internal_misc_Unsafe, getDouble_name, getDouble_signature, F_RN) \
|
||||
do_intrinsic(_putObject, jdk_internal_misc_Unsafe, putObject_name, putObject_signature, F_RN) \
|
||||
do_intrinsic(_putReference, jdk_internal_misc_Unsafe, putReference_name, putReference_signature, F_RN) \
|
||||
do_intrinsic(_putBoolean, jdk_internal_misc_Unsafe, putBoolean_name, putBoolean_signature, F_RN) \
|
||||
do_intrinsic(_putByte, jdk_internal_misc_Unsafe, putByte_name, putByte_signature, F_RN) \
|
||||
do_intrinsic(_putShort, jdk_internal_misc_Unsafe, putShort_name, putShort_signature, F_RN) \
|
||||
@ -1132,92 +1132,92 @@
|
||||
do_intrinsic(_putFloat, jdk_internal_misc_Unsafe, putFloat_name, putFloat_signature, F_RN) \
|
||||
do_intrinsic(_putDouble, jdk_internal_misc_Unsafe, putDouble_name, putDouble_signature, F_RN) \
|
||||
\
|
||||
do_name(getObjectVolatile_name,"getObjectVolatile") do_name(putObjectVolatile_name,"putObjectVolatile") \
|
||||
do_name(getBooleanVolatile_name,"getBooleanVolatile") do_name(putBooleanVolatile_name,"putBooleanVolatile") \
|
||||
do_name(getByteVolatile_name,"getByteVolatile") do_name(putByteVolatile_name,"putByteVolatile") \
|
||||
do_name(getShortVolatile_name,"getShortVolatile") do_name(putShortVolatile_name,"putShortVolatile") \
|
||||
do_name(getCharVolatile_name,"getCharVolatile") do_name(putCharVolatile_name,"putCharVolatile") \
|
||||
do_name(getIntVolatile_name,"getIntVolatile") do_name(putIntVolatile_name,"putIntVolatile") \
|
||||
do_name(getLongVolatile_name,"getLongVolatile") do_name(putLongVolatile_name,"putLongVolatile") \
|
||||
do_name(getFloatVolatile_name,"getFloatVolatile") do_name(putFloatVolatile_name,"putFloatVolatile") \
|
||||
do_name(getDoubleVolatile_name,"getDoubleVolatile") do_name(putDoubleVolatile_name,"putDoubleVolatile") \
|
||||
do_name(getReferenceVolatile_name,"getReferenceVolatile") do_name(putReferenceVolatile_name,"putReferenceVolatile") \
|
||||
do_name(getBooleanVolatile_name,"getBooleanVolatile") do_name(putBooleanVolatile_name,"putBooleanVolatile") \
|
||||
do_name(getByteVolatile_name,"getByteVolatile") do_name(putByteVolatile_name,"putByteVolatile") \
|
||||
do_name(getShortVolatile_name,"getShortVolatile") do_name(putShortVolatile_name,"putShortVolatile") \
|
||||
do_name(getCharVolatile_name,"getCharVolatile") do_name(putCharVolatile_name,"putCharVolatile") \
|
||||
do_name(getIntVolatile_name,"getIntVolatile") do_name(putIntVolatile_name,"putIntVolatile") \
|
||||
do_name(getLongVolatile_name,"getLongVolatile") do_name(putLongVolatile_name,"putLongVolatile") \
|
||||
do_name(getFloatVolatile_name,"getFloatVolatile") do_name(putFloatVolatile_name,"putFloatVolatile") \
|
||||
do_name(getDoubleVolatile_name,"getDoubleVolatile") do_name(putDoubleVolatile_name,"putDoubleVolatile") \
|
||||
\
|
||||
do_intrinsic(_getObjectVolatile, jdk_internal_misc_Unsafe, getObjectVolatile_name, getObject_signature, F_RN) \
|
||||
do_intrinsic(_getBooleanVolatile, jdk_internal_misc_Unsafe, getBooleanVolatile_name, getBoolean_signature, F_RN) \
|
||||
do_intrinsic(_getByteVolatile, jdk_internal_misc_Unsafe, getByteVolatile_name, getByte_signature, F_RN) \
|
||||
do_intrinsic(_getShortVolatile, jdk_internal_misc_Unsafe, getShortVolatile_name, getShort_signature, F_RN) \
|
||||
do_intrinsic(_getCharVolatile, jdk_internal_misc_Unsafe, getCharVolatile_name, getChar_signature, F_RN) \
|
||||
do_intrinsic(_getIntVolatile, jdk_internal_misc_Unsafe, getIntVolatile_name, getInt_signature, F_RN) \
|
||||
do_intrinsic(_getLongVolatile, jdk_internal_misc_Unsafe, getLongVolatile_name, getLong_signature, F_RN) \
|
||||
do_intrinsic(_getFloatVolatile, jdk_internal_misc_Unsafe, getFloatVolatile_name, getFloat_signature, F_RN) \
|
||||
do_intrinsic(_getDoubleVolatile, jdk_internal_misc_Unsafe, getDoubleVolatile_name, getDouble_signature, F_RN) \
|
||||
do_intrinsic(_putObjectVolatile, jdk_internal_misc_Unsafe, putObjectVolatile_name, putObject_signature, F_RN) \
|
||||
do_intrinsic(_putBooleanVolatile, jdk_internal_misc_Unsafe, putBooleanVolatile_name, putBoolean_signature, F_RN) \
|
||||
do_intrinsic(_putByteVolatile, jdk_internal_misc_Unsafe, putByteVolatile_name, putByte_signature, F_RN) \
|
||||
do_intrinsic(_putShortVolatile, jdk_internal_misc_Unsafe, putShortVolatile_name, putShort_signature, F_RN) \
|
||||
do_intrinsic(_putCharVolatile, jdk_internal_misc_Unsafe, putCharVolatile_name, putChar_signature, F_RN) \
|
||||
do_intrinsic(_putIntVolatile, jdk_internal_misc_Unsafe, putIntVolatile_name, putInt_signature, F_RN) \
|
||||
do_intrinsic(_putLongVolatile, jdk_internal_misc_Unsafe, putLongVolatile_name, putLong_signature, F_RN) \
|
||||
do_intrinsic(_putFloatVolatile, jdk_internal_misc_Unsafe, putFloatVolatile_name, putFloat_signature, F_RN) \
|
||||
do_intrinsic(_putDoubleVolatile, jdk_internal_misc_Unsafe, putDoubleVolatile_name, putDouble_signature, F_RN) \
|
||||
do_intrinsic(_getReferenceVolatile, jdk_internal_misc_Unsafe, getReferenceVolatile_name, getReference_signature, F_RN) \
|
||||
do_intrinsic(_getBooleanVolatile, jdk_internal_misc_Unsafe, getBooleanVolatile_name, getBoolean_signature, F_RN) \
|
||||
do_intrinsic(_getByteVolatile, jdk_internal_misc_Unsafe, getByteVolatile_name, getByte_signature, F_RN) \
|
||||
do_intrinsic(_getShortVolatile, jdk_internal_misc_Unsafe, getShortVolatile_name, getShort_signature, F_RN) \
|
||||
do_intrinsic(_getCharVolatile, jdk_internal_misc_Unsafe, getCharVolatile_name, getChar_signature, F_RN) \
|
||||
do_intrinsic(_getIntVolatile, jdk_internal_misc_Unsafe, getIntVolatile_name, getInt_signature, F_RN) \
|
||||
do_intrinsic(_getLongVolatile, jdk_internal_misc_Unsafe, getLongVolatile_name, getLong_signature, F_RN) \
|
||||
do_intrinsic(_getFloatVolatile, jdk_internal_misc_Unsafe, getFloatVolatile_name, getFloat_signature, F_RN) \
|
||||
do_intrinsic(_getDoubleVolatile, jdk_internal_misc_Unsafe, getDoubleVolatile_name, getDouble_signature, F_RN) \
|
||||
do_intrinsic(_putReferenceVolatile, jdk_internal_misc_Unsafe, putReferenceVolatile_name, putReference_signature, F_RN) \
|
||||
do_intrinsic(_putBooleanVolatile, jdk_internal_misc_Unsafe, putBooleanVolatile_name, putBoolean_signature, F_RN) \
|
||||
do_intrinsic(_putByteVolatile, jdk_internal_misc_Unsafe, putByteVolatile_name, putByte_signature, F_RN) \
|
||||
do_intrinsic(_putShortVolatile, jdk_internal_misc_Unsafe, putShortVolatile_name, putShort_signature, F_RN) \
|
||||
do_intrinsic(_putCharVolatile, jdk_internal_misc_Unsafe, putCharVolatile_name, putChar_signature, F_RN) \
|
||||
do_intrinsic(_putIntVolatile, jdk_internal_misc_Unsafe, putIntVolatile_name, putInt_signature, F_RN) \
|
||||
do_intrinsic(_putLongVolatile, jdk_internal_misc_Unsafe, putLongVolatile_name, putLong_signature, F_RN) \
|
||||
do_intrinsic(_putFloatVolatile, jdk_internal_misc_Unsafe, putFloatVolatile_name, putFloat_signature, F_RN) \
|
||||
do_intrinsic(_putDoubleVolatile, jdk_internal_misc_Unsafe, putDoubleVolatile_name, putDouble_signature, F_RN) \
|
||||
\
|
||||
do_name(getObjectOpaque_name,"getObjectOpaque") do_name(putObjectOpaque_name,"putObjectOpaque") \
|
||||
do_name(getBooleanOpaque_name,"getBooleanOpaque") do_name(putBooleanOpaque_name,"putBooleanOpaque") \
|
||||
do_name(getByteOpaque_name,"getByteOpaque") do_name(putByteOpaque_name,"putByteOpaque") \
|
||||
do_name(getShortOpaque_name,"getShortOpaque") do_name(putShortOpaque_name,"putShortOpaque") \
|
||||
do_name(getCharOpaque_name,"getCharOpaque") do_name(putCharOpaque_name,"putCharOpaque") \
|
||||
do_name(getIntOpaque_name,"getIntOpaque") do_name(putIntOpaque_name,"putIntOpaque") \
|
||||
do_name(getLongOpaque_name,"getLongOpaque") do_name(putLongOpaque_name,"putLongOpaque") \
|
||||
do_name(getFloatOpaque_name,"getFloatOpaque") do_name(putFloatOpaque_name,"putFloatOpaque") \
|
||||
do_name(getDoubleOpaque_name,"getDoubleOpaque") do_name(putDoubleOpaque_name,"putDoubleOpaque") \
|
||||
do_name(getReferenceOpaque_name,"getReferenceOpaque") do_name(putReferenceOpaque_name,"putReferenceOpaque") \
|
||||
do_name(getBooleanOpaque_name,"getBooleanOpaque") do_name(putBooleanOpaque_name,"putBooleanOpaque") \
|
||||
do_name(getByteOpaque_name,"getByteOpaque") do_name(putByteOpaque_name,"putByteOpaque") \
|
||||
do_name(getShortOpaque_name,"getShortOpaque") do_name(putShortOpaque_name,"putShortOpaque") \
|
||||
do_name(getCharOpaque_name,"getCharOpaque") do_name(putCharOpaque_name,"putCharOpaque") \
|
||||
do_name(getIntOpaque_name,"getIntOpaque") do_name(putIntOpaque_name,"putIntOpaque") \
|
||||
do_name(getLongOpaque_name,"getLongOpaque") do_name(putLongOpaque_name,"putLongOpaque") \
|
||||
do_name(getFloatOpaque_name,"getFloatOpaque") do_name(putFloatOpaque_name,"putFloatOpaque") \
|
||||
do_name(getDoubleOpaque_name,"getDoubleOpaque") do_name(putDoubleOpaque_name,"putDoubleOpaque") \
|
||||
\
|
||||
do_intrinsic(_getObjectOpaque, jdk_internal_misc_Unsafe, getObjectOpaque_name, getObject_signature, F_R) \
|
||||
do_intrinsic(_getBooleanOpaque, jdk_internal_misc_Unsafe, getBooleanOpaque_name, getBoolean_signature, F_R) \
|
||||
do_intrinsic(_getByteOpaque, jdk_internal_misc_Unsafe, getByteOpaque_name, getByte_signature, F_R) \
|
||||
do_intrinsic(_getShortOpaque, jdk_internal_misc_Unsafe, getShortOpaque_name, getShort_signature, F_R) \
|
||||
do_intrinsic(_getCharOpaque, jdk_internal_misc_Unsafe, getCharOpaque_name, getChar_signature, F_R) \
|
||||
do_intrinsic(_getIntOpaque, jdk_internal_misc_Unsafe, getIntOpaque_name, getInt_signature, F_R) \
|
||||
do_intrinsic(_getLongOpaque, jdk_internal_misc_Unsafe, getLongOpaque_name, getLong_signature, F_R) \
|
||||
do_intrinsic(_getFloatOpaque, jdk_internal_misc_Unsafe, getFloatOpaque_name, getFloat_signature, F_R) \
|
||||
do_intrinsic(_getDoubleOpaque, jdk_internal_misc_Unsafe, getDoubleOpaque_name, getDouble_signature, F_R) \
|
||||
do_intrinsic(_putObjectOpaque, jdk_internal_misc_Unsafe, putObjectOpaque_name, putObject_signature, F_R) \
|
||||
do_intrinsic(_putBooleanOpaque, jdk_internal_misc_Unsafe, putBooleanOpaque_name, putBoolean_signature, F_R) \
|
||||
do_intrinsic(_putByteOpaque, jdk_internal_misc_Unsafe, putByteOpaque_name, putByte_signature, F_R) \
|
||||
do_intrinsic(_putShortOpaque, jdk_internal_misc_Unsafe, putShortOpaque_name, putShort_signature, F_R) \
|
||||
do_intrinsic(_putCharOpaque, jdk_internal_misc_Unsafe, putCharOpaque_name, putChar_signature, F_R) \
|
||||
do_intrinsic(_putIntOpaque, jdk_internal_misc_Unsafe, putIntOpaque_name, putInt_signature, F_R) \
|
||||
do_intrinsic(_putLongOpaque, jdk_internal_misc_Unsafe, putLongOpaque_name, putLong_signature, F_R) \
|
||||
do_intrinsic(_putFloatOpaque, jdk_internal_misc_Unsafe, putFloatOpaque_name, putFloat_signature, F_R) \
|
||||
do_intrinsic(_putDoubleOpaque, jdk_internal_misc_Unsafe, putDoubleOpaque_name, putDouble_signature, F_R) \
|
||||
do_intrinsic(_getReferenceOpaque, jdk_internal_misc_Unsafe, getReferenceOpaque_name, getReference_signature, F_R) \
|
||||
do_intrinsic(_getBooleanOpaque, jdk_internal_misc_Unsafe, getBooleanOpaque_name, getBoolean_signature, F_R) \
|
||||
do_intrinsic(_getByteOpaque, jdk_internal_misc_Unsafe, getByteOpaque_name, getByte_signature, F_R) \
|
||||
do_intrinsic(_getShortOpaque, jdk_internal_misc_Unsafe, getShortOpaque_name, getShort_signature, F_R) \
|
||||
do_intrinsic(_getCharOpaque, jdk_internal_misc_Unsafe, getCharOpaque_name, getChar_signature, F_R) \
|
||||
do_intrinsic(_getIntOpaque, jdk_internal_misc_Unsafe, getIntOpaque_name, getInt_signature, F_R) \
|
||||
do_intrinsic(_getLongOpaque, jdk_internal_misc_Unsafe, getLongOpaque_name, getLong_signature, F_R) \
|
||||
do_intrinsic(_getFloatOpaque, jdk_internal_misc_Unsafe, getFloatOpaque_name, getFloat_signature, F_R) \
|
||||
do_intrinsic(_getDoubleOpaque, jdk_internal_misc_Unsafe, getDoubleOpaque_name, getDouble_signature, F_R) \
|
||||
do_intrinsic(_putReferenceOpaque, jdk_internal_misc_Unsafe, putReferenceOpaque_name, putReference_signature, F_R) \
|
||||
do_intrinsic(_putBooleanOpaque, jdk_internal_misc_Unsafe, putBooleanOpaque_name, putBoolean_signature, F_R) \
|
||||
do_intrinsic(_putByteOpaque, jdk_internal_misc_Unsafe, putByteOpaque_name, putByte_signature, F_R) \
|
||||
do_intrinsic(_putShortOpaque, jdk_internal_misc_Unsafe, putShortOpaque_name, putShort_signature, F_R) \
|
||||
do_intrinsic(_putCharOpaque, jdk_internal_misc_Unsafe, putCharOpaque_name, putChar_signature, F_R) \
|
||||
do_intrinsic(_putIntOpaque, jdk_internal_misc_Unsafe, putIntOpaque_name, putInt_signature, F_R) \
|
||||
do_intrinsic(_putLongOpaque, jdk_internal_misc_Unsafe, putLongOpaque_name, putLong_signature, F_R) \
|
||||
do_intrinsic(_putFloatOpaque, jdk_internal_misc_Unsafe, putFloatOpaque_name, putFloat_signature, F_R) \
|
||||
do_intrinsic(_putDoubleOpaque, jdk_internal_misc_Unsafe, putDoubleOpaque_name, putDouble_signature, F_R) \
|
||||
\
|
||||
do_name(getObjectAcquire_name, "getObjectAcquire") do_name(putObjectRelease_name, "putObjectRelease") \
|
||||
do_name(getBooleanAcquire_name, "getBooleanAcquire") do_name(putBooleanRelease_name, "putBooleanRelease") \
|
||||
do_name(getByteAcquire_name, "getByteAcquire") do_name(putByteRelease_name, "putByteRelease") \
|
||||
do_name(getShortAcquire_name, "getShortAcquire") do_name(putShortRelease_name, "putShortRelease") \
|
||||
do_name(getCharAcquire_name, "getCharAcquire") do_name(putCharRelease_name, "putCharRelease") \
|
||||
do_name(getIntAcquire_name, "getIntAcquire") do_name(putIntRelease_name, "putIntRelease") \
|
||||
do_name(getLongAcquire_name, "getLongAcquire") do_name(putLongRelease_name, "putLongRelease") \
|
||||
do_name(getFloatAcquire_name, "getFloatAcquire") do_name(putFloatRelease_name, "putFloatRelease") \
|
||||
do_name(getDoubleAcquire_name, "getDoubleAcquire") do_name(putDoubleRelease_name, "putDoubleRelease") \
|
||||
do_name(getReferenceAcquire_name, "getReferenceAcquire") do_name(putReferenceRelease_name, "putReferenceRelease") \
|
||||
do_name(getBooleanAcquire_name, "getBooleanAcquire") do_name(putBooleanRelease_name, "putBooleanRelease") \
|
||||
do_name(getByteAcquire_name, "getByteAcquire") do_name(putByteRelease_name, "putByteRelease") \
|
||||
do_name(getShortAcquire_name, "getShortAcquire") do_name(putShortRelease_name, "putShortRelease") \
|
||||
do_name(getCharAcquire_name, "getCharAcquire") do_name(putCharRelease_name, "putCharRelease") \
|
||||
do_name(getIntAcquire_name, "getIntAcquire") do_name(putIntRelease_name, "putIntRelease") \
|
||||
do_name(getLongAcquire_name, "getLongAcquire") do_name(putLongRelease_name, "putLongRelease") \
|
||||
do_name(getFloatAcquire_name, "getFloatAcquire") do_name(putFloatRelease_name, "putFloatRelease") \
|
||||
do_name(getDoubleAcquire_name, "getDoubleAcquire") do_name(putDoubleRelease_name, "putDoubleRelease") \
|
||||
\
|
||||
do_intrinsic(_getObjectAcquire, jdk_internal_misc_Unsafe, getObjectAcquire_name, getObject_signature, F_R) \
|
||||
do_intrinsic(_getBooleanAcquire, jdk_internal_misc_Unsafe, getBooleanAcquire_name, getBoolean_signature, F_R) \
|
||||
do_intrinsic(_getByteAcquire, jdk_internal_misc_Unsafe, getByteAcquire_name, getByte_signature, F_R) \
|
||||
do_intrinsic(_getShortAcquire, jdk_internal_misc_Unsafe, getShortAcquire_name, getShort_signature, F_R) \
|
||||
do_intrinsic(_getCharAcquire, jdk_internal_misc_Unsafe, getCharAcquire_name, getChar_signature, F_R) \
|
||||
do_intrinsic(_getIntAcquire, jdk_internal_misc_Unsafe, getIntAcquire_name, getInt_signature, F_R) \
|
||||
do_intrinsic(_getLongAcquire, jdk_internal_misc_Unsafe, getLongAcquire_name, getLong_signature, F_R) \
|
||||
do_intrinsic(_getFloatAcquire, jdk_internal_misc_Unsafe, getFloatAcquire_name, getFloat_signature, F_R) \
|
||||
do_intrinsic(_getDoubleAcquire, jdk_internal_misc_Unsafe, getDoubleAcquire_name, getDouble_signature, F_R) \
|
||||
do_intrinsic(_putObjectRelease, jdk_internal_misc_Unsafe, putObjectRelease_name, putObject_signature, F_R) \
|
||||
do_intrinsic(_putBooleanRelease, jdk_internal_misc_Unsafe, putBooleanRelease_name, putBoolean_signature, F_R) \
|
||||
do_intrinsic(_putByteRelease, jdk_internal_misc_Unsafe, putByteRelease_name, putByte_signature, F_R) \
|
||||
do_intrinsic(_putShortRelease, jdk_internal_misc_Unsafe, putShortRelease_name, putShort_signature, F_R) \
|
||||
do_intrinsic(_putCharRelease, jdk_internal_misc_Unsafe, putCharRelease_name, putChar_signature, F_R) \
|
||||
do_intrinsic(_putIntRelease, jdk_internal_misc_Unsafe, putIntRelease_name, putInt_signature, F_R) \
|
||||
do_intrinsic(_putLongRelease, jdk_internal_misc_Unsafe, putLongRelease_name, putLong_signature, F_R) \
|
||||
do_intrinsic(_putFloatRelease, jdk_internal_misc_Unsafe, putFloatRelease_name, putFloat_signature, F_R) \
|
||||
do_intrinsic(_putDoubleRelease, jdk_internal_misc_Unsafe, putDoubleRelease_name, putDouble_signature, F_R) \
|
||||
do_intrinsic(_getReferenceAcquire, jdk_internal_misc_Unsafe, getReferenceAcquire_name, getReference_signature, F_R) \
|
||||
do_intrinsic(_getBooleanAcquire, jdk_internal_misc_Unsafe, getBooleanAcquire_name, getBoolean_signature, F_R) \
|
||||
do_intrinsic(_getByteAcquire, jdk_internal_misc_Unsafe, getByteAcquire_name, getByte_signature, F_R) \
|
||||
do_intrinsic(_getShortAcquire, jdk_internal_misc_Unsafe, getShortAcquire_name, getShort_signature, F_R) \
|
||||
do_intrinsic(_getCharAcquire, jdk_internal_misc_Unsafe, getCharAcquire_name, getChar_signature, F_R) \
|
||||
do_intrinsic(_getIntAcquire, jdk_internal_misc_Unsafe, getIntAcquire_name, getInt_signature, F_R) \
|
||||
do_intrinsic(_getLongAcquire, jdk_internal_misc_Unsafe, getLongAcquire_name, getLong_signature, F_R) \
|
||||
do_intrinsic(_getFloatAcquire, jdk_internal_misc_Unsafe, getFloatAcquire_name, getFloat_signature, F_R) \
|
||||
do_intrinsic(_getDoubleAcquire, jdk_internal_misc_Unsafe, getDoubleAcquire_name, getDouble_signature, F_R) \
|
||||
do_intrinsic(_putReferenceRelease, jdk_internal_misc_Unsafe, putReferenceRelease_name, putReference_signature, F_R) \
|
||||
do_intrinsic(_putBooleanRelease, jdk_internal_misc_Unsafe, putBooleanRelease_name, putBoolean_signature, F_R) \
|
||||
do_intrinsic(_putByteRelease, jdk_internal_misc_Unsafe, putByteRelease_name, putByte_signature, F_R) \
|
||||
do_intrinsic(_putShortRelease, jdk_internal_misc_Unsafe, putShortRelease_name, putShort_signature, F_R) \
|
||||
do_intrinsic(_putCharRelease, jdk_internal_misc_Unsafe, putCharRelease_name, putChar_signature, F_R) \
|
||||
do_intrinsic(_putIntRelease, jdk_internal_misc_Unsafe, putIntRelease_name, putInt_signature, F_R) \
|
||||
do_intrinsic(_putLongRelease, jdk_internal_misc_Unsafe, putLongRelease_name, putLong_signature, F_R) \
|
||||
do_intrinsic(_putFloatRelease, jdk_internal_misc_Unsafe, putFloatRelease_name, putFloat_signature, F_R) \
|
||||
do_intrinsic(_putDoubleRelease, jdk_internal_misc_Unsafe, putDoubleRelease_name, putDouble_signature, F_R) \
|
||||
\
|
||||
do_name(getShortUnaligned_name,"getShortUnaligned") do_name(putShortUnaligned_name,"putShortUnaligned") \
|
||||
do_name(getCharUnaligned_name,"getCharUnaligned") do_name(putCharUnaligned_name,"putCharUnaligned") \
|
||||
@ -1233,8 +1233,8 @@
|
||||
do_intrinsic(_putIntUnaligned, jdk_internal_misc_Unsafe, putIntUnaligned_name, putInt_signature, F_R) \
|
||||
do_intrinsic(_putLongUnaligned, jdk_internal_misc_Unsafe, putLongUnaligned_name, putLong_signature, F_R) \
|
||||
\
|
||||
do_signature(compareAndSetObject_signature, "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z") \
|
||||
do_signature(compareAndExchangeObject_signature, "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;") \
|
||||
do_signature(compareAndSetReference_signature, "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z") \
|
||||
do_signature(compareAndExchangeReference_signature, "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;") \
|
||||
do_signature(compareAndSetLong_signature, "(Ljava/lang/Object;JJJ)Z") \
|
||||
do_signature(compareAndExchangeLong_signature, "(Ljava/lang/Object;JJJ)J") \
|
||||
do_signature(compareAndSetInt_signature, "(Ljava/lang/Object;JII)Z") \
|
||||
@ -1244,52 +1244,52 @@
|
||||
do_signature(compareAndSetShort_signature, "(Ljava/lang/Object;JSS)Z") \
|
||||
do_signature(compareAndExchangeShort_signature, "(Ljava/lang/Object;JSS)S") \
|
||||
\
|
||||
do_name(compareAndSetObject_name, "compareAndSetObject") \
|
||||
do_name(compareAndExchangeObject_name, "compareAndExchangeObject") \
|
||||
do_name(compareAndExchangeObjectAcquire_name, "compareAndExchangeObjectAcquire") \
|
||||
do_name(compareAndExchangeObjectRelease_name, "compareAndExchangeObjectRelease") \
|
||||
do_name(compareAndSetLong_name, "compareAndSetLong") \
|
||||
do_name(compareAndExchangeLong_name, "compareAndExchangeLong") \
|
||||
do_name(compareAndExchangeLongAcquire_name, "compareAndExchangeLongAcquire") \
|
||||
do_name(compareAndExchangeLongRelease_name, "compareAndExchangeLongRelease") \
|
||||
do_name(compareAndSetInt_name, "compareAndSetInt") \
|
||||
do_name(compareAndExchangeInt_name, "compareAndExchangeInt") \
|
||||
do_name(compareAndExchangeIntAcquire_name, "compareAndExchangeIntAcquire") \
|
||||
do_name(compareAndExchangeIntRelease_name, "compareAndExchangeIntRelease") \
|
||||
do_name(compareAndSetByte_name, "compareAndSetByte") \
|
||||
do_name(compareAndExchangeByte_name, "compareAndExchangeByte") \
|
||||
do_name(compareAndExchangeByteAcquire_name, "compareAndExchangeByteAcquire") \
|
||||
do_name(compareAndExchangeByteRelease_name, "compareAndExchangeByteRelease") \
|
||||
do_name(compareAndSetShort_name, "compareAndSetShort") \
|
||||
do_name(compareAndExchangeShort_name, "compareAndExchangeShort") \
|
||||
do_name(compareAndExchangeShortAcquire_name, "compareAndExchangeShortAcquire") \
|
||||
do_name(compareAndExchangeShortRelease_name, "compareAndExchangeShortRelease") \
|
||||
do_name(compareAndSetReference_name, "compareAndSetReference") \
|
||||
do_name(compareAndExchangeReference_name, "compareAndExchangeReference") \
|
||||
do_name(compareAndExchangeReferenceAcquire_name, "compareAndExchangeReferenceAcquire") \
|
||||
do_name(compareAndExchangeReferenceRelease_name, "compareAndExchangeReferenceRelease") \
|
||||
do_name(compareAndSetLong_name, "compareAndSetLong") \
|
||||
do_name(compareAndExchangeLong_name, "compareAndExchangeLong") \
|
||||
do_name(compareAndExchangeLongAcquire_name, "compareAndExchangeLongAcquire") \
|
||||
do_name(compareAndExchangeLongRelease_name, "compareAndExchangeLongRelease") \
|
||||
do_name(compareAndSetInt_name, "compareAndSetInt") \
|
||||
do_name(compareAndExchangeInt_name, "compareAndExchangeInt") \
|
||||
do_name(compareAndExchangeIntAcquire_name, "compareAndExchangeIntAcquire") \
|
||||
do_name(compareAndExchangeIntRelease_name, "compareAndExchangeIntRelease") \
|
||||
do_name(compareAndSetByte_name, "compareAndSetByte") \
|
||||
do_name(compareAndExchangeByte_name, "compareAndExchangeByte") \
|
||||
do_name(compareAndExchangeByteAcquire_name, "compareAndExchangeByteAcquire") \
|
||||
do_name(compareAndExchangeByteRelease_name, "compareAndExchangeByteRelease") \
|
||||
do_name(compareAndSetShort_name, "compareAndSetShort") \
|
||||
do_name(compareAndExchangeShort_name, "compareAndExchangeShort") \
|
||||
do_name(compareAndExchangeShortAcquire_name, "compareAndExchangeShortAcquire") \
|
||||
do_name(compareAndExchangeShortRelease_name, "compareAndExchangeShortRelease") \
|
||||
\
|
||||
do_name(weakCompareAndSetObjectPlain_name, "weakCompareAndSetObjectPlain") \
|
||||
do_name(weakCompareAndSetObjectAcquire_name, "weakCompareAndSetObjectAcquire") \
|
||||
do_name(weakCompareAndSetObjectRelease_name, "weakCompareAndSetObjectRelease") \
|
||||
do_name(weakCompareAndSetObject_name, "weakCompareAndSetObject") \
|
||||
do_name(weakCompareAndSetLongPlain_name, "weakCompareAndSetLongPlain") \
|
||||
do_name(weakCompareAndSetLongAcquire_name, "weakCompareAndSetLongAcquire") \
|
||||
do_name(weakCompareAndSetLongRelease_name, "weakCompareAndSetLongRelease") \
|
||||
do_name(weakCompareAndSetLong_name, "weakCompareAndSetLong") \
|
||||
do_name(weakCompareAndSetIntPlain_name, "weakCompareAndSetIntPlain") \
|
||||
do_name(weakCompareAndSetIntAcquire_name, "weakCompareAndSetIntAcquire") \
|
||||
do_name(weakCompareAndSetIntRelease_name, "weakCompareAndSetIntRelease") \
|
||||
do_name(weakCompareAndSetInt_name, "weakCompareAndSetInt") \
|
||||
do_name(weakCompareAndSetBytePlain_name, "weakCompareAndSetBytePlain") \
|
||||
do_name(weakCompareAndSetByteAcquire_name, "weakCompareAndSetByteAcquire") \
|
||||
do_name(weakCompareAndSetByteRelease_name, "weakCompareAndSetByteRelease") \
|
||||
do_name(weakCompareAndSetByte_name, "weakCompareAndSetByte") \
|
||||
do_name(weakCompareAndSetShortPlain_name, "weakCompareAndSetShortPlain") \
|
||||
do_name(weakCompareAndSetShortAcquire_name, "weakCompareAndSetShortAcquire") \
|
||||
do_name(weakCompareAndSetShortRelease_name, "weakCompareAndSetShortRelease") \
|
||||
do_name(weakCompareAndSetShort_name, "weakCompareAndSetShort") \
|
||||
do_name(weakCompareAndSetReferencePlain_name, "weakCompareAndSetReferencePlain") \
|
||||
do_name(weakCompareAndSetReferenceAcquire_name, "weakCompareAndSetReferenceAcquire") \
|
||||
do_name(weakCompareAndSetReferenceRelease_name, "weakCompareAndSetReferenceRelease") \
|
||||
do_name(weakCompareAndSetReference_name, "weakCompareAndSetReference") \
|
||||
do_name(weakCompareAndSetLongPlain_name, "weakCompareAndSetLongPlain") \
|
||||
do_name(weakCompareAndSetLongAcquire_name, "weakCompareAndSetLongAcquire") \
|
||||
do_name(weakCompareAndSetLongRelease_name, "weakCompareAndSetLongRelease") \
|
||||
do_name(weakCompareAndSetLong_name, "weakCompareAndSetLong") \
|
||||
do_name(weakCompareAndSetIntPlain_name, "weakCompareAndSetIntPlain") \
|
||||
do_name(weakCompareAndSetIntAcquire_name, "weakCompareAndSetIntAcquire") \
|
||||
do_name(weakCompareAndSetIntRelease_name, "weakCompareAndSetIntRelease") \
|
||||
do_name(weakCompareAndSetInt_name, "weakCompareAndSetInt") \
|
||||
do_name(weakCompareAndSetBytePlain_name, "weakCompareAndSetBytePlain") \
|
||||
do_name(weakCompareAndSetByteAcquire_name, "weakCompareAndSetByteAcquire") \
|
||||
do_name(weakCompareAndSetByteRelease_name, "weakCompareAndSetByteRelease") \
|
||||
do_name(weakCompareAndSetByte_name, "weakCompareAndSetByte") \
|
||||
do_name(weakCompareAndSetShortPlain_name, "weakCompareAndSetShortPlain") \
|
||||
do_name(weakCompareAndSetShortAcquire_name, "weakCompareAndSetShortAcquire") \
|
||||
do_name(weakCompareAndSetShortRelease_name, "weakCompareAndSetShortRelease") \
|
||||
do_name(weakCompareAndSetShort_name, "weakCompareAndSetShort") \
|
||||
\
|
||||
do_intrinsic(_compareAndSetObject, jdk_internal_misc_Unsafe, compareAndSetObject_name, compareAndSetObject_signature, F_RN) \
|
||||
do_intrinsic(_compareAndExchangeObject, jdk_internal_misc_Unsafe, compareAndExchangeObject_name, compareAndExchangeObject_signature, F_RN) \
|
||||
do_intrinsic(_compareAndExchangeObjectAcquire, jdk_internal_misc_Unsafe, compareAndExchangeObjectAcquire_name, compareAndExchangeObject_signature, F_R) \
|
||||
do_intrinsic(_compareAndExchangeObjectRelease, jdk_internal_misc_Unsafe, compareAndExchangeObjectRelease_name, compareAndExchangeObject_signature, F_R) \
|
||||
do_intrinsic(_compareAndSetReference, jdk_internal_misc_Unsafe, compareAndSetReference_name, compareAndSetReference_signature, F_RN) \
|
||||
do_intrinsic(_compareAndExchangeReference, jdk_internal_misc_Unsafe, compareAndExchangeReference_name, compareAndExchangeReference_signature, F_RN) \
|
||||
do_intrinsic(_compareAndExchangeReferenceAcquire, jdk_internal_misc_Unsafe, compareAndExchangeReferenceAcquire_name, compareAndExchangeReference_signature, F_R) \
|
||||
do_intrinsic(_compareAndExchangeReferenceRelease, jdk_internal_misc_Unsafe, compareAndExchangeReferenceRelease_name, compareAndExchangeReference_signature, F_R) \
|
||||
do_intrinsic(_compareAndSetLong, jdk_internal_misc_Unsafe, compareAndSetLong_name, compareAndSetLong_signature, F_RN) \
|
||||
do_intrinsic(_compareAndExchangeLong, jdk_internal_misc_Unsafe, compareAndExchangeLong_name, compareAndExchangeLong_signature, F_RN) \
|
||||
do_intrinsic(_compareAndExchangeLongAcquire, jdk_internal_misc_Unsafe, compareAndExchangeLongAcquire_name, compareAndExchangeLong_signature, F_R) \
|
||||
@ -1307,10 +1307,10 @@
|
||||
do_intrinsic(_compareAndExchangeShortAcquire, jdk_internal_misc_Unsafe, compareAndExchangeShortAcquire_name, compareAndExchangeShort_signature, F_R) \
|
||||
do_intrinsic(_compareAndExchangeShortRelease, jdk_internal_misc_Unsafe, compareAndExchangeShortRelease_name, compareAndExchangeShort_signature, F_R) \
|
||||
\
|
||||
do_intrinsic(_weakCompareAndSetObjectPlain, jdk_internal_misc_Unsafe, weakCompareAndSetObjectPlain_name, compareAndSetObject_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetObjectAcquire, jdk_internal_misc_Unsafe, weakCompareAndSetObjectAcquire_name, compareAndSetObject_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetObjectRelease, jdk_internal_misc_Unsafe, weakCompareAndSetObjectRelease_name, compareAndSetObject_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetObject, jdk_internal_misc_Unsafe, weakCompareAndSetObject_name, compareAndSetObject_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetReferencePlain, jdk_internal_misc_Unsafe, weakCompareAndSetReferencePlain_name, compareAndSetReference_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetReferenceAcquire,jdk_internal_misc_Unsafe, weakCompareAndSetReferenceAcquire_name, compareAndSetReference_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetReferenceRelease,jdk_internal_misc_Unsafe, weakCompareAndSetReferenceRelease_name, compareAndSetReference_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetReference, jdk_internal_misc_Unsafe, weakCompareAndSetReference_name, compareAndSetReference_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetLongPlain, jdk_internal_misc_Unsafe, weakCompareAndSetLongPlain_name, compareAndSetLong_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetLongAcquire, jdk_internal_misc_Unsafe, weakCompareAndSetLongAcquire_name, compareAndSetLong_signature, F_R) \
|
||||
do_intrinsic(_weakCompareAndSetLongRelease, jdk_internal_misc_Unsafe, weakCompareAndSetLongRelease_name, compareAndSetLong_signature, F_R) \
|
||||
@ -1352,9 +1352,9 @@
|
||||
do_intrinsic(_getAndSetShort, jdk_internal_misc_Unsafe, getAndSetShort_name, getAndSetShort_signature, F_R) \
|
||||
do_name( getAndSetShort_name, "getAndSetShort") \
|
||||
do_alias( getAndSetShort_signature, /*"(Ljava/lang/Object;JS)S"*/ getAndAddShort_signature) \
|
||||
do_intrinsic(_getAndSetObject, jdk_internal_misc_Unsafe, getAndSetObject_name, getAndSetObject_signature, F_R)\
|
||||
do_name( getAndSetObject_name, "getAndSetObject") \
|
||||
do_signature(getAndSetObject_signature, "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;" ) \
|
||||
do_intrinsic(_getAndSetReference, jdk_internal_misc_Unsafe, getAndSetReference_name, getAndSetReference_signature, F_R) \
|
||||
do_name( getAndSetReference_name, "getAndSetReference") \
|
||||
do_signature(getAndSetReference_signature, "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;" ) \
|
||||
\
|
||||
/* (2) Bytecode intrinsics */ \
|
||||
\
|
||||
@ -1541,7 +1541,7 @@ class vmIntrinsics: AllStatic {
|
||||
#undef VM_INTRINSIC_ENUM
|
||||
|
||||
ID_LIMIT,
|
||||
LAST_COMPILER_INLINE = _getAndSetObject,
|
||||
LAST_COMPILER_INLINE = _getAndSetReference,
|
||||
FIRST_MH_SIG_POLY = _invokeGeneric,
|
||||
FIRST_MH_STATIC = _linkToVirtual,
|
||||
LAST_MH_SIG_POLY = _linkToInterface,
|
||||
|
@ -76,7 +76,7 @@ protected:
|
||||
|
||||
// Helper for unsafe accesses, that may or may not be on the referent field.
|
||||
// Generates the guards that check whether the result of
|
||||
// Unsafe.getObject should be recorded in an SATB log buffer.
|
||||
// Unsafe.getReference should be recorded in an SATB log buffer.
|
||||
void insert_pre_barrier(GraphKit* kit, Node* base_oop, Node* offset, Node* pre_val, bool need_mem_bar) const;
|
||||
|
||||
static const TypeFunc* write_ref_field_pre_entry_Type();
|
||||
|
@ -248,7 +248,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
break;
|
||||
|
||||
/* CompareAndSet, Object: */
|
||||
case vmIntrinsics::_compareAndSetObject:
|
||||
case vmIntrinsics::_compareAndSetReference:
|
||||
#ifdef _LP64
|
||||
if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;
|
||||
if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
|
||||
@ -256,10 +256,10 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
|
||||
#endif
|
||||
break;
|
||||
case vmIntrinsics::_weakCompareAndSetObjectPlain:
|
||||
case vmIntrinsics::_weakCompareAndSetObjectAcquire:
|
||||
case vmIntrinsics::_weakCompareAndSetObjectRelease:
|
||||
case vmIntrinsics::_weakCompareAndSetObject:
|
||||
case vmIntrinsics::_weakCompareAndSetReferencePlain:
|
||||
case vmIntrinsics::_weakCompareAndSetReferenceAcquire:
|
||||
case vmIntrinsics::_weakCompareAndSetReferenceRelease:
|
||||
case vmIntrinsics::_weakCompareAndSetReference:
|
||||
#ifdef _LP64
|
||||
if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;
|
||||
if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
|
||||
@ -312,9 +312,9 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
break;
|
||||
|
||||
/* CompareAndExchange, Object: */
|
||||
case vmIntrinsics::_compareAndExchangeObject:
|
||||
case vmIntrinsics::_compareAndExchangeObjectAcquire:
|
||||
case vmIntrinsics::_compareAndExchangeObjectRelease:
|
||||
case vmIntrinsics::_compareAndExchangeReference:
|
||||
case vmIntrinsics::_compareAndExchangeReferenceAcquire:
|
||||
case vmIntrinsics::_compareAndExchangeReferenceRelease:
|
||||
#ifdef _LP64
|
||||
if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;
|
||||
if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
|
||||
@ -376,7 +376,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_getAndSetLong:
|
||||
if (!Matcher::match_rule_supported(Op_GetAndSetL)) return false;
|
||||
break;
|
||||
case vmIntrinsics::_getAndSetObject:
|
||||
case vmIntrinsics::_getAndSetReference:
|
||||
#ifdef _LP64
|
||||
if (!UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetP)) return false;
|
||||
if (UseCompressedOops && !Matcher::match_rule_supported(Op_GetAndSetN)) return false;
|
||||
@ -455,7 +455,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_getCharsStringU:
|
||||
case vmIntrinsics::_getCharStringU:
|
||||
case vmIntrinsics::_putCharStringU:
|
||||
case vmIntrinsics::_getObject:
|
||||
case vmIntrinsics::_getReference:
|
||||
case vmIntrinsics::_getBoolean:
|
||||
case vmIntrinsics::_getByte:
|
||||
case vmIntrinsics::_getShort:
|
||||
@ -464,7 +464,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_getLong:
|
||||
case vmIntrinsics::_getFloat:
|
||||
case vmIntrinsics::_getDouble:
|
||||
case vmIntrinsics::_putObject:
|
||||
case vmIntrinsics::_putReference:
|
||||
case vmIntrinsics::_putBoolean:
|
||||
case vmIntrinsics::_putByte:
|
||||
case vmIntrinsics::_putShort:
|
||||
@ -473,7 +473,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_putLong:
|
||||
case vmIntrinsics::_putFloat:
|
||||
case vmIntrinsics::_putDouble:
|
||||
case vmIntrinsics::_getObjectVolatile:
|
||||
case vmIntrinsics::_getReferenceVolatile:
|
||||
case vmIntrinsics::_getBooleanVolatile:
|
||||
case vmIntrinsics::_getByteVolatile:
|
||||
case vmIntrinsics::_getShortVolatile:
|
||||
@ -482,7 +482,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_getLongVolatile:
|
||||
case vmIntrinsics::_getFloatVolatile:
|
||||
case vmIntrinsics::_getDoubleVolatile:
|
||||
case vmIntrinsics::_putObjectVolatile:
|
||||
case vmIntrinsics::_putReferenceVolatile:
|
||||
case vmIntrinsics::_putBooleanVolatile:
|
||||
case vmIntrinsics::_putByteVolatile:
|
||||
case vmIntrinsics::_putShortVolatile:
|
||||
@ -491,7 +491,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_putLongVolatile:
|
||||
case vmIntrinsics::_putFloatVolatile:
|
||||
case vmIntrinsics::_putDoubleVolatile:
|
||||
case vmIntrinsics::_getObjectAcquire:
|
||||
case vmIntrinsics::_getReferenceAcquire:
|
||||
case vmIntrinsics::_getBooleanAcquire:
|
||||
case vmIntrinsics::_getByteAcquire:
|
||||
case vmIntrinsics::_getShortAcquire:
|
||||
@ -500,7 +500,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_getLongAcquire:
|
||||
case vmIntrinsics::_getFloatAcquire:
|
||||
case vmIntrinsics::_getDoubleAcquire:
|
||||
case vmIntrinsics::_putObjectRelease:
|
||||
case vmIntrinsics::_putReferenceRelease:
|
||||
case vmIntrinsics::_putBooleanRelease:
|
||||
case vmIntrinsics::_putByteRelease:
|
||||
case vmIntrinsics::_putShortRelease:
|
||||
@ -509,7 +509,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_putLongRelease:
|
||||
case vmIntrinsics::_putFloatRelease:
|
||||
case vmIntrinsics::_putDoubleRelease:
|
||||
case vmIntrinsics::_getObjectOpaque:
|
||||
case vmIntrinsics::_getReferenceOpaque:
|
||||
case vmIntrinsics::_getBooleanOpaque:
|
||||
case vmIntrinsics::_getByteOpaque:
|
||||
case vmIntrinsics::_getShortOpaque:
|
||||
@ -518,7 +518,7 @@ bool C2Compiler::is_intrinsic_supported(const methodHandle& method, bool is_virt
|
||||
case vmIntrinsics::_getLongOpaque:
|
||||
case vmIntrinsics::_getFloatOpaque:
|
||||
case vmIntrinsics::_getDoubleOpaque:
|
||||
case vmIntrinsics::_putObjectOpaque:
|
||||
case vmIntrinsics::_putReferenceOpaque:
|
||||
case vmIntrinsics::_putBooleanOpaque:
|
||||
case vmIntrinsics::_putByteOpaque:
|
||||
case vmIntrinsics::_putShortOpaque:
|
||||
|
@ -587,7 +587,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_inflateStringC:
|
||||
case vmIntrinsics::_inflateStringB: return inline_string_copy(!is_compress);
|
||||
|
||||
case vmIntrinsics::_getObject: return inline_unsafe_access(!is_store, T_OBJECT, Relaxed, false);
|
||||
case vmIntrinsics::_getReference: return inline_unsafe_access(!is_store, T_OBJECT, Relaxed, false);
|
||||
case vmIntrinsics::_getBoolean: return inline_unsafe_access(!is_store, T_BOOLEAN, Relaxed, false);
|
||||
case vmIntrinsics::_getByte: return inline_unsafe_access(!is_store, T_BYTE, Relaxed, false);
|
||||
case vmIntrinsics::_getShort: return inline_unsafe_access(!is_store, T_SHORT, Relaxed, false);
|
||||
@ -597,7 +597,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_getFloat: return inline_unsafe_access(!is_store, T_FLOAT, Relaxed, false);
|
||||
case vmIntrinsics::_getDouble: return inline_unsafe_access(!is_store, T_DOUBLE, Relaxed, false);
|
||||
|
||||
case vmIntrinsics::_putObject: return inline_unsafe_access( is_store, T_OBJECT, Relaxed, false);
|
||||
case vmIntrinsics::_putReference: return inline_unsafe_access( is_store, T_OBJECT, Relaxed, false);
|
||||
case vmIntrinsics::_putBoolean: return inline_unsafe_access( is_store, T_BOOLEAN, Relaxed, false);
|
||||
case vmIntrinsics::_putByte: return inline_unsafe_access( is_store, T_BYTE, Relaxed, false);
|
||||
case vmIntrinsics::_putShort: return inline_unsafe_access( is_store, T_SHORT, Relaxed, false);
|
||||
@ -607,7 +607,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_putFloat: return inline_unsafe_access( is_store, T_FLOAT, Relaxed, false);
|
||||
case vmIntrinsics::_putDouble: return inline_unsafe_access( is_store, T_DOUBLE, Relaxed, false);
|
||||
|
||||
case vmIntrinsics::_getObjectVolatile: return inline_unsafe_access(!is_store, T_OBJECT, Volatile, false);
|
||||
case vmIntrinsics::_getReferenceVolatile: return inline_unsafe_access(!is_store, T_OBJECT, Volatile, false);
|
||||
case vmIntrinsics::_getBooleanVolatile: return inline_unsafe_access(!is_store, T_BOOLEAN, Volatile, false);
|
||||
case vmIntrinsics::_getByteVolatile: return inline_unsafe_access(!is_store, T_BYTE, Volatile, false);
|
||||
case vmIntrinsics::_getShortVolatile: return inline_unsafe_access(!is_store, T_SHORT, Volatile, false);
|
||||
@ -617,7 +617,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_getFloatVolatile: return inline_unsafe_access(!is_store, T_FLOAT, Volatile, false);
|
||||
case vmIntrinsics::_getDoubleVolatile: return inline_unsafe_access(!is_store, T_DOUBLE, Volatile, false);
|
||||
|
||||
case vmIntrinsics::_putObjectVolatile: return inline_unsafe_access( is_store, T_OBJECT, Volatile, false);
|
||||
case vmIntrinsics::_putReferenceVolatile: return inline_unsafe_access( is_store, T_OBJECT, Volatile, false);
|
||||
case vmIntrinsics::_putBooleanVolatile: return inline_unsafe_access( is_store, T_BOOLEAN, Volatile, false);
|
||||
case vmIntrinsics::_putByteVolatile: return inline_unsafe_access( is_store, T_BYTE, Volatile, false);
|
||||
case vmIntrinsics::_putShortVolatile: return inline_unsafe_access( is_store, T_SHORT, Volatile, false);
|
||||
@ -637,7 +637,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_putIntUnaligned: return inline_unsafe_access( is_store, T_INT, Relaxed, true);
|
||||
case vmIntrinsics::_putLongUnaligned: return inline_unsafe_access( is_store, T_LONG, Relaxed, true);
|
||||
|
||||
case vmIntrinsics::_getObjectAcquire: return inline_unsafe_access(!is_store, T_OBJECT, Acquire, false);
|
||||
case vmIntrinsics::_getReferenceAcquire: return inline_unsafe_access(!is_store, T_OBJECT, Acquire, false);
|
||||
case vmIntrinsics::_getBooleanAcquire: return inline_unsafe_access(!is_store, T_BOOLEAN, Acquire, false);
|
||||
case vmIntrinsics::_getByteAcquire: return inline_unsafe_access(!is_store, T_BYTE, Acquire, false);
|
||||
case vmIntrinsics::_getShortAcquire: return inline_unsafe_access(!is_store, T_SHORT, Acquire, false);
|
||||
@ -647,7 +647,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_getFloatAcquire: return inline_unsafe_access(!is_store, T_FLOAT, Acquire, false);
|
||||
case vmIntrinsics::_getDoubleAcquire: return inline_unsafe_access(!is_store, T_DOUBLE, Acquire, false);
|
||||
|
||||
case vmIntrinsics::_putObjectRelease: return inline_unsafe_access( is_store, T_OBJECT, Release, false);
|
||||
case vmIntrinsics::_putReferenceRelease: return inline_unsafe_access( is_store, T_OBJECT, Release, false);
|
||||
case vmIntrinsics::_putBooleanRelease: return inline_unsafe_access( is_store, T_BOOLEAN, Release, false);
|
||||
case vmIntrinsics::_putByteRelease: return inline_unsafe_access( is_store, T_BYTE, Release, false);
|
||||
case vmIntrinsics::_putShortRelease: return inline_unsafe_access( is_store, T_SHORT, Release, false);
|
||||
@ -657,7 +657,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_putFloatRelease: return inline_unsafe_access( is_store, T_FLOAT, Release, false);
|
||||
case vmIntrinsics::_putDoubleRelease: return inline_unsafe_access( is_store, T_DOUBLE, Release, false);
|
||||
|
||||
case vmIntrinsics::_getObjectOpaque: return inline_unsafe_access(!is_store, T_OBJECT, Opaque, false);
|
||||
case vmIntrinsics::_getReferenceOpaque: return inline_unsafe_access(!is_store, T_OBJECT, Opaque, false);
|
||||
case vmIntrinsics::_getBooleanOpaque: return inline_unsafe_access(!is_store, T_BOOLEAN, Opaque, false);
|
||||
case vmIntrinsics::_getByteOpaque: return inline_unsafe_access(!is_store, T_BYTE, Opaque, false);
|
||||
case vmIntrinsics::_getShortOpaque: return inline_unsafe_access(!is_store, T_SHORT, Opaque, false);
|
||||
@ -667,7 +667,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_getFloatOpaque: return inline_unsafe_access(!is_store, T_FLOAT, Opaque, false);
|
||||
case vmIntrinsics::_getDoubleOpaque: return inline_unsafe_access(!is_store, T_DOUBLE, Opaque, false);
|
||||
|
||||
case vmIntrinsics::_putObjectOpaque: return inline_unsafe_access( is_store, T_OBJECT, Opaque, false);
|
||||
case vmIntrinsics::_putReferenceOpaque: return inline_unsafe_access( is_store, T_OBJECT, Opaque, false);
|
||||
case vmIntrinsics::_putBooleanOpaque: return inline_unsafe_access( is_store, T_BOOLEAN, Opaque, false);
|
||||
case vmIntrinsics::_putByteOpaque: return inline_unsafe_access( is_store, T_BYTE, Opaque, false);
|
||||
case vmIntrinsics::_putShortOpaque: return inline_unsafe_access( is_store, T_SHORT, Opaque, false);
|
||||
@ -677,48 +677,48 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_putFloatOpaque: return inline_unsafe_access( is_store, T_FLOAT, Opaque, false);
|
||||
case vmIntrinsics::_putDoubleOpaque: return inline_unsafe_access( is_store, T_DOUBLE, Opaque, false);
|
||||
|
||||
case vmIntrinsics::_compareAndSetObject: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetByte: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetShort: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetInt: return inline_unsafe_load_store(T_INT, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetLong: return inline_unsafe_load_store(T_LONG, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetReference: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetByte: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetShort: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetInt: return inline_unsafe_load_store(T_INT, LS_cmp_swap, Volatile);
|
||||
case vmIntrinsics::_compareAndSetLong: return inline_unsafe_load_store(T_LONG, LS_cmp_swap, Volatile);
|
||||
|
||||
case vmIntrinsics::_weakCompareAndSetObjectPlain: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetObjectAcquire: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetObjectRelease: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetObject: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetBytePlain: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetByteAcquire: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetByteRelease: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetByte: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetShortPlain: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetShortAcquire: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetShortRelease: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetShort: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetIntPlain: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetIntAcquire: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetIntRelease: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetInt: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetLongPlain: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetLongAcquire: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetLongRelease: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetLong: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetReferencePlain: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetReferenceAcquire: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetReferenceRelease: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetReference: return inline_unsafe_load_store(T_OBJECT, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetBytePlain: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetByteAcquire: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetByteRelease: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetByte: return inline_unsafe_load_store(T_BYTE, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetShortPlain: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetShortAcquire: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetShortRelease: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetShort: return inline_unsafe_load_store(T_SHORT, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetIntPlain: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetIntAcquire: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetIntRelease: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetInt: return inline_unsafe_load_store(T_INT, LS_cmp_swap_weak, Volatile);
|
||||
case vmIntrinsics::_weakCompareAndSetLongPlain: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Relaxed);
|
||||
case vmIntrinsics::_weakCompareAndSetLongAcquire: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Acquire);
|
||||
case vmIntrinsics::_weakCompareAndSetLongRelease: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Release);
|
||||
case vmIntrinsics::_weakCompareAndSetLong: return inline_unsafe_load_store(T_LONG, LS_cmp_swap_weak, Volatile);
|
||||
|
||||
case vmIntrinsics::_compareAndExchangeObject: return inline_unsafe_load_store(T_OBJECT, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeObjectAcquire: return inline_unsafe_load_store(T_OBJECT, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeObjectRelease: return inline_unsafe_load_store(T_OBJECT, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeByte: return inline_unsafe_load_store(T_BYTE, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeByteAcquire: return inline_unsafe_load_store(T_BYTE, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeByteRelease: return inline_unsafe_load_store(T_BYTE, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeShort: return inline_unsafe_load_store(T_SHORT, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeShortAcquire: return inline_unsafe_load_store(T_SHORT, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeShortRelease: return inline_unsafe_load_store(T_SHORT, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeInt: return inline_unsafe_load_store(T_INT, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeIntAcquire: return inline_unsafe_load_store(T_INT, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeIntRelease: return inline_unsafe_load_store(T_INT, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeLong: return inline_unsafe_load_store(T_LONG, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeLongAcquire: return inline_unsafe_load_store(T_LONG, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeLongRelease: return inline_unsafe_load_store(T_LONG, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeReference: return inline_unsafe_load_store(T_OBJECT, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeReferenceAcquire: return inline_unsafe_load_store(T_OBJECT, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeReferenceRelease: return inline_unsafe_load_store(T_OBJECT, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeByte: return inline_unsafe_load_store(T_BYTE, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeByteAcquire: return inline_unsafe_load_store(T_BYTE, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeByteRelease: return inline_unsafe_load_store(T_BYTE, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeShort: return inline_unsafe_load_store(T_SHORT, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeShortAcquire: return inline_unsafe_load_store(T_SHORT, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeShortRelease: return inline_unsafe_load_store(T_SHORT, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeInt: return inline_unsafe_load_store(T_INT, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeIntAcquire: return inline_unsafe_load_store(T_INT, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeIntRelease: return inline_unsafe_load_store(T_INT, LS_cmp_exchange, Release);
|
||||
case vmIntrinsics::_compareAndExchangeLong: return inline_unsafe_load_store(T_LONG, LS_cmp_exchange, Volatile);
|
||||
case vmIntrinsics::_compareAndExchangeLongAcquire: return inline_unsafe_load_store(T_LONG, LS_cmp_exchange, Acquire);
|
||||
case vmIntrinsics::_compareAndExchangeLongRelease: return inline_unsafe_load_store(T_LONG, LS_cmp_exchange, Release);
|
||||
|
||||
case vmIntrinsics::_getAndAddByte: return inline_unsafe_load_store(T_BYTE, LS_get_add, Volatile);
|
||||
case vmIntrinsics::_getAndAddShort: return inline_unsafe_load_store(T_SHORT, LS_get_add, Volatile);
|
||||
@ -729,7 +729,7 @@ bool LibraryCallKit::try_to_inline(int predicate) {
|
||||
case vmIntrinsics::_getAndSetShort: return inline_unsafe_load_store(T_SHORT, LS_get_set, Volatile);
|
||||
case vmIntrinsics::_getAndSetInt: return inline_unsafe_load_store(T_INT, LS_get_set, Volatile);
|
||||
case vmIntrinsics::_getAndSetLong: return inline_unsafe_load_store(T_LONG, LS_get_set, Volatile);
|
||||
case vmIntrinsics::_getAndSetObject: return inline_unsafe_load_store(T_OBJECT, LS_get_set, Volatile);
|
||||
case vmIntrinsics::_getAndSetReference: return inline_unsafe_load_store(T_OBJECT, LS_get_set, Volatile);
|
||||
|
||||
case vmIntrinsics::_loadFence:
|
||||
case vmIntrinsics::_storeFence:
|
||||
@ -2344,14 +2344,14 @@ bool LibraryCallKit::inline_unsafe_access(bool is_store, const BasicType type, c
|
||||
ciSignature* sig = callee()->signature();
|
||||
#ifdef ASSERT
|
||||
if (!is_store) {
|
||||
// Object getObject(Object base, int/long offset), etc.
|
||||
// Object getReference(Object base, int/long offset), etc.
|
||||
BasicType rtype = sig->return_type()->basic_type();
|
||||
assert(rtype == type, "getter must return the expected value");
|
||||
assert(sig->count() == 2, "oop getter has 2 arguments");
|
||||
assert(sig->type_at(0)->basic_type() == T_OBJECT, "getter base is object");
|
||||
assert(sig->type_at(1)->basic_type() == T_LONG, "getter offset is correct");
|
||||
} else {
|
||||
// void putObject(Object base, int/long offset, Object x), etc.
|
||||
// void putReference(Object base, int/long offset, Object x), etc.
|
||||
assert(sig->return_type()->basic_type() == T_VOID, "putter must not return a value");
|
||||
assert(sig->count() == 3, "oop putter has 3 arguments");
|
||||
assert(sig->type_at(0)->basic_type() == T_OBJECT, "putter base is object");
|
||||
@ -2422,7 +2422,7 @@ bool LibraryCallKit::inline_unsafe_access(bool is_store, const BasicType type, c
|
||||
bt = adr_type->is_aryptr()->elem()->array_element_basic_type();
|
||||
}
|
||||
if (bt == T_ARRAY || bt == T_NARROWOOP) {
|
||||
// accessing an array field with getObject is not a mismatch
|
||||
// accessing an array field with getReference is not a mismatch
|
||||
bt = T_OBJECT;
|
||||
}
|
||||
if ((bt == T_OBJECT) != (type == T_OBJECT)) {
|
||||
@ -2521,16 +2521,16 @@ bool LibraryCallKit::inline_unsafe_access(bool is_store, const BasicType type, c
|
||||
//
|
||||
// LS_cmp_swap:
|
||||
//
|
||||
// boolean compareAndSetObject(Object o, long offset, Object expected, Object x);
|
||||
// boolean compareAndSetReference(Object o, long offset, Object expected, Object x);
|
||||
// boolean compareAndSetInt( Object o, long offset, int expected, int x);
|
||||
// boolean compareAndSetLong( Object o, long offset, long expected, long x);
|
||||
//
|
||||
// LS_cmp_swap_weak:
|
||||
//
|
||||
// boolean weakCompareAndSetObject( Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetObjectPlain( Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetObjectAcquire(Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetObjectRelease(Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetReference( Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetReferencePlain( Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetReferenceAcquire(Object o, long offset, Object expected, Object x);
|
||||
// boolean weakCompareAndSetReferenceRelease(Object o, long offset, Object expected, Object x);
|
||||
//
|
||||
// boolean weakCompareAndSetInt( Object o, long offset, int expected, int x);
|
||||
// boolean weakCompareAndSetIntPlain( Object o, long offset, int expected, int x);
|
||||
@ -2544,9 +2544,9 @@ bool LibraryCallKit::inline_unsafe_access(bool is_store, const BasicType type, c
|
||||
//
|
||||
// LS_cmp_exchange:
|
||||
//
|
||||
// Object compareAndExchangeObjectVolatile(Object o, long offset, Object expected, Object x);
|
||||
// Object compareAndExchangeObjectAcquire( Object o, long offset, Object expected, Object x);
|
||||
// Object compareAndExchangeObjectRelease( Object o, long offset, Object expected, Object x);
|
||||
// Object compareAndExchangeReferenceVolatile(Object o, long offset, Object expected, Object x);
|
||||
// Object compareAndExchangeReferenceAcquire( Object o, long offset, Object expected, Object x);
|
||||
// Object compareAndExchangeReferenceRelease( Object o, long offset, Object expected, Object x);
|
||||
//
|
||||
// Object compareAndExchangeIntVolatile( Object o, long offset, Object expected, Object x);
|
||||
// Object compareAndExchangeIntAcquire( Object o, long offset, Object expected, Object x);
|
||||
|
@ -257,28 +257,28 @@ public:
|
||||
// These functions allow a null base pointer with an arbitrary address.
|
||||
// But if the base pointer is non-null, the offset should make some sense.
|
||||
// That is, it should be in the range [0, MAX_OBJECT_SIZE].
|
||||
UNSAFE_ENTRY(jobject, Unsafe_GetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
|
||||
UNSAFE_ENTRY(jobject, Unsafe_GetReference(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
assert_field_offset_sane(p, offset);
|
||||
oop v = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
|
||||
return JNIHandles::make_local(env, v);
|
||||
} UNSAFE_END
|
||||
|
||||
UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
||||
UNSAFE_ENTRY(void, Unsafe_PutReference(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
||||
oop x = JNIHandles::resolve(x_h);
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
assert_field_offset_sane(p, offset);
|
||||
HeapAccess<ON_UNKNOWN_OOP_REF>::oop_store_at(p, offset, x);
|
||||
} UNSAFE_END
|
||||
|
||||
UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
|
||||
UNSAFE_ENTRY(jobject, Unsafe_GetReferenceVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
assert_field_offset_sane(p, offset);
|
||||
oop v = HeapAccess<MO_SEQ_CST | ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
|
||||
return JNIHandles::make_local(env, v);
|
||||
} UNSAFE_END
|
||||
|
||||
UNSAFE_ENTRY(void, Unsafe_PutObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
||||
UNSAFE_ENTRY(void, Unsafe_PutReferenceVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
||||
oop x = JNIHandles::resolve(x_h);
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
assert_field_offset_sane(p, offset);
|
||||
@ -864,7 +864,7 @@ UNSAFE_ENTRY(void, Unsafe_ThrowException(JNIEnv *env, jobject unsafe, jthrowable
|
||||
|
||||
// JSR166 ------------------------------------------------------------------
|
||||
|
||||
UNSAFE_ENTRY(jobject, Unsafe_CompareAndExchangeObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) {
|
||||
UNSAFE_ENTRY(jobject, Unsafe_CompareAndExchangeReference(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) {
|
||||
oop x = JNIHandles::resolve(x_h);
|
||||
oop e = JNIHandles::resolve(e_h);
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
@ -895,7 +895,7 @@ UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, j
|
||||
}
|
||||
} UNSAFE_END
|
||||
|
||||
UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) {
|
||||
UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetReference(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) {
|
||||
oop x = JNIHandles::resolve(x_h);
|
||||
oop e = JNIHandles::resolve(e_h);
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
@ -1034,10 +1034,10 @@ UNSAFE_ENTRY(jint, Unsafe_GetLoadAverage0(JNIEnv *env, jobject unsafe, jdoubleAr
|
||||
|
||||
|
||||
static JNINativeMethod jdk_internal_misc_Unsafe_methods[] = {
|
||||
{CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)},
|
||||
{CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutObject)},
|
||||
{CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)},
|
||||
{CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutObjectVolatile)},
|
||||
{CC "getReference", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetReference)},
|
||||
{CC "putReference", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutReference)},
|
||||
{CC "getReferenceVolatile", CC "(" OBJ "J)" OBJ, FN_PTR(Unsafe_GetReferenceVolatile)},
|
||||
{CC "putReferenceVolatile", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutReferenceVolatile)},
|
||||
|
||||
{CC "getUncompressedObject", CC "(" ADR ")" OBJ, FN_PTR(Unsafe_GetUncompressedObject)},
|
||||
|
||||
@ -1067,10 +1067,10 @@ static JNINativeMethod jdk_internal_misc_Unsafe_methods[] = {
|
||||
{CC "defineClass0", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)},
|
||||
{CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)},
|
||||
{CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)},
|
||||
{CC "compareAndSetObject",CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSetObject)},
|
||||
{CC "compareAndSetReference",CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSetReference)},
|
||||
{CC "compareAndSetInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSetInt)},
|
||||
{CC "compareAndSetLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSetLong)},
|
||||
{CC "compareAndExchangeObject", CC "(" OBJ "J" OBJ "" OBJ ")" OBJ, FN_PTR(Unsafe_CompareAndExchangeObject)},
|
||||
{CC "compareAndExchangeReference", CC "(" OBJ "J" OBJ "" OBJ ")" OBJ, FN_PTR(Unsafe_CompareAndExchangeReference)},
|
||||
{CC "compareAndExchangeInt", CC "(" OBJ "J""I""I"")I", FN_PTR(Unsafe_CompareAndExchangeInt)},
|
||||
{CC "compareAndExchangeLong", CC "(" OBJ "J""J""J"")J", FN_PTR(Unsafe_CompareAndExchangeLong)},
|
||||
|
||||
|
@ -238,7 +238,7 @@ class BufferedInputStream extends FilterInputStream {
|
||||
nsz = marklimit;
|
||||
byte[] nbuf = new byte[nsz];
|
||||
System.arraycopy(buffer, 0, nbuf, 0, pos);
|
||||
if (!U.compareAndSetObject(this, BUF_OFFSET, buffer, nbuf)) {
|
||||
if (!U.compareAndSetReference(this, BUF_OFFSET, buffer, nbuf)) {
|
||||
// Can't replace buf if there was an async close.
|
||||
// Note: This would need to be changed if fill()
|
||||
// is ever made accessible to multiple threads.
|
||||
@ -482,7 +482,7 @@ class BufferedInputStream extends FilterInputStream {
|
||||
public void close() throws IOException {
|
||||
byte[] buffer;
|
||||
while ( (buffer = buf) != null) {
|
||||
if (U.compareAndSetObject(this, BUF_OFFSET, buffer, null)) {
|
||||
if (U.compareAndSetReference(this, BUF_OFFSET, buffer, null)) {
|
||||
InputStream input = in;
|
||||
in = null;
|
||||
if (input != null)
|
||||
|
@ -2237,7 +2237,7 @@ public class File
|
||||
if (sep != separatorChar)
|
||||
pathField = pathField.replace(sep, separatorChar);
|
||||
String path = fs.normalize(pathField);
|
||||
UNSAFE.putObject(this, PATH_OFFSET, path);
|
||||
UNSAFE.putReference(this, PATH_OFFSET, path);
|
||||
UNSAFE.putIntVolatile(this, PREFIX_LENGTH_OFFSET, fs.prefixLength(path));
|
||||
}
|
||||
|
||||
|
@ -2135,7 +2135,7 @@ public class ObjectStreamClass implements Serializable {
|
||||
switch (typeCodes[i]) {
|
||||
case 'L':
|
||||
case '[':
|
||||
vals[offsets[i]] = unsafe.getObject(obj, readKeys[i]);
|
||||
vals[offsets[i]] = unsafe.getReference(obj, readKeys[i]);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -2190,7 +2190,7 @@ public class ObjectStreamClass implements Serializable {
|
||||
obj.getClass().getName());
|
||||
}
|
||||
if (!dryRun)
|
||||
unsafe.putObject(obj, key, val);
|
||||
unsafe.putReference(obj, key, val);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -2904,19 +2904,19 @@ public final class Class<T> implements java.io.Serializable,
|
||||
static <T> boolean casReflectionData(Class<?> clazz,
|
||||
SoftReference<ReflectionData<T>> oldData,
|
||||
SoftReference<ReflectionData<T>> newData) {
|
||||
return unsafe.compareAndSetObject(clazz, reflectionDataOffset, oldData, newData);
|
||||
return unsafe.compareAndSetReference(clazz, reflectionDataOffset, oldData, newData);
|
||||
}
|
||||
|
||||
static <T> boolean casAnnotationType(Class<?> clazz,
|
||||
AnnotationType oldType,
|
||||
AnnotationType newType) {
|
||||
return unsafe.compareAndSetObject(clazz, annotationTypeOffset, oldType, newType);
|
||||
return unsafe.compareAndSetReference(clazz, annotationTypeOffset, oldType, newType);
|
||||
}
|
||||
|
||||
static <T> boolean casAnnotationData(Class<?> clazz,
|
||||
AnnotationData oldData,
|
||||
AnnotationData newData) {
|
||||
return unsafe.compareAndSetObject(clazz, annotationDataOffset, oldData, newData);
|
||||
return unsafe.compareAndSetReference(clazz, annotationDataOffset, oldData, newData);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3002,7 +3002,7 @@ public abstract class ClassLoader {
|
||||
Class<?> k = ClassLoader.class;
|
||||
long offset;
|
||||
offset = unsafe.objectFieldOffset(k, name);
|
||||
return unsafe.compareAndSetObject(this, offset, null, obj);
|
||||
return unsafe.compareAndSetReference(this, offset, null, obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -287,7 +287,7 @@ public class CallSite {
|
||||
}
|
||||
/*package-private*/
|
||||
MethodHandle getTargetVolatile() {
|
||||
return (MethodHandle) UNSAFE.getObjectVolatile(this, getTargetOffset());
|
||||
return (MethodHandle) UNSAFE.getReferenceVolatile(this, getTargetOffset());
|
||||
}
|
||||
/*package-private*/
|
||||
void setTargetVolatile(MethodHandle newTarget) {
|
||||
|
@ -940,7 +940,7 @@ abstract class ClassSpecializer<T,K,S extends ClassSpecializer<T,K,S>.SpeciesDat
|
||||
Object base = MethodHandleNatives.staticFieldBase(sdField);
|
||||
long offset = MethodHandleNatives.staticFieldOffset(sdField);
|
||||
UNSAFE.loadFence();
|
||||
return metaType.cast(UNSAFE.getObject(base, offset));
|
||||
return metaType.cast(UNSAFE.getReference(base, offset));
|
||||
} catch (Error err) {
|
||||
throw err;
|
||||
} catch (Exception ex) {
|
||||
@ -970,7 +970,7 @@ abstract class ClassSpecializer<T,K,S extends ClassSpecializer<T,K,S>.SpeciesDat
|
||||
Object base = MethodHandleNatives.staticFieldBase(sdField);
|
||||
long offset = MethodHandleNatives.staticFieldOffset(sdField);
|
||||
UNSAFE.storeFence();
|
||||
UNSAFE.putObject(base, offset, speciesData);
|
||||
UNSAFE.putReference(base, offset, speciesData);
|
||||
UNSAFE.storeFence();
|
||||
} catch (Error err) {
|
||||
throw err;
|
||||
|
@ -655,7 +655,7 @@ class DirectMethodHandle extends MethodHandle {
|
||||
case LONG: return GET_LONG_VOLATILE;
|
||||
case FLOAT: return GET_FLOAT_VOLATILE;
|
||||
case DOUBLE: return GET_DOUBLE_VOLATILE;
|
||||
case OBJECT: return GET_OBJECT_VOLATILE;
|
||||
case OBJECT: return GET_REFERENCE_VOLATILE;
|
||||
}
|
||||
} else {
|
||||
switch (wrapper) {
|
||||
@ -667,7 +667,7 @@ class DirectMethodHandle extends MethodHandle {
|
||||
case LONG: return GET_LONG;
|
||||
case FLOAT: return GET_FLOAT;
|
||||
case DOUBLE: return GET_DOUBLE;
|
||||
case OBJECT: return GET_OBJECT;
|
||||
case OBJECT: return GET_REFERENCE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -681,7 +681,7 @@ class DirectMethodHandle extends MethodHandle {
|
||||
case LONG: return PUT_LONG_VOLATILE;
|
||||
case FLOAT: return PUT_FLOAT_VOLATILE;
|
||||
case DOUBLE: return PUT_DOUBLE_VOLATILE;
|
||||
case OBJECT: return PUT_OBJECT_VOLATILE;
|
||||
case OBJECT: return PUT_REFERENCE_VOLATILE;
|
||||
}
|
||||
} else {
|
||||
switch (wrapper) {
|
||||
@ -693,7 +693,7 @@ class DirectMethodHandle extends MethodHandle {
|
||||
case LONG: return PUT_LONG;
|
||||
case FLOAT: return PUT_FLOAT;
|
||||
case DOUBLE: return PUT_DOUBLE;
|
||||
case OBJECT: return PUT_OBJECT;
|
||||
case OBJECT: return PUT_REFERENCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -653,7 +653,7 @@ class InvokerBytecodeGenerator {
|
||||
case LINK_TO_TARGET_METHOD: // fall-through
|
||||
case GENERIC_INVOKER: // fall-through
|
||||
case GENERIC_LINKER: return resolveFrom(name, invokerType.basicType(), Invokers.Holder.class);
|
||||
case GET_OBJECT: // fall-through
|
||||
case GET_REFERENCE: // fall-through
|
||||
case GET_BOOLEAN: // fall-through
|
||||
case GET_BYTE: // fall-through
|
||||
case GET_CHAR: // fall-through
|
||||
@ -662,7 +662,7 @@ class InvokerBytecodeGenerator {
|
||||
case GET_LONG: // fall-through
|
||||
case GET_FLOAT: // fall-through
|
||||
case GET_DOUBLE: // fall-through
|
||||
case PUT_OBJECT: // fall-through
|
||||
case PUT_REFERENCE: // fall-through
|
||||
case PUT_BOOLEAN: // fall-through
|
||||
case PUT_BYTE: // fall-through
|
||||
case PUT_CHAR: // fall-through
|
||||
|
@ -296,10 +296,10 @@ class LambdaForm {
|
||||
DIRECT_NEW_INVOKE_SPECIAL("DMH.newInvokeSpecial", "newInvokeSpecial"),
|
||||
DIRECT_INVOKE_INTERFACE("DMH.invokeInterface", "invokeInterface"),
|
||||
DIRECT_INVOKE_STATIC_INIT("DMH.invokeStaticInit", "invokeStaticInit"),
|
||||
GET_OBJECT("getObject"),
|
||||
PUT_OBJECT("putObject"),
|
||||
GET_OBJECT_VOLATILE("getObjectVolatile"),
|
||||
PUT_OBJECT_VOLATILE("putObjectVolatile"),
|
||||
GET_REFERENCE("getReference"),
|
||||
PUT_REFERENCE("putReference"),
|
||||
GET_REFERENCE_VOLATILE("getReferenceVolatile"),
|
||||
PUT_REFERENCE_VOLATILE("putReferenceVolatile"),
|
||||
GET_INT("getInt"),
|
||||
PUT_INT("putInt"),
|
||||
GET_INT_VOLATILE("getIntVolatile"),
|
||||
|
@ -1663,7 +1663,7 @@ assertEquals("[three, thee, tee]", asListFix.invoke((Object)argv).toString());
|
||||
assert(newForm.customized == null || newForm.customized == this);
|
||||
if (form == newForm) return;
|
||||
newForm.prepare(); // as in MethodHandle.<init>
|
||||
UNSAFE.putObject(this, FORM_OFFSET, newForm);
|
||||
UNSAFE.putReference(this, FORM_OFFSET, newForm);
|
||||
UNSAFE.fullFence();
|
||||
}
|
||||
|
||||
|
@ -1245,8 +1245,8 @@ s.writeObject(this.parameterArray());
|
||||
// store them into the implementation-specific final fields.
|
||||
checkRtype(rtype);
|
||||
checkPtypes(ptypes);
|
||||
UNSAFE.putObject(this, OffsetHolder.rtypeOffset, rtype);
|
||||
UNSAFE.putObject(this, OffsetHolder.ptypesOffset, ptypes);
|
||||
UNSAFE.putReference(this, OffsetHolder.rtypeOffset, rtype);
|
||||
UNSAFE.putReference(this, OffsetHolder.ptypesOffset, ptypes);
|
||||
}
|
||||
|
||||
// Support for resetting final fields while deserializing. Implement Holder
|
||||
|
@ -1999,7 +1999,7 @@ public abstract class VarHandle {
|
||||
/*non-public*/
|
||||
final void updateVarForm(VarForm newVForm) {
|
||||
if (vform == newVForm) return;
|
||||
UNSAFE.putObject(this, VFORM_OFFSET, newVForm);
|
||||
UNSAFE.putReference(this, VFORM_OFFSET, newVForm);
|
||||
UNSAFE.fullFence();
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ final class VarHandles {
|
||||
long foffset = MethodHandleNatives.objectFieldOffset(f);
|
||||
if (!type.isPrimitive()) {
|
||||
return f.isFinal() && !isWriteAllowedOnFinalFields
|
||||
? new VarHandleObjects.FieldInstanceReadOnly(refc, foffset, type)
|
||||
: new VarHandleObjects.FieldInstanceReadWrite(refc, foffset, type);
|
||||
? new VarHandleReferences.FieldInstanceReadOnly(refc, foffset, type)
|
||||
: new VarHandleReferences.FieldInstanceReadWrite(refc, foffset, type);
|
||||
}
|
||||
else if (type == boolean.class) {
|
||||
return f.isFinal() && !isWriteAllowedOnFinalFields
|
||||
@ -95,8 +95,8 @@ final class VarHandles {
|
||||
long foffset = MethodHandleNatives.staticFieldOffset(f);
|
||||
if (!type.isPrimitive()) {
|
||||
return f.isFinal() && !isWriteAllowedOnFinalFields
|
||||
? new VarHandleObjects.FieldStaticReadOnly(base, foffset, type)
|
||||
: new VarHandleObjects.FieldStaticReadWrite(base, foffset, type);
|
||||
? new VarHandleReferences.FieldStaticReadOnly(base, foffset, type)
|
||||
: new VarHandleReferences.FieldStaticReadWrite(base, foffset, type);
|
||||
}
|
||||
else if (type == boolean.class) {
|
||||
return f.isFinal() && !isWriteAllowedOnFinalFields
|
||||
@ -155,7 +155,7 @@ final class VarHandles {
|
||||
int ashift = 31 - Integer.numberOfLeadingZeros(ascale);
|
||||
|
||||
if (!componentType.isPrimitive()) {
|
||||
return new VarHandleObjects.Array(aoffset, ashift, arrayClass);
|
||||
return new VarHandleReferences.Array(aoffset, ashift, arrayClass);
|
||||
}
|
||||
else if (componentType == boolean.class) {
|
||||
return new VarHandleBooleans.Array(aoffset, ashift);
|
||||
|
@ -186,10 +186,17 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@ForceInline
|
||||
static boolean compareAndSet(ByteBufferHandle handle, Object obb, int index, $type$ expected, $type$ value) {
|
||||
ByteBuffer bb = (ByteBuffer) Objects.requireNonNull(obb);
|
||||
return UNSAFE.compareAndSet$RawType$(
|
||||
UNSAFE.getObject(bb, BYTE_BUFFER_HB),
|
||||
#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.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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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.getAndSet$RawType$(
|
||||
UNSAFE.getObject(bb, BYTE_BUFFER_HB),
|
||||
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.getReference(bb, BYTE_BUFFER_HB),
|
||||
address(bb, indexRO(bb, index)),
|
||||
convEndian(handle.be, value)));
|
||||
#end[Object]
|
||||
}
|
||||
|
||||
@ForceInline
|
||||
@ -712,7 +742,7 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
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 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
||||
@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);
|
||||
|
@ -4079,7 +4079,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
|
||||
}
|
||||
|
||||
static void setIntValVolatile(BigDecimal bd, BigInteger val) {
|
||||
unsafe.putObjectVolatile(bd, intValOffset, val);
|
||||
unsafe.putReferenceVolatile(bd, intValOffset, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4600,7 +4600,7 @@ public class BigInteger extends Number implements Comparable<BigInteger> {
|
||||
}
|
||||
|
||||
static void putMag(BigInteger bi, int[] magnitude) {
|
||||
unsafe.putObject(bi, magOffset, magnitude);
|
||||
unsafe.putReference(bi, magOffset, magnitude);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -641,7 +641,7 @@ class Inet6Address extends InetAddress {
|
||||
ipaddress, scope_id, scope_id_set, scope_ifname, scope_ifname_set
|
||||
);
|
||||
|
||||
UNSAFE.putObject(this, FIELDS_OFFSET, h);
|
||||
UNSAFE.putReference(this, FIELDS_OFFSET, h);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1734,7 +1734,7 @@ class InetAddress implements java.io.Serializable {
|
||||
throw new InvalidObjectException("invalid address family type: " + family);
|
||||
}
|
||||
InetAddressHolder h = new InetAddressHolder(host, address, family);
|
||||
UNSAFE.putObject(this, FIELDS_OFFSET, h);
|
||||
UNSAFE.putReference(this, FIELDS_OFFSET, h);
|
||||
}
|
||||
|
||||
/* needed because the serializable fields no longer exist */
|
||||
|
@ -293,7 +293,7 @@ public class InetSocketAddress
|
||||
InetSocketAddressHolder h = new InetSocketAddressHolder(oisHostname,
|
||||
oisAddr,
|
||||
oisPort);
|
||||
UNSAFE.putObject(this, FIELDS_OFFSET, h);
|
||||
UNSAFE.putReference(this, FIELDS_OFFSET, h);
|
||||
}
|
||||
|
||||
private void readObjectNoData()
|
||||
|
@ -1222,6 +1222,6 @@ class Random implements java.io.Serializable {
|
||||
} catch (Exception ex) { throw new Error(ex); }
|
||||
}
|
||||
private void resetSeed(long seedVal) {
|
||||
unsafe.putObjectVolatile(this, seedOffset, new AtomicLong(seedVal));
|
||||
unsafe.putReferenceVolatile(this, seedOffset, new AtomicLong(seedVal));
|
||||
}
|
||||
}
|
||||
|
@ -757,16 +757,16 @@ public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) {
|
||||
return (Node<K,V>)U.getObjectAcquire(tab, ((long)i << ASHIFT) + ABASE);
|
||||
return (Node<K,V>)U.getReferenceAcquire(tab, ((long)i << ASHIFT) + ABASE);
|
||||
}
|
||||
|
||||
static final <K,V> boolean casTabAt(Node<K,V>[] tab, int i,
|
||||
Node<K,V> c, Node<K,V> v) {
|
||||
return U.compareAndSetObject(tab, ((long)i << ASHIFT) + ABASE, c, v);
|
||||
return U.compareAndSetReference(tab, ((long)i << ASHIFT) + ABASE, c, v);
|
||||
}
|
||||
|
||||
static final <K,V> void setTabAt(Node<K,V>[] tab, int i, Node<K,V> v) {
|
||||
U.putObjectRelease(tab, ((long)i << ASHIFT) + ABASE, v);
|
||||
U.putReferenceRelease(tab, ((long)i << ASHIFT) + ABASE, v);
|
||||
}
|
||||
|
||||
/* ---------------- Fields -------------- */
|
||||
|
@ -976,13 +976,13 @@ public class ThreadLocalRandom extends Random {
|
||||
* Erases ThreadLocals by nulling out Thread maps.
|
||||
*/
|
||||
static final void eraseThreadLocals(Thread thread) {
|
||||
U.putObject(thread, THREADLOCALS, null);
|
||||
U.putObject(thread, INHERITABLETHREADLOCALS, null);
|
||||
U.putReference(thread, THREADLOCALS, null);
|
||||
U.putReference(thread, INHERITABLETHREADLOCALS, null);
|
||||
}
|
||||
|
||||
static final void setInheritedAccessControlContext(Thread thread,
|
||||
AccessControlContext acc) {
|
||||
U.putObjectRelease(thread, INHERITEDACCESSCONTROLCONTEXT, acc);
|
||||
U.putReferenceRelease(thread, INHERITEDACCESSCONTROLCONTEXT, acc);
|
||||
}
|
||||
|
||||
// Serialization support
|
||||
|
@ -439,39 +439,39 @@ public abstract class AtomicReferenceFieldUpdater<T,V> {
|
||||
public final boolean compareAndSet(T obj, V expect, V update) {
|
||||
accessCheck(obj);
|
||||
valueCheck(update);
|
||||
return U.compareAndSetObject(obj, offset, expect, update);
|
||||
return U.compareAndSetReference(obj, offset, expect, update);
|
||||
}
|
||||
|
||||
public final boolean weakCompareAndSet(T obj, V expect, V update) {
|
||||
// same implementation as strong form for now
|
||||
accessCheck(obj);
|
||||
valueCheck(update);
|
||||
return U.compareAndSetObject(obj, offset, expect, update);
|
||||
return U.compareAndSetReference(obj, offset, expect, update);
|
||||
}
|
||||
|
||||
public final void set(T obj, V newValue) {
|
||||
accessCheck(obj);
|
||||
valueCheck(newValue);
|
||||
U.putObjectVolatile(obj, offset, newValue);
|
||||
U.putReferenceVolatile(obj, offset, newValue);
|
||||
}
|
||||
|
||||
public final void lazySet(T obj, V newValue) {
|
||||
accessCheck(obj);
|
||||
valueCheck(newValue);
|
||||
U.putObjectRelease(obj, offset, newValue);
|
||||
U.putReferenceRelease(obj, offset, newValue);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public final V get(T obj) {
|
||||
accessCheck(obj);
|
||||
return (V)U.getObjectVolatile(obj, offset);
|
||||
return (V)U.getReferenceVolatile(obj, offset);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public final V getAndSet(T obj, V newValue) {
|
||||
accessCheck(obj);
|
||||
valueCheck(newValue);
|
||||
return (V)U.getAndSetObject(obj, offset, newValue);
|
||||
return (V)U.getAndSetReference(obj, offset, newValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ public class LockSupport {
|
||||
|
||||
private static void setBlocker(Thread t, Object arg) {
|
||||
// Even though volatile, hotspot doesn't need a write barrier here.
|
||||
U.putObject(t, PARKBLOCKER, arg);
|
||||
U.putReference(t, PARKBLOCKER, arg);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -291,7 +291,7 @@ public class LockSupport {
|
||||
public static Object getBlocker(Thread t) {
|
||||
if (t == null)
|
||||
throw new NullPointerException();
|
||||
return U.getObjectVolatile(t, PARKBLOCKER);
|
||||
return U.getReferenceVolatile(t, PARKBLOCKER);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
package java.util.zip;
|
||||
|
||||
import java.nio.Buffer;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.file.attribute.FileTime;
|
||||
import java.security.AccessController;
|
||||
@ -40,7 +39,6 @@ import java.util.concurrent.TimeUnit;
|
||||
import static java.util.zip.ZipConstants.ENDHDR;
|
||||
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import sun.nio.ch.DirectBuffer;
|
||||
|
||||
class ZipUtils {
|
||||
|
||||
@ -295,7 +293,7 @@ class ZipUtils {
|
||||
private static final long byteBufferOffsetOffset = unsafe.objectFieldOffset(ByteBuffer.class, "offset");
|
||||
|
||||
static byte[] getBufferArray(ByteBuffer byteBuffer) {
|
||||
return (byte[]) unsafe.getObject(byteBuffer, byteBufferArrayOffset);
|
||||
return (byte[]) unsafe.getReference(byteBuffer, byteBufferArrayOffset);
|
||||
}
|
||||
|
||||
static int getBufferOffset(ByteBuffer byteBuffer) {
|
||||
|
@ -98,8 +98,8 @@ public final class InnocuousThread extends Thread {
|
||||
|
||||
private InnocuousThread(ThreadGroup group, Runnable target, String name, ClassLoader tccl) {
|
||||
super(group, target, name, 0L, false);
|
||||
UNSAFE.putObjectRelease(this, INHERITEDACCESSCONTROLCONTEXT, ACC);
|
||||
UNSAFE.putObjectRelease(this, CONTEXTCLASSLOADER, tccl);
|
||||
UNSAFE.putReferenceRelease(this, INHERITEDACCESSCONTROLCONTEXT, ACC);
|
||||
UNSAFE.putReferenceRelease(this, CONTEXTCLASSLOADER, tccl);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -120,8 +120,8 @@ public final class InnocuousThread extends Thread {
|
||||
* Drops all thread locals (and inherited thread locals).
|
||||
*/
|
||||
public final void eraseThreadLocals() {
|
||||
UNSAFE.putObject(this, THREAD_LOCALS, null);
|
||||
UNSAFE.putObject(this, INHERITABLE_THREAD_LOCALS, null);
|
||||
UNSAFE.putReference(this, THREAD_LOCALS, null);
|
||||
UNSAFE.putReference(this, INHERITABLE_THREAD_LOCALS, null);
|
||||
}
|
||||
|
||||
// ensure run method is run only once
|
||||
@ -158,10 +158,10 @@ public final class InnocuousThread extends Thread {
|
||||
long tg = UNSAFE.objectFieldOffset(tk, "group");
|
||||
long gp = UNSAFE.objectFieldOffset(gk, "parent");
|
||||
ThreadGroup group = (ThreadGroup)
|
||||
UNSAFE.getObject(Thread.currentThread(), tg);
|
||||
UNSAFE.getReference(Thread.currentThread(), tg);
|
||||
|
||||
while (group != null) {
|
||||
ThreadGroup parent = (ThreadGroup)UNSAFE.getObject(group, gp);
|
||||
ThreadGroup parent = (ThreadGroup)UNSAFE.getReference(group, gp);
|
||||
if (parent == null)
|
||||
break;
|
||||
group = parent;
|
||||
|
@ -179,7 +179,7 @@ public final class Unsafe {
|
||||
* @see #getInt(Object, long)
|
||||
*/
|
||||
@HotSpotIntrinsicCandidate
|
||||
public native Object getObject(Object o, long offset);
|
||||
public native Object getReference(Object o, long offset);
|
||||
|
||||
/**
|
||||
* Stores a reference value into a given Java variable.
|
||||
@ -192,7 +192,7 @@ public final class Unsafe {
|
||||
* @see #putInt(Object, long, int)
|
||||
*/
|
||||
@HotSpotIntrinsicCandidate
|
||||
public native void putObject(Object o, long offset, Object x);
|
||||
public native void putReference(Object o, long offset, Object x);
|
||||
|
||||
/** @see #getInt(Object, long) */
|
||||
@HotSpotIntrinsicCandidate
|
||||
@ -1297,55 +1297,55 @@ public final class Unsafe {
|
||||
* @return {@code true} if successful
|
||||
*/
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final native boolean compareAndSetObject(Object o, long offset,
|
||||
public final native boolean compareAndSetReference(Object o, long offset,
|
||||
Object expected,
|
||||
Object x);
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final native Object compareAndExchangeReference(Object o, long offset,
|
||||
Object expected,
|
||||
Object x);
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object compareAndExchangeReferenceAcquire(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndExchangeReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object compareAndExchangeReferenceRelease(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndExchangeReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetReferencePlain(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetReferenceAcquire(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetReferenceRelease(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetReference(Object o, long offset,
|
||||
Object expected,
|
||||
Object x);
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final native Object compareAndExchangeObject(Object o, long offset,
|
||||
Object expected,
|
||||
Object x);
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object compareAndExchangeObjectAcquire(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndExchangeObject(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object compareAndExchangeObjectRelease(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndExchangeObject(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetObjectPlain(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetObject(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetObjectAcquire(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetObject(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetObjectRelease(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetObject(o, offset, expected, x);
|
||||
}
|
||||
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final boolean weakCompareAndSetObject(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return compareAndSetObject(o, offset, expected, x);
|
||||
Object x) {
|
||||
return compareAndSetReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1958,17 +1958,17 @@ public final class Unsafe {
|
||||
|
||||
/**
|
||||
* Fetches a reference value from a given Java variable, with volatile
|
||||
* load semantics. Otherwise identical to {@link #getObject(Object, long)}
|
||||
* load semantics. Otherwise identical to {@link #getReference(Object, long)}
|
||||
*/
|
||||
@HotSpotIntrinsicCandidate
|
||||
public native Object getObjectVolatile(Object o, long offset);
|
||||
public native Object getReferenceVolatile(Object o, long offset);
|
||||
|
||||
/**
|
||||
* Stores a reference value into a given Java variable, with
|
||||
* volatile store semantics. Otherwise identical to {@link #putObject(Object, long, Object)}
|
||||
* volatile store semantics. Otherwise identical to {@link #putReference(Object, long, Object)}
|
||||
*/
|
||||
@HotSpotIntrinsicCandidate
|
||||
public native void putObjectVolatile(Object o, long offset, Object x);
|
||||
public native void putReferenceVolatile(Object o, long offset, Object x);
|
||||
|
||||
/** Volatile version of {@link #getInt(Object, long)} */
|
||||
@HotSpotIntrinsicCandidate
|
||||
@ -2036,10 +2036,10 @@ public final class Unsafe {
|
||||
|
||||
|
||||
|
||||
/** Acquire version of {@link #getObjectVolatile(Object, long)} */
|
||||
/** Acquire version of {@link #getReferenceVolatile(Object, long)} */
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object getObjectAcquire(Object o, long offset) {
|
||||
return getObjectVolatile(o, offset);
|
||||
public final Object getReferenceAcquire(Object o, long offset) {
|
||||
return getReferenceVolatile(o, offset);
|
||||
}
|
||||
|
||||
/** Acquire version of {@link #getBooleanVolatile(Object, long)} */
|
||||
@ -2091,7 +2091,7 @@ public final class Unsafe {
|
||||
}
|
||||
|
||||
/*
|
||||
* Versions of {@link #putObjectVolatile(Object, long, Object)}
|
||||
* Versions of {@link #putReferenceVolatile(Object, long, Object)}
|
||||
* that do not guarantee immediate visibility of the store to
|
||||
* other threads. This method is generally only useful if the
|
||||
* underlying field is a Java volatile (or if an array cell, one
|
||||
@ -2100,10 +2100,10 @@ public final class Unsafe {
|
||||
* Corresponds to C11 atomic_store_explicit(..., memory_order_release).
|
||||
*/
|
||||
|
||||
/** Release version of {@link #putObjectVolatile(Object, long, Object)} */
|
||||
/** Release version of {@link #putReferenceVolatile(Object, long, Object)} */
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final void putObjectRelease(Object o, long offset, Object x) {
|
||||
putObjectVolatile(o, offset, x);
|
||||
public final void putReferenceRelease(Object o, long offset, Object x) {
|
||||
putReferenceVolatile(o, offset, x);
|
||||
}
|
||||
|
||||
/** Release version of {@link #putBooleanVolatile(Object, long, boolean)} */
|
||||
@ -2156,10 +2156,10 @@ public final class Unsafe {
|
||||
|
||||
// ------------------------------ Opaque --------------------------------------
|
||||
|
||||
/** Opaque version of {@link #getObjectVolatile(Object, long)} */
|
||||
/** Opaque version of {@link #getReferenceVolatile(Object, long)} */
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object getObjectOpaque(Object o, long offset) {
|
||||
return getObjectVolatile(o, offset);
|
||||
public final Object getReferenceOpaque(Object o, long offset) {
|
||||
return getReferenceVolatile(o, offset);
|
||||
}
|
||||
|
||||
/** Opaque version of {@link #getBooleanVolatile(Object, long)} */
|
||||
@ -2210,10 +2210,10 @@ public final class Unsafe {
|
||||
return getDoubleVolatile(o, offset);
|
||||
}
|
||||
|
||||
/** Opaque version of {@link #putObjectVolatile(Object, long, Object)} */
|
||||
/** Opaque version of {@link #putReferenceVolatile(Object, long, Object)} */
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final void putObjectOpaque(Object o, long offset, Object x) {
|
||||
putObjectVolatile(o, offset, x);
|
||||
public final void putReferenceOpaque(Object o, long offset, Object x) {
|
||||
putReferenceVolatile(o, offset, x);
|
||||
}
|
||||
|
||||
/** Opaque version of {@link #putBooleanVolatile(Object, long, boolean)} */
|
||||
@ -2642,29 +2642,29 @@ public final class Unsafe {
|
||||
* @since 1.8
|
||||
*/
|
||||
@HotSpotIntrinsicCandidate
|
||||
public final Object getAndSetObject(Object o, long offset, Object newValue) {
|
||||
public final Object getAndSetReference(Object o, long offset, Object newValue) {
|
||||
Object v;
|
||||
do {
|
||||
v = getObjectVolatile(o, offset);
|
||||
} while (!weakCompareAndSetObject(o, offset, v, newValue));
|
||||
v = getReferenceVolatile(o, offset);
|
||||
} while (!weakCompareAndSetReference(o, offset, v, newValue));
|
||||
return v;
|
||||
}
|
||||
|
||||
@ForceInline
|
||||
public final Object getAndSetObjectRelease(Object o, long offset, Object newValue) {
|
||||
public final Object getAndSetReferenceRelease(Object o, long offset, Object newValue) {
|
||||
Object v;
|
||||
do {
|
||||
v = getObject(o, offset);
|
||||
} while (!weakCompareAndSetObjectRelease(o, offset, v, newValue));
|
||||
v = getReference(o, offset);
|
||||
} while (!weakCompareAndSetReferenceRelease(o, offset, v, newValue));
|
||||
return v;
|
||||
}
|
||||
|
||||
@ForceInline
|
||||
public final Object getAndSetObjectAcquire(Object o, long offset, Object newValue) {
|
||||
public final Object getAndSetReferenceAcquire(Object o, long offset, Object newValue) {
|
||||
Object v;
|
||||
do {
|
||||
v = getObjectAcquire(o, offset);
|
||||
} while (!weakCompareAndSetObjectAcquire(o, offset, v, newValue));
|
||||
v = getReferenceAcquire(o, offset);
|
||||
} while (!weakCompareAndSetReferenceAcquire(o, offset, v, newValue));
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ class UnsafeObjectFieldAccessorImpl extends UnsafeFieldAccessorImpl {
|
||||
|
||||
public Object get(Object obj) throws IllegalArgumentException {
|
||||
ensureObj(obj);
|
||||
return unsafe.getObject(obj, fieldOffset);
|
||||
return unsafe.getReference(obj, fieldOffset);
|
||||
}
|
||||
|
||||
public boolean getBoolean(Object obj) throws IllegalArgumentException {
|
||||
@ -81,7 +81,7 @@ class UnsafeObjectFieldAccessorImpl extends UnsafeFieldAccessorImpl {
|
||||
throwSetIllegalArgumentException(value);
|
||||
}
|
||||
}
|
||||
unsafe.putObject(obj, fieldOffset, value);
|
||||
unsafe.putReference(obj, fieldOffset, value);
|
||||
}
|
||||
|
||||
public void setBoolean(Object obj, boolean z)
|
||||
|
@ -36,7 +36,7 @@ class UnsafeQualifiedObjectFieldAccessorImpl
|
||||
|
||||
public Object get(Object obj) throws IllegalArgumentException {
|
||||
ensureObj(obj);
|
||||
return unsafe.getObjectVolatile(obj, fieldOffset);
|
||||
return unsafe.getReferenceVolatile(obj, fieldOffset);
|
||||
}
|
||||
|
||||
public boolean getBoolean(Object obj) throws IllegalArgumentException {
|
||||
@ -83,7 +83,7 @@ class UnsafeQualifiedObjectFieldAccessorImpl
|
||||
throwSetIllegalArgumentException(value);
|
||||
}
|
||||
}
|
||||
unsafe.putObjectVolatile(obj, fieldOffset, value);
|
||||
unsafe.putReferenceVolatile(obj, fieldOffset, value);
|
||||
}
|
||||
|
||||
public void setBoolean(Object obj, boolean z)
|
||||
|
@ -35,7 +35,7 @@ class UnsafeQualifiedStaticObjectFieldAccessorImpl
|
||||
}
|
||||
|
||||
public Object get(Object obj) throws IllegalArgumentException {
|
||||
return unsafe.getObjectVolatile(base, fieldOffset);
|
||||
return unsafe.getReferenceVolatile(base, fieldOffset);
|
||||
}
|
||||
|
||||
public boolean getBoolean(Object obj) throws IllegalArgumentException {
|
||||
@ -81,7 +81,7 @@ class UnsafeQualifiedStaticObjectFieldAccessorImpl
|
||||
throwSetIllegalArgumentException(value);
|
||||
}
|
||||
}
|
||||
unsafe.putObjectVolatile(base, fieldOffset, value);
|
||||
unsafe.putReferenceVolatile(base, fieldOffset, value);
|
||||
}
|
||||
|
||||
public void setBoolean(Object obj, boolean z)
|
||||
|
@ -33,7 +33,7 @@ class UnsafeStaticObjectFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl
|
||||
}
|
||||
|
||||
public Object get(Object obj) throws IllegalArgumentException {
|
||||
return unsafe.getObject(base, fieldOffset);
|
||||
return unsafe.getReference(base, fieldOffset);
|
||||
}
|
||||
|
||||
public boolean getBoolean(Object obj) throws IllegalArgumentException {
|
||||
@ -79,7 +79,7 @@ class UnsafeStaticObjectFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl
|
||||
throwSetIllegalArgumentException(value);
|
||||
}
|
||||
}
|
||||
unsafe.putObject(base, fieldOffset, value);
|
||||
unsafe.putReference(base, fieldOffset, value);
|
||||
}
|
||||
|
||||
public void setBoolean(Object obj, boolean z)
|
||||
|
@ -624,12 +624,12 @@ class AnnotationInvocationHandler implements InvocationHandler, Serializable {
|
||||
|
||||
static void setType(AnnotationInvocationHandler o,
|
||||
Class<? extends Annotation> type) {
|
||||
unsafe.putObject(o, typeOffset, type);
|
||||
unsafe.putReference(o, typeOffset, type);
|
||||
}
|
||||
|
||||
static void setMemberValues(AnnotationInvocationHandler o,
|
||||
Map<String, Object> memberValues) {
|
||||
unsafe.putObject(o, memberValuesOffset, memberValues);
|
||||
unsafe.putReference(o, memberValuesOffset, memberValues);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -179,7 +179,7 @@ public class PrincipalName implements Cloneable {
|
||||
public Object clone() {
|
||||
try {
|
||||
PrincipalName pName = (PrincipalName) super.clone();
|
||||
UNSAFE.putObject(this, NAME_STRINGS_OFFSET, nameStrings.clone());
|
||||
UNSAFE.putReference(this, NAME_STRINGS_OFFSET, nameStrings.clone());
|
||||
return pName;
|
||||
} catch (CloneNotSupportedException ex) {
|
||||
throw new AssertionError("Should never happen");
|
||||
|
@ -74,8 +74,8 @@ public class SafeThread extends Thread {
|
||||
* Drops all thread locals (and inherited thread locals).
|
||||
*/
|
||||
public final void eraseThreadLocals() {
|
||||
UNSAFE.putObject(this, THREAD_LOCALS, null);
|
||||
UNSAFE.putObject(this, INHERITABLE_THREAD_LOCALS, null);
|
||||
UNSAFE.putReference(this, THREAD_LOCALS, null);
|
||||
UNSAFE.putReference(this, INHERITABLE_THREAD_LOCALS, null);
|
||||
}
|
||||
|
||||
static {
|
||||
|
@ -203,7 +203,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider {
|
||||
assert verifyReadRawObject(ret, baseConstant, initialDisplacement);
|
||||
} else {
|
||||
assert runtime.getConfig().useCompressedOops == compressed;
|
||||
ret = UNSAFE.getObject(base, displacement);
|
||||
ret = UNSAFE.getReference(base, displacement);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -233,7 +233,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider {
|
||||
case Double:
|
||||
return JavaConstant.forDouble(isVolatile ? UNSAFE.getDoubleVolatile(obj, displacement) : UNSAFE.getDouble(obj, displacement));
|
||||
case Object:
|
||||
return HotSpotObjectConstantImpl.forObject(isVolatile ? UNSAFE.getObjectVolatile(obj, displacement) : UNSAFE.getObject(obj, displacement));
|
||||
return HotSpotObjectConstantImpl.forObject(isVolatile ? UNSAFE.getReferenceVolatile(obj, displacement) : UNSAFE.getReference(obj, displacement));
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported kind: " + kind);
|
||||
}
|
||||
|
@ -312,8 +312,8 @@ public class CheckGraalIntrinsics extends GraalTest {
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeIntRelease(Ljava/lang/Object;JII)I",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeLongAcquire(Ljava/lang/Object;JJJ)J",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeLongRelease(Ljava/lang/Object;JJJ)J",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeObjectAcquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeObjectRelease(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeReferenceAcquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeShortAcquire(Ljava/lang/Object;JSS)S",
|
||||
"jdk/internal/misc/Unsafe.compareAndExchangeShortRelease(Ljava/lang/Object;JSS)S",
|
||||
|
||||
@ -330,10 +330,10 @@ public class CheckGraalIntrinsics extends GraalTest {
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetLongAcquire(Ljava/lang/Object;JJJ)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetLongPlain(Ljava/lang/Object;JJJ)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetLongRelease(Ljava/lang/Object;JJJ)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetObjectAcquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetObjectPlain(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetObjectRelease(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetReferenceAcquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetReferencePlain(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetShort(Ljava/lang/Object;JSS)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetShortAcquire(Ljava/lang/Object;JSS)Z",
|
||||
"jdk/internal/misc/Unsafe.weakCompareAndSetShortPlain(Ljava/lang/Object;JSS)Z",
|
||||
@ -399,7 +399,7 @@ public class CheckGraalIntrinsics extends GraalTest {
|
||||
"sun/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J",
|
||||
"sun/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I",
|
||||
"sun/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J",
|
||||
"sun/misc/Unsafe.getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
|
||||
"sun/misc/Unsafe.getAndSetReference(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
|
||||
|
||||
if (isJDK9OrHigher()) {
|
||||
if (!(arch instanceof AArch64)) {
|
||||
@ -412,7 +412,7 @@ public class CheckGraalIntrinsics extends GraalTest {
|
||||
"jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J",
|
||||
"jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I",
|
||||
"jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J",
|
||||
"jdk/internal/misc/Unsafe.getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
|
||||
"jdk/internal/misc/Unsafe.getAndSetReference(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
|
||||
}
|
||||
add(toBeInvestigated,
|
||||
"jdk/internal/misc/Unsafe.getCharUnaligned(Ljava/lang/Object;J)C",
|
||||
|
@ -32,6 +32,7 @@ import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.Una
|
||||
import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.SIN;
|
||||
import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.TAN;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.JAVA_SPECIFICATION_VERSION;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.Java11OrEarlier;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier;
|
||||
|
||||
import org.graalvm.compiler.bytecode.BytecodeProvider;
|
||||
@ -179,8 +180,8 @@ public class AArch64GraphBuilderPlugins {
|
||||
|
||||
for (JavaKind kind : unsafeJavaKinds) {
|
||||
Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
|
||||
|
||||
r.register4("getAndSet" + kind.name(), Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
|
||||
String kindName = (kind == JavaKind.Object && !Java11OrEarlier) ? "Reference" : kind.name();
|
||||
r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
|
||||
@Override
|
||||
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode value) {
|
||||
// Emits a null-check for the otherwise unused receiver
|
||||
@ -192,7 +193,7 @@ public class AArch64GraphBuilderPlugins {
|
||||
});
|
||||
|
||||
if (kind != JavaKind.Boolean && kind.isNumericInteger()) {
|
||||
r.register4("getAndAdd" + kind.name(), Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
|
||||
r.register4("getAndAdd" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
|
||||
@Override
|
||||
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode delta) {
|
||||
// Emits a null-check for the otherwise unused receiver
|
||||
|
@ -33,6 +33,7 @@ import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.Una
|
||||
import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.SIN;
|
||||
import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.TAN;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.JAVA_SPECIFICATION_VERSION;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.Java11OrEarlier;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier;
|
||||
|
||||
import java.util.Arrays;
|
||||
@ -230,18 +231,18 @@ public class AMD64GraphBuilderPlugins {
|
||||
}
|
||||
|
||||
private static void registerUnsafePlugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider, boolean explicitUnsafeNullChecks) {
|
||||
registerUnsafePlugins(new Registration(plugins, Unsafe.class), explicitUnsafeNullChecks, new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object});
|
||||
registerUnsafePlugins(new Registration(plugins, Unsafe.class), explicitUnsafeNullChecks, new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object}, true);
|
||||
if (!Java8OrEarlier) {
|
||||
registerUnsafePlugins(new Registration(plugins, "jdk.internal.misc.Unsafe", replacementsBytecodeProvider), explicitUnsafeNullChecks,
|
||||
new JavaKind[]{JavaKind.Boolean, JavaKind.Byte, JavaKind.Char, JavaKind.Short, JavaKind.Int, JavaKind.Long, JavaKind.Object});
|
||||
new JavaKind[]{JavaKind.Boolean, JavaKind.Byte, JavaKind.Char, JavaKind.Short, JavaKind.Int, JavaKind.Long, JavaKind.Object}, Java11OrEarlier);
|
||||
}
|
||||
}
|
||||
|
||||
private static void registerUnsafePlugins(Registration r, boolean explicitUnsafeNullChecks, JavaKind[] unsafeJavaKinds) {
|
||||
private static void registerUnsafePlugins(Registration r, boolean explicitUnsafeNullChecks, JavaKind[] unsafeJavaKinds, boolean java11OrEarlier) {
|
||||
for (JavaKind kind : unsafeJavaKinds) {
|
||||
Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
|
||||
|
||||
r.register4("getAndSet" + kind.name(), Receiver.class, Object.class, long.class, javaClass, new UnsafeAccessPlugin(kind, explicitUnsafeNullChecks) {
|
||||
String kindName = (kind == JavaKind.Object && !java11OrEarlier) ? "Reference" : kind.name();
|
||||
r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new UnsafeAccessPlugin(kind, explicitUnsafeNullChecks) {
|
||||
@Override
|
||||
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode value) {
|
||||
// Emits a null-check for the otherwise unused receiver
|
||||
@ -251,7 +252,7 @@ public class AMD64GraphBuilderPlugins {
|
||||
}
|
||||
});
|
||||
if (kind != JavaKind.Boolean && kind.isNumericInteger()) {
|
||||
r.register4("getAndAdd" + kind.name(), Receiver.class, Object.class, long.class, javaClass, new UnsafeAccessPlugin(kind, explicitUnsafeNullChecks) {
|
||||
r.register4("getAndAdd" + kindName, Receiver.class, Object.class, long.class, javaClass, new UnsafeAccessPlugin(kind, explicitUnsafeNullChecks) {
|
||||
@Override
|
||||
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode delta) {
|
||||
// Emits a null-check for the otherwise unused receiver
|
||||
|
@ -121,9 +121,9 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.compareAndSetDouble(container, doubleOffset, 0.125, 0.25);
|
||||
}
|
||||
|
||||
public static boolean unsafeCompareAndSetObject() {
|
||||
public static boolean unsafeCompareAndSetReference() {
|
||||
Container container = new Container();
|
||||
return unsafe.compareAndSetObject(container, objectOffset, dummyValue, newDummyValue);
|
||||
return unsafe.compareAndSetReference(container, objectOffset, dummyValue, newDummyValue);
|
||||
}
|
||||
|
||||
public static boolean unsafeCompareAndExchangeBoolean() {
|
||||
@ -166,9 +166,9 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.compareAndExchangeDouble(container, doubleOffset, 0.125, 0.25);
|
||||
}
|
||||
|
||||
public static Object unsafeCompareAndExchangeObject() {
|
||||
public static Object unsafeCompareAndExchangeReference() {
|
||||
Container container = new Container();
|
||||
return unsafe.compareAndExchangeObject(container, objectOffset, dummyValue, newDummyValue);
|
||||
return unsafe.compareAndExchangeReference(container, objectOffset, dummyValue, newDummyValue);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -183,7 +183,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
testGraph("unsafeCompareAndSetLong");
|
||||
testGraph("unsafeCompareAndSetFloat");
|
||||
testGraph("unsafeCompareAndSetDouble");
|
||||
testGraph("unsafeCompareAndSetObject");
|
||||
testGraph("unsafeCompareAndSetReference");
|
||||
testGraph("unsafeCompareAndExchangeBoolean");
|
||||
testGraph("unsafeCompareAndExchangeByte");
|
||||
testGraph("unsafeCompareAndExchangeChar");
|
||||
@ -192,7 +192,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
testGraph("unsafeCompareAndExchangeLong");
|
||||
testGraph("unsafeCompareAndExchangeFloat");
|
||||
testGraph("unsafeCompareAndExchangeDouble");
|
||||
testGraph("unsafeCompareAndExchangeObject");
|
||||
testGraph("unsafeCompareAndExchangeReference");
|
||||
}
|
||||
test("unsafeCompareAndSetBoolean");
|
||||
test("unsafeCompareAndSetByte");
|
||||
@ -202,7 +202,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
test("unsafeCompareAndSetLong");
|
||||
test("unsafeCompareAndSetFloat");
|
||||
test("unsafeCompareAndSetDouble");
|
||||
test("unsafeCompareAndSetObject");
|
||||
test("unsafeCompareAndSetReference");
|
||||
test("unsafeCompareAndExchangeBoolean");
|
||||
test("unsafeCompareAndExchangeByte");
|
||||
test("unsafeCompareAndExchangeChar");
|
||||
@ -211,7 +211,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
test("unsafeCompareAndExchangeLong");
|
||||
test("unsafeCompareAndExchangeFloat");
|
||||
test("unsafeCompareAndExchangeDouble");
|
||||
test("unsafeCompareAndExchangeObject");
|
||||
test("unsafeCompareAndExchangeReference");
|
||||
}
|
||||
|
||||
public static int unsafeGetAndAddByte() {
|
||||
@ -288,11 +288,11 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.getAndSetLong(container, longOffset, 0x12345678abL);
|
||||
}
|
||||
|
||||
public static Object unsafeGetAndSetObject() {
|
||||
public static Object unsafeGetAndSetReference() {
|
||||
Container container = new Container();
|
||||
container.objectField = null;
|
||||
Container other = new Container();
|
||||
return unsafe.getAndSetObject(container, objectOffset, other);
|
||||
return unsafe.getAndSetReference(container, objectOffset, other);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -307,7 +307,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
if (target.arch instanceof AMD64 || target.arch instanceof AArch64) {
|
||||
testGraph("unsafeGetAndSetInt");
|
||||
testGraph("unsafeGetAndSetLong");
|
||||
testGraph("unsafeGetAndSetObject");
|
||||
testGraph("unsafeGetAndSetReference");
|
||||
}
|
||||
test("unsafeGetAndSetBoolean");
|
||||
test("unsafeGetAndSetByte");
|
||||
@ -315,7 +315,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
test("unsafeGetAndSetShort");
|
||||
test("unsafeGetAndSetInt");
|
||||
test("unsafeGetAndSetLong");
|
||||
test("unsafeGetAndSetObject");
|
||||
test("unsafeGetAndSetReference");
|
||||
}
|
||||
|
||||
public static void fieldInstance() {
|
||||
@ -562,10 +562,10 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.getDouble(container, doubleOffset);
|
||||
}
|
||||
|
||||
public static Object unsafeGetPutObject() {
|
||||
public static Object unsafeGetPutReference() {
|
||||
Container container = new Container();
|
||||
unsafe.putObject(container, objectOffset, "Hello there");
|
||||
return unsafe.getObject(container, objectOffset);
|
||||
unsafe.putReference(container, objectOffset, "Hello there");
|
||||
return unsafe.getReference(container, objectOffset);
|
||||
}
|
||||
|
||||
public static boolean unsafeGetPutBooleanOpaque() {
|
||||
@ -616,10 +616,10 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.getDoubleOpaque(container, doubleOffset);
|
||||
}
|
||||
|
||||
public static Object unsafeGetPutObjectOpaque() {
|
||||
public static Object unsafeGetPutReferenceOpaque() {
|
||||
Container container = new Container();
|
||||
unsafe.putObjectOpaque(container, objectOffset, "Hello there");
|
||||
return unsafe.getObjectOpaque(container, objectOffset);
|
||||
unsafe.putReferenceOpaque(container, objectOffset, "Hello there");
|
||||
return unsafe.getReferenceOpaque(container, objectOffset);
|
||||
}
|
||||
|
||||
public static boolean unsafeGetPutBooleanRA() {
|
||||
@ -670,10 +670,10 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.getDoubleAcquire(container, doubleOffset);
|
||||
}
|
||||
|
||||
public static Object unsafeGetPutObjectRA() {
|
||||
public static Object unsafeGetPutReferenceRA() {
|
||||
Container container = new Container();
|
||||
unsafe.putObjectRelease(container, objectOffset, "Hello there");
|
||||
return unsafe.getObjectAcquire(container, objectOffset);
|
||||
unsafe.putReferenceRelease(container, objectOffset, "Hello there");
|
||||
return unsafe.getReferenceAcquire(container, objectOffset);
|
||||
}
|
||||
|
||||
public static boolean unsafeGetPutBooleanVolatile() {
|
||||
@ -724,10 +724,10 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
return unsafe.getDoubleVolatile(container, doubleOffset);
|
||||
}
|
||||
|
||||
public static Object unsafeGetPutObjectVolatile() {
|
||||
public static Object unsafeGetPutReferenceVolatile() {
|
||||
Container container = new Container();
|
||||
unsafe.putObjectVolatile(container, objectOffset, "Hello there");
|
||||
return unsafe.getObjectVolatile(container, objectOffset);
|
||||
unsafe.putReferenceVolatile(container, objectOffset, "Hello there");
|
||||
return unsafe.getReferenceVolatile(container, objectOffset);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -786,7 +786,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
testGraph("unsafeGetPutLongRA");
|
||||
testGraph("unsafeGetPutFloatRA");
|
||||
testGraph("unsafeGetPutDoubleRA");
|
||||
testGraph("unsafeGetPutObjectRA");
|
||||
testGraph("unsafeGetPutReferenceRA");
|
||||
|
||||
test("unsafeGetPutBooleanRA");
|
||||
test("unsafeGetPutByteRA");
|
||||
@ -796,7 +796,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
test("unsafeGetPutLongRA");
|
||||
test("unsafeGetPutFloatRA");
|
||||
test("unsafeGetPutDoubleRA");
|
||||
test("unsafeGetPutObjectRA");
|
||||
test("unsafeGetPutReferenceRA");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -809,7 +809,7 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
testGraph("unsafeGetPutLongVolatile");
|
||||
testGraph("unsafeGetPutFloatVolatile");
|
||||
testGraph("unsafeGetPutDoubleVolatile");
|
||||
testGraph("unsafeGetPutObjectVolatile");
|
||||
testGraph("unsafeGetPutReferenceVolatile");
|
||||
|
||||
test("unsafeGetPutBooleanVolatile");
|
||||
test("unsafeGetPutByteVolatile");
|
||||
@ -819,6 +819,6 @@ public class UnsafeReplacementsTest extends MethodSubstitutionTest {
|
||||
test("unsafeGetPutLongVolatile");
|
||||
test("unsafeGetPutFloatVolatile");
|
||||
test("unsafeGetPutDoubleVolatile");
|
||||
test("unsafeGetPutObjectVolatile");
|
||||
test("unsafeGetPutReferenceVolatile");
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ import static jdk.vm.ci.code.MemoryBarriers.LOAD_STORE;
|
||||
import static jdk.vm.ci.code.MemoryBarriers.STORE_LOAD;
|
||||
import static jdk.vm.ci.code.MemoryBarriers.STORE_STORE;
|
||||
import static org.graalvm.compiler.nodes.NamedLocationIdentity.OFF_HEAP_LOCATION;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.Java11OrEarlier;
|
||||
import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
@ -270,10 +271,11 @@ public class StandardGraphBuilderPlugins {
|
||||
}
|
||||
|
||||
private abstract static class UnsafeCompareAndUpdatePluginsRegistrar {
|
||||
public void register(Registration r, String casPrefix, boolean explicitUnsafeNullChecks, JavaKind[] compareAndSwapTypes) {
|
||||
public void register(Registration r, String casPrefix, boolean explicitUnsafeNullChecks, JavaKind[] compareAndSwapTypes, boolean java11OrEarlier) {
|
||||
for (JavaKind kind : compareAndSwapTypes) {
|
||||
Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
|
||||
r.register5(casPrefix + kind.name(), Receiver.class, Object.class, long.class, javaClass, javaClass, new UnsafeAccessPlugin(returnKind(kind), explicitUnsafeNullChecks) {
|
||||
String kindName = (kind == JavaKind.Object && !java11OrEarlier) ? "Reference" : kind.name();
|
||||
r.register5(casPrefix + kindName, Receiver.class, Object.class, long.class, javaClass, javaClass, new UnsafeAccessPlugin(returnKind(kind), explicitUnsafeNullChecks) {
|
||||
@Override
|
||||
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode expected, ValueNode x) {
|
||||
// Emits a null-check for the otherwise unused receiver
|
||||
@ -332,10 +334,10 @@ public class StandardGraphBuilderPlugins {
|
||||
|
||||
private static void registerPlatformSpecificUnsafePlugins(JavaKind[] supportedCasKinds, Registration r, boolean java8OrEarlier, boolean explicitUnsafeNullChecks) {
|
||||
if (java8OrEarlier) {
|
||||
unsafeCompareAndSwapPluginsRegistrar.register(r, "compareAndSwap", explicitUnsafeNullChecks, new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object});
|
||||
unsafeCompareAndSwapPluginsRegistrar.register(r, "compareAndSwap", explicitUnsafeNullChecks, new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object}, true);
|
||||
} else {
|
||||
unsafeCompareAndSwapPluginsRegistrar.register(r, "compareAndSet", explicitUnsafeNullChecks, supportedCasKinds);
|
||||
unsafeCompareAndExchangePluginsRegistrar.register(r, "compareAndExchange", explicitUnsafeNullChecks, supportedCasKinds);
|
||||
unsafeCompareAndSwapPluginsRegistrar.register(r, "compareAndSet", explicitUnsafeNullChecks, supportedCasKinds, Java11OrEarlier);
|
||||
unsafeCompareAndExchangePluginsRegistrar.register(r, "compareAndExchange", explicitUnsafeNullChecks, supportedCasKinds, Java11OrEarlier);
|
||||
}
|
||||
}
|
||||
|
||||
@ -346,11 +348,11 @@ public class StandardGraphBuilderPlugins {
|
||||
}
|
||||
}
|
||||
|
||||
private static void registerUnsafePlugins(Registration r, boolean java8OrEarlier, boolean explicitUnsafeNullChecks) {
|
||||
private static void registerUnsafePlugins(Registration r, boolean sunMiscUnsafe, boolean explicitUnsafeNullChecks) {
|
||||
for (JavaKind kind : JavaKind.values()) {
|
||||
if ((kind.isPrimitive() && kind != JavaKind.Void) || kind == JavaKind.Object) {
|
||||
Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
|
||||
String kindName = kind.name();
|
||||
String kindName = (kind == JavaKind.Object && !sunMiscUnsafe && !Java11OrEarlier) ? "Reference" : kind.name();
|
||||
String getName = "get" + kindName;
|
||||
String putName = "put" + kindName;
|
||||
// Object-based accesses
|
||||
@ -360,7 +362,7 @@ public class StandardGraphBuilderPlugins {
|
||||
r.register3(getName + "Volatile", Receiver.class, Object.class, long.class, new UnsafeGetPlugin(kind, AccessKind.VOLATILE, explicitUnsafeNullChecks));
|
||||
r.register4(putName + "Volatile", Receiver.class, Object.class, long.class, javaClass, new UnsafePutPlugin(kind, AccessKind.VOLATILE, explicitUnsafeNullChecks));
|
||||
// Ordered object-based accesses
|
||||
if (java8OrEarlier) {
|
||||
if (sunMiscUnsafe) {
|
||||
if (kind == JavaKind.Int || kind == JavaKind.Long || kind == JavaKind.Object) {
|
||||
r.register4("putOrdered" + kindName, Receiver.class, Object.class, long.class, javaClass, new UnsafePutPlugin(kind, AccessKind.RELEASE_ACQUIRE, explicitUnsafeNullChecks));
|
||||
}
|
||||
|
@ -61,6 +61,11 @@ public final class GraalServices {
|
||||
*/
|
||||
public static final boolean Java8OrEarlier = JAVA_SPECIFICATION_VERSION <= 8;
|
||||
|
||||
/**
|
||||
* Determines if the Java runtime is version 11 or earlier.
|
||||
*/
|
||||
public static final boolean Java11OrEarlier = JAVA_SPECIFICATION_VERSION <= 11;
|
||||
|
||||
private GraalServices() {
|
||||
}
|
||||
|
||||
|
@ -196,7 +196,7 @@ public final class Unsafe {
|
||||
*/
|
||||
@ForceInline
|
||||
public Object getObject(Object o, long offset) {
|
||||
return theInternalUnsafe.getObject(o, offset);
|
||||
return theInternalUnsafe.getReference(o, offset);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -211,7 +211,7 @@ public final class Unsafe {
|
||||
*/
|
||||
@ForceInline
|
||||
public void putObject(Object o, long offset, Object x) {
|
||||
theInternalUnsafe.putObject(o, offset, x);
|
||||
theInternalUnsafe.putReference(o, offset, x);
|
||||
}
|
||||
|
||||
/** @see #getInt(Object, long) */
|
||||
@ -860,7 +860,7 @@ public final class Unsafe {
|
||||
public final boolean compareAndSwapObject(Object o, long offset,
|
||||
Object expected,
|
||||
Object x) {
|
||||
return theInternalUnsafe.compareAndSetObject(o, offset, expected, x);
|
||||
return theInternalUnsafe.compareAndSetReference(o, offset, expected, x);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -901,7 +901,7 @@ public final class Unsafe {
|
||||
*/
|
||||
@ForceInline
|
||||
public Object getObjectVolatile(Object o, long offset) {
|
||||
return theInternalUnsafe.getObjectVolatile(o, offset);
|
||||
return theInternalUnsafe.getReferenceVolatile(o, offset);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -910,7 +910,7 @@ public final class Unsafe {
|
||||
*/
|
||||
@ForceInline
|
||||
public void putObjectVolatile(Object o, long offset, Object x) {
|
||||
theInternalUnsafe.putObjectVolatile(o, offset, x);
|
||||
theInternalUnsafe.putReferenceVolatile(o, offset, x);
|
||||
}
|
||||
|
||||
/** Volatile version of {@link #getInt(Object, long)} */
|
||||
@ -1020,7 +1020,7 @@ public final class Unsafe {
|
||||
*/
|
||||
@ForceInline
|
||||
public void putOrderedObject(Object o, long offset, Object x) {
|
||||
theInternalUnsafe.putObjectRelease(o, offset, x);
|
||||
theInternalUnsafe.putReferenceRelease(o, offset, x);
|
||||
}
|
||||
|
||||
/** Ordered/Lazy version of {@link #putIntVolatile(Object, long, int)} */
|
||||
@ -1168,7 +1168,7 @@ public final class Unsafe {
|
||||
*/
|
||||
@ForceInline
|
||||
public final Object getAndSetObject(Object o, long offset, Object newValue) {
|
||||
return theInternalUnsafe.getAndSetObject(o, offset, newValue);
|
||||
return theInternalUnsafe.getAndSetReference(o, offset, newValue);
|
||||
}
|
||||
|
||||
|
||||
|
@ -95,12 +95,12 @@ public class Test7190310_unsafe {
|
||||
|
||||
obj = getRef3(unsafe, t, referent_offset);
|
||||
if (obj != o) {
|
||||
System.out.println("FAILED: unsafe.getObject(Object, " + referent_offset + ") " + obj + " != " + o);
|
||||
System.out.println("FAILED: unsafe.getReference(Object, " + referent_offset + ") " + obj + " != " + o);
|
||||
System.exit(97);
|
||||
}
|
||||
obj = getRef4(unsafe, t, referent_offset);
|
||||
if (obj != o) {
|
||||
System.out.println("FAILED: unsafe.getObject(Test7190310, " + referent_offset + ") " + obj + " != " + o);
|
||||
System.out.println("FAILED: unsafe.getReference(Test7190310, " + referent_offset + ") " + obj + " != " + o);
|
||||
System.exit(97);
|
||||
}
|
||||
}
|
||||
@ -115,17 +115,17 @@ public class Test7190310_unsafe {
|
||||
}
|
||||
obj = getRef1(unsafe, ref, referent_offset);
|
||||
if (obj != str) {
|
||||
System.out.println("FAILED: unsafe.getObject(weakRef, " + referent_offset + ") " + obj + " != " + str);
|
||||
System.out.println("FAILED: unsafe.getReference(weakRef, " + referent_offset + ") " + obj + " != " + str);
|
||||
return false;
|
||||
}
|
||||
obj = getRef2(unsafe, ref, referent_offset);
|
||||
if (obj != str) {
|
||||
System.out.println("FAILED: unsafe.getObject(abstRef, " + referent_offset + ") " + obj + " != " + str);
|
||||
System.out.println("FAILED: unsafe.getReference(abstRef, " + referent_offset + ") " + obj + " != " + str);
|
||||
return false;
|
||||
}
|
||||
obj = getRef3(unsafe, ref, referent_offset);
|
||||
if (obj != str) {
|
||||
System.out.println("FAILED: unsafe.getObject(Object, " + referent_offset + ") " + obj + " != " + str);
|
||||
System.out.println("FAILED: unsafe.getReference(Object, " + referent_offset + ") " + obj + " != " + str);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -136,19 +136,19 @@ public class Test7190310_unsafe {
|
||||
}
|
||||
|
||||
static Object getRef1(Unsafe unsafe, WeakReference ref, long referent_offset) throws Exception {
|
||||
return unsafe.getObject(ref, referent_offset);
|
||||
return unsafe.getReference(ref, referent_offset);
|
||||
}
|
||||
|
||||
static Object getRef2(Unsafe unsafe, Reference ref, long referent_offset) throws Exception {
|
||||
return unsafe.getObject(ref, referent_offset);
|
||||
return unsafe.getReference(ref, referent_offset);
|
||||
}
|
||||
|
||||
static Object getRef3(Unsafe unsafe, Object ref, long referent_offset) throws Exception {
|
||||
return unsafe.getObject(ref, referent_offset);
|
||||
return unsafe.getReference(ref, referent_offset);
|
||||
}
|
||||
|
||||
static Object getRef4(Unsafe unsafe, Test7190310_unsafe ref, long referent_offset) throws Exception {
|
||||
return unsafe.getObject(ref, referent_offset);
|
||||
return unsafe.getReference(ref, referent_offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,6 +75,6 @@ class TestUnsafeVolatileCAS
|
||||
|
||||
public void testObj(Object x, Object o)
|
||||
{
|
||||
unsafe.compareAndSetObject(this, f_obj_off, x, o);
|
||||
unsafe.compareAndSetReference(this, f_obj_off, x, o);
|
||||
}
|
||||
}
|
||||
|
@ -51,6 +51,6 @@ class TestUnsafeVolatileLoad
|
||||
|
||||
public int testObj()
|
||||
{
|
||||
return ((Integer)unsafe.getObjectVolatile(this, f_obj_off));
|
||||
return ((Integer)unsafe.getReferenceVolatile(this, f_obj_off));
|
||||
}
|
||||
}
|
||||
|
@ -74,6 +74,6 @@ class TestUnsafeVolatileStore
|
||||
|
||||
public void testObj(Object o)
|
||||
{
|
||||
unsafe.putObjectVolatile(this, f_obj_off, o);
|
||||
unsafe.putReferenceVolatile(this, f_obj_off, o);
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @bug 8059022
|
||||
* @modules java.base/jdk.internal.misc:+open
|
||||
* @summary Validate barriers after Unsafe getObject, CAS and swap (GetAndSet)
|
||||
* @summary Validate barriers after Unsafe getReference, CAS and swap (GetAndSet)
|
||||
* @requires vm.gc.Z & !vm.graal.enabled
|
||||
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+UnlockDiagnosticVMOptions -XX:+ZUnmapBadViews -XX:ZCollectionInterval=1 -XX:-CreateCoredumpOnCrash -XX:CompileCommand=dontinline,*::mergeImpl* compiler.gcbarriers.UnsafeIntrinsicsTest
|
||||
*/
|
||||
@ -263,19 +263,19 @@ class Runner implements Runnable {
|
||||
|
||||
private Node mergeImplLoad(Node startNode, Node expectedNext, Node head) {
|
||||
// Atomic load version
|
||||
Node temp = (Node) UNSAFE.getObject(startNode, offset);
|
||||
Node temp = (Node) UNSAFE.getReference(startNode, offset);
|
||||
startNode.setNext(head);
|
||||
return temp;
|
||||
}
|
||||
|
||||
private Node mergeImplSwap(Node startNode, Node expectedNext, Node head) {
|
||||
// Swap version
|
||||
return (Node) UNSAFE.getAndSetObject(startNode, offset, head);
|
||||
return (Node) UNSAFE.getAndSetReference(startNode, offset, head);
|
||||
}
|
||||
|
||||
private Node mergeImplCAS(Node startNode, Node expectedNext, Node head) {
|
||||
// CAS - should always be true within a single thread - no other thread can have overwritten
|
||||
if (!UNSAFE.compareAndSetObject(startNode, offset, expectedNext, head)) {
|
||||
if (!UNSAFE.compareAndSetReference(startNode, offset, expectedNext, head)) {
|
||||
throw new Error("CAS should always succeed on thread local objects, check you barrier implementation");
|
||||
}
|
||||
return expectedNext; // continue on old circle
|
||||
@ -283,7 +283,7 @@ class Runner implements Runnable {
|
||||
|
||||
private Node mergeImplCASFail(Node startNode, Node expectedNext, Node head) {
|
||||
// Force a fail
|
||||
if (UNSAFE.compareAndSetObject(startNode, offset, "fail", head)) {
|
||||
if (UNSAFE.compareAndSetReference(startNode, offset, "fail", head)) {
|
||||
throw new Error("This CAS should always fail, check you barrier implementation");
|
||||
}
|
||||
if (startNode.next() != expectedNext) {
|
||||
@ -294,7 +294,7 @@ class Runner implements Runnable {
|
||||
|
||||
private Node mergeImplWeakCAS(Node startNode, Node expectedNext, Node head) {
|
||||
// Weak CAS - should always be true within a single thread - no other thread can have overwritten
|
||||
if (!UNSAFE.weakCompareAndSetObject(startNode, offset, expectedNext, head)) {
|
||||
if (!UNSAFE.weakCompareAndSetReference(startNode, offset, expectedNext, head)) {
|
||||
throw new Error("Weak CAS should always succeed on thread local objects, check you barrier implementation");
|
||||
}
|
||||
return expectedNext; // continue on old circle
|
||||
@ -302,7 +302,7 @@ class Runner implements Runnable {
|
||||
|
||||
private Node mergeImplWeakCASFail(Node startNode, Node expectedNext, Node head) {
|
||||
// Force a fail
|
||||
if (UNSAFE.weakCompareAndSetObject(startNode, offset, "fail", head)) {
|
||||
if (UNSAFE.weakCompareAndSetReference(startNode, offset, "fail", head)) {
|
||||
throw new Error("This weak CAS should always fail, check you barrier implementation");
|
||||
}
|
||||
if (startNode.next() != expectedNext) {
|
||||
@ -313,7 +313,7 @@ class Runner implements Runnable {
|
||||
|
||||
private Node mergeImplCMPX(Node startNode, Node expectedNext, Node head) {
|
||||
// CmpX - should always be true within a single thread - no other thread can have overwritten
|
||||
Object res = UNSAFE.compareAndExchangeObject(startNode, offset, expectedNext, head);
|
||||
Object res = UNSAFE.compareAndExchangeReference(startNode, offset, expectedNext, head);
|
||||
if (!res.equals(expectedNext)) {
|
||||
throw new Error("Fail CmpX should always succeed on thread local objects, check you barrier implementation");
|
||||
}
|
||||
@ -321,7 +321,7 @@ class Runner implements Runnable {
|
||||
}
|
||||
|
||||
private Node mergeImplCMPXFail(Node startNode, Node expectedNext, Node head) {
|
||||
Object res = UNSAFE.compareAndExchangeObject(startNode, offset, head, head);
|
||||
Object res = UNSAFE.compareAndExchangeReference(startNode, offset, head, head);
|
||||
if (startNode.next() != expectedNext) {
|
||||
throw new Error("Shouldn't have changed");
|
||||
}
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8167298
|
||||
* @summary Unsafe.compareAndExchangeObject should keep track of returned type after matching
|
||||
* @summary Unsafe.compareAndExchangeReference should keep track of returned type after matching
|
||||
* @modules java.base/jdk.internal.misc
|
||||
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:-UseCompressedOops TestCAEAntiDep
|
||||
*
|
||||
@ -54,7 +54,7 @@ public class TestCAEAntiDep {
|
||||
}
|
||||
|
||||
static int m(TestCAEAntiDep test, Object expected, Object x) {
|
||||
C old = (C)UNSAFE.compareAndExchangeObject(test, O_OFFSET, expected, x);
|
||||
C old = (C)UNSAFE.compareAndExchangeReference(test, O_OFFSET, expected, x);
|
||||
int res = old.f1;
|
||||
old.f1 = 0x42;
|
||||
return res;
|
||||
|
@ -52,7 +52,7 @@ public class TestUnsafeMismatchedArrayFieldAccess {
|
||||
static final long array_offset;
|
||||
|
||||
void m() {
|
||||
UNSAFE.getObject(this, array_offset);
|
||||
UNSAFE.getReference(this, array_offset);
|
||||
}
|
||||
|
||||
static public void main(String[] args) {
|
||||
|
@ -49,7 +49,7 @@ public class UnsafeAccess {
|
||||
|
||||
static Object helperUnsafeAccess(Object o, boolean isObjArray) {
|
||||
if (isObjArray) {
|
||||
U.putObject(o, off, new Object());
|
||||
U.putReference(o, off, new Object());
|
||||
}
|
||||
return o;
|
||||
}
|
||||
@ -63,8 +63,8 @@ public class UnsafeAccess {
|
||||
|
||||
static Object helperUnsafeLoadStore(Object o, boolean isObjArray) {
|
||||
if (isObjArray) {
|
||||
Object o1 = U.getObject(o, off);
|
||||
U.compareAndSetObject(o, off, o1, new Object());
|
||||
Object o1 = U.getReference(o, off);
|
||||
U.compareAndSetReference(o, off, o1, new Object());
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8027751
|
||||
* @summary C1 crashes generating G1 post-barrier in Unsafe.getAndSetObject() intrinsic because of the new value spill
|
||||
* @summary C1 crashes generating G1 post-barrier in Unsafe.getAndSetReference() intrinsic because of the new value spill
|
||||
* @requires vm.gc.G1
|
||||
*
|
||||
* @run main/othervm -XX:+UseG1GC compiler.regalloc.C1ObjectSpillInLogicOp
|
||||
|
@ -71,6 +71,6 @@ public class GetUnsafeObjectG1PreBarrier {
|
||||
}
|
||||
|
||||
private void readField(Object o, long fieldOffset) {
|
||||
unsafe.getObject(o, fieldOffset);
|
||||
unsafe.getReference(o, fieldOffset);
|
||||
}
|
||||
}
|
||||
|
@ -119,141 +119,141 @@ public class JdkInternalMiscUnsafeAccessTestObject {
|
||||
static void testAccess(Object base, long offset) {
|
||||
// Plain
|
||||
{
|
||||
UNSAFE.putObject(base, offset, "foo");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
UNSAFE.putReference(base, offset, "foo");
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "set Object value");
|
||||
}
|
||||
|
||||
// Volatile
|
||||
{
|
||||
UNSAFE.putObjectVolatile(base, offset, "bar");
|
||||
Object x = UNSAFE.getObjectVolatile(base, offset);
|
||||
UNSAFE.putReferenceVolatile(base, offset, "bar");
|
||||
Object x = UNSAFE.getReferenceVolatile(base, offset);
|
||||
assertEquals(x, "bar", "putVolatile Object value");
|
||||
}
|
||||
|
||||
|
||||
// Lazy
|
||||
{
|
||||
UNSAFE.putObjectRelease(base, offset, "foo");
|
||||
Object x = UNSAFE.getObjectAcquire(base, offset);
|
||||
UNSAFE.putReferenceRelease(base, offset, "foo");
|
||||
Object x = UNSAFE.getReferenceAcquire(base, offset);
|
||||
assertEquals(x, "foo", "putRelease Object value");
|
||||
}
|
||||
|
||||
// Opaque
|
||||
{
|
||||
UNSAFE.putObjectOpaque(base, offset, "bar");
|
||||
Object x = UNSAFE.getObjectOpaque(base, offset);
|
||||
UNSAFE.putReferenceOpaque(base, offset, "bar");
|
||||
Object x = UNSAFE.getReferenceOpaque(base, offset);
|
||||
assertEquals(x, "bar", "putOpaque Object value");
|
||||
}
|
||||
|
||||
|
||||
UNSAFE.putObject(base, offset, "foo");
|
||||
UNSAFE.putReference(base, offset, "foo");
|
||||
|
||||
// Compare
|
||||
{
|
||||
boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "bar");
|
||||
boolean r = UNSAFE.compareAndSetReference(base, offset, "foo", "bar");
|
||||
assertEquals(r, true, "success compareAndSet Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "bar", "success compareAndSet Object value");
|
||||
}
|
||||
|
||||
{
|
||||
boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "baz");
|
||||
boolean r = UNSAFE.compareAndSetReference(base, offset, "foo", "baz");
|
||||
assertEquals(r, false, "failing compareAndSet Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "bar", "failing compareAndSet Object value");
|
||||
}
|
||||
|
||||
// Advanced compare
|
||||
{
|
||||
Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "foo");
|
||||
Object r = UNSAFE.compareAndExchangeReference(base, offset, "bar", "foo");
|
||||
assertEquals(r, "bar", "success compareAndExchange Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "success compareAndExchange Object value");
|
||||
}
|
||||
|
||||
{
|
||||
Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "baz");
|
||||
Object r = UNSAFE.compareAndExchangeReference(base, offset, "bar", "baz");
|
||||
assertEquals(r, "foo", "failing compareAndExchange Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "failing compareAndExchange Object value");
|
||||
}
|
||||
|
||||
{
|
||||
Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "bar");
|
||||
Object r = UNSAFE.compareAndExchangeReferenceAcquire(base, offset, "foo", "bar");
|
||||
assertEquals(r, "foo", "success compareAndExchangeAcquire Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "bar", "success compareAndExchangeAcquire Object value");
|
||||
}
|
||||
|
||||
{
|
||||
Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "baz");
|
||||
Object r = UNSAFE.compareAndExchangeReferenceAcquire(base, offset, "foo", "baz");
|
||||
assertEquals(r, "bar", "failing compareAndExchangeAcquire Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "bar", "failing compareAndExchangeAcquire Object value");
|
||||
}
|
||||
|
||||
{
|
||||
Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "foo");
|
||||
Object r = UNSAFE.compareAndExchangeReferenceRelease(base, offset, "bar", "foo");
|
||||
assertEquals(r, "bar", "success compareAndExchangeRelease Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "success compareAndExchangeRelease Object value");
|
||||
}
|
||||
|
||||
{
|
||||
Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "baz");
|
||||
Object r = UNSAFE.compareAndExchangeReferenceRelease(base, offset, "bar", "baz");
|
||||
assertEquals(r, "foo", "failing compareAndExchangeRelease Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "failing compareAndExchangeRelease Object value");
|
||||
}
|
||||
|
||||
{
|
||||
boolean success = false;
|
||||
for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
|
||||
success = UNSAFE.weakCompareAndSetObjectPlain(base, offset, "foo", "bar");
|
||||
success = UNSAFE.weakCompareAndSetReferencePlain(base, offset, "foo", "bar");
|
||||
}
|
||||
assertEquals(success, true, "weakCompareAndSetPlain Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "bar", "weakCompareAndSetPlain Object value");
|
||||
}
|
||||
|
||||
{
|
||||
boolean success = false;
|
||||
for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
|
||||
success = UNSAFE.weakCompareAndSetObjectAcquire(base, offset, "bar", "foo");
|
||||
success = UNSAFE.weakCompareAndSetReferenceAcquire(base, offset, "bar", "foo");
|
||||
}
|
||||
assertEquals(success, true, "weakCompareAndSetAcquire Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "weakCompareAndSetAcquire Object");
|
||||
}
|
||||
|
||||
{
|
||||
boolean success = false;
|
||||
for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
|
||||
success = UNSAFE.weakCompareAndSetObjectRelease(base, offset, "foo", "bar");
|
||||
success = UNSAFE.weakCompareAndSetReferenceRelease(base, offset, "foo", "bar");
|
||||
}
|
||||
assertEquals(success, true, "weakCompareAndSetRelease Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "bar", "weakCompareAndSetRelease Object");
|
||||
}
|
||||
|
||||
{
|
||||
boolean success = false;
|
||||
for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
|
||||
success = UNSAFE.weakCompareAndSetObject(base, offset, "bar", "foo");
|
||||
success = UNSAFE.weakCompareAndSetReference(base, offset, "bar", "foo");
|
||||
}
|
||||
assertEquals(success, true, "weakCompareAndSet Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "weakCompareAndSet Object");
|
||||
}
|
||||
|
||||
UNSAFE.putObject(base, offset, "bar");
|
||||
UNSAFE.putReference(base, offset, "bar");
|
||||
|
||||
// Compare set and get
|
||||
{
|
||||
Object o = UNSAFE.getAndSetObject(base, offset, "foo");
|
||||
Object o = UNSAFE.getAndSetReference(base, offset, "foo");
|
||||
assertEquals(o, "bar", "getAndSet Object");
|
||||
Object x = UNSAFE.getObject(base, offset);
|
||||
Object x = UNSAFE.getReference(base, offset);
|
||||
assertEquals(x, "foo", "getAndSet Object value");
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,7 @@ public class MixedUnsafeStoreObject {
|
||||
for (int c = 0; c < 20000; c++) { // trigger OSR compilation
|
||||
// java/lang/Object+12 *
|
||||
// _base = InstPtr, _ptr = BotPTR, _field = NULL, mismatched = true
|
||||
UNSAFE.putObject(t, F_OFFSET, "foo");
|
||||
UNSAFE.putReference(t, F_OFFSET, "foo");
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ public class MixedUnsafeStoreObject {
|
||||
for (int c = 0; c < 20000; c++) { // trigger OSR compilation
|
||||
// ...$T+12 *
|
||||
// _base = InstPtr, _ptr = BotPTR, _field = T.f, mismatched = false
|
||||
UNSAFE.putObject(t, F_OFFSET, "foo");
|
||||
UNSAFE.putReference(t, F_OFFSET, "foo");
|
||||
}
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
|
@ -78,7 +78,7 @@ public class OpaqueAccesses {
|
||||
private long l1, l2;
|
||||
|
||||
static Object testFixedOffsetField(Object o) {
|
||||
return UNSAFE.getObject(o, F_OFFSET);
|
||||
return UNSAFE.getReference(o, F_OFFSET);
|
||||
}
|
||||
|
||||
static int testFixedOffsetHeader0(Object o) {
|
||||
@ -106,11 +106,11 @@ public class OpaqueAccesses {
|
||||
}
|
||||
|
||||
static Object testFixedBase(long off) {
|
||||
return UNSAFE.getObject(INSTANCE, off);
|
||||
return UNSAFE.getReference(INSTANCE, off);
|
||||
}
|
||||
|
||||
static Object testOpaque(Object o, long off) {
|
||||
return UNSAFE.getObject(o, off);
|
||||
return UNSAFE.getReference(o, off);
|
||||
}
|
||||
|
||||
static int testFixedOffsetHeaderArray0(Object[] arr) {
|
||||
@ -138,15 +138,15 @@ public class OpaqueAccesses {
|
||||
}
|
||||
|
||||
static Object testFixedOffsetArray(Object[] arr) {
|
||||
return UNSAFE.getObject(arr, E_OFFSET);
|
||||
return UNSAFE.getReference(arr, E_OFFSET);
|
||||
}
|
||||
|
||||
static Object testFixedBaseArray(long off) {
|
||||
return UNSAFE.getObject(ARRAY, off);
|
||||
return UNSAFE.getReference(ARRAY, off);
|
||||
}
|
||||
|
||||
static Object testOpaqueArray(Object[] o, long off) {
|
||||
return UNSAFE.getObject(o, off);
|
||||
return UNSAFE.getReference(o, off);
|
||||
}
|
||||
|
||||
static final long ADDR = UNSAFE.allocateMemory(10);
|
||||
|
@ -222,6 +222,9 @@ public class UnsafeGetConstantField {
|
||||
return name();
|
||||
}
|
||||
}
|
||||
String unsafeTypeName() {
|
||||
return typeName.equals("Object") ? "Reference" : typeName;
|
||||
}
|
||||
}
|
||||
|
||||
static String internalName(Class cls) {
|
||||
@ -352,7 +355,7 @@ public class UnsafeGetConstantField {
|
||||
} else {
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
}
|
||||
String name = "put" + type.typeName + nameSuffix;
|
||||
String name = "put" + type.unsafeTypeName() + nameSuffix;
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, UNSAFE_NAME, name, "(Ljava/lang/Object;J" + type.desc()+ ")V", false);
|
||||
mv.visitInsn(RETURN);
|
||||
|
||||
@ -438,7 +441,7 @@ public class UnsafeGetConstantField {
|
||||
mv.visitFieldInsn(GETSTATIC, className, "t", classDesc);
|
||||
}
|
||||
mv.visitFieldInsn(GETSTATIC, className, "FIELD_OFFSET", "J");
|
||||
String name = "get" + type.typeName + nameSuffix;
|
||||
String name = "get" + type.unsafeTypeName() + nameSuffix;
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, UNSAFE_NAME, name, "(Ljava/lang/Object;J)" + type.desc(), false);
|
||||
}
|
||||
void wrapResult(MethodVisitor mv) {
|
||||
|
@ -173,15 +173,15 @@ public class UnsafeGetStableArrayElement {
|
||||
static float testD_F() { return U.getFloat( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); }
|
||||
static double testD_D() { return U.getDouble( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); }
|
||||
|
||||
static Object testL_L() { return U.getObject( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static boolean testL_Z() { return U.getBoolean(STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static byte testL_B() { return U.getByte( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static short testL_S() { return U.getShort( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static char testL_C() { return U.getChar( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static int testL_I() { return U.getInt( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static long testL_J() { return U.getLong( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static float testL_F() { return U.getFloat( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static double testL_D() { return U.getDouble( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static Object testL_L() { return U.getReference( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static boolean testL_Z() { return U.getBoolean(STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static byte testL_B() { return U.getByte( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static short testL_S() { return U.getShort( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static char testL_C() { return U.getChar( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static int testL_I() { return U.getInt( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static long testL_J() { return U.getLong( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static float testL_F() { return U.getFloat( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
static double testL_D() { return U.getDouble( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); }
|
||||
|
||||
static short testS_U() { return U.getShortUnaligned(STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET + 1); }
|
||||
static char testC_U() { return U.getCharUnaligned( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET + 1); }
|
||||
|
@ -42,16 +42,16 @@ public class GetPutObject {
|
||||
Field field = Test.class.getField("o");
|
||||
|
||||
long offset = unsafe.objectFieldOffset(field);
|
||||
assertEquals(t.o, unsafe.getObject(t, offset));
|
||||
assertEquals(t.o, unsafe.getReference(t, offset));
|
||||
|
||||
unsafe.putObject(t, offset, o);
|
||||
assertEquals(o, unsafe.getObject(t, offset));
|
||||
unsafe.putReference(t, offset, o);
|
||||
assertEquals(o, unsafe.getReference(t, offset));
|
||||
|
||||
Object arrayObject[] = { unsafe, null, new Object() };
|
||||
int scale = unsafe.arrayIndexScale(arrayObject.getClass());
|
||||
offset = unsafe.arrayBaseOffset(arrayObject.getClass());
|
||||
for (int i = 0; i < arrayObject.length; i++) {
|
||||
assertEquals(unsafe.getObject(arrayObject, offset), arrayObject[i]);
|
||||
assertEquals(unsafe.getReference(arrayObject, offset), arrayObject[i]);
|
||||
offset += scale;
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ public class RangeCheck {
|
||||
public static class DummyClassWithMainRangeCheck {
|
||||
public static void main(String args[]) throws Exception {
|
||||
Unsafe unsafe = Unsafe.getUnsafe();
|
||||
unsafe.getObject(new DummyClassWithMainRangeCheck(), Short.MAX_VALUE);
|
||||
unsafe.getReference(new DummyClassWithMainRangeCheck(), Short.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user