Mercurial > hg > truffle
annotate src/share/vm/graal/graalVMEntries.cpp @ 3586:7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
author | Gilles Duboscq <gilles.m.duboscq@gmail.com> |
---|---|
date | Fri, 07 Oct 2011 16:49:07 +0200 |
parents | cda0630a8640 |
children | 1692a2f9bfc5 |
rev | line source |
---|---|
2516
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
1 /* |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
4 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
7 * published by the Free Software Foundation. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
8 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
13 * accompanied this code). |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
14 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
18 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
21 * questions. |
1410
b30a2cd5e3a2
Added methods to c1x_VMExits.cpp
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1406
diff
changeset
|
22 */ |
b30a2cd5e3a2
Added methods to c1x_VMExits.cpp
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1406
diff
changeset
|
23 |
2045
9c96c873c42b
Fix includes to match new hotspot mechanism.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1942
diff
changeset
|
24 #include "precompiled.hpp" |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
25 #include "c1/c1_Runtime1.hpp" |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
26 #include "ci/ciMethodData.hpp" |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
27 #include "graal/graalVMEntries.hpp" |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
28 #include "graal/graalCompiler.hpp" |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
29 #include "graal/graalJavaAccess.hpp" |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
30 #include "graal/graalCodeInstaller.hpp" |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
31 #include "graal/graalVMExits.hpp" |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
32 #include "graal/graalVmIds.hpp" |
2663
d7c0775d7e72
added includes to build without precompiled headers
Christian.Wimmer@Oracle.com
parents:
2659
diff
changeset
|
33 #include "memory/oopFactory.hpp" |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
34 #include "oops/generateOopMap.hpp" |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
35 |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
36 methodOop getMethodFromHotSpotMethod(jobject hotspot_method) { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
37 return getMethodFromHotSpotMethod(JNIHandles::resolve(hotspot_method)); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
38 } |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
39 |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
40 methodOop getMethodFromHotSpotMethod(oop hotspot_method) { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
41 oop reflected = HotSpotMethodResolved::javaMirror(hotspot_method); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
42 assert(reflected != NULL, "NULL not expected"); |
3020
9fed07e4a375
Changed from method/reflect object back to methodOop, because using method/reflection can create deadlock with the user application (test with -Xcomp). Disabled method caching by default and created a flag -G:StoreResultGraph (otherwise eclipse will fail because of being out of memory).
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3014
diff
changeset
|
43 return (methodOop)reflected; |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
44 |
3020
9fed07e4a375
Changed from method/reflect object back to methodOop, because using method/reflection can create deadlock with the user application (test with -Xcomp). Disabled method caching by default and created a flag -G:StoreResultGraph (otherwise eclipse will fail because of being out of memory).
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3014
diff
changeset
|
45 // (tw) Cannot use reflection code, because then the compiler can dead lock with the user application (test using -Xcomp). |
9fed07e4a375
Changed from method/reflect object back to methodOop, because using method/reflection can create deadlock with the user application (test with -Xcomp). Disabled method caching by default and created a flag -G:StoreResultGraph (otherwise eclipse will fail because of being out of memory).
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3014
diff
changeset
|
46 /* |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
47 // method is a handle to a java.lang.reflect.Method object |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
48 oop mirror = NULL; |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
49 int slot = 0; |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
50 |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
51 if (reflected->klass() == SystemDictionary::reflect_Constructor_klass()) { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
52 mirror = java_lang_reflect_Constructor::clazz(reflected); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
53 slot = java_lang_reflect_Constructor::slot(reflected); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
54 } else { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
55 assert(reflected->klass() == SystemDictionary::reflect_Method_klass(), "wrong type"); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
56 mirror = java_lang_reflect_Method::clazz(reflected); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
57 slot = java_lang_reflect_Method::slot(reflected); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
58 } |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
59 klassOop k = java_lang_Class::as_klassOop(mirror); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
60 |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
61 // Make sure class is initialized before handing id's out to methods |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
62 // assert(instanceKlass::cast(k)->is_initialized(), "only initialized classes expected"); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
63 methodOop m = instanceKlass::cast(k)->method_with_idnum(slot); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
64 assert(m != NULL, "deleted method?"); |
3020
9fed07e4a375
Changed from method/reflect object back to methodOop, because using method/reflection can create deadlock with the user application (test with -Xcomp). Disabled method caching by default and created a flag -G:StoreResultGraph (otherwise eclipse will fail because of being out of memory).
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3014
diff
changeset
|
65 return m;*/ |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
66 } |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
67 |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
68 oop getReflectedMethod(methodOop method, TRAPS) { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
69 assert(method != NULL, "NULL not expected"); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
70 |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
71 if (!method->is_initializer() || method->is_static()) { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
72 return Reflection::new_method(method, true, true, CHECK_NULL); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
73 } else { |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
74 return Reflection::new_constructor(method, CHECK_NULL); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
75 } |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
76 } |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
77 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
78 // public byte[] RiMethod_code(long vmId); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
79 JNIEXPORT jbyteArray JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1code(JNIEnv *env, jobject, jobject hotspot_method) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
80 TRACE_graal_3("VMEntries::RiMethod_code"); |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
81 methodHandle method = getMethodFromHotSpotMethod(hotspot_method); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
82 int code_size = method->code_size(); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
83 jbyteArray result = env->NewByteArray(code_size); |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
84 env->SetByteArrayRegion(result, 0, code_size, (const jbyte *) method->code_base()); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
85 return result; |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
86 } |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
87 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
88 // public String RiMethod_signature(long vmId); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
89 JNIEXPORT jstring JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1signature(JNIEnv *env, jobject, jobject hotspot_method) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
90 TRACE_graal_3("VMEntries::RiMethod_signature"); |
1422
3483ec571caf
* using reflected objects instead of oops
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1421
diff
changeset
|
91 VM_ENTRY_MARK |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
92 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
93 assert(method != NULL && method->signature() != NULL, "signature required"); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
94 return VmIds::toString<jstring>(method->signature(), THREAD); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
95 } |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
96 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
97 // public RiExceptionHandler[] RiMethod_exceptionHandlers(long vmId); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
98 JNIEXPORT jobjectArray JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1exceptionHandlers(JNIEnv *, jobject, jobject hotspot_method) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
99 TRACE_graal_3("VMEntries::RiMethod_exceptionHandlers"); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
100 VM_ENTRY_MARK |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
101 methodHandle method = getMethodFromHotSpotMethod(hotspot_method); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
102 typeArrayHandle handlers = method->exception_table(); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
103 int handler_count = handlers.is_null() ? 0 : handlers->length() / 4; |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
104 |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
105 instanceKlass::cast(HotSpotExceptionHandler::klass())->initialize(CHECK_NULL); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
106 objArrayHandle array = oopFactory::new_objArray(SystemDictionary::RiExceptionHandler_klass(), handler_count, CHECK_NULL); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
107 |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
108 for (int i = 0; i < handler_count; i++) { |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
109 // exception handlers are stored as four integers: start bci, end bci, handler bci, catch class constant pool index |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
110 int base = i * 4; |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
111 Handle entry = instanceKlass::cast(HotSpotExceptionHandler::klass())->allocate_instance(CHECK_NULL); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
112 HotSpotExceptionHandler::set_startBci(entry, handlers->int_at(base + 0)); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
113 HotSpotExceptionHandler::set_endBci(entry, handlers->int_at(base + 1)); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
114 HotSpotExceptionHandler::set_handlerBci(entry, handlers->int_at(base + 2)); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
115 int catch_class_index = handlers->int_at(base + 3); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
116 HotSpotExceptionHandler::set_catchClassIndex(entry, catch_class_index); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
117 |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
118 if (catch_class_index == 0) { |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
119 HotSpotExceptionHandler::set_catchClass(entry, NULL); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
120 } else { |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
121 constantPoolOop cp = instanceKlass::cast(method->method_holder())->constants(); |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
122 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(method->method_holder()); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
123 bool is_accessible = false; |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
124 ciKlass *klass = CURRENT_ENV->get_klass_by_index(cp, catch_class_index, is_accessible, loading_klass); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
125 oop catch_class = GraalCompiler::get_RiType(klass, method->method_holder(), CHECK_NULL); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
126 |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
127 HotSpotExceptionHandler::set_catchClass(entry, catch_class); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
128 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
129 array->obj_at_put(i, entry()); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
130 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
131 |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
132 return (jobjectArray) JNIHandles::make_local(array()); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
133 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
134 |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
135 // public boolean RiMethod_hasBalancedMonitors(long vmId); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
136 JNIEXPORT jint JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1hasBalancedMonitors(JNIEnv *, jobject, jobject hotspot_method) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
137 TRACE_graal_3("VMEntries::RiMethod_hasBalancedMonitors"); |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
138 |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
139 VM_ENTRY_MARK; |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
140 |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
141 // Analyze the method to see if monitors are used properly. |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
142 methodHandle method(THREAD, getMethodFromHotSpotMethod(hotspot_method)); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
143 assert(method->has_monitor_bytecodes(), "should have checked this"); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
144 |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
145 // Check to see if a previous compilation computed the monitor-matching analysis. |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
146 if (method->guaranteed_monitor_matching()) { |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
147 return true; |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
148 } |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
149 |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
150 { |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
151 EXCEPTION_MARK; |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
152 ResourceMark rm(THREAD); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
153 GeneratePairingInfo gpi(method); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
154 gpi.compute_map(CATCH); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
155 if (!gpi.monitor_safe()) { |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
156 return false; |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
157 } |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
158 method->set_guaranteed_monitor_matching(); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
159 } |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
160 return true; |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
161 } |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
162 |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
163 // public RiMethod getRiMethod(java.lang.reflect.Method reflectionMethod); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
164 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_getRiMethod(JNIEnv *, jobject, jobject reflection_method_handle) { |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
165 TRACE_graal_3("VMEntries::getRiMethod"); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
166 VM_ENTRY_MARK; |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
167 oop reflection_method = JNIHandles::resolve(reflection_method_handle); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
168 oop reflection_holder = java_lang_reflect_Method::clazz(reflection_method); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
169 int slot = java_lang_reflect_Method::slot(reflection_method); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
170 klassOop holder = java_lang_Class::as_klassOop(reflection_holder); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
171 methodOop method = instanceKlass::cast(holder)->method_with_idnum(slot); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
172 oop ret = GraalCompiler::createHotSpotMethodResolved(method, CHECK_NULL); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
173 return JNIHandles::make_local(THREAD, ret); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
174 } |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
175 |
2049
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
176 // public boolean RiMethod_uniqueConcreteMethod(long vmId); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
177 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1uniqueConcreteMethod(JNIEnv *, jobject, jobject hotspot_method) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
178 TRACE_graal_3("VMEntries::RiMethod_uniqueConcreteMethod"); |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
179 |
2050
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
180 VM_ENTRY_MARK; |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
181 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
182 klassOop holder = method->method_holder(); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
183 if (holder->klass_part()->is_interface()) { |
2050
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
184 // Cannot trust interfaces. Because of: |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
185 // interface I { void foo(); } |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
186 // class A { public void foo() {} } |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
187 // class B extends A implements I { } |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
188 // class C extends B { public void foo() { } } |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
189 // class D extends B { } |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
190 // Would lead to identify C.foo() as the unique concrete method for I.foo() without seeing A.foo(). |
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
191 return false; |
2049
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
192 } |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
193 methodOop unique_concrete; |
2050
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
194 { |
2061
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
195 ResourceMark rm; |
2050
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
196 MutexLocker locker(Compile_lock); |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
197 unique_concrete = Dependencies::find_unique_concrete_method(holder, method); |
2050
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
198 } |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
199 if (unique_concrete == NULL) { |
2049
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
200 return NULL; |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
201 } else { |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
202 oop method_resolved = GraalCompiler::createHotSpotMethodResolved(unique_concrete, CHECK_NULL); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
203 return JNIHandles::make_local(THREAD, method_resolved); |
2049
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
204 } |
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
205 } |
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
206 |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
207 // public native int RiMethod_invocationCount(long vmId); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
208 JNIEXPORT jint JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1invocationCount(JNIEnv *, jobject, jobject hotspot_method) { |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
209 TRACE_graal_3("VMEntries::RiMethod_invocationCount"); |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
210 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
211 return method->invocation_count(); |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
212 } |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
213 |
3465
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
214 // public native int RiMethod_exceptionProbability(long vmId, int bci); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
215 JNIEXPORT jint JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2exceptionProbability(JNIEnv *, jobject, jobject hotspot_method, jint bci) { |
3055
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
216 TRACE_graal_3("VMEntries::RiMethod_exceptionProbability"); |
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
217 { |
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
218 VM_ENTRY_MARK; |
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
219 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
220 methodDataOop method_data = method->method_data(); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
221 if (method_data == NULL || !method_data->is_mature()) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
222 return -1; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
223 } |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
224 ProfileData* data = method_data->bci_to_data(bci); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
225 if (data == NULL) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
226 return 0; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
227 } |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
228 uint trap = Deoptimization::trap_state_is_recompiled(data->trap_state())? 1: 0; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
229 if (trap > 0) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
230 return 100; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
231 } else { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
232 return trap; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
233 } |
3055
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
234 } |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
235 } |
3487
b9ed7199f6fb
special handling for VirtualObject(Field) in IdentifyBlocksPhase (don't schedule out of loops), better toString for HotSpotMethod/Field
Lukas Stadler <lukas.stadler@jku.at>
parents:
3465
diff
changeset
|
236 |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
237 // ------------------------------------------------------------------ |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
238 // Adjust a CounterData count to be commensurate with |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
239 // interpreter_invocation_count. If the MDO exists for |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
240 // only 25% of the time the method exists, then the |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
241 // counts in the MDO should be scaled by 4X, so that |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
242 // they can be usefully and stably compared against the |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
243 // invocation counts in methods. |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
244 int scale_count(methodDataOop method_data, int count) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
245 if (count > 0) { |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
246 int counter_life; |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
247 int method_life = method_data->method()->interpreter_invocation_count(); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
248 int current_mileage = methodDataOopDesc::mileage_of(method_data->method()); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
249 int creation_mileage = method_data->creation_mileage(); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
250 counter_life = current_mileage - creation_mileage; |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
251 |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
252 // counter_life due to backedge_counter could be > method_life |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
253 if (counter_life > method_life) |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
254 counter_life = method_life; |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
255 if (0 < counter_life && counter_life <= method_life) { |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
256 count = (int)((double)count * method_life / counter_life + 0.5); |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
257 count = (count > 0) ? count : 1; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
258 } |
3487
b9ed7199f6fb
special handling for VirtualObject(Field) in IdentifyBlocksPhase (don't schedule out of loops), better toString for HotSpotMethod/Field
Lukas Stadler <lukas.stadler@jku.at>
parents:
3465
diff
changeset
|
259 } |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
260 return count; |
3055
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
261 } |
fecdb0a65fb2
runtime profiles exceptions at the call site
Lukas Stadler <lukas.stadler@jku.at>
parents:
3020
diff
changeset
|
262 |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
263 // public native RiTypeProfile RiMethod_typeProfile(long vmId, int bci); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
264 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2typeProfile(JNIEnv *, jobject, jobject hotspot_method, jint bci) { |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
265 TRACE_graal_3("VMEntries::RiMethod_typeProfile"); |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
266 Handle obj; |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
267 { |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
268 VM_ENTRY_MARK; |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
269 methodHandle method = getMethodFromHotSpotMethod(hotspot_method); |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
270 if (strstr(method->name_and_sig_as_C_string(), "factor") != NULL) { |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
271 // tty->print_cr("here"); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
272 } |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
273 if (bci == 123) { |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
274 // tty->print_cr("here2"); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
275 } |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
276 methodDataHandle method_data = method->method_data(); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
277 if (method_data == NULL || !method_data->is_mature()) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
278 return NULL; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
279 } |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
280 ProfileData* data = method_data->bci_to_data(bci); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
281 if (data != NULL && data->is_ReceiverTypeData()) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
282 ReceiverTypeData* recv = data->as_ReceiverTypeData(); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
283 // determine morphism |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
284 int morphism = 0; |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
285 uint total_count = 0; |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
286 for (uint i = 0; i < recv->row_limit(); i++) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
287 klassOop receiver = recv->receiver(i); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
288 if (receiver == NULL) continue; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
289 morphism++; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
290 total_count += recv->receiver_count(i); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
291 } |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
292 |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
293 instanceKlass::cast(RiTypeProfile::klass())->initialize(CHECK_NULL); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
294 obj = instanceKlass::cast(RiTypeProfile::klass())->allocate_instance(CHECK_NULL); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
295 assert(obj() != NULL, "must succeed in allocating instance"); |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
296 |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
297 int count = MAX2(total_count, recv->count()); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
298 RiTypeProfile::set_count(obj, scale_count(method_data(), count)); |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
299 RiTypeProfile::set_morphism(obj, morphism); |
2990
66ecfc755c86
inlining of monomorphic profiled callsites with quick type checks
Lukas Stadler <lukas.stadler@jku.at>
parents:
2927
diff
changeset
|
300 |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
301 if (morphism > 0) { |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
302 typeArrayHandle probabilities = oopFactory::new_typeArray(T_FLOAT, morphism, CHECK_NULL); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
303 objArrayHandle types = oopFactory::new_objArray(SystemDictionary::RiType_klass(), morphism, CHECK_NULL); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
304 int pos = 0; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
305 for (uint i = 0; i < recv->row_limit(); i++) { |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
306 KlassHandle receiver = recv->receiver(i); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
307 if (receiver.is_null()) continue; |
2990
66ecfc755c86
inlining of monomorphic profiled callsites with quick type checks
Lukas Stadler <lukas.stadler@jku.at>
parents:
2927
diff
changeset
|
308 |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
309 float prob = recv->receiver_count(i) / (float) total_count; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
310 oop type = GraalCompiler::get_RiType(receiver, KlassHandle(), CHECK_NULL); |
2990
66ecfc755c86
inlining of monomorphic profiled callsites with quick type checks
Lukas Stadler <lukas.stadler@jku.at>
parents:
2927
diff
changeset
|
311 |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
312 probabilities->float_at_put(pos, prob); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
313 types->obj_at_put(pos, type); |
2990
66ecfc755c86
inlining of monomorphic profiled callsites with quick type checks
Lukas Stadler <lukas.stadler@jku.at>
parents:
2927
diff
changeset
|
314 |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
315 pos++; |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
316 } |
2990
66ecfc755c86
inlining of monomorphic profiled callsites with quick type checks
Lukas Stadler <lukas.stadler@jku.at>
parents:
2927
diff
changeset
|
317 |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
318 RiTypeProfile::set_probabilities(obj, probabilities()); |
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
319 RiTypeProfile::set_types(obj, types()); |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
320 } else { |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
321 RiTypeProfile::set_probabilities(obj, NULL); |
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
322 RiTypeProfile::set_types(obj, NULL); |
3565
b3f0f8a01ca2
remove some ci-dependencies
Lukas Stadler <lukas.stadler@jku.at>
parents:
3559
diff
changeset
|
323 } |
3566
b0d192f86f34
more work on ci removal
Lukas Stadler <lukas.stadler@jku.at>
parents:
3565
diff
changeset
|
324 } |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
325 } |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
326 |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
327 return JNIHandles::make_local(obj()); |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
328 } |
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
329 |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
330 JNIEXPORT jdouble JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2branchProbability(JNIEnv *, jobject, jobject hotspot_method, jint bci) { |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
331 TRACE_graal_3("VMEntries::RiMethod_typeProfile"); |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
332 ciMethodData* method_data; |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
333 ciMethod* cimethod; |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
334 { |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
335 VM_ENTRY_MARK; |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
336 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
337 cimethod = (ciMethod*)CURRENT_ENV->get_object(method); |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
338 } |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
339 method_data = cimethod->method_data(); |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
340 |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
341 jfloat probability = -1; |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
342 |
3014
681a227c332b
better inlining logic, DCE removes If with constant comparison
Lukas Stadler <lukas.stadler@jku.at>
parents:
3011
diff
changeset
|
343 if (method_data == NULL || !method_data->is_mature()) return -1; |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
344 |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
345 ciProfileData* data = method_data->bci_to_data(bci); |
3014
681a227c332b
better inlining logic, DCE removes If with constant comparison
Lukas Stadler <lukas.stadler@jku.at>
parents:
3011
diff
changeset
|
346 if (data == NULL || !data->is_JumpData()) return -1; |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
347 |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
348 // get taken and not taken values |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
349 int taken = data->as_JumpData()->taken(); |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
350 int not_taken = 0; |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
351 if (data->is_BranchData()) { |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
352 not_taken = data->as_BranchData()->not_taken(); |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
353 } |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
354 |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
355 // Give up if too few (or too many, in which case the sum will overflow) counts to be meaningful. |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
356 // We also check that individual counters are positive first, otherwise the sum can become positive. |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
357 if (taken < 0 || not_taken < 0 || taken + not_taken < 40) return -1; |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
358 |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
359 // Pin probability to sane limits |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
360 if (taken == 0) |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
361 return 0; |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
362 else if (not_taken == 0) |
3211
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
363 return 1; |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
364 else { // Compute probability of true path |
3211
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
365 return (jdouble)(taken) / (taken + not_taken); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
366 } |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
367 } |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
368 |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
369 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2switchProbability(JNIEnv *, jobject, jobject hotspot_method, jint bci) { |
3211
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
370 TRACE_graal_3("VMEntries::RiMethod_typeProfile"); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
371 ciMethodData* method_data; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
372 ciMethod* cimethod; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
373 { |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
374 VM_ENTRY_MARK; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
375 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
376 cimethod = (ciMethod*)CURRENT_ENV->get_object(method); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
377 } |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
378 method_data = cimethod->method_data(); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
379 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
380 jfloat probability = -1; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
381 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
382 if (method_data == NULL || !method_data->is_mature()) return NULL; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
383 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
384 ciProfileData* data = method_data->bci_to_data(bci); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
385 if (data == NULL || !data->is_MultiBranchData()) return NULL; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
386 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
387 MultiBranchData* branch_data = data->as_MultiBranchData(); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
388 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
389 long sum = 0; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
390 int cases = branch_data->number_of_cases(); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
391 GrowableArray<uint>* counts = new GrowableArray<uint>(cases + 1); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
392 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
393 for (int i = 0; i < cases; i++) { |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
394 uint value = branch_data->count_at(i); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
395 sum += value; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
396 counts->append(value); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
397 } |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
398 uint value = branch_data->default_count(); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
399 sum += value; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
400 counts->append(value); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
401 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
402 // Give up if too few (or too many, in which case the sum will overflow) counts to be meaningful. |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
403 // We also check that individual counters are positive first, otherwise the sum can become positive. |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
404 if (sum < 10 * (cases + 3)) return NULL; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
405 |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
406 { |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
407 VM_ENTRY_MARK; |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
408 typeArrayOop probability = oopFactory::new_typeArray(T_DOUBLE, cases + 1, CHECK_NULL); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
409 for (int i = 0; i < cases + 1; i++) { |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
410 probability->double_at_put(i, counts->at(i) / (double) sum); |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
411 } |
76507b87dd25
global absolute probability analysis:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3098
diff
changeset
|
412 return JNIHandles::make_local(probability); |
2927
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
413 } |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
414 } |
f9c6d9bc4fbc
RiMethod provides branch prediction information
Lukas Stadler <lukas.stadler@jku.at>
parents:
2926
diff
changeset
|
415 |
3465
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
416 // public native boolean RiMethod_hasCompiledCode(HotSpotMethodResolved method); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
417 JNIEXPORT jboolean JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1hasCompiledCode(JNIEnv *, jobject, jobject hotspot_method) { |
3465
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
418 TRACE_graal_3("VMEntries::RiMethod_hasCompiledCode"); |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
419 methodOop method = getMethodFromHotSpotMethod(hotspot_method); |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
420 return method->has_compiled_code(); |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
421 } |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
422 |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
423 // public native boolean RiMethod_compiledCodeSize(HotSpotMethodResolved method); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
424 JNIEXPORT jint JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1compiledCodeSize(JNIEnv *, jobject, jobject hotspot_method) { |
3465
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
425 TRACE_graal_3("VMEntries::RiMethod_compiledCodeSize"); |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
426 nmethod* code = getMethodFromHotSpotMethod(hotspot_method)->code(); |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
427 if (code != NULL) { |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
428 return code->insts_end() - code->verified_entry_point(); |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
429 } |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
430 return -1; |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
431 } |
8cd198d7cbc1
When a method that has been compiled before is considered for inlining, use its compiled (native) code size for size checks. This avoids inlining compiled methods that already contain many other inlined methods, reducing generated code size and usually execution time as well. Also, add GraalMetrics bookkeeping for inlining.
Peter Hofer <peter.hofer@jku.at>
parents:
3211
diff
changeset
|
432 |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
433 // public RiType RiSignature_lookupType(String returnType, HotSpotTypeResolved accessingClass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
434 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiSignature_1lookupType(JNIEnv *env, jobject, jstring jname, jobject accessingClass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
435 TRACE_graal_3("VMEntries::RiSignature_lookupType"); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
436 VM_ENTRY_MARK; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
437 |
2182
9569fdf936ff
Made merge compile.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2061
diff
changeset
|
438 Symbol* nameSymbol = VmIds::toSymbol(jname); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
439 Handle name = JNIHandles::resolve(jname); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
440 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
441 oop result; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
442 if (nameSymbol == vmSymbols::int_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
443 result = VMExits::createRiTypePrimitive((int) T_INT, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
444 } else if (nameSymbol == vmSymbols::long_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
445 result = VMExits::createRiTypePrimitive((int) T_LONG, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
446 } else if (nameSymbol == vmSymbols::bool_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
447 result = VMExits::createRiTypePrimitive((int) T_BOOLEAN, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
448 } else if (nameSymbol == vmSymbols::char_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
449 result = VMExits::createRiTypePrimitive((int) T_CHAR, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
450 } else if (nameSymbol == vmSymbols::short_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
451 result = VMExits::createRiTypePrimitive((int) T_SHORT, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
452 } else if (nameSymbol == vmSymbols::byte_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
453 result = VMExits::createRiTypePrimitive((int) T_BYTE, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
454 } else if (nameSymbol == vmSymbols::double_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
455 result = VMExits::createRiTypePrimitive((int) T_DOUBLE, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
456 } else if (nameSymbol == vmSymbols::float_signature()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
457 result = VMExits::createRiTypePrimitive((int) T_FLOAT, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
458 } else { |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
459 klassOop resolved_type = NULL; |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
460 // if the name isn't in the symbol table then the class isn't loaded anyway... |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
461 if (nameSymbol != NULL) { |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
462 Handle classloader; |
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
463 Handle protectionDomain; |
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
464 if (JNIHandles::resolve(accessingClass) != NULL) { |
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
465 classloader = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(accessingClass))->klass_part()->class_loader(); |
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
466 protectionDomain = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(accessingClass))->klass_part()->protection_domain(); |
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
467 } |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
468 resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD); |
1481
fe69dec9a1ed
Added support for CompileTheWorld.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1479
diff
changeset
|
469 if (HAS_PENDING_EXCEPTION) { |
fe69dec9a1ed
Added support for CompileTheWorld.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1479
diff
changeset
|
470 CLEAR_PENDING_EXCEPTION; |
fe69dec9a1ed
Added support for CompileTheWorld.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1479
diff
changeset
|
471 resolved_type = NULL; |
fe69dec9a1ed
Added support for CompileTheWorld.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1479
diff
changeset
|
472 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
473 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
474 if (resolved_type != NULL) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
475 result = GraalCompiler::createHotSpotTypeResolved(resolved_type, name, CHECK_NULL); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
476 } else { |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
477 result = VMExits::createRiTypeUnresolved(name, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
478 } |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
479 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
480 |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
481 return JNIHandles::make_local(THREAD, result); |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
482 } |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
483 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
484 // public Object RiConstantPool_lookupConstant(long vmId, int cpi); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
485 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupConstant(JNIEnv *env, jobject, jlong vmId, jint index) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
486 TRACE_graal_3("VMEntries::RiConstantPool_lookupConstant"); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
487 VM_ENTRY_MARK; |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
488 |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
489 constantPoolOop cp = VmIds::get<constantPoolOop>(vmId); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
490 |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
491 oop result = NULL; |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
492 constantTag tag = cp->tag_at(index); |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
493 if (tag.is_int()) { |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
494 result = VMExits::createCiConstant(CiKind::Int(), cp->int_at(index), CHECK_0); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
495 } else if (tag.is_long()) { |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
496 result = VMExits::createCiConstant(CiKind::Long(), cp->long_at(index), CHECK_0); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
497 } else if (tag.is_float()) { |
1422
3483ec571caf
* using reflected objects instead of oops
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1421
diff
changeset
|
498 result = VMExits::createCiConstantFloat(cp->float_at(index), CHECK_0); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
499 } else if (tag.is_double()) { |
1422
3483ec571caf
* using reflected objects instead of oops
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1421
diff
changeset
|
500 result = VMExits::createCiConstantDouble(cp->double_at(index), CHECK_0); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
501 } else if (tag.is_string() || tag.is_unresolved_string()) { |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
502 oop string = NULL; |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
503 if (cp->is_pseudo_string_at(index)) { |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
504 string = cp->pseudo_string_at(index); |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
505 } else { |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
506 string = cp->string_at(index, THREAD); |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
507 if (HAS_PENDING_EXCEPTION) { |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
508 CLEAR_PENDING_EXCEPTION; |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
509 // TODO: Gracefully exit compilation. |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
510 fatal("out of memory during compilation!"); |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
511 return NULL; |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
512 } |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
513 } |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
514 result = VMExits::createCiConstantObject(string, CHECK_0); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
515 } else if (tag.is_klass() || tag.is_unresolved_klass()) { |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
516 bool ignore; |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
517 ciInstanceKlass* accessor = (ciInstanceKlass*) ciEnv::current()->get_object(cp->pool_holder()); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
518 ciKlass* klass = ciEnv::current()->get_klass_by_index(cp, index, ignore, accessor); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
519 result = GraalCompiler::get_RiType(klass, cp->pool_holder(), CHECK_NULL); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
520 } else if (tag.is_object()) { |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
521 oop obj = cp->object_at(index); |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
522 assert(obj->is_instance(), "must be an instance"); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
523 result = VMExits::createCiConstantObject(obj, CHECK_NULL); |
1413
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
524 } else { |
1ecc8f0aad00
Draft implementation of HotSpot CRI / first method compiling without exception.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1412
diff
changeset
|
525 ShouldNotReachHere(); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
526 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
527 |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
528 return JNIHandles::make_local(THREAD, result); |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
529 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
530 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
531 // public RiMethod RiConstantPool_lookupMethod(long vmId, int cpi, byte byteCode); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
532 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupMethod(JNIEnv *env, jobject, jlong vmId, jint index, jbyte byteCode) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
533 TRACE_graal_3("VMEntries::RiConstantPool_lookupMethod"); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
534 VM_ENTRY_MARK; |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
535 index = GraalCompiler::to_cp_index_u2(index); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
536 constantPoolHandle cp = VmIds::get<constantPoolOop>(vmId); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
537 |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
538 Bytecodes::Code bc = (Bytecodes::Code) (((int) byteCode) & 0xFF); |
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
539 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
540 ciMethod *cimethod = CURRENT_ENV->get_method_by_index(cp, index, bc, loading_klass); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
541 if (cimethod->is_loaded()) { |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
542 methodOop method = (methodOop) cimethod->get_oop(); |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
543 oop ret = GraalCompiler::createHotSpotMethodResolved(method, CHECK_NULL); |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
544 return JNIHandles::make_local(THREAD, ret); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
545 } else { |
2182
9569fdf936ff
Made merge compile.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2061
diff
changeset
|
546 Handle name = VmIds::toString<Handle>(cimethod->name()->get_symbol(), CHECK_NULL); |
9569fdf936ff
Made merge compile.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2061
diff
changeset
|
547 Handle signature = VmIds::toString<Handle>(cimethod->signature()->as_symbol()->get_symbol(), CHECK_NULL); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
548 Handle holder = GraalCompiler::get_RiType(cimethod->holder(), cp->klass(), THREAD); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
549 return JNIHandles::make_local(THREAD, VMExits::createRiMethodUnresolved(name, signature, holder, THREAD)); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
550 } |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
551 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
552 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
553 // public RiSignature RiConstantPool_lookupSignature(long vmId, int cpi); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
554 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupSignature(JNIEnv *env, jobject, jlong vmId, jint index) { |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
555 fatal("currently unsupported"); |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
556 return NULL; |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
557 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
558 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
559 // public RiType RiConstantPool_lookupType(long vmId, int cpi); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
560 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupType(JNIEnv *env, jobject, jlong vmId, jint index) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
561 TRACE_graal_3("VMEntries::RiConstantPool_lookupType"); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
562 VM_ENTRY_MARK; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
563 |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
564 constantPoolOop cp = VmIds::get<constantPoolOop>(vmId); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
565 |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
566 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
567 bool is_accessible = false; |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
568 ciKlass *klass = CURRENT_ENV->get_klass_by_index(cp, index, is_accessible, loading_klass); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
569 return JNIHandles::make_local(THREAD, GraalCompiler::get_RiType(klass, cp->klass(), THREAD)); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
570 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
571 |
3577
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
572 // public void RiConstantPool_loadReferencedType(long vmId, int cpi); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
573 JNIEXPORT void JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1loadReferencedType(JNIEnv *env, jobject, jlong vmId, jint index, jbyte op) { |
3577
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
574 TRACE_graal_3("VMEntries::RiConstantPool_lookupType"); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
575 VM_ENTRY_MARK; |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
576 |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
577 constantPoolOop cp = VmIds::get<constantPoolOop>(vmId); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
578 int byteCode = (op & 0xFF); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
579 if (byteCode != Bytecodes::_checkcast && byteCode != Bytecodes::_instanceof && byteCode != Bytecodes::_new && byteCode != Bytecodes::_anewarray && byteCode != Bytecodes::_multianewarray) { |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
580 index = cp->remap_instruction_operand_from_cache(GraalCompiler::to_cp_index_u2(index)); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
581 } |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
582 constantTag tag = cp->tag_at(index); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
583 if (tag.is_field_or_method()) { |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
584 index = cp->uncached_klass_ref_index_at(index); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
585 tag = cp->tag_at(index); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
586 } |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
587 |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
588 if (tag.is_unresolved_klass()) { |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
589 klassOop klass = cp->klass_at(index, CHECK); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
590 if (klass->klass_part()->oop_is_instance()) { |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
591 instanceKlass::cast(klass)->initialize(CHECK); |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
592 } |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
593 } |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
594 } |
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
595 |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
596 // public RiField RiConstantPool_lookupField(long vmId, int cpi); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
597 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupField(JNIEnv *env, jobject, jlong vmId, jint index, jbyte byteCode) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
598 TRACE_graal_3("VMEntries::RiConstantPool_lookupField"); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
599 VM_ENTRY_MARK; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
600 |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
601 index = GraalCompiler::to_cp_index_u2(index); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
602 constantPoolOop cp = VmIds::get<constantPoolOop>(vmId); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
603 |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
604 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
605 ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index); |
2492
4e5515d09314
Fixed merge issues.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2293
diff
changeset
|
606 |
1452
9b22e3e5df8e
Solved an issue with unresolved field patching.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1449
diff
changeset
|
607 Bytecodes::Code code = (Bytecodes::Code)(((int) byteCode) & 0xFF); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
608 Handle field_handle = GraalCompiler::get_RiField(field, loading_klass, cp->pool_holder(), code, THREAD); |
2057
89bf01e6b049
Treat C1XOptions fields as final.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2050
diff
changeset
|
609 bool is_constant = field->is_constant(); |
89bf01e6b049
Treat C1XOptions fields as final.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2050
diff
changeset
|
610 if (is_constant && field->is_static()) { |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
611 ciConstant constant = field->constant_value(); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
612 oop constant_object = NULL; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
613 switch (constant.basic_type()) { |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
614 case T_OBJECT: |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
615 case T_ARRAY: |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
616 { |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
617 ciObject* obj = constant.as_object(); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
618 if (obj->is_null_object()) { |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
619 constant_object = VMExits::createCiConstantObject(NULL, CHECK_0); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
620 } else if (obj->can_be_constant()) { |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
621 constant_object = VMExits::createCiConstantObject(constant.as_object()->get_oop(), CHECK_0); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
622 } |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
623 } |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
624 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
625 case T_DOUBLE: |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
626 constant_object = VMExits::createCiConstantDouble(constant.as_double(), CHECK_0); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
627 break; |
1479
71cd4b9610eb
Two fixes for DaCapo / SpecJVM2008 runs.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1477
diff
changeset
|
628 case T_FLOAT: |
71cd4b9610eb
Two fixes for DaCapo / SpecJVM2008 runs.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1477
diff
changeset
|
629 constant_object = VMExits::createCiConstantFloat(constant.as_float(), CHECK_0); |
71cd4b9610eb
Two fixes for DaCapo / SpecJVM2008 runs.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1477
diff
changeset
|
630 break; |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
631 case T_LONG: |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
632 constant_object = VMExits::createCiConstant(CiKind::Long(), constant.as_long(), CHECK_0); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
633 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
634 case T_INT: |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
635 constant_object = VMExits::createCiConstant(CiKind::Int(), constant.as_int(), CHECK_0); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
636 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
637 case T_SHORT: |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
638 constant_object = VMExits::createCiConstant(CiKind::Short(), constant.as_int(), CHECK_0); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
639 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
640 case T_CHAR: |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
641 constant_object = VMExits::createCiConstant(CiKind::Char(), constant.as_int(), CHECK_0); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
642 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
643 case T_BYTE: |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
644 constant_object = VMExits::createCiConstant(CiKind::Byte(), constant.as_int(), CHECK_0); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
645 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
646 case T_BOOLEAN: |
1470
ef7761803480
Fixes to get running again after C1X changes to pointer maps and register configuration.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1465
diff
changeset
|
647 constant_object = VMExits::createCiConstant(CiKind::Boolean(), constant.as_int(), CHECK_0); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
648 break; |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
649 default: |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
650 constant.print(); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
651 fatal("Unhandled constant"); |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
652 break; |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
653 } |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
654 if (constant_object != NULL) { |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
655 HotSpotField::set_constant(field_handle, constant_object); |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
656 } |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
657 } |
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1463
diff
changeset
|
658 return JNIHandles::make_local(THREAD, field_handle()); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
659 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
660 |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
661 // public RiConstantPool RiType_constantPool(HotSpotTypeResolved klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
662 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1constantPool(JNIEnv *, jobject, jobject klass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
663 TRACE_graal_3("VMEntries::RiType_constantPool"); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
664 VM_ENTRY_MARK; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
665 |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
666 assert(JNIHandles::resolve(klass) != NULL, ""); |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
667 constantPoolOop constantPool = ((instanceKlass*)java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))->klass_part())->constants(); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
668 return JNIHandles::make_local(VMExits::createRiConstantPool(VmIds::add<constantPoolOop>(constantPool), THREAD)); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
669 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
670 |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
671 // public RiMethod RiType_resolveMethodImpl(HotSpotTypeResolved klass, String name, String signature); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
672 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_3resolveMethodImpl(JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
673 TRACE_graal_3("VMEntries::RiType_resolveMethodImpl"); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
674 VM_ENTRY_MARK; |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
675 |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
676 assert(JNIHandles::resolve(resolved_type) != NULL, ""); |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
677 klassOop klass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(resolved_type)); |
2182
9569fdf936ff
Made merge compile.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2061
diff
changeset
|
678 Symbol* name_symbol = VmIds::toSymbol(name); |
9569fdf936ff
Made merge compile.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2061
diff
changeset
|
679 Symbol* signature_symbol = VmIds::toSymbol(signature); |
1477
30e1f67703da
Fix for failed method lookup.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1470
diff
changeset
|
680 methodOop method = klass->klass_part()->lookup_method(name_symbol, signature_symbol); |
30e1f67703da
Fix for failed method lookup.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1470
diff
changeset
|
681 if (method == NULL) { |
2901
d577d07cedec
Added time measurement for phases.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2891
diff
changeset
|
682 if (TraceGraal >= 3) { |
1477
30e1f67703da
Fix for failed method lookup.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1470
diff
changeset
|
683 ResourceMark rm; |
2492
4e5515d09314
Fixed merge issues.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2293
diff
changeset
|
684 tty->print_cr("Could not resolve method %s %s on klass %s", name_symbol->as_C_string(), signature_symbol->as_C_string(), klass->klass_part()->name()->as_C_string()); |
1477
30e1f67703da
Fix for failed method lookup.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1470
diff
changeset
|
685 } |
30e1f67703da
Fix for failed method lookup.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1470
diff
changeset
|
686 return NULL; |
30e1f67703da
Fix for failed method lookup.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1470
diff
changeset
|
687 } |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
688 oop ret = GraalCompiler::createHotSpotMethodResolved(method, CHECK_NULL); |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
689 return JNIHandles::make_local(THREAD, ret); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
690 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
691 |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
692 // public boolean RiType_isSubtypeOf(HotSpotTypeResolved klass, RiType other); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
693 JNIEXPORT jboolean JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_2isSubtypeOf(JNIEnv *, jobject, jobject klass, jobject jother) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
694 TRACE_graal_3("VMEntries::RiType_isSubtypeOf"); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
695 oop other = JNIHandles::resolve(jother); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
696 assert(other->is_a(HotSpotTypeResolved::klass()), "resolved hotspot type expected"); |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
697 assert(JNIHandles::resolve(klass) != NULL, ""); |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
698 klassOop thisKlass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)); |
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
699 klassOop otherKlass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(other)); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
700 if (thisKlass->klass_part()->oop_is_instance_slow()) { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
701 return instanceKlass::cast(thisKlass)->is_subtype_of(otherKlass); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
702 } else if (thisKlass->klass_part()->oop_is_array()) { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
703 return arrayKlass::cast(thisKlass)->is_subtype_of(otherKlass); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
704 } else { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
705 fatal("unexpected class type"); |
2215
999f8086cc4f
More changes to make it compile and work on win64.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
2182
diff
changeset
|
706 return false; |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
707 } |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
708 } |
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
709 |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
710 // public RiType RiType_componentType(HotSpotResolvedType klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
711 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1componentType(JNIEnv *, jobject, jobject klass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
712 TRACE_graal_3("VMEntries::RiType_componentType"); |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
713 ciArrayKlass* array_klass; |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
714 { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
715 VM_ENTRY_MARK; |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
716 assert(JNIHandles::resolve(klass) != NULL, ""); |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
717 array_klass = (ciArrayKlass *) CURRENT_ENV->get_object(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
718 } |
1941
79d04223b8a5
Added caching for resolved types and resolved fields.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1939
diff
changeset
|
719 ciType* element_type = array_klass->element_type(); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
720 |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
721 VM_ENTRY_MARK; |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
722 assert(JNIHandles::resolve(klass) != NULL, ""); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
723 return JNIHandles::make_local(GraalCompiler::get_RiType(element_type, java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)), THREAD)); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
724 } |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
725 |
2293
e3c42b8de67e
Removed a reference to getRiType(Class c) and some checkstyle fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2289
diff
changeset
|
726 // public RiType RiType_superType(HotSpotResolvedType klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
727 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1superType(JNIEnv *, jobject, jobject klass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
728 TRACE_graal_3("VMEntries::RiType_superType"); |
2499
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
729 VM_ENTRY_MARK; |
2293
e3c42b8de67e
Removed a reference to getRiType(Class c) and some checkstyle fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2289
diff
changeset
|
730 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); |
e3c42b8de67e
Removed a reference to getRiType(Class c) and some checkstyle fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2289
diff
changeset
|
731 ciInstanceKlass* k = NULL; |
2499
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
732 |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
733 if (klass_handle->oop_is_array()) { |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
734 k = (ciInstanceKlass *) CURRENT_ENV->get_object(SystemDictionary::Object_klass()); |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
735 } else { |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
736 guarantee(klass_handle->oop_is_instance(), "must be instance klass"); |
2293
e3c42b8de67e
Removed a reference to getRiType(Class c) and some checkstyle fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2289
diff
changeset
|
737 k = (ciInstanceKlass *) CURRENT_ENV->get_object(klass_handle()); |
2499
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
738 k = k->super(); |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
739 } |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
740 |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
741 if (k != NULL) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
742 return JNIHandles::make_local(GraalCompiler::get_RiType(k, klass_handle, THREAD)); |
2499
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
743 } else { |
ad9b14650e15
Fixed an issue with RiType.superType (wrong cast in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2492
diff
changeset
|
744 return NULL; |
2293
e3c42b8de67e
Removed a reference to getRiType(Class c) and some checkstyle fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2289
diff
changeset
|
745 } |
e3c42b8de67e
Removed a reference to getRiType(Class c) and some checkstyle fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2289
diff
changeset
|
746 } |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
747 |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
748 // public RiType RiType_uniqueConcreteSubtype(HotSpotResolvedType klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
749 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1uniqueConcreteSubtype(JNIEnv *, jobject, jobject klass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
750 TRACE_graal_3("VMEntries::RiType_uniqueConcreteSubtype"); |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
751 Thread* THREAD = Thread::current(); |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
752 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
753 ciInstanceKlass* k = NULL; |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
754 { |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
755 VM_ENTRY_MARK; |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
756 k = (ciInstanceKlass *) CURRENT_ENV->get_object(klass_handle()); |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
757 } |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
758 |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
759 if (k->is_abstract()) { |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
760 ciInstanceKlass* sub = k->unique_concrete_subklass(); |
2050
b6d2c238e585
Two fixes for leaf type and leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2049
diff
changeset
|
761 if (sub != NULL && sub->is_leaf_type()) { |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
762 VM_ENTRY_MARK; |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
763 return JNIHandles::make_local(GraalCompiler::get_RiType(sub, klass_handle, THREAD)); |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
764 } |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
765 } else if (k->is_leaf_type()) { |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
766 assert(!k->is_interface(), ""); |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
767 return klass; |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
768 } |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
769 |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
770 return NULL; |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
771 } |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
772 |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
773 // public bool RiType_isInitialized(HotSpotResolvedType klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
774 JNIEXPORT jboolean JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1isInitialized(JNIEnv *, jobject, jobject hotspot_klass) { |
3011
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
775 TRACE_graal_3("VMEntries::RiType_isInitialized"); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
776 klassOop klass = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(hotspot_klass)); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
777 return instanceKlass::cast(klass)->is_initialized(); |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
778 } |
f00918f35c7f
inlining and runtime interface related changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
2990
diff
changeset
|
779 |
2058
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
780 // public RiType RiType_arrayOf(HotSpotTypeResolved klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
781 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1arrayOf(JNIEnv *, jobject, jobject klass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
782 TRACE_graal_3("VMEntries::RiType_arrayOf"); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
783 VM_ENTRY_MARK; |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
784 |
2058
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
785 KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
786 KlassHandle array = klass_handle->array_klass(THREAD); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
787 Handle name = VmIds::toString<Handle>(array->name(), CHECK_NULL); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
788 return JNIHandles::make_local(THREAD, GraalCompiler::createHotSpotTypeResolved(array, name, THREAD)); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
789 } |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
790 |
3090
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
791 // public RiField[] RiType_fields(HotSpotTypeResolved klass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
792 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiType_1fields(JNIEnv *, jobject, jobject klass) { |
3090
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
793 TRACE_graal_3("VMEntries::RiType_fields"); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
794 KlassHandle klass_handle; |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
795 ciInstanceKlass* instance_klass; |
3098
2fb14099d069
fix for unresolved exception bug, exactType and declaredType logic for inlining, more on escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
3090
diff
changeset
|
796 objArrayHandle fieldsArray; |
2fb14099d069
fix for unresolved exception bug, exactType and declaredType logic for inlining, more on escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
3090
diff
changeset
|
797 HandleMark hm; |
3090
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
798 { |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
799 VM_ENTRY_MARK; |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
800 klass_handle = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)); |
3098
2fb14099d069
fix for unresolved exception bug, exactType and declaredType logic for inlining, more on escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
3090
diff
changeset
|
801 instance_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(klass_handle()); |
3090
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
802 } |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
803 GrowableArray<ciField*>* fields = instance_klass->non_static_fields(); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
804 { |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
805 VM_ENTRY_MARK; |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
806 fieldsArray = oopFactory::new_objArray(SystemDictionary::RiField_klass(), fields->length(), CHECK_NULL); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
807 for (int i = 0; i < fields->length(); i++) { |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
808 ciField* field = fields->at(i); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
809 Handle field_handle = GraalCompiler::get_RiField(field, instance_klass, klass_handle, Bytecodes::_illegal, CHECK_NULL); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
810 fieldsArray->obj_at_put(i, field_handle()); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
811 } |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
812 } |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
813 return JNIHandles::make_local(fieldsArray()); |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
814 } |
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
815 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
816 // public RiType getPrimitiveArrayType(CiKind kind); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
817 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_getPrimitiveArrayType(JNIEnv *env, jobject, jobject kind) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
818 TRACE_graal_3("VMEntries::VMEntries_getPrimitiveArrayType"); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
819 VM_ENTRY_MARK; |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
820 BasicType type = GraalCompiler::kindToBasicType(CiKind::typeChar(kind)); |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
821 assert(type != T_OBJECT, "primitive type expecteds"); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
822 ciKlass* klass = ciTypeArrayKlass::make(type); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
823 return JNIHandles::make_local(THREAD, GraalCompiler::get_RiType(klass, KlassHandle(), THREAD)); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
824 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
825 |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
826 // public long getMaxCallTargetOffset(CiRuntimeCall rtcall); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
827 JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_VMEntries_getMaxCallTargetOffset(JNIEnv *env, jobject, jobject rtcall) { |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
828 TRACE_graal_3("VMEntries::VMEntries_getMaxCallTargetOffset"); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
829 VM_ENTRY_MARK; |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
830 oop call = JNIHandles::resolve(rtcall); |
3572
076a2c9caf71
Factor out runtime call target address determination to avoid redundancy between CodeInstaller::site_Call() and VMEntries.getMaxCallTargetOffset()
Peter Hofer <peter.hofer@jku.at>
parents:
3571
diff
changeset
|
831 address target_addr = CodeInstaller::runtime_call_target_address(call); |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
832 if (target_addr != 0x0) { |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
833 int64_t off_low = (int64_t)target_addr - ((int64_t)CodeCache::low_bound() + sizeof(int)); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
834 int64_t off_high = (int64_t)target_addr - ((int64_t)CodeCache::high_bound() + sizeof(int)); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
835 return MAX2(ABS(off_low), ABS(off_high)); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
836 } |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
837 return -1; |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
838 } |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
839 |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
840 // public RiType getType(Class<?> javaClass); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
841 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_getType(JNIEnv *env, jobject, jobject javaClass) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
842 TRACE_graal_3("VMEntries::VMEntries_getType"); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
843 VM_ENTRY_MARK; |
2058
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
844 oop javaClassOop = JNIHandles::resolve(javaClass); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
845 if (javaClassOop == NULL) { |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
846 fatal("argument to VMEntries.getType must not be NULL"); |
2215
999f8086cc4f
More changes to make it compile and work on win64.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
2182
diff
changeset
|
847 return NULL; |
2058
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
848 } else if (java_lang_Class::is_primitive(javaClassOop)) { |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
849 BasicType basicType = java_lang_Class::primitive_type(javaClassOop); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
850 return JNIHandles::make_local(THREAD, VMExits::createRiTypePrimitive((int) basicType, THREAD)); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
851 } else { |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
852 KlassHandle klass = java_lang_Class::as_klassOop(javaClassOop); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
853 Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
854 |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
855 oop type = GraalCompiler::createHotSpotTypeResolved(klass, name, CHECK_NULL); |
2058
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
856 return JNIHandles::make_local(THREAD, type); |
8f033d37798a
Better support for array types.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2057
diff
changeset
|
857 } |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
858 } |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
859 |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
860 |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
861 // helpers used to set fields in the HotSpotVMConfig object |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
862 jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
863 jfieldID id = env->GetFieldID(env->GetObjectClass(obj), name, sig); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
864 if (id == NULL) { |
3552
aa7b62997aa0
better error message of field not found
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3549
diff
changeset
|
865 fatal(err_msg("field not found: %s (%s)", name, sig)); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
866 } |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
867 return id; |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
868 } |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
869 |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
870 void set_boolean(JNIEnv* env, jobject obj, const char* name, bool value) { env->SetBooleanField(obj, getFieldID(env, obj, name, "Z"), value); } |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
871 void set_int(JNIEnv* env, jobject obj, const char* name, int value) { env->SetIntField(obj, getFieldID(env, obj, name, "I"), value); } |
2216
b966d9b66bf9
Fixed a bug that truncated stub ids when compiling with vs.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
2215
diff
changeset
|
872 void set_long(JNIEnv* env, jobject obj, const char* name, jlong value) { env->SetLongField(obj, getFieldID(env, obj, name, "J"), value); } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
873 void set_object(JNIEnv* env, jobject obj, const char* name, jobject value) { env->SetObjectField(obj, getFieldID(env, obj, name, "Ljava/lang/Object;"), value); } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
874 void set_int_array(JNIEnv* env, jobject obj, const char* name, jarray value) { env->SetObjectField(obj, getFieldID(env, obj, name, "[I"), value); } |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
875 |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
876 jboolean get_boolean(JNIEnv* env, jobject obj, const char* name) { return env->GetBooleanField(obj, getFieldID(env, obj, name, "Z")); } |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
877 jint get_int(JNIEnv* env, jobject obj, const char* name) { return env->GetIntField(obj, getFieldID(env, obj, name, "I")); } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
878 jlong get_long(JNIEnv* env, jobject obj, const char* name) { return env->GetLongField(obj, getFieldID(env, obj, name, "J")); } |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
879 jobject get_object(JNIEnv* env, jobject obj, const char* name) { return env->GetObjectField(obj, getFieldID(env, obj, name, "Ljava/lang/Object;")); } |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
880 jobject get_object(JNIEnv* env, jobject obj, const char* name, const char* sig) { return env->GetObjectField(obj, getFieldID(env, obj, name, sig)); } |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
881 |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
882 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
883 BasicType basicTypes[] = { T_BOOLEAN, T_BYTE, T_SHORT, T_CHAR, T_INT, T_FLOAT, T_LONG, T_DOUBLE, T_OBJECT }; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
884 int basicTypeCount = sizeof(basicTypes) / sizeof(BasicType); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
885 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
886 // public HotSpotVMConfig getConfiguration(); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
887 JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_VMEntries_getConfiguration(JNIEnv *env, jobject) { |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
888 jclass klass = env->FindClass("com/oracle/max/graal/hotspot/HotSpotVMConfig"); |
1419
7bf6a77b9c5a
implement recent safepoint & exceptionobject ci changes, HotSpotVMConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1415
diff
changeset
|
889 assert(klass != NULL, "HotSpot vm config class not found"); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
890 jobject config = env->AllocObject(klass); |
1419
7bf6a77b9c5a
implement recent safepoint & exceptionobject ci changes, HotSpotVMConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1415
diff
changeset
|
891 #ifdef _WIN64 |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
892 set_boolean(env, config, "windowsOs", true); |
1419
7bf6a77b9c5a
implement recent safepoint & exceptionobject ci changes, HotSpotVMConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1415
diff
changeset
|
893 #else |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
894 set_boolean(env, config, "windowsOs", false); |
1419
7bf6a77b9c5a
implement recent safepoint & exceptionobject ci changes, HotSpotVMConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1415
diff
changeset
|
895 #endif |
1449
8cfe3537a0d3
Pointer verification stub. Two loose oop fixes in C1X C++ part. Logging which methods have been compiled.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1445
diff
changeset
|
896 set_boolean(env, config, "verifyPointers", VerifyOops); |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
897 set_boolean(env, config, "useFastLocking", UseFastLocking); |
2061
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
898 set_boolean(env, config, "useFastNewObjectArray", UseFastNewObjectArray); |
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
899 set_boolean(env, config, "useFastNewTypeArray", UseFastNewTypeArray); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
900 set_int(env, config, "codeEntryAlignment", CodeEntryAlignment); |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
901 set_int(env, config, "vmPageSize", os::vm_page_size()); |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
902 set_int(env, config, "stackShadowPages", StackShadowPages); |
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
903 set_int(env, config, "hubOffset", oopDesc::klass_offset_in_bytes()); |
1422
3483ec571caf
* using reflected objects instead of oops
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1421
diff
changeset
|
904 set_int(env, config, "arrayLengthOffset", arrayOopDesc::length_offset_in_bytes()); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
905 set_int(env, config, "klassStateOffset", instanceKlass::init_state_offset_in_bytes() + sizeof(oopDesc)); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
906 set_int(env, config, "klassStateFullyInitialized", (int)instanceKlass::fully_initialized); |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
907 set_int(env, config, "threadTlabTopOffset", in_bytes(JavaThread::tlab_top_offset())); |
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
908 set_int(env, config, "threadTlabEndOffset", in_bytes(JavaThread::tlab_end_offset())); |
2059
9508a52cbd32
Add deoptimization blob support.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2058
diff
changeset
|
909 set_int(env, config, "threadObjectOffset", in_bytes(JavaThread::threadObj_offset())); |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
910 set_int(env, config, "instanceHeaderPrototypeOffset", Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes()); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
911 set_int(env, config, "threadExceptionOopOffset", in_bytes(JavaThread::exception_oop_offset())); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
912 set_int(env, config, "threadExceptionPcOffset", in_bytes(JavaThread::exception_pc_offset())); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
913 set_int(env, config, "threadMultiNewArrayStorage", in_bytes(JavaThread::graal_multinewarray_storage_offset())); |
2060
40bcc41390e4
Added getClass intrinsic implementation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2059
diff
changeset
|
914 set_int(env, config, "classMirrorOffset", klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes()); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
915 |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
916 set_long(env, config, "debugStub", VmIds::addStub((address)warning)); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
917 set_long(env, config, "instanceofStub", VmIds::addStub(Runtime1::entry_for(Runtime1::slow_subtype_check_id))); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
918 set_long(env, config, "verifyPointerStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_verify_pointer_id))); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
919 set_long(env, config, "newInstanceStub", VmIds::addStub(Runtime1::entry_for(Runtime1::fast_new_instance_init_check_id))); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
920 set_long(env, config, "unresolvedNewInstanceStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_instance_id))); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
921 set_long(env, config, "newTypeArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_type_array_id))); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
922 set_long(env, config, "newObjectArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_object_array_id))); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
923 set_long(env, config, "newMultiArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_multi_array_id))); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
924 set_long(env, config, "loadKlassStub", VmIds::addStub(Runtime1::entry_for(Runtime1::load_klass_patching_id))); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
925 set_long(env, config, "accessFieldStub", VmIds::addStub(Runtime1::entry_for(Runtime1::access_field_patching_id))); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1427
diff
changeset
|
926 set_long(env, config, "resolveStaticCallStub", VmIds::addStub(SharedRuntime::get_resolve_static_call_stub())); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
927 set_long(env, config, "inlineCacheMissStub", VmIds::addStub(SharedRuntime::get_ic_miss_stub())); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
928 set_long(env, config, "unwindExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_unwind_exception_call_id))); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
929 set_long(env, config, "handleExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::handle_exception_nofpu_id))); |
1936
8d88c9ac9247
Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1931
diff
changeset
|
930 set_long(env, config, "handleDeoptStub", VmIds::addStub(SharedRuntime::deopt_blob()->unpack())); |
1942
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
931 set_long(env, config, "monitorEnterStub", VmIds::addStub(Runtime1::entry_for(Runtime1::monitorenter_id))); |
00bc9eaf0e24
Support for -XX:+UseFastLocking flag. Fixed monitor enter XIR template for correct debug info at the runtime call.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1941
diff
changeset
|
932 set_long(env, config, "monitorExitStub", VmIds::addStub(Runtime1::entry_for(Runtime1::monitorexit_id))); |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
933 set_long(env, config, "fastMonitorEnterStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_monitorenter_id))); |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
934 set_long(env, config, "fastMonitorExitStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_monitorexit_id))); |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
935 set_long(env, config, "safepointPollingAddress", (jlong)(os::get_polling_page() + (SafepointPollOffset % os::vm_page_size()))); |
3569
76a7f1732bb0
New runtime parameter: runtimeCallStackSize (size on the stack that must be left empty in case of runtime calls)
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3563
diff
changeset
|
936 set_int(env, config, "runtimeCallStackSize", (jint)frame::arg_reg_save_area_bytes); |
3571
a72615456c50
Add two VM configs for intrinsifications.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3570
diff
changeset
|
937 set_int(env, config, "klassModifierFlagsOffset", Klass::modifier_flags_offset_in_bytes() + sizeof(oopDesc)); |
a72615456c50
Add two VM configs for intrinsifications.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3570
diff
changeset
|
938 set_int(env, config, "klassOopOffset", java_lang_Class::klass_offset_in_bytes()); |
3549
25765a764212
Add support for polling mark in code installer
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
3487
diff
changeset
|
939 set_boolean(env, config, "isPollingPageFar", Assembler::is_polling_page_far()); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
940 |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
941 BarrierSet* bs = Universe::heap()->barrier_set(); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
942 switch (bs->kind()) { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
943 case BarrierSet::CardTableModRef: |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
944 case BarrierSet::CardTableExtension: { |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
945 jlong base = (jlong)((CardTableModRefBS*)bs)->byte_map_base; |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
946 assert(base != 0, "unexpected byte_map_base"); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
947 set_long(env, config, "cardtableStartAddress", base); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
948 set_int(env, config, "cardtableShift", CardTableModRefBS::card_shift); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
949 break; |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
950 } |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
951 case BarrierSet::ModRef: |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
952 case BarrierSet::Other: |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
953 set_long(env, config, "cardtableStartAddress", 0); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
954 set_int(env, config, "cardtableShift", 0); |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
955 // No post barriers |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
956 break; |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
957 #ifndef SERIALGC |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
958 case BarrierSet::G1SATBCT: |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
959 case BarrierSet::G1SATBCTLogging: |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
960 #endif // SERIALGC |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
961 default: |
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
962 ShouldNotReachHere(); |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
963 break; |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
964 } |
1425
98fffb304868
tlab-allocated "new instance", invokespecial, support for static fields in COMPILER_CLASSES_DO
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1423
diff
changeset
|
965 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
966 jintArray arrayOffsets = env->NewIntArray(basicTypeCount); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
967 for (int i=0; i<basicTypeCount; i++) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
968 jint offset = arrayOopDesc::base_offset_in_bytes(basicTypes[i]); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
969 env->SetIntArrayRegion(arrayOffsets, i, 1, &offset); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
970 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
971 set_int_array(env, config, "arrayOffsets", arrayOffsets); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
972 set_int(env, config, "arrayClassElementOffset", objArrayKlass::element_klass_offset_in_bytes() + sizeof(oopDesc)); |
1419
7bf6a77b9c5a
implement recent safepoint & exceptionobject ci changes, HotSpotVMConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1415
diff
changeset
|
973 return config; |
7bf6a77b9c5a
implement recent safepoint & exceptionobject ci changes, HotSpotVMConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1415
diff
changeset
|
974 } |
1412
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
975 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
976 // public void installMethod(HotSpotTargetMethod targetMethod); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
977 JNIEXPORT void JNICALL Java_com_oracle_graal_hotspot_VMEntries_installMethod(JNIEnv *jniEnv, jobject, jobject targetMethod) { |
1449
8cfe3537a0d3
Pointer verification stub. Two loose oop fixes in C1X C++ part. Logging which methods have been compiled.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1445
diff
changeset
|
978 VM_ENTRY_MARK; |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
979 if (CURRENT_ENV == NULL) { |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
980 Arena arena; |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
981 ciEnv env(&arena); |
3584
cda0630a8640
Remove GRAAL env var requirement; Add ResourceMarks in code installer to avoid leaks
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3577
diff
changeset
|
982 ResourceMark rm; |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
983 CodeInstaller installer(JNIHandles::resolve(targetMethod)); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
984 } else { |
3584
cda0630a8640
Remove GRAAL env var requirement; Add ResourceMarks in code installer to avoid leaks
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3577
diff
changeset
|
985 ResourceMark rm; |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
986 CodeInstaller installer(JNIHandles::resolve(targetMethod)); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
987 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
988 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
989 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
990 // public HotSpotProxy installStub(HotSpotTargetMethod targetMethod, String name); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
991 JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_VMEntries_installStub(JNIEnv *jniEnv, jobject, jobject targetMethod) { |
1449
8cfe3537a0d3
Pointer verification stub. Two loose oop fixes in C1X C++ part. Logging which methods have been compiled.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1445
diff
changeset
|
992 VM_ENTRY_MARK; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
993 jlong id; |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
994 if (CURRENT_ENV == NULL) { |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
995 Arena arena; |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
996 ciEnv env(&arena); |
3584
cda0630a8640
Remove GRAAL env var requirement; Add ResourceMarks in code installer to avoid leaks
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3577
diff
changeset
|
997 ResourceMark rm; |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
998 CodeInstaller installer(JNIHandles::resolve(targetMethod), id); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
999 } else { |
3584
cda0630a8640
Remove GRAAL env var requirement; Add ResourceMarks in code installer to avoid leaks
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3577
diff
changeset
|
1000 ResourceMark rm; |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
1001 CodeInstaller installer(JNIHandles::resolve(targetMethod), id); |
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
1002 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1003 return id; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1004 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1005 |
1445
a7b84a5e16c6
Remove caching for constant pool entries (same index can be used to retrieve e.g. type and field). Fast fail on bailout in C1X.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1434
diff
changeset
|
1006 // public void recordBailout(String reason); |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1007 JNIEXPORT void JNICALL Java_com_oracle_graal_hotspot_VMEntries_recordBailout(JNIEnv *jniEnv, jobject, jobject message) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
1008 if (GraalBailoutIsFatal) { |
2061
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
1009 Handle msg = JNIHandles::resolve(message); |
2492
4e5515d09314
Fixed merge issues.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
2293
diff
changeset
|
1010 if (!msg.is_null()) { |
2061
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
1011 java_lang_String::print(msg, tty); |
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
1012 } |
2665
b101099de4c8
small fix to recordBailout
Lukas Stadler <lukas.stadler@jku.at>
parents:
2663
diff
changeset
|
1013 vm_abort(false); |
2061
c0b1d6a44a02
Implemented fast inline array allocation.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2060
diff
changeset
|
1014 } |
1445
a7b84a5e16c6
Remove caching for constant pool entries (same index can be used to retrieve e.g. type and field). Fast fail on bailout in C1X.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1434
diff
changeset
|
1015 } |
a7b84a5e16c6
Remove caching for constant pool entries (same index can be used to retrieve e.g. type and field). Fast fail on bailout in C1X.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1434
diff
changeset
|
1016 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1017 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1018 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1019 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1020 #define CC (char*) /*cast a literal from (const char*)*/ |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1021 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1022 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1023 #define PROXY "J" |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1024 #define TYPE "Lcom/sun/cri/ri/RiType;" |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1025 #define RESOLVED_TYPE "Lcom/oracle/max/graal/hotspot/HotSpotTypeResolved;" |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1026 #define METHOD "Lcom/sun/cri/ri/RiMethod;" |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1027 #define RESOLVED_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotMethodResolved;" |
3555
22d11b3bc561
Various hacks to be able to install machine code from a Java thread.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3552
diff
changeset
|
1028 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
1029 #define TYPE_PROFILE "Lcom/sun/cri/ri/RiTypeProfile;" |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1030 #define SIGNATURE "Lcom/sun/cri/ri/RiSignature;" |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1031 #define FIELD "Lcom/sun/cri/ri/RiField;" |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1032 #define CONSTANT_POOL "Lcom/sun/cri/ri/RiConstantPool;" |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
1033 #define EXCEPTION_HANDLERS "[Lcom/sun/cri/ri/RiExceptionHandler;" |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1034 #define TARGET_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotTargetMethod;" |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1035 #define CONFIG "Lcom/oracle/max/graal/hotspot/HotSpotVMConfig;" |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1036 #define HS_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotMethod;" |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1037 #define CI_CONSTANT "Lcom/sun/cri/ci/CiConstant;" |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
1038 #define CI_KIND "Lcom/sun/cri/ci/CiKind;" |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
1039 #define CI_RUNTIME_CALL "Lcom/sun/cri/ci/CiRuntimeCall;" |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1040 #define STRING "Ljava/lang/String;" |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1041 #define OBJECT "Ljava/lang/Object;" |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
1042 #define CLASS "Ljava/lang/Class;" |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1043 |
1412
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1044 JNINativeMethod VMEntries_methods[] = { |
3586
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1045 {CC"RiMethod_code", CC"("RESOLVED_METHOD")[B", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1code)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1046 {CC"RiMethod_signature", CC"("RESOLVED_METHOD")"STRING, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1signature)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1047 {CC"RiMethod_exceptionHandlers", CC"("RESOLVED_METHOD")"EXCEPTION_HANDLERS, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1exceptionHandlers)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1048 {CC"RiMethod_hasBalancedMonitors", CC"("RESOLVED_METHOD")Z", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1hasBalancedMonitors)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1049 {CC"RiMethod_uniqueConcreteMethod", CC"("RESOLVED_METHOD")"METHOD, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1uniqueConcreteMethod)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1050 {CC"getRiMethod", CC"("REFLECT_METHOD")"METHOD, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_getRiMethod)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1051 {CC"RiMethod_typeProfile", CC"("RESOLVED_METHOD"I)"TYPE_PROFILE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2typeProfile)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1052 {CC"RiMethod_branchProbability", CC"("RESOLVED_METHOD"I)D", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2branchProbability)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1053 {CC"RiMethod_switchProbability", CC"("RESOLVED_METHOD"I)[D", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2switchProbability)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1054 {CC"RiMethod_invocationCount", CC"("RESOLVED_METHOD")I", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1invocationCount)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1055 {CC"RiMethod_exceptionProbability", CC"("RESOLVED_METHOD"I)I", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_2exceptionProbability)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1056 {CC"RiMethod_hasCompiledCode", CC"("RESOLVED_METHOD")Z", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1hasCompiledCode)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1057 {CC"RiMethod_compiledCodeSize", CC"("RESOLVED_METHOD")I", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiMethod_1compiledCodeSize)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1058 {CC"RiSignature_lookupType", CC"("STRING RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiSignature_1lookupType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1059 {CC"RiConstantPool_lookupConstant", CC"("PROXY"I)"OBJECT, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupConstant)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1060 {CC"RiConstantPool_lookupMethod", CC"("PROXY"IB)"METHOD, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupMethod)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1061 {CC"RiConstantPool_lookupSignature", CC"("PROXY"I)"SIGNATURE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupSignature)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1062 {CC"RiConstantPool_lookupType", CC"("PROXY"I)"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1063 {CC"RiConstantPool_loadReferencedType", CC"("PROXY"IB)V", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1loadReferencedType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1064 {CC"RiConstantPool_lookupField", CC"("PROXY"IB)"FIELD, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1lookupField)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1065 {CC"RiType_constantPool", CC"("RESOLVED_TYPE")"CONSTANT_POOL, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1constantPool)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1066 {CC"RiType_resolveMethodImpl", CC"("RESOLVED_TYPE STRING STRING")"METHOD, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_3resolveMethodImpl)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1067 {CC"RiType_isSubtypeOf", CC"("RESOLVED_TYPE TYPE")Z", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_2isSubtypeOf)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1068 {CC"RiType_componentType", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1componentType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1069 {CC"RiType_uniqueConcreteSubtype", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1uniqueConcreteSubtype)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1070 {CC"RiType_superType", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1superType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1071 {CC"RiType_arrayOf", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1arrayOf)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1072 {CC"RiType_fields", CC"("RESOLVED_TYPE")["FIELD, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1fields)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1073 {CC"RiType_isInitialized", CC"("RESOLVED_TYPE")Z", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_RiType_1isInitialized)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1074 {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_getPrimitiveArrayType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1075 {CC"getMaxCallTargetOffset", CC"("CI_RUNTIME_CALL")J", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_getMaxCallTargetOffset)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1076 {CC"getType", CC"("CLASS")"TYPE, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_getType)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1077 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_getConfiguration)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1078 {CC"installMethod", CC"("TARGET_METHOD")V", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_installMethod)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1079 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_installStub)}, |
7604c69a6301
rename com.oracle.max.graal.runtime to com.oracle.max.graal.hotspot
Gilles Duboscq <gilles.m.duboscq@gmail.com>
parents:
3584
diff
changeset
|
1080 {CC"recordBailout", CC"("STRING")V", FN_PTR(Java_com_oracle_graal_hotspot_VMEntries_recordBailout)} |
1412
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1081 }; |
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1082 |
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1083 int VMEntries_methods_count() { |
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1084 return sizeof(VMEntries_methods) / sizeof(JNINativeMethod); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
1085 } |