annotate graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java @ 13956:fca29edf5667

experimental CompilerDirectives.unsafeGetFinal*
author Andreas Woess <andreas.woess@jku.at>
date Fri, 14 Feb 2014 16:45:53 +0100
parents 1541afe9cf15
children 73546bd550f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
1 /*
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
4 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
11279
494b818b527c Adding "Classpath" exception to the classes in the com.oracle.truffle.api and the com.oracle.truffle.api.dsl package.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11269
diff changeset
7 * published by the Free Software Foundation. Oracle designates this
494b818b527c Adding "Classpath" exception to the classes in the com.oracle.truffle.api and the com.oracle.truffle.api.dsl package.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11269
diff changeset
8 * particular file as subject to the "Classpath" exception as provided
494b818b527c Adding "Classpath" exception to the classes in the com.oracle.truffle.api and the com.oracle.truffle.api.dsl package.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11269
diff changeset
9 * by Oracle in the LICENSE file that accompanied this code.
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
10 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
11 * This code is distributed in the hope that it will be useful, but WITHOUT
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
14 * version 2 for more details (a copy is included in the LICENSE file that
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
15 * accompanied this code).
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
16 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License version
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
18 * 2 along with this work; if not, write to the Free Software Foundation,
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
20 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
22 * or visit www.oracle.com if you need additional information or have any
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
23 * questions.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
24 */
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
25 package com.oracle.truffle.api;
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
26
9313
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
27 import java.lang.annotation.*;
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
28 import java.lang.reflect.*;
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
29 import java.util.concurrent.*;
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
30
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
31 import com.oracle.truffle.api.frame.*;
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
32
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
33 import sun.misc.*;
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
34
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
35 /**
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
36 * Directives that influence the optimizations of the Truffle compiler. All of the operations have
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
37 * no effect when executed in the Truffle interpreter.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
38 */
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
39 public final class CompilerDirectives {
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
40
9319
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
41 public static final double LIKELY_PROBABILITY = 0.75;
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
42 public static final double UNLIKELY_PROBABILITY = 1.0 - LIKELY_PROBABILITY;
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
43
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
44 public static final double SLOWPATH_PROBABILITY = 0.0001;
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
45 public static final double FASTPATH_PROBABILITY = 1.0 - SLOWPATH_PROBABILITY;
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
46
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
47 private static final Unsafe UNSAFE = getUnsafe();
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
48
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
49 private static Unsafe getUnsafe() {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
50 try {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
51 return Unsafe.getUnsafe();
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
52 } catch (SecurityException e) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
53 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
54 try {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
55 Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
56 theUnsafeInstance.setAccessible(true);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
57 return (Unsafe) theUnsafeInstance.get(Unsafe.class);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
58 } catch (Exception e) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
59 throw new RuntimeException("exception while trying to get Unsafe.theUnsafe via reflection:", e);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
60 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
61 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
62
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
63 /**
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
64 * Directive for the compiler to discontinue compilation at this code position and instead
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
65 * insert a transfer to the interpreter.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
66 */
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
67 public static void transferToInterpreter() {
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
68 }
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
69
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
70 /**
12770
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
71 * Directive for the compiler to discontinue compilation at this code position and instead
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
72 * insert a transfer to the interpreter, invalidating the currently executing machine code.
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
73 */
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
74 public static void transferToInterpreterAndInvalidate() {
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
75 }
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
76
3e013f4512de temporary addition of CompilerDirectives.transferToInterpreterAndInvalidate()
Michael Haupt <michael.haupt@oracle.com>
parents: 12408
diff changeset
77 /**
11269
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
78 * Returns a boolean value indicating whether the method is executed in the interpreter.
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
79 *
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
80 * @return {@code true} when executed in the interpreter, {@code false} in compiled code.
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
81 */
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
82 public static boolean inInterpreter() {
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
83 return true;
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
84 }
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
85
f00c85ee46a2 Truffle: add CompilerDirectives.inInterpreter()
Andreas Woess <andreas.woess@jku.at>
parents: 10687
diff changeset
86 /**
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
87 * Directive for the compiler that the given runnable should only be executed in the interpreter
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
88 * and ignored in the compiled code.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
89 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
90 * @param runnable the closure that should only be executed in the interpreter
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
91 */
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
92 public static void interpreterOnly(Runnable runnable) {
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
93 runnable.run();
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
94 }
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
95
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
96 /**
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
97 * Directive for the compiler that the given callable should only be executed in the
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
98 * interpreter.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
99 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
100 * @param callable the closure that should only be executed in the interpreter
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
101 * @return the result of executing the closure in the interpreter and null in the compiled code
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
102 * @throws Exception If the closure throws an exception when executed in the interpreter.
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
103 */
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
104 public static <T> T interpreterOnly(Callable<T> callable) throws Exception {
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
105 return callable.call();
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
106 }
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
107
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
108 /**
9319
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
109 * Injects a probability for the given condition into the probability information of the
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
110 * immediately succeeding branch instruction for the condition. The probability must be a value
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
111 * between 0.0 and 1.0 (inclusive). The condition should not be a combined condition.
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
112 *
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
113 * Example usage immediately before an if statement (it specifies that the likelihood for a to
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
114 * be greater than b is 90%):
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
115 *
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
116 * <code>
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
117 * if (injectBranchProbability(0.9, a > b)) {
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
118 * // ...
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
119 * }
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
120 * </code>
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
121 *
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
122 * Example usage for a combined condition (it specifies that the likelihood for a to be greater
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
123 * than b is 90% and under the assumption that this is true, the likelihood for a being 0 is
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
124 * 10%):
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
125 *
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
126 * <code>
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
127 * if (injectBranchProbability(0.9, a > b) && injectBranchProbability(0.1, a == 0)) {
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
128 * // ...
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
129 * }
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
130 * </code>
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
131 *
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
132 * There are predefined constants for commonly used probabilities (see
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
133 * {@link #LIKELY_PROBABILITY} , {@link #UNLIKELY_PROBABILITY}, {@link #SLOWPATH_PROBABILITY},
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
134 * {@link #FASTPATH_PROBABILITY} ).
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
135 *
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
136 * @param probability the probability value between 0.0 and 1.0 that should be injected
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
137 */
9319
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
138 public static boolean injectBranchProbability(double probability, boolean condition) {
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
139 assert probability >= 0.0 && probability <= 1.0;
9319
1188b7c42196 Changed the behavior of CompilerDirectives.injectBranchProbability and added javadoc to document the new behavior. Introduced probability constants. Removed CompilerDirectives.slowpath().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9313
diff changeset
140 return condition;
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
141 }
9282
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
142
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
143 /**
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
144 * Bails out of a compilation (e.g., for guest language features that should never be compiled).
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
145 *
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
146 * @param reason the reason for the bailout
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
147 */
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
148 public static void bailout(String reason) {
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
149 }
9313
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
150
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
151 /**
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
152 * Marks fields that should be considered final for a Truffle compilation although they are not
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
153 * final while executing in the interpreter.
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
154 */
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
155 @Retention(RetentionPolicy.RUNTIME)
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
156 @Target({ElementType.FIELD})
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
157 public @interface CompilationFinal {
6369d37b37d1 Added annotation CompilerDirectives.CompilationFinal for fields that should be considered final during compilation, but are not final while executing in the Truffle interpreter.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9283
diff changeset
158 }
9349
0fccad3ce40d Introduce CompilerDirectives.Unsafe. Mark Frame.getArguments method as unsafe.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9319
diff changeset
159
0fccad3ce40d Introduce CompilerDirectives.Unsafe. Mark Frame.getArguments method as unsafe.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9319
diff changeset
160 /**
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
161 * Casts the given value to the value of the given type without any checks. The class must
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
162 * evaluate to a constant. The condition parameter gives a hint to the compiler under which
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
163 * circumstances this cast can be moved to an earlier location in the program.
10649
ac8b195fd3aa New unsafe cast CompilerDirectives method in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9349
diff changeset
164 *
ac8b195fd3aa New unsafe cast CompilerDirectives method in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9349
diff changeset
165 * @param value the value that is known to have the specified type
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
166 * @param type the specified new type of the value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
167 * @param condition the condition that makes this cast safe also at an earlier location of the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
168 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
169 * @return the value to be casted to the new type
11303
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
170 */
11312
f0c8303cf88e Restructure Truffle API node intrinsics and introduce new intrinsics for type system modelling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11307
diff changeset
171 @SuppressWarnings("unchecked")
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
172 public static <T> T unsafeCast(Object value, Class<T> type, boolean condition) {
11312
f0c8303cf88e Restructure Truffle API node intrinsics and introduce new intrinsics for type system modelling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11307
diff changeset
173 return (T) value;
11303
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
174 }
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
175
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
176 /**
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
177 * Asserts that this value is not null and retrieved from a call to Frame.materialize.
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
178 *
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
179 * @param value the value that is known to have been obtained via Frame.materialize
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
180 * @return the value to be casted to the new type
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
181 */
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
182 public static MaterializedFrame unsafeFrameCast(MaterializedFrame value) {
12408
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
183 return unsafeCast(value, getUnsafeFrameType(), true);
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
184 }
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
185
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
186 private static Class<? extends MaterializedFrame> getUnsafeFrameType() {
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
187 return MaterializedFrame.class;
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
188 }
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
189
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
190 /**
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
191 * Unsafe access to a boolean value within an object. The condition parameter gives a hint to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
192 * the compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
193 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
194 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
195 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
196 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
197 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
198 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
199 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
200 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
201 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
202 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
203 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
204 public static boolean unsafeGetBoolean(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
205 return UNSAFE.getBoolean(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
206 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
207
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
208 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
209 * Unsafe access to a byte value within an object. The condition parameter gives a hint to the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
210 * compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
211 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
212 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
213 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
214 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
215 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
216 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
217 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
218 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
219 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
220 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
221 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
222 public static byte unsafeGetByte(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
223 return UNSAFE.getByte(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
224 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
225
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
226 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
227 * Unsafe access to a short value within an object. The condition parameter gives a hint to the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
228 * compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
229 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
230 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
231 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
232 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
233 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
234 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
235 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
236 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
237 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
238 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
239 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
240 public static short unsafeGetShort(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
241 return UNSAFE.getShort(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
242 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
243
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
244 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
245 * Unsafe access to an int value within an object. The condition parameter gives a hint to the
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
246 * compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
247 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
248 * numbering.
11303
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
249 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
250 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
251 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
252 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
253 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
254 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
255 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
256 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
257 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
258 public static int unsafeGetInt(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
259 return UNSAFE.getInt(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
260 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
261
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
262 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
263 * Unsafe access to a long value within an object. The condition parameter gives a hint to the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
264 * compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
265 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
266 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
267 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
268 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
269 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
270 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
271 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
272 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
273 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
274 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
275 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
276 public static long unsafeGetLong(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
277 return UNSAFE.getLong(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
278 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
279
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
280 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
281 * Unsafe access to a float value within an object. The condition parameter gives a hint to the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
282 * compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
283 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
284 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
285 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
286 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
287 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
288 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
289 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
290 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
291 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
292 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
293 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
294 public static float unsafeGetFloat(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
295 return UNSAFE.getFloat(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
296 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
297
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
298 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
299 * Unsafe access to a double value within an object. The condition parameter gives a hint to the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
300 * compiler under which circumstances this access can be moved to an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
301 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
302 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
303 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
304 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
305 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
306 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
307 * program
11303
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
308 * @param locationIdentity the location identity token that can be used for improved global
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
309 * value numbering or null
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
310 * @return the accessed value
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
311 */
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
312 public static double unsafeGetDouble(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
313 return UNSAFE.getDouble(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
314 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
315
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
316 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
317 * Unsafe access to an Object value within an object. The condition parameter gives a hint to
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
318 * the compiler under which circumstances this access can be moved to an earlier location in the
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
319 * program. The location identity gives a hint to the compiler for improved global value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
320 * numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
321 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
322 * @param receiver the object that is accessed
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
323 * @param offset the offset at which to access the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
324 * @param condition the condition that makes this access safe also at an earlier location in the
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
325 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
326 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
327 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
328 * @return the accessed value
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
329 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
330 public static Object unsafeGetObject(Object receiver, long offset, boolean condition, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
331 return UNSAFE.getObject(receiver, offset);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
332 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
333
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
334 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
335 * Write a boolean value within an object. The location identity gives a hint to the compiler
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
336 * for improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
337 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
338 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
339 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
340 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
341 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
342 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
343 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
344 public static void unsafePutBoolean(Object receiver, long offset, boolean value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
345 UNSAFE.putBoolean(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
346 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
347
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
348 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
349 * Write a byte value within an object. The location identity gives a hint to the compiler for
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
350 * improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
351 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
352 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
353 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
354 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
355 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
356 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
357 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
358 public static void unsafePutByte(Object receiver, long offset, byte value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
359 UNSAFE.putByte(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
360 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
361
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
362 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
363 * Write a short value within an object. The location identity gives a hint to the compiler for
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
364 * improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
365 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
366 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
367 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
368 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
369 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
370 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
371 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
372 public static void unsafePutShort(Object receiver, long offset, short value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
373 UNSAFE.putShort(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
374 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
375
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
376 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
377 * Write an int value within an object. The location identity gives a hint to the compiler for
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
378 * improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
379 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
380 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
381 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
382 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
383 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
384 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
385 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
386 public static void unsafePutInt(Object receiver, long offset, int value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
387 UNSAFE.putInt(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
388 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
389
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
390 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
391 * Write a long value within an object. The location identity gives a hint to the compiler for
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
392 * improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
393 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
394 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
395 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
396 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
397 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
398 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
399 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
400 public static void unsafePutLong(Object receiver, long offset, long value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
401 UNSAFE.putLong(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
402 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
403
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
404 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
405 * Write a float value within an object. The location identity gives a hint to the compiler for
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
406 * improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
407 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
408 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
409 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
410 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
411 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
412 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
413 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
414 public static void unsafePutFloat(Object receiver, long offset, float value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
415 UNSAFE.putFloat(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
416 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
417
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
418 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
419 * Write a double value within an object. The location identity gives a hint to the compiler for
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
420 * improved global value numbering.
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
421 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
422 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
423 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
424 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
425 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
426 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
427 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
428 public static void unsafePutDouble(Object receiver, long offset, double value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
429 UNSAFE.putDouble(receiver, offset, value);
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
430 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
431
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
432 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
433 * Write an Object value within an object. The location identity gives a hint to the compiler
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
434 * for improved global value numbering.
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
435 *
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
436 * @param receiver the object that is written to
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
437 * @param offset the offset at which to write to the object in bytes
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
438 * @param value the value to be written
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
439 * @param locationIdentity the location identity token that can be used for improved global
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
440 * value numbering or null
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
441 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
442 public static void unsafePutObject(Object receiver, long offset, Object value, Object locationIdentity) {
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
443 UNSAFE.putObject(receiver, offset, value);
11303
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
444 }
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
445
28da427847c5 New Truffle API methods for efficient implementation of a custom type system on top of the JVM.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11279
diff changeset
446 /**
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
447 * Unsafe access to a final boolean value within an object. The condition parameter gives a hint
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
448 * to the compiler under which circumstances this access can be moved to an earlier location in
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
449 * the program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
450 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
451 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
452 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
453 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
454 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
455 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
456 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
457 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
458 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
459 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
460 public static boolean unsafeGetFinalBoolean(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
461 return UNSAFE.getBoolean(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
462 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
463
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
464 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
465 * Unsafe access to a final byte value within an object. The condition parameter gives a hint to
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
466 * the compiler under which circumstances this access can be moved to an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
467 * program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
468 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
469 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
470 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
471 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
472 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
473 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
474 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
475 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
476 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
477 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
478 public static byte unsafeGetFinalByte(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
479 return UNSAFE.getByte(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
480 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
481
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
482 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
483 * Unsafe access to a final short value within an object. The condition parameter gives a hint
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
484 * to the compiler under which circumstances this access can be moved to an earlier location in
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
485 * the program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
486 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
487 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
488 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
489 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
490 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
491 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
492 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
493 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
494 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
495 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
496 public static short unsafeGetFinalShort(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
497 return UNSAFE.getShort(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
498 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
499
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
500 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
501 * Unsafe access to a final int value within an object. The condition parameter gives a hint to
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
502 * the compiler under which circumstances this access can be moved to an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
503 * program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
504 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
505 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
506 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
507 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
508 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
509 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
510 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
511 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
512 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
513 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
514 public static int unsafeGetFinalInt(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
515 return UNSAFE.getInt(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
516 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
517
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
518 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
519 * Unsafe access to a final long value within an object. The condition parameter gives a hint to
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
520 * the compiler under which circumstances this access can be moved to an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
521 * program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
522 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
523 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
524 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
525 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
526 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
527 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
528 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
529 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
530 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
531 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
532 public static long unsafeGetFinalLong(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
533 return UNSAFE.getLong(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
534 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
535
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
536 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
537 * Unsafe access to a final float value within an object. The condition parameter gives a hint
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
538 * to the compiler under which circumstances this access can be moved to an earlier location in
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
539 * the program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
540 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
541 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
542 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
543 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
544 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
545 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
546 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
547 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
548 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
549 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
550 public static float unsafeGetFinalFloat(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
551 return UNSAFE.getFloat(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
552 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
553
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
554 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
555 * Unsafe access to a final double value within an object. The condition parameter gives a hint
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
556 * to the compiler under which circumstances this access can be moved to an earlier location in
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
557 * the program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
558 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
559 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
560 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
561 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
562 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
563 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
564 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
565 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
566 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
567 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
568 public static double unsafeGetFinalDouble(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
569 return UNSAFE.getDouble(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
570 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
571
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
572 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
573 * Unsafe access to a final Object value within an object. The condition parameter gives a hint
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
574 * to the compiler under which circumstances this access can be moved to an earlier location in
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
575 * the program. The location identity gives a hint to the compiler for improved global value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
576 * numbering.
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
577 *
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
578 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
579 * @param offset the offset at which to access the object in bytes
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
580 * @param condition the condition that makes this access safe also at an earlier location in the
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
581 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
582 * @param locationIdentity the location identity token that can be used for improved global
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
583 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
584 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
585 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
586 public static Object unsafeGetFinalObject(Object receiver, long offset, boolean condition, Object locationIdentity) {
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
587 return UNSAFE.getObject(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
588 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
589
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
590 /**
10687
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
591 * Marks methods that are considered slowpath and should therefore not be inlined by default.
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
592 */
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
593 @Retention(RetentionPolicy.RUNTIME)
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
594 @Target({ElementType.METHOD})
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
595 public @interface SlowPath {
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
596 }
11495
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
597
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
598 /**
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
599 * Marks classes as value types. Reference comparisons (==) between instances of those classes
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
600 * have undefined semantics and can either return true or false.
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
601 */
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
602 @Retention(RetentionPolicy.RUNTIME)
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
603 @Target({ElementType.TYPE})
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
604 public @interface ValueType {
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
605 }
9283
159ac409c27a Fix new line at end of file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9282
diff changeset
606 }