test/hotspot/jtreg/compiler/unsafe/JdkInternalMiscUnsafeAccessTestObject.java
changeset 52220 9c260a6b6471
parent 47216 71c04702a3d5
equal deleted inserted replaced
52219:151b990e3764 52220:9c260a6b6471
   117 
   117 
   118 
   118 
   119     static void testAccess(Object base, long offset) {
   119     static void testAccess(Object base, long offset) {
   120         // Plain
   120         // Plain
   121         {
   121         {
   122             UNSAFE.putObject(base, offset, "foo");
   122             UNSAFE.putReference(base, offset, "foo");
   123             Object x = UNSAFE.getObject(base, offset);
   123             Object x = UNSAFE.getReference(base, offset);
   124             assertEquals(x, "foo", "set Object value");
   124             assertEquals(x, "foo", "set Object value");
   125         }
   125         }
   126 
   126 
   127         // Volatile
   127         // Volatile
   128         {
   128         {
   129             UNSAFE.putObjectVolatile(base, offset, "bar");
   129             UNSAFE.putReferenceVolatile(base, offset, "bar");
   130             Object x = UNSAFE.getObjectVolatile(base, offset);
   130             Object x = UNSAFE.getReferenceVolatile(base, offset);
   131             assertEquals(x, "bar", "putVolatile Object value");
   131             assertEquals(x, "bar", "putVolatile Object value");
   132         }
   132         }
   133 
   133 
   134 
   134 
   135         // Lazy
   135         // Lazy
   136         {
   136         {
   137             UNSAFE.putObjectRelease(base, offset, "foo");
   137             UNSAFE.putReferenceRelease(base, offset, "foo");
   138             Object x = UNSAFE.getObjectAcquire(base, offset);
   138             Object x = UNSAFE.getReferenceAcquire(base, offset);
   139             assertEquals(x, "foo", "putRelease Object value");
   139             assertEquals(x, "foo", "putRelease Object value");
   140         }
   140         }
   141 
   141 
   142         // Opaque
   142         // Opaque
   143         {
   143         {
   144             UNSAFE.putObjectOpaque(base, offset, "bar");
   144             UNSAFE.putReferenceOpaque(base, offset, "bar");
   145             Object x = UNSAFE.getObjectOpaque(base, offset);
   145             Object x = UNSAFE.getReferenceOpaque(base, offset);
   146             assertEquals(x, "bar", "putOpaque Object value");
   146             assertEquals(x, "bar", "putOpaque Object value");
   147         }
   147         }
   148 
   148 
   149 
   149 
   150         UNSAFE.putObject(base, offset, "foo");
   150         UNSAFE.putReference(base, offset, "foo");
   151 
   151 
   152         // Compare
   152         // Compare
   153         {
   153         {
   154             boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "bar");
   154             boolean r = UNSAFE.compareAndSetReference(base, offset, "foo", "bar");
   155             assertEquals(r, true, "success compareAndSet Object");
   155             assertEquals(r, true, "success compareAndSet Object");
   156             Object x = UNSAFE.getObject(base, offset);
   156             Object x = UNSAFE.getReference(base, offset);
   157             assertEquals(x, "bar", "success compareAndSet Object value");
   157             assertEquals(x, "bar", "success compareAndSet Object value");
   158         }
   158         }
   159 
   159 
   160         {
   160         {
   161             boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "baz");
   161             boolean r = UNSAFE.compareAndSetReference(base, offset, "foo", "baz");
   162             assertEquals(r, false, "failing compareAndSet Object");
   162             assertEquals(r, false, "failing compareAndSet Object");
   163             Object x = UNSAFE.getObject(base, offset);
   163             Object x = UNSAFE.getReference(base, offset);
   164             assertEquals(x, "bar", "failing compareAndSet Object value");
   164             assertEquals(x, "bar", "failing compareAndSet Object value");
   165         }
   165         }
   166 
   166 
   167         // Advanced compare
   167         // Advanced compare
   168         {
   168         {
   169             Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "foo");
   169             Object r = UNSAFE.compareAndExchangeReference(base, offset, "bar", "foo");
   170             assertEquals(r, "bar", "success compareAndExchange Object");
   170             assertEquals(r, "bar", "success compareAndExchange Object");
   171             Object x = UNSAFE.getObject(base, offset);
   171             Object x = UNSAFE.getReference(base, offset);
   172             assertEquals(x, "foo", "success compareAndExchange Object value");
   172             assertEquals(x, "foo", "success compareAndExchange Object value");
   173         }
   173         }
   174 
   174 
   175         {
   175         {
   176             Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "baz");
   176             Object r = UNSAFE.compareAndExchangeReference(base, offset, "bar", "baz");
   177             assertEquals(r, "foo", "failing compareAndExchange Object");
   177             assertEquals(r, "foo", "failing compareAndExchange Object");
   178             Object x = UNSAFE.getObject(base, offset);
   178             Object x = UNSAFE.getReference(base, offset);
   179             assertEquals(x, "foo", "failing compareAndExchange Object value");
   179             assertEquals(x, "foo", "failing compareAndExchange Object value");
   180         }
   180         }
   181 
   181 
   182         {
   182         {
   183             Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "bar");
   183             Object r = UNSAFE.compareAndExchangeReferenceAcquire(base, offset, "foo", "bar");
   184             assertEquals(r, "foo", "success compareAndExchangeAcquire Object");
   184             assertEquals(r, "foo", "success compareAndExchangeAcquire Object");
   185             Object x = UNSAFE.getObject(base, offset);
   185             Object x = UNSAFE.getReference(base, offset);
   186             assertEquals(x, "bar", "success compareAndExchangeAcquire Object value");
   186             assertEquals(x, "bar", "success compareAndExchangeAcquire Object value");
   187         }
   187         }
   188 
   188 
   189         {
   189         {
   190             Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "baz");
   190             Object r = UNSAFE.compareAndExchangeReferenceAcquire(base, offset, "foo", "baz");
   191             assertEquals(r, "bar", "failing compareAndExchangeAcquire Object");
   191             assertEquals(r, "bar", "failing compareAndExchangeAcquire Object");
   192             Object x = UNSAFE.getObject(base, offset);
   192             Object x = UNSAFE.getReference(base, offset);
   193             assertEquals(x, "bar", "failing compareAndExchangeAcquire Object value");
   193             assertEquals(x, "bar", "failing compareAndExchangeAcquire Object value");
   194         }
   194         }
   195 
   195 
   196         {
   196         {
   197             Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "foo");
   197             Object r = UNSAFE.compareAndExchangeReferenceRelease(base, offset, "bar", "foo");
   198             assertEquals(r, "bar", "success compareAndExchangeRelease Object");
   198             assertEquals(r, "bar", "success compareAndExchangeRelease Object");
   199             Object x = UNSAFE.getObject(base, offset);
   199             Object x = UNSAFE.getReference(base, offset);
   200             assertEquals(x, "foo", "success compareAndExchangeRelease Object value");
   200             assertEquals(x, "foo", "success compareAndExchangeRelease Object value");
   201         }
   201         }
   202 
   202 
   203         {
   203         {
   204             Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "baz");
   204             Object r = UNSAFE.compareAndExchangeReferenceRelease(base, offset, "bar", "baz");
   205             assertEquals(r, "foo", "failing compareAndExchangeRelease Object");
   205             assertEquals(r, "foo", "failing compareAndExchangeRelease Object");
   206             Object x = UNSAFE.getObject(base, offset);
   206             Object x = UNSAFE.getReference(base, offset);
   207             assertEquals(x, "foo", "failing compareAndExchangeRelease Object value");
   207             assertEquals(x, "foo", "failing compareAndExchangeRelease Object value");
   208         }
   208         }
   209 
   209 
   210         {
   210         {
   211             boolean success = false;
   211             boolean success = false;
   212             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   212             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   213                 success = UNSAFE.weakCompareAndSetObjectPlain(base, offset, "foo", "bar");
   213                 success = UNSAFE.weakCompareAndSetReferencePlain(base, offset, "foo", "bar");
   214             }
   214             }
   215             assertEquals(success, true, "weakCompareAndSetPlain Object");
   215             assertEquals(success, true, "weakCompareAndSetPlain Object");
   216             Object x = UNSAFE.getObject(base, offset);
   216             Object x = UNSAFE.getReference(base, offset);
   217             assertEquals(x, "bar", "weakCompareAndSetPlain Object value");
   217             assertEquals(x, "bar", "weakCompareAndSetPlain Object value");
   218         }
   218         }
   219 
   219 
   220         {
   220         {
   221             boolean success = false;
   221             boolean success = false;
   222             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   222             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   223                 success = UNSAFE.weakCompareAndSetObjectAcquire(base, offset, "bar", "foo");
   223                 success = UNSAFE.weakCompareAndSetReferenceAcquire(base, offset, "bar", "foo");
   224             }
   224             }
   225             assertEquals(success, true, "weakCompareAndSetAcquire Object");
   225             assertEquals(success, true, "weakCompareAndSetAcquire Object");
   226             Object x = UNSAFE.getObject(base, offset);
   226             Object x = UNSAFE.getReference(base, offset);
   227             assertEquals(x, "foo", "weakCompareAndSetAcquire Object");
   227             assertEquals(x, "foo", "weakCompareAndSetAcquire Object");
   228         }
   228         }
   229 
   229 
   230         {
   230         {
   231             boolean success = false;
   231             boolean success = false;
   232             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   232             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   233                 success = UNSAFE.weakCompareAndSetObjectRelease(base, offset, "foo", "bar");
   233                 success = UNSAFE.weakCompareAndSetReferenceRelease(base, offset, "foo", "bar");
   234             }
   234             }
   235             assertEquals(success, true, "weakCompareAndSetRelease Object");
   235             assertEquals(success, true, "weakCompareAndSetRelease Object");
   236             Object x = UNSAFE.getObject(base, offset);
   236             Object x = UNSAFE.getReference(base, offset);
   237             assertEquals(x, "bar", "weakCompareAndSetRelease Object");
   237             assertEquals(x, "bar", "weakCompareAndSetRelease Object");
   238         }
   238         }
   239 
   239 
   240         {
   240         {
   241             boolean success = false;
   241             boolean success = false;
   242             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   242             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
   243                 success = UNSAFE.weakCompareAndSetObject(base, offset, "bar", "foo");
   243                 success = UNSAFE.weakCompareAndSetReference(base, offset, "bar", "foo");
   244             }
   244             }
   245             assertEquals(success, true, "weakCompareAndSet Object");
   245             assertEquals(success, true, "weakCompareAndSet Object");
   246             Object x = UNSAFE.getObject(base, offset);
   246             Object x = UNSAFE.getReference(base, offset);
   247             assertEquals(x, "foo", "weakCompareAndSet Object");
   247             assertEquals(x, "foo", "weakCompareAndSet Object");
   248         }
   248         }
   249 
   249 
   250         UNSAFE.putObject(base, offset, "bar");
   250         UNSAFE.putReference(base, offset, "bar");
   251 
   251 
   252         // Compare set and get
   252         // Compare set and get
   253         {
   253         {
   254             Object o = UNSAFE.getAndSetObject(base, offset, "foo");
   254             Object o = UNSAFE.getAndSetReference(base, offset, "foo");
   255             assertEquals(o, "bar", "getAndSet Object");
   255             assertEquals(o, "bar", "getAndSet Object");
   256             Object x = UNSAFE.getObject(base, offset);
   256             Object x = UNSAFE.getReference(base, offset);
   257             assertEquals(x, "foo", "getAndSet Object value");
   257             assertEquals(x, "foo", "getAndSet Object value");
   258         }
   258         }
   259 
   259 
   260     }
   260     }
   261 
   261