Path: blob/master/jcl/src/java.base/share/classes/java/lang/invoke/InstanceFieldVarHandle.java
12521 views
/*[INCLUDE-IF Sidecar19-SE & !OPENJDK_METHODHANDLES]*/1/*******************************************************************************2* Copyright (c) 2016, 2020 IBM Corp. and others3*4* This program and the accompanying materials are made available under5* the terms of the Eclipse Public License 2.0 which accompanies this6* distribution and is available at https://www.eclipse.org/legal/epl-2.0/7* or the Apache License, Version 2.0 which accompanies this distribution and8* is available at https://www.apache.org/licenses/LICENSE-2.0.9*10* This Source Code may also be made available under the following11* Secondary Licenses when the conditions for such availability set12* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU13* General Public License, version 2 with the GNU Classpath14* Exception [1] and GNU General Public License, version 2 with the15* OpenJDK Assembly Exception [2].16*17* [1] https://www.gnu.org/software/classpath/license.html18* [2] http://openjdk.java.net/legal/assembly-exception.html19*20* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception21*******************************************************************************/22package java.lang.invoke;2324import static java.lang.invoke.InstanceFieldVarHandle.InstanceFieldVarHandleOperations.*;25import static java.lang.invoke.MethodType.methodType;2627import java.lang.reflect.Field;2829/**30* {@link VarHandle} subclass for {@link VarHandle} instances for non-static field.31*/32final class InstanceFieldVarHandle extends FieldVarHandle {33/**34* Populates a MethodHandle[] corresponding to the provided type.35*36* @param type The type to create MethodHandles for.37* @return The populated MethodHandle[].38*/39static final MethodHandle[] populateMHs(Class<?> receiverType, final Class<?> initFieldType) {40Class<? extends InstanceFieldVarHandleOperations> operationsClass = null;41Class<?> fieldType = initFieldType;4243if (!initFieldType.isPrimitive()) {44fieldType = Object.class;45operationsClass = OpObject.class;46} else if (int.class == initFieldType) {47operationsClass = OpInt.class;48} else if (long.class == initFieldType) {49operationsClass = OpLong.class;50} else if (boolean.class == initFieldType) {51operationsClass = OpBoolean.class;52} else if (byte.class == initFieldType) {53operationsClass = OpByte.class;54} else if (char.class == initFieldType) {55operationsClass = OpChar.class;56} else if (double.class == initFieldType) {57operationsClass = OpDouble.class;58} else if (float.class == initFieldType) {59operationsClass = OpFloat.class;60} else if (short.class == initFieldType) {61operationsClass = OpShort.class;62} else if (void.class == initFieldType) {63throw new NoSuchFieldError();64} else {65/*[MSG "K0626", "Unable to handle type {0}."]*/66throw new InternalError(com.ibm.oti.util.Msg.getString("K0626", initFieldType)); //$NON-NLS-1$67}6869MethodType getter = methodType(fieldType, Object.class, VarHandle.class);70MethodType setter = methodType(void.class, Object.class, fieldType, VarHandle.class);71MethodType compareAndSet = methodType(boolean.class, Object.class, fieldType, fieldType, VarHandle.class);72MethodType compareAndExchange = compareAndSet.changeReturnType(fieldType);73MethodType getAndSet = setter.changeReturnType(fieldType);74MethodType[] lookupTypes = populateMTs(getter, setter, compareAndSet, compareAndExchange, getAndSet);7576MethodType exactGetter = methodType(initFieldType, receiverType, VarHandle.class);77MethodType exactSetter = methodType(void.class, receiverType, initFieldType, VarHandle.class);78MethodType exactCompareAndSet = methodType(boolean.class, receiverType, initFieldType, initFieldType, VarHandle.class);79MethodType exactCompareAndExchange = exactCompareAndSet.changeReturnType(initFieldType);80MethodType exactGetAndSet = exactSetter.changeReturnType(initFieldType);81MethodType[]exactTypes = populateMTs(exactGetter, exactSetter, exactCompareAndSet, exactCompareAndExchange, exactGetAndSet);8283return populateMHs(operationsClass, lookupTypes, exactTypes);84}8586/**87* Constructs a VarHandle to an instance field.88*89* @param lookupClass The class where we start the lookup of the field90* @param fieldName The field name91* @param fieldType The exact type of the field92* @param accessClass The class being used to look up the field93*/94InstanceFieldVarHandle(Class<?> lookupClass, String fieldName, Class<?> fieldType, Class<?> accessClass) {95super(lookupClass, fieldName, fieldType, accessClass, false, new Class<?>[] {lookupClass}, populateMHs(lookupClass, fieldType));96}9798/**99* Construct a VarHandle to the instance field represented by the provided {@link java.lang.reflect.Field Field}.100*101* @param field The {@link java.lang.reflect.Field} to create a VarHandle for.102*/103InstanceFieldVarHandle(Field field, Class<?> lookupClass, Class<?> fieldType) {104super(field, false, new Class<?>[] {lookupClass}, populateMHs(lookupClass, fieldType));105}106107/**108* Type specific methods used by VarHandle methods for non-static field.109*/110@SuppressWarnings("unused")111static class InstanceFieldVarHandleOperations extends VarHandleOperations {112static final class OpObject extends InstanceFieldVarHandleOperations {113private static final Object get(Object receiver, VarHandle varHandle) {114receiver.getClass();115return _unsafe.getObject(receiver, ((FieldVarHandle)varHandle).vmslot);116}117118private static final void set(Object receiver, Object value, VarHandle varHandle) {119receiver.getClass();120_unsafe.putObject(receiver, ((FieldVarHandle)varHandle).vmslot, value);121}122123private static final Object getVolatile(Object receiver, VarHandle varHandle) {124receiver.getClass();125return _unsafe.getObjectVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);126}127128private static final void setVolatile(Object receiver, Object value, VarHandle varHandle) {129receiver.getClass();130_unsafe.putObjectVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);131}132133private static final Object getOpaque(Object receiver, VarHandle varHandle) {134receiver.getClass();135return _unsafe.getObjectOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);136}137138private static final void setOpaque(Object receiver, Object value, VarHandle varHandle) {139receiver.getClass();140_unsafe.putObjectOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);141}142143private static final Object getAcquire(Object receiver, VarHandle varHandle) {144receiver.getClass();145return _unsafe.getObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);146}147148private static final void setRelease(Object receiver, Object value, VarHandle varHandle) {149receiver.getClass();150_unsafe.putObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);151}152153private static final boolean compareAndSet(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {154receiver.getClass();155/*[IF Sidecar19-SE-OpenJ9]*/156return _unsafe.compareAndSetObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);157/*[ELSE]158return _unsafe.compareAndSwapObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);159/*[ENDIF]*/160}161162private static final Object compareAndExchange(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {163receiver.getClass();164/*[IF Sidecar19-SE-OpenJ9]*/165return _unsafe.compareAndExchangeObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);166/*[ELSE]167return _unsafe.compareAndExchangeObjectVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);168/*[ENDIF]*/169}170171private static final Object compareAndExchangeAcquire(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {172receiver.getClass();173return _unsafe.compareAndExchangeObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);174}175176private static final Object compareAndExchangeRelease(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {177receiver.getClass();178return _unsafe.compareAndExchangeObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);179}180181private static final boolean weakCompareAndSet(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {182receiver.getClass();183/*[IF Sidecar19-SE-OpenJ9]*/184return _unsafe.weakCompareAndSetObjectPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);185/*[ELSE]186return _unsafe.weakCompareAndSwapObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);187/*[ENDIF]*/188}189190private static final boolean weakCompareAndSetAcquire(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {191receiver.getClass();192/*[IF Sidecar19-SE-OpenJ9]*/193return _unsafe.weakCompareAndSetObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);194/*[ELSE]195return _unsafe.weakCompareAndSwapObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);196/*[ENDIF]*/197}198199private static final boolean weakCompareAndSetRelease(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {200receiver.getClass();201/*[IF Sidecar19-SE-OpenJ9]*/202return _unsafe.weakCompareAndSetObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);203/*[ELSE]204return _unsafe.weakCompareAndSwapObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);205/*[ENDIF]*/206}207208private static final boolean weakCompareAndSetPlain(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {209receiver.getClass();210/*[IF Sidecar19-SE-OpenJ9]*/211return _unsafe.weakCompareAndSetObjectPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);212/*[ELSE]213return _unsafe.weakCompareAndSwapObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);214/*[ENDIF]*/215}216217private static final Object getAndSet(Object receiver, Object value, VarHandle varHandle) {218receiver.getClass();219return _unsafe.getAndSetObject(receiver, ((FieldVarHandle)varHandle).vmslot, value);220}221222private static final Object getAndSetAcquire(Object receiver, Object value, VarHandle varHandle) {223receiver.getClass();224return _unsafe.getAndSetObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);225}226227private static final Object getAndSetRelease(Object receiver, Object value, VarHandle varHandle) {228receiver.getClass();229return _unsafe.getAndSetObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);230}231232private static final Object getAndAdd(Object receiver, Object value, VarHandle varHandle) {233throw operationNotSupported(varHandle);234}235236private static final Object getAndAddAcquire(Object receiver, Object value, VarHandle varHandle) {237throw operationNotSupported(varHandle);238}239240private static final Object getAndAddRelease(Object receiver, Object value, VarHandle varHandle) {241throw operationNotSupported(varHandle);242}243244private static final Object getAndBitwiseAnd(Object receiver, Object value, VarHandle varHandle) {245throw operationNotSupported(varHandle);246}247248private static final Object getAndBitwiseAndAcquire(Object receiver, Object value, VarHandle varHandle) {249throw operationNotSupported(varHandle);250}251252private static final Object getAndBitwiseAndRelease(Object receiver, Object value, VarHandle varHandle) {253throw operationNotSupported(varHandle);254}255256private static final Object getAndBitwiseOr(Object receiver, Object value, VarHandle varHandle) {257throw operationNotSupported(varHandle);258}259260private static final Object getAndBitwiseOrAcquire(Object receiver, Object value, VarHandle varHandle) {261throw operationNotSupported(varHandle);262}263264private static final Object getAndBitwiseOrRelease(Object receiver, Object value, VarHandle varHandle) {265throw operationNotSupported(varHandle);266}267268private static final Object getAndBitwiseXor(Object receiver, Object value, VarHandle varHandle) {269throw operationNotSupported(varHandle);270}271272private static final Object getAndBitwiseXorAcquire(Object receiver, Object value, VarHandle varHandle) {273throw operationNotSupported(varHandle);274}275276private static final Object getAndBitwiseXorRelease(Object receiver, Object value, VarHandle varHandle) {277throw operationNotSupported(varHandle);278}279}280281static final class OpByte extends InstanceFieldVarHandleOperations {282private static final byte get(Object receiver, VarHandle varHandle) {283receiver.getClass();284return _unsafe.getByte(receiver, ((FieldVarHandle)varHandle).vmslot);285}286287private static final void set(Object receiver, byte value, VarHandle varHandle) {288receiver.getClass();289_unsafe.putByte(receiver, ((FieldVarHandle)varHandle).vmslot, value);290}291292private static final byte getVolatile(Object receiver, VarHandle varHandle) {293receiver.getClass();294return _unsafe.getByteVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);295}296297private static final void setVolatile(Object receiver, byte value, VarHandle varHandle) {298receiver.getClass();299_unsafe.putByteVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);300}301302private static final byte getOpaque(Object receiver, VarHandle varHandle) {303receiver.getClass();304return _unsafe.getByteOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);305}306307private static final void setOpaque(Object receiver, byte value, VarHandle varHandle) {308receiver.getClass();309_unsafe.putByteOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);310}311312private static final byte getAcquire(Object receiver, VarHandle varHandle) {313receiver.getClass();314return _unsafe.getByteAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);315}316317private static final void setRelease(Object receiver, byte value, VarHandle varHandle) {318receiver.getClass();319_unsafe.putByteRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);320}321322private static final boolean compareAndSet(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {323receiver.getClass();324/*[IF Sidecar19-SE-OpenJ9]*/325return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);326/*[ELSE]327return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);328/*[ENDIF]*/329}330331private static final byte compareAndExchange(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {332receiver.getClass();333/*[IF Sidecar19-SE-OpenJ9]*/334return (byte)_unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);335/*[ELSE]336return (byte)_unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);337/*[ENDIF]*/338}339340private static final byte compareAndExchangeAcquire(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {341receiver.getClass();342return (byte)_unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);343}344345private static final byte compareAndExchangeRelease(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {346receiver.getClass();347return (byte)_unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);348}349350private static final boolean weakCompareAndSet(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {351receiver.getClass();352/*[IF Sidecar19-SE-OpenJ9]*/353return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);354/*[ELSE]355return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);356/*[ENDIF]*/357}358359private static final boolean weakCompareAndSetAcquire(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {360receiver.getClass();361/*[IF Sidecar19-SE-OpenJ9]*/362return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);363/*[ELSE]364return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);365/*[ENDIF]*/366}367368private static final boolean weakCompareAndSetRelease(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {369receiver.getClass();370/*[IF Sidecar19-SE-OpenJ9]*/371return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);372/*[ELSE]373return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);374/*[ENDIF]*/375}376377private static final boolean weakCompareAndSetPlain(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {378receiver.getClass();379/*[IF Sidecar19-SE-OpenJ9]*/380return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);381/*[ELSE]382return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);383/*[ENDIF]*/384}385386private static final byte getAndSet(Object receiver, byte value, VarHandle varHandle) {387receiver.getClass();388return (byte)_unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);389}390391private static final byte getAndSetAcquire(Object receiver, byte value, VarHandle varHandle) {392receiver.getClass();393return (byte)_unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);394}395396private static final byte getAndSetRelease(Object receiver, byte value, VarHandle varHandle) {397receiver.getClass();398return (byte)_unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);399}400401private static final byte getAndAdd(Object receiver, byte value, VarHandle varHandle) {402receiver.getClass();403return (byte)_unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);404}405406private static final byte getAndAddAcquire(Object receiver, byte value, VarHandle varHandle) {407receiver.getClass();408return (byte)_unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);409}410411private static final byte getAndAddRelease(Object receiver, byte value, VarHandle varHandle) {412receiver.getClass();413return (byte)_unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);414}415416private static final byte getAndBitwiseAnd(Object receiver, byte value, VarHandle varHandle) {417receiver.getClass();418return (byte)_unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);419}420421private static final byte getAndBitwiseAndAcquire(Object receiver, byte value, VarHandle varHandle) {422receiver.getClass();423return (byte)_unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);424}425426private static final byte getAndBitwiseAndRelease(Object receiver, byte value, VarHandle varHandle) {427receiver.getClass();428return (byte)_unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);429}430431private static final byte getAndBitwiseOr(Object receiver, byte value, VarHandle varHandle) {432receiver.getClass();433return (byte)_unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);434}435436private static final byte getAndBitwiseOrAcquire(Object receiver, byte value, VarHandle varHandle) {437receiver.getClass();438return (byte)_unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);439}440441private static final byte getAndBitwiseOrRelease(Object receiver, byte value, VarHandle varHandle) {442receiver.getClass();443return (byte)_unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);444}445446private static final byte getAndBitwiseXor(Object receiver, byte value, VarHandle varHandle) {447receiver.getClass();448return (byte)_unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);449}450451private static final byte getAndBitwiseXorAcquire(Object receiver, byte value, VarHandle varHandle) {452receiver.getClass();453return (byte)_unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);454}455456private static final byte getAndBitwiseXorRelease(Object receiver, byte value, VarHandle varHandle) {457receiver.getClass();458return (byte)_unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);459}460}461462static final class OpChar extends InstanceFieldVarHandleOperations {463private static final char get(Object receiver, VarHandle varHandle) {464receiver.getClass();465return _unsafe.getChar(receiver, ((FieldVarHandle)varHandle).vmslot);466}467468private static final void set(Object receiver, char value, VarHandle varHandle) {469receiver.getClass();470_unsafe.putChar(receiver, ((FieldVarHandle)varHandle).vmslot, value);471}472473private static final char getVolatile(Object receiver, VarHandle varHandle) {474receiver.getClass();475return _unsafe.getCharVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);476}477478private static final void setVolatile(Object receiver, char value, VarHandle varHandle) {479receiver.getClass();480_unsafe.putCharVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);481}482483private static final char getOpaque(Object receiver, VarHandle varHandle) {484receiver.getClass();485return _unsafe.getCharOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);486}487488private static final void setOpaque(Object receiver, char value, VarHandle varHandle) {489receiver.getClass();490_unsafe.putCharOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);491}492493private static final char getAcquire(Object receiver, VarHandle varHandle) {494receiver.getClass();495return _unsafe.getCharAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);496}497498private static final void setRelease(Object receiver, char value, VarHandle varHandle) {499receiver.getClass();500_unsafe.putCharRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);501}502503private static final boolean compareAndSet(Object receiver, char testValue, char newValue, VarHandle varHandle) {504receiver.getClass();505/*[IF Sidecar19-SE-OpenJ9]*/506return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);507/*[ELSE]508return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);509/*[ENDIF]*/510}511512private static final char compareAndExchange(Object receiver, char testValue, char newValue, VarHandle varHandle) {513receiver.getClass();514/*[IF Sidecar19-SE-OpenJ9]*/515return (char)_unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);516/*[ELSE]517return (char)_unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);518/*[ENDIF]*/519}520521private static final char compareAndExchangeAcquire(Object receiver, char testValue, char newValue, VarHandle varHandle) {522receiver.getClass();523return (char)_unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);524}525526private static final char compareAndExchangeRelease(Object receiver, char testValue, char newValue, VarHandle varHandle) {527receiver.getClass();528return (char)_unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);529}530531private static final boolean weakCompareAndSet(Object receiver, char testValue, char newValue, VarHandle varHandle) {532receiver.getClass();533/*[IF Sidecar19-SE-OpenJ9]*/534return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);535/*[ELSE]536return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);537/*[ENDIF]*/538}539540private static final boolean weakCompareAndSetAcquire(Object receiver, char testValue, char newValue, VarHandle varHandle) {541receiver.getClass();542/*[IF Sidecar19-SE-OpenJ9]*/543return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);544/*[ELSE]545return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);546/*[ENDIF]*/547}548549private static final boolean weakCompareAndSetRelease(Object receiver, char testValue, char newValue, VarHandle varHandle) {550receiver.getClass();551/*[IF Sidecar19-SE-OpenJ9]*/552return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);553/*[ELSE]554return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);555/*[ENDIF]*/556}557558private static final boolean weakCompareAndSetPlain(Object receiver, char testValue, char newValue, VarHandle varHandle) {559receiver.getClass();560/*[IF Sidecar19-SE-OpenJ9]*/561return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);562/*[ELSE]563return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);564/*[ENDIF]*/565}566567private static final char getAndSet(Object receiver, char value, VarHandle varHandle) {568receiver.getClass();569return (char)_unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);570}571572private static final char getAndSetAcquire(Object receiver, char value, VarHandle varHandle) {573receiver.getClass();574return (char)_unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);575}576577private static final char getAndSetRelease(Object receiver, char value, VarHandle varHandle) {578receiver.getClass();579return (char)_unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);580}581582private static final char getAndAdd(Object receiver, char value, VarHandle varHandle) {583receiver.getClass();584return (char)_unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);585}586587private static final char getAndAddAcquire(Object receiver, char value, VarHandle varHandle) {588receiver.getClass();589return (char)_unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);590}591592private static final char getAndAddRelease(Object receiver, char value, VarHandle varHandle) {593receiver.getClass();594return (char)_unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);595}596597private static final char getAndBitwiseAnd(Object receiver, char value, VarHandle varHandle) {598receiver.getClass();599return (char)_unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);600}601602private static final char getAndBitwiseAndAcquire(Object receiver, char value, VarHandle varHandle) {603receiver.getClass();604return (char)_unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);605}606607private static final char getAndBitwiseAndRelease(Object receiver, char value, VarHandle varHandle) {608receiver.getClass();609return (char)_unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);610}611612private static final char getAndBitwiseOr(Object receiver, char value, VarHandle varHandle) {613receiver.getClass();614return (char)_unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);615}616617private static final char getAndBitwiseOrAcquire(Object receiver, char value, VarHandle varHandle) {618receiver.getClass();619return (char)_unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);620}621622private static final char getAndBitwiseOrRelease(Object receiver, char value, VarHandle varHandle) {623receiver.getClass();624return (char)_unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);625}626627private static final char getAndBitwiseXor(Object receiver, char value, VarHandle varHandle) {628receiver.getClass();629return (char)_unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);630}631632private static final char getAndBitwiseXorAcquire(Object receiver, char value, VarHandle varHandle) {633receiver.getClass();634return (char)_unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);635}636637private static final char getAndBitwiseXorRelease(Object receiver, char value, VarHandle varHandle) {638receiver.getClass();639return (char)_unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);640}641}642643static final class OpDouble extends InstanceFieldVarHandleOperations {644private static final double get(Object receiver, VarHandle varHandle) {645receiver.getClass();646return _unsafe.getDouble(receiver, ((FieldVarHandle)varHandle).vmslot);647}648649private static final void set(Object receiver, double value, VarHandle varHandle) {650receiver.getClass();651_unsafe.putDouble(receiver, ((FieldVarHandle)varHandle).vmslot, value);652}653654private static final double getVolatile(Object receiver, VarHandle varHandle) {655receiver.getClass();656return _unsafe.getDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);657}658659private static final void setVolatile(Object receiver, double value, VarHandle varHandle) {660receiver.getClass();661_unsafe.putDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);662}663664private static final double getOpaque(Object receiver, VarHandle varHandle) {665receiver.getClass();666return _unsafe.getDoubleOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);667}668669private static final void setOpaque(Object receiver, double value, VarHandle varHandle) {670receiver.getClass();671_unsafe.putDoubleOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);672}673674private static final double getAcquire(Object receiver, VarHandle varHandle) {675receiver.getClass();676return _unsafe.getDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);677}678679private static final void setRelease(Object receiver, double value, VarHandle varHandle) {680receiver.getClass();681_unsafe.putDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);682}683684private static final boolean compareAndSet(Object receiver, double testValue, double newValue, VarHandle varHandle) {685receiver.getClass();686/*[IF Sidecar19-SE-OpenJ9]*/687return _unsafe.compareAndSetDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);688/*[ELSE]689return _unsafe.compareAndSwapDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);690/*[ENDIF]*/691}692693private static final double compareAndExchange(Object receiver, double testValue, double newValue, VarHandle varHandle) {694receiver.getClass();695/*[IF Sidecar19-SE-OpenJ9]*/696return _unsafe.compareAndExchangeDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);697/*[ELSE]698return _unsafe.compareAndExchangeDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);699/*[ENDIF]*/700}701702private static final double compareAndExchangeAcquire(Object receiver, double testValue, double newValue, VarHandle varHandle) {703receiver.getClass();704return _unsafe.compareAndExchangeDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);705}706707private static final double compareAndExchangeRelease(Object receiver, double testValue, double newValue, VarHandle varHandle) {708receiver.getClass();709return _unsafe.compareAndExchangeDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);710}711712private static final boolean weakCompareAndSet(Object receiver, double testValue, double newValue, VarHandle varHandle) {713receiver.getClass();714/*[IF Sidecar19-SE-OpenJ9]*/715return _unsafe.weakCompareAndSetDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);716/*[ELSE]717return _unsafe.weakCompareAndSwapDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);718/*[ENDIF]*/719}720721private static final boolean weakCompareAndSetAcquire(Object receiver, double testValue, double newValue, VarHandle varHandle) {722receiver.getClass();723/*[IF Sidecar19-SE-OpenJ9]*/724return _unsafe.weakCompareAndSetDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);725/*[ELSE]726return _unsafe.weakCompareAndSwapDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);727/*[ENDIF]*/728}729730private static final boolean weakCompareAndSetRelease(Object receiver, double testValue, double newValue, VarHandle varHandle) {731receiver.getClass();732/*[IF Sidecar19-SE-OpenJ9]*/733return _unsafe.weakCompareAndSetDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);734/*[ELSE]735return _unsafe.weakCompareAndSwapDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);736/*[ENDIF]*/737}738739private static final boolean weakCompareAndSetPlain(Object receiver, double testValue, double newValue, VarHandle varHandle) {740receiver.getClass();741/*[IF Sidecar19-SE-OpenJ9]*/742return _unsafe.weakCompareAndSetDoublePlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);743/*[ELSE]744return _unsafe.weakCompareAndSwapDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);745/*[ENDIF]*/746}747748private static final double getAndSet(Object receiver, double value, VarHandle varHandle) {749receiver.getClass();750return _unsafe.getAndSetDouble(receiver, ((FieldVarHandle)varHandle).vmslot, value);751}752753private static final double getAndSetAcquire(Object receiver, double value, VarHandle varHandle) {754receiver.getClass();755return _unsafe.getAndSetDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);756}757758private static final double getAndSetRelease(Object receiver, double value, VarHandle varHandle) {759receiver.getClass();760return _unsafe.getAndSetDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);761}762763private static final double getAndAdd(Object receiver, double value, VarHandle varHandle) {764receiver.getClass();765return _unsafe.getAndAddDouble(receiver, ((FieldVarHandle)varHandle).vmslot, value);766}767768private static final double getAndAddAcquire(Object receiver, double value, VarHandle varHandle) {769receiver.getClass();770return _unsafe.getAndAddDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);771}772773private static final double getAndAddRelease(Object receiver, double value, VarHandle varHandle) {774receiver.getClass();775return _unsafe.getAndAddDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);776}777778private static final double getAndBitwiseAnd(Object receiver, double value, VarHandle varHandle) {779throw operationNotSupported(varHandle);780}781782private static final double getAndBitwiseAndAcquire(Object receiver, double value, VarHandle varHandle) {783throw operationNotSupported(varHandle);784}785786private static final double getAndBitwiseAndRelease(Object receiver, double value, VarHandle varHandle) {787throw operationNotSupported(varHandle);788}789790private static final double getAndBitwiseOr(Object receiver, double value, VarHandle varHandle) {791throw operationNotSupported(varHandle);792}793794private static final double getAndBitwiseOrAcquire(Object receiver, double value, VarHandle varHandle) {795throw operationNotSupported(varHandle);796}797798private static final double getAndBitwiseOrRelease(Object receiver, double value, VarHandle varHandle) {799throw operationNotSupported(varHandle);800}801802private static final double getAndBitwiseXor(Object receiver, double value, VarHandle varHandle) {803throw operationNotSupported(varHandle);804}805806private static final double getAndBitwiseXorAcquire(Object receiver, double value, VarHandle varHandle) {807throw operationNotSupported(varHandle);808}809810private static final double getAndBitwiseXorRelease(Object receiver, double value, VarHandle varHandle) {811throw operationNotSupported(varHandle);812}813}814815static final class OpFloat extends InstanceFieldVarHandleOperations {816private static final float get(Object receiver, VarHandle varHandle) {817receiver.getClass();818return _unsafe.getFloat(receiver, ((FieldVarHandle)varHandle).vmslot);819}820821private static final void set(Object receiver, float value, VarHandle varHandle) {822receiver.getClass();823_unsafe.putFloat(receiver, ((FieldVarHandle)varHandle).vmslot, value);824}825826private static final float getVolatile(Object receiver, VarHandle varHandle) {827receiver.getClass();828return _unsafe.getFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);829}830831private static final void setVolatile(Object receiver, float value, VarHandle varHandle) {832receiver.getClass();833_unsafe.putFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);834}835836private static final float getOpaque(Object receiver, VarHandle varHandle) {837receiver.getClass();838return _unsafe.getFloatOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);839}840841private static final void setOpaque(Object receiver, float value, VarHandle varHandle) {842receiver.getClass();843_unsafe.putFloatOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);844}845846private static final float getAcquire(Object receiver, VarHandle varHandle) {847receiver.getClass();848return _unsafe.getFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);849}850851private static final void setRelease(Object receiver, float value, VarHandle varHandle) {852receiver.getClass();853_unsafe.putFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);854}855856private static final boolean compareAndSet(Object receiver, float testValue, float newValue, VarHandle varHandle) {857receiver.getClass();858/*[IF Sidecar19-SE-OpenJ9]*/859return _unsafe.compareAndSetFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);860/*[ELSE]861return _unsafe.compareAndSwapFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);862/*[ENDIF]*/863}864865private static final float compareAndExchange(Object receiver, float testValue, float newValue, VarHandle varHandle) {866receiver.getClass();867/*[IF Sidecar19-SE-OpenJ9]*/868return _unsafe.compareAndExchangeFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);869/*[ELSE]870return _unsafe.compareAndExchangeFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);871/*[ENDIF]*/872}873874private static final float compareAndExchangeAcquire(Object receiver, float testValue, float newValue, VarHandle varHandle) {875receiver.getClass();876return _unsafe.compareAndExchangeFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);877}878879private static final float compareAndExchangeRelease(Object receiver, float testValue, float newValue, VarHandle varHandle) {880receiver.getClass();881return _unsafe.compareAndExchangeFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);882}883884private static final boolean weakCompareAndSet(Object receiver, float testValue, float newValue, VarHandle varHandle) {885receiver.getClass();886/*[IF Sidecar19-SE-OpenJ9]*/887return _unsafe.weakCompareAndSetFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);888/*[ELSE]889return _unsafe.weakCompareAndSwapFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);890/*[ENDIF]*/891}892893private static final boolean weakCompareAndSetAcquire(Object receiver, float testValue, float newValue, VarHandle varHandle) {894receiver.getClass();895/*[IF Sidecar19-SE-OpenJ9]*/896return _unsafe.weakCompareAndSetFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);897/*[ELSE]898return _unsafe.weakCompareAndSwapFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);899/*[ENDIF]*/900}901902private static final boolean weakCompareAndSetRelease(Object receiver, float testValue, float newValue, VarHandle varHandle) {903receiver.getClass();904/*[IF Sidecar19-SE-OpenJ9]*/905return _unsafe.weakCompareAndSetFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);906/*[ELSE]907return _unsafe.weakCompareAndSwapFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);908/*[ENDIF]*/909}910911private static final boolean weakCompareAndSetPlain(Object receiver, float testValue, float newValue, VarHandle varHandle) {912receiver.getClass();913/*[IF Sidecar19-SE-OpenJ9]*/914return _unsafe.weakCompareAndSetFloatPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);915/*[ELSE]916return _unsafe.weakCompareAndSwapFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);917/*[ENDIF]*/918}919920private static final float getAndSet(Object receiver, float value, VarHandle varHandle) {921receiver.getClass();922return _unsafe.getAndSetFloat(receiver, ((FieldVarHandle)varHandle).vmslot, value);923}924925private static final float getAndSetAcquire(Object receiver, float value, VarHandle varHandle) {926receiver.getClass();927return _unsafe.getAndSetFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);928}929930private static final float getAndSetRelease(Object receiver, float value, VarHandle varHandle) {931receiver.getClass();932return _unsafe.getAndSetFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);933}934935private static final float getAndAdd(Object receiver, float value, VarHandle varHandle) {936receiver.getClass();937return _unsafe.getAndAddFloat(receiver, ((FieldVarHandle)varHandle).vmslot, value);938}939940private static final float getAndAddAcquire(Object receiver, float value, VarHandle varHandle) {941receiver.getClass();942return _unsafe.getAndAddFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);943}944945private static final float getAndAddRelease(Object receiver, float value, VarHandle varHandle) {946receiver.getClass();947return _unsafe.getAndAddFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);948}949950private static final float getAndBitwiseAnd(Object receiver, float value, VarHandle varHandle) {951throw operationNotSupported(varHandle);952}953954private static final float getAndBitwiseAndAcquire(Object receiver, float value, VarHandle varHandle) {955throw operationNotSupported(varHandle);956}957958private static final float getAndBitwiseAndRelease(Object receiver, float value, VarHandle varHandle) {959throw operationNotSupported(varHandle);960}961962private static final float getAndBitwiseOr(Object receiver, float value, VarHandle varHandle) {963throw operationNotSupported(varHandle);964}965966private static final float getAndBitwiseOrAcquire(Object receiver, float value, VarHandle varHandle) {967throw operationNotSupported(varHandle);968}969970private static final float getAndBitwiseOrRelease(Object receiver, float value, VarHandle varHandle) {971throw operationNotSupported(varHandle);972}973974private static final float getAndBitwiseXor(Object receiver, float value, VarHandle varHandle) {975throw operationNotSupported(varHandle);976}977978private static final float getAndBitwiseXorAcquire(Object receiver, float value, VarHandle varHandle) {979throw operationNotSupported(varHandle);980}981982private static final float getAndBitwiseXorRelease(Object receiver, float value, VarHandle varHandle) {983throw operationNotSupported(varHandle);984}985}986987static final class OpInt extends InstanceFieldVarHandleOperations {988private static final int get(Object receiver, VarHandle varHandle) {989receiver.getClass();990return _unsafe.getInt(receiver, ((FieldVarHandle)varHandle).vmslot);991}992993private static final void set(Object receiver, int value, VarHandle varHandle) {994receiver.getClass();995_unsafe.putInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);996}997998private static final int getVolatile(Object receiver, VarHandle varHandle) {999receiver.getClass();1000return _unsafe.getIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);1001}10021003private static final void setVolatile(Object receiver, int value, VarHandle varHandle) {1004receiver.getClass();1005_unsafe.putIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);1006}10071008private static final int getOpaque(Object receiver, VarHandle varHandle) {1009receiver.getClass();1010return _unsafe.getIntOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);1011}10121013private static final void setOpaque(Object receiver, int value, VarHandle varHandle) {1014receiver.getClass();1015_unsafe.putIntOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);1016}10171018private static final int getAcquire(Object receiver, VarHandle varHandle) {1019receiver.getClass();1020return _unsafe.getIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);1021}10221023private static final void setRelease(Object receiver, int value, VarHandle varHandle) {1024receiver.getClass();1025_unsafe.putIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1026}10271028private static final boolean compareAndSet(Object receiver, int testValue, int newValue, VarHandle varHandle) {1029receiver.getClass();1030/*[IF Sidecar19-SE-OpenJ9]*/1031return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1032/*[ELSE]1033return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1034/*[ENDIF]*/1035}10361037private static final int compareAndExchange(Object receiver, int testValue, int newValue, VarHandle varHandle) {1038receiver.getClass();1039/*[IF Sidecar19-SE-OpenJ9]*/1040return _unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1041/*[ELSE]1042return _unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1043/*[ENDIF]*/1044}10451046private static final int compareAndExchangeAcquire(Object receiver, int testValue, int newValue, VarHandle varHandle) {1047receiver.getClass();1048return _unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1049}10501051private static final int compareAndExchangeRelease(Object receiver, int testValue, int newValue, VarHandle varHandle) {1052receiver.getClass();1053return _unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1054}10551056private static final boolean weakCompareAndSet(Object receiver, int testValue, int newValue, VarHandle varHandle) {1057receiver.getClass();1058/*[IF Sidecar19-SE-OpenJ9]*/1059return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1060/*[ELSE]1061return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1062/*[ENDIF]*/1063}10641065private static final boolean weakCompareAndSetAcquire(Object receiver, int testValue, int newValue, VarHandle varHandle) {1066receiver.getClass();1067/*[IF Sidecar19-SE-OpenJ9]*/1068return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1069/*[ELSE]1070return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1071/*[ENDIF]*/1072}10731074private static final boolean weakCompareAndSetRelease(Object receiver, int testValue, int newValue, VarHandle varHandle) {1075receiver.getClass();1076/*[IF Sidecar19-SE-OpenJ9]*/1077return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1078/*[ELSE]1079return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1080/*[ENDIF]*/1081}10821083private static final boolean weakCompareAndSetPlain(Object receiver, int testValue, int newValue, VarHandle varHandle) {1084receiver.getClass();1085/*[IF Sidecar19-SE-OpenJ9]*/1086return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1087/*[ELSE]1088return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1089/*[ENDIF]*/1090}10911092private static final int getAndSet(Object receiver, int value, VarHandle varHandle) {1093receiver.getClass();1094return _unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1095}10961097private static final int getAndSetAcquire(Object receiver, int value, VarHandle varHandle) {1098receiver.getClass();1099return _unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1100}11011102private static final int getAndSetRelease(Object receiver, int value, VarHandle varHandle) {1103receiver.getClass();1104return _unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1105}11061107private static final int getAndAdd(Object receiver, int value, VarHandle varHandle) {1108receiver.getClass();1109return _unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1110}11111112private static final int getAndAddAcquire(Object receiver, int value, VarHandle varHandle) {1113receiver.getClass();1114return _unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1115}11161117private static final int getAndAddRelease(Object receiver, int value, VarHandle varHandle) {1118receiver.getClass();1119return _unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1120}11211122private static final int getAndBitwiseAnd(Object receiver, int value, VarHandle varHandle) {1123receiver.getClass();1124return _unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1125}11261127private static final int getAndBitwiseAndAcquire(Object receiver, int value, VarHandle varHandle) {1128receiver.getClass();1129return _unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1130}11311132private static final int getAndBitwiseAndRelease(Object receiver, int value, VarHandle varHandle) {1133receiver.getClass();1134return _unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1135}11361137private static final int getAndBitwiseOr(Object receiver, int value, VarHandle varHandle) {1138receiver.getClass();1139return _unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1140}11411142private static final int getAndBitwiseOrAcquire(Object receiver, int value, VarHandle varHandle) {1143receiver.getClass();1144return _unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1145}11461147private static final int getAndBitwiseOrRelease(Object receiver, int value, VarHandle varHandle) {1148receiver.getClass();1149return _unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1150}11511152private static final int getAndBitwiseXor(Object receiver, int value, VarHandle varHandle) {1153receiver.getClass();1154return _unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1155}11561157private static final int getAndBitwiseXorAcquire(Object receiver, int value, VarHandle varHandle) {1158receiver.getClass();1159return _unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1160}11611162private static final int getAndBitwiseXorRelease(Object receiver, int value, VarHandle varHandle) {1163receiver.getClass();1164return _unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1165}1166}11671168static final class OpLong extends InstanceFieldVarHandleOperations {1169private static final long get(Object receiver, VarHandle varHandle) {1170receiver.getClass();1171return _unsafe.getLong(receiver, ((FieldVarHandle)varHandle).vmslot);1172}11731174private static final void set(Object receiver, long value, VarHandle varHandle) {1175receiver.getClass();1176_unsafe.putLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);1177}11781179private static final long getVolatile(Object receiver, VarHandle varHandle) {1180receiver.getClass();1181return _unsafe.getLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);1182}11831184private static final void setVolatile(Object receiver, long value, VarHandle varHandle) {1185receiver.getClass();1186_unsafe.putLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);1187}11881189private static final long getOpaque(Object receiver, VarHandle varHandle) {1190receiver.getClass();1191return _unsafe.getLongOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);1192}11931194private static final void setOpaque(Object receiver, long value, VarHandle varHandle) {1195receiver.getClass();1196_unsafe.putLongOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);1197}11981199private static final long getAcquire(Object receiver, VarHandle varHandle) {1200receiver.getClass();1201return _unsafe.getLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);1202}12031204private static final void setRelease(Object receiver, long value, VarHandle varHandle) {1205receiver.getClass();1206_unsafe.putLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1207}12081209private static final boolean compareAndSet(Object receiver, long testValue, long newValue, VarHandle varHandle) {1210receiver.getClass();1211/*[IF Sidecar19-SE-OpenJ9]*/1212return _unsafe.compareAndSetLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1213/*[ELSE]1214return _unsafe.compareAndSwapLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1215/*[ENDIF]*/1216}12171218private static final long compareAndExchange(Object receiver, long testValue, long newValue, VarHandle varHandle) {1219receiver.getClass();1220/*[IF Sidecar19-SE-OpenJ9]*/1221return _unsafe.compareAndExchangeLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1222/*[ELSE]1223return _unsafe.compareAndExchangeLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1224/*[ENDIF]*/1225}12261227private static final long compareAndExchangeAcquire(Object receiver, long testValue, long newValue, VarHandle varHandle) {1228receiver.getClass();1229return _unsafe.compareAndExchangeLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1230}12311232private static final long compareAndExchangeRelease(Object receiver, long testValue, long newValue, VarHandle varHandle) {1233receiver.getClass();1234return _unsafe.compareAndExchangeLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1235}12361237private static final boolean weakCompareAndSet(Object receiver, long testValue, long newValue, VarHandle varHandle) {1238receiver.getClass();1239/*[IF Sidecar19-SE-OpenJ9]*/1240return _unsafe.weakCompareAndSetLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1241/*[ELSE]1242return _unsafe.weakCompareAndSwapLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1243/*[ENDIF]*/1244}12451246private static final boolean weakCompareAndSetAcquire(Object receiver, long testValue, long newValue, VarHandle varHandle) {1247receiver.getClass();1248/*[IF Sidecar19-SE-OpenJ9]*/1249return _unsafe.weakCompareAndSetLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1250/*[ELSE]1251return _unsafe.weakCompareAndSwapLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1252/*[ENDIF]*/1253}12541255private static final boolean weakCompareAndSetRelease(Object receiver, long testValue, long newValue, VarHandle varHandle) {1256receiver.getClass();1257/*[IF Sidecar19-SE-OpenJ9]*/1258return _unsafe.weakCompareAndSetLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1259/*[ELSE]1260return _unsafe.weakCompareAndSwapLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1261/*[ENDIF]*/1262}12631264private static final boolean weakCompareAndSetPlain(Object receiver, long testValue, long newValue, VarHandle varHandle) {1265receiver.getClass();1266/*[IF Sidecar19-SE-OpenJ9]*/1267return _unsafe.weakCompareAndSetLongPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1268/*[ELSE]1269return _unsafe.weakCompareAndSwapLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1270/*[ENDIF]*/1271}12721273private static final long getAndSet(Object receiver, long value, VarHandle varHandle) {1274receiver.getClass();1275return _unsafe.getAndSetLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);1276}12771278private static final long getAndSetAcquire(Object receiver, long value, VarHandle varHandle) {1279receiver.getClass();1280return _unsafe.getAndSetLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1281}12821283private static final long getAndSetRelease(Object receiver, long value, VarHandle varHandle) {1284receiver.getClass();1285return _unsafe.getAndSetLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1286}12871288private static final long getAndAdd(Object receiver, long value, VarHandle varHandle) {1289receiver.getClass();1290return _unsafe.getAndAddLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);1291}12921293private static final long getAndAddAcquire(Object receiver, long value, VarHandle varHandle) {1294receiver.getClass();1295return _unsafe.getAndAddLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1296}12971298private static final long getAndAddRelease(Object receiver, long value, VarHandle varHandle) {1299receiver.getClass();1300return _unsafe.getAndAddLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1301}13021303private static final long getAndBitwiseAnd(Object receiver, long value, VarHandle varHandle) {1304receiver.getClass();1305return _unsafe.getAndBitwiseAndLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);1306}13071308private static final long getAndBitwiseAndAcquire(Object receiver, long value, VarHandle varHandle) {1309receiver.getClass();1310return _unsafe.getAndBitwiseAndLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1311}13121313private static final long getAndBitwiseAndRelease(Object receiver, long value, VarHandle varHandle) {1314receiver.getClass();1315return _unsafe.getAndBitwiseAndLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1316}13171318private static final long getAndBitwiseOr(Object receiver, long value, VarHandle varHandle) {1319receiver.getClass();1320return _unsafe.getAndBitwiseOrLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);1321}13221323private static final long getAndBitwiseOrAcquire(Object receiver, long value, VarHandle varHandle) {1324receiver.getClass();1325return _unsafe.getAndBitwiseOrLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1326}13271328private static final long getAndBitwiseOrRelease(Object receiver, long value, VarHandle varHandle) {1329receiver.getClass();1330return _unsafe.getAndBitwiseOrLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1331}13321333private static final long getAndBitwiseXor(Object receiver, long value, VarHandle varHandle) {1334receiver.getClass();1335return _unsafe.getAndBitwiseXorLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);1336}13371338private static final long getAndBitwiseXorAcquire(Object receiver, long value, VarHandle varHandle) {1339receiver.getClass();1340return _unsafe.getAndBitwiseXorLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1341}13421343private static final long getAndBitwiseXorRelease(Object receiver, long value, VarHandle varHandle) {1344receiver.getClass();1345return _unsafe.getAndBitwiseXorLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1346}1347}13481349static final class OpShort extends InstanceFieldVarHandleOperations {1350private static final short get(Object receiver, VarHandle varHandle) {1351receiver.getClass();1352return _unsafe.getShort(receiver, ((FieldVarHandle)varHandle).vmslot);1353}13541355private static final void set(Object receiver, short value, VarHandle varHandle) {1356receiver.getClass();1357_unsafe.putShort(receiver, ((FieldVarHandle)varHandle).vmslot, value);1358}13591360private static final short getVolatile(Object receiver, VarHandle varHandle) {1361receiver.getClass();1362return _unsafe.getShortVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);1363}13641365private static final void setVolatile(Object receiver, short value, VarHandle varHandle) {1366receiver.getClass();1367_unsafe.putShortVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);1368}13691370private static final short getOpaque(Object receiver, VarHandle varHandle) {1371receiver.getClass();1372return _unsafe.getShortOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);1373}13741375private static final void setOpaque(Object receiver, short value, VarHandle varHandle) {1376receiver.getClass();1377_unsafe.putShortOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);1378}13791380private static final short getAcquire(Object receiver, VarHandle varHandle) {1381receiver.getClass();1382return _unsafe.getShortAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);1383}13841385private static final void setRelease(Object receiver, short value, VarHandle varHandle) {1386receiver.getClass();1387_unsafe.putShortRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1388}13891390private static final boolean compareAndSet(Object receiver, short testValue, short newValue, VarHandle varHandle) {1391receiver.getClass();1392/*[IF Sidecar19-SE-OpenJ9]*/1393return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1394/*[ELSE]1395return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1396/*[ENDIF]*/1397}13981399private static final short compareAndExchange(Object receiver, short testValue, short newValue, VarHandle varHandle) {1400receiver.getClass();1401/*[IF Sidecar19-SE-OpenJ9]*/1402return (short)_unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1403/*[ELSE]1404return (short)_unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1405/*[ENDIF]*/1406}14071408private static final short compareAndExchangeAcquire(Object receiver, short testValue, short newValue, VarHandle varHandle) {1409receiver.getClass();1410return (short)_unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1411}14121413private static final short compareAndExchangeRelease(Object receiver, short testValue, short newValue, VarHandle varHandle) {1414receiver.getClass();1415return (short)_unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1416}14171418private static final boolean weakCompareAndSet(Object receiver, short testValue, short newValue, VarHandle varHandle) {1419receiver.getClass();1420/*[IF Sidecar19-SE-OpenJ9]*/1421return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1422/*[ELSE]1423return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1424/*[ENDIF]*/1425}14261427private static final boolean weakCompareAndSetAcquire(Object receiver, short testValue, short newValue, VarHandle varHandle) {1428receiver.getClass();1429/*[IF Sidecar19-SE-OpenJ9]*/1430return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1431/*[ELSE]1432return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1433/*[ENDIF]*/1434}14351436private static final boolean weakCompareAndSetRelease(Object receiver, short testValue, short newValue, VarHandle varHandle) {1437receiver.getClass();1438/*[IF Sidecar19-SE-OpenJ9]*/1439return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1440/*[ELSE]1441return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1442/*[ENDIF]*/1443}14441445private static final boolean weakCompareAndSetPlain(Object receiver, short testValue, short newValue, VarHandle varHandle) {1446receiver.getClass();1447/*[IF Sidecar19-SE-OpenJ9]*/1448return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1449/*[ELSE]1450return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);1451/*[ENDIF]*/1452}14531454private static final short getAndSet(Object receiver, short value, VarHandle varHandle) {1455receiver.getClass();1456return (short)_unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1457}14581459private static final short getAndSetAcquire(Object receiver, short value, VarHandle varHandle) {1460receiver.getClass();1461return (short)_unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1462}14631464private static final short getAndSetRelease(Object receiver, short value, VarHandle varHandle) {1465receiver.getClass();1466return (short)_unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1467}14681469private static final short getAndAdd(Object receiver, short value, VarHandle varHandle) {1470receiver.getClass();1471return (short)_unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1472}14731474private static final short getAndAddAcquire(Object receiver, short value, VarHandle varHandle) {1475receiver.getClass();1476return (short)_unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1477}14781479private static final short getAndAddRelease(Object receiver, short value, VarHandle varHandle) {1480receiver.getClass();1481return (short)_unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1482}14831484private static final short getAndBitwiseAnd(Object receiver, short value, VarHandle varHandle) {1485receiver.getClass();1486return (short)_unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1487}14881489private static final short getAndBitwiseAndAcquire(Object receiver, short value, VarHandle varHandle) {1490receiver.getClass();1491return (short)_unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1492}14931494private static final short getAndBitwiseAndRelease(Object receiver, short value, VarHandle varHandle) {1495receiver.getClass();1496return (short)_unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1497}14981499private static final short getAndBitwiseOr(Object receiver, short value, VarHandle varHandle) {1500receiver.getClass();1501return (short)_unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1502}15031504private static final short getAndBitwiseOrAcquire(Object receiver, short value, VarHandle varHandle) {1505receiver.getClass();1506return (short)_unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1507}15081509private static final short getAndBitwiseOrRelease(Object receiver, short value, VarHandle varHandle) {1510receiver.getClass();1511return (short)_unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1512}15131514private static final short getAndBitwiseXor(Object receiver, short value, VarHandle varHandle) {1515receiver.getClass();1516return (short)_unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);1517}15181519private static final short getAndBitwiseXorAcquire(Object receiver, short value, VarHandle varHandle) {1520receiver.getClass();1521return (short)_unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);1522}15231524private static final short getAndBitwiseXorRelease(Object receiver, short value, VarHandle varHandle) {1525receiver.getClass();1526return (short)_unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1527}1528}15291530static final class OpBoolean extends InstanceFieldVarHandleOperations {1531private static final boolean get(Object receiver, VarHandle varHandle) {1532receiver.getClass();1533return _unsafe.getBoolean(receiver, ((FieldVarHandle)varHandle).vmslot);1534}15351536private static final void set(Object receiver, boolean value, VarHandle varHandle) {1537receiver.getClass();1538_unsafe.putBoolean(receiver, ((FieldVarHandle)varHandle).vmslot, value);1539}15401541private static final boolean getVolatile(Object receiver, VarHandle varHandle) {1542receiver.getClass();1543return _unsafe.getBooleanVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);1544}15451546private static final void setVolatile(Object receiver, boolean value, VarHandle varHandle) {1547receiver.getClass();1548_unsafe.putBooleanVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);1549}15501551private static final boolean getOpaque(Object receiver, VarHandle varHandle) {1552receiver.getClass();1553return _unsafe.getBooleanOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);1554}15551556private static final void setOpaque(Object receiver, boolean value, VarHandle varHandle) {1557receiver.getClass();1558_unsafe.putBooleanOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);1559}15601561private static final boolean getAcquire(Object receiver, VarHandle varHandle) {1562receiver.getClass();1563return _unsafe.getBooleanAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);1564}15651566private static final void setRelease(Object receiver, boolean value, VarHandle varHandle) {1567receiver.getClass();1568_unsafe.putBooleanRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);1569}15701571private static final boolean compareAndSet(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1572receiver.getClass();1573/*[IF Sidecar19-SE-OpenJ9]*/1574return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1575/*[ELSE]1576return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1577/*[ENDIF]*/1578}15791580private static final boolean compareAndExchange(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1581receiver.getClass();1582/*[IF Sidecar19-SE-OpenJ9]*/1583return (0 != _unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));1584/*[ELSE]1585return (0 != _unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));1586/*[ENDIF]*/1587}15881589private static final boolean compareAndExchangeAcquire(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1590receiver.getClass();1591return (0 != _unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));1592}15931594private static final boolean compareAndExchangeRelease(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1595receiver.getClass();1596return (0 != _unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));1597}15981599private static final boolean weakCompareAndSet(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1600receiver.getClass();1601/*[IF Sidecar19-SE-OpenJ9]*/1602return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1603/*[ELSE]1604return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1605/*[ENDIF]*/1606}16071608private static final boolean weakCompareAndSetAcquire(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1609receiver.getClass();1610/*[IF Sidecar19-SE-OpenJ9]*/1611return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1612/*[ELSE]1613return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1614/*[ENDIF]*/1615}16161617private static final boolean weakCompareAndSetRelease(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1618receiver.getClass();1619/*[IF Sidecar19-SE-OpenJ9]*/1620return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1621/*[ELSE]1622return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1623/*[ENDIF]*/1624}16251626private static final boolean weakCompareAndSetPlain(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {1627receiver.getClass();1628/*[IF Sidecar19-SE-OpenJ9]*/1629return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1630/*[ELSE]1631return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);1632/*[ENDIF]*/1633}16341635private static final boolean getAndSet(Object receiver, boolean value, VarHandle varHandle) {1636receiver.getClass();1637return (0 != _unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1638}16391640private static final boolean getAndSetAcquire(Object receiver, boolean value, VarHandle varHandle) {1641receiver.getClass();1642return (0 != _unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1643}16441645private static final boolean getAndSetRelease(Object receiver, boolean value, VarHandle varHandle) {1646receiver.getClass();1647return (0 != _unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1648}16491650private static final boolean getAndAdd(Object receiver, boolean value, VarHandle varHandle) {1651throw operationNotSupported(varHandle);1652}16531654private static final boolean getAndAddAcquire(Object receiver, boolean value, VarHandle varHandle) {1655throw operationNotSupported(varHandle);1656}16571658private static final boolean getAndAddRelease(Object receiver, boolean value, VarHandle varHandle) {1659throw operationNotSupported(varHandle);1660}16611662private static final boolean getAndBitwiseAnd(Object receiver, boolean value, VarHandle varHandle) {1663receiver.getClass();1664return (0 != _unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1665}16661667private static final boolean getAndBitwiseAndAcquire(Object receiver, boolean value, VarHandle varHandle) {1668receiver.getClass();1669return (0 != _unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1670}16711672private static final boolean getAndBitwiseAndRelease(Object receiver, boolean value, VarHandle varHandle) {1673receiver.getClass();1674return (0 != _unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1675}16761677private static final boolean getAndBitwiseOr(Object receiver, boolean value, VarHandle varHandle) {1678receiver.getClass();1679return (0 != _unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1680}16811682private static final boolean getAndBitwiseOrAcquire(Object receiver, boolean value, VarHandle varHandle) {1683receiver.getClass();1684return (0 != _unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1685}16861687private static final boolean getAndBitwiseOrRelease(Object receiver, boolean value, VarHandle varHandle) {1688receiver.getClass();1689return (0 != _unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1690}16911692private static final boolean getAndBitwiseXor(Object receiver, boolean value, VarHandle varHandle) {1693receiver.getClass();1694return (0 != _unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1695}16961697private static final boolean getAndBitwiseXorAcquire(Object receiver, boolean value, VarHandle varHandle) {1698receiver.getClass();1699return (0 != _unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1700}17011702private static final boolean getAndBitwiseXorRelease(Object receiver, boolean value, VarHandle varHandle) {1703receiver.getClass();1704return (0 != _unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));1705}1706}1707}1708}170917101711