Path: blob/master/jcl/src/java.base/share/classes/java/lang/invoke/ByteArrayViewVarHandle.java
12520 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.ByteArrayViewVarHandle.ByteArrayViewVarHandleOperations.*;25import static java.lang.invoke.MethodType.methodType;2627import java.nio.ByteOrder;28import jdk.internal.misc.Unsafe;2930final class ByteArrayViewVarHandle extends ViewVarHandle {31private final static Class<?>[] COORDINATE_TYPES = new Class<?>[] {byte[].class, int.class};3233/**34* Populates the static 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<?> type, ByteOrder byteOrder) {40Class<? extends ByteArrayViewVarHandleOperations> operationsClass = null;41boolean convertEndian = (byteOrder != ByteOrder.nativeOrder());4243if (int.class == type) {44operationsClass = convertEndian ? OpIntConvertEndian.class : OpInt.class;45} else if (long.class == type) {46operationsClass = convertEndian ? OpLongConvertEndian.class : OpLong.class;47} else if (char.class == type) {48operationsClass = convertEndian ? OpCharConvertEndian.class : OpChar.class;49} else if (double.class == type) {50operationsClass = convertEndian ? OpDoubleConvertEndian.class : OpDouble.class;51} else if (float.class == type) {52operationsClass = convertEndian ? OpFloatConvertEndian.class : OpFloat.class;53} else if (short.class == type) {54operationsClass = convertEndian ? OpShortConvertEndian.class : OpShort.class;55} else {56/*[MSG "K0624", "{0} is not a supported view type."]*/57throw new UnsupportedOperationException(com.ibm.oti.util.Msg.getString("K0624", type)); //$NON-NLS-1$58}5960MethodType getter = methodType(type, byte[].class, int.class, VarHandle.class);61MethodType setter = methodType(void.class, byte[].class, int.class, type, VarHandle.class);62MethodType compareAndSet = methodType(boolean.class, byte[].class, int.class, type, type, VarHandle.class);63MethodType compareAndExchange = compareAndSet.changeReturnType(type);64MethodType getAndSet = setter.changeReturnType(type);65MethodType[] lookupTypes = populateMTs(getter, setter, compareAndSet, compareAndExchange, getAndSet);6667return populateMHs(operationsClass, lookupTypes, lookupTypes);68}6970/**71* Constructs a VarHandle that can access elements of a byte array as wider types.72*73* @param viewArrayType The component type used when viewing elements of the array.74*/75ByteArrayViewVarHandle(Class<?> viewArrayType, ByteOrder byteOrder) {76super(viewArrayType, COORDINATE_TYPES, populateMHs(viewArrayType, byteOrder), 0);77}7879/**80* Type specific methods used by byte array view VarHandle methods.81*/82@SuppressWarnings("unused")83static class ByteArrayViewVarHandleOperations extends ViewVarHandle.ViewVarHandleOperations {84private static final int INDEX_OFFSET = Unsafe.ARRAY_BYTE_BASE_OFFSET;8586private static final long computeOffset(int index) {87return (long)INDEX_OFFSET + index;88}8990static long checkAndComputeOffset(byte[] receiver, int viewTypeSize, int index, boolean allowUnaligned) {91long offset = computeOffset(index);9293receiver.getClass();94boundsCheck(receiver.length, viewTypeSize, index);95alignmentCheck(offset, viewTypeSize, allowUnaligned);9697return offset;98}99100static final class OpChar extends ByteArrayViewVarHandleOperations {101private static final int BYTES = Character.BYTES;102103private static final char get(byte[] receiver, int index, VarHandle varHandle) {104long offset = checkAndComputeOffset(receiver, BYTES, index, true);105return _unsafe.getChar(receiver, offset);106}107108private static final void set(byte[] receiver, int index, char value, VarHandle varHandle) {109long offset = checkAndComputeOffset(receiver, BYTES, index, true);110_unsafe.putChar(receiver, offset, value);111}112113private static final char getVolatile(byte[] receiver, int index, VarHandle varHandle) {114long offset = checkAndComputeOffset(receiver, BYTES, index, false);115return _unsafe.getCharVolatile(receiver, offset);116}117118private static final void setVolatile(byte[] receiver, int index, char value, VarHandle varHandle) {119long offset = checkAndComputeOffset(receiver, BYTES, index, false);120_unsafe.putCharVolatile(receiver, offset, value);121}122123private static final char getOpaque(byte[] receiver, int index, VarHandle varHandle) {124long offset = checkAndComputeOffset(receiver, BYTES, index, false);125return _unsafe.getCharOpaque(receiver, offset);126}127128private static final void setOpaque(byte[] receiver, int index, char value, VarHandle varHandle) {129long offset = checkAndComputeOffset(receiver, BYTES, index, false);130_unsafe.putCharOpaque(receiver, offset, value);131}132133private static final char getAcquire(byte[] receiver, int index, VarHandle varHandle) {134long offset = checkAndComputeOffset(receiver, BYTES, index, false);135return _unsafe.getCharAcquire(receiver, offset);136}137138private static final void setRelease(byte[] receiver, int index, char value, VarHandle varHandle) {139long offset = checkAndComputeOffset(receiver, BYTES, index, false);140_unsafe.putCharRelease(receiver, offset, value);141}142143private static final boolean compareAndSet(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {144throw operationNotSupported(varHandle);145}146147private static final char compareAndExchange(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {148throw operationNotSupported(varHandle);149}150151private static final char compareAndExchangeAcquire(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {152throw operationNotSupported(varHandle);153}154155private static final char compareAndExchangeRelease(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {156throw operationNotSupported(varHandle);157}158159private static final boolean weakCompareAndSet(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {160throw operationNotSupported(varHandle);161}162163private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {164throw operationNotSupported(varHandle);165}166167private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {168throw operationNotSupported(varHandle);169}170171private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {172throw operationNotSupported(varHandle);173}174175private static final char getAndSet(byte[] receiver, int index, char value, VarHandle varHandle) {176throw operationNotSupported(varHandle);177}178179private static final char getAndSetAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {180throw operationNotSupported(varHandle);181}182183private static final char getAndSetRelease(byte[] receiver, int index, char value, VarHandle varHandle) {184throw operationNotSupported(varHandle);185}186187private static final char getAndAdd(byte[] receiver, int index, char value, VarHandle varHandle) {188throw operationNotSupported(varHandle);189}190191private static final char getAndAddAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {192throw operationNotSupported(varHandle);193}194195private static final char getAndAddRelease(byte[] receiver, int index, char value, VarHandle varHandle) {196throw operationNotSupported(varHandle);197}198199private static final char getAndBitwiseAnd(byte[] receiver, int index, char value, VarHandle varHandle) {200throw operationNotSupported(varHandle);201}202203private static final char getAndBitwiseAndAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {204throw operationNotSupported(varHandle);205}206207private static final char getAndBitwiseAndRelease(byte[] receiver, int index, char value, VarHandle varHandle) {208throw operationNotSupported(varHandle);209}210211private static final char getAndBitwiseOr(byte[] receiver, int index, char value, VarHandle varHandle) {212throw operationNotSupported(varHandle);213}214215private static final char getAndBitwiseOrAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {216throw operationNotSupported(varHandle);217}218219private static final char getAndBitwiseOrRelease(byte[] receiver, int index, char value, VarHandle varHandle) {220throw operationNotSupported(varHandle);221}222223private static final char getAndBitwiseXor(byte[] receiver, int index, char value, VarHandle varHandle) {224throw operationNotSupported(varHandle);225}226227private static final char getAndBitwiseXorAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {228throw operationNotSupported(varHandle);229}230231private static final char getAndBitwiseXorRelease(byte[] receiver, int index, char value, VarHandle varHandle) {232throw operationNotSupported(varHandle);233}234}235236static final class OpDouble extends ByteArrayViewVarHandleOperations {237private static final int BYTES = Double.BYTES;238239private static final double get(byte[] receiver, int index, VarHandle varHandle) {240long offset = checkAndComputeOffset(receiver, BYTES, index, true);241return _unsafe.getDouble(receiver, offset);242}243244private static final void set(byte[] receiver, int index, double value, VarHandle varHandle) {245long offset = checkAndComputeOffset(receiver, BYTES, index, true);246_unsafe.putDouble(receiver, offset, value);247}248249private static final double getVolatile(byte[] receiver, int index, VarHandle varHandle) {250long offset = checkAndComputeOffset(receiver, BYTES, index, false);251return _unsafe.getDoubleVolatile(receiver, offset);252}253254private static final void setVolatile(byte[] receiver, int index, double value, VarHandle varHandle) {255long offset = checkAndComputeOffset(receiver, BYTES, index, false);256_unsafe.putDoubleVolatile(receiver, offset, value);257}258259private static final double getOpaque(byte[] receiver, int index, VarHandle varHandle) {260long offset = checkAndComputeOffset(receiver, BYTES, index, false);261return _unsafe.getDoubleOpaque(receiver, offset);262}263264private static final void setOpaque(byte[] receiver, int index, double value, VarHandle varHandle) {265long offset = checkAndComputeOffset(receiver, BYTES, index, false);266_unsafe.putDoubleOpaque(receiver, offset, value);267}268269private static final double getAcquire(byte[] receiver, int index, VarHandle varHandle) {270long offset = checkAndComputeOffset(receiver, BYTES, index, false);271return _unsafe.getDoubleAcquire(receiver, offset);272}273274private static final void setRelease(byte[] receiver, int index, double value, VarHandle varHandle) {275long offset = checkAndComputeOffset(receiver, BYTES, index, false);276_unsafe.putDoubleRelease(receiver, offset, value);277}278279private static final boolean compareAndSet(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {280long offset = checkAndComputeOffset(receiver, BYTES, index, false);281/*[IF Sidecar19-SE-OpenJ9]*/282return _unsafe.compareAndSetDouble(receiver, offset, testValue, newValue);283/*[ELSE]284return _unsafe.compareAndSwapDouble(receiver, offset, testValue, newValue);285/*[ENDIF]*/286}287288private static final double compareAndExchange(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {289long offset = checkAndComputeOffset(receiver, BYTES, index, false);290/*[IF Sidecar19-SE-OpenJ9]*/291return _unsafe.compareAndExchangeDouble(receiver, offset, testValue, newValue);292/*[ELSE]293return _unsafe.compareAndExchangeDoubleVolatile(receiver, offset, testValue, newValue);294/*[ENDIF]*/295}296297private static final double compareAndExchangeAcquire(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {298long offset = checkAndComputeOffset(receiver, BYTES, index, false);299return _unsafe.compareAndExchangeDoubleAcquire(receiver, offset, testValue, newValue);300}301302private static final double compareAndExchangeRelease(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {303long offset = checkAndComputeOffset(receiver, BYTES, index, false);304return _unsafe.compareAndExchangeDoubleRelease(receiver, offset, testValue, newValue);305}306307private static final boolean weakCompareAndSet(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {308long offset = checkAndComputeOffset(receiver, BYTES, index, false);309/*[IF Sidecar19-SE-OpenJ9]*/310return _unsafe.weakCompareAndSetDoublePlain(receiver, offset, testValue, newValue);311/*[ELSE]312return _unsafe.weakCompareAndSwapDouble(receiver, offset, testValue, newValue);313/*[ENDIF]*/314}315316private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {317long offset = checkAndComputeOffset(receiver, BYTES, index, false);318/*[IF Sidecar19-SE-OpenJ9]*/319return _unsafe.weakCompareAndSetDoubleAcquire(receiver, offset, testValue, newValue);320/*[ELSE]321return _unsafe.weakCompareAndSwapDoubleAcquire(receiver, offset, testValue, newValue);322/*[ENDIF]*/323}324325private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {326long offset = checkAndComputeOffset(receiver, BYTES, index, false);327/*[IF Sidecar19-SE-OpenJ9]*/328return _unsafe.weakCompareAndSetDoubleRelease(receiver, offset, testValue, newValue);329/*[ELSE]330return _unsafe.weakCompareAndSwapDoubleRelease(receiver, offset, testValue, newValue);331/*[ENDIF]*/332}333334private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {335long offset = checkAndComputeOffset(receiver, BYTES, index, false);336/*[IF Sidecar19-SE-OpenJ9]*/337return _unsafe.weakCompareAndSetDoublePlain(receiver, offset, testValue, newValue);338/*[ELSE]339return _unsafe.weakCompareAndSwapDouble(receiver, offset, testValue, newValue);340/*[ENDIF]*/341}342343private static final double getAndSet(byte[] receiver, int index, double value, VarHandle varHandle) {344long offset = checkAndComputeOffset(receiver, BYTES, index, false);345return _unsafe.getAndSetDouble(receiver, offset, value);346}347348private static final double getAndSetAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {349long offset = checkAndComputeOffset(receiver, BYTES, index, false);350return _unsafe.getAndSetDoubleAcquire(receiver, offset, value);351}352353private static final double getAndSetRelease(byte[] receiver, int index, double value, VarHandle varHandle) {354long offset = checkAndComputeOffset(receiver, BYTES, index, false);355return _unsafe.getAndSetDoubleRelease(receiver, offset, value);356}357358private static final double getAndAdd(byte[] receiver, int index, double value, VarHandle varHandle) {359throw operationNotSupported(varHandle);360}361362private static final double getAndAddAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {363throw operationNotSupported(varHandle);364}365366private static final double getAndAddRelease(byte[] receiver, int index, double value, VarHandle varHandle) {367throw operationNotSupported(varHandle);368}369370private static final double getAndBitwiseAnd(byte[] receiver, int index, double value, VarHandle varHandle) {371throw operationNotSupported(varHandle);372}373374private static final double getAndBitwiseAndAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {375throw operationNotSupported(varHandle);376}377378private static final double getAndBitwiseAndRelease(byte[] receiver, int index, double value, VarHandle varHandle) {379throw operationNotSupported(varHandle);380}381382private static final double getAndBitwiseOr(byte[] receiver, int index, double value, VarHandle varHandle) {383throw operationNotSupported(varHandle);384}385386private static final double getAndBitwiseOrAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {387throw operationNotSupported(varHandle);388}389390private static final double getAndBitwiseOrRelease(byte[] receiver, int index, double value, VarHandle varHandle) {391throw operationNotSupported(varHandle);392}393394private static final double getAndBitwiseXor(byte[] receiver, int index, double value, VarHandle varHandle) {395throw operationNotSupported(varHandle);396}397398private static final double getAndBitwiseXorAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {399throw operationNotSupported(varHandle);400}401402private static final double getAndBitwiseXorRelease(byte[] receiver, int index, double value, VarHandle varHandle) {403throw operationNotSupported(varHandle);404}405}406407static final class OpFloat extends ByteArrayViewVarHandleOperations {408private static final int BYTES = Float.BYTES;409410private static final float get(byte[] receiver, int index, VarHandle varHandle) {411long offset = checkAndComputeOffset(receiver, BYTES, index, true);412return _unsafe.getFloat(receiver, offset);413}414415private static final void set(byte[] receiver, int index, float value, VarHandle varHandle) {416long offset = checkAndComputeOffset(receiver, BYTES, index, true);417_unsafe.putFloat(receiver, offset, value);418}419420private static final float getVolatile(byte[] receiver, int index, VarHandle varHandle) {421long offset = checkAndComputeOffset(receiver, BYTES, index, false);422return _unsafe.getFloatVolatile(receiver, offset);423}424425private static final void setVolatile(byte[] receiver, int index, float value, VarHandle varHandle) {426long offset = checkAndComputeOffset(receiver, BYTES, index, false);427_unsafe.putFloatVolatile(receiver, offset, value);428}429430private static final float getOpaque(byte[] receiver, int index, VarHandle varHandle) {431long offset = checkAndComputeOffset(receiver, BYTES, index, false);432return _unsafe.getFloatOpaque(receiver, offset);433}434435private static final void setOpaque(byte[] receiver, int index, float value, VarHandle varHandle) {436long offset = checkAndComputeOffset(receiver, BYTES, index, false);437_unsafe.putFloatOpaque(receiver, offset, value);438}439440private static final float getAcquire(byte[] receiver, int index, VarHandle varHandle) {441long offset = checkAndComputeOffset(receiver, BYTES, index, false);442return _unsafe.getFloatAcquire(receiver, offset);443}444445private static final void setRelease(byte[] receiver, int index, float value, VarHandle varHandle) {446long offset = checkAndComputeOffset(receiver, BYTES, index, false);447_unsafe.putFloatRelease(receiver, offset, value);448}449450private static final boolean compareAndSet(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {451long offset = checkAndComputeOffset(receiver, BYTES, index, false);452/*[IF Sidecar19-SE-OpenJ9]*/453return _unsafe.compareAndSetFloat(receiver, offset, testValue, newValue);454/*[ELSE]455return _unsafe.compareAndSwapFloat(receiver, offset, testValue, newValue);456/*[ENDIF]*/457}458459private static final float compareAndExchange(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {460long offset = checkAndComputeOffset(receiver, BYTES, index, false);461/*[IF Sidecar19-SE-OpenJ9]*/462return _unsafe.compareAndExchangeFloat(receiver, offset, testValue, newValue);463/*[ELSE]464return _unsafe.compareAndExchangeFloatVolatile(receiver, offset, testValue, newValue);465/*[ENDIF]*/466}467468private static final float compareAndExchangeAcquire(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {469long offset = checkAndComputeOffset(receiver, BYTES, index, false);470return _unsafe.compareAndExchangeFloatAcquire(receiver, offset, testValue, newValue);471}472473private static final float compareAndExchangeRelease(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {474long offset = checkAndComputeOffset(receiver, BYTES, index, false);475return _unsafe.compareAndExchangeFloatRelease(receiver, offset, testValue, newValue);476}477478private static final boolean weakCompareAndSet(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {479long offset = checkAndComputeOffset(receiver, BYTES, index, false);480/*[IF Sidecar19-SE-OpenJ9]*/481return _unsafe.weakCompareAndSetFloatPlain(receiver, offset, testValue, newValue);482/*[ELSE]483return _unsafe.weakCompareAndSwapFloat(receiver, offset, testValue, newValue);484/*[ENDIF]*/485}486487private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {488long offset = checkAndComputeOffset(receiver, BYTES, index, false);489/*[IF Sidecar19-SE-OpenJ9]*/490return _unsafe.weakCompareAndSetFloatAcquire(receiver, offset, testValue, newValue);491/*[ELSE]492return _unsafe.weakCompareAndSwapFloatAcquire(receiver, offset, testValue, newValue);493/*[ENDIF]*/494}495496private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {497long offset = checkAndComputeOffset(receiver, BYTES, index, false);498/*[IF Sidecar19-SE-OpenJ9]*/499return _unsafe.weakCompareAndSetFloatRelease(receiver, offset, testValue, newValue);500/*[ELSE]501return _unsafe.weakCompareAndSwapFloatRelease(receiver, offset, testValue, newValue);502/*[ENDIF]*/503}504505private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {506long offset = checkAndComputeOffset(receiver, BYTES, index, false);507/*[IF Sidecar19-SE-OpenJ9]*/508return _unsafe.weakCompareAndSetFloatPlain(receiver, offset, testValue, newValue);509/*[ELSE]510return _unsafe.weakCompareAndSwapFloat(receiver, offset, testValue, newValue);511/*[ENDIF]*/512}513514private static final float getAndSet(byte[] receiver, int index, float value, VarHandle varHandle) {515long offset = checkAndComputeOffset(receiver, BYTES, index, false);516return _unsafe.getAndSetFloat(receiver, offset, value);517}518519private static final float getAndSetAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {520long offset = checkAndComputeOffset(receiver, BYTES, index, false);521return _unsafe.getAndSetFloatAcquire(receiver, offset, value);522}523524private static final float getAndSetRelease(byte[] receiver, int index, float value, VarHandle varHandle) {525long offset = checkAndComputeOffset(receiver, BYTES, index, false);526return _unsafe.getAndSetFloatRelease(receiver, offset, value);527}528529private static final float getAndAdd(byte[] receiver, int index, float value, VarHandle varHandle) {530throw operationNotSupported(varHandle);531}532533private static final float getAndAddAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {534throw operationNotSupported(varHandle);535}536537private static final float getAndAddRelease(byte[] receiver, int index, float value, VarHandle varHandle) {538throw operationNotSupported(varHandle);539}540541private static final float getAndBitwiseAnd(byte[] receiver, int index, float value, VarHandle varHandle) {542throw operationNotSupported(varHandle);543}544545private static final float getAndBitwiseAndAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {546throw operationNotSupported(varHandle);547}548549private static final float getAndBitwiseAndRelease(byte[] receiver, int index, float value, VarHandle varHandle) {550throw operationNotSupported(varHandle);551}552553private static final float getAndBitwiseOr(byte[] receiver, int index, float value, VarHandle varHandle) {554throw operationNotSupported(varHandle);555}556557private static final float getAndBitwiseOrAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {558throw operationNotSupported(varHandle);559}560561private static final float getAndBitwiseOrRelease(byte[] receiver, int index, float value, VarHandle varHandle) {562throw operationNotSupported(varHandle);563}564565private static final float getAndBitwiseXor(byte[] receiver, int index, float value, VarHandle varHandle) {566throw operationNotSupported(varHandle);567}568569private static final float getAndBitwiseXorAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {570throw operationNotSupported(varHandle);571}572573private static final float getAndBitwiseXorRelease(byte[] receiver, int index, float value, VarHandle varHandle) {574throw operationNotSupported(varHandle);575}576}577578static final class OpInt extends ByteArrayViewVarHandleOperations {579private static final int BYTES = Integer.BYTES;580581private static final int get(byte[] receiver, int index, VarHandle varHandle) {582long offset = checkAndComputeOffset(receiver, BYTES, index, true);583return _unsafe.getInt(receiver, offset);584}585586private static final void set(byte[] receiver, int index, int value, VarHandle varHandle) {587long offset = checkAndComputeOffset(receiver, BYTES, index, true);588_unsafe.putInt(receiver, offset, value);589}590591private static final int getVolatile(byte[] receiver, int index, VarHandle varHandle) {592long offset = checkAndComputeOffset(receiver, BYTES, index, false);593return _unsafe.getIntVolatile(receiver, offset);594}595596private static final void setVolatile(byte[] receiver, int index, int value, VarHandle varHandle) {597long offset = checkAndComputeOffset(receiver, BYTES, index, false);598_unsafe.putIntVolatile(receiver, offset, value);599}600601private static final int getOpaque(byte[] receiver, int index, VarHandle varHandle) {602long offset = checkAndComputeOffset(receiver, BYTES, index, false);603return _unsafe.getIntOpaque(receiver, offset);604}605606private static final void setOpaque(byte[] receiver, int index, int value, VarHandle varHandle) {607long offset = checkAndComputeOffset(receiver, BYTES, index, false);608_unsafe.putIntOpaque(receiver, offset, value);609}610611private static final int getAcquire(byte[] receiver, int index, VarHandle varHandle) {612long offset = checkAndComputeOffset(receiver, BYTES, index, false);613return _unsafe.getIntAcquire(receiver, offset);614}615616private static final void setRelease(byte[] receiver, int index, int value, VarHandle varHandle) {617long offset = checkAndComputeOffset(receiver, BYTES, index, false);618_unsafe.putIntRelease(receiver, offset, value);619}620621private static final boolean compareAndSet(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {622long offset = checkAndComputeOffset(receiver, BYTES, index, false);623/*[IF Sidecar19-SE-OpenJ9]*/624return _unsafe.compareAndSetInt(receiver, offset, testValue, newValue);625/*[ELSE]626return _unsafe.compareAndSwapInt(receiver, offset, testValue, newValue);627/*[ENDIF]*/628}629630private static final int compareAndExchange(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {631long offset = checkAndComputeOffset(receiver, BYTES, index, false);632/*[IF Sidecar19-SE-OpenJ9]*/633return _unsafe.compareAndExchangeInt(receiver, offset, testValue, newValue);634/*[ELSE]635return _unsafe.compareAndExchangeIntVolatile(receiver, offset, testValue, newValue);636/*[ENDIF]*/637}638639private static final int compareAndExchangeAcquire(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {640long offset = checkAndComputeOffset(receiver, BYTES, index, false);641return _unsafe.compareAndExchangeIntAcquire(receiver, offset, testValue, newValue);642}643644private static final int compareAndExchangeRelease(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {645long offset = checkAndComputeOffset(receiver, BYTES, index, false);646return _unsafe.compareAndExchangeIntRelease(receiver, offset, testValue, newValue);647}648649private static final boolean weakCompareAndSet(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {650long offset = checkAndComputeOffset(receiver, BYTES, index, false);651/*[IF Sidecar19-SE-OpenJ9]*/652return _unsafe.weakCompareAndSetIntPlain(receiver, offset, testValue, newValue);653/*[ELSE]654return _unsafe.weakCompareAndSwapInt(receiver, offset, testValue, newValue);655/*[ENDIF]*/656}657658private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {659long offset = checkAndComputeOffset(receiver, BYTES, index, false);660/*[IF Sidecar19-SE-OpenJ9]*/661return _unsafe.weakCompareAndSetIntAcquire(receiver, offset, testValue, newValue);662/*[ELSE]663return _unsafe.weakCompareAndSwapIntAcquire(receiver, offset, testValue, newValue);664/*[ENDIF]*/665}666667private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {668long offset = checkAndComputeOffset(receiver, BYTES, index, false);669/*[IF Sidecar19-SE-OpenJ9]*/670return _unsafe.weakCompareAndSetIntRelease(receiver, offset, testValue, newValue);671/*[ELSE]672return _unsafe.weakCompareAndSwapIntRelease(receiver, offset, testValue, newValue);673/*[ENDIF]*/674}675676private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {677long offset = checkAndComputeOffset(receiver, BYTES, index, false);678/*[IF Sidecar19-SE-OpenJ9]*/679return _unsafe.weakCompareAndSetIntPlain(receiver, offset, testValue, newValue);680/*[ELSE]681return _unsafe.weakCompareAndSwapInt(receiver, offset, testValue, newValue);682/*[ENDIF]*/683}684685private static final int getAndSet(byte[] receiver, int index, int value, VarHandle varHandle) {686long offset = checkAndComputeOffset(receiver, BYTES, index, false);687return _unsafe.getAndSetInt(receiver, offset, value);688}689690private static final int getAndSetAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {691long offset = checkAndComputeOffset(receiver, BYTES, index, false);692return _unsafe.getAndSetIntAcquire(receiver, offset, value);693}694695private static final int getAndSetRelease(byte[] receiver, int index, int value, VarHandle varHandle) {696long offset = checkAndComputeOffset(receiver, BYTES, index, false);697return _unsafe.getAndSetIntRelease(receiver, offset, value);698}699700private static final int getAndAdd(byte[] receiver, int index, int value, VarHandle varHandle) {701long offset = checkAndComputeOffset(receiver, BYTES, index, false);702return _unsafe.getAndAddInt(receiver, offset, value);703}704705private static final int getAndAddAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {706long offset = checkAndComputeOffset(receiver, BYTES, index, false);707return _unsafe.getAndAddIntAcquire(receiver, offset, value);708}709710private static final int getAndAddRelease(byte[] receiver, int index, int value, VarHandle varHandle) {711long offset = checkAndComputeOffset(receiver, BYTES, index, false);712return _unsafe.getAndAddIntRelease(receiver, offset, value);713}714715private static final int getAndBitwiseAnd(byte[] receiver, int index, int value, VarHandle varHandle) {716long offset = checkAndComputeOffset(receiver, BYTES, index, false);717return _unsafe.getAndBitwiseAndInt(receiver, offset, value);718}719720private static final int getAndBitwiseAndAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {721long offset = checkAndComputeOffset(receiver, BYTES, index, false);722return _unsafe.getAndBitwiseAndIntAcquire(receiver, offset, value);723}724725private static final int getAndBitwiseAndRelease(byte[] receiver, int index, int value, VarHandle varHandle) {726long offset = checkAndComputeOffset(receiver, BYTES, index, false);727return _unsafe.getAndBitwiseAndIntRelease(receiver, offset, value);728}729730private static final int getAndBitwiseOr(byte[] receiver, int index, int value, VarHandle varHandle) {731long offset = checkAndComputeOffset(receiver, BYTES, index, false);732return _unsafe.getAndBitwiseOrInt(receiver, offset, value);733}734735private static final int getAndBitwiseOrAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {736long offset = checkAndComputeOffset(receiver, BYTES, index, false);737return _unsafe.getAndBitwiseOrIntAcquire(receiver, offset, value);738}739740private static final int getAndBitwiseOrRelease(byte[] receiver, int index, int value, VarHandle varHandle) {741long offset = checkAndComputeOffset(receiver, BYTES, index, false);742return _unsafe.getAndBitwiseOrIntRelease(receiver, offset, value);743}744745private static final int getAndBitwiseXor(byte[] receiver, int index, int value, VarHandle varHandle) {746long offset = checkAndComputeOffset(receiver, BYTES, index, false);747return _unsafe.getAndBitwiseXorInt(receiver, offset, value);748}749750private static final int getAndBitwiseXorAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {751long offset = checkAndComputeOffset(receiver, BYTES, index, false);752return _unsafe.getAndBitwiseXorIntAcquire(receiver, offset, value);753}754755private static final int getAndBitwiseXorRelease(byte[] receiver, int index, int value, VarHandle varHandle) {756long offset = checkAndComputeOffset(receiver, BYTES, index, false);757return _unsafe.getAndBitwiseXorIntRelease(receiver, offset, value);758}759}760761static final class OpLong extends ByteArrayViewVarHandleOperations {762private static final int BYTES = Long.BYTES;763764private static final long get(byte[] receiver, int index, VarHandle varHandle) {765long offset = checkAndComputeOffset(receiver, BYTES, index, true);766return _unsafe.getLong(receiver, offset);767}768769private static final void set(byte[] receiver, int index, long value, VarHandle varHandle) {770long offset = checkAndComputeOffset(receiver, BYTES, index, true);771_unsafe.putLong(receiver, offset, value);772}773774private static final long getVolatile(byte[] receiver, int index, VarHandle varHandle) {775long offset = checkAndComputeOffset(receiver, BYTES, index, false);776return _unsafe.getLongVolatile(receiver, offset);777}778779private static final void setVolatile(byte[] receiver, int index, long value, VarHandle varHandle) {780long offset = checkAndComputeOffset(receiver, BYTES, index, false);781_unsafe.putLongVolatile(receiver, offset, value);782}783784private static final long getOpaque(byte[] receiver, int index, VarHandle varHandle) {785long offset = checkAndComputeOffset(receiver, BYTES, index, false);786return _unsafe.getLongOpaque(receiver, offset);787}788789private static final void setOpaque(byte[] receiver, int index, long value, VarHandle varHandle) {790long offset = checkAndComputeOffset(receiver, BYTES, index, false);791_unsafe.putLongOpaque(receiver, offset, value);792}793794private static final long getAcquire(byte[] receiver, int index, VarHandle varHandle) {795long offset = checkAndComputeOffset(receiver, BYTES, index, false);796return _unsafe.getLongAcquire(receiver, offset);797}798799private static final void setRelease(byte[] receiver, int index, long value, VarHandle varHandle) {800long offset = checkAndComputeOffset(receiver, BYTES, index, false);801_unsafe.putLongRelease(receiver, offset, value);802}803804private static final boolean compareAndSet(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {805long offset = checkAndComputeOffset(receiver, BYTES, index, false);806/*[IF Sidecar19-SE-OpenJ9]*/807return _unsafe.compareAndSetLong(receiver, offset, testValue, newValue);808/*[ELSE]809return _unsafe.compareAndSwapLong(receiver, offset, testValue, newValue);810/*[ENDIF]*/811}812813private static final long compareAndExchange(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {814long offset = checkAndComputeOffset(receiver, BYTES, index, false);815/*[IF Sidecar19-SE-OpenJ9]*/816return _unsafe.compareAndExchangeLong(receiver, offset, testValue, newValue);817/*[ELSE]818return _unsafe.compareAndExchangeLongVolatile(receiver, offset, testValue, newValue);819/*[ENDIF]*/820}821822private static final long compareAndExchangeAcquire(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {823long offset = checkAndComputeOffset(receiver, BYTES, index, false);824return _unsafe.compareAndExchangeLongAcquire(receiver, offset, testValue, newValue);825}826827private static final long compareAndExchangeRelease(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {828long offset = checkAndComputeOffset(receiver, BYTES, index, false);829return _unsafe.compareAndExchangeLongRelease(receiver, offset, testValue, newValue);830}831832private static final boolean weakCompareAndSet(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {833long offset = checkAndComputeOffset(receiver, BYTES, index, false);834/*[IF Sidecar19-SE-OpenJ9]*/835return _unsafe.weakCompareAndSetLongPlain(receiver, offset, testValue, newValue);836/*[ELSE]837return _unsafe.weakCompareAndSwapLong(receiver, offset, testValue, newValue);838/*[ENDIF]*/839}840841private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {842long offset = checkAndComputeOffset(receiver, BYTES, index, false);843/*[IF Sidecar19-SE-OpenJ9]*/844return _unsafe.weakCompareAndSetLongAcquire(receiver, offset, testValue, newValue);845/*[ELSE]846return _unsafe.weakCompareAndSwapLongAcquire(receiver, offset, testValue, newValue);847/*[ENDIF]*/848}849850private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {851long offset = checkAndComputeOffset(receiver, BYTES, index, false);852/*[IF Sidecar19-SE-OpenJ9]*/853return _unsafe.weakCompareAndSetLongRelease(receiver, offset, testValue, newValue);854/*[ELSE]855return _unsafe.weakCompareAndSwapLongRelease(receiver, offset, testValue, newValue);856/*[ENDIF]*/857}858859private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {860long offset = checkAndComputeOffset(receiver, BYTES, index, false);861/*[IF Sidecar19-SE-OpenJ9]*/862return _unsafe.weakCompareAndSetLongPlain(receiver, offset, testValue, newValue);863/*[ELSE]864return _unsafe.weakCompareAndSwapLong(receiver, offset, testValue, newValue);865/*[ENDIF]*/866}867868private static final long getAndSet(byte[] receiver, int index, long value, VarHandle varHandle) {869long offset = checkAndComputeOffset(receiver, BYTES, index, false);870return _unsafe.getAndSetLong(receiver, offset, value);871}872873private static final long getAndSetAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {874long offset = checkAndComputeOffset(receiver, BYTES, index, false);875return _unsafe.getAndSetLongAcquire(receiver, offset, value);876}877878private static final long getAndSetRelease(byte[] receiver, int index, long value, VarHandle varHandle) {879long offset = checkAndComputeOffset(receiver, BYTES, index, false);880return _unsafe.getAndSetLongRelease(receiver, offset, value);881}882883private static final long getAndAdd(byte[] receiver, int index, long value, VarHandle varHandle) {884long offset = checkAndComputeOffset(receiver, BYTES, index, false);885return _unsafe.getAndAddLong(receiver, offset, value);886}887888private static final long getAndAddAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {889long offset = checkAndComputeOffset(receiver, BYTES, index, false);890return _unsafe.getAndAddLongAcquire(receiver, offset, value);891}892893private static final long getAndAddRelease(byte[] receiver, int index, long value, VarHandle varHandle) {894long offset = checkAndComputeOffset(receiver, BYTES, index, false);895return _unsafe.getAndAddLongRelease(receiver, offset, value);896}897898private static final long getAndBitwiseAnd(byte[] receiver, int index, long value, VarHandle varHandle) {899long offset = checkAndComputeOffset(receiver, BYTES, index, false);900return _unsafe.getAndBitwiseAndLong(receiver, offset, value);901}902903private static final long getAndBitwiseAndAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {904long offset = checkAndComputeOffset(receiver, BYTES, index, false);905return _unsafe.getAndBitwiseAndLongAcquire(receiver, offset, value);906}907908private static final long getAndBitwiseAndRelease(byte[] receiver, int index, long value, VarHandle varHandle) {909long offset = checkAndComputeOffset(receiver, BYTES, index, false);910return _unsafe.getAndBitwiseAndLongRelease(receiver, offset, value);911}912913private static final long getAndBitwiseOr(byte[] receiver, int index, long value, VarHandle varHandle) {914long offset = checkAndComputeOffset(receiver, BYTES, index, false);915return _unsafe.getAndBitwiseOrLong(receiver, offset, value);916}917918private static final long getAndBitwiseOrAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {919long offset = checkAndComputeOffset(receiver, BYTES, index, false);920return _unsafe.getAndBitwiseOrLongAcquire(receiver, offset, value);921}922923private static final long getAndBitwiseOrRelease(byte[] receiver, int index, long value, VarHandle varHandle) {924long offset = checkAndComputeOffset(receiver, BYTES, index, false);925return _unsafe.getAndBitwiseOrLongRelease(receiver, offset, value);926}927928private static final long getAndBitwiseXor(byte[] receiver, int index, long value, VarHandle varHandle) {929long offset = checkAndComputeOffset(receiver, BYTES, index, false);930return _unsafe.getAndBitwiseXorLong(receiver, offset, value);931}932933private static final long getAndBitwiseXorAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {934long offset = checkAndComputeOffset(receiver, BYTES, index, false);935return _unsafe.getAndBitwiseXorLongAcquire(receiver, offset, value);936}937938private static final long getAndBitwiseXorRelease(byte[] receiver, int index, long value, VarHandle varHandle) {939long offset = checkAndComputeOffset(receiver, BYTES, index, false);940return _unsafe.getAndBitwiseXorLongRelease(receiver, offset, value);941}942}943944static final class OpShort extends ByteArrayViewVarHandleOperations {945private static final int BYTES = Short.BYTES;946947private static final short get(byte[] receiver, int index, VarHandle varHandle) {948long offset = checkAndComputeOffset(receiver, BYTES, index, true);949return _unsafe.getShort(receiver, offset);950}951952private static final void set(byte[] receiver, int index, short value, VarHandle varHandle) {953long offset = checkAndComputeOffset(receiver, BYTES, index, true);954_unsafe.putShort(receiver, offset, value);955}956957private static final short getVolatile(byte[] receiver, int index, VarHandle varHandle) {958long offset = checkAndComputeOffset(receiver, BYTES, index, false);959return _unsafe.getShortVolatile(receiver, offset);960}961962private static final void setVolatile(byte[] receiver, int index, short value, VarHandle varHandle) {963long offset = checkAndComputeOffset(receiver, BYTES, index, false);964_unsafe.putShortVolatile(receiver, offset, value);965}966967private static final short getOpaque(byte[] receiver, int index, VarHandle varHandle) {968long offset = checkAndComputeOffset(receiver, BYTES, index, false);969return _unsafe.getShortOpaque(receiver, offset);970}971972private static final void setOpaque(byte[] receiver, int index, short value, VarHandle varHandle) {973long offset = checkAndComputeOffset(receiver, BYTES, index, false);974_unsafe.putShortOpaque(receiver, offset, value);975}976977private static final short getAcquire(byte[] receiver, int index, VarHandle varHandle) {978long offset = checkAndComputeOffset(receiver, BYTES, index, false);979return _unsafe.getShortAcquire(receiver, offset);980}981982private static final void setRelease(byte[] receiver, int index, short value, VarHandle varHandle) {983long offset = checkAndComputeOffset(receiver, BYTES, index, false);984_unsafe.putShortRelease(receiver, offset, value);985}986987private static final boolean compareAndSet(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {988throw operationNotSupported(varHandle);989}990991private static final short compareAndExchange(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {992throw operationNotSupported(varHandle);993}994995private static final short compareAndExchangeAcquire(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {996throw operationNotSupported(varHandle);997}998999private static final short compareAndExchangeRelease(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {1000throw operationNotSupported(varHandle);1001}10021003private static final boolean weakCompareAndSet(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {1004throw operationNotSupported(varHandle);1005}10061007private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {1008throw operationNotSupported(varHandle);1009}10101011private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {1012throw operationNotSupported(varHandle);1013}10141015private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {1016throw operationNotSupported(varHandle);1017}10181019private static final short getAndSet(byte[] receiver, int index, short value, VarHandle varHandle) {1020throw operationNotSupported(varHandle);1021}10221023private static final short getAndSetAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {1024throw operationNotSupported(varHandle);1025}10261027private static final short getAndSetRelease(byte[] receiver, int index, short value, VarHandle varHandle) {1028throw operationNotSupported(varHandle);1029}10301031private static final short getAndAdd(byte[] receiver, int index, short value, VarHandle varHandle) {1032throw operationNotSupported(varHandle);1033}10341035private static final short getAndAddAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {1036throw operationNotSupported(varHandle);1037}10381039private static final short getAndAddRelease(byte[] receiver, int index, short value, VarHandle varHandle) {1040throw operationNotSupported(varHandle);1041}10421043private static final short getAndBitwiseAnd(byte[] receiver, int index, short value, VarHandle varHandle) {1044throw operationNotSupported(varHandle);1045}10461047private static final short getAndBitwiseAndAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {1048throw operationNotSupported(varHandle);1049}10501051private static final short getAndBitwiseAndRelease(byte[] receiver, int index, short value, VarHandle varHandle) {1052throw operationNotSupported(varHandle);1053}10541055private static final short getAndBitwiseOr(byte[] receiver, int index, short value, VarHandle varHandle) {1056throw operationNotSupported(varHandle);1057}10581059private static final short getAndBitwiseOrAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {1060throw operationNotSupported(varHandle);1061}10621063private static final short getAndBitwiseOrRelease(byte[] receiver, int index, short value, VarHandle varHandle) {1064throw operationNotSupported(varHandle);1065}10661067private static final short getAndBitwiseXor(byte[] receiver, int index, short value, VarHandle varHandle) {1068throw operationNotSupported(varHandle);1069}10701071private static final short getAndBitwiseXorAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {1072throw operationNotSupported(varHandle);1073}10741075private static final short getAndBitwiseXorRelease(byte[] receiver, int index, short value, VarHandle varHandle) {1076throw operationNotSupported(varHandle);1077}1078}10791080static final class OpCharConvertEndian extends ByteArrayViewVarHandleOperations {1081private static final int BYTES = Character.BYTES;10821083private static final char get(byte[] receiver, int index, VarHandle varHandle) {1084long offset = checkAndComputeOffset(receiver, BYTES, index, true);1085char result = _unsafe.getChar(receiver, offset);1086return convertEndian(result);1087}10881089private static final void set(byte[] receiver, int index, char value, VarHandle varHandle) {1090long offset = checkAndComputeOffset(receiver, BYTES, index, true);1091_unsafe.putChar(receiver, offset, convertEndian(value));1092}10931094private static final char getVolatile(byte[] receiver, int index, VarHandle varHandle) {1095long offset = checkAndComputeOffset(receiver, BYTES, index, false);1096char result = _unsafe.getCharVolatile(receiver, offset);1097return convertEndian(result);1098}10991100private static final void setVolatile(byte[] receiver, int index, char value, VarHandle varHandle) {1101long offset = checkAndComputeOffset(receiver, BYTES, index, false);1102_unsafe.putCharVolatile(receiver, offset, convertEndian(value));1103}11041105private static final char getOpaque(byte[] receiver, int index, VarHandle varHandle) {1106long offset = checkAndComputeOffset(receiver, BYTES, index, false);1107char result = _unsafe.getCharOpaque(receiver, offset);1108return convertEndian(result);1109}11101111private static final void setOpaque(byte[] receiver, int index, char value, VarHandle varHandle) {1112long offset = checkAndComputeOffset(receiver, BYTES, index, false);1113_unsafe.putCharOpaque(receiver, offset, convertEndian(value));1114}11151116private static final char getAcquire(byte[] receiver, int index, VarHandle varHandle) {1117long offset = checkAndComputeOffset(receiver, BYTES, index, false);1118char result = _unsafe.getCharAcquire(receiver, offset);1119return convertEndian(result);1120}11211122private static final void setRelease(byte[] receiver, int index, char value, VarHandle varHandle) {1123long offset = checkAndComputeOffset(receiver, BYTES, index, false);1124_unsafe.putCharRelease(receiver, offset, convertEndian(value));1125}11261127private static final boolean compareAndSet(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1128throw operationNotSupported(varHandle);1129}11301131private static final char compareAndExchange(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1132throw operationNotSupported(varHandle);1133}11341135private static final char compareAndExchangeAcquire(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1136throw operationNotSupported(varHandle);1137}11381139private static final char compareAndExchangeRelease(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1140throw operationNotSupported(varHandle);1141}11421143private static final boolean weakCompareAndSet(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1144throw operationNotSupported(varHandle);1145}11461147private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1148throw operationNotSupported(varHandle);1149}11501151private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1152throw operationNotSupported(varHandle);1153}11541155private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {1156throw operationNotSupported(varHandle);1157}11581159private static final char getAndSet(byte[] receiver, int index, char value, VarHandle varHandle) {1160throw operationNotSupported(varHandle);1161}11621163private static final char getAndSetAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {1164throw operationNotSupported(varHandle);1165}11661167private static final char getAndSetRelease(byte[] receiver, int index, char value, VarHandle varHandle) {1168throw operationNotSupported(varHandle);1169}11701171private static final char getAndAdd(byte[] receiver, int index, char value, VarHandle varHandle) {1172throw operationNotSupported(varHandle);1173}11741175private static final char getAndAddAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {1176throw operationNotSupported(varHandle);1177}11781179private static final char getAndAddRelease(byte[] receiver, int index, char value, VarHandle varHandle) {1180throw operationNotSupported(varHandle);1181}11821183private static final char getAndBitwiseAnd(byte[] receiver, int index, char value, VarHandle varHandle) {1184throw operationNotSupported(varHandle);1185}11861187private static final char getAndBitwiseAndAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {1188throw operationNotSupported(varHandle);1189}11901191private static final char getAndBitwiseAndRelease(byte[] receiver, int index, char value, VarHandle varHandle) {1192throw operationNotSupported(varHandle);1193}11941195private static final char getAndBitwiseOr(byte[] receiver, int index, char value, VarHandle varHandle) {1196throw operationNotSupported(varHandle);1197}11981199private static final char getAndBitwiseOrAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {1200throw operationNotSupported(varHandle);1201}12021203private static final char getAndBitwiseOrRelease(byte[] receiver, int index, char value, VarHandle varHandle) {1204throw operationNotSupported(varHandle);1205}12061207private static final char getAndBitwiseXor(byte[] receiver, int index, char value, VarHandle varHandle) {1208throw operationNotSupported(varHandle);1209}12101211private static final char getAndBitwiseXorAcquire(byte[] receiver, int index, char value, VarHandle varHandle) {1212throw operationNotSupported(varHandle);1213}12141215private static final char getAndBitwiseXorRelease(byte[] receiver, int index, char value, VarHandle varHandle) {1216throw operationNotSupported(varHandle);1217}1218}12191220static final class OpDoubleConvertEndian extends ByteArrayViewVarHandleOperations {1221private static final int BYTES = Double.BYTES;12221223private static final double get(byte[] receiver, int index, VarHandle varHandle) {1224long offset = checkAndComputeOffset(receiver, BYTES, index, true);1225double result = _unsafe.getDouble(receiver, offset);1226return convertEndian(result);1227}12281229private static final void set(byte[] receiver, int index, double value, VarHandle varHandle) {1230long offset = checkAndComputeOffset(receiver, BYTES, index, true);1231_unsafe.putDouble(receiver, offset, convertEndian(value));1232}12331234private static final double getVolatile(byte[] receiver, int index, VarHandle varHandle) {1235long offset = checkAndComputeOffset(receiver, BYTES, index, false);1236double result = _unsafe.getDoubleVolatile(receiver, offset);1237return convertEndian(result);1238}12391240private static final void setVolatile(byte[] receiver, int index, double value, VarHandle varHandle) {1241long offset = checkAndComputeOffset(receiver, BYTES, index, false);1242_unsafe.putDoubleVolatile(receiver, offset, convertEndian(value));1243}12441245private static final double getOpaque(byte[] receiver, int index, VarHandle varHandle) {1246long offset = checkAndComputeOffset(receiver, BYTES, index, false);1247double result = _unsafe.getDoubleOpaque(receiver, offset);1248return convertEndian(result);1249}12501251private static final void setOpaque(byte[] receiver, int index, double value, VarHandle varHandle) {1252long offset = checkAndComputeOffset(receiver, BYTES, index, false);1253_unsafe.putDoubleOpaque(receiver, offset, convertEndian(value));1254}12551256private static final double getAcquire(byte[] receiver, int index, VarHandle varHandle) {1257long offset = checkAndComputeOffset(receiver, BYTES, index, false);1258double result = _unsafe.getDoubleAcquire(receiver, offset);1259return convertEndian(result);1260}12611262private static final void setRelease(byte[] receiver, int index, double value, VarHandle varHandle) {1263long offset = checkAndComputeOffset(receiver, BYTES, index, false);1264_unsafe.putDoubleRelease(receiver, offset, convertEndian(value));1265}12661267private static final boolean compareAndSet(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1268long offset = checkAndComputeOffset(receiver, BYTES, index, false);1269/*[IF Sidecar19-SE-OpenJ9]*/1270return _unsafe.compareAndSetDouble(receiver, offset, convertEndian(testValue), convertEndian(newValue));1271/*[ELSE]1272return _unsafe.compareAndSwapDouble(receiver, offset, convertEndian(testValue), convertEndian(newValue));1273/*[ENDIF]*/1274}12751276private static final double compareAndExchange(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1277long offset = checkAndComputeOffset(receiver, BYTES, index, false);1278/*[IF Sidecar19-SE-OpenJ9]*/1279double result = _unsafe.compareAndExchangeDouble(receiver, offset, convertEndian(testValue), convertEndian(newValue));1280/*[ELSE]1281double result = _unsafe.compareAndExchangeDoubleVolatile(receiver, offset, convertEndian(testValue), convertEndian(newValue));1282/*[ENDIF]*/1283return convertEndian(result);1284}12851286private static final double compareAndExchangeAcquire(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1287long offset = checkAndComputeOffset(receiver, BYTES, index, false);1288double result = _unsafe.compareAndExchangeDoubleAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1289return convertEndian(result);1290}12911292private static final double compareAndExchangeRelease(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1293long offset = checkAndComputeOffset(receiver, BYTES, index, false);1294double result = _unsafe.compareAndExchangeDoubleRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1295return convertEndian(result);1296}12971298private static final boolean weakCompareAndSet(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1299long offset = checkAndComputeOffset(receiver, BYTES, index, false);1300/*[IF Sidecar19-SE-OpenJ9]*/1301return _unsafe.weakCompareAndSetDoublePlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1302/*[ELSE]1303return _unsafe.weakCompareAndSwapDouble(receiver, offset, convertEndian(testValue), convertEndian(newValue));1304/*[ENDIF]*/1305}13061307private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1308long offset = checkAndComputeOffset(receiver, BYTES, index, false);1309/*[IF Sidecar19-SE-OpenJ9]*/1310return _unsafe.weakCompareAndSetDoubleAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1311/*[ELSE]1312return _unsafe.weakCompareAndSwapDoubleAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1313/*[ENDIF]*/1314}13151316private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1317long offset = checkAndComputeOffset(receiver, BYTES, index, false);1318/*[IF Sidecar19-SE-OpenJ9]*/1319return _unsafe.weakCompareAndSetDoubleRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1320/*[ELSE]1321return _unsafe.weakCompareAndSwapDoubleRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1322/*[ENDIF]*/1323}13241325private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {1326long offset = checkAndComputeOffset(receiver, BYTES, index, false);1327/*[IF Sidecar19-SE-OpenJ9]*/1328return _unsafe.weakCompareAndSetDoublePlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1329/*[ELSE]1330return _unsafe.weakCompareAndSwapDouble(receiver, offset, convertEndian(testValue), convertEndian(newValue));1331/*[ENDIF]*/1332}13331334private static final double getAndSet(byte[] receiver, int index, double value, VarHandle varHandle) {1335long offset = checkAndComputeOffset(receiver, BYTES, index, false);1336double result = _unsafe.getAndSetDouble(receiver, offset, convertEndian(value));1337return convertEndian(result);1338}13391340private static final double getAndSetAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {1341long offset = checkAndComputeOffset(receiver, BYTES, index, false);1342double result = _unsafe.getAndSetDoubleAcquire(receiver, offset, convertEndian(value));1343return convertEndian(result);1344}13451346private static final double getAndSetRelease(byte[] receiver, int index, double value, VarHandle varHandle) {1347long offset = checkAndComputeOffset(receiver, BYTES, index, false);1348double result = _unsafe.getAndSetDoubleRelease(receiver, offset, convertEndian(value));1349return convertEndian(result);1350}13511352private static final double getAndAdd(byte[] receiver, int index, double value, VarHandle varHandle) {1353throw operationNotSupported(varHandle);1354}13551356private static final double getAndAddAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {1357throw operationNotSupported(varHandle);1358}13591360private static final double getAndAddRelease(byte[] receiver, int index, double value, VarHandle varHandle) {1361throw operationNotSupported(varHandle);1362}13631364private static final double getAndBitwiseAnd(byte[] receiver, int index, double value, VarHandle varHandle) {1365throw operationNotSupported(varHandle);1366}13671368private static final double getAndBitwiseAndAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {1369throw operationNotSupported(varHandle);1370}13711372private static final double getAndBitwiseAndRelease(byte[] receiver, int index, double value, VarHandle varHandle) {1373throw operationNotSupported(varHandle);1374}13751376private static final double getAndBitwiseOr(byte[] receiver, int index, double value, VarHandle varHandle) {1377throw operationNotSupported(varHandle);1378}13791380private static final double getAndBitwiseOrAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {1381throw operationNotSupported(varHandle);1382}13831384private static final double getAndBitwiseOrRelease(byte[] receiver, int index, double value, VarHandle varHandle) {1385throw operationNotSupported(varHandle);1386}13871388private static final double getAndBitwiseXor(byte[] receiver, int index, double value, VarHandle varHandle) {1389throw operationNotSupported(varHandle);1390}13911392private static final double getAndBitwiseXorAcquire(byte[] receiver, int index, double value, VarHandle varHandle) {1393throw operationNotSupported(varHandle);1394}13951396private static final double getAndBitwiseXorRelease(byte[] receiver, int index, double value, VarHandle varHandle) {1397throw operationNotSupported(varHandle);1398}1399}14001401static final class OpFloatConvertEndian extends ByteArrayViewVarHandleOperations {1402private static final int BYTES = Float.BYTES;14031404private static final float get(byte[] receiver, int index, VarHandle varHandle) {1405long offset = checkAndComputeOffset(receiver, BYTES, index, true);1406float result = _unsafe.getFloat(receiver, offset);1407return convertEndian(result);1408}14091410private static final void set(byte[] receiver, int index, float value, VarHandle varHandle) {1411long offset = checkAndComputeOffset(receiver, BYTES, index, true);1412_unsafe.putFloat(receiver, offset, convertEndian(value));1413}14141415private static final float getVolatile(byte[] receiver, int index, VarHandle varHandle) {1416long offset = checkAndComputeOffset(receiver, BYTES, index, false);1417float result = _unsafe.getFloatVolatile(receiver, offset);1418return convertEndian(result);1419}14201421private static final void setVolatile(byte[] receiver, int index, float value, VarHandle varHandle) {1422long offset = checkAndComputeOffset(receiver, BYTES, index, false);1423_unsafe.putFloatVolatile(receiver, offset, convertEndian(value));1424}14251426private static final float getOpaque(byte[] receiver, int index, VarHandle varHandle) {1427long offset = checkAndComputeOffset(receiver, BYTES, index, false);1428float result = _unsafe.getFloatOpaque(receiver, offset);1429return convertEndian(result);1430}14311432private static final void setOpaque(byte[] receiver, int index, float value, VarHandle varHandle) {1433long offset = checkAndComputeOffset(receiver, BYTES, index, false);1434_unsafe.putFloatOpaque(receiver, offset, convertEndian(value));1435}14361437private static final float getAcquire(byte[] receiver, int index, VarHandle varHandle) {1438long offset = checkAndComputeOffset(receiver, BYTES, index, false);1439float result = _unsafe.getFloatAcquire(receiver, offset);1440return convertEndian(result);1441}14421443private static final void setRelease(byte[] receiver, int index, float value, VarHandle varHandle) {1444long offset = checkAndComputeOffset(receiver, BYTES, index, false);1445_unsafe.putFloatRelease(receiver, offset, convertEndian(value));1446}14471448private static final boolean compareAndSet(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1449long offset = checkAndComputeOffset(receiver, BYTES, index, false);1450/*[IF Sidecar19-SE-OpenJ9]*/1451return _unsafe.compareAndSetFloat(receiver, offset, convertEndian(testValue), convertEndian(newValue));1452/*[ELSE]1453return _unsafe.compareAndSwapFloat(receiver, offset, convertEndian(testValue), convertEndian(newValue));1454/*[ENDIF]*/1455}14561457private static final float compareAndExchange(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1458long offset = checkAndComputeOffset(receiver, BYTES, index, false);1459/*[IF Sidecar19-SE-OpenJ9]*/1460float result = _unsafe.compareAndExchangeFloat(receiver, offset, convertEndian(testValue), convertEndian(newValue));1461/*[ELSE]1462float result = _unsafe.compareAndExchangeFloatVolatile(receiver, offset, convertEndian(testValue), convertEndian(newValue));1463/*[ENDIF]*/1464return convertEndian(result);1465}14661467private static final float compareAndExchangeAcquire(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1468long offset = checkAndComputeOffset(receiver, BYTES, index, false);1469float result = _unsafe.compareAndExchangeFloatAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1470return convertEndian(result);1471}14721473private static final float compareAndExchangeRelease(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1474long offset = checkAndComputeOffset(receiver, BYTES, index, false);1475float result = _unsafe.compareAndExchangeFloatRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1476return convertEndian(result);1477}14781479private static final boolean weakCompareAndSet(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1480long offset = checkAndComputeOffset(receiver, BYTES, index, false);1481/*[IF Sidecar19-SE-OpenJ9]*/1482return _unsafe.weakCompareAndSetFloatPlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1483/*[ELSE]1484return _unsafe.weakCompareAndSwapFloat(receiver, offset, convertEndian(testValue), convertEndian(newValue));1485/*[ENDIF]*/1486}14871488private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1489long offset = checkAndComputeOffset(receiver, BYTES, index, false);1490/*[IF Sidecar19-SE-OpenJ9]*/1491return _unsafe.weakCompareAndSetFloatAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1492/*[ELSE]1493return _unsafe.weakCompareAndSwapFloatAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1494/*[ENDIF]*/1495}14961497private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1498long offset = checkAndComputeOffset(receiver, BYTES, index, false);1499/*[IF Sidecar19-SE-OpenJ9]*/1500return _unsafe.weakCompareAndSetFloatRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1501/*[ELSE]1502return _unsafe.weakCompareAndSwapFloatRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1503/*[ENDIF]*/1504}15051506private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {1507long offset = checkAndComputeOffset(receiver, BYTES, index, false);1508/*[IF Sidecar19-SE-OpenJ9]*/1509return _unsafe.weakCompareAndSetFloatPlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1510/*[ELSE]1511return _unsafe.weakCompareAndSwapFloat(receiver, offset, convertEndian(testValue), convertEndian(newValue));1512/*[ENDIF]*/1513}15141515private static final float getAndSet(byte[] receiver, int index, float value, VarHandle varHandle) {1516long offset = checkAndComputeOffset(receiver, BYTES, index, false);1517float result = _unsafe.getAndSetFloat(receiver, offset, convertEndian(value));1518return convertEndian(result);1519}15201521private static final float getAndSetAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {1522long offset = checkAndComputeOffset(receiver, BYTES, index, false);1523float result = _unsafe.getAndSetFloatAcquire(receiver, offset, convertEndian(value));1524return convertEndian(result);1525}15261527private static final float getAndSetRelease(byte[] receiver, int index, float value, VarHandle varHandle) {1528long offset = checkAndComputeOffset(receiver, BYTES, index, false);1529float result = _unsafe.getAndSetFloatRelease(receiver, offset, convertEndian(value));1530return convertEndian(result);1531}15321533private static final float getAndAdd(byte[] receiver, int index, float value, VarHandle varHandle) {1534throw operationNotSupported(varHandle);1535}15361537private static final float getAndAddAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {1538throw operationNotSupported(varHandle);1539}15401541private static final float getAndAddRelease(byte[] receiver, int index, float value, VarHandle varHandle) {1542throw operationNotSupported(varHandle);1543}15441545private static final float getAndBitwiseAnd(byte[] receiver, int index, float value, VarHandle varHandle) {1546throw operationNotSupported(varHandle);1547}15481549private static final float getAndBitwiseAndAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {1550throw operationNotSupported(varHandle);1551}15521553private static final float getAndBitwiseAndRelease(byte[] receiver, int index, float value, VarHandle varHandle) {1554throw operationNotSupported(varHandle);1555}15561557private static final float getAndBitwiseOr(byte[] receiver, int index, float value, VarHandle varHandle) {1558throw operationNotSupported(varHandle);1559}15601561private static final float getAndBitwiseOrAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {1562throw operationNotSupported(varHandle);1563}15641565private static final float getAndBitwiseOrRelease(byte[] receiver, int index, float value, VarHandle varHandle) {1566throw operationNotSupported(varHandle);1567}15681569private static final float getAndBitwiseXor(byte[] receiver, int index, float value, VarHandle varHandle) {1570throw operationNotSupported(varHandle);1571}15721573private static final float getAndBitwiseXorAcquire(byte[] receiver, int index, float value, VarHandle varHandle) {1574throw operationNotSupported(varHandle);1575}15761577private static final float getAndBitwiseXorRelease(byte[] receiver, int index, float value, VarHandle varHandle) {1578throw operationNotSupported(varHandle);1579}1580}15811582static final class OpIntConvertEndian extends ByteArrayViewVarHandleOperations {1583private static final int BYTES = Integer.BYTES;15841585private static final int get(byte[] receiver, int index, VarHandle varHandle) {1586long offset = checkAndComputeOffset(receiver, BYTES, index, true);1587int result = _unsafe.getInt(receiver, offset);1588return convertEndian(result);1589}15901591private static final void set(byte[] receiver, int index, int value, VarHandle varHandle) {1592long offset = checkAndComputeOffset(receiver, BYTES, index, true);1593_unsafe.putInt(receiver, offset, convertEndian(value));1594}15951596private static final int getVolatile(byte[] receiver, int index, VarHandle varHandle) {1597long offset = checkAndComputeOffset(receiver, BYTES, index, false);1598int result = _unsafe.getIntVolatile(receiver, offset);1599return convertEndian(result);1600}16011602private static final void setVolatile(byte[] receiver, int index, int value, VarHandle varHandle) {1603long offset = checkAndComputeOffset(receiver, BYTES, index, false);1604_unsafe.putIntVolatile(receiver, offset, convertEndian(value));1605}16061607private static final int getOpaque(byte[] receiver, int index, VarHandle varHandle) {1608long offset = checkAndComputeOffset(receiver, BYTES, index, false);1609int result = _unsafe.getIntOpaque(receiver, offset);1610return convertEndian(result);1611}16121613private static final void setOpaque(byte[] receiver, int index, int value, VarHandle varHandle) {1614long offset = checkAndComputeOffset(receiver, BYTES, index, false);1615_unsafe.putIntOpaque(receiver, offset, convertEndian(value));1616}16171618private static final int getAcquire(byte[] receiver, int index, VarHandle varHandle) {1619long offset = checkAndComputeOffset(receiver, BYTES, index, false);1620int result = _unsafe.getIntAcquire(receiver, offset);1621return convertEndian(result);1622}16231624private static final void setRelease(byte[] receiver, int index, int value, VarHandle varHandle) {1625long offset = checkAndComputeOffset(receiver, BYTES, index, false);1626_unsafe.putIntRelease(receiver, offset, convertEndian(value));1627}16281629private static final boolean compareAndSet(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1630long offset = checkAndComputeOffset(receiver, BYTES, index, false);1631/*[IF Sidecar19-SE-OpenJ9]*/1632return _unsafe.compareAndSetInt(receiver, offset, convertEndian(testValue), convertEndian(newValue));1633/*[ELSE]1634return _unsafe.compareAndSwapInt(receiver, offset, convertEndian(testValue), convertEndian(newValue));1635/*[ENDIF]*/1636}16371638private static final int compareAndExchange(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1639long offset = checkAndComputeOffset(receiver, BYTES, index, false);1640/*[IF Sidecar19-SE-OpenJ9]*/1641int result = _unsafe.compareAndExchangeInt(receiver, offset, convertEndian(testValue), convertEndian(newValue));1642/*[ELSE]1643int result = _unsafe.compareAndExchangeIntVolatile(receiver, offset, convertEndian(testValue), convertEndian(newValue));1644/*[ENDIF]*/1645return convertEndian(result);1646}16471648private static final int compareAndExchangeAcquire(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1649long offset = checkAndComputeOffset(receiver, BYTES, index, false);1650int result = _unsafe.compareAndExchangeIntAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1651return convertEndian(result);1652}16531654private static final int compareAndExchangeRelease(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1655long offset = checkAndComputeOffset(receiver, BYTES, index, false);1656int result = _unsafe.compareAndExchangeIntRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1657return convertEndian(result);1658}16591660private static final boolean weakCompareAndSet(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1661long offset = checkAndComputeOffset(receiver, BYTES, index, false);1662/*[IF Sidecar19-SE-OpenJ9]*/1663return _unsafe.weakCompareAndSetIntPlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1664/*[ELSE]1665return _unsafe.weakCompareAndSwapInt(receiver, offset, convertEndian(testValue), convertEndian(newValue));1666/*[ENDIF]*/1667}16681669private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1670long offset = checkAndComputeOffset(receiver, BYTES, index, false);1671/*[IF Sidecar19-SE-OpenJ9]*/1672return _unsafe.weakCompareAndSetIntAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1673/*[ELSE]1674return _unsafe.weakCompareAndSwapIntAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1675/*[ENDIF]*/1676}16771678private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1679long offset = checkAndComputeOffset(receiver, BYTES, index, false);1680/*[IF Sidecar19-SE-OpenJ9]*/1681return _unsafe.weakCompareAndSetIntRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1682/*[ELSE]1683return _unsafe.weakCompareAndSwapIntRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1684/*[ENDIF]*/1685}16861687private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {1688long offset = checkAndComputeOffset(receiver, BYTES, index, false);1689/*[IF Sidecar19-SE-OpenJ9]*/1690return _unsafe.weakCompareAndSetIntPlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1691/*[ELSE]1692return _unsafe.weakCompareAndSwapInt(receiver, offset, convertEndian(testValue), convertEndian(newValue));1693/*[ENDIF]*/1694}16951696private static final int getAndSet(byte[] receiver, int index, int value, VarHandle varHandle) {1697long offset = checkAndComputeOffset(receiver, BYTES, index, false);1698int result = _unsafe.getAndSetInt(receiver, offset, convertEndian(value));1699return convertEndian(result);1700}17011702private static final int getAndSetAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {1703long offset = checkAndComputeOffset(receiver, BYTES, index, false);1704int result = _unsafe.getAndSetIntAcquire(receiver, offset, convertEndian(value));1705return convertEndian(result);1706}17071708private static final int getAndSetRelease(byte[] receiver, int index, int value, VarHandle varHandle) {1709long offset = checkAndComputeOffset(receiver, BYTES, index, false);1710int result = _unsafe.getAndSetIntRelease(receiver, offset, convertEndian(value));1711return convertEndian(result);1712}17131714private static final int getAndAdd(byte[] receiver, int index, int value, VarHandle varHandle) {1715long offset = checkAndComputeOffset(receiver, BYTES, index, false);1716int result = _unsafe.getAndAddInt(receiver, offset, convertEndian(value));1717return convertEndian(result);1718}17191720private static final int getAndAddAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {1721long offset = checkAndComputeOffset(receiver, BYTES, index, false);1722int result = _unsafe.getAndAddIntAcquire(receiver, offset, convertEndian(value));1723return convertEndian(result);1724}17251726private static final int getAndAddRelease(byte[] receiver, int index, int value, VarHandle varHandle) {1727long offset = checkAndComputeOffset(receiver, BYTES, index, false);1728int result = _unsafe.getAndAddIntRelease(receiver, offset, convertEndian(value));1729return convertEndian(result);1730}17311732private static final int getAndBitwiseAnd(byte[] receiver, int index, int value, VarHandle varHandle) {1733long offset = checkAndComputeOffset(receiver, BYTES, index, false);1734int result = _unsafe.getAndBitwiseAndInt(receiver, offset, convertEndian(value));1735return convertEndian(result);1736}17371738private static final int getAndBitwiseAndAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {1739long offset = checkAndComputeOffset(receiver, BYTES, index, false);1740int result = _unsafe.getAndBitwiseAndIntAcquire(receiver, offset, convertEndian(value));1741return convertEndian(result);1742}17431744private static final int getAndBitwiseAndRelease(byte[] receiver, int index, int value, VarHandle varHandle) {1745long offset = checkAndComputeOffset(receiver, BYTES, index, false);1746int result = _unsafe.getAndBitwiseAndIntRelease(receiver, offset, convertEndian(value));1747return convertEndian(result);1748}17491750private static final int getAndBitwiseOr(byte[] receiver, int index, int value, VarHandle varHandle) {1751long offset = checkAndComputeOffset(receiver, BYTES, index, false);1752int result = _unsafe.getAndBitwiseOrInt(receiver, offset, convertEndian(value));1753return convertEndian(result);1754}17551756private static final int getAndBitwiseOrAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {1757long offset = checkAndComputeOffset(receiver, BYTES, index, false);1758int result = _unsafe.getAndBitwiseOrIntAcquire(receiver, offset, convertEndian(value));1759return convertEndian(result);1760}17611762private static final int getAndBitwiseOrRelease(byte[] receiver, int index, int value, VarHandle varHandle) {1763long offset = checkAndComputeOffset(receiver, BYTES, index, false);1764int result = _unsafe.getAndBitwiseOrIntRelease(receiver, offset, convertEndian(value));1765return convertEndian(result);1766}17671768private static final int getAndBitwiseXor(byte[] receiver, int index, int value, VarHandle varHandle) {1769long offset = checkAndComputeOffset(receiver, BYTES, index, false);1770int result = _unsafe.getAndBitwiseXorInt(receiver, offset, convertEndian(value));1771return convertEndian(result);1772}17731774private static final int getAndBitwiseXorAcquire(byte[] receiver, int index, int value, VarHandle varHandle) {1775long offset = checkAndComputeOffset(receiver, BYTES, index, false);1776int result = _unsafe.getAndBitwiseXorIntAcquire(receiver, offset, convertEndian(value));1777return convertEndian(result);1778}17791780private static final int getAndBitwiseXorRelease(byte[] receiver, int index, int value, VarHandle varHandle) {1781long offset = checkAndComputeOffset(receiver, BYTES, index, false);1782int result = _unsafe.getAndBitwiseXorIntRelease(receiver, offset, convertEndian(value));1783return convertEndian(result);1784}1785}17861787static final class OpLongConvertEndian extends ByteArrayViewVarHandleOperations {1788private static final int BYTES = Long.BYTES;17891790private static final long get(byte[] receiver, int index, VarHandle varHandle) {1791long offset = checkAndComputeOffset(receiver, BYTES, index, true);1792long result = _unsafe.getLong(receiver, offset);1793return convertEndian(result);1794}17951796private static final void set(byte[] receiver, int index, long value, VarHandle varHandle) {1797long offset = checkAndComputeOffset(receiver, BYTES, index, true);1798_unsafe.putLong(receiver, offset, convertEndian(value));1799}18001801private static final long getVolatile(byte[] receiver, int index, VarHandle varHandle) {1802long offset = checkAndComputeOffset(receiver, BYTES, index, false);1803long result = _unsafe.getLongVolatile(receiver, offset);1804return convertEndian(result);1805}18061807private static final void setVolatile(byte[] receiver, int index, long value, VarHandle varHandle) {1808long offset = checkAndComputeOffset(receiver, BYTES, index, false);1809_unsafe.putLongVolatile(receiver, offset, convertEndian(value));1810}18111812private static final long getOpaque(byte[] receiver, int index, VarHandle varHandle) {1813long offset = checkAndComputeOffset(receiver, BYTES, index, false);1814long result = _unsafe.getLongOpaque(receiver, offset);1815return convertEndian(result);1816}18171818private static final void setOpaque(byte[] receiver, int index, long value, VarHandle varHandle) {1819long offset = checkAndComputeOffset(receiver, BYTES, index, false);1820_unsafe.putLongOpaque(receiver, offset, convertEndian(value));1821}18221823private static final long getAcquire(byte[] receiver, int index, VarHandle varHandle) {1824long offset = checkAndComputeOffset(receiver, BYTES, index, false);1825long result = _unsafe.getLongAcquire(receiver, offset);1826return convertEndian(result);1827}18281829private static final void setRelease(byte[] receiver, int index, long value, VarHandle varHandle) {1830long offset = checkAndComputeOffset(receiver, BYTES, index, false);1831_unsafe.putLongRelease(receiver, offset, convertEndian(value));1832}18331834private static final boolean compareAndSet(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1835long offset = checkAndComputeOffset(receiver, BYTES, index, false);1836/*[IF Sidecar19-SE-OpenJ9]*/1837return _unsafe.compareAndSetLong(receiver, offset, convertEndian(testValue), convertEndian(newValue));1838/*[ELSE]1839return _unsafe.compareAndSwapLong(receiver, offset, convertEndian(testValue), convertEndian(newValue));1840/*[ENDIF]*/1841}18421843private static final long compareAndExchange(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1844long offset = checkAndComputeOffset(receiver, BYTES, index, false);1845/*[IF Sidecar19-SE-OpenJ9]*/1846long result = _unsafe.compareAndExchangeLong(receiver, offset, convertEndian(testValue), convertEndian(newValue));1847/*[ELSE]1848long result = _unsafe.compareAndExchangeLongVolatile(receiver, offset, convertEndian(testValue), convertEndian(newValue));1849/*[ENDIF]*/1850return convertEndian(result);1851}18521853private static final long compareAndExchangeAcquire(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1854long offset = checkAndComputeOffset(receiver, BYTES, index, false);1855long result = _unsafe.compareAndExchangeLongAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1856return convertEndian(result);1857}18581859private static final long compareAndExchangeRelease(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1860long offset = checkAndComputeOffset(receiver, BYTES, index, false);1861long result = _unsafe.compareAndExchangeLongRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1862return convertEndian(result);1863}18641865private static final boolean weakCompareAndSet(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1866long offset = checkAndComputeOffset(receiver, BYTES, index, false);1867/*[IF Sidecar19-SE-OpenJ9]*/1868return _unsafe.weakCompareAndSetLongPlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1869/*[ELSE]1870return _unsafe.weakCompareAndSwapLong(receiver, offset, convertEndian(testValue), convertEndian(newValue));1871/*[ENDIF]*/1872}18731874private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1875long offset = checkAndComputeOffset(receiver, BYTES, index, false);1876/*[IF Sidecar19-SE-OpenJ9]*/1877return _unsafe.weakCompareAndSetLongAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1878/*[ELSE]1879return _unsafe.weakCompareAndSwapLongAcquire(receiver, offset, convertEndian(testValue), convertEndian(newValue));1880/*[ENDIF]*/1881}18821883private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1884long offset = checkAndComputeOffset(receiver, BYTES, index, false);1885/*[IF Sidecar19-SE-OpenJ9]*/1886return _unsafe.weakCompareAndSetLongRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1887/*[ELSE]1888return _unsafe.weakCompareAndSwapLongRelease(receiver, offset, convertEndian(testValue), convertEndian(newValue));1889/*[ENDIF]*/1890}18911892private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {1893long offset = checkAndComputeOffset(receiver, BYTES, index, false);1894/*[IF Sidecar19-SE-OpenJ9]*/1895return _unsafe.weakCompareAndSetLongPlain(receiver, offset, convertEndian(testValue), convertEndian(newValue));1896/*[ELSE]1897return _unsafe.weakCompareAndSwapLong(receiver, offset, convertEndian(testValue), convertEndian(newValue));1898/*[ENDIF]*/1899}19001901private static final long getAndSet(byte[] receiver, int index, long value, VarHandle varHandle) {1902long offset = checkAndComputeOffset(receiver, BYTES, index, false);1903long result = _unsafe.getAndSetLong(receiver, offset, convertEndian(value));1904return convertEndian(result);1905}19061907private static final long getAndSetAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {1908long offset = checkAndComputeOffset(receiver, BYTES, index, false);1909long result = _unsafe.getAndSetLongAcquire(receiver, offset, convertEndian(value));1910return convertEndian(result);1911}19121913private static final long getAndSetRelease(byte[] receiver, int index, long value, VarHandle varHandle) {1914long offset = checkAndComputeOffset(receiver, BYTES, index, false);1915long result = _unsafe.getAndSetLongRelease(receiver, offset, convertEndian(value));1916return convertEndian(result);1917}19181919private static final long getAndAdd(byte[] receiver, int index, long value, VarHandle varHandle) {1920long offset = checkAndComputeOffset(receiver, BYTES, index, false);1921long result = _unsafe.getAndAddLong(receiver, offset, convertEndian(value));1922return convertEndian(result);1923}19241925private static final long getAndAddAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {1926long offset = checkAndComputeOffset(receiver, BYTES, index, false);1927long result = _unsafe.getAndAddLongAcquire(receiver, offset, convertEndian(value));1928return convertEndian(result);1929}19301931private static final long getAndAddRelease(byte[] receiver, int index, long value, VarHandle varHandle) {1932long offset = checkAndComputeOffset(receiver, BYTES, index, false);1933long result = _unsafe.getAndAddLongRelease(receiver, offset, convertEndian(value));1934return convertEndian(result);1935}19361937private static final long getAndBitwiseAnd(byte[] receiver, int index, long value, VarHandle varHandle) {1938long offset = checkAndComputeOffset(receiver, BYTES, index, false);1939long result = _unsafe.getAndBitwiseAndLong(receiver, offset, convertEndian(value));1940return convertEndian(result);1941}19421943private static final long getAndBitwiseAndAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {1944long offset = checkAndComputeOffset(receiver, BYTES, index, false);1945long result = _unsafe.getAndBitwiseAndLongAcquire(receiver, offset, convertEndian(value));1946return convertEndian(result);1947}19481949private static final long getAndBitwiseAndRelease(byte[] receiver, int index, long value, VarHandle varHandle) {1950long offset = checkAndComputeOffset(receiver, BYTES, index, false);1951long result = _unsafe.getAndBitwiseAndLongRelease(receiver, offset, convertEndian(value));1952return convertEndian(result);1953}19541955private static final long getAndBitwiseOr(byte[] receiver, int index, long value, VarHandle varHandle) {1956long offset = checkAndComputeOffset(receiver, BYTES, index, false);1957long result = _unsafe.getAndBitwiseOrLong(receiver, offset, convertEndian(value));1958return convertEndian(result);1959}19601961private static final long getAndBitwiseOrAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {1962long offset = checkAndComputeOffset(receiver, BYTES, index, false);1963long result = _unsafe.getAndBitwiseOrLongAcquire(receiver, offset, convertEndian(value));1964return convertEndian(result);1965}19661967private static final long getAndBitwiseOrRelease(byte[] receiver, int index, long value, VarHandle varHandle) {1968long offset = checkAndComputeOffset(receiver, BYTES, index, false);1969long result = _unsafe.getAndBitwiseOrLongRelease(receiver, offset, convertEndian(value));1970return convertEndian(result);1971}19721973private static final long getAndBitwiseXor(byte[] receiver, int index, long value, VarHandle varHandle) {1974long offset = checkAndComputeOffset(receiver, BYTES, index, false);1975long result = _unsafe.getAndBitwiseXorLong(receiver, offset, convertEndian(value));1976return convertEndian(result);1977}19781979private static final long getAndBitwiseXorAcquire(byte[] receiver, int index, long value, VarHandle varHandle) {1980long offset = checkAndComputeOffset(receiver, BYTES, index, false);1981long result = _unsafe.getAndBitwiseXorLongAcquire(receiver, offset, convertEndian(value));1982return convertEndian(result);1983}19841985private static final long getAndBitwiseXorRelease(byte[] receiver, int index, long value, VarHandle varHandle) {1986long offset = checkAndComputeOffset(receiver, BYTES, index, false);1987long result = _unsafe.getAndBitwiseXorLongRelease(receiver, offset, convertEndian(value));1988return convertEndian(result);1989}1990}19911992static final class OpShortConvertEndian extends ByteArrayViewVarHandleOperations {1993private static final int BYTES = Short.BYTES;19941995private static final short get(byte[] receiver, int index, VarHandle varHandle) {1996long offset = checkAndComputeOffset(receiver, BYTES, index, true);1997short result = _unsafe.getShort(receiver, offset);1998return convertEndian(result);1999}20002001private static final void set(byte[] receiver, int index, short value, VarHandle varHandle) {2002long offset = checkAndComputeOffset(receiver, BYTES, index, true);2003_unsafe.putShort(receiver, offset, convertEndian(value));2004}20052006private static final short getVolatile(byte[] receiver, int index, VarHandle varHandle) {2007long offset = checkAndComputeOffset(receiver, BYTES, index, false);2008short result = _unsafe.getShortVolatile(receiver, offset);2009return convertEndian(result);2010}20112012private static final void setVolatile(byte[] receiver, int index, short value, VarHandle varHandle) {2013long offset = checkAndComputeOffset(receiver, BYTES, index, false);2014_unsafe.putShortVolatile(receiver, offset, convertEndian(value));2015}20162017private static final short getOpaque(byte[] receiver, int index, VarHandle varHandle) {2018long offset = checkAndComputeOffset(receiver, BYTES, index, false);2019short result = _unsafe.getShortOpaque(receiver, offset);2020return convertEndian(result);2021}20222023private static final void setOpaque(byte[] receiver, int index, short value, VarHandle varHandle) {2024long offset = checkAndComputeOffset(receiver, BYTES, index, false);2025_unsafe.putShortOpaque(receiver, offset, convertEndian(value));2026}20272028private static final short getAcquire(byte[] receiver, int index, VarHandle varHandle) {2029long offset = checkAndComputeOffset(receiver, BYTES, index, false);2030short result = _unsafe.getShortAcquire(receiver, offset);2031return convertEndian(result);2032}20332034private static final void setRelease(byte[] receiver, int index, short value, VarHandle varHandle) {2035long offset = checkAndComputeOffset(receiver, BYTES, index, false);2036_unsafe.putShortRelease(receiver, offset, convertEndian(value));2037}20382039private static final boolean compareAndSet(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2040throw operationNotSupported(varHandle);2041}20422043private static final short compareAndExchange(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2044throw operationNotSupported(varHandle);2045}20462047private static final short compareAndExchangeAcquire(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2048throw operationNotSupported(varHandle);2049}20502051private static final short compareAndExchangeRelease(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2052throw operationNotSupported(varHandle);2053}20542055private static final boolean weakCompareAndSet(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2056throw operationNotSupported(varHandle);2057}20582059private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2060throw operationNotSupported(varHandle);2061}20622063private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2064throw operationNotSupported(varHandle);2065}20662067private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {2068throw operationNotSupported(varHandle);2069}20702071private static final short getAndSet(byte[] receiver, int index, short value, VarHandle varHandle) {2072throw operationNotSupported(varHandle);2073}20742075private static final short getAndSetAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {2076throw operationNotSupported(varHandle);2077}20782079private static final short getAndSetRelease(byte[] receiver, int index, short value, VarHandle varHandle) {2080throw operationNotSupported(varHandle);2081}20822083private static final short getAndAdd(byte[] receiver, int index, short value, VarHandle varHandle) {2084throw operationNotSupported(varHandle);2085}20862087private static final short getAndAddAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {2088throw operationNotSupported(varHandle);2089}20902091private static final short getAndAddRelease(byte[] receiver, int index, short value, VarHandle varHandle) {2092throw operationNotSupported(varHandle);2093}20942095private static final short getAndBitwiseAnd(byte[] receiver, int index, short value, VarHandle varHandle) {2096throw operationNotSupported(varHandle);2097}20982099private static final short getAndBitwiseAndAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {2100throw operationNotSupported(varHandle);2101}21022103private static final short getAndBitwiseAndRelease(byte[] receiver, int index, short value, VarHandle varHandle) {2104throw operationNotSupported(varHandle);2105}21062107private static final short getAndBitwiseOr(byte[] receiver, int index, short value, VarHandle varHandle) {2108throw operationNotSupported(varHandle);2109}21102111private static final short getAndBitwiseOrAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {2112throw operationNotSupported(varHandle);2113}21142115private static final short getAndBitwiseOrRelease(byte[] receiver, int index, short value, VarHandle varHandle) {2116throw operationNotSupported(varHandle);2117}21182119private static final short getAndBitwiseXor(byte[] receiver, int index, short value, VarHandle varHandle) {2120throw operationNotSupported(varHandle);2121}21222123private static final short getAndBitwiseXorAcquire(byte[] receiver, int index, short value, VarHandle varHandle) {2124throw operationNotSupported(varHandle);2125}21262127private static final short getAndBitwiseXorRelease(byte[] receiver, int index, short value, VarHandle varHandle) {2128throw operationNotSupported(varHandle);2129}2130}2131}2132}213321342135