Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/jcl/src/java.base/share/classes/java/lang/invoke/ArrayVarHandle.java
12520 views
1
/*[INCLUDE-IF Sidecar19-SE & !OPENJDK_METHODHANDLES]*/
2
/*******************************************************************************
3
* Copyright (c) 2016, 2021 IBM Corp. and others
4
*
5
* This program and the accompanying materials are made available under
6
* the terms of the Eclipse Public License 2.0 which accompanies this
7
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
8
* or the Apache License, Version 2.0 which accompanies this distribution and
9
* is available at https://www.apache.org/licenses/LICENSE-2.0.
10
*
11
* This Source Code may also be made available under the following
12
* Secondary Licenses when the conditions for such availability set
13
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
14
* General Public License, version 2 with the GNU Classpath
15
* Exception [1] and GNU General Public License, version 2 with the
16
* OpenJDK Assembly Exception [2].
17
*
18
* [1] https://www.gnu.org/software/classpath/license.html
19
* [2] http://openjdk.java.net/legal/assembly-exception.html
20
*
21
* 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-exception
22
*******************************************************************************/
23
package java.lang.invoke;
24
25
import static java.lang.invoke.MethodType.methodType;
26
import static java.lang.invoke.ArrayVarHandle.ArrayVarHandleOperations.*;
27
28
/*[IF JAVA_SPEC_VERSION >= 12]*/
29
import java.lang.constant.ClassDesc;
30
import java.util.Optional;
31
/*[ENDIF] JAVA_SPEC_VERSION >= 12 */
32
33
/**
34
* {@link VarHandle} subclass for array element {@link VarHandle} instances.
35
*/
36
final class ArrayVarHandle extends VarHandle {
37
/**
38
* Populates the static MethodHandle[] corresponding to the provided type.
39
*
40
* @param arrayType The receiver type to create MethodHandles for. Must be an array type.
41
* @return The populated MethodHandle[].
42
*
43
* @throws NullPointerException if arrayType is null or not an array type.
44
*/
45
static final MethodHandle[] populateMHs(Class<?> arrayType) {
46
Class<? extends ArrayVarHandleOperations> operationsClass = null;
47
final Class<?> initType = arrayType.getComponentType();
48
boolean isPrimitiveType = initType.isPrimitive();
49
Class<?> type = initType;
50
51
if (!isPrimitiveType) {
52
type = Object.class;
53
operationsClass = OpObject.class;
54
} else if (int.class == type) {
55
operationsClass = OpInt.class;
56
} else if (long.class == type) {
57
operationsClass = OpLong.class;
58
} else if (boolean.class == type) {
59
operationsClass = OpBoolean.class;
60
} else if (byte.class == type) {
61
operationsClass = OpByte.class;
62
} else if (char.class == type) {
63
operationsClass = OpChar.class;
64
} else if (double.class == type) {
65
operationsClass = OpDouble.class;
66
} else if (float.class == type) {
67
operationsClass = OpFloat.class;
68
} else if (short.class == type) {
69
operationsClass = OpShort.class;
70
} else {
71
/*[MSG "K0626", "Unable to handle type {0}."]*/
72
throw new InternalError(com.ibm.oti.util.Msg.getString("K0626", type)); //$NON-NLS-1$
73
}
74
75
/* Populate the MethodHandle[] using MethodHandles to methods in ArrayVarHandleOperations.
76
* Note: For primitive types, there is no need to clone the MethodHandles with the exact types later
77
* in populateMHs() as we already know their types here.
78
*/
79
Class<?> actualArrayType = (isPrimitiveType) ? arrayType : Object.class;
80
MethodType getter = methodType(type, actualArrayType, int.class, VarHandle.class);
81
MethodType setter = methodType(void.class, actualArrayType, int.class, type, VarHandle.class);
82
MethodType compareAndSet = methodType(boolean.class, actualArrayType, int.class, type, type, VarHandle.class);
83
MethodType compareAndExchange = compareAndSet.changeReturnType(type);
84
MethodType getAndSet = setter.changeReturnType(type);
85
MethodType[] lookupTypes = populateMTs(getter, setter, compareAndSet, compareAndExchange, getAndSet);
86
87
/* References use the type Object, so these MethodTypes need to be specialized to the initial type. */
88
MethodType[] exactTypes = lookupTypes;
89
if (!isPrimitiveType) {
90
MethodType exactGetter = methodType(initType, arrayType, int.class, VarHandle.class);
91
MethodType exactSetter = methodType(void.class, arrayType, int.class, initType, VarHandle.class);
92
MethodType exactCompareAndSet = methodType(boolean.class, arrayType, int.class, initType, initType, VarHandle.class);
93
MethodType exactCompareAndExchange = exactCompareAndSet.changeReturnType(initType);
94
MethodType exactGetAndSet = exactSetter.changeReturnType(initType);
95
exactTypes = populateMTs(exactGetter, exactSetter, exactCompareAndSet, exactCompareAndExchange, exactGetAndSet);
96
}
97
return populateMHs(operationsClass, lookupTypes, exactTypes);
98
}
99
100
/**
101
* Constructs a VarHandle that can access elements of an array
102
*
103
* @param arrayType The array type (i.e. not the componentType) this VarHandle will access.
104
*/
105
ArrayVarHandle(Class<?> arrayType) {
106
super(arrayType.getComponentType(), new Class<?>[] {arrayType, int.class}, populateMHs(arrayType), 0);
107
}
108
109
/*[IF JAVA_SPEC_VERSION >= 12]*/
110
@Override
111
public Optional<VarHandleDesc> describeConstable() {
112
VarHandleDesc result = null;
113
/* coordinateTypes[0] contains array type */
114
Optional<ClassDesc> descOp = coordinateTypes[0].describeConstable();
115
if (descOp.isPresent()) {
116
result = VarHandleDesc.ofArray(descOp.get());
117
}
118
return Optional.ofNullable(result);
119
}
120
/*[ENDIF] JAVA_SPEC_VERSION >= 12 */
121
122
/*[IF JAVA_SPEC_VERSION >= 16]*/
123
public VarHandle withInvokeExactBehavior() {
124
throw OpenJDKCompileStub.OpenJDKCompileStubThrowError();
125
}
126
127
public VarHandle withInvokeBehavior() {
128
throw OpenJDKCompileStub.OpenJDKCompileStubThrowError();
129
}
130
/*[ENDIF] JAVA_SPEC_VERSION >= 16 */
131
132
/**
133
* Type specific methods used by array element VarHandle methods.
134
*/
135
@SuppressWarnings("unused")
136
static class ArrayVarHandleOperations extends VarHandleOperations {
137
static final void boundsCheck(int arrayLength, long index) {
138
if ((index < 0) || (index >= arrayLength)) {
139
throw newArrayIndexOutOfBoundsException(arrayLength, index);
140
}
141
}
142
143
static final long computeOffset(int index, int baseOffset, int indexScale) {
144
return baseOffset + ((long)index * indexScale);
145
}
146
147
private static final ArrayIndexOutOfBoundsException newArrayIndexOutOfBoundsException(int arrayLength, long index) {
148
/*[MSG "K0622", "Index {0}, array length {1}."]*/
149
return new ArrayIndexOutOfBoundsException(com.ibm.oti.util.Msg.getString("K0622", java.lang.Long.toString(index), Integer.toString(arrayLength))); //$NON-NLS-1$
150
}
151
152
static final void storeCheck(Object value, Class<?> fieldType) {
153
if (null != value) {
154
Class<?> actualType = value.getClass();
155
if (!fieldType.isAssignableFrom(actualType)) {
156
throw newArrayStoreException(fieldType, actualType);
157
}
158
}
159
}
160
161
private static final ArrayStoreException newArrayStoreException(Class<?> fieldType, Class<?> actualType) {
162
/*[MSG "K0630", "Incorrect type - expected {0}, was {1}."]*/
163
return new ArrayStoreException(com.ibm.oti.util.Msg.getString("K0630", fieldType, actualType)); //$NON-NLS-1$
164
}
165
166
static final class OpObject extends ArrayVarHandleOperations {
167
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(Object[].class);
168
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(Object[].class);
169
170
private static final long computeOffset(int index) {
171
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
172
}
173
174
private static final Object get(Object receiver, int index, VarHandle varHandle) {
175
receiver.getClass();
176
boundsCheck(((Object[])receiver).length, index);
177
return _unsafe.getObject(receiver, computeOffset(index));
178
}
179
180
private static final void set(Object receiver, int index, Object value, VarHandle varHandle) {
181
receiver.getClass();
182
boundsCheck(((Object[])receiver).length, index);
183
storeCheck(value, receiver.getClass().getComponentType());
184
_unsafe.putObject(receiver, computeOffset(index), value);
185
}
186
187
private static final Object getVolatile(Object receiver, int index, VarHandle varHandle) {
188
receiver.getClass();
189
boundsCheck(((Object[])receiver).length, index);
190
return _unsafe.getObjectVolatile(receiver, computeOffset(index));
191
}
192
193
private static final void setVolatile(Object receiver, int index, Object value, VarHandle varHandle) {
194
receiver.getClass();
195
boundsCheck(((Object[])receiver).length, index);
196
storeCheck(value, receiver.getClass().getComponentType());
197
_unsafe.putObjectVolatile(receiver, computeOffset(index), value);
198
}
199
200
private static final Object getOpaque(Object receiver, int index, VarHandle varHandle) {
201
receiver.getClass();
202
boundsCheck(((Object[])receiver).length, index);
203
return _unsafe.getObjectOpaque(receiver, computeOffset(index));
204
}
205
206
private static final void setOpaque(Object receiver, int index, Object value, VarHandle varHandle) {
207
receiver.getClass();
208
boundsCheck(((Object[])receiver).length, index);
209
storeCheck(value, receiver.getClass().getComponentType());
210
_unsafe.putObjectOpaque(receiver, computeOffset(index), value);
211
}
212
213
private static final Object getAcquire(Object receiver, int index, VarHandle varHandle) {
214
receiver.getClass();
215
boundsCheck(((Object[])receiver).length, index);
216
return _unsafe.getObjectAcquire(receiver, computeOffset(index));
217
}
218
219
private static final void setRelease(Object receiver, int index, Object value, VarHandle varHandle) {
220
receiver.getClass();
221
boundsCheck(((Object[])receiver).length, index);
222
storeCheck(value, receiver.getClass().getComponentType());
223
_unsafe.putObjectRelease(receiver, computeOffset(index), value);
224
}
225
226
private static final boolean compareAndSet(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
227
receiver.getClass();
228
boundsCheck(((Object[])receiver).length, index);
229
storeCheck(newValue, receiver.getClass().getComponentType());
230
/*[IF Sidecar19-SE-OpenJ9]*/
231
return _unsafe.compareAndSetObject(receiver, computeOffset(index), testValue, newValue);
232
/*[ELSE]
233
return _unsafe.compareAndSwapObject(receiver, computeOffset(index), testValue, newValue);
234
/*[ENDIF]*/
235
}
236
237
private static final Object compareAndExchange(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
238
receiver.getClass();
239
boundsCheck(((Object[])receiver).length, index);
240
storeCheck(newValue, receiver.getClass().getComponentType());
241
/*[IF Sidecar19-SE-OpenJ9]*/
242
return _unsafe.compareAndExchangeObject(receiver, computeOffset(index), testValue, newValue);
243
/*[ELSE]
244
return _unsafe.compareAndExchangeObjectVolatile(receiver, computeOffset(index), testValue, newValue);
245
/*[ENDIF]*/
246
}
247
248
private static final Object compareAndExchangeAcquire(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
249
receiver.getClass();
250
boundsCheck(((Object[])receiver).length, index);
251
storeCheck(newValue, receiver.getClass().getComponentType());
252
return _unsafe.compareAndExchangeObjectAcquire(receiver, computeOffset(index), testValue, newValue);
253
}
254
255
private static final Object compareAndExchangeRelease(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
256
receiver.getClass();
257
boundsCheck(((Object[])receiver).length, index);
258
storeCheck(newValue, receiver.getClass().getComponentType());
259
return _unsafe.compareAndExchangeObjectRelease(receiver, computeOffset(index), testValue, newValue);
260
}
261
262
private static final boolean weakCompareAndSet(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
263
receiver.getClass();
264
boundsCheck(((Object[])receiver).length, index);
265
storeCheck(newValue, receiver.getClass().getComponentType());
266
/*[IF Sidecar19-SE-OpenJ9]*/
267
return _unsafe.weakCompareAndSetObjectPlain(receiver, computeOffset(index), testValue, newValue);
268
/*[ELSE]
269
return _unsafe.weakCompareAndSwapObject(receiver, computeOffset(index), testValue, newValue);
270
/*[ENDIF]*/
271
}
272
273
private static final boolean weakCompareAndSetAcquire(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
274
receiver.getClass();
275
boundsCheck(((Object[])receiver).length, index);
276
storeCheck(newValue, receiver.getClass().getComponentType());
277
/*[IF Sidecar19-SE-OpenJ9]*/
278
return _unsafe.weakCompareAndSetObjectAcquire(receiver, computeOffset(index), testValue, newValue);
279
/*[ELSE]
280
return _unsafe.weakCompareAndSwapObjectAcquire(receiver, computeOffset(index), testValue, newValue);
281
/*[ENDIF]*/
282
}
283
284
private static final boolean weakCompareAndSetRelease(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
285
receiver.getClass();
286
boundsCheck(((Object[])receiver).length, index);
287
storeCheck(newValue, receiver.getClass().getComponentType());
288
/*[IF Sidecar19-SE-OpenJ9]*/
289
return _unsafe.weakCompareAndSetObjectRelease(receiver, computeOffset(index), testValue, newValue);
290
/*[ELSE]
291
return _unsafe.weakCompareAndSwapObjectRelease(receiver, computeOffset(index), testValue, newValue);
292
/*[ENDIF]*/
293
}
294
295
private static final boolean weakCompareAndSetPlain(Object receiver, int index, Object testValue, Object newValue, VarHandle varHandle) {
296
receiver.getClass();
297
boundsCheck(((Object[])receiver).length, index);
298
storeCheck(newValue, receiver.getClass().getComponentType());
299
/*[IF Sidecar19-SE-OpenJ9]*/
300
return _unsafe.weakCompareAndSetObjectPlain(receiver, computeOffset(index), testValue, newValue);
301
/*[ELSE]
302
return _unsafe.weakCompareAndSwapObject(receiver, computeOffset(index), testValue, newValue);
303
/*[ENDIF]*/
304
}
305
306
private static final Object getAndSet(Object receiver, int index, Object value, VarHandle varHandle) {
307
receiver.getClass();
308
boundsCheck(((Object[])receiver).length, index);
309
storeCheck(value, receiver.getClass().getComponentType());
310
return _unsafe.getAndSetObject(receiver, computeOffset(index), value);
311
}
312
313
private static final Object getAndSetAcquire(Object receiver, int index, Object value, VarHandle varHandle) {
314
receiver.getClass();
315
boundsCheck(((Object[])receiver).length, index);
316
storeCheck(value, receiver.getClass().getComponentType());
317
return _unsafe.getAndSetObjectAcquire(receiver, computeOffset(index), value);
318
}
319
320
private static final Object getAndSetRelease(Object receiver, int index, Object value, VarHandle varHandle) {
321
receiver.getClass();
322
boundsCheck(((Object[])receiver).length, index);
323
storeCheck(value, receiver.getClass().getComponentType());
324
return _unsafe.getAndSetObjectRelease(receiver, computeOffset(index), value);
325
}
326
327
private static final Object getAndAdd(Object receiver, int index, Object value, VarHandle varHandle) {
328
throw operationNotSupported(varHandle);
329
}
330
331
private static final Object getAndAddAcquire(Object receiver, int index, Object value, VarHandle varHandle) {
332
throw operationNotSupported(varHandle);
333
}
334
335
private static final Object getAndAddRelease(Object receiver, int index, Object value, VarHandle varHandle) {
336
throw operationNotSupported(varHandle);
337
}
338
339
private static final Object getAndBitwiseAnd(Object receiver, int index, Object value, VarHandle varHandle) {
340
throw operationNotSupported(varHandle);
341
}
342
343
private static final Object getAndBitwiseAndAcquire(Object receiver, int index, Object value, VarHandle varHandle) {
344
throw operationNotSupported(varHandle);
345
}
346
347
private static final Object getAndBitwiseAndRelease(Object receiver, int index, Object value, VarHandle varHandle) {
348
throw operationNotSupported(varHandle);
349
}
350
351
private static final Object getAndBitwiseOr(Object receiver, int index, Object value, VarHandle varHandle) {
352
throw operationNotSupported(varHandle);
353
}
354
355
private static final Object getAndBitwiseOrAcquire(Object receiver, int index, Object value, VarHandle varHandle) {
356
throw operationNotSupported(varHandle);
357
}
358
359
private static final Object getAndBitwiseOrRelease(Object receiver, int index, Object value, VarHandle varHandle) {
360
throw operationNotSupported(varHandle);
361
}
362
363
private static final Object getAndBitwiseXor(Object receiver, int index, Object value, VarHandle varHandle) {
364
throw operationNotSupported(varHandle);
365
}
366
367
private static final Object getAndBitwiseXorAcquire(Object receiver, int index, Object value, VarHandle varHandle) {
368
throw operationNotSupported(varHandle);
369
}
370
371
private static final Object getAndBitwiseXorRelease(Object receiver, int index, Object value, VarHandle varHandle) {
372
throw operationNotSupported(varHandle);
373
}
374
}
375
376
static final class OpByte extends ArrayVarHandleOperations {
377
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(byte[].class);
378
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(byte[].class);
379
380
private static final long computeOffset(int index) {
381
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
382
}
383
384
private static final byte get(byte[] receiver, int index, VarHandle varHandle) {
385
receiver.getClass();
386
boundsCheck(receiver.length, index);
387
return _unsafe.getByte(receiver, computeOffset(index));
388
}
389
390
private static final void set(byte[] receiver, int index, byte value, VarHandle varHandle) {
391
receiver.getClass();
392
boundsCheck(receiver.length, index);
393
_unsafe.putByte(receiver, computeOffset(index), value);
394
}
395
396
private static final byte getVolatile(byte[] receiver, int index, VarHandle varHandle) {
397
receiver.getClass();
398
boundsCheck(receiver.length, index);
399
return _unsafe.getByteVolatile(receiver, computeOffset(index));
400
}
401
402
private static final void setVolatile(byte[] receiver, int index, byte value, VarHandle varHandle) {
403
receiver.getClass();
404
boundsCheck(receiver.length, index);
405
_unsafe.putByteVolatile(receiver, computeOffset(index), value);
406
}
407
408
private static final byte getOpaque(byte[] receiver, int index, VarHandle varHandle) {
409
receiver.getClass();
410
boundsCheck(receiver.length, index);
411
return _unsafe.getByteOpaque(receiver, computeOffset(index));
412
}
413
414
private static final void setOpaque(byte[] receiver, int index, byte value, VarHandle varHandle) {
415
receiver.getClass();
416
boundsCheck(receiver.length, index);
417
_unsafe.putByteOpaque(receiver, computeOffset(index), value);
418
}
419
420
private static final byte getAcquire(byte[] receiver, int index, VarHandle varHandle) {
421
receiver.getClass();
422
boundsCheck(receiver.length, index);
423
return _unsafe.getByteAcquire(receiver, computeOffset(index));
424
}
425
426
private static final void setRelease(byte[] receiver, int index, byte value, VarHandle varHandle) {
427
receiver.getClass();
428
boundsCheck(receiver.length, index);
429
_unsafe.putByteRelease(receiver, computeOffset(index), value);
430
}
431
432
private static final boolean compareAndSet(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
433
receiver.getClass();
434
boundsCheck(receiver.length, index);
435
/*[IF Sidecar19-SE-OpenJ9]*/
436
return _unsafe.compareAndSetByte(receiver, computeOffset(index), testValue, newValue);
437
/*[ELSE]
438
return _unsafe.compareAndSwapByte(receiver, computeOffset(index), testValue, newValue);
439
/*[ENDIF]*/
440
}
441
442
private static final byte compareAndExchange(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
443
receiver.getClass();
444
boundsCheck(receiver.length, index);
445
/*[IF Sidecar19-SE-OpenJ9]*/
446
return _unsafe.compareAndExchangeByte(receiver, computeOffset(index), testValue, newValue);
447
/*[ELSE]
448
return _unsafe.compareAndExchangeByteVolatile(receiver, computeOffset(index), testValue, newValue);
449
/*[ENDIF]*/
450
}
451
452
private static final byte compareAndExchangeAcquire(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
453
receiver.getClass();
454
boundsCheck(receiver.length, index);
455
return _unsafe.compareAndExchangeByteAcquire(receiver, computeOffset(index), testValue, newValue);
456
}
457
458
private static final byte compareAndExchangeRelease(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
459
receiver.getClass();
460
boundsCheck(receiver.length, index);
461
return _unsafe.compareAndExchangeByteRelease(receiver, computeOffset(index), testValue, newValue);
462
}
463
464
private static final boolean weakCompareAndSet(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
465
receiver.getClass();
466
boundsCheck(receiver.length, index);
467
/*[IF Sidecar19-SE-OpenJ9]*/
468
return _unsafe.weakCompareAndSetBytePlain(receiver, computeOffset(index), testValue, newValue);
469
/*[ELSE]
470
return _unsafe.weakCompareAndSwapByte(receiver, computeOffset(index), testValue, newValue);
471
/*[ENDIF]*/
472
}
473
474
private static final boolean weakCompareAndSetAcquire(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
475
receiver.getClass();
476
boundsCheck(receiver.length, index);
477
/*[IF Sidecar19-SE-OpenJ9]*/
478
return _unsafe.weakCompareAndSetByteAcquire(receiver, computeOffset(index), testValue, newValue);
479
/*[ELSE]
480
return _unsafe.weakCompareAndSwapByteAcquire(receiver, computeOffset(index), testValue, newValue);
481
/*[ENDIF]*/
482
}
483
484
private static final boolean weakCompareAndSetRelease(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
485
receiver.getClass();
486
boundsCheck(receiver.length, index);
487
/*[IF Sidecar19-SE-OpenJ9]*/
488
return _unsafe.weakCompareAndSetByteRelease(receiver, computeOffset(index), testValue, newValue);
489
/*[ELSE]
490
return _unsafe.weakCompareAndSwapByteRelease(receiver, computeOffset(index), testValue, newValue);
491
/*[ENDIF]*/
492
}
493
494
private static final boolean weakCompareAndSetPlain(byte[] receiver, int index, byte testValue, byte newValue, VarHandle varHandle) {
495
receiver.getClass();
496
boundsCheck(receiver.length, index);
497
/*[IF Sidecar19-SE-OpenJ9]*/
498
return _unsafe.weakCompareAndSetBytePlain(receiver, computeOffset(index), testValue, newValue);
499
/*[ELSE]
500
return _unsafe.weakCompareAndSwapByte(receiver, computeOffset(index), testValue, newValue);
501
/*[ENDIF]*/
502
}
503
504
private static final byte getAndSet(byte[] receiver, int index, byte value, VarHandle varHandle) {
505
receiver.getClass();
506
boundsCheck(receiver.length, index);
507
return _unsafe.getAndSetByte(receiver, computeOffset(index), value);
508
}
509
510
private static final byte getAndSetAcquire(byte[] receiver, int index, byte value, VarHandle varHandle) {
511
receiver.getClass();
512
boundsCheck(receiver.length, index);
513
return _unsafe.getAndSetByteAcquire(receiver, computeOffset(index), value);
514
}
515
516
private static final byte getAndSetRelease(byte[] receiver, int index, byte value, VarHandle varHandle) {
517
receiver.getClass();
518
boundsCheck(receiver.length, index);
519
return _unsafe.getAndSetByteRelease(receiver, computeOffset(index), value);
520
}
521
522
private static final byte getAndAdd(byte[] receiver, int index, byte value, VarHandle varHandle) {
523
receiver.getClass();
524
boundsCheck(receiver.length, index);
525
return _unsafe.getAndAddByte(receiver, computeOffset(index), value);
526
}
527
528
private static final byte getAndAddAcquire(byte[] receiver, int index, byte value, VarHandle varHandle) {
529
receiver.getClass();
530
boundsCheck(receiver.length, index);
531
return _unsafe.getAndAddByteAcquire(receiver, computeOffset(index), value);
532
}
533
534
private static final byte getAndAddRelease(byte[] receiver, int index, byte value, VarHandle varHandle) {
535
receiver.getClass();
536
boundsCheck(receiver.length, index);
537
return _unsafe.getAndAddByteRelease(receiver, computeOffset(index), value);
538
}
539
540
private static final byte getAndBitwiseAnd(byte[] receiver, int index, byte value, VarHandle varHandle) {
541
receiver.getClass();
542
boundsCheck(receiver.length, index);
543
return _unsafe.getAndBitwiseAndByte(receiver, computeOffset(index), value);
544
}
545
546
private static final byte getAndBitwiseAndAcquire(byte[] receiver, int index, byte value, VarHandle varHandle) {
547
receiver.getClass();
548
boundsCheck(receiver.length, index);
549
return _unsafe.getAndBitwiseAndByteAcquire(receiver, computeOffset(index), value);
550
}
551
552
private static final byte getAndBitwiseAndRelease(byte[] receiver, int index, byte value, VarHandle varHandle) {
553
receiver.getClass();
554
boundsCheck(receiver.length, index);
555
return _unsafe.getAndBitwiseAndByteRelease(receiver, computeOffset(index), value);
556
}
557
558
private static final byte getAndBitwiseOr(byte[] receiver, int index, byte value, VarHandle varHandle) {
559
receiver.getClass();
560
boundsCheck(receiver.length, index);
561
return _unsafe.getAndBitwiseOrByte(receiver, computeOffset(index), value);
562
}
563
564
private static final byte getAndBitwiseOrAcquire(byte[] receiver, int index, byte value, VarHandle varHandle) {
565
receiver.getClass();
566
boundsCheck(receiver.length, index);
567
return _unsafe.getAndBitwiseOrByteAcquire(receiver, computeOffset(index), value);
568
}
569
570
private static final byte getAndBitwiseOrRelease(byte[] receiver, int index, byte value, VarHandle varHandle) {
571
receiver.getClass();
572
boundsCheck(receiver.length, index);
573
return _unsafe.getAndBitwiseOrByteRelease(receiver, computeOffset(index), value);
574
}
575
576
private static final byte getAndBitwiseXor(byte[] receiver, int index, byte value, VarHandle varHandle) {
577
receiver.getClass();
578
boundsCheck(receiver.length, index);
579
return _unsafe.getAndBitwiseXorByte(receiver, computeOffset(index), value);
580
}
581
582
private static final byte getAndBitwiseXorAcquire(byte[] receiver, int index, byte value, VarHandle varHandle) {
583
receiver.getClass();
584
boundsCheck(receiver.length, index);
585
return _unsafe.getAndBitwiseXorByteAcquire(receiver, computeOffset(index), value);
586
}
587
588
private static final byte getAndBitwiseXorRelease(byte[] receiver, int index, byte value, VarHandle varHandle) {
589
receiver.getClass();
590
boundsCheck(receiver.length, index);
591
return _unsafe.getAndBitwiseXorByteRelease(receiver, computeOffset(index), value);
592
}
593
}
594
595
static final class OpChar extends ArrayVarHandleOperations {
596
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(char[].class);
597
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(char[].class);
598
599
private static final long computeOffset(int index) {
600
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
601
}
602
603
private static final char get(char[] receiver, int index, VarHandle varHandle) {
604
receiver.getClass();
605
boundsCheck(receiver.length, index);
606
return _unsafe.getChar(receiver, computeOffset(index));
607
}
608
609
private static final void set(char[] receiver, int index, char value, VarHandle varHandle) {
610
receiver.getClass();
611
boundsCheck(receiver.length, index);
612
_unsafe.putChar(receiver, computeOffset(index), value);
613
}
614
615
private static final char getVolatile(char[] receiver, int index, VarHandle varHandle) {
616
receiver.getClass();
617
boundsCheck(receiver.length, index);
618
return _unsafe.getCharVolatile(receiver, computeOffset(index));
619
}
620
621
private static final void setVolatile(char[] receiver, int index, char value, VarHandle varHandle) {
622
receiver.getClass();
623
boundsCheck(receiver.length, index);
624
_unsafe.putCharVolatile(receiver, computeOffset(index), value);
625
}
626
627
private static final char getOpaque(char[] receiver, int index, VarHandle varHandle) {
628
receiver.getClass();
629
boundsCheck(receiver.length, index);
630
return _unsafe.getCharOpaque(receiver, computeOffset(index));
631
}
632
633
private static final void setOpaque(char[] receiver, int index, char value, VarHandle varHandle) {
634
receiver.getClass();
635
boundsCheck(receiver.length, index);
636
_unsafe.putCharOpaque(receiver, computeOffset(index), value);
637
}
638
639
private static final char getAcquire(char[] receiver, int index, VarHandle varHandle) {
640
receiver.getClass();
641
boundsCheck(receiver.length, index);
642
return _unsafe.getCharAcquire(receiver, computeOffset(index));
643
}
644
645
private static final void setRelease(char[] receiver, int index, char value, VarHandle varHandle) {
646
receiver.getClass();
647
boundsCheck(receiver.length, index);
648
_unsafe.putCharRelease(receiver, computeOffset(index), value);
649
}
650
651
private static final boolean compareAndSet(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
652
receiver.getClass();
653
boundsCheck(receiver.length, index);
654
/*[IF Sidecar19-SE-OpenJ9]*/
655
return _unsafe.compareAndSetChar(receiver, computeOffset(index), testValue, newValue);
656
/*[ELSE]
657
return _unsafe.compareAndSwapChar(receiver, computeOffset(index), testValue, newValue);
658
/*[ENDIF]*/
659
}
660
661
private static final char compareAndExchange(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
662
receiver.getClass();
663
boundsCheck(receiver.length, index);
664
/*[IF Sidecar19-SE-OpenJ9]*/
665
return _unsafe.compareAndExchangeChar(receiver, computeOffset(index), testValue, newValue);
666
/*[ELSE]
667
return _unsafe.compareAndExchangeCharVolatile(receiver, computeOffset(index), testValue, newValue);
668
/*[ENDIF]*/
669
}
670
671
private static final char compareAndExchangeAcquire(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
672
receiver.getClass();
673
boundsCheck(receiver.length, index);
674
return _unsafe.compareAndExchangeCharAcquire(receiver, computeOffset(index), testValue, newValue);
675
}
676
677
private static final char compareAndExchangeRelease(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
678
receiver.getClass();
679
boundsCheck(receiver.length, index);
680
return _unsafe.compareAndExchangeCharRelease(receiver, computeOffset(index), testValue, newValue);
681
}
682
683
private static final boolean weakCompareAndSet(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
684
receiver.getClass();
685
boundsCheck(receiver.length, index);
686
/*[IF Sidecar19-SE-OpenJ9]*/
687
return _unsafe.weakCompareAndSetCharPlain(receiver, computeOffset(index), testValue, newValue);
688
/*[ELSE]
689
return _unsafe.weakCompareAndSwapChar(receiver, computeOffset(index), testValue, newValue);
690
/*[ENDIF]*/
691
}
692
693
private static final boolean weakCompareAndSetAcquire(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
694
receiver.getClass();
695
boundsCheck(receiver.length, index);
696
/*[IF Sidecar19-SE-OpenJ9]*/
697
return _unsafe.weakCompareAndSetCharAcquire(receiver, computeOffset(index), testValue, newValue);
698
/*[ELSE]
699
return _unsafe.weakCompareAndSwapCharAcquire(receiver, computeOffset(index), testValue, newValue);
700
/*[ENDIF]*/
701
}
702
703
private static final boolean weakCompareAndSetRelease(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
704
receiver.getClass();
705
boundsCheck(receiver.length, index);
706
/*[IF Sidecar19-SE-OpenJ9]*/
707
return _unsafe.weakCompareAndSetCharRelease(receiver, computeOffset(index), testValue, newValue);
708
/*[ELSE]
709
return _unsafe.weakCompareAndSwapCharRelease(receiver, computeOffset(index), testValue, newValue);
710
/*[ENDIF]*/
711
}
712
713
private static final boolean weakCompareAndSetPlain(char[] receiver, int index, char testValue, char newValue, VarHandle varHandle) {
714
receiver.getClass();
715
boundsCheck(receiver.length, index);
716
/*[IF Sidecar19-SE-OpenJ9]*/
717
return _unsafe.weakCompareAndSetCharPlain(receiver, computeOffset(index), testValue, newValue);
718
/*[ELSE]
719
return _unsafe.weakCompareAndSwapChar(receiver, computeOffset(index), testValue, newValue);
720
/*[ENDIF]*/
721
}
722
723
private static final char getAndSet(char[] receiver, int index, char value, VarHandle varHandle) {
724
receiver.getClass();
725
boundsCheck(receiver.length, index);
726
return _unsafe.getAndSetChar(receiver, computeOffset(index), value);
727
}
728
729
private static final char getAndSetAcquire(char[] receiver, int index, char value, VarHandle varHandle) {
730
receiver.getClass();
731
boundsCheck(receiver.length, index);
732
return _unsafe.getAndSetCharAcquire(receiver, computeOffset(index), value);
733
}
734
735
private static final char getAndSetRelease(char[] receiver, int index, char value, VarHandle varHandle) {
736
receiver.getClass();
737
boundsCheck(receiver.length, index);
738
return _unsafe.getAndSetCharRelease(receiver, computeOffset(index), value);
739
}
740
741
private static final char getAndAdd(char[] receiver, int index, char value, VarHandle varHandle) {
742
receiver.getClass();
743
boundsCheck(receiver.length, index);
744
return _unsafe.getAndAddChar(receiver, computeOffset(index), value);
745
}
746
747
private static final char getAndAddAcquire(char[] receiver, int index, char value, VarHandle varHandle) {
748
receiver.getClass();
749
boundsCheck(receiver.length, index);
750
return _unsafe.getAndAddCharAcquire(receiver, computeOffset(index), value);
751
}
752
753
private static final char getAndAddRelease(char[] receiver, int index, char value, VarHandle varHandle) {
754
receiver.getClass();
755
boundsCheck(receiver.length, index);
756
return _unsafe.getAndAddCharRelease(receiver, computeOffset(index), value);
757
}
758
759
private static final char getAndBitwiseAnd(char[] receiver, int index, char value, VarHandle varHandle) {
760
receiver.getClass();
761
boundsCheck(receiver.length, index);
762
return _unsafe.getAndBitwiseAndChar(receiver, computeOffset(index), value);
763
}
764
765
private static final char getAndBitwiseAndAcquire(char[] receiver, int index, char value, VarHandle varHandle) {
766
receiver.getClass();
767
boundsCheck(receiver.length, index);
768
return _unsafe.getAndBitwiseAndCharAcquire(receiver, computeOffset(index), value);
769
}
770
771
private static final char getAndBitwiseAndRelease(char[] receiver, int index, char value, VarHandle varHandle) {
772
receiver.getClass();
773
boundsCheck(receiver.length, index);
774
return _unsafe.getAndBitwiseAndCharRelease(receiver, computeOffset(index), value);
775
}
776
777
private static final char getAndBitwiseOr(char[] receiver, int index, char value, VarHandle varHandle) {
778
receiver.getClass();
779
boundsCheck(receiver.length, index);
780
return _unsafe.getAndBitwiseOrChar(receiver, computeOffset(index), value);
781
}
782
783
private static final char getAndBitwiseOrAcquire(char[] receiver, int index, char value, VarHandle varHandle) {
784
receiver.getClass();
785
boundsCheck(receiver.length, index);
786
return _unsafe.getAndBitwiseOrCharAcquire(receiver, computeOffset(index), value);
787
}
788
789
private static final char getAndBitwiseOrRelease(char[] receiver, int index, char value, VarHandle varHandle) {
790
receiver.getClass();
791
boundsCheck(receiver.length, index);
792
return _unsafe.getAndBitwiseOrCharRelease(receiver, computeOffset(index), value);
793
}
794
795
private static final char getAndBitwiseXor(char[] receiver, int index, char value, VarHandle varHandle) {
796
receiver.getClass();
797
boundsCheck(receiver.length, index);
798
return _unsafe.getAndBitwiseXorChar(receiver, computeOffset(index), value);
799
}
800
801
private static final char getAndBitwiseXorAcquire(char[] receiver, int index, char value, VarHandle varHandle) {
802
receiver.getClass();
803
boundsCheck(receiver.length, index);
804
return _unsafe.getAndBitwiseXorCharAcquire(receiver, computeOffset(index), value);
805
}
806
807
private static final char getAndBitwiseXorRelease(char[] receiver, int index, char value, VarHandle varHandle) {
808
receiver.getClass();
809
boundsCheck(receiver.length, index);
810
return _unsafe.getAndBitwiseXorCharRelease(receiver, computeOffset(index), value);
811
}
812
}
813
814
static final class OpDouble extends ArrayVarHandleOperations {
815
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(double[].class);
816
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(double[].class);
817
818
private static final long computeOffset(int index) {
819
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
820
}
821
822
private static final double get(double[] receiver, int index, VarHandle varHandle) {
823
receiver.getClass();
824
boundsCheck(receiver.length, index);
825
return _unsafe.getDouble(receiver, computeOffset(index));
826
}
827
828
private static final void set(double[] receiver, int index, double value, VarHandle varHandle) {
829
receiver.getClass();
830
boundsCheck(receiver.length, index);
831
_unsafe.putDouble(receiver, computeOffset(index), value);
832
}
833
834
private static final double getVolatile(double[] receiver, int index, VarHandle varHandle) {
835
receiver.getClass();
836
boundsCheck(receiver.length, index);
837
return _unsafe.getDoubleVolatile(receiver, computeOffset(index));
838
}
839
840
private static final void setVolatile(double[] receiver, int index, double value, VarHandle varHandle) {
841
receiver.getClass();
842
boundsCheck(receiver.length, index);
843
_unsafe.putDoubleVolatile(receiver, computeOffset(index), value);
844
}
845
846
private static final double getOpaque(double[] receiver, int index, VarHandle varHandle) {
847
receiver.getClass();
848
boundsCheck(receiver.length, index);
849
return _unsafe.getDoubleOpaque(receiver, computeOffset(index));
850
}
851
852
private static final void setOpaque(double[] receiver, int index, double value, VarHandle varHandle) {
853
receiver.getClass();
854
boundsCheck(receiver.length, index);
855
_unsafe.putDoubleOpaque(receiver, computeOffset(index), value);
856
}
857
858
private static final double getAcquire(double[] receiver, int index, VarHandle varHandle) {
859
receiver.getClass();
860
boundsCheck(receiver.length, index);
861
return _unsafe.getDoubleAcquire(receiver, computeOffset(index));
862
}
863
864
private static final void setRelease(double[] receiver, int index, double value, VarHandle varHandle) {
865
receiver.getClass();
866
boundsCheck(receiver.length, index);
867
_unsafe.putDoubleRelease(receiver, computeOffset(index), value);
868
}
869
870
private static final boolean compareAndSet(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
871
receiver.getClass();
872
boundsCheck(receiver.length, index);
873
/*[IF Sidecar19-SE-OpenJ9]*/
874
return _unsafe.compareAndSetDouble(receiver, computeOffset(index), testValue, newValue);
875
/*[ELSE]
876
return _unsafe.compareAndSwapDouble(receiver, computeOffset(index), testValue, newValue);
877
/*[ENDIF]*/
878
}
879
880
private static final double compareAndExchange(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
881
receiver.getClass();
882
boundsCheck(receiver.length, index);
883
/*[IF Sidecar19-SE-OpenJ9]*/
884
return _unsafe.compareAndExchangeDouble(receiver, computeOffset(index), testValue, newValue);
885
/*[ELSE]
886
return _unsafe.compareAndExchangeDoubleVolatile(receiver, computeOffset(index), testValue, newValue);
887
/*[ENDIF]*/
888
}
889
890
private static final double compareAndExchangeAcquire(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
891
receiver.getClass();
892
boundsCheck(receiver.length, index);
893
return _unsafe.compareAndExchangeDoubleAcquire(receiver, computeOffset(index), testValue, newValue);
894
}
895
896
private static final double compareAndExchangeRelease(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
897
receiver.getClass();
898
boundsCheck(receiver.length, index);
899
return _unsafe.compareAndExchangeDoubleRelease(receiver, computeOffset(index), testValue, newValue);
900
}
901
902
private static final boolean weakCompareAndSet(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
903
receiver.getClass();
904
boundsCheck(receiver.length, index);
905
/*[IF Sidecar19-SE-OpenJ9]*/
906
return _unsafe.weakCompareAndSetDoublePlain(receiver, computeOffset(index), testValue, newValue);
907
/*[ELSE]
908
return _unsafe.weakCompareAndSwapDouble(receiver, computeOffset(index), testValue, newValue);
909
/*[ENDIF]*/
910
}
911
912
private static final boolean weakCompareAndSetAcquire(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
913
receiver.getClass();
914
boundsCheck(receiver.length, index);
915
/*[IF Sidecar19-SE-OpenJ9]*/
916
return _unsafe.weakCompareAndSetDoubleAcquire(receiver, computeOffset(index), testValue, newValue);
917
/*[ELSE]
918
return _unsafe.weakCompareAndSwapDoubleAcquire(receiver, computeOffset(index), testValue, newValue);
919
/*[ENDIF]*/
920
}
921
922
private static final boolean weakCompareAndSetRelease(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
923
receiver.getClass();
924
boundsCheck(receiver.length, index);
925
/*[IF Sidecar19-SE-OpenJ9]*/
926
return _unsafe.weakCompareAndSetDoubleRelease(receiver, computeOffset(index), testValue, newValue);
927
/*[ELSE]
928
return _unsafe.weakCompareAndSwapDoubleRelease(receiver, computeOffset(index), testValue, newValue);
929
/*[ENDIF]*/
930
}
931
932
private static final boolean weakCompareAndSetPlain(double[] receiver, int index, double testValue, double newValue, VarHandle varHandle) {
933
receiver.getClass();
934
boundsCheck(receiver.length, index);
935
/*[IF Sidecar19-SE-OpenJ9]*/
936
return _unsafe.weakCompareAndSetDoublePlain(receiver, computeOffset(index), testValue, newValue);
937
/*[ELSE]
938
return _unsafe.weakCompareAndSwapDouble(receiver, computeOffset(index), testValue, newValue);
939
/*[ENDIF]*/
940
}
941
942
private static final double getAndSet(double[] receiver, int index, double value, VarHandle varHandle) {
943
receiver.getClass();
944
boundsCheck(receiver.length, index);
945
return _unsafe.getAndSetDouble(receiver, computeOffset(index), value);
946
}
947
948
private static final double getAndSetAcquire(double[] receiver, int index, double value, VarHandle varHandle) {
949
receiver.getClass();
950
boundsCheck(receiver.length, index);
951
return _unsafe.getAndSetDoubleAcquire(receiver, computeOffset(index), value);
952
}
953
954
private static final double getAndSetRelease(double[] receiver, int index, double value, VarHandle varHandle) {
955
receiver.getClass();
956
boundsCheck(receiver.length, index);
957
return _unsafe.getAndSetDoubleRelease(receiver, computeOffset(index), value);
958
}
959
960
private static final double getAndAdd(double[] receiver, int index, double value, VarHandle varHandle) {
961
receiver.getClass();
962
boundsCheck(receiver.length, index);
963
return _unsafe.getAndAddDouble(receiver, computeOffset(index), value);
964
}
965
966
private static final double getAndAddAcquire(double[] receiver, int index, double value, VarHandle varHandle) {
967
receiver.getClass();
968
boundsCheck(receiver.length, index);
969
return _unsafe.getAndAddDoubleAcquire(receiver, computeOffset(index), value);
970
}
971
972
private static final double getAndAddRelease(double[] receiver, int index, double value, VarHandle varHandle) {
973
receiver.getClass();
974
boundsCheck(receiver.length, index);
975
return _unsafe.getAndAddDoubleRelease(receiver, computeOffset(index), value);
976
}
977
978
private static final double getAndBitwiseAnd(double[] receiver, int index, double value, VarHandle varHandle) {
979
throw operationNotSupported(varHandle);
980
}
981
982
private static final double getAndBitwiseAndAcquire(double[] receiver, int index, double value, VarHandle varHandle) {
983
throw operationNotSupported(varHandle);
984
}
985
986
private static final double getAndBitwiseAndRelease(double[] receiver, int index, double value, VarHandle varHandle) {
987
throw operationNotSupported(varHandle);
988
}
989
990
private static final double getAndBitwiseOr(double[] receiver, int index, double value, VarHandle varHandle) {
991
throw operationNotSupported(varHandle);
992
}
993
994
private static final double getAndBitwiseOrAcquire(double[] receiver, int index, double value, VarHandle varHandle) {
995
throw operationNotSupported(varHandle);
996
}
997
998
private static final double getAndBitwiseOrRelease(double[] receiver, int index, double value, VarHandle varHandle) {
999
throw operationNotSupported(varHandle);
1000
}
1001
1002
private static final double getAndBitwiseXor(double[] receiver, int index, double value, VarHandle varHandle) {
1003
throw operationNotSupported(varHandle);
1004
}
1005
1006
private static final double getAndBitwiseXorAcquire(double[] receiver, int index, double value, VarHandle varHandle) {
1007
throw operationNotSupported(varHandle);
1008
}
1009
1010
private static final double getAndBitwiseXorRelease(double[] receiver, int index, double value, VarHandle varHandle) {
1011
throw operationNotSupported(varHandle);
1012
}
1013
}
1014
1015
static final class OpFloat extends ArrayVarHandleOperations {
1016
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(float[].class);
1017
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(float[].class);
1018
1019
private static final long computeOffset(int index) {
1020
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
1021
}
1022
1023
private static final float get(float[] receiver, int index, VarHandle varHandle) {
1024
receiver.getClass();
1025
boundsCheck(receiver.length, index);
1026
return _unsafe.getFloat(receiver, computeOffset(index));
1027
}
1028
1029
private static final void set(float[] receiver, int index, float value, VarHandle varHandle) {
1030
receiver.getClass();
1031
boundsCheck(receiver.length, index);
1032
_unsafe.putFloat(receiver, computeOffset(index), value);
1033
}
1034
1035
private static final float getVolatile(float[] receiver, int index, VarHandle varHandle) {
1036
receiver.getClass();
1037
boundsCheck(receiver.length, index);
1038
return _unsafe.getFloatVolatile(receiver, computeOffset(index));
1039
}
1040
1041
private static final void setVolatile(float[] receiver, int index, float value, VarHandle varHandle) {
1042
receiver.getClass();
1043
boundsCheck(receiver.length, index);
1044
_unsafe.putFloatVolatile(receiver, computeOffset(index), value);
1045
}
1046
1047
private static final float getOpaque(float[] receiver, int index, VarHandle varHandle) {
1048
receiver.getClass();
1049
boundsCheck(receiver.length, index);
1050
return _unsafe.getFloatOpaque(receiver, computeOffset(index));
1051
}
1052
1053
private static final void setOpaque(float[] receiver, int index, float value, VarHandle varHandle) {
1054
receiver.getClass();
1055
boundsCheck(receiver.length, index);
1056
_unsafe.putFloatOpaque(receiver, computeOffset(index), value);
1057
}
1058
1059
private static final float getAcquire(float[] receiver, int index, VarHandle varHandle) {
1060
receiver.getClass();
1061
boundsCheck(receiver.length, index);
1062
return _unsafe.getFloatAcquire(receiver, computeOffset(index));
1063
}
1064
1065
private static final void setRelease(float[] receiver, int index, float value, VarHandle varHandle) {
1066
receiver.getClass();
1067
boundsCheck(receiver.length, index);
1068
_unsafe.putFloatRelease(receiver, computeOffset(index), value);
1069
}
1070
1071
private static final boolean compareAndSet(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1072
receiver.getClass();
1073
boundsCheck(receiver.length, index);
1074
/*[IF Sidecar19-SE-OpenJ9]*/
1075
return _unsafe.compareAndSetFloat(receiver, computeOffset(index), testValue, newValue);
1076
/*[ELSE]
1077
return _unsafe.compareAndSwapFloat(receiver, computeOffset(index), testValue, newValue);
1078
/*[ENDIF]*/
1079
}
1080
1081
private static final float compareAndExchange(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1082
receiver.getClass();
1083
boundsCheck(receiver.length, index);
1084
/*[IF Sidecar19-SE-OpenJ9]*/
1085
return _unsafe.compareAndExchangeFloat(receiver, computeOffset(index), testValue, newValue);
1086
/*[ELSE]
1087
return _unsafe.compareAndExchangeFloatVolatile(receiver, computeOffset(index), testValue, newValue);
1088
/*[ENDIF]*/
1089
}
1090
1091
private static final float compareAndExchangeAcquire(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1092
receiver.getClass();
1093
boundsCheck(receiver.length, index);
1094
return _unsafe.compareAndExchangeFloatAcquire(receiver, computeOffset(index), testValue, newValue);
1095
}
1096
1097
private static final float compareAndExchangeRelease(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1098
receiver.getClass();
1099
boundsCheck(receiver.length, index);
1100
return _unsafe.compareAndExchangeFloatRelease(receiver, computeOffset(index), testValue, newValue);
1101
}
1102
1103
private static final boolean weakCompareAndSet(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1104
receiver.getClass();
1105
boundsCheck(receiver.length, index);
1106
/*[IF Sidecar19-SE-OpenJ9]*/
1107
return _unsafe.weakCompareAndSetFloatPlain(receiver, computeOffset(index), testValue, newValue);
1108
/*[ELSE]
1109
return _unsafe.weakCompareAndSwapFloat(receiver, computeOffset(index), testValue, newValue);
1110
/*[ENDIF]*/
1111
}
1112
1113
private static final boolean weakCompareAndSetAcquire(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1114
receiver.getClass();
1115
boundsCheck(receiver.length, index);
1116
/*[IF Sidecar19-SE-OpenJ9]*/
1117
return _unsafe.weakCompareAndSetFloatAcquire(receiver, computeOffset(index), testValue, newValue);
1118
/*[ELSE]
1119
return _unsafe.weakCompareAndSwapFloatAcquire(receiver, computeOffset(index), testValue, newValue);
1120
/*[ENDIF]*/
1121
}
1122
1123
private static final boolean weakCompareAndSetRelease(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1124
receiver.getClass();
1125
boundsCheck(receiver.length, index);
1126
/*[IF Sidecar19-SE-OpenJ9]*/
1127
return _unsafe.weakCompareAndSetFloatRelease(receiver, computeOffset(index), testValue, newValue);
1128
/*[ELSE]
1129
return _unsafe.weakCompareAndSwapFloatRelease(receiver, computeOffset(index), testValue, newValue);
1130
/*[ENDIF]*/
1131
}
1132
1133
private static final boolean weakCompareAndSetPlain(float[] receiver, int index, float testValue, float newValue, VarHandle varHandle) {
1134
receiver.getClass();
1135
boundsCheck(receiver.length, index);
1136
/*[IF Sidecar19-SE-OpenJ9]*/
1137
return _unsafe.weakCompareAndSetFloatPlain(receiver, computeOffset(index), testValue, newValue);
1138
/*[ELSE]
1139
return _unsafe.weakCompareAndSwapFloat(receiver, computeOffset(index), testValue, newValue);
1140
/*[ENDIF]*/
1141
}
1142
1143
private static final float getAndSet(float[] receiver, int index, float value, VarHandle varHandle) {
1144
receiver.getClass();
1145
boundsCheck(receiver.length, index);
1146
return _unsafe.getAndSetFloat(receiver, computeOffset(index), value);
1147
}
1148
1149
private static final float getAndSetAcquire(float[] receiver, int index, float value, VarHandle varHandle) {
1150
receiver.getClass();
1151
boundsCheck(receiver.length, index);
1152
return _unsafe.getAndSetFloatAcquire(receiver, computeOffset(index), value);
1153
}
1154
1155
private static final float getAndSetRelease(float[] receiver, int index, float value, VarHandle varHandle) {
1156
receiver.getClass();
1157
boundsCheck(receiver.length, index);
1158
return _unsafe.getAndSetFloatRelease(receiver, computeOffset(index), value);
1159
}
1160
1161
private static final float getAndAdd(float[] receiver, int index, float value, VarHandle varHandle) {
1162
receiver.getClass();
1163
boundsCheck(receiver.length, index);
1164
return _unsafe.getAndAddFloat(receiver, computeOffset(index), value);
1165
}
1166
1167
private static final float getAndAddAcquire(float[] receiver, int index, float value, VarHandle varHandle) {
1168
receiver.getClass();
1169
boundsCheck(receiver.length, index);
1170
return _unsafe.getAndAddFloatAcquire(receiver, computeOffset(index), value);
1171
}
1172
1173
private static final float getAndAddRelease(float[] receiver, int index, float value, VarHandle varHandle) {
1174
receiver.getClass();
1175
boundsCheck(receiver.length, index);
1176
return _unsafe.getAndAddFloatRelease(receiver, computeOffset(index), value);
1177
}
1178
1179
private static final float getAndBitwiseAnd(float[] receiver, int index, float value, VarHandle varHandle) {
1180
throw operationNotSupported(varHandle);
1181
}
1182
1183
private static final float getAndBitwiseAndAcquire(float[] receiver, int index, float value, VarHandle varHandle) {
1184
throw operationNotSupported(varHandle);
1185
}
1186
1187
private static final float getAndBitwiseAndRelease(float[] receiver, int index, float value, VarHandle varHandle) {
1188
throw operationNotSupported(varHandle);
1189
}
1190
1191
private static final float getAndBitwiseOr(float[] receiver, int index, float value, VarHandle varHandle) {
1192
throw operationNotSupported(varHandle);
1193
}
1194
1195
private static final float getAndBitwiseOrAcquire(float[] receiver, int index, float value, VarHandle varHandle) {
1196
throw operationNotSupported(varHandle);
1197
}
1198
1199
private static final float getAndBitwiseOrRelease(float[] receiver, int index, float value, VarHandle varHandle) {
1200
throw operationNotSupported(varHandle);
1201
}
1202
1203
private static final float getAndBitwiseXor(float[] receiver, int index, float value, VarHandle varHandle) {
1204
throw operationNotSupported(varHandle);
1205
}
1206
1207
private static final float getAndBitwiseXorAcquire(float[] receiver, int index, float value, VarHandle varHandle) {
1208
throw operationNotSupported(varHandle);
1209
}
1210
1211
private static final float getAndBitwiseXorRelease(float[] receiver, int index, float value, VarHandle varHandle) {
1212
throw operationNotSupported(varHandle);
1213
}
1214
}
1215
1216
static final class OpInt extends ArrayVarHandleOperations {
1217
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(int[].class);
1218
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(int[].class);
1219
1220
private static final long computeOffset(int index) {
1221
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
1222
}
1223
1224
private static final int get(int[] receiver, int index, VarHandle varHandle) {
1225
receiver.getClass();
1226
boundsCheck(receiver.length, index);
1227
return _unsafe.getInt(receiver, computeOffset(index));
1228
}
1229
1230
private static final void set(int[] receiver, int index, int value, VarHandle varHandle) {
1231
receiver.getClass();
1232
boundsCheck(receiver.length, index);
1233
_unsafe.putInt(receiver, computeOffset(index), value);
1234
}
1235
1236
private static final int getVolatile(int[] receiver, int index, VarHandle varHandle) {
1237
receiver.getClass();
1238
boundsCheck(receiver.length, index);
1239
return _unsafe.getIntVolatile(receiver, computeOffset(index));
1240
}
1241
1242
private static final void setVolatile(int[] receiver, int index, int value, VarHandle varHandle) {
1243
receiver.getClass();
1244
boundsCheck(receiver.length, index);
1245
_unsafe.putIntVolatile(receiver, computeOffset(index), value);
1246
}
1247
1248
private static final int getOpaque(int[] receiver, int index, VarHandle varHandle) {
1249
receiver.getClass();
1250
boundsCheck(receiver.length, index);
1251
return _unsafe.getIntOpaque(receiver, computeOffset(index));
1252
}
1253
1254
private static final void setOpaque(int[] receiver, int index, int value, VarHandle varHandle) {
1255
receiver.getClass();
1256
boundsCheck(receiver.length, index);
1257
_unsafe.putIntOpaque(receiver, computeOffset(index), value);
1258
}
1259
1260
private static final int getAcquire(int[] receiver, int index, VarHandle varHandle) {
1261
receiver.getClass();
1262
boundsCheck(receiver.length, index);
1263
return _unsafe.getIntAcquire(receiver, computeOffset(index));
1264
}
1265
1266
private static final void setRelease(int[] receiver, int index, int value, VarHandle varHandle) {
1267
receiver.getClass();
1268
boundsCheck(receiver.length, index);
1269
_unsafe.putIntRelease(receiver, computeOffset(index), value);
1270
}
1271
1272
private static final boolean compareAndSet(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1273
receiver.getClass();
1274
boundsCheck(receiver.length, index);
1275
/*[IF Sidecar19-SE-OpenJ9]*/
1276
return _unsafe.compareAndSetInt(receiver, computeOffset(index), testValue, newValue);
1277
/*[ELSE]
1278
return _unsafe.compareAndSwapInt(receiver, computeOffset(index), testValue, newValue);
1279
/*[ENDIF]*/
1280
}
1281
1282
private static final int compareAndExchange(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1283
receiver.getClass();
1284
boundsCheck(receiver.length, index);
1285
/*[IF Sidecar19-SE-OpenJ9]*/
1286
return _unsafe.compareAndExchangeInt(receiver, computeOffset(index), testValue, newValue);
1287
/*[ELSE]
1288
return _unsafe.compareAndExchangeIntVolatile(receiver, computeOffset(index), testValue, newValue);
1289
/*[ENDIF]*/
1290
}
1291
1292
private static final int compareAndExchangeAcquire(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1293
receiver.getClass();
1294
boundsCheck(receiver.length, index);
1295
return _unsafe.compareAndExchangeIntAcquire(receiver, computeOffset(index), testValue, newValue);
1296
}
1297
1298
private static final int compareAndExchangeRelease(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1299
receiver.getClass();
1300
boundsCheck(receiver.length, index);
1301
return _unsafe.compareAndExchangeIntRelease(receiver, computeOffset(index), testValue, newValue);
1302
}
1303
1304
private static final boolean weakCompareAndSet(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1305
receiver.getClass();
1306
boundsCheck(receiver.length, index);
1307
/*[IF Sidecar19-SE-OpenJ9]*/
1308
return _unsafe.weakCompareAndSetIntPlain(receiver, computeOffset(index), testValue, newValue);
1309
/*[ELSE]
1310
return _unsafe.weakCompareAndSwapInt(receiver, computeOffset(index), testValue, newValue);
1311
/*[ENDIF]*/
1312
}
1313
1314
private static final boolean weakCompareAndSetAcquire(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1315
receiver.getClass();
1316
boundsCheck(receiver.length, index);
1317
/*[IF Sidecar19-SE-OpenJ9]*/
1318
return _unsafe.weakCompareAndSetIntAcquire(receiver, computeOffset(index), testValue, newValue);
1319
/*[ELSE]
1320
return _unsafe.weakCompareAndSwapIntAcquire(receiver, computeOffset(index), testValue, newValue);
1321
/*[ENDIF]*/
1322
}
1323
1324
private static final boolean weakCompareAndSetRelease(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1325
receiver.getClass();
1326
boundsCheck(receiver.length, index);
1327
/*[IF Sidecar19-SE-OpenJ9]*/
1328
return _unsafe.weakCompareAndSetIntRelease(receiver, computeOffset(index), testValue, newValue);
1329
/*[ELSE]
1330
return _unsafe.weakCompareAndSwapIntRelease(receiver, computeOffset(index), testValue, newValue);
1331
/*[ENDIF]*/
1332
}
1333
1334
private static final boolean weakCompareAndSetPlain(int[] receiver, int index, int testValue, int newValue, VarHandle varHandle) {
1335
receiver.getClass();
1336
boundsCheck(receiver.length, index);
1337
/*[IF Sidecar19-SE-OpenJ9]*/
1338
return _unsafe.weakCompareAndSetIntPlain(receiver, computeOffset(index), testValue, newValue);
1339
/*[ELSE]
1340
return _unsafe.weakCompareAndSwapInt(receiver, computeOffset(index), testValue, newValue);
1341
/*[ENDIF]*/
1342
}
1343
1344
private static final int getAndSet(int[] receiver, int index, int value, VarHandle varHandle) {
1345
receiver.getClass();
1346
boundsCheck(receiver.length, index);
1347
return _unsafe.getAndSetInt(receiver, computeOffset(index), value);
1348
}
1349
1350
private static final int getAndSetAcquire(int[] receiver, int index, int value, VarHandle varHandle) {
1351
receiver.getClass();
1352
boundsCheck(receiver.length, index);
1353
return _unsafe.getAndSetIntAcquire(receiver, computeOffset(index), value);
1354
}
1355
1356
private static final int getAndSetRelease(int[] receiver, int index, int value, VarHandle varHandle) {
1357
receiver.getClass();
1358
boundsCheck(receiver.length, index);
1359
return _unsafe.getAndSetIntRelease(receiver, computeOffset(index), value);
1360
}
1361
1362
private static final int getAndAdd(int[] receiver, int index, int value, VarHandle varHandle) {
1363
receiver.getClass();
1364
boundsCheck(receiver.length, index);
1365
return _unsafe.getAndAddInt(receiver, computeOffset(index), value);
1366
}
1367
1368
private static final int getAndAddAcquire(int[] receiver, int index, int value, VarHandle varHandle) {
1369
receiver.getClass();
1370
boundsCheck(receiver.length, index);
1371
return _unsafe.getAndAddIntAcquire(receiver, computeOffset(index), value);
1372
}
1373
1374
private static final int getAndAddRelease(int[] receiver, int index, int value, VarHandle varHandle) {
1375
receiver.getClass();
1376
boundsCheck(receiver.length, index);
1377
return _unsafe.getAndAddIntRelease(receiver, computeOffset(index), value);
1378
}
1379
1380
private static final int getAndBitwiseAnd(int[] receiver, int index, int value, VarHandle varHandle) {
1381
receiver.getClass();
1382
boundsCheck(receiver.length, index);
1383
return _unsafe.getAndBitwiseAndInt(receiver, computeOffset(index), value);
1384
}
1385
1386
private static final int getAndBitwiseAndAcquire(int[] receiver, int index, int value, VarHandle varHandle) {
1387
receiver.getClass();
1388
boundsCheck(receiver.length, index);
1389
return _unsafe.getAndBitwiseAndIntAcquire(receiver, computeOffset(index), value);
1390
}
1391
1392
private static final int getAndBitwiseAndRelease(int[] receiver, int index, int value, VarHandle varHandle) {
1393
receiver.getClass();
1394
boundsCheck(receiver.length, index);
1395
return _unsafe.getAndBitwiseAndIntRelease(receiver, computeOffset(index), value);
1396
}
1397
1398
private static final int getAndBitwiseOr(int[] receiver, int index, int value, VarHandle varHandle) {
1399
receiver.getClass();
1400
boundsCheck(receiver.length, index);
1401
return _unsafe.getAndBitwiseOrInt(receiver, computeOffset(index), value);
1402
}
1403
1404
private static final int getAndBitwiseOrAcquire(int[] receiver, int index, int value, VarHandle varHandle) {
1405
receiver.getClass();
1406
boundsCheck(receiver.length, index);
1407
return _unsafe.getAndBitwiseOrIntAcquire(receiver, computeOffset(index), value);
1408
}
1409
1410
private static final int getAndBitwiseOrRelease(int[] receiver, int index, int value, VarHandle varHandle) {
1411
receiver.getClass();
1412
boundsCheck(receiver.length, index);
1413
return _unsafe.getAndBitwiseOrIntRelease(receiver, computeOffset(index), value);
1414
}
1415
1416
private static final int getAndBitwiseXor(int[] receiver, int index, int value, VarHandle varHandle) {
1417
receiver.getClass();
1418
boundsCheck(receiver.length, index);
1419
return _unsafe.getAndBitwiseXorInt(receiver, computeOffset(index), value);
1420
}
1421
1422
private static final int getAndBitwiseXorAcquire(int[] receiver, int index, int value, VarHandle varHandle) {
1423
receiver.getClass();
1424
boundsCheck(receiver.length, index);
1425
return _unsafe.getAndBitwiseXorIntAcquire(receiver, computeOffset(index), value);
1426
}
1427
1428
private static final int getAndBitwiseXorRelease(int[] receiver, int index, int value, VarHandle varHandle) {
1429
receiver.getClass();
1430
boundsCheck(receiver.length, index);
1431
return _unsafe.getAndBitwiseXorIntRelease(receiver, computeOffset(index), value);
1432
}
1433
}
1434
1435
static final class OpLong extends ArrayVarHandleOperations {
1436
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(long[].class);
1437
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(long[].class);
1438
1439
private static final long computeOffset(int index) {
1440
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
1441
}
1442
1443
private static final long get(long[] receiver, int index, VarHandle varHandle) {
1444
receiver.getClass();
1445
boundsCheck(receiver.length, index);
1446
return _unsafe.getLong(receiver, computeOffset(index));
1447
}
1448
1449
private static final void set(long[] receiver, int index, long value, VarHandle varHandle) {
1450
receiver.getClass();
1451
boundsCheck(receiver.length, index);
1452
_unsafe.putLong(receiver, computeOffset(index), value);
1453
}
1454
1455
private static final long getVolatile(long[] receiver, int index, VarHandle varHandle) {
1456
receiver.getClass();
1457
boundsCheck(receiver.length, index);
1458
return _unsafe.getLongVolatile(receiver, computeOffset(index));
1459
}
1460
1461
private static final void setVolatile(long[] receiver, int index, long value, VarHandle varHandle) {
1462
receiver.getClass();
1463
boundsCheck(receiver.length, index);
1464
_unsafe.putLongVolatile(receiver, computeOffset(index), value);
1465
}
1466
1467
private static final long getOpaque(long[] receiver, int index, VarHandle varHandle) {
1468
receiver.getClass();
1469
boundsCheck(receiver.length, index);
1470
return _unsafe.getLongOpaque(receiver, computeOffset(index));
1471
}
1472
1473
private static final void setOpaque(long[] receiver, int index, long value, VarHandle varHandle) {
1474
receiver.getClass();
1475
boundsCheck(receiver.length, index);
1476
_unsafe.putLongOpaque(receiver, computeOffset(index), value);
1477
}
1478
1479
private static final long getAcquire(long[] receiver, int index, VarHandle varHandle) {
1480
receiver.getClass();
1481
boundsCheck(receiver.length, index);
1482
return _unsafe.getLongAcquire(receiver, computeOffset(index));
1483
}
1484
1485
private static final void setRelease(long[] receiver, int index, long value, VarHandle varHandle) {
1486
receiver.getClass();
1487
boundsCheck(receiver.length, index);
1488
_unsafe.putLongRelease(receiver, computeOffset(index), value);
1489
}
1490
1491
private static final boolean compareAndSet(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1492
receiver.getClass();
1493
boundsCheck(receiver.length, index);
1494
/*[IF Sidecar19-SE-OpenJ9]*/
1495
return _unsafe.compareAndSetLong(receiver, computeOffset(index), testValue, newValue);
1496
/*[ELSE]
1497
return _unsafe.compareAndSwapLong(receiver, computeOffset(index), testValue, newValue);
1498
/*[ENDIF]*/
1499
}
1500
1501
private static final long compareAndExchange(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1502
receiver.getClass();
1503
boundsCheck(receiver.length, index);
1504
/*[IF Sidecar19-SE-OpenJ9]*/
1505
return _unsafe.compareAndExchangeLong(receiver, computeOffset(index), testValue, newValue);
1506
/*[ELSE]
1507
return _unsafe.compareAndExchangeLongVolatile(receiver, computeOffset(index), testValue, newValue);
1508
/*[ENDIF]*/
1509
}
1510
1511
private static final long compareAndExchangeAcquire(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1512
receiver.getClass();
1513
boundsCheck(receiver.length, index);
1514
return _unsafe.compareAndExchangeLongAcquire(receiver, computeOffset(index), testValue, newValue);
1515
}
1516
1517
private static final long compareAndExchangeRelease(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1518
receiver.getClass();
1519
boundsCheck(receiver.length, index);
1520
return _unsafe.compareAndExchangeLongRelease(receiver, computeOffset(index), testValue, newValue);
1521
}
1522
1523
private static final boolean weakCompareAndSet(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1524
receiver.getClass();
1525
boundsCheck(receiver.length, index);
1526
/*[IF Sidecar19-SE-OpenJ9]*/
1527
return _unsafe.weakCompareAndSetLongPlain(receiver, computeOffset(index), testValue, newValue);
1528
/*[ELSE]
1529
return _unsafe.weakCompareAndSwapLong(receiver, computeOffset(index), testValue, newValue);
1530
/*[ENDIF]*/
1531
}
1532
1533
private static final boolean weakCompareAndSetAcquire(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1534
receiver.getClass();
1535
boundsCheck(receiver.length, index);
1536
/*[IF Sidecar19-SE-OpenJ9]*/
1537
return _unsafe.weakCompareAndSetLongAcquire(receiver, computeOffset(index), testValue, newValue);
1538
/*[ELSE]
1539
return _unsafe.weakCompareAndSwapLongAcquire(receiver, computeOffset(index), testValue, newValue);
1540
/*[ENDIF]*/
1541
}
1542
1543
private static final boolean weakCompareAndSetRelease(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1544
receiver.getClass();
1545
boundsCheck(receiver.length, index);
1546
/*[IF Sidecar19-SE-OpenJ9]*/
1547
return _unsafe.weakCompareAndSetLongRelease(receiver, computeOffset(index), testValue, newValue);
1548
/*[ELSE]
1549
return _unsafe.weakCompareAndSwapLongRelease(receiver, computeOffset(index), testValue, newValue);
1550
/*[ENDIF]*/
1551
}
1552
1553
private static final boolean weakCompareAndSetPlain(long[] receiver, int index, long testValue, long newValue, VarHandle varHandle) {
1554
receiver.getClass();
1555
boundsCheck(receiver.length, index);
1556
/*[IF Sidecar19-SE-OpenJ9]*/
1557
return _unsafe.weakCompareAndSetLongPlain(receiver, computeOffset(index), testValue, newValue);
1558
/*[ELSE]
1559
return _unsafe.weakCompareAndSwapLong(receiver, computeOffset(index), testValue, newValue);
1560
/*[ENDIF]*/
1561
}
1562
1563
private static final long getAndSet(long[] receiver, int index, long value, VarHandle varHandle) {
1564
receiver.getClass();
1565
boundsCheck(receiver.length, index);
1566
return _unsafe.getAndSetLong(receiver, computeOffset(index), value);
1567
}
1568
1569
private static final long getAndSetAcquire(long[] receiver, int index, long value, VarHandle varHandle) {
1570
receiver.getClass();
1571
boundsCheck(receiver.length, index);
1572
return _unsafe.getAndSetLongAcquire(receiver, computeOffset(index), value);
1573
}
1574
1575
private static final long getAndSetRelease(long[] receiver, int index, long value, VarHandle varHandle) {
1576
receiver.getClass();
1577
boundsCheck(receiver.length, index);
1578
return _unsafe.getAndSetLongRelease(receiver, computeOffset(index), value);
1579
}
1580
1581
private static final long getAndAdd(long[] receiver, int index, long value, VarHandle varHandle) {
1582
receiver.getClass();
1583
boundsCheck(receiver.length, index);
1584
return _unsafe.getAndAddLong(receiver, computeOffset(index), value);
1585
}
1586
1587
private static final long getAndAddAcquire(long[] receiver, int index, long value, VarHandle varHandle) {
1588
receiver.getClass();
1589
boundsCheck(receiver.length, index);
1590
return _unsafe.getAndAddLongAcquire(receiver, computeOffset(index), value);
1591
}
1592
1593
private static final long getAndAddRelease(long[] receiver, int index, long value, VarHandle varHandle) {
1594
receiver.getClass();
1595
boundsCheck(receiver.length, index);
1596
return _unsafe.getAndAddLongRelease(receiver, computeOffset(index), value);
1597
}
1598
1599
private static final long getAndBitwiseAnd(long[] receiver, int index, long value, VarHandle varHandle) {
1600
receiver.getClass();
1601
boundsCheck(receiver.length, index);
1602
return _unsafe.getAndBitwiseAndLong(receiver, computeOffset(index), value);
1603
}
1604
1605
private static final long getAndBitwiseAndAcquire(long[] receiver, int index, long value, VarHandle varHandle) {
1606
receiver.getClass();
1607
boundsCheck(receiver.length, index);
1608
return _unsafe.getAndBitwiseAndLongAcquire(receiver, computeOffset(index), value);
1609
}
1610
1611
private static final long getAndBitwiseAndRelease(long[] receiver, int index, long value, VarHandle varHandle) {
1612
receiver.getClass();
1613
boundsCheck(receiver.length, index);
1614
return _unsafe.getAndBitwiseAndLongRelease(receiver, computeOffset(index), value);
1615
}
1616
1617
private static final long getAndBitwiseOr(long[] receiver, int index, long value, VarHandle varHandle) {
1618
receiver.getClass();
1619
boundsCheck(receiver.length, index);
1620
return _unsafe.getAndBitwiseOrLong(receiver, computeOffset(index), value);
1621
}
1622
1623
private static final long getAndBitwiseOrAcquire(long[] receiver, int index, long value, VarHandle varHandle) {
1624
receiver.getClass();
1625
boundsCheck(receiver.length, index);
1626
return _unsafe.getAndBitwiseOrLongAcquire(receiver, computeOffset(index), value);
1627
}
1628
1629
private static final long getAndBitwiseOrRelease(long[] receiver, int index, long value, VarHandle varHandle) {
1630
receiver.getClass();
1631
boundsCheck(receiver.length, index);
1632
return _unsafe.getAndBitwiseOrLongRelease(receiver, computeOffset(index), value);
1633
}
1634
1635
private static final long getAndBitwiseXor(long[] receiver, int index, long value, VarHandle varHandle) {
1636
receiver.getClass();
1637
boundsCheck(receiver.length, index);
1638
return _unsafe.getAndBitwiseXorLong(receiver, computeOffset(index), value);
1639
}
1640
1641
private static final long getAndBitwiseXorAcquire(long[] receiver, int index, long value, VarHandle varHandle) {
1642
receiver.getClass();
1643
boundsCheck(receiver.length, index);
1644
return _unsafe.getAndBitwiseXorLongAcquire(receiver, computeOffset(index), value);
1645
}
1646
1647
private static final long getAndBitwiseXorRelease(long[] receiver, int index, long value, VarHandle varHandle) {
1648
receiver.getClass();
1649
boundsCheck(receiver.length, index);
1650
return _unsafe.getAndBitwiseXorLongRelease(receiver, computeOffset(index), value);
1651
}
1652
}
1653
1654
static final class OpShort extends ArrayVarHandleOperations {
1655
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(short[].class);
1656
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(short[].class);
1657
1658
private static final long computeOffset(int index) {
1659
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
1660
}
1661
1662
private static final short get(short[] receiver, int index, VarHandle varHandle) {
1663
receiver.getClass();
1664
boundsCheck(receiver.length, index);
1665
return _unsafe.getShort(receiver, computeOffset(index));
1666
}
1667
1668
private static final void set(short[] receiver, int index, short value, VarHandle varHandle) {
1669
receiver.getClass();
1670
boundsCheck(receiver.length, index);
1671
_unsafe.putShort(receiver, computeOffset(index), value);
1672
}
1673
1674
private static final short getVolatile(short[] receiver, int index, VarHandle varHandle) {
1675
receiver.getClass();
1676
boundsCheck(receiver.length, index);
1677
return _unsafe.getShortVolatile(receiver, computeOffset(index));
1678
}
1679
1680
private static final void setVolatile(short[] receiver, int index, short value, VarHandle varHandle) {
1681
receiver.getClass();
1682
boundsCheck(receiver.length, index);
1683
_unsafe.putShortVolatile(receiver, computeOffset(index), value);
1684
}
1685
1686
private static final short getOpaque(short[] receiver, int index, VarHandle varHandle) {
1687
receiver.getClass();
1688
boundsCheck(receiver.length, index);
1689
return _unsafe.getShortOpaque(receiver, computeOffset(index));
1690
}
1691
1692
private static final void setOpaque(short[] receiver, int index, short value, VarHandle varHandle) {
1693
receiver.getClass();
1694
boundsCheck(receiver.length, index);
1695
_unsafe.putShortOpaque(receiver, computeOffset(index), value);
1696
}
1697
1698
private static final short getAcquire(short[] receiver, int index, VarHandle varHandle) {
1699
receiver.getClass();
1700
boundsCheck(receiver.length, index);
1701
return _unsafe.getShortAcquire(receiver, computeOffset(index));
1702
}
1703
1704
private static final void setRelease(short[] receiver, int index, short value, VarHandle varHandle) {
1705
receiver.getClass();
1706
boundsCheck(receiver.length, index);
1707
_unsafe.putShortRelease(receiver, computeOffset(index), value);
1708
}
1709
1710
private static final boolean compareAndSet(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1711
receiver.getClass();
1712
boundsCheck(receiver.length, index);
1713
/*[IF Sidecar19-SE-OpenJ9]*/
1714
return _unsafe.compareAndSetShort(receiver, computeOffset(index), testValue, newValue);
1715
/*[ELSE]
1716
return _unsafe.compareAndSwapShort(receiver, computeOffset(index), testValue, newValue);
1717
/*[ENDIF]*/
1718
}
1719
1720
private static final short compareAndExchange(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1721
receiver.getClass();
1722
boundsCheck(receiver.length, index);
1723
/*[IF Sidecar19-SE-OpenJ9]*/
1724
return _unsafe.compareAndExchangeShort(receiver, computeOffset(index), testValue, newValue);
1725
/*[ELSE]
1726
return _unsafe.compareAndExchangeShortVolatile(receiver, computeOffset(index), testValue, newValue);
1727
/*[ENDIF]*/
1728
}
1729
1730
private static final short compareAndExchangeAcquire(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1731
receiver.getClass();
1732
boundsCheck(receiver.length, index);
1733
return _unsafe.compareAndExchangeShortAcquire(receiver, computeOffset(index), testValue, newValue);
1734
}
1735
1736
private static final short compareAndExchangeRelease(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1737
receiver.getClass();
1738
boundsCheck(receiver.length, index);
1739
return _unsafe.compareAndExchangeShortRelease(receiver, computeOffset(index), testValue, newValue);
1740
}
1741
1742
private static final boolean weakCompareAndSet(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1743
receiver.getClass();
1744
boundsCheck(receiver.length, index);
1745
/*[IF Sidecar19-SE-OpenJ9]*/
1746
return _unsafe.weakCompareAndSetShortPlain(receiver, computeOffset(index), testValue, newValue);
1747
/*[ELSE]
1748
return _unsafe.weakCompareAndSwapShort(receiver, computeOffset(index), testValue, newValue);
1749
/*[ENDIF]*/
1750
}
1751
1752
private static final boolean weakCompareAndSetAcquire(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1753
receiver.getClass();
1754
boundsCheck(receiver.length, index);
1755
/*[IF Sidecar19-SE-OpenJ9]*/
1756
return _unsafe.weakCompareAndSetShortAcquire(receiver, computeOffset(index), testValue, newValue);
1757
/*[ELSE]
1758
return _unsafe.weakCompareAndSwapShortAcquire(receiver, computeOffset(index), testValue, newValue);
1759
/*[ENDIF]*/
1760
}
1761
1762
private static final boolean weakCompareAndSetRelease(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1763
receiver.getClass();
1764
boundsCheck(receiver.length, index);
1765
/*[IF Sidecar19-SE-OpenJ9]*/
1766
return _unsafe.weakCompareAndSetShortRelease(receiver, computeOffset(index), testValue, newValue);
1767
/*[ELSE]
1768
return _unsafe.weakCompareAndSwapShortRelease(receiver, computeOffset(index), testValue, newValue);
1769
/*[ENDIF]*/
1770
}
1771
1772
private static final boolean weakCompareAndSetPlain(short[] receiver, int index, short testValue, short newValue, VarHandle varHandle) {
1773
receiver.getClass();
1774
boundsCheck(receiver.length, index);
1775
/*[IF Sidecar19-SE-OpenJ9]*/
1776
return _unsafe.weakCompareAndSetShortPlain(receiver, computeOffset(index), testValue, newValue);
1777
/*[ELSE]
1778
return _unsafe.weakCompareAndSwapShort(receiver, computeOffset(index), testValue, newValue);
1779
/*[ENDIF]*/
1780
}
1781
1782
private static final short getAndSet(short[] receiver, int index, short value, VarHandle varHandle) {
1783
receiver.getClass();
1784
boundsCheck(receiver.length, index);
1785
return _unsafe.getAndSetShort(receiver, computeOffset(index), value);
1786
}
1787
1788
private static final short getAndSetAcquire(short[] receiver, int index, short value, VarHandle varHandle) {
1789
receiver.getClass();
1790
boundsCheck(receiver.length, index);
1791
return _unsafe.getAndSetShortAcquire(receiver, computeOffset(index), value);
1792
}
1793
1794
private static final short getAndSetRelease(short[] receiver, int index, short value, VarHandle varHandle) {
1795
receiver.getClass();
1796
boundsCheck(receiver.length, index);
1797
return _unsafe.getAndSetShortRelease(receiver, computeOffset(index), value);
1798
}
1799
1800
private static final short getAndAdd(short[] receiver, int index, short value, VarHandle varHandle) {
1801
receiver.getClass();
1802
boundsCheck(receiver.length, index);
1803
return _unsafe.getAndAddShort(receiver, computeOffset(index), value);
1804
}
1805
1806
private static final short getAndAddAcquire(short[] receiver, int index, short value, VarHandle varHandle) {
1807
receiver.getClass();
1808
boundsCheck(receiver.length, index);
1809
return _unsafe.getAndAddShortAcquire(receiver, computeOffset(index), value);
1810
}
1811
1812
private static final short getAndAddRelease(short[] receiver, int index, short value, VarHandle varHandle) {
1813
receiver.getClass();
1814
boundsCheck(receiver.length, index);
1815
return _unsafe.getAndAddShortRelease(receiver, computeOffset(index), value);
1816
}
1817
1818
private static final short getAndBitwiseAnd(short[] receiver, int index, short value, VarHandle varHandle) {
1819
receiver.getClass();
1820
boundsCheck(receiver.length, index);
1821
return _unsafe.getAndBitwiseAndShort(receiver, computeOffset(index), value);
1822
}
1823
1824
private static final short getAndBitwiseAndAcquire(short[] receiver, int index, short value, VarHandle varHandle) {
1825
receiver.getClass();
1826
boundsCheck(receiver.length, index);
1827
return _unsafe.getAndBitwiseAndShortAcquire(receiver, computeOffset(index), value);
1828
}
1829
1830
private static final short getAndBitwiseAndRelease(short[] receiver, int index, short value, VarHandle varHandle) {
1831
receiver.getClass();
1832
boundsCheck(receiver.length, index);
1833
return _unsafe.getAndBitwiseAndShortRelease(receiver, computeOffset(index), value);
1834
}
1835
1836
private static final short getAndBitwiseOr(short[] receiver, int index, short value, VarHandle varHandle) {
1837
receiver.getClass();
1838
boundsCheck(receiver.length, index);
1839
return _unsafe.getAndBitwiseOrShort(receiver, computeOffset(index), value);
1840
}
1841
1842
private static final short getAndBitwiseOrAcquire(short[] receiver, int index, short value, VarHandle varHandle) {
1843
receiver.getClass();
1844
boundsCheck(receiver.length, index);
1845
return _unsafe.getAndBitwiseOrShortAcquire(receiver, computeOffset(index), value);
1846
}
1847
1848
private static final short getAndBitwiseOrRelease(short[] receiver, int index, short value, VarHandle varHandle) {
1849
receiver.getClass();
1850
boundsCheck(receiver.length, index);
1851
return _unsafe.getAndBitwiseOrShortRelease(receiver, computeOffset(index), value);
1852
}
1853
1854
private static final short getAndBitwiseXor(short[] receiver, int index, short value, VarHandle varHandle) {
1855
receiver.getClass();
1856
boundsCheck(receiver.length, index);
1857
return _unsafe.getAndBitwiseXorShort(receiver, computeOffset(index), value);
1858
}
1859
1860
private static final short getAndBitwiseXorAcquire(short[] receiver, int index, short value, VarHandle varHandle) {
1861
receiver.getClass();
1862
boundsCheck(receiver.length, index);
1863
return _unsafe.getAndBitwiseXorShortAcquire(receiver, computeOffset(index), value);
1864
}
1865
1866
private static final short getAndBitwiseXorRelease(short[] receiver, int index, short value, VarHandle varHandle) {
1867
receiver.getClass();
1868
boundsCheck(receiver.length, index);
1869
return _unsafe.getAndBitwiseXorShortRelease(receiver, computeOffset(index), value);
1870
}
1871
}
1872
1873
static final class OpBoolean extends ArrayVarHandleOperations {
1874
private static final int BASE_OFFSET = _unsafe.arrayBaseOffset(boolean[].class);
1875
private static final int INDEX_SCALE = _unsafe.arrayIndexScale(boolean[].class);
1876
1877
private static final long computeOffset(int index) {
1878
return computeOffset(index, BASE_OFFSET, INDEX_SCALE);
1879
}
1880
1881
private static final boolean get(boolean[] receiver, int index, VarHandle varHandle) {
1882
receiver.getClass();
1883
boundsCheck(receiver.length, index);
1884
return _unsafe.getBoolean(receiver, computeOffset(index));
1885
}
1886
1887
private static final void set(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
1888
receiver.getClass();
1889
boundsCheck(receiver.length, index);
1890
_unsafe.putBoolean(receiver, computeOffset(index), value);
1891
}
1892
1893
private static final boolean getVolatile(boolean[] receiver, int index, VarHandle varHandle) {
1894
receiver.getClass();
1895
boundsCheck(receiver.length, index);
1896
return _unsafe.getBooleanVolatile(receiver, computeOffset(index));
1897
}
1898
1899
private static final void setVolatile(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
1900
receiver.getClass();
1901
boundsCheck(receiver.length, index);
1902
_unsafe.putBooleanVolatile(receiver, computeOffset(index), value);
1903
}
1904
1905
private static final boolean getOpaque(boolean[] receiver, int index, VarHandle varHandle) {
1906
receiver.getClass();
1907
boundsCheck(receiver.length, index);
1908
return _unsafe.getBooleanOpaque(receiver, computeOffset(index));
1909
}
1910
1911
private static final void setOpaque(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
1912
receiver.getClass();
1913
boundsCheck(receiver.length, index);
1914
_unsafe.putBooleanOpaque(receiver, computeOffset(index), value);
1915
}
1916
1917
private static final boolean getAcquire(boolean[] receiver, int index, VarHandle varHandle) {
1918
receiver.getClass();
1919
boundsCheck(receiver.length, index);
1920
return _unsafe.getBooleanAcquire(receiver, computeOffset(index));
1921
}
1922
1923
private static final void setRelease(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
1924
receiver.getClass();
1925
boundsCheck(receiver.length, index);
1926
_unsafe.putBooleanRelease(receiver, computeOffset(index), value);
1927
}
1928
1929
private static final boolean compareAndSet(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1930
receiver.getClass();
1931
boundsCheck(receiver.length, index);
1932
/*[IF Sidecar19-SE-OpenJ9]*/
1933
return _unsafe.compareAndSetBoolean(receiver, computeOffset(index), testValue, newValue);
1934
/*[ELSE]
1935
return _unsafe.compareAndSwapBoolean(receiver, computeOffset(index), testValue, newValue);
1936
/*[ENDIF]*/
1937
}
1938
1939
private static final boolean compareAndExchange(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1940
receiver.getClass();
1941
boundsCheck(receiver.length, index);
1942
/*[IF Sidecar19-SE-OpenJ9]*/
1943
return _unsafe.compareAndExchangeBoolean(receiver, computeOffset(index), testValue, newValue);
1944
/*[ELSE]
1945
return _unsafe.compareAndExchangeBooleanVolatile(receiver, computeOffset(index), testValue, newValue);
1946
/*[ENDIF]*/
1947
}
1948
1949
private static final boolean compareAndExchangeAcquire(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1950
receiver.getClass();
1951
boundsCheck(receiver.length, index);
1952
return _unsafe.compareAndExchangeBooleanAcquire(receiver, computeOffset(index), testValue, newValue);
1953
}
1954
1955
private static final boolean compareAndExchangeRelease(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1956
receiver.getClass();
1957
boundsCheck(receiver.length, index);
1958
return _unsafe.compareAndExchangeBooleanRelease(receiver, computeOffset(index), testValue, newValue);
1959
}
1960
1961
private static final boolean weakCompareAndSet(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1962
receiver.getClass();
1963
boundsCheck(receiver.length, index);
1964
/*[IF Sidecar19-SE-OpenJ9]*/
1965
return _unsafe.weakCompareAndSetBooleanPlain(receiver, computeOffset(index), testValue, newValue);
1966
/*[ELSE]
1967
return _unsafe.weakCompareAndSwapBoolean(receiver, computeOffset(index), testValue, newValue);
1968
/*[ENDIF]*/
1969
}
1970
1971
private static final boolean weakCompareAndSetAcquire(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1972
receiver.getClass();
1973
boundsCheck(receiver.length, index);
1974
/*[IF Sidecar19-SE-OpenJ9]*/
1975
return _unsafe.weakCompareAndSetBooleanAcquire(receiver, computeOffset(index), testValue, newValue);
1976
/*[ELSE]
1977
return _unsafe.weakCompareAndSwapBooleanAcquire(receiver, computeOffset(index), testValue, newValue);
1978
/*[ENDIF]*/
1979
}
1980
1981
private static final boolean weakCompareAndSetRelease(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1982
receiver.getClass();
1983
boundsCheck(receiver.length, index);
1984
/*[IF Sidecar19-SE-OpenJ9]*/
1985
return _unsafe.weakCompareAndSetBooleanRelease(receiver, computeOffset(index), testValue, newValue);
1986
/*[ELSE]
1987
return _unsafe.weakCompareAndSwapBooleanRelease(receiver, computeOffset(index), testValue, newValue);
1988
/*[ENDIF]*/
1989
}
1990
1991
private static final boolean weakCompareAndSetPlain(boolean[] receiver, int index, boolean testValue, boolean newValue, VarHandle varHandle) {
1992
receiver.getClass();
1993
boundsCheck(receiver.length, index);
1994
/*[IF Sidecar19-SE-OpenJ9]*/
1995
return _unsafe.weakCompareAndSetBooleanPlain(receiver, computeOffset(index), testValue, newValue);
1996
/*[ELSE]
1997
return _unsafe.weakCompareAndSwapBoolean(receiver, computeOffset(index), testValue, newValue);
1998
/*[ENDIF]*/
1999
}
2000
2001
private static final boolean getAndSet(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2002
receiver.getClass();
2003
boundsCheck(receiver.length, index);
2004
return _unsafe.getAndSetBoolean(receiver, computeOffset(index), value);
2005
}
2006
2007
private static final boolean getAndSetAcquire(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2008
receiver.getClass();
2009
boundsCheck(receiver.length, index);
2010
return _unsafe.getAndSetBooleanAcquire(receiver, computeOffset(index), value);
2011
}
2012
2013
private static final boolean getAndSetRelease(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2014
receiver.getClass();
2015
boundsCheck(receiver.length, index);
2016
return _unsafe.getAndSetBooleanRelease(receiver, computeOffset(index), value);
2017
}
2018
2019
private static final boolean getAndAdd(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2020
throw operationNotSupported(varHandle);
2021
}
2022
2023
private static final boolean getAndAddAcquire(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2024
throw operationNotSupported(varHandle);
2025
}
2026
2027
private static final boolean getAndAddRelease(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2028
throw operationNotSupported(varHandle);
2029
}
2030
2031
private static final boolean getAndBitwiseAnd(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2032
receiver.getClass();
2033
boundsCheck(receiver.length, index);
2034
return _unsafe.getAndBitwiseAndBoolean(receiver, computeOffset(index), value);
2035
}
2036
2037
private static final boolean getAndBitwiseAndAcquire(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2038
receiver.getClass();
2039
boundsCheck(receiver.length, index);
2040
return _unsafe.getAndBitwiseAndBooleanAcquire(receiver, computeOffset(index), value);
2041
}
2042
2043
private static final boolean getAndBitwiseAndRelease(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2044
receiver.getClass();
2045
boundsCheck(receiver.length, index);
2046
return _unsafe.getAndBitwiseAndBooleanRelease(receiver, computeOffset(index), value);
2047
}
2048
2049
private static final boolean getAndBitwiseOr(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2050
receiver.getClass();
2051
boundsCheck(receiver.length, index);
2052
return _unsafe.getAndBitwiseOrBoolean(receiver, computeOffset(index), value);
2053
}
2054
2055
private static final boolean getAndBitwiseOrAcquire(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2056
receiver.getClass();
2057
boundsCheck(receiver.length, index);
2058
return _unsafe.getAndBitwiseOrBooleanAcquire(receiver, computeOffset(index), value);
2059
}
2060
2061
private static final boolean getAndBitwiseOrRelease(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2062
receiver.getClass();
2063
boundsCheck(receiver.length, index);
2064
return _unsafe.getAndBitwiseOrBooleanRelease(receiver, computeOffset(index), value);
2065
}
2066
2067
private static final boolean getAndBitwiseXor(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2068
receiver.getClass();
2069
boundsCheck(receiver.length, index);
2070
return _unsafe.getAndBitwiseXorBoolean(receiver, computeOffset(index), value);
2071
}
2072
2073
private static final boolean getAndBitwiseXorAcquire(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2074
receiver.getClass();
2075
boundsCheck(receiver.length, index);
2076
return _unsafe.getAndBitwiseXorBooleanAcquire(receiver, computeOffset(index), value);
2077
}
2078
2079
private static final boolean getAndBitwiseXorRelease(boolean[] receiver, int index, boolean value, VarHandle varHandle) {
2080
receiver.getClass();
2081
boundsCheck(receiver.length, index);
2082
return _unsafe.getAndBitwiseXorBooleanRelease(receiver, computeOffset(index), value);
2083
}
2084
}
2085
}
2086
}
2087
2088