src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.jdk9.test/src/org/graalvm/compiler/replacements/jdk9/UnsafeReplacementsTest.java
author dlong
Wed, 06 Jun 2018 09:37:44 -0700
changeset 50431 64e4b1686141
parent 50330 2cbc42a5764b
child 50609 bf414874c28f
permissions -rw-r--r--
8204199: Test fails after 8202670 Graal update Reviewed-by: thartmann, kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     1
/*
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     4
 *
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     7
 * published by the Free Software Foundation.
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     8
 *
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    13
 * accompanied this code).
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    14
 *
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    18
 *
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    21
 * questions.
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    22
 */
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    23
package org.graalvm.compiler.replacements.jdk9;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    24
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    25
import jdk.vm.ci.amd64.AMD64;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    26
import jdk.vm.ci.code.TargetDescription;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    27
import jdk.vm.ci.meta.ResolvedJavaMethod;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    28
import org.graalvm.compiler.api.test.Graal;
50431
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
    29
import org.graalvm.compiler.core.phases.HighTier;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
    30
import org.graalvm.compiler.options.OptionValues;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    31
import org.graalvm.compiler.replacements.test.MethodSubstitutionTest;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    32
import org.graalvm.compiler.runtime.RuntimeProvider;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    33
import org.graalvm.compiler.test.AddExports;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    34
import org.junit.Test;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    35
50431
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
    36
import java.lang.reflect.Field;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
    37
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    38
@AddExports("java.base/jdk.internal.misc")
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    39
public class UnsafeReplacementsTest extends MethodSubstitutionTest {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    40
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    41
    // See GR-9819.
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    42
    @SuppressWarnings("unused") ResolvedJavaMethod method = null;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    43
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    44
    static class Container {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    45
        public volatile boolean booleanField;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    46
        public volatile byte byteField = 17;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    47
        public volatile char charField = 1025;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    48
        public volatile short shortField = 2232;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    49
        public volatile int intField = 0xcafebabe;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    50
        public volatile long longField = 0xdedababafafaL;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    51
        public volatile float floatField = 0.125f;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    52
        public volatile double doubleField = 0.125;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    53
        public volatile Object objectField = dummyValue;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    54
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    55
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    56
    static jdk.internal.misc.Unsafe unsafe = jdk.internal.misc.Unsafe.getUnsafe();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    57
    static Container dummyValue = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    58
    static Container newDummyValue = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    59
    static long booleanOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    60
    static long byteOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    61
    static long charOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    62
    static long shortOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    63
    static long intOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    64
    static long longOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    65
    static long floatOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    66
    static long doubleOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    67
    static long objectOffset;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    68
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    69
    static {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    70
        try {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    71
            booleanOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("booleanField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    72
            byteOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("byteField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    73
            charOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("charField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    74
            shortOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("shortField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    75
            intOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("intField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    76
            longOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("longField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    77
            floatOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("floatField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    78
            doubleOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("doubleField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    79
            objectOffset = unsafe.objectFieldOffset(Container.class.getDeclaredField("objectField"));
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    80
        } catch (NoSuchFieldException e) {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    81
            throw new RuntimeException(e);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    82
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    83
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    84
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    85
    public static boolean unsafeCompareAndSetBoolean() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    86
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    87
        return unsafe.compareAndSetBoolean(container, booleanOffset, false, true);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    88
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    89
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    90
    public static boolean unsafeCompareAndSetByte() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    91
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    92
        return unsafe.compareAndSetByte(container, byteOffset, (byte) 17, (byte) 121);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    93
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    94
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    95
    public static boolean unsafeCompareAndSetChar() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    96
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    97
        return unsafe.compareAndSetChar(container, charOffset, (char) 1025, (char) 1777);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    98
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
    99
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   100
    public static boolean unsafeCompareAndSetShort() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   101
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   102
        return unsafe.compareAndSetShort(container, shortOffset, (short) 2232, (short) 12111);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   103
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   104
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   105
    public static boolean unsafeCompareAndSetInt() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   106
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   107
        return unsafe.compareAndSetInt(container, intOffset, 0xcafebabe, 0xbabefafa);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   108
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   109
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   110
    public static boolean unsafeCompareAndSetLong() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   111
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   112
        return unsafe.compareAndSetLong(container, longOffset, 0xdedababafafaL, 0xfafacecafafadedaL);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   113
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   114
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   115
    public static boolean unsafeCompareAndSetFloat() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   116
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   117
        return unsafe.compareAndSetFloat(container, floatOffset, 0.125f, 0.25f);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   118
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   119
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   120
    public static boolean unsafeCompareAndSetDouble() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   121
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   122
        return unsafe.compareAndSetDouble(container, doubleOffset, 0.125, 0.25);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   123
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   124
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   125
    public static boolean unsafeCompareAndSetObject() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   126
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   127
        return unsafe.compareAndSetObject(container, objectOffset, dummyValue, newDummyValue);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   128
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   129
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   130
    public static boolean unsafeCompareAndExchangeBoolean() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   131
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   132
        return unsafe.compareAndExchangeBoolean(container, booleanOffset, false, true);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   133
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   134
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   135
    public static byte unsafeCompareAndExchangeByte() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   136
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   137
        return unsafe.compareAndExchangeByte(container, byteOffset, (byte) 17, (byte) 31);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   138
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   139
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   140
    public static char unsafeCompareAndExchangeChar() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   141
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   142
        return unsafe.compareAndExchangeChar(container, charOffset, (char) 1025, (char) 4502);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   143
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   144
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   145
    public static short unsafeCompareAndExchangeShort() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   146
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   147
        return unsafe.compareAndExchangeShort(container, shortOffset, (short) 2232, (short) 8121);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   148
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   149
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   150
    public static int unsafeCompareAndExchangeInt() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   151
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   152
        return unsafe.compareAndExchangeInt(container, intOffset, 0xcafebabe, 0xbabefafa);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   153
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   154
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   155
    public static long unsafeCompareAndExchangeLong() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   156
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   157
        return unsafe.compareAndExchangeLong(container, longOffset, 0xdedababafafaL, 0xfafacecafafadedaL);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   158
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   159
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   160
    public static float unsafeCompareAndExchangeFloat() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   161
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   162
        return unsafe.compareAndExchangeFloat(container, floatOffset, 0.125f, 0.25f);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   163
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   164
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   165
    public static double unsafeCompareAndExchangeDouble() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   166
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   167
        return unsafe.compareAndExchangeDouble(container, doubleOffset, 0.125, 0.25);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   168
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   169
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   170
    public static Object unsafeCompareAndExchangeObject() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   171
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   172
        return unsafe.compareAndExchangeObject(container, objectOffset, dummyValue, newDummyValue);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   173
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   174
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   175
    @Test
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   176
    public void testCompareAndSet() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   177
        TargetDescription target = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getTarget();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   178
        if (target.arch instanceof AMD64) {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   179
            testGraph("unsafeCompareAndSetBoolean");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   180
            testGraph("unsafeCompareAndSetByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   181
            testGraph("unsafeCompareAndSetChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   182
            testGraph("unsafeCompareAndSetShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   183
            testGraph("unsafeCompareAndSetInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   184
            testGraph("unsafeCompareAndSetLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   185
            testGraph("unsafeCompareAndSetFloat");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   186
            testGraph("unsafeCompareAndSetDouble");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   187
            testGraph("unsafeCompareAndSetObject");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   188
            testGraph("unsafeCompareAndExchangeBoolean");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   189
            testGraph("unsafeCompareAndExchangeByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   190
            testGraph("unsafeCompareAndExchangeChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   191
            testGraph("unsafeCompareAndExchangeShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   192
            testGraph("unsafeCompareAndExchangeInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   193
            testGraph("unsafeCompareAndExchangeLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   194
            testGraph("unsafeCompareAndExchangeFloat");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   195
            testGraph("unsafeCompareAndExchangeDouble");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   196
            testGraph("unsafeCompareAndExchangeObject");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   197
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   198
        test("unsafeCompareAndSetBoolean");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   199
        test("unsafeCompareAndSetByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   200
        test("unsafeCompareAndSetChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   201
        test("unsafeCompareAndSetShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   202
        test("unsafeCompareAndSetInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   203
        test("unsafeCompareAndSetLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   204
        test("unsafeCompareAndSetFloat");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   205
        test("unsafeCompareAndSetDouble");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   206
        test("unsafeCompareAndSetObject");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   207
        test("unsafeCompareAndExchangeBoolean");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   208
        test("unsafeCompareAndExchangeByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   209
        test("unsafeCompareAndExchangeChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   210
        test("unsafeCompareAndExchangeShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   211
        test("unsafeCompareAndExchangeInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   212
        test("unsafeCompareAndExchangeLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   213
        test("unsafeCompareAndExchangeFloat");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   214
        test("unsafeCompareAndExchangeDouble");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   215
        test("unsafeCompareAndExchangeObject");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   216
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   217
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   218
    public static int unsafeGetAndAddByte() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   219
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   220
        return unsafe.getAndAddByte(container, byteOffset, (byte) 2);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   221
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   222
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   223
    public static int unsafeGetAndAddChar() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   224
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   225
        return unsafe.getAndAddChar(container, charOffset, (char) 250);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   226
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   227
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   228
    public static int unsafeGetAndAddShort() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   229
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   230
        return unsafe.getAndAddShort(container, shortOffset, (short) 1250);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   231
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   232
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   233
    public static int unsafeGetAndAddInt() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   234
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   235
        return unsafe.getAndAddInt(container, intOffset, 104501);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   236
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   237
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   238
    public static long unsafeGetAndAddLong() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   239
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   240
        return unsafe.getAndAddLong(container, longOffset, 0x123456abcdL);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   241
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   242
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   243
    @Test
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   244
    public void testGetAndAdd() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   245
        TargetDescription target = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getTarget();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   246
        if (target.arch instanceof AMD64) {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   247
            testGraph("unsafeGetAndAddByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   248
            testGraph("unsafeGetAndAddChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   249
            testGraph("unsafeGetAndAddShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   250
            testGraph("unsafeGetAndAddInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   251
            testGraph("unsafeGetAndAddLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   252
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   253
        test("unsafeGetAndAddByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   254
        test("unsafeGetAndAddChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   255
        test("unsafeGetAndAddShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   256
        test("unsafeGetAndAddInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   257
        test("unsafeGetAndAddLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   258
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   259
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   260
    public static boolean unsafeGetAndSetBoolean() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   261
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   262
        return unsafe.getAndSetBoolean(container, booleanOffset, true);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   263
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   264
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   265
    public static byte unsafeGetAndSetByte() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   266
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   267
        return unsafe.getAndSetByte(container, byteOffset, (byte) 129);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   268
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   269
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   270
    public static char unsafeGetAndSetChar() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   271
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   272
        return unsafe.getAndSetChar(container, charOffset, (char) 21111);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   273
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   274
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   275
    public static short unsafeGetAndSetShort() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   276
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   277
        return unsafe.getAndSetShort(container, shortOffset, (short) 21111);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   278
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   279
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   280
    public static int unsafeGetAndSetInt() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   281
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   282
        return unsafe.getAndSetInt(container, intOffset, 0x1234af);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   283
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   284
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   285
    public static long unsafeGetAndSetLong() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   286
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   287
        return unsafe.getAndSetLong(container, longOffset, 0x12345678abL);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   288
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   289
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   290
    public static Object unsafeGetAndSetObject() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   291
        Container container = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   292
        container.objectField = null;
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   293
        Container other = new Container();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   294
        return unsafe.getAndSetObject(container, objectOffset, other);
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   295
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   296
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   297
    @Test
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   298
    public void testGetAndSet() {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   299
        TargetDescription target = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getTarget();
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   300
        if (target.arch instanceof AMD64) {
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   301
            testGraph("unsafeGetAndSetBoolean");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   302
            testGraph("unsafeGetAndSetByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   303
            testGraph("unsafeGetAndSetChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   304
            testGraph("unsafeGetAndSetShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   305
            testGraph("unsafeGetAndSetInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   306
            testGraph("unsafeGetAndSetLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   307
            testGraph("unsafeGetAndSetObject");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   308
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   309
        test("unsafeGetAndSetBoolean");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   310
        test("unsafeGetAndSetByte");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   311
        test("unsafeGetAndSetChar");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   312
        test("unsafeGetAndSetShort");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   313
        test("unsafeGetAndSetInt");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   314
        test("unsafeGetAndSetLong");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   315
        test("unsafeGetAndSetObject");
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   316
    }
50431
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   317
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   318
    public static void fieldInstance() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   319
        JdkInternalMiscUnsafeAccessTestBoolean.testFieldInstance();
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   320
    }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   321
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   322
    @Test
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   323
    public void testFieldInstance() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   324
        test(new OptionValues(getInitialOptions(), HighTier.Options.Inline, false), "fieldInstance");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   325
    }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   326
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   327
    public static void array() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   328
        JdkInternalMiscUnsafeAccessTestBoolean.testArray();
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   329
    }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   330
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   331
    @Test
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   332
    public void testArray() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   333
        test(new OptionValues(getInitialOptions(), HighTier.Options.Inline, false), "array");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   334
    }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   335
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   336
    public static void fieldStatic() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   337
        JdkInternalMiscUnsafeAccessTestBoolean.testFieldStatic();
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   338
    }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   339
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   340
    @Test
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   341
    public void testFieldStatic() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   342
        test(new OptionValues(getInitialOptions(), HighTier.Options.Inline, false), "fieldStatic");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   343
    }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   344
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   345
    public static class JdkInternalMiscUnsafeAccessTestBoolean {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   346
        static final int ITERATIONS = 100000;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   347
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   348
        static final int WEAK_ATTEMPTS = 10;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   349
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   350
        static final long V_OFFSET;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   351
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   352
        static final Object STATIC_V_BASE;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   353
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   354
        static final long STATIC_V_OFFSET;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   355
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   356
        static final int ARRAY_OFFSET;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   357
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   358
        static final int ARRAY_SHIFT;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   359
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   360
        static {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   361
            try {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   362
                Field staticVField = UnsafeReplacementsTest.JdkInternalMiscUnsafeAccessTestBoolean.class.getDeclaredField("staticV");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   363
                STATIC_V_BASE = unsafe.staticFieldBase(staticVField);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   364
                STATIC_V_OFFSET = unsafe.staticFieldOffset(staticVField);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   365
            } catch (Exception e) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   366
                throw new RuntimeException(e);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   367
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   368
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   369
            try {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   370
                Field vField = UnsafeReplacementsTest.JdkInternalMiscUnsafeAccessTestBoolean.class.getDeclaredField("v");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   371
                V_OFFSET = unsafe.objectFieldOffset(vField);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   372
            } catch (Exception e) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   373
                throw new RuntimeException(e);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   374
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   375
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   376
            ARRAY_OFFSET = unsafe.arrayBaseOffset(boolean[].class);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   377
            int ascale = unsafe.arrayIndexScale(boolean[].class);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   378
            ARRAY_SHIFT = 31 - Integer.numberOfLeadingZeros(ascale);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   379
        }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   380
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   381
        static boolean staticV;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   382
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   383
        boolean v;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   384
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   385
        @BytecodeParserForceInline
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   386
        public static void testFieldInstance() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   387
            JdkInternalMiscUnsafeAccessTestBoolean t = new JdkInternalMiscUnsafeAccessTestBoolean();
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   388
            for (int c = 0; c < ITERATIONS; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   389
                testAccess(t, V_OFFSET);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   390
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   391
        }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   392
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   393
        public static void testFieldStatic() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   394
            for (int c = 0; c < ITERATIONS; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   395
                testAccess(STATIC_V_BASE, STATIC_V_OFFSET);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   396
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   397
        }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   398
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   399
        public static void testArray() {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   400
            boolean[] array = new boolean[10];
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   401
            for (int c = 0; c < ITERATIONS; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   402
                for (int i = 0; i < array.length; i++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   403
                    testAccess(array, (((long) i) << ARRAY_SHIFT) + ARRAY_OFFSET);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   404
                }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   405
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   406
        }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   407
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   408
        public static void assertEquals(Object seen, Object expected, String message) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   409
            if (seen != expected) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   410
                throw new AssertionError(message + " - seen: " + seen + ", expected: " + expected);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   411
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   412
        }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   413
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   414
        // Checkstyle: stop
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   415
        @BytecodeParserForceInline
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   416
        public static void testAccess(Object base, long offset) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   417
            // Advanced compare
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   418
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   419
                boolean r = unsafe.compareAndExchangeBoolean(base, offset, false, true);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   420
                assertEquals(r, false, "success compareAndExchange boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   421
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   422
                assertEquals(x, true, "success compareAndExchange boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   423
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   424
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   425
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   426
                boolean r = unsafe.compareAndExchangeBoolean(base, offset, false, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   427
                assertEquals(r, true, "failing compareAndExchange boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   428
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   429
                assertEquals(x, true, "failing compareAndExchange boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   430
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   431
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   432
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   433
                boolean r = unsafe.compareAndExchangeBooleanAcquire(base, offset, true, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   434
                assertEquals(r, true, "success compareAndExchangeAcquire boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   435
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   436
                assertEquals(x, false, "success compareAndExchangeAcquire boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   437
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   438
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   439
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   440
                boolean r = unsafe.compareAndExchangeBooleanAcquire(base, offset, true, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   441
                assertEquals(r, false, "failing compareAndExchangeAcquire boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   442
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   443
                assertEquals(x, false, "failing compareAndExchangeAcquire boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   444
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   445
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   446
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   447
                boolean r = unsafe.compareAndExchangeBooleanRelease(base, offset, false, true);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   448
                assertEquals(r, false, "success compareAndExchangeRelease boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   449
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   450
                assertEquals(x, true, "success compareAndExchangeRelease boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   451
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   452
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   453
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   454
                boolean r = unsafe.compareAndExchangeBooleanRelease(base, offset, false, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   455
                assertEquals(r, true, "failing compareAndExchangeRelease boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   456
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   457
                assertEquals(x, true, "failing compareAndExchangeRelease boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   458
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   459
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   460
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   461
                boolean success = false;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   462
                for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   463
                    success = unsafe.weakCompareAndSetBooleanPlain(base, offset, true, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   464
                }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   465
                assertEquals(success, true, "weakCompareAndSetPlain boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   466
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   467
                assertEquals(x, false, "weakCompareAndSetPlain boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   468
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   469
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   470
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   471
                boolean success = false;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   472
                for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   473
                    success = unsafe.weakCompareAndSetBooleanAcquire(base, offset, false, true);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   474
                }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   475
                assertEquals(success, true, "weakCompareAndSetAcquire boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   476
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   477
                assertEquals(x, true, "weakCompareAndSetAcquire boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   478
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   479
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   480
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   481
                boolean success = false;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   482
                for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   483
                    success = unsafe.weakCompareAndSetBooleanRelease(base, offset, true, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   484
                }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   485
                assertEquals(success, true, "weakCompareAndSetRelease boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   486
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   487
                assertEquals(x, false, "weakCompareAndSetRelease boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   488
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   489
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   490
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   491
                boolean success = false;
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   492
                for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   493
                    success = unsafe.weakCompareAndSetBoolean(base, offset, false, true);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   494
                }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   495
                assertEquals(success, true, "weakCompareAndSet boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   496
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   497
                assertEquals(x, true, "weakCompareAndSet boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   498
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   499
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   500
            unsafe.putBoolean(base, offset, false);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   501
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   502
            // Compare set and get
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   503
            {
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   504
                boolean o = unsafe.getAndSetBoolean(base, offset, true);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   505
                assertEquals(o, false, "getAndSet boolean");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   506
                boolean x = unsafe.getBoolean(base, offset);
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   507
                assertEquals(x, true, "getAndSet boolean value");
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   508
            }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   509
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   510
        }
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   511
        // Checkstyle: resume
64e4b1686141 8204199: Test fails after 8202670 Graal update
dlong
parents: 50330
diff changeset
   512
    }
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents:
diff changeset
   513
}