< prev index next >
test/hotspot/jtreg/compiler/valhalla/valuetypes/TestIntrinsics.java
Print this page
*** 332,351 ****
Asserts.assertEQ(res, vt.toString());
}
private static final Unsafe U = Unsafe.getUnsafe();
private static final long X_OFFSET;
static {
try {
Field xField = MyValue1.class.getDeclaredField("x");
X_OFFSET = U.objectFieldOffset(xField);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
! @Test()
public int test21(MyValue1 v) {
return U.getInt(v, X_OFFSET);
}
@DontCompile
--- 332,361 ----
Asserts.assertEQ(res, vt.toString());
}
private static final Unsafe U = Unsafe.getUnsafe();
private static final long X_OFFSET;
+ private static final long Y_OFFSET;
+ private static final long V1_OFFSET;
+ private static final boolean V1_FLATTENED;
static {
try {
Field xField = MyValue1.class.getDeclaredField("x");
X_OFFSET = U.objectFieldOffset(xField);
+ Field yField = MyValue1.class.getDeclaredField("y");
+ Y_OFFSET = U.objectFieldOffset(yField);
+ Field v1Field = MyValue1.class.getDeclaredField("v1");
+ V1_OFFSET = U.objectFieldOffset(v1Field);
+ V1_FLATTENED = U.isFlattened(v1Field);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
! protected static final String CALL_Unsafe = START + "CallStaticJava" + MID + "# Static jdk.internal.misc.Unsafe::" + END;
!
! @Test(failOn=CALL_Unsafe)
public int test21(MyValue1 v) {
return U.getInt(v, X_OFFSET);
}
@DontCompile
*** 353,379 ****
MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
int res = test21(v);
Asserts.assertEQ(res, v.x);
}
! @Test()
public void test22(MyValue1 v) {
- try {
v = U.makePrivateBuffer(v);
! U.putInt(v, X_OFFSET, 0);
! } finally {
v = U.finishPrivateBuffer(v);
! }
}
@DontCompile
public void test22_verifier(boolean warmup) {
MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
! test22(v);
}
! @Test()
public int test23(MyValue1 v, long offset) {
return U.getInt(v, offset);
}
@DontCompile
--- 363,389 ----
MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
int res = test21(v);
Asserts.assertEQ(res, v.x);
}
! MyValue1.val test22_vt;
! @Test(failOn=CALL_Unsafe + ALLOC)
public void test22(MyValue1 v) {
v = U.makePrivateBuffer(v);
! U.putInt(v, X_OFFSET, rI);
v = U.finishPrivateBuffer(v);
! test22_vt = v;
}
@DontCompile
public void test22_verifier(boolean warmup) {
MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
! test22(v.setX(v, 0));
! Asserts.assertEQ(test22_vt.hash(), v.hash());
}
! @Test(failOn=CALL_Unsafe)
public int test23(MyValue1 v, long offset) {
return U.getInt(v, offset);
}
@DontCompile
*** 383,393 ****
Asserts.assertEQ(res, v.x);
}
MyValue1.val test24_vt = MyValue1.createWithFieldsInline(rI, rL);
! @Test()
public int test24(long offset) {
return U.getInt(test24_vt, offset);
}
@DontCompile
--- 393,403 ----
Asserts.assertEQ(res, v.x);
}
MyValue1.val test24_vt = MyValue1.createWithFieldsInline(rI, rL);
! @Test(failOn=CALL_Unsafe)
public int test24(long offset) {
return U.getInt(test24_vt, offset);
}
@DontCompile
*** 448,463 ****
} catch (Exception e) {
throw new RuntimeException(e);
}
}
! @Test()
public MyValue1 test27() {
! return (MyValue1)U.getObject(this, TEST27_OFFSET);
}
@DontCompile
public void test27_verifier(boolean warmup) {
MyValue1 res = test27();
Asserts.assertEQ(res.hash(), test24_vt.hash());
}
}
--- 458,718 ----
} catch (Exception e) {
throw new RuntimeException(e);
}
}
! @Test(failOn=CALL_Unsafe)
public MyValue1 test27() {
! return (MyValue1)U.getReference(this, TEST27_OFFSET);
}
@DontCompile
public void test27_verifier(boolean warmup) {
MyValue1 res = test27();
Asserts.assertEQ(res.hash(), test24_vt.hash());
}
+
+ // Mismatched type
+ @Test(failOn=CALL_Unsafe)
+ public int test28(MyValue1 v) {
+ return U.getByte(v, X_OFFSET);
+ }
+
+ @DontCompile
+ public void test28_verifier(boolean warmup) {
+ MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
+ int res = test28(v);
+ if (java.nio.ByteOrder.nativeOrder() == java.nio.ByteOrder.LITTLE_ENDIAN) {
+ Asserts.assertEQ(res, (int)((byte)v.x));
+ } else {
+ Asserts.assertEQ(res, (int)((byte)Integer.reverseBytes(v.x)));
+ }
+ }
+
+ // Wrong alignment
+ @Test(failOn=CALL_Unsafe)
+ public long test29(MyValue1 v) {
+ // Read the field that's guaranteed to not be last in the
+ // value so we don't read out of the value
+ if (X_OFFSET < Y_OFFSET) {
+ return U.getInt(v, X_OFFSET+1);
+ }
+ return U.getLong(v, Y_OFFSET+1);
+ }
+
+ @DontCompile
+ public void test29_verifier(boolean warmup) {
+ MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
+ long res = test29(v);
+ if (java.nio.ByteOrder.nativeOrder() == java.nio.ByteOrder.LITTLE_ENDIAN) {
+ if (X_OFFSET < Y_OFFSET) {
+ Asserts.assertEQ(((int)res) << 8, (v.x >> 8) << 8);
+ } else {
+ Asserts.assertEQ(res << 8, (v.y >> 8) << 8);
+ }
+ } else {
+ if (X_OFFSET < Y_OFFSET) {
+ Asserts.assertEQ(((int)res), v.x >>> 8);
+ } else {
+ Asserts.assertEQ(res, v.y >>> 8);
+ }
+ }
+ }
+
+ // getValue to retrieve flattened field from value
+ @Test(failOn=CALL_Unsafe)
+ public MyValue2 test30(MyValue1 v) {
+ if (V1_FLATTENED) {
+ return U.getValue(v, V1_OFFSET, MyValue2.class);
+ }
+ return (MyValue2)U.getReference(v, V1_OFFSET);
+ }
+
+ @DontCompile
+ public void test30_verifier(boolean warmup) {
+ MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
+ MyValue2 res = test30(v);
+ Asserts.assertEQ(res.hash(), v.v1.hash());
+ }
+
+ MyValue1.val test31_vt;
+ private static final long TEST31_VT_OFFSET;
+ private static final boolean TEST31_VT_FLATTENED;
+ static {
+ try {
+ Field test31_vt_Field = TestIntrinsics.class.getDeclaredField("test31_vt");
+ TEST31_VT_OFFSET = U.objectFieldOffset(test31_vt_Field);
+ TEST31_VT_FLATTENED = U.isFlattened(test31_vt_Field);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // getValue to retrieve flattened field from object
+ @Test(failOn=CALL_Unsafe)
+ public MyValue1 test31() {
+ if (TEST31_VT_FLATTENED) {
+ return U.getValue(this, TEST31_VT_OFFSET, MyValue1.class);
+ }
+ return (MyValue1)U.getReference(this, TEST31_VT_OFFSET);
+ }
+
+ @DontCompile
+ public void test31_verifier(boolean warmup) {
+ test31_vt = MyValue1.createWithFieldsInline(rI, rL);
+ MyValue1 res = test31();
+ Asserts.assertEQ(res.hash(), test31_vt.hash());
+ }
+
+ // putValue to set flattened field in object
+ @Test(failOn=CALL_Unsafe)
+ public void test32(MyValue1 vt) {
+ if (TEST31_VT_FLATTENED) {
+ U.putValue(this, TEST31_VT_OFFSET, MyValue1.class, vt);
+ } else {
+ U.putReference(this, TEST31_VT_OFFSET, vt);
+ }
+ }
+
+ @DontCompile
+ public void test32_verifier(boolean warmup) {
+ MyValue1 vt = MyValue1.createWithFieldsInline(rI, rL);
+ test31_vt = MyValue1.createDefaultInline();
+ test32(vt);
+ Asserts.assertEQ(vt.hash(), test31_vt.hash());
+ }
+
+ private static final int TEST33_BASE_OFFSET;
+ private static final int TEST33_INDEX_SCALE;
+ private static final boolean TEST33_FLATTENED_ARRAY;
+ static {
+ try {
+ TEST33_BASE_OFFSET = U.arrayBaseOffset(MyValue1[].class);
+ TEST33_INDEX_SCALE = U.arrayIndexScale(MyValue1[].class);
+ TEST33_FLATTENED_ARRAY = U.isFlattenedArray(MyValue1[].class);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ // getValue to retrieve flattened field from array
+ @Test(failOn=CALL_Unsafe)
+ public MyValue1 test33(MyValue1[] arr) {
+ if (TEST33_FLATTENED_ARRAY) {
+ return U.getValue(arr, TEST33_BASE_OFFSET + TEST33_INDEX_SCALE, MyValue1.class);
+ }
+ return (MyValue1)U.getReference(arr, TEST33_BASE_OFFSET + TEST33_INDEX_SCALE);
+ }
+
+ @DontCompile
+ public void test33_verifier(boolean warmup) {
+ MyValue1[] arr = new MyValue1[2];
+ MyValue1 vt = MyValue1.createWithFieldsInline(rI, rL);
+ arr[1] = vt;
+ MyValue1 res = test33(arr);
+ Asserts.assertEQ(res.hash(), vt.hash());
+ }
+
+ // putValue to set flattened field in array
+ @Test(failOn=CALL_Unsafe)
+ public void test34(MyValue1[] arr, MyValue1 vt) {
+ if (TEST33_FLATTENED_ARRAY) {
+ U.putValue(arr, TEST33_BASE_OFFSET + TEST33_INDEX_SCALE, MyValue1.class, vt);
+ } else {
+ U.putReference(arr, TEST33_BASE_OFFSET + TEST33_INDEX_SCALE, vt);
+ }
+ }
+
+ @DontCompile
+ public void test34_verifier(boolean warmup) {
+ MyValue1[] arr = new MyValue1[2];
+ MyValue1 vt = MyValue1.createWithFieldsInline(rI, rL);
+ test34(arr, vt);
+ Asserts.assertEQ(arr[1].hash(), vt.hash());
+ }
+
+ // getValue to retrieve flattened field from object with unknown
+ // container type
+ @Test(failOn=CALL_Unsafe)
+ public MyValue1 test35(Object o) {
+ if (TEST31_VT_FLATTENED) {
+ return U.getValue(o, TEST31_VT_OFFSET, MyValue1.class);
+ }
+ return (MyValue1)U.getReference(o, TEST31_VT_OFFSET);
+ }
+
+ @DontCompile
+ public void test35_verifier(boolean warmup) {
+ test31_vt = MyValue1.createWithFieldsInline(rI, rL);
+ MyValue1 res = test35(this);
+ Asserts.assertEQ(res.hash(), test31_vt.hash());
+ }
+
+ // getValue to retrieve flattened field from object at unknown
+ // offset
+ @Test(failOn=CALL_Unsafe)
+ public MyValue1 test36(long offset) {
+ if (TEST31_VT_FLATTENED) {
+ return U.getValue(this, offset, MyValue1.class);
+ }
+ return (MyValue1)U.getReference(this, offset);
+ }
+
+ @DontCompile
+ public void test36_verifier(boolean warmup) {
+ test31_vt = MyValue1.createWithFieldsInline(rI, rL);
+ MyValue1 res = test36(TEST31_VT_OFFSET);
+ Asserts.assertEQ(res.hash(), test31_vt.hash());
+ }
+
+ // putValue to set flattened field in object with unknown
+ // container
+ @Test(failOn=CALL_Unsafe)
+ public void test37(Object o, MyValue1 vt) {
+ if (TEST31_VT_FLATTENED) {
+ U.putValue(o, TEST31_VT_OFFSET, MyValue1.class, vt);
+ } else {
+ U.putReference(o, TEST31_VT_OFFSET, vt);
+ }
+ }
+
+ @DontCompile
+ public void test37_verifier(boolean warmup) {
+ MyValue1 vt = MyValue1.createWithFieldsInline(rI, rL);
+ test31_vt = MyValue1.createDefaultInline();
+ test37(this, vt);
+ Asserts.assertEQ(vt.hash(), test31_vt.hash());
+ }
+
+ // putValue to set flattened field in object, non value argument
+ // to store
+ @Test(match = { CALL_Unsafe }, matchCount = { 1 })
+ public void test38(Object o) {
+ if (TEST31_VT_FLATTENED) {
+ U.putValue(this, TEST31_VT_OFFSET, MyValue1.class, o);
+ } else {
+ U.putReference(this, TEST31_VT_OFFSET, o);
+ }
+ }
+
+ @DontCompile
+ public void test38_verifier(boolean warmup) {
+ MyValue1 vt = MyValue1.createWithFieldsInline(rI, rL);
+ test31_vt = MyValue1.createDefaultInline();
+ test38(vt);
+ Asserts.assertEQ(vt.hash(), test31_vt.hash());
+ }
+
+ @Test(failOn=CALL_Unsafe)
+ public MyValue1 test39(MyValue1 v) {
+ v = U.makePrivateBuffer(v);
+ U.putInt(v, X_OFFSET, rI);
+ v = U.finishPrivateBuffer(v);
+ return v;
+ }
+
+ @DontCompile
+ public void test39_verifier(boolean warmup) {
+ MyValue1 v = MyValue1.createWithFieldsInline(rI, rL);
+ MyValue1 res = test39(v.setX(v, 0));
+ Asserts.assertEQ(res.hash(), v.hash());
+ }
}
< prev index next >