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/InstanceFieldVarHandle.java
12521 views
1
/*[INCLUDE-IF Sidecar19-SE & !OPENJDK_METHODHANDLES]*/
2
/*******************************************************************************
3
* Copyright (c) 2016, 2020 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.InstanceFieldVarHandle.InstanceFieldVarHandleOperations.*;
26
import static java.lang.invoke.MethodType.methodType;
27
28
import java.lang.reflect.Field;
29
30
/**
31
* {@link VarHandle} subclass for {@link VarHandle} instances for non-static field.
32
*/
33
final class InstanceFieldVarHandle extends FieldVarHandle {
34
/**
35
* Populates a MethodHandle[] corresponding to the provided type.
36
*
37
* @param type The type to create MethodHandles for.
38
* @return The populated MethodHandle[].
39
*/
40
static final MethodHandle[] populateMHs(Class<?> receiverType, final Class<?> initFieldType) {
41
Class<? extends InstanceFieldVarHandleOperations> operationsClass = null;
42
Class<?> fieldType = initFieldType;
43
44
if (!initFieldType.isPrimitive()) {
45
fieldType = Object.class;
46
operationsClass = OpObject.class;
47
} else if (int.class == initFieldType) {
48
operationsClass = OpInt.class;
49
} else if (long.class == initFieldType) {
50
operationsClass = OpLong.class;
51
} else if (boolean.class == initFieldType) {
52
operationsClass = OpBoolean.class;
53
} else if (byte.class == initFieldType) {
54
operationsClass = OpByte.class;
55
} else if (char.class == initFieldType) {
56
operationsClass = OpChar.class;
57
} else if (double.class == initFieldType) {
58
operationsClass = OpDouble.class;
59
} else if (float.class == initFieldType) {
60
operationsClass = OpFloat.class;
61
} else if (short.class == initFieldType) {
62
operationsClass = OpShort.class;
63
} else if (void.class == initFieldType) {
64
throw new NoSuchFieldError();
65
} else {
66
/*[MSG "K0626", "Unable to handle type {0}."]*/
67
throw new InternalError(com.ibm.oti.util.Msg.getString("K0626", initFieldType)); //$NON-NLS-1$
68
}
69
70
MethodType getter = methodType(fieldType, Object.class, VarHandle.class);
71
MethodType setter = methodType(void.class, Object.class, fieldType, VarHandle.class);
72
MethodType compareAndSet = methodType(boolean.class, Object.class, fieldType, fieldType, VarHandle.class);
73
MethodType compareAndExchange = compareAndSet.changeReturnType(fieldType);
74
MethodType getAndSet = setter.changeReturnType(fieldType);
75
MethodType[] lookupTypes = populateMTs(getter, setter, compareAndSet, compareAndExchange, getAndSet);
76
77
MethodType exactGetter = methodType(initFieldType, receiverType, VarHandle.class);
78
MethodType exactSetter = methodType(void.class, receiverType, initFieldType, VarHandle.class);
79
MethodType exactCompareAndSet = methodType(boolean.class, receiverType, initFieldType, initFieldType, VarHandle.class);
80
MethodType exactCompareAndExchange = exactCompareAndSet.changeReturnType(initFieldType);
81
MethodType exactGetAndSet = exactSetter.changeReturnType(initFieldType);
82
MethodType[]exactTypes = populateMTs(exactGetter, exactSetter, exactCompareAndSet, exactCompareAndExchange, exactGetAndSet);
83
84
return populateMHs(operationsClass, lookupTypes, exactTypes);
85
}
86
87
/**
88
* Constructs a VarHandle to an instance field.
89
*
90
* @param lookupClass The class where we start the lookup of the field
91
* @param fieldName The field name
92
* @param fieldType The exact type of the field
93
* @param accessClass The class being used to look up the field
94
*/
95
InstanceFieldVarHandle(Class<?> lookupClass, String fieldName, Class<?> fieldType, Class<?> accessClass) {
96
super(lookupClass, fieldName, fieldType, accessClass, false, new Class<?>[] {lookupClass}, populateMHs(lookupClass, fieldType));
97
}
98
99
/**
100
* Construct a VarHandle to the instance field represented by the provided {@link java.lang.reflect.Field Field}.
101
*
102
* @param field The {@link java.lang.reflect.Field} to create a VarHandle for.
103
*/
104
InstanceFieldVarHandle(Field field, Class<?> lookupClass, Class<?> fieldType) {
105
super(field, false, new Class<?>[] {lookupClass}, populateMHs(lookupClass, fieldType));
106
}
107
108
/**
109
* Type specific methods used by VarHandle methods for non-static field.
110
*/
111
@SuppressWarnings("unused")
112
static class InstanceFieldVarHandleOperations extends VarHandleOperations {
113
static final class OpObject extends InstanceFieldVarHandleOperations {
114
private static final Object get(Object receiver, VarHandle varHandle) {
115
receiver.getClass();
116
return _unsafe.getObject(receiver, ((FieldVarHandle)varHandle).vmslot);
117
}
118
119
private static final void set(Object receiver, Object value, VarHandle varHandle) {
120
receiver.getClass();
121
_unsafe.putObject(receiver, ((FieldVarHandle)varHandle).vmslot, value);
122
}
123
124
private static final Object getVolatile(Object receiver, VarHandle varHandle) {
125
receiver.getClass();
126
return _unsafe.getObjectVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
127
}
128
129
private static final void setVolatile(Object receiver, Object value, VarHandle varHandle) {
130
receiver.getClass();
131
_unsafe.putObjectVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
132
}
133
134
private static final Object getOpaque(Object receiver, VarHandle varHandle) {
135
receiver.getClass();
136
return _unsafe.getObjectOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
137
}
138
139
private static final void setOpaque(Object receiver, Object value, VarHandle varHandle) {
140
receiver.getClass();
141
_unsafe.putObjectOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
142
}
143
144
private static final Object getAcquire(Object receiver, VarHandle varHandle) {
145
receiver.getClass();
146
return _unsafe.getObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
147
}
148
149
private static final void setRelease(Object receiver, Object value, VarHandle varHandle) {
150
receiver.getClass();
151
_unsafe.putObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
152
}
153
154
private static final boolean compareAndSet(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
155
receiver.getClass();
156
/*[IF Sidecar19-SE-OpenJ9]*/
157
return _unsafe.compareAndSetObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
158
/*[ELSE]
159
return _unsafe.compareAndSwapObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
160
/*[ENDIF]*/
161
}
162
163
private static final Object compareAndExchange(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
164
receiver.getClass();
165
/*[IF Sidecar19-SE-OpenJ9]*/
166
return _unsafe.compareAndExchangeObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
167
/*[ELSE]
168
return _unsafe.compareAndExchangeObjectVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
169
/*[ENDIF]*/
170
}
171
172
private static final Object compareAndExchangeAcquire(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
173
receiver.getClass();
174
return _unsafe.compareAndExchangeObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
175
}
176
177
private static final Object compareAndExchangeRelease(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
178
receiver.getClass();
179
return _unsafe.compareAndExchangeObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
180
}
181
182
private static final boolean weakCompareAndSet(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
183
receiver.getClass();
184
/*[IF Sidecar19-SE-OpenJ9]*/
185
return _unsafe.weakCompareAndSetObjectPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
186
/*[ELSE]
187
return _unsafe.weakCompareAndSwapObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
188
/*[ENDIF]*/
189
}
190
191
private static final boolean weakCompareAndSetAcquire(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
192
receiver.getClass();
193
/*[IF Sidecar19-SE-OpenJ9]*/
194
return _unsafe.weakCompareAndSetObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
195
/*[ELSE]
196
return _unsafe.weakCompareAndSwapObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
197
/*[ENDIF]*/
198
}
199
200
private static final boolean weakCompareAndSetRelease(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
201
receiver.getClass();
202
/*[IF Sidecar19-SE-OpenJ9]*/
203
return _unsafe.weakCompareAndSetObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
204
/*[ELSE]
205
return _unsafe.weakCompareAndSwapObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
206
/*[ENDIF]*/
207
}
208
209
private static final boolean weakCompareAndSetPlain(Object receiver, Object testValue, Object newValue, VarHandle varHandle) {
210
receiver.getClass();
211
/*[IF Sidecar19-SE-OpenJ9]*/
212
return _unsafe.weakCompareAndSetObjectPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
213
/*[ELSE]
214
return _unsafe.weakCompareAndSwapObject(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
215
/*[ENDIF]*/
216
}
217
218
private static final Object getAndSet(Object receiver, Object value, VarHandle varHandle) {
219
receiver.getClass();
220
return _unsafe.getAndSetObject(receiver, ((FieldVarHandle)varHandle).vmslot, value);
221
}
222
223
private static final Object getAndSetAcquire(Object receiver, Object value, VarHandle varHandle) {
224
receiver.getClass();
225
return _unsafe.getAndSetObjectAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
226
}
227
228
private static final Object getAndSetRelease(Object receiver, Object value, VarHandle varHandle) {
229
receiver.getClass();
230
return _unsafe.getAndSetObjectRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
231
}
232
233
private static final Object getAndAdd(Object receiver, Object value, VarHandle varHandle) {
234
throw operationNotSupported(varHandle);
235
}
236
237
private static final Object getAndAddAcquire(Object receiver, Object value, VarHandle varHandle) {
238
throw operationNotSupported(varHandle);
239
}
240
241
private static final Object getAndAddRelease(Object receiver, Object value, VarHandle varHandle) {
242
throw operationNotSupported(varHandle);
243
}
244
245
private static final Object getAndBitwiseAnd(Object receiver, Object value, VarHandle varHandle) {
246
throw operationNotSupported(varHandle);
247
}
248
249
private static final Object getAndBitwiseAndAcquire(Object receiver, Object value, VarHandle varHandle) {
250
throw operationNotSupported(varHandle);
251
}
252
253
private static final Object getAndBitwiseAndRelease(Object receiver, Object value, VarHandle varHandle) {
254
throw operationNotSupported(varHandle);
255
}
256
257
private static final Object getAndBitwiseOr(Object receiver, Object value, VarHandle varHandle) {
258
throw operationNotSupported(varHandle);
259
}
260
261
private static final Object getAndBitwiseOrAcquire(Object receiver, Object value, VarHandle varHandle) {
262
throw operationNotSupported(varHandle);
263
}
264
265
private static final Object getAndBitwiseOrRelease(Object receiver, Object value, VarHandle varHandle) {
266
throw operationNotSupported(varHandle);
267
}
268
269
private static final Object getAndBitwiseXor(Object receiver, Object value, VarHandle varHandle) {
270
throw operationNotSupported(varHandle);
271
}
272
273
private static final Object getAndBitwiseXorAcquire(Object receiver, Object value, VarHandle varHandle) {
274
throw operationNotSupported(varHandle);
275
}
276
277
private static final Object getAndBitwiseXorRelease(Object receiver, Object value, VarHandle varHandle) {
278
throw operationNotSupported(varHandle);
279
}
280
}
281
282
static final class OpByte extends InstanceFieldVarHandleOperations {
283
private static final byte get(Object receiver, VarHandle varHandle) {
284
receiver.getClass();
285
return _unsafe.getByte(receiver, ((FieldVarHandle)varHandle).vmslot);
286
}
287
288
private static final void set(Object receiver, byte value, VarHandle varHandle) {
289
receiver.getClass();
290
_unsafe.putByte(receiver, ((FieldVarHandle)varHandle).vmslot, value);
291
}
292
293
private static final byte getVolatile(Object receiver, VarHandle varHandle) {
294
receiver.getClass();
295
return _unsafe.getByteVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
296
}
297
298
private static final void setVolatile(Object receiver, byte value, VarHandle varHandle) {
299
receiver.getClass();
300
_unsafe.putByteVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
301
}
302
303
private static final byte getOpaque(Object receiver, VarHandle varHandle) {
304
receiver.getClass();
305
return _unsafe.getByteOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
306
}
307
308
private static final void setOpaque(Object receiver, byte value, VarHandle varHandle) {
309
receiver.getClass();
310
_unsafe.putByteOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
311
}
312
313
private static final byte getAcquire(Object receiver, VarHandle varHandle) {
314
receiver.getClass();
315
return _unsafe.getByteAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
316
}
317
318
private static final void setRelease(Object receiver, byte value, VarHandle varHandle) {
319
receiver.getClass();
320
_unsafe.putByteRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
321
}
322
323
private static final boolean compareAndSet(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
324
receiver.getClass();
325
/*[IF Sidecar19-SE-OpenJ9]*/
326
return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
327
/*[ELSE]
328
return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
329
/*[ENDIF]*/
330
}
331
332
private static final byte compareAndExchange(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
333
receiver.getClass();
334
/*[IF Sidecar19-SE-OpenJ9]*/
335
return (byte)_unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
336
/*[ELSE]
337
return (byte)_unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
338
/*[ENDIF]*/
339
}
340
341
private static final byte compareAndExchangeAcquire(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
342
receiver.getClass();
343
return (byte)_unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
344
}
345
346
private static final byte compareAndExchangeRelease(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
347
receiver.getClass();
348
return (byte)_unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
349
}
350
351
private static final boolean weakCompareAndSet(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
352
receiver.getClass();
353
/*[IF Sidecar19-SE-OpenJ9]*/
354
return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
355
/*[ELSE]
356
return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
357
/*[ENDIF]*/
358
}
359
360
private static final boolean weakCompareAndSetAcquire(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
361
receiver.getClass();
362
/*[IF Sidecar19-SE-OpenJ9]*/
363
return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
364
/*[ELSE]
365
return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
366
/*[ENDIF]*/
367
}
368
369
private static final boolean weakCompareAndSetRelease(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
370
receiver.getClass();
371
/*[IF Sidecar19-SE-OpenJ9]*/
372
return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
373
/*[ELSE]
374
return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
375
/*[ENDIF]*/
376
}
377
378
private static final boolean weakCompareAndSetPlain(Object receiver, byte testValue, byte newValue, VarHandle varHandle) {
379
receiver.getClass();
380
/*[IF Sidecar19-SE-OpenJ9]*/
381
return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
382
/*[ELSE]
383
return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
384
/*[ENDIF]*/
385
}
386
387
private static final byte getAndSet(Object receiver, byte value, VarHandle varHandle) {
388
receiver.getClass();
389
return (byte)_unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
390
}
391
392
private static final byte getAndSetAcquire(Object receiver, byte value, VarHandle varHandle) {
393
receiver.getClass();
394
return (byte)_unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
395
}
396
397
private static final byte getAndSetRelease(Object receiver, byte value, VarHandle varHandle) {
398
receiver.getClass();
399
return (byte)_unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
400
}
401
402
private static final byte getAndAdd(Object receiver, byte value, VarHandle varHandle) {
403
receiver.getClass();
404
return (byte)_unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
405
}
406
407
private static final byte getAndAddAcquire(Object receiver, byte value, VarHandle varHandle) {
408
receiver.getClass();
409
return (byte)_unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
410
}
411
412
private static final byte getAndAddRelease(Object receiver, byte value, VarHandle varHandle) {
413
receiver.getClass();
414
return (byte)_unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
415
}
416
417
private static final byte getAndBitwiseAnd(Object receiver, byte value, VarHandle varHandle) {
418
receiver.getClass();
419
return (byte)_unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
420
}
421
422
private static final byte getAndBitwiseAndAcquire(Object receiver, byte value, VarHandle varHandle) {
423
receiver.getClass();
424
return (byte)_unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
425
}
426
427
private static final byte getAndBitwiseAndRelease(Object receiver, byte value, VarHandle varHandle) {
428
receiver.getClass();
429
return (byte)_unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
430
}
431
432
private static final byte getAndBitwiseOr(Object receiver, byte value, VarHandle varHandle) {
433
receiver.getClass();
434
return (byte)_unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
435
}
436
437
private static final byte getAndBitwiseOrAcquire(Object receiver, byte value, VarHandle varHandle) {
438
receiver.getClass();
439
return (byte)_unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
440
}
441
442
private static final byte getAndBitwiseOrRelease(Object receiver, byte value, VarHandle varHandle) {
443
receiver.getClass();
444
return (byte)_unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
445
}
446
447
private static final byte getAndBitwiseXor(Object receiver, byte value, VarHandle varHandle) {
448
receiver.getClass();
449
return (byte)_unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
450
}
451
452
private static final byte getAndBitwiseXorAcquire(Object receiver, byte value, VarHandle varHandle) {
453
receiver.getClass();
454
return (byte)_unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
455
}
456
457
private static final byte getAndBitwiseXorRelease(Object receiver, byte value, VarHandle varHandle) {
458
receiver.getClass();
459
return (byte)_unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
460
}
461
}
462
463
static final class OpChar extends InstanceFieldVarHandleOperations {
464
private static final char get(Object receiver, VarHandle varHandle) {
465
receiver.getClass();
466
return _unsafe.getChar(receiver, ((FieldVarHandle)varHandle).vmslot);
467
}
468
469
private static final void set(Object receiver, char value, VarHandle varHandle) {
470
receiver.getClass();
471
_unsafe.putChar(receiver, ((FieldVarHandle)varHandle).vmslot, value);
472
}
473
474
private static final char getVolatile(Object receiver, VarHandle varHandle) {
475
receiver.getClass();
476
return _unsafe.getCharVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
477
}
478
479
private static final void setVolatile(Object receiver, char value, VarHandle varHandle) {
480
receiver.getClass();
481
_unsafe.putCharVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
482
}
483
484
private static final char getOpaque(Object receiver, VarHandle varHandle) {
485
receiver.getClass();
486
return _unsafe.getCharOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
487
}
488
489
private static final void setOpaque(Object receiver, char value, VarHandle varHandle) {
490
receiver.getClass();
491
_unsafe.putCharOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
492
}
493
494
private static final char getAcquire(Object receiver, VarHandle varHandle) {
495
receiver.getClass();
496
return _unsafe.getCharAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
497
}
498
499
private static final void setRelease(Object receiver, char value, VarHandle varHandle) {
500
receiver.getClass();
501
_unsafe.putCharRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
502
}
503
504
private static final boolean compareAndSet(Object receiver, char testValue, char newValue, VarHandle varHandle) {
505
receiver.getClass();
506
/*[IF Sidecar19-SE-OpenJ9]*/
507
return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
508
/*[ELSE]
509
return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
510
/*[ENDIF]*/
511
}
512
513
private static final char compareAndExchange(Object receiver, char testValue, char newValue, VarHandle varHandle) {
514
receiver.getClass();
515
/*[IF Sidecar19-SE-OpenJ9]*/
516
return (char)_unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
517
/*[ELSE]
518
return (char)_unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
519
/*[ENDIF]*/
520
}
521
522
private static final char compareAndExchangeAcquire(Object receiver, char testValue, char newValue, VarHandle varHandle) {
523
receiver.getClass();
524
return (char)_unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
525
}
526
527
private static final char compareAndExchangeRelease(Object receiver, char testValue, char newValue, VarHandle varHandle) {
528
receiver.getClass();
529
return (char)_unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
530
}
531
532
private static final boolean weakCompareAndSet(Object receiver, char testValue, char newValue, VarHandle varHandle) {
533
receiver.getClass();
534
/*[IF Sidecar19-SE-OpenJ9]*/
535
return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
536
/*[ELSE]
537
return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
538
/*[ENDIF]*/
539
}
540
541
private static final boolean weakCompareAndSetAcquire(Object receiver, char testValue, char newValue, VarHandle varHandle) {
542
receiver.getClass();
543
/*[IF Sidecar19-SE-OpenJ9]*/
544
return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
545
/*[ELSE]
546
return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
547
/*[ENDIF]*/
548
}
549
550
private static final boolean weakCompareAndSetRelease(Object receiver, char testValue, char newValue, VarHandle varHandle) {
551
receiver.getClass();
552
/*[IF Sidecar19-SE-OpenJ9]*/
553
return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
554
/*[ELSE]
555
return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
556
/*[ENDIF]*/
557
}
558
559
private static final boolean weakCompareAndSetPlain(Object receiver, char testValue, char newValue, VarHandle varHandle) {
560
receiver.getClass();
561
/*[IF Sidecar19-SE-OpenJ9]*/
562
return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
563
/*[ELSE]
564
return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
565
/*[ENDIF]*/
566
}
567
568
private static final char getAndSet(Object receiver, char value, VarHandle varHandle) {
569
receiver.getClass();
570
return (char)_unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
571
}
572
573
private static final char getAndSetAcquire(Object receiver, char value, VarHandle varHandle) {
574
receiver.getClass();
575
return (char)_unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
576
}
577
578
private static final char getAndSetRelease(Object receiver, char value, VarHandle varHandle) {
579
receiver.getClass();
580
return (char)_unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
581
}
582
583
private static final char getAndAdd(Object receiver, char value, VarHandle varHandle) {
584
receiver.getClass();
585
return (char)_unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
586
}
587
588
private static final char getAndAddAcquire(Object receiver, char value, VarHandle varHandle) {
589
receiver.getClass();
590
return (char)_unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
591
}
592
593
private static final char getAndAddRelease(Object receiver, char value, VarHandle varHandle) {
594
receiver.getClass();
595
return (char)_unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
596
}
597
598
private static final char getAndBitwiseAnd(Object receiver, char value, VarHandle varHandle) {
599
receiver.getClass();
600
return (char)_unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
601
}
602
603
private static final char getAndBitwiseAndAcquire(Object receiver, char value, VarHandle varHandle) {
604
receiver.getClass();
605
return (char)_unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
606
}
607
608
private static final char getAndBitwiseAndRelease(Object receiver, char value, VarHandle varHandle) {
609
receiver.getClass();
610
return (char)_unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
611
}
612
613
private static final char getAndBitwiseOr(Object receiver, char value, VarHandle varHandle) {
614
receiver.getClass();
615
return (char)_unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
616
}
617
618
private static final char getAndBitwiseOrAcquire(Object receiver, char value, VarHandle varHandle) {
619
receiver.getClass();
620
return (char)_unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
621
}
622
623
private static final char getAndBitwiseOrRelease(Object receiver, char value, VarHandle varHandle) {
624
receiver.getClass();
625
return (char)_unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
626
}
627
628
private static final char getAndBitwiseXor(Object receiver, char value, VarHandle varHandle) {
629
receiver.getClass();
630
return (char)_unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
631
}
632
633
private static final char getAndBitwiseXorAcquire(Object receiver, char value, VarHandle varHandle) {
634
receiver.getClass();
635
return (char)_unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
636
}
637
638
private static final char getAndBitwiseXorRelease(Object receiver, char value, VarHandle varHandle) {
639
receiver.getClass();
640
return (char)_unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
641
}
642
}
643
644
static final class OpDouble extends InstanceFieldVarHandleOperations {
645
private static final double get(Object receiver, VarHandle varHandle) {
646
receiver.getClass();
647
return _unsafe.getDouble(receiver, ((FieldVarHandle)varHandle).vmslot);
648
}
649
650
private static final void set(Object receiver, double value, VarHandle varHandle) {
651
receiver.getClass();
652
_unsafe.putDouble(receiver, ((FieldVarHandle)varHandle).vmslot, value);
653
}
654
655
private static final double getVolatile(Object receiver, VarHandle varHandle) {
656
receiver.getClass();
657
return _unsafe.getDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
658
}
659
660
private static final void setVolatile(Object receiver, double value, VarHandle varHandle) {
661
receiver.getClass();
662
_unsafe.putDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
663
}
664
665
private static final double getOpaque(Object receiver, VarHandle varHandle) {
666
receiver.getClass();
667
return _unsafe.getDoubleOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
668
}
669
670
private static final void setOpaque(Object receiver, double value, VarHandle varHandle) {
671
receiver.getClass();
672
_unsafe.putDoubleOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
673
}
674
675
private static final double getAcquire(Object receiver, VarHandle varHandle) {
676
receiver.getClass();
677
return _unsafe.getDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
678
}
679
680
private static final void setRelease(Object receiver, double value, VarHandle varHandle) {
681
receiver.getClass();
682
_unsafe.putDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
683
}
684
685
private static final boolean compareAndSet(Object receiver, double testValue, double newValue, VarHandle varHandle) {
686
receiver.getClass();
687
/*[IF Sidecar19-SE-OpenJ9]*/
688
return _unsafe.compareAndSetDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
689
/*[ELSE]
690
return _unsafe.compareAndSwapDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
691
/*[ENDIF]*/
692
}
693
694
private static final double compareAndExchange(Object receiver, double testValue, double newValue, VarHandle varHandle) {
695
receiver.getClass();
696
/*[IF Sidecar19-SE-OpenJ9]*/
697
return _unsafe.compareAndExchangeDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
698
/*[ELSE]
699
return _unsafe.compareAndExchangeDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
700
/*[ENDIF]*/
701
}
702
703
private static final double compareAndExchangeAcquire(Object receiver, double testValue, double newValue, VarHandle varHandle) {
704
receiver.getClass();
705
return _unsafe.compareAndExchangeDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
706
}
707
708
private static final double compareAndExchangeRelease(Object receiver, double testValue, double newValue, VarHandle varHandle) {
709
receiver.getClass();
710
return _unsafe.compareAndExchangeDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
711
}
712
713
private static final boolean weakCompareAndSet(Object receiver, double testValue, double newValue, VarHandle varHandle) {
714
receiver.getClass();
715
/*[IF Sidecar19-SE-OpenJ9]*/
716
return _unsafe.weakCompareAndSetDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
717
/*[ELSE]
718
return _unsafe.weakCompareAndSwapDoubleVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
719
/*[ENDIF]*/
720
}
721
722
private static final boolean weakCompareAndSetAcquire(Object receiver, double testValue, double newValue, VarHandle varHandle) {
723
receiver.getClass();
724
/*[IF Sidecar19-SE-OpenJ9]*/
725
return _unsafe.weakCompareAndSetDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
726
/*[ELSE]
727
return _unsafe.weakCompareAndSwapDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
728
/*[ENDIF]*/
729
}
730
731
private static final boolean weakCompareAndSetRelease(Object receiver, double testValue, double newValue, VarHandle varHandle) {
732
receiver.getClass();
733
/*[IF Sidecar19-SE-OpenJ9]*/
734
return _unsafe.weakCompareAndSetDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
735
/*[ELSE]
736
return _unsafe.weakCompareAndSwapDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
737
/*[ENDIF]*/
738
}
739
740
private static final boolean weakCompareAndSetPlain(Object receiver, double testValue, double newValue, VarHandle varHandle) {
741
receiver.getClass();
742
/*[IF Sidecar19-SE-OpenJ9]*/
743
return _unsafe.weakCompareAndSetDoublePlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
744
/*[ELSE]
745
return _unsafe.weakCompareAndSwapDouble(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
746
/*[ENDIF]*/
747
}
748
749
private static final double getAndSet(Object receiver, double value, VarHandle varHandle) {
750
receiver.getClass();
751
return _unsafe.getAndSetDouble(receiver, ((FieldVarHandle)varHandle).vmslot, value);
752
}
753
754
private static final double getAndSetAcquire(Object receiver, double value, VarHandle varHandle) {
755
receiver.getClass();
756
return _unsafe.getAndSetDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
757
}
758
759
private static final double getAndSetRelease(Object receiver, double value, VarHandle varHandle) {
760
receiver.getClass();
761
return _unsafe.getAndSetDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
762
}
763
764
private static final double getAndAdd(Object receiver, double value, VarHandle varHandle) {
765
receiver.getClass();
766
return _unsafe.getAndAddDouble(receiver, ((FieldVarHandle)varHandle).vmslot, value);
767
}
768
769
private static final double getAndAddAcquire(Object receiver, double value, VarHandle varHandle) {
770
receiver.getClass();
771
return _unsafe.getAndAddDoubleAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
772
}
773
774
private static final double getAndAddRelease(Object receiver, double value, VarHandle varHandle) {
775
receiver.getClass();
776
return _unsafe.getAndAddDoubleRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
777
}
778
779
private static final double getAndBitwiseAnd(Object receiver, double value, VarHandle varHandle) {
780
throw operationNotSupported(varHandle);
781
}
782
783
private static final double getAndBitwiseAndAcquire(Object receiver, double value, VarHandle varHandle) {
784
throw operationNotSupported(varHandle);
785
}
786
787
private static final double getAndBitwiseAndRelease(Object receiver, double value, VarHandle varHandle) {
788
throw operationNotSupported(varHandle);
789
}
790
791
private static final double getAndBitwiseOr(Object receiver, double value, VarHandle varHandle) {
792
throw operationNotSupported(varHandle);
793
}
794
795
private static final double getAndBitwiseOrAcquire(Object receiver, double value, VarHandle varHandle) {
796
throw operationNotSupported(varHandle);
797
}
798
799
private static final double getAndBitwiseOrRelease(Object receiver, double value, VarHandle varHandle) {
800
throw operationNotSupported(varHandle);
801
}
802
803
private static final double getAndBitwiseXor(Object receiver, double value, VarHandle varHandle) {
804
throw operationNotSupported(varHandle);
805
}
806
807
private static final double getAndBitwiseXorAcquire(Object receiver, double value, VarHandle varHandle) {
808
throw operationNotSupported(varHandle);
809
}
810
811
private static final double getAndBitwiseXorRelease(Object receiver, double value, VarHandle varHandle) {
812
throw operationNotSupported(varHandle);
813
}
814
}
815
816
static final class OpFloat extends InstanceFieldVarHandleOperations {
817
private static final float get(Object receiver, VarHandle varHandle) {
818
receiver.getClass();
819
return _unsafe.getFloat(receiver, ((FieldVarHandle)varHandle).vmslot);
820
}
821
822
private static final void set(Object receiver, float value, VarHandle varHandle) {
823
receiver.getClass();
824
_unsafe.putFloat(receiver, ((FieldVarHandle)varHandle).vmslot, value);
825
}
826
827
private static final float getVolatile(Object receiver, VarHandle varHandle) {
828
receiver.getClass();
829
return _unsafe.getFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
830
}
831
832
private static final void setVolatile(Object receiver, float value, VarHandle varHandle) {
833
receiver.getClass();
834
_unsafe.putFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
835
}
836
837
private static final float getOpaque(Object receiver, VarHandle varHandle) {
838
receiver.getClass();
839
return _unsafe.getFloatOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
840
}
841
842
private static final void setOpaque(Object receiver, float value, VarHandle varHandle) {
843
receiver.getClass();
844
_unsafe.putFloatOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
845
}
846
847
private static final float getAcquire(Object receiver, VarHandle varHandle) {
848
receiver.getClass();
849
return _unsafe.getFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
850
}
851
852
private static final void setRelease(Object receiver, float value, VarHandle varHandle) {
853
receiver.getClass();
854
_unsafe.putFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
855
}
856
857
private static final boolean compareAndSet(Object receiver, float testValue, float newValue, VarHandle varHandle) {
858
receiver.getClass();
859
/*[IF Sidecar19-SE-OpenJ9]*/
860
return _unsafe.compareAndSetFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
861
/*[ELSE]
862
return _unsafe.compareAndSwapFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
863
/*[ENDIF]*/
864
}
865
866
private static final float compareAndExchange(Object receiver, float testValue, float newValue, VarHandle varHandle) {
867
receiver.getClass();
868
/*[IF Sidecar19-SE-OpenJ9]*/
869
return _unsafe.compareAndExchangeFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
870
/*[ELSE]
871
return _unsafe.compareAndExchangeFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
872
/*[ENDIF]*/
873
}
874
875
private static final float compareAndExchangeAcquire(Object receiver, float testValue, float newValue, VarHandle varHandle) {
876
receiver.getClass();
877
return _unsafe.compareAndExchangeFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
878
}
879
880
private static final float compareAndExchangeRelease(Object receiver, float testValue, float newValue, VarHandle varHandle) {
881
receiver.getClass();
882
return _unsafe.compareAndExchangeFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
883
}
884
885
private static final boolean weakCompareAndSet(Object receiver, float testValue, float newValue, VarHandle varHandle) {
886
receiver.getClass();
887
/*[IF Sidecar19-SE-OpenJ9]*/
888
return _unsafe.weakCompareAndSetFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
889
/*[ELSE]
890
return _unsafe.weakCompareAndSwapFloatVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
891
/*[ENDIF]*/
892
}
893
894
private static final boolean weakCompareAndSetAcquire(Object receiver, float testValue, float newValue, VarHandle varHandle) {
895
receiver.getClass();
896
/*[IF Sidecar19-SE-OpenJ9]*/
897
return _unsafe.weakCompareAndSetFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
898
/*[ELSE]
899
return _unsafe.weakCompareAndSwapFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
900
/*[ENDIF]*/
901
}
902
903
private static final boolean weakCompareAndSetRelease(Object receiver, float testValue, float newValue, VarHandle varHandle) {
904
receiver.getClass();
905
/*[IF Sidecar19-SE-OpenJ9]*/
906
return _unsafe.weakCompareAndSetFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
907
/*[ELSE]
908
return _unsafe.weakCompareAndSwapFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
909
/*[ENDIF]*/
910
}
911
912
private static final boolean weakCompareAndSetPlain(Object receiver, float testValue, float newValue, VarHandle varHandle) {
913
receiver.getClass();
914
/*[IF Sidecar19-SE-OpenJ9]*/
915
return _unsafe.weakCompareAndSetFloatPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
916
/*[ELSE]
917
return _unsafe.weakCompareAndSwapFloat(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
918
/*[ENDIF]*/
919
}
920
921
private static final float getAndSet(Object receiver, float value, VarHandle varHandle) {
922
receiver.getClass();
923
return _unsafe.getAndSetFloat(receiver, ((FieldVarHandle)varHandle).vmslot, value);
924
}
925
926
private static final float getAndSetAcquire(Object receiver, float value, VarHandle varHandle) {
927
receiver.getClass();
928
return _unsafe.getAndSetFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
929
}
930
931
private static final float getAndSetRelease(Object receiver, float value, VarHandle varHandle) {
932
receiver.getClass();
933
return _unsafe.getAndSetFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
934
}
935
936
private static final float getAndAdd(Object receiver, float value, VarHandle varHandle) {
937
receiver.getClass();
938
return _unsafe.getAndAddFloat(receiver, ((FieldVarHandle)varHandle).vmslot, value);
939
}
940
941
private static final float getAndAddAcquire(Object receiver, float value, VarHandle varHandle) {
942
receiver.getClass();
943
return _unsafe.getAndAddFloatAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
944
}
945
946
private static final float getAndAddRelease(Object receiver, float value, VarHandle varHandle) {
947
receiver.getClass();
948
return _unsafe.getAndAddFloatRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
949
}
950
951
private static final float getAndBitwiseAnd(Object receiver, float value, VarHandle varHandle) {
952
throw operationNotSupported(varHandle);
953
}
954
955
private static final float getAndBitwiseAndAcquire(Object receiver, float value, VarHandle varHandle) {
956
throw operationNotSupported(varHandle);
957
}
958
959
private static final float getAndBitwiseAndRelease(Object receiver, float value, VarHandle varHandle) {
960
throw operationNotSupported(varHandle);
961
}
962
963
private static final float getAndBitwiseOr(Object receiver, float value, VarHandle varHandle) {
964
throw operationNotSupported(varHandle);
965
}
966
967
private static final float getAndBitwiseOrAcquire(Object receiver, float value, VarHandle varHandle) {
968
throw operationNotSupported(varHandle);
969
}
970
971
private static final float getAndBitwiseOrRelease(Object receiver, float value, VarHandle varHandle) {
972
throw operationNotSupported(varHandle);
973
}
974
975
private static final float getAndBitwiseXor(Object receiver, float value, VarHandle varHandle) {
976
throw operationNotSupported(varHandle);
977
}
978
979
private static final float getAndBitwiseXorAcquire(Object receiver, float value, VarHandle varHandle) {
980
throw operationNotSupported(varHandle);
981
}
982
983
private static final float getAndBitwiseXorRelease(Object receiver, float value, VarHandle varHandle) {
984
throw operationNotSupported(varHandle);
985
}
986
}
987
988
static final class OpInt extends InstanceFieldVarHandleOperations {
989
private static final int get(Object receiver, VarHandle varHandle) {
990
receiver.getClass();
991
return _unsafe.getInt(receiver, ((FieldVarHandle)varHandle).vmslot);
992
}
993
994
private static final void set(Object receiver, int value, VarHandle varHandle) {
995
receiver.getClass();
996
_unsafe.putInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
997
}
998
999
private static final int getVolatile(Object receiver, VarHandle varHandle) {
1000
receiver.getClass();
1001
return _unsafe.getIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
1002
}
1003
1004
private static final void setVolatile(Object receiver, int value, VarHandle varHandle) {
1005
receiver.getClass();
1006
_unsafe.putIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1007
}
1008
1009
private static final int getOpaque(Object receiver, VarHandle varHandle) {
1010
receiver.getClass();
1011
return _unsafe.getIntOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
1012
}
1013
1014
private static final void setOpaque(Object receiver, int value, VarHandle varHandle) {
1015
receiver.getClass();
1016
_unsafe.putIntOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1017
}
1018
1019
private static final int getAcquire(Object receiver, VarHandle varHandle) {
1020
receiver.getClass();
1021
return _unsafe.getIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
1022
}
1023
1024
private static final void setRelease(Object receiver, int value, VarHandle varHandle) {
1025
receiver.getClass();
1026
_unsafe.putIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1027
}
1028
1029
private static final boolean compareAndSet(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1030
receiver.getClass();
1031
/*[IF Sidecar19-SE-OpenJ9]*/
1032
return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1033
/*[ELSE]
1034
return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1035
/*[ENDIF]*/
1036
}
1037
1038
private static final int compareAndExchange(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1039
receiver.getClass();
1040
/*[IF Sidecar19-SE-OpenJ9]*/
1041
return _unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1042
/*[ELSE]
1043
return _unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1044
/*[ENDIF]*/
1045
}
1046
1047
private static final int compareAndExchangeAcquire(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1048
receiver.getClass();
1049
return _unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1050
}
1051
1052
private static final int compareAndExchangeRelease(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1053
receiver.getClass();
1054
return _unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1055
}
1056
1057
private static final boolean weakCompareAndSet(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1058
receiver.getClass();
1059
/*[IF Sidecar19-SE-OpenJ9]*/
1060
return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1061
/*[ELSE]
1062
return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1063
/*[ENDIF]*/
1064
}
1065
1066
private static final boolean weakCompareAndSetAcquire(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1067
receiver.getClass();
1068
/*[IF Sidecar19-SE-OpenJ9]*/
1069
return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1070
/*[ELSE]
1071
return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1072
/*[ENDIF]*/
1073
}
1074
1075
private static final boolean weakCompareAndSetRelease(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1076
receiver.getClass();
1077
/*[IF Sidecar19-SE-OpenJ9]*/
1078
return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1079
/*[ELSE]
1080
return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1081
/*[ENDIF]*/
1082
}
1083
1084
private static final boolean weakCompareAndSetPlain(Object receiver, int testValue, int newValue, VarHandle varHandle) {
1085
receiver.getClass();
1086
/*[IF Sidecar19-SE-OpenJ9]*/
1087
return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1088
/*[ELSE]
1089
return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1090
/*[ENDIF]*/
1091
}
1092
1093
private static final int getAndSet(Object receiver, int value, VarHandle varHandle) {
1094
receiver.getClass();
1095
return _unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1096
}
1097
1098
private static final int getAndSetAcquire(Object receiver, int value, VarHandle varHandle) {
1099
receiver.getClass();
1100
return _unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1101
}
1102
1103
private static final int getAndSetRelease(Object receiver, int value, VarHandle varHandle) {
1104
receiver.getClass();
1105
return _unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1106
}
1107
1108
private static final int getAndAdd(Object receiver, int value, VarHandle varHandle) {
1109
receiver.getClass();
1110
return _unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1111
}
1112
1113
private static final int getAndAddAcquire(Object receiver, int value, VarHandle varHandle) {
1114
receiver.getClass();
1115
return _unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1116
}
1117
1118
private static final int getAndAddRelease(Object receiver, int value, VarHandle varHandle) {
1119
receiver.getClass();
1120
return _unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1121
}
1122
1123
private static final int getAndBitwiseAnd(Object receiver, int value, VarHandle varHandle) {
1124
receiver.getClass();
1125
return _unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1126
}
1127
1128
private static final int getAndBitwiseAndAcquire(Object receiver, int value, VarHandle varHandle) {
1129
receiver.getClass();
1130
return _unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1131
}
1132
1133
private static final int getAndBitwiseAndRelease(Object receiver, int value, VarHandle varHandle) {
1134
receiver.getClass();
1135
return _unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1136
}
1137
1138
private static final int getAndBitwiseOr(Object receiver, int value, VarHandle varHandle) {
1139
receiver.getClass();
1140
return _unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1141
}
1142
1143
private static final int getAndBitwiseOrAcquire(Object receiver, int value, VarHandle varHandle) {
1144
receiver.getClass();
1145
return _unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1146
}
1147
1148
private static final int getAndBitwiseOrRelease(Object receiver, int value, VarHandle varHandle) {
1149
receiver.getClass();
1150
return _unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1151
}
1152
1153
private static final int getAndBitwiseXor(Object receiver, int value, VarHandle varHandle) {
1154
receiver.getClass();
1155
return _unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1156
}
1157
1158
private static final int getAndBitwiseXorAcquire(Object receiver, int value, VarHandle varHandle) {
1159
receiver.getClass();
1160
return _unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1161
}
1162
1163
private static final int getAndBitwiseXorRelease(Object receiver, int value, VarHandle varHandle) {
1164
receiver.getClass();
1165
return _unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1166
}
1167
}
1168
1169
static final class OpLong extends InstanceFieldVarHandleOperations {
1170
private static final long get(Object receiver, VarHandle varHandle) {
1171
receiver.getClass();
1172
return _unsafe.getLong(receiver, ((FieldVarHandle)varHandle).vmslot);
1173
}
1174
1175
private static final void set(Object receiver, long value, VarHandle varHandle) {
1176
receiver.getClass();
1177
_unsafe.putLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1178
}
1179
1180
private static final long getVolatile(Object receiver, VarHandle varHandle) {
1181
receiver.getClass();
1182
return _unsafe.getLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
1183
}
1184
1185
private static final void setVolatile(Object receiver, long value, VarHandle varHandle) {
1186
receiver.getClass();
1187
_unsafe.putLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1188
}
1189
1190
private static final long getOpaque(Object receiver, VarHandle varHandle) {
1191
receiver.getClass();
1192
return _unsafe.getLongOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
1193
}
1194
1195
private static final void setOpaque(Object receiver, long value, VarHandle varHandle) {
1196
receiver.getClass();
1197
_unsafe.putLongOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1198
}
1199
1200
private static final long getAcquire(Object receiver, VarHandle varHandle) {
1201
receiver.getClass();
1202
return _unsafe.getLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
1203
}
1204
1205
private static final void setRelease(Object receiver, long value, VarHandle varHandle) {
1206
receiver.getClass();
1207
_unsafe.putLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1208
}
1209
1210
private static final boolean compareAndSet(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1211
receiver.getClass();
1212
/*[IF Sidecar19-SE-OpenJ9]*/
1213
return _unsafe.compareAndSetLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1214
/*[ELSE]
1215
return _unsafe.compareAndSwapLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1216
/*[ENDIF]*/
1217
}
1218
1219
private static final long compareAndExchange(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1220
receiver.getClass();
1221
/*[IF Sidecar19-SE-OpenJ9]*/
1222
return _unsafe.compareAndExchangeLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1223
/*[ELSE]
1224
return _unsafe.compareAndExchangeLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1225
/*[ENDIF]*/
1226
}
1227
1228
private static final long compareAndExchangeAcquire(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1229
receiver.getClass();
1230
return _unsafe.compareAndExchangeLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1231
}
1232
1233
private static final long compareAndExchangeRelease(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1234
receiver.getClass();
1235
return _unsafe.compareAndExchangeLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1236
}
1237
1238
private static final boolean weakCompareAndSet(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1239
receiver.getClass();
1240
/*[IF Sidecar19-SE-OpenJ9]*/
1241
return _unsafe.weakCompareAndSetLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1242
/*[ELSE]
1243
return _unsafe.weakCompareAndSwapLongVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1244
/*[ENDIF]*/
1245
}
1246
1247
private static final boolean weakCompareAndSetAcquire(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1248
receiver.getClass();
1249
/*[IF Sidecar19-SE-OpenJ9]*/
1250
return _unsafe.weakCompareAndSetLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1251
/*[ELSE]
1252
return _unsafe.weakCompareAndSwapLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1253
/*[ENDIF]*/
1254
}
1255
1256
private static final boolean weakCompareAndSetRelease(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1257
receiver.getClass();
1258
/*[IF Sidecar19-SE-OpenJ9]*/
1259
return _unsafe.weakCompareAndSetLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1260
/*[ELSE]
1261
return _unsafe.weakCompareAndSwapLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1262
/*[ENDIF]*/
1263
}
1264
1265
private static final boolean weakCompareAndSetPlain(Object receiver, long testValue, long newValue, VarHandle varHandle) {
1266
receiver.getClass();
1267
/*[IF Sidecar19-SE-OpenJ9]*/
1268
return _unsafe.weakCompareAndSetLongPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1269
/*[ELSE]
1270
return _unsafe.weakCompareAndSwapLong(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1271
/*[ENDIF]*/
1272
}
1273
1274
private static final long getAndSet(Object receiver, long value, VarHandle varHandle) {
1275
receiver.getClass();
1276
return _unsafe.getAndSetLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1277
}
1278
1279
private static final long getAndSetAcquire(Object receiver, long value, VarHandle varHandle) {
1280
receiver.getClass();
1281
return _unsafe.getAndSetLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1282
}
1283
1284
private static final long getAndSetRelease(Object receiver, long value, VarHandle varHandle) {
1285
receiver.getClass();
1286
return _unsafe.getAndSetLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1287
}
1288
1289
private static final long getAndAdd(Object receiver, long value, VarHandle varHandle) {
1290
receiver.getClass();
1291
return _unsafe.getAndAddLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1292
}
1293
1294
private static final long getAndAddAcquire(Object receiver, long value, VarHandle varHandle) {
1295
receiver.getClass();
1296
return _unsafe.getAndAddLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1297
}
1298
1299
private static final long getAndAddRelease(Object receiver, long value, VarHandle varHandle) {
1300
receiver.getClass();
1301
return _unsafe.getAndAddLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1302
}
1303
1304
private static final long getAndBitwiseAnd(Object receiver, long value, VarHandle varHandle) {
1305
receiver.getClass();
1306
return _unsafe.getAndBitwiseAndLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1307
}
1308
1309
private static final long getAndBitwiseAndAcquire(Object receiver, long value, VarHandle varHandle) {
1310
receiver.getClass();
1311
return _unsafe.getAndBitwiseAndLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1312
}
1313
1314
private static final long getAndBitwiseAndRelease(Object receiver, long value, VarHandle varHandle) {
1315
receiver.getClass();
1316
return _unsafe.getAndBitwiseAndLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1317
}
1318
1319
private static final long getAndBitwiseOr(Object receiver, long value, VarHandle varHandle) {
1320
receiver.getClass();
1321
return _unsafe.getAndBitwiseOrLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1322
}
1323
1324
private static final long getAndBitwiseOrAcquire(Object receiver, long value, VarHandle varHandle) {
1325
receiver.getClass();
1326
return _unsafe.getAndBitwiseOrLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1327
}
1328
1329
private static final long getAndBitwiseOrRelease(Object receiver, long value, VarHandle varHandle) {
1330
receiver.getClass();
1331
return _unsafe.getAndBitwiseOrLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1332
}
1333
1334
private static final long getAndBitwiseXor(Object receiver, long value, VarHandle varHandle) {
1335
receiver.getClass();
1336
return _unsafe.getAndBitwiseXorLong(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1337
}
1338
1339
private static final long getAndBitwiseXorAcquire(Object receiver, long value, VarHandle varHandle) {
1340
receiver.getClass();
1341
return _unsafe.getAndBitwiseXorLongAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1342
}
1343
1344
private static final long getAndBitwiseXorRelease(Object receiver, long value, VarHandle varHandle) {
1345
receiver.getClass();
1346
return _unsafe.getAndBitwiseXorLongRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1347
}
1348
}
1349
1350
static final class OpShort extends InstanceFieldVarHandleOperations {
1351
private static final short get(Object receiver, VarHandle varHandle) {
1352
receiver.getClass();
1353
return _unsafe.getShort(receiver, ((FieldVarHandle)varHandle).vmslot);
1354
}
1355
1356
private static final void set(Object receiver, short value, VarHandle varHandle) {
1357
receiver.getClass();
1358
_unsafe.putShort(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1359
}
1360
1361
private static final short getVolatile(Object receiver, VarHandle varHandle) {
1362
receiver.getClass();
1363
return _unsafe.getShortVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
1364
}
1365
1366
private static final void setVolatile(Object receiver, short value, VarHandle varHandle) {
1367
receiver.getClass();
1368
_unsafe.putShortVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1369
}
1370
1371
private static final short getOpaque(Object receiver, VarHandle varHandle) {
1372
receiver.getClass();
1373
return _unsafe.getShortOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
1374
}
1375
1376
private static final void setOpaque(Object receiver, short value, VarHandle varHandle) {
1377
receiver.getClass();
1378
_unsafe.putShortOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1379
}
1380
1381
private static final short getAcquire(Object receiver, VarHandle varHandle) {
1382
receiver.getClass();
1383
return _unsafe.getShortAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
1384
}
1385
1386
private static final void setRelease(Object receiver, short value, VarHandle varHandle) {
1387
receiver.getClass();
1388
_unsafe.putShortRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1389
}
1390
1391
private static final boolean compareAndSet(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1392
receiver.getClass();
1393
/*[IF Sidecar19-SE-OpenJ9]*/
1394
return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1395
/*[ELSE]
1396
return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1397
/*[ENDIF]*/
1398
}
1399
1400
private static final short compareAndExchange(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1401
receiver.getClass();
1402
/*[IF Sidecar19-SE-OpenJ9]*/
1403
return (short)_unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1404
/*[ELSE]
1405
return (short)_unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1406
/*[ENDIF]*/
1407
}
1408
1409
private static final short compareAndExchangeAcquire(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1410
receiver.getClass();
1411
return (short)_unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1412
}
1413
1414
private static final short compareAndExchangeRelease(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1415
receiver.getClass();
1416
return (short)_unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1417
}
1418
1419
private static final boolean weakCompareAndSet(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1420
receiver.getClass();
1421
/*[IF Sidecar19-SE-OpenJ9]*/
1422
return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1423
/*[ELSE]
1424
return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1425
/*[ENDIF]*/
1426
}
1427
1428
private static final boolean weakCompareAndSetAcquire(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1429
receiver.getClass();
1430
/*[IF Sidecar19-SE-OpenJ9]*/
1431
return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1432
/*[ELSE]
1433
return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1434
/*[ENDIF]*/
1435
}
1436
1437
private static final boolean weakCompareAndSetRelease(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1438
receiver.getClass();
1439
/*[IF Sidecar19-SE-OpenJ9]*/
1440
return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1441
/*[ELSE]
1442
return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1443
/*[ENDIF]*/
1444
}
1445
1446
private static final boolean weakCompareAndSetPlain(Object receiver, short testValue, short newValue, VarHandle varHandle) {
1447
receiver.getClass();
1448
/*[IF Sidecar19-SE-OpenJ9]*/
1449
return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1450
/*[ELSE]
1451
return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue, newValue);
1452
/*[ENDIF]*/
1453
}
1454
1455
private static final short getAndSet(Object receiver, short value, VarHandle varHandle) {
1456
receiver.getClass();
1457
return (short)_unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1458
}
1459
1460
private static final short getAndSetAcquire(Object receiver, short value, VarHandle varHandle) {
1461
receiver.getClass();
1462
return (short)_unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1463
}
1464
1465
private static final short getAndSetRelease(Object receiver, short value, VarHandle varHandle) {
1466
receiver.getClass();
1467
return (short)_unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1468
}
1469
1470
private static final short getAndAdd(Object receiver, short value, VarHandle varHandle) {
1471
receiver.getClass();
1472
return (short)_unsafe.getAndAddInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1473
}
1474
1475
private static final short getAndAddAcquire(Object receiver, short value, VarHandle varHandle) {
1476
receiver.getClass();
1477
return (short)_unsafe.getAndAddIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1478
}
1479
1480
private static final short getAndAddRelease(Object receiver, short value, VarHandle varHandle) {
1481
receiver.getClass();
1482
return (short)_unsafe.getAndAddIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1483
}
1484
1485
private static final short getAndBitwiseAnd(Object receiver, short value, VarHandle varHandle) {
1486
receiver.getClass();
1487
return (short)_unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1488
}
1489
1490
private static final short getAndBitwiseAndAcquire(Object receiver, short value, VarHandle varHandle) {
1491
receiver.getClass();
1492
return (short)_unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1493
}
1494
1495
private static final short getAndBitwiseAndRelease(Object receiver, short value, VarHandle varHandle) {
1496
receiver.getClass();
1497
return (short)_unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1498
}
1499
1500
private static final short getAndBitwiseOr(Object receiver, short value, VarHandle varHandle) {
1501
receiver.getClass();
1502
return (short)_unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1503
}
1504
1505
private static final short getAndBitwiseOrAcquire(Object receiver, short value, VarHandle varHandle) {
1506
receiver.getClass();
1507
return (short)_unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1508
}
1509
1510
private static final short getAndBitwiseOrRelease(Object receiver, short value, VarHandle varHandle) {
1511
receiver.getClass();
1512
return (short)_unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1513
}
1514
1515
private static final short getAndBitwiseXor(Object receiver, short value, VarHandle varHandle) {
1516
receiver.getClass();
1517
return (short)_unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1518
}
1519
1520
private static final short getAndBitwiseXorAcquire(Object receiver, short value, VarHandle varHandle) {
1521
receiver.getClass();
1522
return (short)_unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1523
}
1524
1525
private static final short getAndBitwiseXorRelease(Object receiver, short value, VarHandle varHandle) {
1526
receiver.getClass();
1527
return (short)_unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1528
}
1529
}
1530
1531
static final class OpBoolean extends InstanceFieldVarHandleOperations {
1532
private static final boolean get(Object receiver, VarHandle varHandle) {
1533
receiver.getClass();
1534
return _unsafe.getBoolean(receiver, ((FieldVarHandle)varHandle).vmslot);
1535
}
1536
1537
private static final void set(Object receiver, boolean value, VarHandle varHandle) {
1538
receiver.getClass();
1539
_unsafe.putBoolean(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1540
}
1541
1542
private static final boolean getVolatile(Object receiver, VarHandle varHandle) {
1543
receiver.getClass();
1544
return _unsafe.getBooleanVolatile(receiver, ((FieldVarHandle)varHandle).vmslot);
1545
}
1546
1547
private static final void setVolatile(Object receiver, boolean value, VarHandle varHandle) {
1548
receiver.getClass();
1549
_unsafe.putBooleanVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1550
}
1551
1552
private static final boolean getOpaque(Object receiver, VarHandle varHandle) {
1553
receiver.getClass();
1554
return _unsafe.getBooleanOpaque(receiver, ((FieldVarHandle)varHandle).vmslot);
1555
}
1556
1557
private static final void setOpaque(Object receiver, boolean value, VarHandle varHandle) {
1558
receiver.getClass();
1559
_unsafe.putBooleanOpaque(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1560
}
1561
1562
private static final boolean getAcquire(Object receiver, VarHandle varHandle) {
1563
receiver.getClass();
1564
return _unsafe.getBooleanAcquire(receiver, ((FieldVarHandle)varHandle).vmslot);
1565
}
1566
1567
private static final void setRelease(Object receiver, boolean value, VarHandle varHandle) {
1568
receiver.getClass();
1569
_unsafe.putBooleanRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value);
1570
}
1571
1572
private static final boolean compareAndSet(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1573
receiver.getClass();
1574
/*[IF Sidecar19-SE-OpenJ9]*/
1575
return _unsafe.compareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1576
/*[ELSE]
1577
return _unsafe.compareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1578
/*[ENDIF]*/
1579
}
1580
1581
private static final boolean compareAndExchange(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1582
receiver.getClass();
1583
/*[IF Sidecar19-SE-OpenJ9]*/
1584
return (0 != _unsafe.compareAndExchangeInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));
1585
/*[ELSE]
1586
return (0 != _unsafe.compareAndExchangeIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));
1587
/*[ENDIF]*/
1588
}
1589
1590
private static final boolean compareAndExchangeAcquire(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1591
receiver.getClass();
1592
return (0 != _unsafe.compareAndExchangeIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));
1593
}
1594
1595
private static final boolean compareAndExchangeRelease(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1596
receiver.getClass();
1597
return (0 != _unsafe.compareAndExchangeIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0));
1598
}
1599
1600
private static final boolean weakCompareAndSet(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1601
receiver.getClass();
1602
/*[IF Sidecar19-SE-OpenJ9]*/
1603
return _unsafe.weakCompareAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1604
/*[ELSE]
1605
return _unsafe.weakCompareAndSwapIntVolatile(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1606
/*[ENDIF]*/
1607
}
1608
1609
private static final boolean weakCompareAndSetAcquire(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1610
receiver.getClass();
1611
/*[IF Sidecar19-SE-OpenJ9]*/
1612
return _unsafe.weakCompareAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1613
/*[ELSE]
1614
return _unsafe.weakCompareAndSwapIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1615
/*[ENDIF]*/
1616
}
1617
1618
private static final boolean weakCompareAndSetRelease(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1619
receiver.getClass();
1620
/*[IF Sidecar19-SE-OpenJ9]*/
1621
return _unsafe.weakCompareAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1622
/*[ELSE]
1623
return _unsafe.weakCompareAndSwapIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1624
/*[ENDIF]*/
1625
}
1626
1627
private static final boolean weakCompareAndSetPlain(Object receiver, boolean testValue, boolean newValue, VarHandle varHandle) {
1628
receiver.getClass();
1629
/*[IF Sidecar19-SE-OpenJ9]*/
1630
return _unsafe.weakCompareAndSetIntPlain(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1631
/*[ELSE]
1632
return _unsafe.weakCompareAndSwapInt(receiver, ((FieldVarHandle)varHandle).vmslot, testValue ? 1: 0, newValue ? 1 : 0);
1633
/*[ENDIF]*/
1634
}
1635
1636
private static final boolean getAndSet(Object receiver, boolean value, VarHandle varHandle) {
1637
receiver.getClass();
1638
return (0 != _unsafe.getAndSetInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1639
}
1640
1641
private static final boolean getAndSetAcquire(Object receiver, boolean value, VarHandle varHandle) {
1642
receiver.getClass();
1643
return (0 != _unsafe.getAndSetIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1644
}
1645
1646
private static final boolean getAndSetRelease(Object receiver, boolean value, VarHandle varHandle) {
1647
receiver.getClass();
1648
return (0 != _unsafe.getAndSetIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1649
}
1650
1651
private static final boolean getAndAdd(Object receiver, boolean value, VarHandle varHandle) {
1652
throw operationNotSupported(varHandle);
1653
}
1654
1655
private static final boolean getAndAddAcquire(Object receiver, boolean value, VarHandle varHandle) {
1656
throw operationNotSupported(varHandle);
1657
}
1658
1659
private static final boolean getAndAddRelease(Object receiver, boolean value, VarHandle varHandle) {
1660
throw operationNotSupported(varHandle);
1661
}
1662
1663
private static final boolean getAndBitwiseAnd(Object receiver, boolean value, VarHandle varHandle) {
1664
receiver.getClass();
1665
return (0 != _unsafe.getAndBitwiseAndInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1666
}
1667
1668
private static final boolean getAndBitwiseAndAcquire(Object receiver, boolean value, VarHandle varHandle) {
1669
receiver.getClass();
1670
return (0 != _unsafe.getAndBitwiseAndIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1671
}
1672
1673
private static final boolean getAndBitwiseAndRelease(Object receiver, boolean value, VarHandle varHandle) {
1674
receiver.getClass();
1675
return (0 != _unsafe.getAndBitwiseAndIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1676
}
1677
1678
private static final boolean getAndBitwiseOr(Object receiver, boolean value, VarHandle varHandle) {
1679
receiver.getClass();
1680
return (0 != _unsafe.getAndBitwiseOrInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1681
}
1682
1683
private static final boolean getAndBitwiseOrAcquire(Object receiver, boolean value, VarHandle varHandle) {
1684
receiver.getClass();
1685
return (0 != _unsafe.getAndBitwiseOrIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1686
}
1687
1688
private static final boolean getAndBitwiseOrRelease(Object receiver, boolean value, VarHandle varHandle) {
1689
receiver.getClass();
1690
return (0 != _unsafe.getAndBitwiseOrIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1691
}
1692
1693
private static final boolean getAndBitwiseXor(Object receiver, boolean value, VarHandle varHandle) {
1694
receiver.getClass();
1695
return (0 != _unsafe.getAndBitwiseXorInt(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1696
}
1697
1698
private static final boolean getAndBitwiseXorAcquire(Object receiver, boolean value, VarHandle varHandle) {
1699
receiver.getClass();
1700
return (0 != _unsafe.getAndBitwiseXorIntAcquire(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1701
}
1702
1703
private static final boolean getAndBitwiseXorRelease(Object receiver, boolean value, VarHandle varHandle) {
1704
receiver.getClass();
1705
return (0 != _unsafe.getAndBitwiseXorIntRelease(receiver, ((FieldVarHandle)varHandle).vmslot, value ? 1 : 0));
1706
}
1707
}
1708
}
1709
}
1710
1711