hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestObject.java
changeset 45055 1c7bbc426b1e
parent 42307 cefc81dc1d52
equal deleted inserted replaced
45054:c09733aaf97f 45055:1c7bbc426b1e
     1 /*
     1 /*
     2  * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   149 
   149 
   150         UNSAFE.putObject(base, offset, "foo");
   150         UNSAFE.putObject(base, offset, "foo");
   151 
   151 
   152         // Compare
   152         // Compare
   153         {
   153         {
   154             boolean r = UNSAFE.compareAndSwapObject(base, offset, "foo", "bar");
   154             boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "bar");
   155             assertEquals(r, true, "success compareAndSwap Object");
   155             assertEquals(r, true, "success compareAndSet Object");
   156             Object x = UNSAFE.getObject(base, offset);
   156             Object x = UNSAFE.getObject(base, offset);
   157             assertEquals(x, "bar", "success compareAndSwap Object value");
   157             assertEquals(x, "bar", "success compareAndSet Object value");
   158         }
   158         }
   159 
   159 
   160         {
   160         {
   161             boolean r = UNSAFE.compareAndSwapObject(base, offset, "foo", "baz");
   161             boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "baz");
   162             assertEquals(r, false, "failing compareAndSwap Object");
   162             assertEquals(r, false, "failing compareAndSet Object");
   163             Object x = UNSAFE.getObject(base, offset);
   163             Object x = UNSAFE.getObject(base, offset);
   164             assertEquals(x, "bar", "failing compareAndSwap 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.compareAndExchangeObjectVolatile(base, offset, "bar", "foo");
   169             Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "foo");
   170             assertEquals(r, "bar", "success compareAndExchangeVolatile Object");
   170             assertEquals(r, "bar", "success compareAndExchange Object");
   171             Object x = UNSAFE.getObject(base, offset);
   171             Object x = UNSAFE.getObject(base, offset);
   172             assertEquals(x, "foo", "success compareAndExchangeVolatile Object value");
   172             assertEquals(x, "foo", "success compareAndExchange Object value");
   173         }
   173         }
   174 
   174 
   175         {
   175         {
   176             Object r = UNSAFE.compareAndExchangeObjectVolatile(base, offset, "bar", "baz");
   176             Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "baz");
   177             assertEquals(r, "foo", "failing compareAndExchangeVolatile Object");
   177             assertEquals(r, "foo", "failing compareAndExchange Object");
   178             Object x = UNSAFE.getObject(base, offset);
   178             Object x = UNSAFE.getObject(base, offset);
   179             assertEquals(x, "foo", "failing compareAndExchangeVolatile 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.compareAndExchangeObjectAcquire(base, offset, "foo", "bar");
   184             assertEquals(r, "foo", "success compareAndExchangeAcquire Object");
   184             assertEquals(r, "foo", "success compareAndExchangeAcquire Object");
   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.weakCompareAndSwapObject(base, offset, "foo", "bar");
   213                 success = UNSAFE.weakCompareAndSetObjectPlain(base, offset, "foo", "bar");
   214             }
   214             }
   215             assertEquals(success, true, "weakCompareAndSwap Object");
   215             assertEquals(success, true, "weakCompareAndSetPlain Object");
   216             Object x = UNSAFE.getObject(base, offset);
   216             Object x = UNSAFE.getObject(base, offset);
   217             assertEquals(x, "bar", "weakCompareAndSwap 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.weakCompareAndSwapObjectAcquire(base, offset, "bar", "foo");
   223                 success = UNSAFE.weakCompareAndSetObjectAcquire(base, offset, "bar", "foo");
   224             }
   224             }
   225             assertEquals(success, true, "weakCompareAndSwapAcquire Object");
   225             assertEquals(success, true, "weakCompareAndSetAcquire Object");
   226             Object x = UNSAFE.getObject(base, offset);
   226             Object x = UNSAFE.getObject(base, offset);
   227             assertEquals(x, "foo", "weakCompareAndSwapAcquire 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.weakCompareAndSwapObjectRelease(base, offset, "foo", "bar");
   233                 success = UNSAFE.weakCompareAndSetObjectRelease(base, offset, "foo", "bar");
   234             }
   234             }
   235             assertEquals(success, true, "weakCompareAndSwapRelease Object");
   235             assertEquals(success, true, "weakCompareAndSetRelease Object");
   236             Object x = UNSAFE.getObject(base, offset);
   236             Object x = UNSAFE.getObject(base, offset);
   237             assertEquals(x, "bar", "weakCompareAndSwapRelease 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.weakCompareAndSwapObjectVolatile(base, offset, "bar", "foo");
   243                 success = UNSAFE.weakCompareAndSetObject(base, offset, "bar", "foo");
   244             }
   244             }
   245             assertEquals(success, true, "weakCompareAndSwapVolatile Object");
   245             assertEquals(success, true, "weakCompareAndSet Object");
   246             Object x = UNSAFE.getObject(base, offset);
   246             Object x = UNSAFE.getObject(base, offset);
   247             assertEquals(x, "foo", "weakCompareAndSwapVolatile Object");
   247             assertEquals(x, "foo", "weakCompareAndSet Object");
   248         }
   248         }
   249 
   249 
   250         UNSAFE.putObject(base, offset, "bar");
   250         UNSAFE.putObject(base, offset, "bar");
   251 
   251 
   252         // Compare set and get
   252         // Compare set and get
   258         }
   258         }
   259 
   259 
   260     }
   260     }
   261 
   261 
   262 }
   262 }
   263