test/hotspot/jtreg/compiler/c2/aarch64/TestUnsafeVolatileLoad.java
changeset 50874 551c340ca01a
child 52220 9c260a6b6471
equal deleted inserted replaced
50873:ce53844224b6 50874:551c340ca01a
       
     1 package compiler.c2.aarch64;
       
     2 
       
     3 import java.lang.reflect.Field;
       
     4 import jdk.internal.misc.Unsafe;
       
     5 
       
     6 class TestUnsafeVolatileLoad
       
     7 {
       
     8     public volatile int f_int = 0;
       
     9     public volatile Integer f_obj = Integer.valueOf(0);
       
    10 
       
    11     public static Unsafe unsafe = Unsafe.getUnsafe();
       
    12     public static Field f_int_field;
       
    13     public static Field f_obj_field;
       
    14     public static long f_int_off;
       
    15     public static long f_obj_off;
       
    16 
       
    17     static {
       
    18         try {
       
    19             f_int_field = TestUnsafeVolatileLoad.class.getField("f_int");
       
    20             f_obj_field = TestUnsafeVolatileLoad.class.getField("f_obj");
       
    21             f_int_off = unsafe.objectFieldOffset(f_int_field);
       
    22             f_obj_off = unsafe.objectFieldOffset(f_obj_field);
       
    23         } catch (Exception e) {
       
    24             System.out.println("reflection failed " + e);
       
    25             e.printStackTrace();
       
    26         }
       
    27     }
       
    28 
       
    29     public static void main(String[] args)
       
    30     {
       
    31         final TestUnsafeVolatileLoad t = new TestUnsafeVolatileLoad();
       
    32         for (int i = 0; i < 100_000; i++) {
       
    33             t.f_int = i;
       
    34             int r = t.testInt();
       
    35             if (r != i) {
       
    36                 throw new RuntimeException("bad result!");
       
    37             }
       
    38         }
       
    39         for (int i = 0; i < 100_000; i++) {
       
    40             t.f_obj = Integer.valueOf(i);
       
    41             int r = t.testObj();
       
    42             if (r != i) {
       
    43                 throw new RuntimeException("bad result!");
       
    44             }
       
    45         }
       
    46     }
       
    47     public int testInt()
       
    48     {
       
    49         return unsafe.getIntVolatile(this, f_int_off);
       
    50     }
       
    51 
       
    52     public int testObj()
       
    53     {
       
    54         return ((Integer)unsafe.getObjectVolatile(this, f_obj_off));
       
    55     }
       
    56 }