author | dlong |
Mon, 24 Jun 2019 18:51:54 -0400 | |
changeset 55487 | 79c32c7b0992 |
parent 54847 | 59ea39bb2809 |
child 59056 | 15936b142f86 |
permissions | -rw-r--r-- |
33160 | 1 |
/* |
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
2 |
* Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. |
33160 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
7 |
* published by the Free Software Foundation. |
|
8 |
* |
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
13 |
* accompanied this code). |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU General Public License version |
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 |
* |
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
20 |
* or visit www.oracle.com if you need additional information or have any |
|
21 |
* questions. |
|
22 |
*/ |
|
23 |
||
24 |
#include "precompiled.hpp" |
|
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
25 |
#include "classfile/symbolTable.hpp" |
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
26 |
#include "interpreter/linkResolver.hpp" |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
27 |
#include "jvmci/jniAccessMark.inline.hpp" |
33160 | 28 |
#include "jvmci/jvmciJavaClasses.hpp" |
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
29 |
#include "jvmci/jvmciRuntime.hpp" |
33160 | 30 |
#include "memory/resourceArea.hpp" |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
31 |
#include "runtime/jniHandles.inline.hpp" |
51467
12997ebbc0d8
8209647: constantPoolHandle::constantPoolHandle(ConstantPool*) when precompiled header is disabled
iklam
parents:
50409
diff
changeset
|
32 |
#include "runtime/fieldDescriptor.inline.hpp" |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
33 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
34 |
// ------------------------------------------------------------------ |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
35 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
36 |
oop HotSpotJVMCI::resolve(JVMCIObject obj) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
37 |
return JNIHandles::resolve(obj.as_jobject()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
38 |
} |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
39 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
40 |
arrayOop HotSpotJVMCI::resolve(JVMCIArray obj) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
41 |
return (arrayOop) JNIHandles::resolve(obj.as_jobject()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
42 |
} |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
43 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
44 |
objArrayOop HotSpotJVMCI::resolve(JVMCIObjectArray obj) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
45 |
return (objArrayOop) JNIHandles::resolve(obj.as_jobject()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
46 |
} |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
47 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
48 |
typeArrayOop HotSpotJVMCI::resolve(JVMCIPrimitiveArray obj) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
49 |
return (typeArrayOop) JNIHandles::resolve(obj.as_jobject()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
50 |
} |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
51 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
52 |
JVMCIObject HotSpotJVMCI::wrap(oop obj) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
53 |
assert(Thread::current()->is_Java_thread(), "must be"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
54 |
return JVMCIObject(JNIHandles::make_local(obj), true); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
55 |
} |
50409
76bca6678913
8204237: Clean up incorrectly included .inline.hpp files from jvmciJavaClasses.hpp
coleenp
parents:
47216
diff
changeset
|
56 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
57 |
/** |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
58 |
* Computes the field offset of a static or instance field. |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
59 |
* It looks up the name and signature symbols without creating new ones; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
60 |
* all the symbols of these classes need to be already loaded. |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
61 |
*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
62 |
void HotSpotJVMCI::compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field, TRAPS) { |
33160 | 63 |
InstanceKlass* ik = InstanceKlass::cast(klass); |
64 |
Symbol* name_symbol = SymbolTable::probe(name, (int)strlen(name)); |
|
65 |
Symbol* signature_symbol = SymbolTable::probe(signature, (int)strlen(signature)); |
|
66 |
if (name_symbol == NULL || signature_symbol == NULL) { |
|
67 |
#ifndef PRODUCT |
|
68 |
ik->print_on(tty); |
|
69 |
#endif |
|
33198 | 70 |
fatal("symbol with name %s and signature %s was not found in symbol table (klass=%s)", name, signature, klass->name()->as_C_string()); |
33160 | 71 |
} |
72 |
||
73 |
fieldDescriptor fd; |
|
74 |
if (!ik->find_field(name_symbol, signature_symbol, &fd)) { |
|
75 |
ResourceMark rm; |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
76 |
fatal("Could not find field %s.%s with signature %s", ik->external_name(), name, signature); |
33160 | 77 |
} |
78 |
guarantee(fd.is_static() == static_field, "static/instance mismatch"); |
|
79 |
dest_offset = fd.offset(); |
|
80 |
assert(dest_offset != 0, "must be valid offset"); |
|
34192
6da4892d7cd5
8142511: [JVMCI] must eagerly initialize classes with static fields accessed by JVMCI native code
twisti
parents:
33632
diff
changeset
|
81 |
if (static_field) { |
6da4892d7cd5
8142511: [JVMCI] must eagerly initialize classes with static fields accessed by JVMCI native code
twisti
parents:
33632
diff
changeset
|
82 |
// Must ensure classes for static fields are initialized as the |
6da4892d7cd5
8142511: [JVMCI] must eagerly initialize classes with static fields accessed by JVMCI native code
twisti
parents:
33632
diff
changeset
|
83 |
// accessor itself does not include a class initialization check. |
6da4892d7cd5
8142511: [JVMCI] must eagerly initialize classes with static fields accessed by JVMCI native code
twisti
parents:
33632
diff
changeset
|
84 |
ik->initialize(CHECK); |
6da4892d7cd5
8142511: [JVMCI] must eagerly initialize classes with static fields accessed by JVMCI native code
twisti
parents:
33632
diff
changeset
|
85 |
} |
33160 | 86 |
} |
87 |
||
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
88 |
#ifndef PRODUCT |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
89 |
static void check_resolve_method(const char* call_type, Klass* resolved_klass, Symbol* method_name, Symbol* method_signature, TRAPS) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
90 |
methodHandle method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
91 |
LinkInfo link_info(resolved_klass, method_name, method_signature, NULL, LinkInfo::skip_access_check); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
92 |
if (strcmp(call_type, "call_static") == 0) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
93 |
method = LinkResolver::resolve_static_call_or_null(link_info); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
94 |
} else if (strcmp(call_type, "call_virtual") == 0) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
95 |
method = LinkResolver::resolve_virtual_call_or_null(resolved_klass, link_info); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
96 |
} else if (strcmp(call_type, "call_special") == 0) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
97 |
method = LinkResolver::resolve_special_call_or_null(link_info); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
98 |
} else { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
99 |
fatal("Unknown or unsupported call type: %s", call_type); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
100 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
101 |
if (method.is_null()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
102 |
fatal("Could not resolve %s.%s%s", resolved_klass->external_name(), method_name->as_C_string(), method_signature->as_C_string()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
103 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
104 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
105 |
#endif |
33160 | 106 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
107 |
jclass JNIJVMCI::_box_classes[T_CONFLICT+1]; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
108 |
jclass JNIJVMCI::_byte_array; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
109 |
jfieldID JNIJVMCI::_box_fields[T_CONFLICT+1]; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
110 |
jmethodID JNIJVMCI::_box_constructors[T_CONFLICT+1]; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
111 |
jmethodID JNIJVMCI::_Class_getName_method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
112 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
113 |
jmethodID JNIJVMCI::_HotSpotResolvedJavaMethodImpl_fromMetaspace_method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
114 |
jmethodID JNIJVMCI::_HotSpotConstantPool_fromMetaspace_method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
115 |
jmethodID JNIJVMCI::_HotSpotResolvedObjectTypeImpl_fromMetaspace_method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
116 |
jmethodID JNIJVMCI::_HotSpotResolvedPrimitiveType_fromMetaspace_method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
117 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
118 |
#define START_CLASS(className, fullClassName) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
119 |
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::fullClassName(), true, CHECK); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
120 |
className::_klass = InstanceKlass::cast(k); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
121 |
className::_klass->initialize(CHECK); |
33160 | 122 |
|
123 |
#define END_CLASS } |
|
124 |
||
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
125 |
#define FIELD(className, name, signature, static_field) compute_offset(className::_##name##_offset, className::_klass, #name, signature, static_field, CHECK); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
126 |
#define CHAR_FIELD(className, name) FIELD(className, name, "C", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
127 |
#define INT_FIELD(className, name) FIELD(className, name, "I", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
128 |
#define BOOLEAN_FIELD(className, name) FIELD(className, name, "Z", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
129 |
#define LONG_FIELD(className, name) FIELD(className, name, "J", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
130 |
#define FLOAT_FIELD(className, name) FIELD(className, name, "F", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
131 |
#define OBJECT_FIELD(className, name, signature) FIELD(className, name, signature, false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
132 |
#define STATIC_OBJECT_FIELD(className, name, signature) FIELD(className, name, signature, true) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
133 |
#define STATIC_INT_FIELD(className, name) FIELD(className, name, "I", true) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
134 |
#define STATIC_BOOLEAN_FIELD(className, name) FIELD(className, name, "Z", true) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
135 |
#ifdef PRODUCT |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
136 |
#define METHOD(jniCallType, jniGetMethod, hsCallType, returnType, className, methodName, signatureSymbolName, args) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
137 |
#define CONSTRUCTOR(className, signature) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
138 |
#else |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
139 |
#define METHOD(jniCallType, jniGetMethod, hsCallType, returnType, className, methodName, signatureSymbolName, args) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
140 |
check_resolve_method(#hsCallType, k, vmSymbols::methodName##_name(), vmSymbols::signatureSymbolName(), CHECK); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
141 |
#define CONSTRUCTOR(className, signature) { \ |
54847
59ea39bb2809
8223657: Remove unused THREAD argument from SymbolTable functions
coleenp
parents:
54732
diff
changeset
|
142 |
TempNewSymbol sig = SymbolTable::new_symbol(signature); \ |
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
143 |
check_resolve_method("call_special", k, vmSymbols::object_initializer_name(), sig, CHECK); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
144 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
145 |
#endif |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
146 |
/** |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
147 |
* Computes and initializes the offsets used by HotSpotJVMCI. |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
148 |
*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
149 |
void HotSpotJVMCI::compute_offsets(TRAPS) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
150 |
JVMCI_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OBJECT_FIELD, OBJECT_FIELD, OBJECT_FIELD, STATIC_OBJECT_FIELD, STATIC_OBJECT_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD, METHOD, CONSTRUCTOR) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
151 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
152 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
153 |
#undef START_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
154 |
#undef END_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
155 |
#undef METHOD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
156 |
#undef CONSTRUCTOR |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
157 |
#undef FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
158 |
#undef CHAR_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
159 |
#undef INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
160 |
#undef BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
161 |
#undef LONG_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
162 |
#undef FLOAT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
163 |
#undef OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
164 |
#undef PRIMARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
165 |
#undef OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
166 |
#undef STATIC_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
167 |
#undef STATIC_OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
168 |
#undef STATIC_OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
169 |
#undef STATIC_INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
170 |
#undef STATIC_BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
171 |
#undef EMPTY_CAST |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
172 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
173 |
// ------------------------------------------------------------------ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
174 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
175 |
#define START_CLASS(className, fullClassName) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
176 |
void HotSpotJVMCI::className::initialize(JVMCI_TRAPS) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
177 |
Thread* THREAD = Thread::current(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
178 |
className::klass()->initialize(CHECK); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
179 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
180 |
bool HotSpotJVMCI::className::is_instance(JVMCIEnv* env, JVMCIObject object) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
181 |
return resolve(object)->is_a(className::klass()); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
182 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
183 |
void HotSpotJVMCI::className::check(oop obj, const char* field_name, int offset) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
184 |
assert(obj != NULL, "NULL field access of %s.%s", #className, field_name); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
185 |
assert(obj->is_a(className::klass()), "wrong class, " #className " expected, found %s", obj->klass()->external_name()); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
186 |
assert(offset != 0, "must be valid offset"); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
187 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
188 |
InstanceKlass* HotSpotJVMCI::className::_klass = NULL; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
189 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
190 |
#define END_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
191 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
192 |
#define FIELD(className, name, type, accessor, cast) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
193 |
type HotSpotJVMCI::className::name(JVMCIEnv* env, oop obj) { className::check(obj, #name, className::_##name##_offset); return cast obj->accessor(className::_##name##_offset); } \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
194 |
void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, oop obj, type x) { className::check(obj, #name, className::_##name##_offset); obj->accessor##_put(className::_##name##_offset, x); } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
195 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
196 |
#define EMPTY_CAST |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
197 |
#define CHAR_FIELD(className, name) FIELD(className, name, jchar, char_field, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
198 |
#define INT_FIELD(className, name) FIELD(className, name, jint, int_field, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
199 |
#define BOOLEAN_FIELD(className, name) FIELD(className, name, jboolean, bool_field, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
200 |
#define LONG_FIELD(className, name) FIELD(className, name, jlong, long_field, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
201 |
#define FLOAT_FIELD(className, name) FIELD(className, name, jfloat, float_field, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
202 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
203 |
#define OBJECT_FIELD(className, name, signature) FIELD(className, name, oop, obj_field, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
204 |
#define OBJECTARRAY_FIELD(className, name, signature) FIELD(className, name, objArrayOop, obj_field, (objArrayOop)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
205 |
#define PRIMARRAY_FIELD(className, name, signature) FIELD(className, name, typeArrayOop, obj_field, (typeArrayOop)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
206 |
#define STATIC_OBJECT_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, oop) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
207 |
#define STATIC_OBJECTARRAY_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, objArrayOop) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
208 |
#define STATIC_OOPISH_FIELD(className, name, type) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
209 |
type HotSpotJVMCI::className::name(JVMCIEnv* env) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
210 |
assert(className::klass() != NULL && className::klass()->is_linked(), "Class not yet linked: " #className); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
211 |
InstanceKlass* ik = className::klass(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
212 |
oop base = ik->static_field_base_raw(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
213 |
oop result = HeapAccess<>::oop_load_at(base, className::_##name##_offset); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
214 |
return type(result); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
215 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
216 |
void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, type x) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
217 |
assert(className::klass() != NULL && className::klass()->is_linked(), "Class not yet linked: " #className); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
218 |
assert(className::klass() != NULL, "Class not yet loaded: " #className); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
219 |
InstanceKlass* ik = className::klass(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
220 |
oop base = ik->static_field_base_raw(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
221 |
HeapAccess<>::oop_store_at(base, className::_##name##_offset, x); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
222 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
223 |
#define STATIC_PRIMITIVE_FIELD(className, name, jtypename) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
224 |
jtypename HotSpotJVMCI::className::get_##name(JVMCIEnv* env) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
225 |
assert(className::klass() != NULL && className::klass()->is_linked(), "Class not yet linked: " #className); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
226 |
InstanceKlass* ik = className::klass(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
227 |
oop base = ik->static_field_base_raw(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
228 |
return HeapAccess<>::load_at(base, className::_##name##_offset); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
229 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
230 |
void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, jtypename x) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
231 |
assert(className::klass() != NULL && className::klass()->is_linked(), "Class not yet linked: " #className); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
232 |
InstanceKlass* ik = className::klass(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
233 |
oop base = ik->static_field_base_raw(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
234 |
HeapAccess<>::store_at(base, _##name##_offset, x); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
235 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
236 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
237 |
#define STATIC_INT_FIELD(className, name) STATIC_PRIMITIVE_FIELD(className, name, jint) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
238 |
#define STATIC_BOOLEAN_FIELD(className, name) STATIC_PRIMITIVE_FIELD(className, name, jboolean) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
239 |
#define METHOD(jniCallType, jniGetMethod, hsCallType, returnType, className, methodName, signatureSymbolName, args) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
240 |
#define CONSTRUCTOR(className, signature) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
241 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
242 |
/** |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
243 |
* Generates the method and field definitions for the classes in HotSpotJVMCI. For example: |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
244 |
* |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
245 |
* void HotSpotJVMCI::Architecture::initialize(JVMCIEnv* env) { ... } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
246 |
* bool HotSpotJVMCI::Architecture::is_instance(JVMCIEnv* env, JVMCIObject object) { ... } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
247 |
* void HotSpotJVMCI::Architecture::check(oop obj, const char* field_name, int offset) { ... } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
248 |
* oop HotSpotJVMCI::Architecture::wordKind(JVMCIEnv* env, oop obj) { ... } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
249 |
* void HotSpotJVMCI::Architecture::set_wordKind(JVMCIEnv* env, oop obj, oop x) { ... } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
250 |
* |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
251 |
* InstanceKlass *HotSpotJVMCI::Architecture::_klass = NULL; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
252 |
*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
253 |
JVMCI_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OBJECT_FIELD, PRIMARRAY_FIELD, OBJECTARRAY_FIELD, STATIC_OBJECT_FIELD, STATIC_OBJECTARRAY_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD, METHOD, CONSTRUCTOR) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
254 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
255 |
#undef START_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
256 |
#undef END_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
257 |
#undef METHOD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
258 |
#undef CONSTRUCTOR |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
259 |
#undef FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
260 |
#undef CHAR_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
261 |
#undef INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
262 |
#undef BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
263 |
#undef LONG_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
264 |
#undef FLOAT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
265 |
#undef OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
266 |
#undef PRIMARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
267 |
#undef OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
268 |
#undef STATIC_OOPISH_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
269 |
#undef STATIC_OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
270 |
#undef STATIC_OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
271 |
#undef STATIC_INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
272 |
#undef STATIC_BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
273 |
#undef STATIC_PRIMITIVE_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
274 |
#undef EMPTY_CAST |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
275 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
276 |
/** |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
277 |
* Initializes the JNI id of a field. As per the JNI specification, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
278 |
* this ensures the declaring class is initialized. |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
279 |
*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
280 |
void JNIJVMCI::initialize_field_id(JNIEnv* env, jfieldID &fieldid, jclass clazz, const char* class_name, const char* name, const char* signature, bool static_field) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
281 |
if (JVMCILibDumpJNIConfig != NULL) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
282 |
fileStream* st = JVMCIGlobals::get_jni_config_file(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
283 |
st->print_cr("field %s %s %s", class_name, name, signature); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
284 |
return; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
285 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
286 |
if (env->ExceptionCheck()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
287 |
return; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
288 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
289 |
if (static_field) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
290 |
// Class initialization barrier |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
291 |
fieldid = env->GetStaticFieldID(clazz, name, signature); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
292 |
} else { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
293 |
// Class initialization barrier |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
294 |
fieldid = env->GetFieldID(clazz, name, signature); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
295 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
296 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
297 |
if (env->ExceptionCheck()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
298 |
env->ExceptionDescribe(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
299 |
env->ExceptionClear(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
300 |
ResourceMark rm; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
301 |
Thread* THREAD = Thread::current(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
302 |
fatal("Could not find field %s.%s with signature %s", class_name, name, signature); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
303 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
304 |
} |
33160 | 305 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
306 |
#define START_CLASS(className, fullClassName) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
307 |
current_class_name = vmSymbols::fullClassName()->as_C_string(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
308 |
if (JVMCILibDumpJNIConfig != NULL) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
309 |
fileStream* st = JVMCIGlobals::get_jni_config_file(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
310 |
st->print_cr("class %s", current_class_name); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
311 |
} else { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
312 |
jclass k = env->FindClass(current_class_name); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
313 |
JVMCI_EXCEPTION_CHECK(env, "FindClass(%s)", current_class_name); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
314 |
assert(k != NULL, #fullClassName " not initialized"); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
315 |
className::_class = (jclass) env->NewGlobalRef(k); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
316 |
} |
33160 | 317 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
318 |
#define END_CLASS current_class_name = NULL; } |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
319 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
320 |
#define FIELD(className, name, signature, static_field) initialize_field_id(env, className::_##name##_field_id, className::_class, current_class_name, #name, signature, static_field); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
321 |
#define CHAR_FIELD(className, name) FIELD(className, name, "C", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
322 |
#define INT_FIELD(className, name) FIELD(className, name, "I", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
323 |
#define BOOLEAN_FIELD(className, name) FIELD(className, name, "Z", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
324 |
#define LONG_FIELD(className, name) FIELD(className, name, "J", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
325 |
#define FLOAT_FIELD(className, name) FIELD(className, name, "F", false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
326 |
#define OBJECT_FIELD(className, name, signature) FIELD(className, name, signature, false) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
327 |
#define STATIC_OBJECT_FIELD(className, name, signature) FIELD(className, name, signature, true) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
328 |
#define STATIC_INT_FIELD(className, name) FIELD(className, name, "I", true) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
329 |
#define STATIC_BOOLEAN_FIELD(className, name) FIELD(className, name, "Z", true) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
330 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
331 |
#define GET_JNI_METHOD(jniGetMethod, dst, clazz, methodName, signature) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
332 |
if (JVMCILibDumpJNIConfig != NULL) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
333 |
fileStream* st = JVMCIGlobals::get_jni_config_file(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
334 |
st->print_cr("method %s %s %s", current_class_name, methodName, signature); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
335 |
} else { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
336 |
dst = env->jniGetMethod(clazz, methodName, signature); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
337 |
JVMCI_EXCEPTION_CHECK(env, #jniGetMethod "(%s.%s%s)", current_class_name, methodName, signature); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
338 |
assert(dst != NULL, "uninitialized"); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
339 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
340 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
341 |
#define GET_JNI_CONSTRUCTOR(clazz, signature) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
342 |
GET_JNI_METHOD(GetMethodID, JNIJVMCI::clazz::_constructor, clazz::_class, "<init>", signature) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
343 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
344 |
#define METHOD(jniCallType, jniGetMethod, hsCallType, returnType, className, methodName, signatureSymbolName, args) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
345 |
GET_JNI_METHOD(jniGetMethod, \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
346 |
className::_##methodName##_method, \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
347 |
className::clazz(), \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
348 |
vmSymbols::methodName##_name()->as_C_string(), \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
349 |
vmSymbols::signatureSymbolName()->as_C_string()) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
350 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
351 |
#define CONSTRUCTOR(className, signature) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
352 |
GET_JNI_CONSTRUCTOR(className, signature) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
353 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
354 |
extern "C" { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
355 |
void JNICALL JVM_RegisterJVMCINatives(JNIEnv *env, jclass compilerToVMClass); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
356 |
jobject JNICALL JVM_GetJVMCIRuntime(JNIEnv *env, jclass c); |
33160 | 357 |
} |
358 |
||
54732 | 359 |
// Dumps symbols for public <init>() and <init>(String) methods of |
360 |
// non-abstract Throwable subtypes known by the VM. This is to |
|
361 |
// support the use of reflection in jdk.vm.ci.hotspot.TranslatedException.create(). |
|
362 |
class ThrowableInitDumper : public SymbolClosure { |
|
363 |
private: |
|
364 |
fileStream* _st; |
|
365 |
public: |
|
366 |
ThrowableInitDumper(fileStream* st) { _st = st; } |
|
367 |
void do_symbol(Symbol** p) { |
|
368 |
Thread* THREAD = Thread::current(); |
|
369 |
Symbol* name = *p; |
|
370 |
if (name == NULL) { |
|
371 |
return; |
|
372 |
} |
|
373 |
Klass* k = SystemDictionary::resolve_or_null(name, CHECK_EXIT); |
|
374 |
if (k != NULL && k->is_instance_klass()) { |
|
375 |
InstanceKlass* iklass = InstanceKlass::cast(k); |
|
376 |
if (iklass->is_subclass_of(SystemDictionary::Throwable_klass()) && iklass->is_public() && !iklass->is_abstract()) { |
|
377 |
const char* class_name = NULL; |
|
378 |
Array<Method*>* methods = iklass->methods(); |
|
379 |
for (int i = 0; i < methods->length(); i++) { |
|
380 |
Method* m = methods->at(i); |
|
381 |
if (m->name() == vmSymbols::object_initializer_name() && |
|
382 |
m->is_public() && |
|
383 |
(m->signature() == vmSymbols::void_method_signature() || m->signature() == vmSymbols::string_void_signature())) { |
|
384 |
if (class_name == NULL) { |
|
385 |
class_name = name->as_C_string(); |
|
386 |
_st->print_cr("class %s", class_name); |
|
387 |
} |
|
388 |
_st->print_cr("method %s %s %s", class_name, m->name()->as_C_string(), m->signature()->as_C_string()); |
|
389 |
} |
|
390 |
} |
|
391 |
} |
|
392 |
} |
|
393 |
} |
|
394 |
}; |
|
395 |
||
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
396 |
#define IN_CLASS(fullClassName) current_class_name = vmSymbols::fullClassName()->as_C_string() |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
397 |
/** |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
398 |
* Initializes the JNI method and field ids used in JNIJVMCI. |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
399 |
*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
400 |
void JNIJVMCI::initialize_ids(JNIEnv* env) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
401 |
ResourceMark rm; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
402 |
const char* current_class_name = NULL; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
403 |
JVMCI_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OBJECT_FIELD, OBJECT_FIELD, OBJECT_FIELD, STATIC_OBJECT_FIELD, STATIC_OBJECT_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD, METHOD, CONSTRUCTOR) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
404 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
405 |
IN_CLASS(java_lang_Class); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
406 |
GET_JNI_METHOD(GetMethodID, _Class_getName_method, Class::_class, "getName", "()Ljava/lang/String;"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
407 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
408 |
IN_CLASS(jdk_vm_ci_hotspot_HotSpotResolvedPrimitiveType); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
409 |
GET_JNI_METHOD(GetStaticMethodID, _HotSpotResolvedPrimitiveType_fromMetaspace_method, HotSpotResolvedPrimitiveType::_class, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
410 |
vmSymbols::fromMetaspace_name()->as_C_string(), |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
411 |
vmSymbols::primitive_fromMetaspace_signature()->as_C_string()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
412 |
IN_CLASS(jdk_vm_ci_hotspot_HotSpotResolvedObjectTypeImpl); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
413 |
GET_JNI_METHOD(GetStaticMethodID, _HotSpotResolvedObjectTypeImpl_fromMetaspace_method, HotSpotResolvedObjectTypeImpl::_class, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
414 |
vmSymbols::fromMetaspace_name()->as_C_string(), |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
415 |
vmSymbols::klass_fromMetaspace_signature()->as_C_string()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
416 |
IN_CLASS(jdk_vm_ci_hotspot_HotSpotConstantPool); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
417 |
GET_JNI_METHOD(GetStaticMethodID, _HotSpotConstantPool_fromMetaspace_method, HotSpotConstantPool::_class, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
418 |
vmSymbols::fromMetaspace_name()->as_C_string(), |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
419 |
vmSymbols::constantPool_fromMetaspace_signature()->as_C_string()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
420 |
IN_CLASS(jdk_vm_ci_hotspot_HotSpotResolvedJavaMethodImpl); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
421 |
GET_JNI_METHOD(GetStaticMethodID, _HotSpotResolvedJavaMethodImpl_fromMetaspace_method, HotSpotResolvedJavaMethodImpl::_class, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
422 |
vmSymbols::fromMetaspace_name()->as_C_string(), |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
423 |
vmSymbols::method_fromMetaspace_signature()->as_C_string()); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
424 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
425 |
#define BOX_CLASSES(generate) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
426 |
generate(Boolean, T_BOOLEAN, Z) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
427 |
generate(Byte, T_BYTE, B) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
428 |
generate(Character, T_CHAR, C) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
429 |
generate(Short, T_SHORT, S) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
430 |
generate(Integer, T_INT, I) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
431 |
generate(Long, T_LONG, J) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
432 |
generate(Float, T_FLOAT, F) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
433 |
generate(Double, T_DOUBLE, D) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
434 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
435 |
#define DO_BOX_CLASS(klass, basicType, type) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
436 |
current_class_name = "java/lang/" #klass; \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
437 |
if (JVMCILibDumpJNIConfig == NULL) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
438 |
_box_classes[basicType] = env->FindClass("java/lang/" #klass); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
439 |
JVMCI_EXCEPTION_CHECK(env, "FindClass(%s)", #klass); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
440 |
_box_classes[basicType] = (jclass) env->NewGlobalRef(_box_classes[basicType]); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
441 |
assert(_box_classes[basicType] != NULL, "uninitialized"); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
442 |
_box_fields[basicType] = env->GetFieldID(_box_classes[basicType], "value", #type); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
443 |
JVMCI_EXCEPTION_CHECK(env, "GetFieldID(%s, value, %s)", #klass, #type); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
444 |
GET_JNI_METHOD(GetMethodID, _box_constructors[basicType], _box_classes[basicType], "<init>", "(" #type ")V"); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
445 |
} else { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
446 |
fileStream* st = JVMCIGlobals::get_jni_config_file(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
447 |
st->print_cr("field %s value %s", current_class_name, #type); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
448 |
st->print_cr("method %s <init> (%s)V", current_class_name, #type); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
449 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
450 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
451 |
BOX_CLASSES(DO_BOX_CLASS); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
452 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
453 |
if (JVMCILibDumpJNIConfig == NULL) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
454 |
_byte_array = env->FindClass("[B"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
455 |
JVMCI_EXCEPTION_CHECK(env, "FindClass([B)"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
456 |
_byte_array = (jclass) env->NewGlobalRef(_byte_array); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
457 |
assert(_byte_array != NULL, "uninitialized"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
458 |
} else { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
459 |
fileStream* st = JVMCIGlobals::get_jni_config_file(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
460 |
st->print_cr("class [B"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
461 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
462 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
463 |
#define DUMP_ALL_NATIVE_METHODS(class_symbol) do { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
464 |
current_class_name = class_symbol->as_C_string(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
465 |
Klass* k = SystemDictionary::resolve_or_fail(class_symbol, true, CHECK_EXIT); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
466 |
InstanceKlass* iklass = InstanceKlass::cast(k); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
467 |
Array<Method*>* methods = iklass->methods(); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
468 |
for (int i = 0; i < methods->length(); i++) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
469 |
Method* m = methods->at(i); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
470 |
if (m->is_native()) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
471 |
st->print_cr("method %s %s %s", current_class_name, m->name()->as_C_string(), m->signature()->as_C_string()); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
472 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
473 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
474 |
} while(0) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
475 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
476 |
if (JVMCILibDumpJNIConfig != NULL) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
477 |
Thread* THREAD = Thread::current(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
478 |
fileStream* st = JVMCIGlobals::get_jni_config_file(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
479 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
480 |
DUMP_ALL_NATIVE_METHODS(vmSymbols::jdk_vm_ci_hotspot_CompilerToVM()); |
54732 | 481 |
ThrowableInitDumper dumper(st); |
482 |
vmSymbols::symbols_do(&dumper); |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
483 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
484 |
st->flush(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
485 |
tty->print_cr("Dumped JVMCI shared library JNI configuration to %s", JVMCILibDumpJNIConfig); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
486 |
vm_exit(0); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
487 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
488 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
489 |
#undef DUMP_ALL_NATIVE_METHODS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
490 |
#undef DO_BOX_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
491 |
#undef BOX_CLASSES |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
492 |
#undef IN_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
493 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
494 |
#define CC (char*) /*cast a literal from (const char*)*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
495 |
#define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(f)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
496 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
497 |
if (env != JavaThread::current()->jni_environment()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
498 |
jclass clazz = env->FindClass("jdk/vm/ci/hotspot/CompilerToVM"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
499 |
if (env->ExceptionCheck()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
500 |
env->ExceptionDescribe(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
501 |
guarantee(false, "Could not find class jdk/vm/ci/hotspot/CompilerToVM"); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
502 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
503 |
JNINativeMethod CompilerToVM_native_methods[] = { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
504 |
{ CC"registerNatives", CC"()V", FN_PTR(JVM_RegisterJVMCINatives) }, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
505 |
}; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
506 |
env->RegisterNatives(clazz, CompilerToVM_native_methods, 1); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
507 |
if (env->ExceptionCheck()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
508 |
env->ExceptionDescribe(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
509 |
guarantee(false, ""); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
510 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
511 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
512 |
JNINativeMethod JVMCI_native_methods[] = { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
513 |
{ CC"initializeRuntime", CC"()Ljdk/vm/ci/runtime/JVMCIRuntime;", FN_PTR(JVM_GetJVMCIRuntime) }, |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
514 |
}; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
515 |
env->RegisterNatives(JVMCI::clazz(), JVMCI_native_methods, 1); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
516 |
if (env->ExceptionCheck()) { |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
517 |
env->ExceptionDescribe(); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
518 |
guarantee(false, ""); |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
519 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
520 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
521 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
522 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
523 |
#undef METHOD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
524 |
#undef CONSTRUCTOR |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
525 |
#undef FIELD2 |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
526 |
|
33160 | 527 |
#define EMPTY0 |
528 |
#define EMPTY1(x) |
|
529 |
#define EMPTY2(x,y) |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
530 |
#define FIELD3(className, name, sig) FIELD2(className, name) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
531 |
#define FIELD2(className, name) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
532 |
jfieldID JNIJVMCI::className::_##name##_field_id = 0; \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
533 |
int HotSpotJVMCI::className::_##name##_offset = 0; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
534 |
#define METHOD(jniCallType, jniGetMethod, hsCallType, returnType, className, methodName, signatureSymbolName, args) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
535 |
#define CONSTRUCTOR(className, signature) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
536 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
537 |
// Generates the definitions of static fields used by the accessors. For example: |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
538 |
// jfieldID JNIJVMCI::Architecture::_wordKind_field_id = 0; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
539 |
// jfieldID HotSpotJVMCI::Architecture::_wordKind_offset = 0; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
540 |
JVMCI_CLASSES_DO(EMPTY2, EMPTY0, FIELD2, FIELD2, FIELD2, FIELD2, FIELD2, FIELD3, FIELD3, FIELD3, FIELD3, FIELD3, FIELD2, FIELD2, METHOD, CONSTRUCTOR) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
541 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
542 |
#undef START_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
543 |
#undef END_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
544 |
#undef METHOD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
545 |
#undef CONSTRUCTOR |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
546 |
#undef FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
547 |
#undef CHAR_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
548 |
#undef INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
549 |
#undef BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
550 |
#undef LONG_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
551 |
#undef FLOAT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
552 |
#undef OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
553 |
#undef PRIMARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
554 |
#undef OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
555 |
#undef STATIC_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
556 |
#undef STATIC_OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
557 |
#undef STATIC_OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
558 |
#undef STATIC_INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
559 |
#undef STATIC_BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
560 |
#undef EMPTY_CAST |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
561 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
562 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
563 |
#define START_CLASS(className, fullClassName) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
564 |
void JNIJVMCI::className::initialize(JVMCI_TRAPS) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
565 |
/* should already be initialized */ \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
566 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
567 |
bool JNIJVMCI::className::is_instance(JVMCIEnv* jvmciEnv, JVMCIObject object) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
568 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
569 |
return jni()->IsInstanceOf(object.as_jobject(), className::clazz()) != 0; \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
570 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
571 |
void JNIJVMCI::className::check(JVMCIEnv* jvmciEnv, JVMCIObject obj, const char* field_name, jfieldID offset) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
572 |
assert(obj.is_non_null(), "NULL field access of %s.%s", #className, field_name); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
573 |
assert(jvmciEnv->isa_##className(obj), "wrong class, " #className " expected, found %s", jvmciEnv->klass_name(obj)); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
574 |
assert(offset != 0, "must be valid offset"); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
575 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
576 |
jclass JNIJVMCI::className::_class = NULL; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
577 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
578 |
#define END_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
579 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
580 |
#define FIELD(className, name, type, accessor, cast) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
581 |
type JNIJVMCI::className::get_##name(JVMCIEnv* jvmciEnv, JVMCIObject obj) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
582 |
className::check(jvmciEnv, obj, #name, className::_##name##_field_id); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
583 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
584 |
return cast jni()->Get##accessor##Field(resolve_handle(obj), className::_##name##_field_id); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
585 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
586 |
void JNIJVMCI::className::set_##name(JVMCIEnv* jvmciEnv, JVMCIObject obj, type x) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
587 |
className::check(jvmciEnv, obj, #name, className::_##name##_field_id); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
588 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
589 |
jni()->Set##accessor##Field(resolve_handle(obj), className::_##name##_field_id, x); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
590 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
591 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
592 |
#define EMPTY_CAST |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
593 |
#define CHAR_FIELD(className, name) FIELD(className, name, jchar, Char, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
594 |
#define INT_FIELD(className, name) FIELD(className, name, jint, Int, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
595 |
#define BOOLEAN_FIELD(className, name) FIELD(className, name, jboolean, Boolean, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
596 |
#define LONG_FIELD(className, name) FIELD(className, name, jlong, Long, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
597 |
#define FLOAT_FIELD(className, name) FIELD(className, name, jfloat, Float, EMPTY_CAST) |
33160 | 598 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
599 |
#define OBJECT_FIELD(className, name, signature) OOPISH_FIELD(className, name, JVMCIObject, Object, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
600 |
#define OBJECTARRAY_FIELD(className, name, signature) OOPISH_FIELD(className, name, JVMCIObjectArray, Object, (JVMCIObjectArray)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
601 |
#define PRIMARRAY_FIELD(className, name, signature) OOPISH_FIELD(className, name, JVMCIPrimitiveArray, Object, (JVMCIPrimitiveArray)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
602 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
603 |
#define STATIC_OBJECT_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, JVMCIObject, Object, (JVMCIObject)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
604 |
#define STATIC_OBJECTARRAY_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, JVMCIObjectArray, Object, (JVMCIObjectArray)) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
605 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
606 |
#define OOPISH_FIELD(className, name, type, accessor, cast) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
607 |
type JNIJVMCI::className::get_##name(JVMCIEnv* jvmciEnv, JVMCIObject obj) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
608 |
className::check(jvmciEnv, obj, #name, className::_##name##_field_id); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
609 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
610 |
return cast wrap(jni()->Get##accessor##Field(resolve_handle(obj), className::_##name##_field_id)); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
611 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
612 |
void JNIJVMCI::className::set_##name(JVMCIEnv* jvmciEnv, JVMCIObject obj, type x) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
613 |
className::check(jvmciEnv, obj, #name, className::_##name##_field_id); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
614 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
615 |
jni()->Set##accessor##Field(resolve_handle(obj), className::_##name##_field_id, resolve_handle(x)); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
616 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
617 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
618 |
#define STATIC_OOPISH_FIELD(className, name, type, accessor, cast) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
619 |
type JNIJVMCI::className::get_##name(JVMCIEnv* jvmciEnv) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
620 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
621 |
return cast wrap(jni()->GetStatic##accessor##Field(className::clazz(), className::_##name##_field_id)); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
622 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
623 |
void JNIJVMCI::className::set_##name(JVMCIEnv* jvmciEnv, type x) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
624 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
625 |
jni()->SetStatic##accessor##Field(className::clazz(), className::_##name##_field_id, resolve_handle(x)); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
626 |
} |
33160 | 627 |
|
54669
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
628 |
#define STATIC_PRIMITIVE_FIELD(className, name, type, accessor, cast) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
629 |
type JNIJVMCI::className::get_##name(JVMCIEnv* jvmciEnv) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
630 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
631 |
return cast jni()->GetStatic##accessor##Field(className::clazz(), className::_##name##_field_id); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
632 |
} \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
633 |
void JNIJVMCI::className::set_##name(JVMCIEnv* jvmciEnv, type x) { \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
634 |
JNIAccessMark jni(jvmciEnv); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
635 |
jni()->SetStatic##accessor##Field(className::clazz(), className::_##name##_field_id, x); \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
636 |
} |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
637 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
638 |
#define STATIC_INT_FIELD(className, name) STATIC_PRIMITIVE_FIELD(className, name, jint, Int, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
639 |
#define STATIC_BOOLEAN_FIELD(className, name) STATIC_PRIMITIVE_FIELD(className, name, jboolean, Boolean, EMPTY_CAST) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
640 |
#define METHOD(jniCallType, jniGetMethod, hsCallType, returnType, className, methodName, signatureSymbolName, args) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
641 |
jmethodID JNIJVMCI::className::_##methodName##_method; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
642 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
643 |
#define CONSTRUCTOR(className, signature) \ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
644 |
jmethodID JNIJVMCI::className::_constructor; |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
645 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
646 |
/** |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
647 |
* Generates the method definitions for the classes in HotSpotJVMCI. |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
648 |
*/ |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
649 |
JVMCI_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OBJECT_FIELD, PRIMARRAY_FIELD, OBJECTARRAY_FIELD, STATIC_OBJECT_FIELD, STATIC_OBJECTARRAY_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD, METHOD, CONSTRUCTOR) |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
650 |
|
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
651 |
#undef METHOD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
652 |
#undef CONSTRUCTOR |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
653 |
#undef START_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
654 |
#undef END_CLASS |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
655 |
#undef FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
656 |
#undef CHAR_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
657 |
#undef INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
658 |
#undef BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
659 |
#undef LONG_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
660 |
#undef FLOAT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
661 |
#undef OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
662 |
#undef PRIMARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
663 |
#undef OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
664 |
#undef STATIC_OOPISH_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
665 |
#undef STATIC_OBJECT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
666 |
#undef STATIC_OBJECTARRAY_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
667 |
#undef STATIC_INT_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
668 |
#undef STATIC_BOOLEAN_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
669 |
#undef STATIC_PRIMITIVE_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
670 |
#undef OOPISH_FIELD |
ad45b3802d4e
8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
51467
diff
changeset
|
671 |
#undef EMPTY_CAST |