--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.jdk9.test/src/org/graalvm/compiler/replacements/jdk9/UnsafeReplacementsTest.java Thu Nov 15 21:05:47 2018 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,824 +0,0 @@
-/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package org.graalvm.compiler.replacements.jdk9;
-
-import jdk.vm.ci.aarch64.AArch64;
-import jdk.vm.ci.amd64.AMD64;
-import jdk.vm.ci.code.TargetDescription;
-import org.graalvm.compiler.api.test.Graal;
-import org.graalvm.compiler.core.phases.HighTier;
-import org.graalvm.compiler.options.OptionValues;
-import org.graalvm.compiler.replacements.test.MethodSubstitutionTest;
-import org.graalvm.compiler.runtime.RuntimeProvider;
-import org.graalvm.compiler.test.AddExports;
-import org.junit.Test;
-
-import java.lang.reflect.Field;
-
-@AddExports("java.base/jdk.internal.misc")
-public class UnsafeReplacementsTest extends MethodSubstitutionTest {
-
- static class Container {
- public volatile boolean booleanField;
- public volatile byte byteField = 17;
- public volatile char charField = 1025;
- public volatile short shortField = 2232;
- public volatile int intField = 0xcafebabe;
- public volatile long longField = 0xdedababafafaL;
- public volatile float floatField = 0.125f;
- public volatile double doubleField = 0.125;
- public volatile Object objectField = dummyValue;
- }
-
- static jdk.internal.misc.Unsafe unsafe = jdk.internal.misc.Unsafe.getUnsafe();
- static Container dummyValue = new Container();
- static Container newDummyValue = new Container();
- static long booleanOffset;
- static long byteOffset;
- static long charOffset;
- static long shortOffset;
- static long intOffset;
- static long longOffset;
- static long floatOffset;
- static long doubleOffset;
- static long objectOffset;
-
- static {
- try {
- booleanOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("booleanField"));
- byteOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("byteField"));
- charOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("charField"));
- shortOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("shortField"));
- intOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("intField"));
- longOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("longField"));
- floatOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("floatField"));
- doubleOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("doubleField"));
- objectOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("objectField"));
- } catch (NoSuchFieldException e) {
- throw new RuntimeException(e);
- }
- }
-
- public static boolean unsafeCompareAndSetBoolean() {
- Container container = new Container();
- return unsafe.compareAndSetBoolean(container, booleanOffset, false, true);
- }
-
- public static boolean unsafeCompareAndSetByte() {
- Container container = new Container();
- return unsafe.compareAndSetByte(container, byteOffset, (byte) 17, (byte) 121);
- }
-
- public static boolean unsafeCompareAndSetChar() {
- Container container = new Container();
- return unsafe.compareAndSetChar(container, charOffset, (char) 1025, (char) 1777);
- }
-
- public static boolean unsafeCompareAndSetShort() {
- Container container = new Container();
- return unsafe.compareAndSetShort(container, shortOffset, (short) 2232, (short) 12111);
- }
-
- public static boolean unsafeCompareAndSetInt() {
- Container container = new Container();
- return unsafe.compareAndSetInt(container, intOffset, 0xcafebabe, 0xbabefafa);
- }
-
- public static boolean unsafeCompareAndSetLong() {
- Container container = new Container();
- return unsafe.compareAndSetLong(container, longOffset, 0xdedababafafaL, 0xfafacecafafadedaL);
- }
-
- public static boolean unsafeCompareAndSetFloat() {
- Container container = new Container();
- return unsafe.compareAndSetFloat(container, floatOffset, 0.125f, 0.25f);
- }
-
- public static boolean unsafeCompareAndSetDouble() {
- Container container = new Container();
- return unsafe.compareAndSetDouble(container, doubleOffset, 0.125, 0.25);
- }
-
- public static boolean unsafeCompareAndSetReference() {
- Container container = new Container();
- return unsafe.compareAndSetReference(container, objectOffset, dummyValue, newDummyValue);
- }
-
- public static boolean unsafeCompareAndExchangeBoolean() {
- Container container = new Container();
- return unsafe.compareAndExchangeBoolean(container, booleanOffset, false, true);
- }
-
- public static byte unsafeCompareAndExchangeByte() {
- Container container = new Container();
- return unsafe.compareAndExchangeByte(container, byteOffset, (byte) 17, (byte) 31);
- }
-
- public static char unsafeCompareAndExchangeChar() {
- Container container = new Container();
- return unsafe.compareAndExchangeChar(container, charOffset, (char) 1025, (char) 4502);
- }
-
- public static short unsafeCompareAndExchangeShort() {
- Container container = new Container();
- return unsafe.compareAndExchangeShort(container, shortOffset, (short) 2232, (short) 8121);
- }
-
- public static int unsafeCompareAndExchangeInt() {
- Container container = new Container();
- return unsafe.compareAndExchangeInt(container, intOffset, 0xcafebabe, 0xbabefafa);
- }
-
- public static long unsafeCompareAndExchangeLong() {
- Container container = new Container();
- return unsafe.compareAndExchangeLong(container, longOffset, 0xdedababafafaL, 0xfafacecafafadedaL);
- }
-
- public static float unsafeCompareAndExchangeFloat() {
- Container container = new Container();
- return unsafe.compareAndExchangeFloat(container, floatOffset, 0.125f, 0.25f);
- }
-
- public static double unsafeCompareAndExchangeDouble() {
- Container container = new Container();
- return unsafe.compareAndExchangeDouble(container, doubleOffset, 0.125, 0.25);
- }
-
- public static Object unsafeCompareAndExchangeReference() {
- Container container = new Container();
- return unsafe.compareAndExchangeReference(container, objectOffset, dummyValue, newDummyValue);
- }
-
- @Test
- public void testCompareAndSet() {
- TargetDescription target = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getTarget();
- if (target.arch instanceof AMD64) {
- testGraph("unsafeCompareAndSetBoolean");
- testGraph("unsafeCompareAndSetByte");
- testGraph("unsafeCompareAndSetChar");
- testGraph("unsafeCompareAndSetShort");
- testGraph("unsafeCompareAndSetInt");
- testGraph("unsafeCompareAndSetLong");
- testGraph("unsafeCompareAndSetFloat");
- testGraph("unsafeCompareAndSetDouble");
- testGraph("unsafeCompareAndSetReference");
- testGraph("unsafeCompareAndExchangeBoolean");
- testGraph("unsafeCompareAndExchangeByte");
- testGraph("unsafeCompareAndExchangeChar");
- testGraph("unsafeCompareAndExchangeShort");
- testGraph("unsafeCompareAndExchangeInt");
- testGraph("unsafeCompareAndExchangeLong");
- testGraph("unsafeCompareAndExchangeFloat");
- testGraph("unsafeCompareAndExchangeDouble");
- testGraph("unsafeCompareAndExchangeReference");
- }
- test("unsafeCompareAndSetBoolean");
- test("unsafeCompareAndSetByte");
- test("unsafeCompareAndSetChar");
- test("unsafeCompareAndSetShort");
- test("unsafeCompareAndSetInt");
- test("unsafeCompareAndSetLong");
- test("unsafeCompareAndSetFloat");
- test("unsafeCompareAndSetDouble");
- test("unsafeCompareAndSetReference");
- test("unsafeCompareAndExchangeBoolean");
- test("unsafeCompareAndExchangeByte");
- test("unsafeCompareAndExchangeChar");
- test("unsafeCompareAndExchangeShort");
- test("unsafeCompareAndExchangeInt");
- test("unsafeCompareAndExchangeLong");
- test("unsafeCompareAndExchangeFloat");
- test("unsafeCompareAndExchangeDouble");
- test("unsafeCompareAndExchangeReference");
- }
-
- public static int unsafeGetAndAddByte() {
- Container container = new Container();
- return unsafe.getAndAddByte(container, byteOffset, (byte) 2);
- }
-
- public static int unsafeGetAndAddChar() {
- Container container = new Container();
- return unsafe.getAndAddChar(container, charOffset, (char) 250);
- }
-
- public static int unsafeGetAndAddShort() {
- Container container = new Container();
- return unsafe.getAndAddShort(container, shortOffset, (short) 1250);
- }
-
- public static int unsafeGetAndAddInt() {
- Container container = new Container();
- return unsafe.getAndAddInt(container, intOffset, 104501);
- }
-
- public static long unsafeGetAndAddLong() {
- Container container = new Container();
- return unsafe.getAndAddLong(container, longOffset, 0x123456abcdL);
- }
-
- @Test
- public void testGetAndAdd() {
- TargetDescription target = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getTarget();
- if (target.arch instanceof AMD64) {
- testGraph("unsafeGetAndAddByte");
- testGraph("unsafeGetAndAddChar");
- testGraph("unsafeGetAndAddShort");
- }
- if (target.arch instanceof AMD64 || target.arch instanceof AArch64) {
- testGraph("unsafeGetAndAddInt");
- testGraph("unsafeGetAndAddLong");
- }
- test("unsafeGetAndAddByte");
- test("unsafeGetAndAddChar");
- test("unsafeGetAndAddShort");
- test("unsafeGetAndAddInt");
- test("unsafeGetAndAddLong");
- }
-
- public static boolean unsafeGetAndSetBoolean() {
- Container container = new Container();
- return unsafe.getAndSetBoolean(container, booleanOffset, true);
- }
-
- public static byte unsafeGetAndSetByte() {
- Container container = new Container();
- return unsafe.getAndSetByte(container, byteOffset, (byte) 129);
- }
-
- public static char unsafeGetAndSetChar() {
- Container container = new Container();
- return unsafe.getAndSetChar(container, charOffset, (char) 21111);
- }
-
- public static short unsafeGetAndSetShort() {
- Container container = new Container();
- return unsafe.getAndSetShort(container, shortOffset, (short) 21111);
- }
-
- public static int unsafeGetAndSetInt() {
- Container container = new Container();
- return unsafe.getAndSetInt(container, intOffset, 0x1234af);
- }
-
- public static long unsafeGetAndSetLong() {
- Container container = new Container();
- return unsafe.getAndSetLong(container, longOffset, 0x12345678abL);
- }
-
- public static Object unsafeGetAndSetReference() {
- Container container = new Container();
- container.objectField = null;
- Container other = new Container();
- return unsafe.getAndSetReference(container, objectOffset, other);
- }
-
- @Test
- public void testGetAndSet() {
- TargetDescription target = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getTarget();
- if (target.arch instanceof AMD64) {
- testGraph("unsafeGetAndSetBoolean");
- testGraph("unsafeGetAndSetByte");
- testGraph("unsafeGetAndSetChar");
- testGraph("unsafeGetAndSetShort");
- }
- if (target.arch instanceof AMD64 || target.arch instanceof AArch64) {
- testGraph("unsafeGetAndSetInt");
- testGraph("unsafeGetAndSetLong");
- testGraph("unsafeGetAndSetReference");
- }
- test("unsafeGetAndSetBoolean");
- test("unsafeGetAndSetByte");
- test("unsafeGetAndSetChar");
- test("unsafeGetAndSetShort");
- test("unsafeGetAndSetInt");
- test("unsafeGetAndSetLong");
- test("unsafeGetAndSetReference");
- }
-
- public static void fieldInstance() {
- JdkInternalMiscUnsafeAccessTestBoolean.testFieldInstance();
- }
-
- @Test
- public void testFieldInstance() {
- test(new OptionValues(getInitialOptions(), HighTier.Options.Inline, false), "fieldInstance");
- }
-
- public static void array() {
- JdkInternalMiscUnsafeAccessTestBoolean.testArray();
- }
-
- @Test
- public void testArray() {
- test(new OptionValues(getInitialOptions(), HighTier.Options.Inline, false), "array");
- }
-
- public static void fieldStatic() {
- JdkInternalMiscUnsafeAccessTestBoolean.testFieldStatic();
- }
-
- @Test
- public void testFieldStatic() {
- test(new OptionValues(getInitialOptions(), HighTier.Options.Inline, false), "fieldStatic");
- }
-
- public static void assertEquals(Object seen, Object expected, String message) {
- if (seen != expected) {
- throw new AssertionError(message + " - seen: " + seen + ", expected: " + expected);
- }
- }
-
- public static class JdkInternalMiscUnsafeAccessTestBoolean {
- static final int ITERATIONS = 100000;
-
- static final int WEAK_ATTEMPTS = 10;
-
- static final long V_OFFSET;
-
- static final Object STATIC_V_BASE;
-
- static final long STATIC_V_OFFSET;
-
- static final int ARRAY_OFFSET;
-
- static final int ARRAY_SHIFT;
-
- static {
- try {
- Field staticVField = UnsafeReplacementsTest.JdkInternalMiscUnsafeAccessTestBoolean.class.getDeclaredField("staticV");
- STATIC_V_BASE = unsafe.staticFieldBase(staticVField);
- STATIC_V_OFFSET = unsafe.staticFieldOffset(staticVField);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- try {
- Field vField = UnsafeReplacementsTest.JdkInternalMiscUnsafeAccessTestBoolean.class.getDeclaredField("v");
- V_OFFSET = unsafe.objectFieldOffset(vField);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- ARRAY_OFFSET = unsafe.arrayBaseOffset(boolean[].class);
- int ascale = unsafe.arrayIndexScale(boolean[].class);
- ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(ascale);
- }
-
- static boolean staticV;
-
- boolean v;
-
- @BytecodeParserForceInline
- public static void testFieldInstance() {
- JdkInternalMiscUnsafeAccessTestBoolean t = new JdkInternalMiscUnsafeAccessTestBoolean();
- for (int c = 0; c < ITERATIONS; c++) {
- testAccess(t, V_OFFSET);
- }
- }
-
- public static void testFieldStatic() {
- for (int c = 0; c < ITERATIONS; c++) {
- testAccess(STATIC_V_BASE, STATIC_V_OFFSET);
- }
- }
-
- public static void testArray() {
- boolean[] array = new boolean[10];
- for (int c = 0; c < ITERATIONS; c++) {
- for (int i = 0; i < array.length; i++) {
- testAccess(array, (((long) i) << ARRAY_SHIFT) + ARRAY_OFFSET);
- }
- }
- }
-
- // Checkstyle: stop
- @BytecodeParserForceInline
- public static void testAccess(Object base, long offset) {
- // Advanced compare
- {
- boolean r = unsafe.compareAndExchangeBoolean(base, offset, false, true);
- assertEquals(r, false, "success compareAndExchange boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "success compareAndExchange boolean value");
- }
-
- {
- boolean r = unsafe.compareAndExchangeBoolean(base, offset, false, false);
- assertEquals(r, true, "failing compareAndExchange boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "failing compareAndExchange boolean value");
- }
-
- {
- boolean r = unsafe.compareAndExchangeBooleanAcquire(base, offset, true, false);
- assertEquals(r, true, "success compareAndExchangeAcquire boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, false, "success compareAndExchangeAcquire boolean value");
- }
-
- {
- boolean r = unsafe.compareAndExchangeBooleanAcquire(base, offset, true, false);
- assertEquals(r, false, "failing compareAndExchangeAcquire boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, false, "failing compareAndExchangeAcquire boolean value");
- }
-
- {
- boolean r = unsafe.compareAndExchangeBooleanRelease(base, offset, false, true);
- assertEquals(r, false, "success compareAndExchangeRelease boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "success compareAndExchangeRelease boolean value");
- }
-
- {
- boolean r = unsafe.compareAndExchangeBooleanRelease(base, offset, false, false);
- assertEquals(r, true, "failing compareAndExchangeRelease boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "failing compareAndExchangeRelease boolean value");
- }
-
- {
- boolean success = false;
- for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
- success = unsafe.weakCompareAndSetBooleanPlain(base, offset, true, false);
- }
- assertEquals(success, true, "weakCompareAndSetPlain boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, false, "weakCompareAndSetPlain boolean value");
- }
-
- {
- boolean success = false;
- for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
- success = unsafe.weakCompareAndSetBooleanAcquire(base, offset, false, true);
- }
- assertEquals(success, true, "weakCompareAndSetAcquire boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "weakCompareAndSetAcquire boolean");
- }
-
- {
- boolean success = false;
- for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
- success = unsafe.weakCompareAndSetBooleanRelease(base, offset, true, false);
- }
- assertEquals(success, true, "weakCompareAndSetRelease boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, false, "weakCompareAndSetRelease boolean");
- }
-
- {
- boolean success = false;
- for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
- success = unsafe.weakCompareAndSetBoolean(base, offset, false, true);
- }
- assertEquals(success, true, "weakCompareAndSet boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "weakCompareAndSet boolean");
- }
-
- unsafe.putBoolean(base, offset, false);
-
- // Compare set and get
- {
- boolean o = unsafe.getAndSetBoolean(base, offset, true);
- assertEquals(o, false, "getAndSet boolean");
- boolean x = unsafe.getBoolean(base, offset);
- assertEquals(x, true, "getAndSet boolean value");
- }
-
- }
- // Checkstyle: resume
- }
-
- public static boolean unsafeGetPutBoolean() {
- Container container = new Container();
- unsafe.putBoolean(container, booleanOffset, true);
- return unsafe.getBoolean(container, booleanOffset);
- }
-
- public static byte unsafeGetPutByte() {
- Container container = new Container();
- unsafe.putByte(container, byteOffset, (byte) 0x12);
- return unsafe.getByte(container, byteOffset);
- }
-
- public static short unsafeGetPutShort() {
- Container container = new Container();
- unsafe.putShort(container, shortOffset, (short) 0x1234);
- return unsafe.getShort(container, shortOffset);
- }
-
- public static char unsafeGetPutChar() {
- Container container = new Container();
- unsafe.putChar(container, charOffset, 'x');
- return unsafe.getChar(container, charOffset);
- }
-
- public static int unsafeGetPutInt() {
- Container container = new Container();
- unsafe.putInt(container, intOffset, 0x01234567);
- return unsafe.getInt(container, intOffset);
- }
-
- public static long unsafeGetPutLong() {
- Container container = new Container();
- unsafe.putLong(container, longOffset, 0x01234567890ABCDEFL);
- return unsafe.getLong(container, longOffset);
- }
-
- public static float unsafeGetPutFloat() {
- Container container = new Container();
- unsafe.putFloat(container, floatOffset, 1.234F);
- return unsafe.getFloat(container, floatOffset);
- }
-
- public static double unsafeGetPutDouble() {
- Container container = new Container();
- unsafe.putDouble(container, doubleOffset, 1.23456789);
- return unsafe.getDouble(container, doubleOffset);
- }
-
- public static Object unsafeGetPutReference() {
- Container container = new Container();
- unsafe.putReference(container, objectOffset, "Hello there");
- return unsafe.getReference(container, objectOffset);
- }
-
- public static boolean unsafeGetPutBooleanOpaque() {
- Container container = new Container();
- unsafe.putBooleanOpaque(container, booleanOffset, true);
- return unsafe.getBooleanOpaque(container, booleanOffset);
- }
-
- public static byte unsafeGetPutByteOpaque() {
- Container container = new Container();
- unsafe.putByteOpaque(container, byteOffset, (byte) 0x12);
- return unsafe.getByteOpaque(container, byteOffset);
- }
-
- public static short unsafeGetPutShortOpaque() {
- Container container = new Container();
- unsafe.putShortOpaque(container, shortOffset, (short) 0x1234);
- return unsafe.getShortOpaque(container, shortOffset);
- }
-
- public static char unsafeGetPutCharOpaque() {
- Container container = new Container();
- unsafe.putCharOpaque(container, charOffset, 'x');
- return unsafe.getCharOpaque(container, charOffset);
- }
-
- public static int unsafeGetPutIntOpaque() {
- Container container = new Container();
- unsafe.putIntOpaque(container, intOffset, 0x01234567);
- return unsafe.getIntOpaque(container, intOffset);
- }
-
- public static long unsafeGetPutLongOpaque() {
- Container container = new Container();
- unsafe.putLongOpaque(container, longOffset, 0x01234567890ABCDEFL);
- return unsafe.getLongOpaque(container, longOffset);
- }
-
- public static float unsafeGetPutFloatOpaque() {
- Container container = new Container();
- unsafe.putFloatOpaque(container, floatOffset, 1.234F);
- return unsafe.getFloatOpaque(container, floatOffset);
- }
-
- public static double unsafeGetPutDoubleOpaque() {
- Container container = new Container();
- unsafe.putDoubleOpaque(container, doubleOffset, 1.23456789);
- return unsafe.getDoubleOpaque(container, doubleOffset);
- }
-
- public static Object unsafeGetPutReferenceOpaque() {
- Container container = new Container();
- unsafe.putReferenceOpaque(container, objectOffset, "Hello there");
- return unsafe.getReferenceOpaque(container, objectOffset);
- }
-
- public static boolean unsafeGetPutBooleanRA() {
- Container container = new Container();
- unsafe.putBooleanRelease(container, booleanOffset, true);
- return unsafe.getBooleanAcquire(container, booleanOffset);
- }
-
- public static byte unsafeGetPutByteRA() {
- Container container = new Container();
- unsafe.putByteRelease(container, byteOffset, (byte) 0x12);
- return unsafe.getByteAcquire(container, byteOffset);
- }
-
- public static short unsafeGetPutShortRA() {
- Container container = new Container();
- unsafe.putShortRelease(container, shortOffset, (short) 0x1234);
- return unsafe.getShortAcquire(container, shortOffset);
- }
-
- public static char unsafeGetPutCharRA() {
- Container container = new Container();
- unsafe.putCharRelease(container, charOffset, 'x');
- return unsafe.getCharAcquire(container, charOffset);
- }
-
- public static int unsafeGetPutIntRA() {
- Container container = new Container();
- unsafe.putIntRelease(container, intOffset, 0x01234567);
- return unsafe.getIntAcquire(container, intOffset);
- }
-
- public static long unsafeGetPutLongRA() {
- Container container = new Container();
- unsafe.putLongRelease(container, longOffset, 0x01234567890ABCDEFL);
- return unsafe.getLongAcquire(container, longOffset);
- }
-
- public static float unsafeGetPutFloatRA() {
- Container container = new Container();
- unsafe.putFloatRelease(container, floatOffset, 1.234F);
- return unsafe.getFloatAcquire(container, floatOffset);
- }
-
- public static double unsafeGetPutDoubleRA() {
- Container container = new Container();
- unsafe.putDoubleRelease(container, doubleOffset, 1.23456789);
- return unsafe.getDoubleAcquire(container, doubleOffset);
- }
-
- public static Object unsafeGetPutReferenceRA() {
- Container container = new Container();
- unsafe.putReferenceRelease(container, objectOffset, "Hello there");
- return unsafe.getReferenceAcquire(container, objectOffset);
- }
-
- public static boolean unsafeGetPutBooleanVolatile() {
- Container container = new Container();
- unsafe.putBooleanVolatile(container, booleanOffset, true);
- return unsafe.getBooleanVolatile(container, booleanOffset);
- }
-
- public static byte unsafeGetPutByteVolatile() {
- Container container = new Container();
- unsafe.putByteVolatile(container, byteOffset, (byte) 0x12);
- return unsafe.getByteVolatile(container, byteOffset);
- }
-
- public static short unsafeGetPutShortVolatile() {
- Container container = new Container();
- unsafe.putShortVolatile(container, shortOffset, (short) 0x1234);
- return unsafe.getShortVolatile(container, shortOffset);
- }
-
- public static char unsafeGetPutCharVolatile() {
- Container container = new Container();
- unsafe.putCharVolatile(container, charOffset, 'x');
- return unsafe.getCharVolatile(container, charOffset);
- }
-
- public static int unsafeGetPutIntVolatile() {
- Container container = new Container();
- unsafe.putIntVolatile(container, intOffset, 0x01234567);
- return unsafe.getIntVolatile(container, intOffset);
- }
-
- public static long unsafeGetPutLongVolatile() {
- Container container = new Container();
- unsafe.putLongVolatile(container, longOffset, 0x01234567890ABCDEFL);
- return unsafe.getLongVolatile(container, longOffset);
- }
-
- public static float unsafeGetPutFloatVolatile() {
- Container container = new Container();
- unsafe.putFloatVolatile(container, floatOffset, 1.234F);
- return unsafe.getFloatVolatile(container, floatOffset);
- }
-
- public static double unsafeGetPutDoubleVolatile() {
- Container container = new Container();
- unsafe.putDoubleVolatile(container, doubleOffset, 1.23456789);
- return unsafe.getDoubleVolatile(container, doubleOffset);
- }
-
- public static Object unsafeGetPutReferenceVolatile() {
- Container container = new Container();
- unsafe.putReferenceVolatile(container, objectOffset, "Hello there");
- return unsafe.getReferenceVolatile(container, objectOffset);
- }
-
- @Test
- public void testUnsafeGetPutPlain() {
- testGraph("unsafeGetPutBoolean");
- testGraph("unsafeGetPutByte");
- testGraph("unsafeGetPutShort");
- testGraph("unsafeGetPutChar");
- testGraph("unsafeGetPutInt");
- testGraph("unsafeGetPutLong");
- testGraph("unsafeGetPutFloat");
- testGraph("unsafeGetPutDouble");
- testGraph("unsafeGetPutObject");
-
- test("unsafeGetPutBoolean");
- test("unsafeGetPutByte");
- test("unsafeGetPutShort");
- test("unsafeGetPutChar");
- test("unsafeGetPutInt");
- test("unsafeGetPutLong");
- test("unsafeGetPutFloat");
- test("unsafeGetPutDouble");
- test("unsafeGetPutObject");
- }
-
- @Test
- public void testUnsafeGetPutOpaque() {
- testGraph("unsafeGetPutBooleanOpaque");
- testGraph("unsafeGetPutByteOpaque");
- testGraph("unsafeGetPutShortOpaque");
- testGraph("unsafeGetPutCharOpaque");
- testGraph("unsafeGetPutIntOpaque");
- testGraph("unsafeGetPutLongOpaque");
- testGraph("unsafeGetPutFloatOpaque");
- testGraph("unsafeGetPutDoubleOpaque");
- testGraph("unsafeGetPutObjectOpaque");
-
- test("unsafeGetPutBooleanOpaque");
- test("unsafeGetPutByteOpaque");
- test("unsafeGetPutShortOpaque");
- test("unsafeGetPutCharOpaque");
- test("unsafeGetPutIntOpaque");
- test("unsafeGetPutLongOpaque");
- test("unsafeGetPutFloatOpaque");
- test("unsafeGetPutDoubleOpaque");
- test("unsafeGetPutObjectOpaque");
- }
-
- @Test
- public void testUnsafeGetPutReleaseAcquire() {
- testGraph("unsafeGetPutBooleanRA");
- testGraph("unsafeGetPutByteRA");
- testGraph("unsafeGetPutShortRA");
- testGraph("unsafeGetPutCharRA");
- testGraph("unsafeGetPutIntRA");
- testGraph("unsafeGetPutLongRA");
- testGraph("unsafeGetPutFloatRA");
- testGraph("unsafeGetPutDoubleRA");
- testGraph("unsafeGetPutReferenceRA");
-
- test("unsafeGetPutBooleanRA");
- test("unsafeGetPutByteRA");
- test("unsafeGetPutShortRA");
- test("unsafeGetPutCharRA");
- test("unsafeGetPutIntRA");
- test("unsafeGetPutLongRA");
- test("unsafeGetPutFloatRA");
- test("unsafeGetPutDoubleRA");
- test("unsafeGetPutReferenceRA");
- }
-
- @Test
- public void testUnsafeGetPutVolatile() {
- testGraph("unsafeGetPutBooleanVolatile");
- testGraph("unsafeGetPutByteVolatile");
- testGraph("unsafeGetPutShortVolatile");
- testGraph("unsafeGetPutCharVolatile");
- testGraph("unsafeGetPutIntVolatile");
- testGraph("unsafeGetPutLongVolatile");
- testGraph("unsafeGetPutFloatVolatile");
- testGraph("unsafeGetPutDoubleVolatile");
- testGraph("unsafeGetPutReferenceVolatile");
-
- test("unsafeGetPutBooleanVolatile");
- test("unsafeGetPutByteVolatile");
- test("unsafeGetPutShortVolatile");
- test("unsafeGetPutCharVolatile");
- test("unsafeGetPutIntVolatile");
- test("unsafeGetPutLongVolatile");
- test("unsafeGetPutFloatVolatile");
- test("unsafeGetPutDoubleVolatile");
- test("unsafeGetPutReferenceVolatile");
- }
-}