annotate graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java @ 15230:df724f63f776

Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Fri, 18 Apr 2014 14:01:59 +0200
parents f675818d9ad0
children ada0a7729b6f
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 /**
15230
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
87 * Returns a boolean value indicating whether the method is executed in the compiled code.
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
88 *
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
89 * @return {@code false} when executed in the interpreter, {@code true} in compiled code.
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
90 */
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
91 public static boolean inCompiledCode() {
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
92 return false;
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
93 }
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
94
df724f63f776 Truffle API: Introduce new compiler directive inCompiledCode() as the negation of inInterpreter().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 15064
diff changeset
95 /**
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
96 * 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
97 * 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
98 *
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
99 * @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
100 */
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
101 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
102 runnable.run();
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
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
105 /**
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
106 * 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
107 * interpreter.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
108 *
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
109 * @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
110 * @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
111 * @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
112 */
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
113 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
114 return callable.call();
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
115 }
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
116
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
117 /**
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 * 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
119 * 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
120 * 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
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 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
123 * 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
124 *
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
125 * <code>
14906
f3a5036cc13c javadoc fixes
Bernhard Urban <bernhard.urban@jku.at>
parents: 14880
diff changeset
126 * 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
127 * // ...
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 * </code>
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
130 *
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
131 * 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
132 * 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
133 * 10%):
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
134 *
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
135 * <code>
14906
f3a5036cc13c javadoc fixes
Bernhard Urban <bernhard.urban@jku.at>
parents: 14880
diff changeset
136 * 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
137 * // ...
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 * }
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
139 * </code>
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
140 *
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
141 * 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
142 * {@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
143 * {@link #FASTPATH_PROBABILITY} ).
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
144 *
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
145 * @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
146 */
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
147 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
148 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
149 return condition;
9244
8f540423a5be Added two new classes to the Truffle API: CompilerDirectives and CompilerAsserts.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
150 }
9282
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
151
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
152 /**
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
153 * 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
154 *
9282
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
155 * @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
156 */
f5e58a1eca55 Added method CompilerDirectives.bailout to the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9244
diff changeset
157 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
158 }
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
159
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
160 /**
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
161 * 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
162 * 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
163 */
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
164 @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
165 @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
166 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
167 }
9349
0fccad3ce40d Introduce CompilerDirectives.Unsafe. Mark Frame.getArguments method as unsafe.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9319
diff changeset
168
0fccad3ce40d Introduce CompilerDirectives.Unsafe. Mark Frame.getArguments method as unsafe.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9319
diff changeset
169 /**
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
170 * 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
171 * 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
172 * 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
173 *
10649
ac8b195fd3aa New unsafe cast CompilerDirectives method in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9349
diff changeset
174 * @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
175 * @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
176 * @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
177 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
178 * @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
179 */
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
180 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
181 return unsafeCast(value, type, condition, false);
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
182 }
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
183
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
184 /**
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
185 * 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
186 * 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
187 * 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
188 *
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
189 * @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
190 * @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
191 * @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
192 * program
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
193 * @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
194 * @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
195 */
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
196 @SuppressWarnings("unchecked")
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
197 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
198 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
199 }
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
200
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
201 /**
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
202 * 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
203 *
12405
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
204 * @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
205 * @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
206 */
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
207 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
208 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
209 }
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
210
a9837a03127e Fix wrong modification of ReplacementsImpl macro node method handling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 12405
diff changeset
211 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
212 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
213 }
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
214
139b84d713bc Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11898
diff changeset
215 /**
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
216 * 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
217 * 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
218 * 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
219 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
220 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
221 * @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
222 * @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
223 * @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
224 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
225 * @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
226 * 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
227 * @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
228 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
229 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
230 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
231 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
232
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
233 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
234 * 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
235 * 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
236 * 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
237 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
238 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
239 * @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
240 * @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
241 * @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
242 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
243 * @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
244 * 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
245 * @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
246 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
247 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
248 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
249 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
250
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
251 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
252 * 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
253 * 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
254 * 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
255 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
256 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
257 * @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
258 * @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
259 * @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
260 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
261 * @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
262 * 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
263 * @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
264 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
265 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
266 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
267 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
268
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
269 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
270 * 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
271 * 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
272 * 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
273 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
274 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
275 * @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
276 * @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
277 * @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
278 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
279 * @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
280 * 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
281 * @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
282 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
283 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
284 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
285 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
286
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
287 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
288 * 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
289 * 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
290 * 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
291 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
292 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
293 * @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
294 * @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
295 * @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
296 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
297 * @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
298 * 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
299 * @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
300 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
301 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
302 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
303 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
304
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
305 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
306 * 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
307 * 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
308 * 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
309 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
310 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
311 * @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
312 * @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
313 * @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
314 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
315 * @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
316 * 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
317 * @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
318 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
319 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
320 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
321 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
322
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
323 /**
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
324 * 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
325 * 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
326 * 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
327 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
328 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
329 * @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
330 * @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
331 * @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
332 * 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
333 * @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
334 * 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
335 * @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
336 */
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
337 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
338 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
339 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
340
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
341 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
342 * 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
343 * 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
344 * 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
345 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
346 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
347 * @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
348 * @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
349 * @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
350 * program
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
351 * @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
352 * 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
353 * @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
354 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
355 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
356 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
357 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
358
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 * 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
361 * for improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
362 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
363 * @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
364 * @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
365 * @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
366 * @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
367 * 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
368 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
369 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
370 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
371 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
372
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 * 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
375 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
376 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
377 * @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
378 * @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
379 * @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
380 * @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
381 * 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
382 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
383 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
384 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
385 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
386
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 * 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
389 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
390 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
391 * @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
392 * @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
393 * @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
394 * @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
395 * 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
396 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
397 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
398 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
399 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
400
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
401 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
402 * 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
403 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
404 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
405 * @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
406 * @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
407 * @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
408 * @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
409 * 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
410 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
411 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
412 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
413 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
414
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 * 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
417 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
418 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
419 * @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
420 * @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
421 * @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
422 * @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
423 * 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
424 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
425 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
426 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
427 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
428
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 * 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
431 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
432 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
433 * @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
434 * @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
435 * @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
436 * @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
437 * 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
438 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
439 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
440 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
441 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
442
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 * 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
445 * improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
446 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
447 * @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
448 * @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
449 * @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
450 * @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
451 * 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
452 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
453 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
454 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
455 }
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
456
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
457 /**
13955
1541afe9cf15 add missing unsafeGetLong substitution; minor grammar fix (a/an)
Andreas Woess <andreas.woess@jku.at>
parents: 12770
diff changeset
458 * 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
459 * for improved global value numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
460 *
11898
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
461 * @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
462 * @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
463 * @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
464 * @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
465 * 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
466 */
f753092f608d Adjustments to unsafe access and unsafe cast compiler directives in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11897
diff changeset
467 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
468 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
469 }
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
470
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
471 /**
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
472 * 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
473 * 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
474 * 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
475 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
476 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
477 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
478 * @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
479 * @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
480 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
481 * @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
482 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
483 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
484 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
485 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
486 return UNSAFE.getBoolean(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
487 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
488
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
489 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
490 * 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
491 * 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
492 * 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
493 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
494 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
495 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
496 * @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
497 * @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
498 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
499 * @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
500 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
501 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
502 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
503 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
504 return UNSAFE.getByte(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
505 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
506
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
507 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
508 * 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
509 * 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
510 * 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
511 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
512 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
513 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
514 * @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
515 * @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
516 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
517 * @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
518 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
519 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
520 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
521 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
522 return UNSAFE.getShort(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
523 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
524
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
525 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
526 * 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
527 * 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
528 * 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
529 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
530 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
531 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
532 * @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
533 * @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
534 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
535 * @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
536 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
537 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
538 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
539 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
540 return UNSAFE.getInt(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
541 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
542
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
543 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
544 * 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
545 * 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
546 * 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
547 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
548 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
549 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
550 * @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
551 * @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
552 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
553 * @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
554 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
555 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
556 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
557 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
558 return UNSAFE.getLong(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
559 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
560
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
561 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
562 * 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
563 * 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
564 * 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
565 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
566 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
567 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
568 * @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
569 * @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
570 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
571 * @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
572 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
573 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
574 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
575 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
576 return UNSAFE.getFloat(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
577 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
578
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
579 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
580 * 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
581 * 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
582 * 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
583 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
584 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
585 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
586 * @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
587 * @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
588 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
589 * @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
590 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
591 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
592 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
593 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
594 return UNSAFE.getDouble(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
595 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
596
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
597 /**
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
598 * 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
599 * 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
600 * 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
601 * numbering.
14880
73546bd550f0 CompilerDirectives: add optional nonNull parameter to unsafeCast
Andreas Woess <andreas.woess@jku.at>
parents: 13956
diff changeset
602 *
13956
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
603 * @param receiver the object that is accessed
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
604 * @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
605 * @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
606 * program
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
607 * @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
608 * value numbering or null
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
609 * @return the accessed value
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
610 */
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
611 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
612 return UNSAFE.getObject(receiver, offset);
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
613 }
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
614
fca29edf5667 experimental CompilerDirectives.unsafeGetFinal*
Andreas Woess <andreas.woess@jku.at>
parents: 13955
diff changeset
615 /**
10687
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
616 * 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
617 */
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
618 @Retention(RetentionPolicy.RUNTIME)
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
619 @Target({ElementType.METHOD})
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
620 public @interface SlowPath {
d2055a110396 Introduce CompilerDirectives.SlowPath annotation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10650
diff changeset
621 }
11495
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
622
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
623 /**
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
624 * 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
625 * 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
626 */
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
627 @Retention(RetentionPolicy.RUNTIME)
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
628 @Target({ElementType.TYPE})
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
629 public @interface ValueType {
3662471dcfaa Introduce CompilerDirectives.ValueType annotation in Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 11322
diff changeset
630 }
15064
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
631
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
632 /**
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
633 * 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
634 * point of this call.
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
635 *
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
636 * @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
637 */
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
638 public static void materialize(Object obj) {
f675818d9ad0 new getStackTrace and getCurrentFrame functionality in TruffleRuntime
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
639 }
9283
159ac409c27a Fix new line at end of file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 9282
diff changeset
640 }