annotate graal/com.oracle.graal.snippets.test/src/com/oracle/graal/snippets/IntrinsificationTest.java @ 7224:fb16d8681ddc

bugfixes for compiler intrinsics added more unsafe intrinsics
author Christian Haeubl <haeubl@ssw.jku.at>
date Wed, 12 Dec 2012 15:05:21 +0100
parents e2ea829fafd9
children 31c4d9f9e922
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7220
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
1 /*
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
4 *
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
7 * published by the Free Software Foundation.
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
8 *
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
13 * accompanied this code).
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
14 *
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
18 *
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
21 * questions.
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
22 */
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
23 package com.oracle.graal.snippets;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
24
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
25 import static org.junit.Assert.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
26
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
27 import java.util.concurrent.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
28
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
29 import org.junit.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
30
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
31 import sun.misc.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
32
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
33 import com.oracle.graal.api.code.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
34 import com.oracle.graal.compiler.test.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
35 import com.oracle.graal.debug.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
36 import com.oracle.graal.nodes.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
37 import com.oracle.graal.phases.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
38 import com.oracle.graal.phases.common.*;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
39
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
40
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
41 public class IntrinsificationTest extends GraalCompilerTest {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
42 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
43 public void testObjectIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
44 test("getClassSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
45 test("objectHashCodeSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
46 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
47
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
48 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
49 public static boolean getClassSnippet(Object obj) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
50 return obj.getClass() == String.class;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
51 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
52 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
53 public static int objectHashCodeSnippet(A obj) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
54 return obj.hashCode();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
55 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
56
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
57
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
58 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
59 public void testClassIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
60 test("getModifiersSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
61 // test("isInstanceSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
62 test("isInterfaceSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
63 test("isArraySnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
64 test("isPrimitiveSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
65 test("getSuperClassSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
66 test("getComponentTypeSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
67 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
68
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
69 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
70 public static int getModifiersSnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
71 return clazz.getModifiers();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
72 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
73 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
74 public static boolean isInstanceSnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
75 return clazz.isInstance(Number.class);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
76 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
77 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
78 public static boolean isInterfaceSnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
79 return clazz.isInterface();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
80 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
81 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
82 public static boolean isArraySnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
83 return clazz.isArray();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
84 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
85 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
86 public static boolean isPrimitiveSnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
87 return clazz.isPrimitive();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
88 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
89 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
90 public static Class<?> getSuperClassSnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
91 return clazz.getSuperclass();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
92 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
93 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
94 public static Class<?> getComponentTypeSnippet(Class<?> clazz) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
95 return clazz.getComponentType();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
96 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
97
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
98
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
99 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
100 public void testThreadIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
101 test("currentThreadSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
102 test("threadIsInterruptedSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
103 test("threadInterruptedSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
104 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
105
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
106 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
107 public static Thread currentThreadSnippet() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
108 return Thread.currentThread();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
109 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
110 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
111 public static boolean threadIsInterruptedSnippet(Thread thread) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
112 return thread.isInterrupted();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
113 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
114 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
115 public static boolean threadInterruptedSnippet() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
116 return Thread.interrupted();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
117 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
118
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
119
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
120 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
121 public void testSystemIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
122 test("systemTimeSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
123 test("systemIdentityHashCode");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
124 // test("arraycopySnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
125 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
126
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
127 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
128 public static long systemTimeSnippet() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
129 return System.currentTimeMillis() + System.nanoTime();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
130 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
131 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
132 public static int systemIdentityHashCode(Object obj) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
133 return System.identityHashCode(obj);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
134 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
135 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
136 public static void arraycopySnippet(int[] src, int srcPos, int[] dest, int destPos, int length) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
137 System.arraycopy(src, srcPos, dest, destPos, length);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
138 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
139
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
140
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
141 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
142 public void testUnsafeIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
143 test("unsafeCompareAndSwapIntSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
144 test("unsafeCompareAndSwapLongSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
145 test("unsafeCompareAndSwapObjectSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
146
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
147 test("unsafeGetBooleanSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
148 test("unsafeGetByteSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
149 test("unsafeGetShortSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
150 test("unsafeGetCharSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
151 test("unsafeGetIntSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
152 test("unsafeGetFloatSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
153 test("unsafeGetDoubleSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
154 test("unsafeGetObjectSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
155
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
156 test("unsafePutBooleanSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
157 test("unsafePutByteSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
158 test("unsafePutShortSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
159 test("unsafePutCharSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
160 test("unsafePutIntSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
161 test("unsafePutFloatSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
162 test("unsafePutDoubleSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
163 test("unsafePutObjectSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
164
7224
fb16d8681ddc bugfixes for compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7223
diff changeset
165 test("unsafeDirectMemoryReadSnippet");
fb16d8681ddc bugfixes for compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7223
diff changeset
166 test("unsafeDirectMemoryWriteSnippet");
7220
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
167 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
168
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
169 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
170 public static boolean unsafeCompareAndSwapIntSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
171 return unsafe.compareAndSwapInt(obj, offset, 0, 1);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
172 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
173 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
174 public static boolean unsafeCompareAndSwapLongSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
175 return unsafe.compareAndSwapLong(obj, offset, 0, 1);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
176 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
177 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
178 public static boolean unsafeCompareAndSwapObjectSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
179 return unsafe.compareAndSwapObject(obj, offset, null, new Object());
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
180 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
181 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
182 public static boolean unsafeGetBooleanSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
183 return unsafe.getBoolean(obj, offset) &&
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
184 unsafe.getBooleanVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
185 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
186 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
187 public static int unsafeGetByteSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
188 return unsafe.getByte(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
189 unsafe.getByteVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
190 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
191 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
192 public static int unsafeGetShortSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
193 return unsafe.getShort(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
194 unsafe.getShortVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
195 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
196 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
197 public static int unsafeGetCharSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
198 return unsafe.getChar(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
199 unsafe.getCharVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
200 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
201 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
202 public static int unsafeGetIntSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
203 return unsafe.getInt(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
204 unsafe.getIntVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
205 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
206 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
207 public static long unsafeGetLongSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
208 return unsafe.getLong(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
209 unsafe.getLongVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
210 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
211 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
212 public static float unsafeGetFloatSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
213 return unsafe.getFloat(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
214 unsafe.getFloatVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
215 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
216 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
217 public static double unsafeGetDoubleSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
218 return unsafe.getDouble(obj, offset) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
219 unsafe.getDoubleVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
220 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
221 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
222 public static boolean unsafeGetObjectSnippet(Unsafe unsafe, Object obj, long offset) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
223 return unsafe.getObject(obj, offset) == unsafe.getObjectVolatile(obj, offset);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
224 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
225 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
226 public static void unsafePutBooleanSnippet(Unsafe unsafe, Object obj, long offset, boolean value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
227 unsafe.putBoolean(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
228 unsafe.putBooleanVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
229 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
230 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
231 public static void unsafePutByteSnippet(Unsafe unsafe, Object obj, long offset, byte value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
232 unsafe.putByte(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
233 unsafe.putByteVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
234 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
235 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
236 public static void unsafePutShortSnippet(Unsafe unsafe, Object obj, long offset, short value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
237 unsafe.putShort(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
238 unsafe.putShortVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
239 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
240 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
241 public static void unsafePutCharSnippet(Unsafe unsafe, Object obj, long offset, char value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
242 unsafe.putChar(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
243 unsafe.putCharVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
244 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
245 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
246 public static void unsafePutIntSnippet(Unsafe unsafe, Object obj, long offset, int value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
247 unsafe.putInt(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
248 unsafe.putIntVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
249 unsafe.putOrderedInt(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
250 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
251 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
252 public static void unsafePutLongSnippet(Unsafe unsafe, Object obj, long offset, long value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
253 unsafe.putLong(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
254 unsafe.putLongVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
255 unsafe.putOrderedLong(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
256 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
257 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
258 public static void unsafePutFloatSnippet(Unsafe unsafe, Object obj, long offset, float value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
259 unsafe.putFloat(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
260 unsafe.putFloatVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
261 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
262 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
263 public static void unsafePutDoubleSnippet(Unsafe unsafe, Object obj, long offset, double value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
264 unsafe.putDouble(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
265 unsafe.putDoubleVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
266 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
267 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
268 public static void unsafePutObjectSnippet(Unsafe unsafe, Object obj, long offset, Object value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
269 unsafe.putObject(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
270 unsafe.putObjectVolatile(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
271 unsafe.putOrderedObject(obj, offset, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
272 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
273 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
274 public static double unsafeDirectMemoryReadSnippet(Unsafe unsafe, long address) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
275 // Unsafe.getBoolean(long) and Unsafe.getObject(long) do not exist
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
276 return unsafe.getByte(address) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
277 unsafe.getShort(address) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
278 unsafe.getChar(address) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
279 unsafe.getInt(address) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
280 unsafe.getLong(address) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
281 unsafe.getFloat(address) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
282 unsafe.getDouble(address);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
283 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
284 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
285 public static void unsafeDirectMemoryWriteSnippet(Unsafe unsafe, long address, byte value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
286 // Unsafe.putBoolean(long) and Unsafe.putObject(long) do not exist
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
287 unsafe.putByte(address, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
288 unsafe.putShort(address, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
289 unsafe.putChar(address, (char) value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
290 unsafe.putInt(address, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
291 unsafe.putLong(address, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
292 unsafe.putFloat(address, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
293 unsafe.putDouble(address, value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
294 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
295
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
296
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
297 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
298 public void testMathIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
299 test("mathSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
300 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
301
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
302 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
303 public static double mathSnippet(double value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
304 return Math.abs(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
305 Math.sqrt(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
306 Math.log(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
307 Math.log10(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
308 Math.sin(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
309 Math.cos(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
310 Math.tan(value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
311 // Math.exp(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
312 // Math.pow(value, 13);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
313 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
314
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
315
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
316 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
317 public void testIntegerIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
318 // TODO (chaeubl): some methods have Java implementations -> check more than Invoke nodes
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
319 test("integerSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
320 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
321
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
322 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
323 public static int integerSnippet(int value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
324 return Integer.reverseBytes(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
325 Integer.numberOfLeadingZeros(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
326 Integer.numberOfTrailingZeros(value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
327 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
328
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
329
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
330 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
331 public void testLongIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
332 test("longSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
333 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
334
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
335 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
336 public static long longSnippet(long value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
337 return Long.reverseBytes(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
338 Long.numberOfLeadingZeros(value) +
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
339 Long.numberOfTrailingZeros(value);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
340 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
341
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
342
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
343 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
344 public void testFloatIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
345 test("floatSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
346 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
347
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
348 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
349 public static float floatSnippet(float value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
350 return Float.intBitsToFloat(Float.floatToIntBits(value));
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
351 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
352
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
353
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
354 @Test
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
355 public void testDoubleIntrinsics() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
356 test("doubleSnippet");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
357 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
358
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
359 @SuppressWarnings("all")
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
360 public static double doubleSnippet(double value) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
361 return Double.longBitsToDouble(Double.doubleToLongBits(value));
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
362 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
363
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
364
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
365 private StructuredGraph test(final String snippet) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
366 return Debug.scope("IntrinsificationTest", new DebugDumpScope(snippet), new Callable<StructuredGraph>() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
367 @Override
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
368 public StructuredGraph call() {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
369 StructuredGraph graph = parse(snippet);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
370 PhasePlan phasePlan = getDefaultPhasePlan();
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
371 Assumptions assumptions = new Assumptions(true);
7223
e2ea829fafd9 use CHA more frequently for inlining
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220
diff changeset
372 new ComputeProbabilityPhase().apply(graph);
7220
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
373 Debug.dump(graph, "Graph");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
374 new InliningPhase(null, runtime(), null, assumptions, null, phasePlan, OptimisticOptimizations.ALL).apply(graph);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
375 Debug.dump(graph, "Graph");
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
376 new CanonicalizerPhase(null, runtime(), assumptions).apply(graph);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
377 new DeadCodeEliminationPhase().apply(graph);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
378
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
379 assertNoInvokes(graph);
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
380 return graph;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
381 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
382 });
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
383 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
384
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
385 private static boolean assertNoInvokes(StructuredGraph graph) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
386 for (Invoke invoke: graph.getInvokes()) {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
387 fail(invoke.toString());
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
388 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
389 return false;
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
390 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
391
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
392 private static class A {
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
393 }
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents:
diff changeset
394 }