annotate graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java @ 15064:f675818d9ad0

new getStackTrace and getCurrentFrame functionality in TruffleRuntime
author Lukas Stadler <lukas.stadler@oracle.com>
date Fri, 11 Apr 2014 11:53:11 +0200
parents 64dcb92ee75a
children df724f63f776
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
14991
64dcb92ee75a Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14906
diff changeset
31 import sun.misc.*;
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
32
14991
64dcb92ee75a Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14906
diff changeset
33 import com.oracle.truffle.api.frame.*;
11898
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.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
79 *
11269
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.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
89 *
9244
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.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
99 *
9244
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.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
112 *
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
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%):
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
115 *
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
116 * <code>
14906
f3a5036cc13c javadoc fixes
Bernhard Urban <bernhard.urban@jku.at>
parents: 14880
diff changeset
117 * if (injectBranchProbability(0.9, a &gt; b)) {
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
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>
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
121 *
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
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%):
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
125 *
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
126 * <code>
14906
f3a5036cc13c javadoc fixes
Bernhard Urban <bernhard.urban@jku.at>
parents: 14880
diff changeset
127 * if (injectBranchProbability(0.9, a &gt; b) &amp;&amp; injectBranchProbability(0.1, a == 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
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>
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
131 *
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
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} ).
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
135 *
9244
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).
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
145 *
9282
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.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
164 *
10649
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 */
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
171 public static <T> T unsafeCast(Object value, Class<T> type, boolean condition) {
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
172 return unsafeCast(value, type, condition, false);
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
173 }
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
174
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
175 /**
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
176 * Casts the given value to the value of the given type without any checks. The class must
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
177 * evaluate to a constant. The condition parameter gives a hint to the compiler under which
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
178 * circumstances this cast can be moved to an earlier location in the program.
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
179 *
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
180 * @param value the value that is known to have the specified type
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
181 * @param type the specified new type of the value
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
182 * @param condition the condition that makes this cast safe also at an earlier location of the
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
183 * program
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
184 * @param nonNull whether value is known to never be null
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
185 * @return the value to be casted to the new type
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
186 */
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
187 @SuppressWarnings("unchecked")
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
188 public static <T> T unsafeCast(Object value, Class<T> type, boolean condition, boolean nonNull) {
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
189 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
190 }
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
191
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
192 /**
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
193 * Asserts that this value is not null and retrieved from a call to Frame.materialize.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
194 *
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
195 * @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
196 * @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
197 */
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
198 public static MaterializedFrame unsafeFrameCast(MaterializedFrame value) {
14991
64dcb92ee75a Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14906
diff changeset
199 return unsafeCast(value, getUnsafeFrameType(), true, true);
12408
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
200 }
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
201
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
202 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
203 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
204 }
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
205
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
206 /**
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
207 * 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
208 * 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
209 * 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
210 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
211 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
212 * @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
213 * @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
214 * @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
215 * program
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 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
217 * 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
218 * @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
219 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
220 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
221 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
222 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
223
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 * 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
226 * 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
227 * 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
228 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
229 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
230 * @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
231 * @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
232 * @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
233 * program
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 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
235 * 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
236 * @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
237 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
238 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
239 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
240 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
241
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 * 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
244 * 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
245 * 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
246 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
247 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
248 * @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
249 * @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
250 * @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
251 * program
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 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
253 * 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
254 * @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
255 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
256 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
257 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
258 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
259
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
260 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
261 * 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
262 * 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
263 * 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
264 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
265 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
266 * @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
267 * @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
268 * @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
269 * program
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 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
271 * 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
272 * @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
273 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
274 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
275 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
276 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
277
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 * 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
280 * 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
281 * 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
282 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
283 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
284 * @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
285 * @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
286 * @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
287 * program
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 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
289 * 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
290 * @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
291 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
292 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
293 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
294 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
295
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 * 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
298 * 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
299 * 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
300 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
301 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
302 * @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
303 * @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
304 * @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
305 * program
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 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
307 * 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
308 * @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
309 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
310 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
311 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
312 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
313
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 * 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
316 * 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
317 * 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
318 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
319 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
320 * @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
321 * @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
322 * @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
323 * 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
324 * @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
325 * 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
326 * @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
327 */
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
328 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
329 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
330 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
331
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
332 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
333 * 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
334 * 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
335 * 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
336 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
337 *
11898
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 accessed
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 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
340 * @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
341 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
342 * @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
343 * 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
344 * @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
345 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
346 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
347 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
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
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
350 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
351 * 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
352 * for improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
353 *
11898
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 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
355 * @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
356 * @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
357 * @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
358 * 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
359 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
360 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
361 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
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
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
364 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
365 * 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
366 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
367 *
11898
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 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
369 * @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
370 * @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
371 * @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
372 * 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
373 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
374 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
375 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
376 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
377
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
378 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
379 * 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
380 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
381 *
11898
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 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
383 * @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
384 * @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
385 * @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
386 * 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
387 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
388 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
389 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
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
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
392 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
393 * 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
394 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
395 *
11898
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 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
397 * @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
398 * @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
399 * @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
400 * 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
401 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
402 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
403 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
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
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
406 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
407 * 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
408 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
409 *
11898
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 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
411 * @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
412 * @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
413 * @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
414 * 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
415 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
416 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
417 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
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
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
420 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
421 * 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
422 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
423 *
11898
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 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
425 * @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
426 * @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
427 * @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
428 * 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
429 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
430 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
431 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
432 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
433
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
434 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
435 * 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
436 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
437 *
11898
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 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
439 * @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
440 * @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
441 * @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
442 * 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
443 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
444 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
445 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
446 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
447
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
448 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
449 * 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
450 * for improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
451 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
452 * @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
453 * @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
454 * @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
455 * @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
456 * 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
457 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
458 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
459 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
460 }
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
461
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
462 /**
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
463 * 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
464 * 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
465 * 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
466 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
467 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
468 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
469 * @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
470 * @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
471 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
472 * @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
473 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
474 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
475 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
476 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
477 return UNSAFE.getBoolean(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
478 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
479
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 * 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
482 * 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
483 * 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
484 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
485 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
486 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
487 * @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
488 * @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
489 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
490 * @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
491 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
492 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
493 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
494 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
495 return UNSAFE.getByte(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
496 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
497
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 * 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
500 * 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
501 * 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
502 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
503 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
504 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
505 * @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
506 * @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
507 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
508 * @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
509 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
510 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
511 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
512 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
513 return UNSAFE.getShort(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
514 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
515
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 * 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
518 * 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
519 * 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
520 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
521 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
522 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
523 * @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
524 * @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
525 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
526 * @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
527 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
528 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
529 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
530 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
531 return UNSAFE.getInt(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
532 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
533
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 * 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
536 * 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
537 * 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
538 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
539 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
540 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
541 * @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
542 * @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
543 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
544 * @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
545 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
546 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
547 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
548 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
549 return UNSAFE.getLong(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
550 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
551
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 * 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
554 * 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
555 * 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
556 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
557 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
558 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
559 * @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
560 * @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
561 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
562 * @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
563 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
564 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
565 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
566 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
567 return UNSAFE.getFloat(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
568 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
569
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 * 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
572 * 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
573 * 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
574 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
575 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
576 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
577 * @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
578 * @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
579 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
580 * @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
581 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
582 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
583 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
584 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
585 return UNSAFE.getDouble(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
586 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
587
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 * 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
590 * 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
591 * 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
592 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
593 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
594 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
595 * @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
596 * @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
597 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
598 * @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
599 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
600 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
601 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
602 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
603 return UNSAFE.getObject(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
604 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
605
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
606 /**
10687
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
607 * 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
608 */
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
609 @Retention(RetentionPolicy.RUNTIME)
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
610 @Target({ElementType.METHOD})
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
611 public @interface SlowPath {
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
612 }
11495
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
613
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
614 /**
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
615 * 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
616 * 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
617 */
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
618 @Retention(RetentionPolicy.RUNTIME)
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
619 @Target({ElementType.TYPE})
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
620 public @interface ValueType {
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
621 }
15064
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
622
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
623 /**
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
624 * Ensures that the given object is not virtual, i.e., not removed by Escape Analysis at the
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
625 * point of this call.
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
626 *
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
627 * @param obj the object to exclude from Escape Analysis
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
628 */
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
629 public static void materialize(Object obj) {
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
630 }
9283
159ac409c27a Fix new line at end of file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9282
diff changeset
631 }