src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ea/EATestBase.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ea/EATestBase.java Thu Nov 14 11:16:14 2019 -0800
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ea/EATestBase.java Thu Nov 14 12:21:00 2019 -0800
@@ -87,6 +87,46 @@
public int hashCode() {
return x + 13 * y;
}
+
+ public static final long fieldOffset1;
+ public static final long fieldOffset2;
+ public static final boolean firstFieldIsX;
+
+ static {
+ try {
+ long localFieldOffset1 = UNSAFE.objectFieldOffset(EATestBase.TestClassInt.class.getField("x"));
+ // Make the fields 8 byte aligned (Required for testing setLong on Architectures
+ // which does not support unaligned memory access
+ if (localFieldOffset1 % 8 == 0) {
+ fieldOffset1 = localFieldOffset1;
+ fieldOffset2 = UNSAFE.objectFieldOffset(EATestBase.TestClassInt.class.getField("y"));
+ firstFieldIsX = true;
+ } else {
+ fieldOffset1 = UNSAFE.objectFieldOffset(EATestBase.TestClassInt.class.getField("y"));
+ fieldOffset2 = UNSAFE.objectFieldOffset(EATestBase.TestClassInt.class.getField("z"));
+ firstFieldIsX = false;
+ }
+ assert fieldOffset2 == fieldOffset1 + 4;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void setFirstField(int v) {
+ if (firstFieldIsX) {
+ x = v;
+ } else {
+ y = v;
+ }
+ }
+
+ public void setSecondField(int v) {
+ if (firstFieldIsX) {
+ y = v;
+ } else {
+ z = v;
+ }
+ }
}
public static class TestClassObject {