46 "-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders",
47 "-XX:-AlignVector");
48 TestFramework.runWithFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
49 "-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders",
50 "-XX:+AlignVector");
51 TestFramework.runWithFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
52 "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders",
53 "-XX:-AlignVector");
54 TestFramework.runWithFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
55 "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders",
56 "-XX:+AlignVector");
57 }
58
59 static int size = 1024;
60 static int sizeBytes = 8 * size;
61 static byte[] byteArray = new byte[sizeBytes];
62 static long[] longArray = new long[size];
63
64 @Test
65 @IR(counts = { IRNode.LOAD_VECTOR_L, ">=1", IRNode.STORE_VECTOR, ">=1" },
66 applyIfOr = { "UseCompactObjectHeaders", "false", "AlignVector", "false" },
67 applyIfPlatform = {"64-bit", "true"},
68 applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"})
69 public static void test(byte[] dest, long[] src) {
70 for (int i = 0; i < src.length; i++) {
71 if ((i < 0) || (8 > sizeBytes - i)) {
72 throw new IndexOutOfBoundsException();
73 }
74 UNSAFE.putLongUnaligned(dest, UNSAFE.ARRAY_BYTE_BASE_OFFSET + i * 8, src[i]);
75 // For UseCompactObjectHeaders and AlignVector, we must 8-byte align all vector loads/stores.
76 // But the long-stores to the byte-array are never aligned:
77 // adr = base + UNSAFE.ARRAY_BYTE_BASE_OFFSET + 8*iter
78 // = 16 (or 12 if UseCompactObjectHeaders=true)
79 }
80 }
81
82 @Run(test = "test")
83 public static void test_runner() {
84 test(byteArray, longArray);
85 }
86 }
|
46 "-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders",
47 "-XX:-AlignVector");
48 TestFramework.runWithFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
49 "-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders",
50 "-XX:+AlignVector");
51 TestFramework.runWithFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
52 "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders",
53 "-XX:-AlignVector");
54 TestFramework.runWithFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
55 "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders",
56 "-XX:+AlignVector");
57 }
58
59 static int size = 1024;
60 static int sizeBytes = 8 * size;
61 static byte[] byteArray = new byte[sizeBytes];
62 static long[] longArray = new long[size];
63
64 @Test
65 @IR(counts = { IRNode.LOAD_VECTOR_L, ">=1", IRNode.STORE_VECTOR, ">=1" },
66 applyIfPlatform = {"64-bit", "true"},
67 applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"})
68 public static void test(byte[] dest, long[] src) {
69 for (int i = 0; i < src.length; i++) {
70 if ((i < 0) || (8 > sizeBytes - i)) {
71 throw new IndexOutOfBoundsException();
72 }
73 UNSAFE.putLongUnaligned(dest, UNSAFE.ARRAY_BYTE_BASE_OFFSET + i * 8, src[i]);
74 }
75 }
76
77 @Run(test = "test")
78 public static void test_runner() {
79 test(byteArray, longArray);
80 }
81 }
|