46 * java/lang/invoke/TestStableDouble$NestedStableField2 |
48 * java/lang/invoke/TestStableDouble$NestedStableField2 |
47 * java/lang/invoke/TestStableDouble$NestedStableField2$A |
49 * java/lang/invoke/TestStableDouble$NestedStableField2$A |
48 * java/lang/invoke/TestStableDouble$NestedStableField3 |
50 * java/lang/invoke/TestStableDouble$NestedStableField3 |
49 * java/lang/invoke/TestStableDouble$NestedStableField3$A |
51 * java/lang/invoke/TestStableDouble$NestedStableField3$A |
50 * java/lang/invoke/TestStableDouble$DefaultValue |
52 * java/lang/invoke/TestStableDouble$DefaultValue |
|
53 * java/lang/invoke/TestStableDouble$DefaultStaticValue |
51 * java/lang/invoke/TestStableDouble$ObjectArrayLowerDim2 |
54 * java/lang/invoke/TestStableDouble$ObjectArrayLowerDim2 |
52 * |
55 * |
53 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
56 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
54 * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop |
57 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
55 * -server -XX:-TieredCompilation -Xcomp |
58 * -server -XX:-TieredCompilation |
|
59 * -XX:+FoldStableValues |
|
60 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
|
61 * java.lang.invoke.TestStableDouble |
|
62 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
|
63 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
|
64 * -server -XX:-TieredCompilation |
|
65 * -XX:-FoldStableValues |
56 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
66 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
57 * java.lang.invoke.TestStableDouble |
67 * java.lang.invoke.TestStableDouble |
58 * |
68 * |
59 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
69 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
60 * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop |
70 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
61 * -server -XX:-TieredCompilation -Xcomp |
71 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1 |
|
72 * -XX:+FoldStableValues |
|
73 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
|
74 * java.lang.invoke.TestStableDouble |
|
75 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
|
76 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
|
77 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1 |
|
78 * -XX:-FoldStableValues |
62 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
79 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
63 * java.lang.invoke.TestStableDouble |
80 * java.lang.invoke.TestStableDouble |
64 * |
81 * |
65 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
82 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
66 * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop |
83 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
67 * -server -XX:-TieredCompilation -Xcomp |
84 * -client -XX:-TieredCompilation |
|
85 * -XX:+FoldStableValues |
68 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
86 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
69 * java.lang.invoke.TestStableDouble |
87 * java.lang.invoke.TestStableDouble |
70 * |
|
71 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
88 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
72 * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop |
89 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
73 * -server -XX:-TieredCompilation -Xcomp |
90 * -client -XX:-TieredCompilation |
|
91 * -XX:-FoldStableValues |
74 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
92 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
75 * java.lang.invoke.TestStableDouble |
93 * java.lang.invoke.TestStableDouble |
76 */ |
94 */ |
77 package java.lang.invoke; |
95 package java.lang.invoke; |
78 |
96 |
79 import com.sun.management.HotSpotDiagnosticMXBean; |
|
80 import com.sun.management.VMOption; |
|
81 import sun.management.ManagementFactoryHelper; |
|
82 import java.lang.reflect.InvocationTargetException; |
97 import java.lang.reflect.InvocationTargetException; |
83 |
98 |
84 public class TestStableDouble { |
99 public class TestStableDouble { |
|
100 static final boolean isStableEnabled = StableConfiguration.isStableEnabled; |
|
101 static final boolean isServerWithStable = StableConfiguration.isServerWithStable; |
|
102 |
85 public static void main(String[] args) throws Exception { |
103 public static void main(String[] args) throws Exception { |
86 System.out.println("@Stable enabled: "+isStableEnabled); |
|
87 System.out.println(); |
|
88 |
|
89 run(DefaultValue.class); |
104 run(DefaultValue.class); |
90 run(DoubleStable.class); |
105 run(DoubleStable.class); |
|
106 run(DefaultStaticValue.class); |
91 run(StaticDoubleStable.class); |
107 run(StaticDoubleStable.class); |
92 run(VolatileDoubleStable.class); |
108 run(VolatileDoubleStable.class); |
93 |
109 |
94 // @Stable arrays: Dim 1-4 |
110 // @Stable arrays: Dim 1-4 |
95 run(DoubleArrayDim1.class); |
111 run(DoubleArrayDim1.class); |
186 public static void test() throws Exception { |
217 public static void test() throws Exception { |
187 { |
218 { |
188 c.v = new double[1]; c.v[0] = 1.0; double val1 = get(); |
219 c.v = new double[1]; c.v[0] = 1.0; double val1 = get(); |
189 c.v[0] = 2.0; double val2 = get(); |
220 c.v[0] = 2.0; double val2 = get(); |
190 assertEquals(val1, 1.0); |
221 assertEquals(val1, 1.0); |
191 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); |
222 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); |
192 |
223 |
193 c.v = new double[1]; c.v[0] = 3.0; double val3 = get(); |
224 c.v = new double[1]; c.v[0] = 3.0; double val3 = get(); |
194 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); |
225 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
226 : 3.0)); |
195 } |
227 } |
196 |
228 |
197 { |
229 { |
198 c.v = new double[20]; c.v[10] = 1.0; double val1 = get1(); |
230 c.v = new double[20]; c.v[10] = 1.0; double val1 = get1(); |
199 c.v[10] = 2.0; double val2 = get1(); |
231 c.v[10] = 2.0; double val2 = get1(); |
200 assertEquals(val1, 1.0); |
232 assertEquals(val1, 1.0); |
201 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); |
233 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); |
202 |
234 |
203 c.v = new double[20]; c.v[10] = 3.0; double val3 = get1(); |
235 c.v = new double[20]; c.v[10] = 3.0; double val3 = get1(); |
204 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); |
236 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
237 : 3.0)); |
205 } |
238 } |
206 |
239 |
207 { |
240 { |
208 c.v = new double[1]; double[] val1 = get2(); |
241 c.v = new double[1]; double[] val1 = get2(); |
209 c.v = new double[1]; double[] val2 = get2(); |
242 c.v = new double[1]; double[] val2 = get2(); |
224 public static void test() throws Exception { |
257 public static void test() throws Exception { |
225 { |
258 { |
226 c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get(); |
259 c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get(); |
227 c.v[0][0] = 2.0; double val2 = get(); |
260 c.v[0][0] = 2.0; double val2 = get(); |
228 assertEquals(val1, 1.0); |
261 assertEquals(val1, 1.0); |
229 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); |
262 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); |
230 |
263 |
231 c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get(); |
264 c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get(); |
232 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); |
265 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
266 : 3.0)); |
233 |
267 |
234 c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get(); |
268 c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get(); |
235 assertEquals(val4, (isStableEnabled ? 1.0 : 4.0)); |
269 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
270 : 4.0)); |
236 } |
271 } |
237 |
272 |
238 { |
273 { |
239 c.v = new double[1][1]; double[] val1 = get1(); |
274 c.v = new double[1][1]; double[] val1 = get1(); |
240 c.v[0] = new double[1]; double[] val2 = get1(); |
275 c.v[0] = new double[1]; double[] val2 = get1(); |
241 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
276 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
242 } |
277 } |
243 |
278 |
244 { |
279 { |
245 c.v = new double[1][1]; double[][] val1 = get2(); |
280 c.v = new double[1][1]; double[][] val1 = get2(); |
246 c.v = new double[1][1]; double[][] val2 = get2(); |
281 c.v = new double[1][1]; double[][] val2 = get2(); |
262 public static void test() throws Exception { |
297 public static void test() throws Exception { |
263 { |
298 { |
264 c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get(); |
299 c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get(); |
265 c.v[0][0][0] = 2.0; double val2 = get(); |
300 c.v[0][0][0] = 2.0; double val2 = get(); |
266 assertEquals(val1, 1.0); |
301 assertEquals(val1, 1.0); |
267 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); |
302 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); |
268 |
303 |
269 c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get(); |
304 c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get(); |
270 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); |
305 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
306 : 3.0)); |
271 |
307 |
272 c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get(); |
308 c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get(); |
273 assertEquals(val4, (isStableEnabled ? 1.0 : 4.0)); |
309 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
310 : 4.0)); |
274 |
311 |
275 c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get(); |
312 c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get(); |
276 assertEquals(val5, (isStableEnabled ? 1.0 : 5.0)); |
313 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
314 : 5.0)); |
277 } |
315 } |
278 |
316 |
279 { |
317 { |
280 c.v = new double[1][1][1]; double[] val1 = get1(); |
318 c.v = new double[1][1][1]; double[] val1 = get1(); |
281 c.v[0][0] = new double[1]; double[] val2 = get1(); |
319 c.v[0][0] = new double[1]; double[] val2 = get1(); |
282 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
320 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
283 } |
321 } |
284 |
322 |
285 { |
323 { |
286 c.v = new double[1][1][1]; double[][] val1 = get2(); |
324 c.v = new double[1][1][1]; double[][] val1 = get2(); |
287 c.v[0] = new double[1][1]; double[][] val2 = get2(); |
325 c.v[0] = new double[1][1]; double[][] val2 = get2(); |
288 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
326 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
289 } |
327 } |
290 |
328 |
291 { |
329 { |
292 c.v = new double[1][1][1]; double[][][] val1 = get3(); |
330 c.v = new double[1][1][1]; double[][][] val1 = get3(); |
293 c.v = new double[1][1][1]; double[][][] val2 = get3(); |
331 c.v = new double[1][1][1]; double[][][] val2 = get3(); |
310 public static void test() throws Exception { |
348 public static void test() throws Exception { |
311 { |
349 { |
312 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get(); |
350 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get(); |
313 c.v[0][0][0][0] = 2.0; double val2 = get(); |
351 c.v[0][0][0][0] = 2.0; double val2 = get(); |
314 assertEquals(val1, 1.0); |
352 assertEquals(val1, 1.0); |
315 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); |
353 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); |
316 |
354 |
317 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get(); |
355 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get(); |
318 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0)); |
356 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
357 : 3.0)); |
319 |
358 |
320 c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get(); |
359 c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get(); |
321 assertEquals(val4, (isStableEnabled ? 1.0 : 4.0)); |
360 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
361 : 4.0)); |
322 |
362 |
323 c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get(); |
363 c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get(); |
324 assertEquals(val5, (isStableEnabled ? 1.0 : 5.0)); |
364 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
365 : 5.0)); |
325 |
366 |
326 c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get(); |
367 c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get(); |
327 assertEquals(val6, (isStableEnabled ? 1.0 : 6.0)); |
368 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) |
|
369 : 6.0)); |
328 } |
370 } |
329 |
371 |
330 { |
372 { |
331 c.v = new double[1][1][1][1]; double[] val1 = get1(); |
373 c.v = new double[1][1][1][1]; double[] val1 = get1(); |
332 c.v[0][0][0] = new double[1]; double[] val2 = get1(); |
374 c.v[0][0][0] = new double[1]; double[] val2 = get1(); |
333 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
375 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
334 } |
376 } |
335 |
377 |
336 { |
378 { |
337 c.v = new double[1][1][1][1]; double[][] val1 = get2(); |
379 c.v = new double[1][1][1][1]; double[][] val1 = get2(); |
338 c.v[0][0] = new double[1][1]; double[][] val2 = get2(); |
380 c.v[0][0] = new double[1][1]; double[][] val2 = get2(); |
339 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
381 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
340 } |
382 } |
341 |
383 |
342 { |
384 { |
343 c.v = new double[1][1][1][1]; double[][][] val1 = get3(); |
385 c.v = new double[1][1][1][1]; double[][][] val1 = get3(); |
344 c.v[0] = new double[1][1][1]; double[][][] val2 = get3(); |
386 c.v[0] = new double[1][1][1]; double[][][] val2 = get3(); |
345 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
387 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
346 } |
388 } |
347 |
389 |
348 { |
390 { |
349 c.v = new double[1][1][1][1]; double[][][][] val1 = get4(); |
391 c.v = new double[1][1][1][1]; double[][][][] val1 = get4(); |
350 c.v = new double[1][1][1][1]; double[][][][] val2 = get4(); |
392 c.v = new double[1][1][1][1]; double[][][][] val2 = get4(); |
351 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
393 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
352 } |
394 } |
353 |
|
354 } |
395 } |
355 } |
396 } |
356 |
397 |
357 /* ==================================================== */ |
398 /* ==================================================== */ |
358 // Dynamic Dim is higher than static |
399 // Dynamic Dim is higher than static |
359 |
|
360 static class ObjectArrayLowerDim0 { |
400 static class ObjectArrayLowerDim0 { |
361 public @Stable Object v; |
401 public @Stable Object v; |
362 |
402 |
363 public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); |
403 public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); |
364 public static double get() { return ((double[])c.v)[0]; } |
404 public static double get() { return ((double[])c.v)[0]; } |