1 | /* |
2 | * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. |
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 | |
25 | #include "precompiled.hpp" |
26 | #include "compiler/compileBroker.hpp" |
27 | #include "gc/shared/collectedHeap.hpp" |
28 | #include "jvmci/jvmciCodeInstaller.hpp" |
29 | #include "jvmci/jvmciCompilerToVM.hpp" |
30 | #include "jvmci/jvmciRuntime.hpp" |
31 | #include "jvmci/vmStructs_compiler_runtime.hpp" |
32 | #include "jvmci/vmStructs_jvmci.hpp" |
33 | #include "oops/objArrayKlass.hpp" |
34 | #include "runtime/deoptimization.hpp" |
35 | #include "runtime/sharedRuntime.hpp" |
36 | #if INCLUDE_G1GC |
37 | #include "gc/g1/g1CardTable.hpp" |
38 | #include "gc/g1/heapRegion.hpp" |
39 | #include "gc/g1/g1ThreadLocalData.hpp" |
40 | #endif |
41 | |
42 | #define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \ |
43 | static_field(CompilerToVM::Data, Klass_vtable_start_offset, int) \ |
44 | static_field(CompilerToVM::Data, Klass_vtable_length_offset, int) \ |
45 | \ |
46 | static_field(CompilerToVM::Data, Method_extra_stack_entries, int) \ |
47 | \ |
48 | static_field(CompilerToVM::Data, SharedRuntime_ic_miss_stub, address) \ |
49 | static_field(CompilerToVM::Data, SharedRuntime_handle_wrong_method_stub, address) \ |
50 | static_field(CompilerToVM::Data, SharedRuntime_deopt_blob_unpack, address) \ |
51 | static_field(CompilerToVM::Data, SharedRuntime_deopt_blob_uncommon_trap, address) \ |
52 | \ |
53 | static_field(CompilerToVM::Data, ThreadLocalAllocBuffer_alignment_reserve, size_t) \ |
54 | \ |
55 | static_field(CompilerToVM::Data, Universe_collectedHeap, CollectedHeap*) \ |
56 | static_field(CompilerToVM::Data, Universe_base_vtable_size, int) \ |
57 | static_field(CompilerToVM::Data, Universe_narrow_oop_base, address) \ |
58 | static_field(CompilerToVM::Data, Universe_narrow_oop_shift, int) \ |
59 | static_field(CompilerToVM::Data, Universe_narrow_klass_base, address) \ |
60 | static_field(CompilerToVM::Data, Universe_narrow_klass_shift, int) \ |
61 | static_field(CompilerToVM::Data, Universe_non_oop_bits, void*) \ |
62 | static_field(CompilerToVM::Data, Universe_verify_oop_mask, uintptr_t) \ |
63 | static_field(CompilerToVM::Data, Universe_verify_oop_bits, uintptr_t) \ |
64 | \ |
65 | static_field(CompilerToVM::Data, _supports_inline_contig_alloc, bool) \ |
66 | static_field(CompilerToVM::Data, _heap_end_addr, HeapWord**) \ |
67 | static_field(CompilerToVM::Data, _heap_top_addr, HeapWord* volatile*) \ |
68 | \ |
69 | static_field(CompilerToVM::Data, _max_oop_map_stack_offset, int) \ |
70 | static_field(CompilerToVM::Data, _fields_annotations_base_offset, int) \ |
71 | \ |
72 | static_field(CompilerToVM::Data, cardtable_start_address, jbyte*) \ |
73 | static_field(CompilerToVM::Data, cardtable_shift, int) \ |
74 | \ |
75 | static_field(CompilerToVM::Data, vm_page_size, int) \ |
76 | \ |
77 | static_field(CompilerToVM::Data, sizeof_vtableEntry, int) \ |
78 | static_field(CompilerToVM::Data, sizeof_ExceptionTableElement, int) \ |
79 | static_field(CompilerToVM::Data, sizeof_LocalVariableTableElement, int) \ |
80 | static_field(CompilerToVM::Data, sizeof_ConstantPool, int) \ |
81 | static_field(CompilerToVM::Data, sizeof_narrowKlass, int) \ |
82 | static_field(CompilerToVM::Data, sizeof_arrayOopDesc, int) \ |
83 | static_field(CompilerToVM::Data, sizeof_BasicLock, int) \ |
84 | \ |
85 | static_field(CompilerToVM::Data, dsin, address) \ |
86 | static_field(CompilerToVM::Data, dcos, address) \ |
87 | static_field(CompilerToVM::Data, dtan, address) \ |
88 | static_field(CompilerToVM::Data, dexp, address) \ |
89 | static_field(CompilerToVM::Data, dlog, address) \ |
90 | static_field(CompilerToVM::Data, dlog10, address) \ |
91 | static_field(CompilerToVM::Data, dpow, address) \ |
92 | \ |
93 | static_field(CompilerToVM::Data, symbol_init, address) \ |
94 | static_field(CompilerToVM::Data, symbol_clinit, address) \ |
95 | \ |
96 | static_field(Abstract_VM_Version, _features, uint64_t) \ |
97 | \ |
98 | nonstatic_field(Annotations, _fields_annotations, Array<AnnotationArray*>*) \ |
99 | \ |
100 | nonstatic_field(Array<int>, _length, int) \ |
101 | unchecked_nonstatic_field(Array<u1>, _data, sizeof(u1)) \ |
102 | unchecked_nonstatic_field(Array<u2>, _data, sizeof(u2)) \ |
103 | nonstatic_field(Array<Klass*>, _length, int) \ |
104 | nonstatic_field(Array<Klass*>, _data[0], Klass*) \ |
105 | \ |
106 | volatile_nonstatic_field(BasicLock, _displaced_header, markOop) \ |
107 | \ |
108 | static_field(CodeCache, _low_bound, address) \ |
109 | static_field(CodeCache, _high_bound, address) \ |
110 | \ |
111 | nonstatic_field(CollectedHeap, _total_collections, unsigned int) \ |
112 | \ |
113 | nonstatic_field(CompileTask, _num_inlined_bytecodes, int) \ |
114 | \ |
115 | nonstatic_field(ConstantPool, _tags, Array<u1>*) \ |
116 | nonstatic_field(ConstantPool, _pool_holder, InstanceKlass*) \ |
117 | nonstatic_field(ConstantPool, _length, int) \ |
118 | nonstatic_field(ConstantPool, _flags, int) \ |
119 | \ |
120 | nonstatic_field(ConstMethod, _constants, ConstantPool*) \ |
121 | nonstatic_field(ConstMethod, _flags, u2) \ |
122 | nonstatic_field(ConstMethod, _code_size, u2) \ |
123 | nonstatic_field(ConstMethod, _name_index, u2) \ |
124 | nonstatic_field(ConstMethod, _signature_index, u2) \ |
125 | nonstatic_field(ConstMethod, _method_idnum, u2) \ |
126 | nonstatic_field(ConstMethod, _max_stack, u2) \ |
127 | nonstatic_field(ConstMethod, _max_locals, u2) \ |
128 | \ |
129 | nonstatic_field(DataLayout, _header._struct._tag, u1) \ |
130 | nonstatic_field(DataLayout, _header._struct._flags, u1) \ |
131 | nonstatic_field(DataLayout, _header._struct._bci, u2) \ |
132 | nonstatic_field(DataLayout, _header._struct._traps, u4) \ |
133 | nonstatic_field(DataLayout, _cells[0], intptr_t) \ |
134 | \ |
135 | nonstatic_field(Deoptimization::UnrollBlock, _size_of_deoptimized_frame, int) \ |
136 | nonstatic_field(Deoptimization::UnrollBlock, _caller_adjustment, int) \ |
137 | nonstatic_field(Deoptimization::UnrollBlock, _number_of_frames, int) \ |
138 | nonstatic_field(Deoptimization::UnrollBlock, _total_frame_sizes, int) \ |
139 | nonstatic_field(Deoptimization::UnrollBlock, _frame_sizes, intptr_t*) \ |
140 | nonstatic_field(Deoptimization::UnrollBlock, _frame_pcs, address*) \ |
141 | nonstatic_field(Deoptimization::UnrollBlock, _initial_info, intptr_t) \ |
142 | nonstatic_field(Deoptimization::UnrollBlock, _unpack_kind, int) \ |
143 | \ |
144 | nonstatic_field(ExceptionTableElement, start_pc, u2) \ |
145 | nonstatic_field(ExceptionTableElement, end_pc, u2) \ |
146 | nonstatic_field(ExceptionTableElement, handler_pc, u2) \ |
147 | nonstatic_field(ExceptionTableElement, catch_type_index, u2) \ |
148 | \ |
149 | nonstatic_field(JVMFlag, _type, const char*) \ |
150 | nonstatic_field(JVMFlag, _name, const char*) \ |
151 | unchecked_nonstatic_field(JVMFlag, _addr, sizeof(void*)) \ |
152 | nonstatic_field(JVMFlag, _flags, JVMFlag::Flags) \ |
153 | static_field(JVMFlag, flags, JVMFlag*) \ |
154 | \ |
155 | nonstatic_field(InstanceKlass, _fields, Array<u2>*) \ |
156 | nonstatic_field(InstanceKlass, _constants, ConstantPool*) \ |
157 | nonstatic_field(InstanceKlass, _source_file_name_index, u2) \ |
158 | nonstatic_field(InstanceKlass, _init_state, u1) \ |
159 | nonstatic_field(InstanceKlass, _misc_flags, u2) \ |
160 | nonstatic_field(InstanceKlass, _annotations, Annotations*) \ |
161 | \ |
162 | volatile_nonstatic_field(JavaFrameAnchor, _last_Java_sp, intptr_t*) \ |
163 | volatile_nonstatic_field(JavaFrameAnchor, _last_Java_pc, address) \ |
164 | \ |
165 | nonstatic_field(JVMCICompileState, _jvmti_can_hotswap_or_post_breakpoint, jbyte) \ |
166 | nonstatic_field(JVMCICompileState, _jvmti_can_access_local_variables, jbyte) \ |
167 | nonstatic_field(JVMCICompileState, _jvmti_can_post_on_exceptions, jbyte) \ |
168 | nonstatic_field(JVMCICompileState, _jvmti_can_pop_frame, jbyte) \ |
169 | \ |
170 | nonstatic_field(JavaThread, _threadObj, oop) \ |
171 | nonstatic_field(JavaThread, _anchor, JavaFrameAnchor) \ |
172 | nonstatic_field(JavaThread, _vm_result, oop) \ |
173 | volatile_nonstatic_field(JavaThread, _exception_oop, oop) \ |
174 | volatile_nonstatic_field(JavaThread, _exception_pc, address) \ |
175 | volatile_nonstatic_field(JavaThread, _is_method_handle_return, int) \ |
176 | nonstatic_field(JavaThread, _osthread, OSThread*) \ |
177 | nonstatic_field(JavaThread, _pending_deoptimization, int) \ |
178 | nonstatic_field(JavaThread, _pending_failed_speculation, jlong) \ |
179 | nonstatic_field(JavaThread, _pending_transfer_to_interpreter, bool) \ |
180 | nonstatic_field(JavaThread, _jvmci_counters, jlong*) \ |
181 | nonstatic_field(JavaThread, _should_post_on_exceptions_flag, int) \ |
182 | nonstatic_field(JavaThread, _reserved_stack_activation, address) \ |
183 | \ |
184 | static_field(java_lang_Class, _klass_offset, int) \ |
185 | static_field(java_lang_Class, _array_klass_offset, int) \ |
186 | \ |
187 | nonstatic_field(InvocationCounter, _counter, unsigned int) \ |
188 | \ |
189 | nonstatic_field(Klass, _secondary_super_cache, Klass*) \ |
190 | nonstatic_field(Klass, _secondary_supers, Array<Klass*>*) \ |
191 | nonstatic_field(Klass, _super, Klass*) \ |
192 | nonstatic_field(Klass, _super_check_offset, juint) \ |
193 | nonstatic_field(Klass, _subklass, Klass*) \ |
194 | nonstatic_field(Klass, _layout_helper, jint) \ |
195 | nonstatic_field(Klass, _name, Symbol*) \ |
196 | nonstatic_field(Klass, _prototype_header, markOop) \ |
197 | nonstatic_field(Klass, _next_sibling, Klass*) \ |
198 | nonstatic_field(Klass, _java_mirror, OopHandle) \ |
199 | nonstatic_field(Klass, _modifier_flags, jint) \ |
200 | nonstatic_field(Klass, _access_flags, AccessFlags) \ |
201 | nonstatic_field(Klass, _class_loader_data, ClassLoaderData*) \ |
202 | \ |
203 | nonstatic_field(LocalVariableTableElement, start_bci, u2) \ |
204 | nonstatic_field(LocalVariableTableElement, length, u2) \ |
205 | nonstatic_field(LocalVariableTableElement, name_cp_index, u2) \ |
206 | nonstatic_field(LocalVariableTableElement, descriptor_cp_index, u2) \ |
207 | nonstatic_field(LocalVariableTableElement, signature_cp_index, u2) \ |
208 | nonstatic_field(LocalVariableTableElement, slot, u2) \ |
209 | \ |
210 | nonstatic_field(Method, _constMethod, ConstMethod*) \ |
211 | nonstatic_field(Method, _method_data, MethodData*) \ |
212 | nonstatic_field(Method, _method_counters, MethodCounters*) \ |
213 | nonstatic_field(Method, _access_flags, AccessFlags) \ |
214 | nonstatic_field(Method, _vtable_index, int) \ |
215 | nonstatic_field(Method, _intrinsic_id, u2) \ |
216 | nonstatic_field(Method, _flags, u2) \ |
217 | volatile_nonstatic_field(Method, _code, CompiledMethod*) \ |
218 | volatile_nonstatic_field(Method, _from_compiled_entry, address) \ |
219 | \ |
220 | nonstatic_field(MethodCounters, _nmethod_age, int) \ |
221 | nonstatic_field(MethodCounters, _interpreter_invocation_limit, int) \ |
222 | nonstatic_field(MethodCounters, _interpreter_backward_branch_limit, int) \ |
223 | nonstatic_field(MethodCounters, _interpreter_profile_limit, int) \ |
224 | nonstatic_field(MethodCounters, _invoke_mask, int) \ |
225 | nonstatic_field(MethodCounters, _backedge_mask, int) \ |
226 | nonstatic_field(MethodCounters, _interpreter_invocation_count, int) \ |
227 | nonstatic_field(MethodCounters, _interpreter_throwout_count, u2) \ |
228 | JVMTI_ONLY(nonstatic_field(MethodCounters, _number_of_breakpoints, u2)) \ |
229 | nonstatic_field(MethodCounters, _invocation_counter, InvocationCounter) \ |
230 | nonstatic_field(MethodCounters, _backedge_counter, InvocationCounter) \ |
231 | \ |
232 | nonstatic_field(MethodData, _size, int) \ |
233 | nonstatic_field(MethodData, _method, Method*) \ |
234 | nonstatic_field(MethodData, _data_size, int) \ |
235 | nonstatic_field(MethodData, _data[0], intptr_t) \ |
236 | nonstatic_field(MethodData, _parameters_type_data_di, int) \ |
237 | nonstatic_field(MethodData, _nof_decompiles, uint) \ |
238 | nonstatic_field(MethodData, _nof_overflow_recompiles, uint) \ |
239 | nonstatic_field(MethodData, _nof_overflow_traps, uint) \ |
240 | nonstatic_field(MethodData, _trap_hist._array[0], u1) \ |
241 | nonstatic_field(MethodData, _eflags, intx) \ |
242 | nonstatic_field(MethodData, _arg_local, intx) \ |
243 | nonstatic_field(MethodData, _arg_stack, intx) \ |
244 | nonstatic_field(MethodData, _arg_returned, intx) \ |
245 | nonstatic_field(MethodData, _tenure_traps, uint) \ |
246 | nonstatic_field(MethodData, _invoke_mask, int) \ |
247 | nonstatic_field(MethodData, _backedge_mask, int) \ |
248 | nonstatic_field(MethodData, _jvmci_ir_size, int) \ |
249 | \ |
250 | nonstatic_field(nmethod, _verified_entry_point, address) \ |
251 | nonstatic_field(nmethod, _comp_level, int) \ |
252 | \ |
253 | nonstatic_field(ObjArrayKlass, _element_klass, Klass*) \ |
254 | \ |
255 | volatile_nonstatic_field(ObjectMonitor, _cxq, ObjectWaiter*) \ |
256 | volatile_nonstatic_field(ObjectMonitor, _EntryList, ObjectWaiter*) \ |
257 | volatile_nonstatic_field(ObjectMonitor, _succ, Thread*) \ |
258 | \ |
259 | volatile_nonstatic_field(oopDesc, _mark, markOop) \ |
260 | volatile_nonstatic_field(oopDesc, _metadata._klass, Klass*) \ |
261 | \ |
262 | static_field(os, _polling_page, address) \ |
263 | \ |
264 | volatile_nonstatic_field(OSThread, _interrupted, jint) \ |
265 | \ |
266 | static_field(StubRoutines, _verify_oop_count, jint) \ |
267 | \ |
268 | static_field(StubRoutines, _throw_delayed_StackOverflowError_entry, address) \ |
269 | \ |
270 | static_field(StubRoutines, _jbyte_arraycopy, address) \ |
271 | static_field(StubRoutines, _jshort_arraycopy, address) \ |
272 | static_field(StubRoutines, _jint_arraycopy, address) \ |
273 | static_field(StubRoutines, _jlong_arraycopy, address) \ |
274 | static_field(StubRoutines, _oop_arraycopy, address) \ |
275 | static_field(StubRoutines, _oop_arraycopy_uninit, address) \ |
276 | static_field(StubRoutines, _jbyte_disjoint_arraycopy, address) \ |
277 | static_field(StubRoutines, _jshort_disjoint_arraycopy, address) \ |
278 | static_field(StubRoutines, _jint_disjoint_arraycopy, address) \ |
279 | static_field(StubRoutines, _jlong_disjoint_arraycopy, address) \ |
280 | static_field(StubRoutines, _oop_disjoint_arraycopy, address) \ |
281 | static_field(StubRoutines, _oop_disjoint_arraycopy_uninit, address) \ |
282 | static_field(StubRoutines, _arrayof_jbyte_arraycopy, address) \ |
283 | static_field(StubRoutines, _arrayof_jshort_arraycopy, address) \ |
284 | static_field(StubRoutines, _arrayof_jint_arraycopy, address) \ |
285 | static_field(StubRoutines, _arrayof_jlong_arraycopy, address) \ |
286 | static_field(StubRoutines, _arrayof_oop_arraycopy, address) \ |
287 | static_field(StubRoutines, _arrayof_oop_arraycopy_uninit, address) \ |
288 | static_field(StubRoutines, _arrayof_jbyte_disjoint_arraycopy, address) \ |
289 | static_field(StubRoutines, _arrayof_jshort_disjoint_arraycopy, address) \ |
290 | static_field(StubRoutines, _arrayof_jint_disjoint_arraycopy, address) \ |
291 | static_field(StubRoutines, _arrayof_jlong_disjoint_arraycopy, address) \ |
292 | static_field(StubRoutines, _arrayof_oop_disjoint_arraycopy, address) \ |
293 | static_field(StubRoutines, _arrayof_oop_disjoint_arraycopy_uninit, address) \ |
294 | static_field(StubRoutines, _checkcast_arraycopy, address) \ |
295 | static_field(StubRoutines, _checkcast_arraycopy_uninit, address) \ |
296 | static_field(StubRoutines, _unsafe_arraycopy, address) \ |
297 | static_field(StubRoutines, _generic_arraycopy, address) \ |
298 | \ |
299 | static_field(StubRoutines, _aescrypt_encryptBlock, address) \ |
300 | static_field(StubRoutines, _aescrypt_decryptBlock, address) \ |
301 | static_field(StubRoutines, _cipherBlockChaining_encryptAESCrypt, address) \ |
302 | static_field(StubRoutines, _cipherBlockChaining_decryptAESCrypt, address) \ |
303 | static_field(StubRoutines, _counterMode_AESCrypt, address) \ |
304 | static_field(StubRoutines, _base64_encodeBlock, address) \ |
305 | static_field(StubRoutines, _ghash_processBlocks, address) \ |
306 | static_field(StubRoutines, _sha1_implCompress, address) \ |
307 | static_field(StubRoutines, _sha1_implCompressMB, address) \ |
308 | static_field(StubRoutines, _sha256_implCompress, address) \ |
309 | static_field(StubRoutines, _sha256_implCompressMB, address) \ |
310 | static_field(StubRoutines, _sha512_implCompress, address) \ |
311 | static_field(StubRoutines, _sha512_implCompressMB, address) \ |
312 | static_field(StubRoutines, _updateBytesCRC32, address) \ |
313 | static_field(StubRoutines, _crc_table_adr, address) \ |
314 | static_field(StubRoutines, _crc32c_table_addr, address) \ |
315 | static_field(StubRoutines, _updateBytesCRC32C, address) \ |
316 | static_field(StubRoutines, _updateBytesAdler32, address) \ |
317 | static_field(StubRoutines, _multiplyToLen, address) \ |
318 | static_field(StubRoutines, _squareToLen, address) \ |
319 | static_field(StubRoutines, _mulAdd, address) \ |
320 | static_field(StubRoutines, _montgomeryMultiply, address) \ |
321 | static_field(StubRoutines, _montgomerySquare, address) \ |
322 | static_field(StubRoutines, _vectorizedMismatch, address) \ |
323 | \ |
324 | nonstatic_field(Thread, _tlab, ThreadLocalAllocBuffer) \ |
325 | nonstatic_field(Thread, _allocated_bytes, jlong) \ |
326 | nonstatic_field(Thread, _polling_page, address) \ |
327 | \ |
328 | nonstatic_field(ThreadLocalAllocBuffer, _start, HeapWord*) \ |
329 | nonstatic_field(ThreadLocalAllocBuffer, _top, HeapWord*) \ |
330 | nonstatic_field(ThreadLocalAllocBuffer, _end, HeapWord*) \ |
331 | nonstatic_field(ThreadLocalAllocBuffer, _pf_top, HeapWord*) \ |
332 | nonstatic_field(ThreadLocalAllocBuffer, _desired_size, size_t) \ |
333 | nonstatic_field(ThreadLocalAllocBuffer, _refill_waste_limit, size_t) \ |
334 | nonstatic_field(ThreadLocalAllocBuffer, _number_of_refills, unsigned) \ |
335 | nonstatic_field(ThreadLocalAllocBuffer, _fast_refill_waste, unsigned) \ |
336 | nonstatic_field(ThreadLocalAllocBuffer, _slow_allocations, unsigned) \ |
337 | \ |
338 | nonstatic_field(ThreadShadow, _pending_exception, oop) \ |
339 | \ |
340 | static_field(vmSymbols, _symbols[0], Symbol*) \ |
341 | \ |
342 | nonstatic_field(vtableEntry, _method, Method*) \ |
343 | |
344 | #define VM_TYPES(declare_type, declare_toplevel_type, declare_integer_type, declare_unsigned_integer_type) \ |
345 | declare_integer_type(bool) \ |
346 | declare_unsigned_integer_type(size_t) \ |
347 | declare_integer_type(intx) \ |
348 | declare_unsigned_integer_type(uintx) \ |
349 | \ |
350 | declare_toplevel_type(BasicLock) \ |
351 | declare_toplevel_type(CompilerToVM) \ |
352 | declare_toplevel_type(ExceptionTableElement) \ |
353 | declare_toplevel_type(JVMFlag) \ |
354 | declare_toplevel_type(JVMFlag*) \ |
355 | declare_toplevel_type(InvocationCounter) \ |
356 | declare_toplevel_type(JVMCICompileState) \ |
357 | declare_toplevel_type(JVMCIEnv) \ |
358 | declare_toplevel_type(LocalVariableTableElement) \ |
359 | declare_toplevel_type(narrowKlass) \ |
360 | declare_toplevel_type(ObjectWaiter) \ |
361 | declare_toplevel_type(Symbol*) \ |
362 | declare_toplevel_type(vtableEntry) \ |
363 | \ |
364 | declare_toplevel_type(oopDesc) \ |
365 | declare_type(arrayOopDesc, oopDesc) \ |
366 | \ |
367 | declare_toplevel_type(MetaspaceObj) \ |
368 | declare_type(Metadata, MetaspaceObj) \ |
369 | declare_type(Klass, Metadata) \ |
370 | declare_type(InstanceKlass, Klass) \ |
371 | declare_type(ConstantPool, Metadata) \ |
372 | |
373 | #define VM_INT_CONSTANTS(declare_constant, declare_constant_with_value, declare_preprocessor_constant) \ |
374 | declare_preprocessor_constant("ASSERT", DEBUG_ONLY(1) NOT_DEBUG(0)) \ |
375 | declare_preprocessor_constant("FIELDINFO_TAG_SIZE", FIELDINFO_TAG_SIZE) \ |
376 | declare_preprocessor_constant("STACK_BIAS", STACK_BIAS) \ |
377 | \ |
378 | declare_constant(CompLevel_none) \ |
379 | declare_constant(CompLevel_simple) \ |
380 | declare_constant(CompLevel_limited_profile) \ |
381 | declare_constant(CompLevel_full_profile) \ |
382 | declare_constant(CompLevel_full_optimization) \ |
383 | declare_constant(HeapWordSize) \ |
384 | declare_constant(InvocationEntryBci) \ |
385 | declare_constant(LogKlassAlignmentInBytes) \ |
386 | \ |
387 | declare_constant(JVM_ACC_WRITTEN_FLAGS) \ |
388 | declare_constant(JVM_ACC_MONITOR_MATCH) \ |
389 | declare_constant(JVM_ACC_HAS_MONITOR_BYTECODES) \ |
390 | declare_constant(JVM_ACC_HAS_FINALIZER) \ |
391 | declare_constant(JVM_ACC_IS_CLONEABLE_FAST) \ |
392 | declare_constant(JVM_ACC_FIELD_INTERNAL) \ |
393 | declare_constant(JVM_ACC_FIELD_STABLE) \ |
394 | declare_constant(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) \ |
395 | declare_preprocessor_constant("JVM_ACC_VARARGS", JVM_ACC_VARARGS) \ |
396 | declare_preprocessor_constant("JVM_ACC_BRIDGE", JVM_ACC_BRIDGE) \ |
397 | declare_preprocessor_constant("JVM_ACC_ANNOTATION", JVM_ACC_ANNOTATION) \ |
398 | declare_preprocessor_constant("JVM_ACC_ENUM", JVM_ACC_ENUM) \ |
399 | declare_preprocessor_constant("JVM_ACC_SYNTHETIC", JVM_ACC_SYNTHETIC) \ |
400 | declare_preprocessor_constant("JVM_ACC_INTERFACE", JVM_ACC_INTERFACE) \ |
401 | \ |
402 | declare_constant(JVM_CONSTANT_Utf8) \ |
403 | declare_constant(JVM_CONSTANT_Unicode) \ |
404 | declare_constant(JVM_CONSTANT_Integer) \ |
405 | declare_constant(JVM_CONSTANT_Float) \ |
406 | declare_constant(JVM_CONSTANT_Long) \ |
407 | declare_constant(JVM_CONSTANT_Double) \ |
408 | declare_constant(JVM_CONSTANT_Class) \ |
409 | declare_constant(JVM_CONSTANT_String) \ |
410 | declare_constant(JVM_CONSTANT_Fieldref) \ |
411 | declare_constant(JVM_CONSTANT_Methodref) \ |
412 | declare_constant(JVM_CONSTANT_InterfaceMethodref) \ |
413 | declare_constant(JVM_CONSTANT_NameAndType) \ |
414 | declare_constant(JVM_CONSTANT_MethodHandle) \ |
415 | declare_constant(JVM_CONSTANT_MethodType) \ |
416 | declare_constant(JVM_CONSTANT_InvokeDynamic) \ |
417 | declare_constant(JVM_CONSTANT_Module) \ |
418 | declare_constant(JVM_CONSTANT_Package) \ |
419 | declare_constant(JVM_CONSTANT_ExternalMax) \ |
420 | \ |
421 | declare_constant(JVM_CONSTANT_Invalid) \ |
422 | declare_constant(JVM_CONSTANT_InternalMin) \ |
423 | declare_constant(JVM_CONSTANT_UnresolvedClass) \ |
424 | declare_constant(JVM_CONSTANT_ClassIndex) \ |
425 | declare_constant(JVM_CONSTANT_StringIndex) \ |
426 | declare_constant(JVM_CONSTANT_UnresolvedClassInError) \ |
427 | declare_constant(JVM_CONSTANT_MethodHandleInError) \ |
428 | declare_constant(JVM_CONSTANT_MethodTypeInError) \ |
429 | declare_constant(JVM_CONSTANT_DynamicInError) \ |
430 | declare_constant(JVM_CONSTANT_InternalMax) \ |
431 | \ |
432 | declare_constant(ArrayData::array_len_off_set) \ |
433 | declare_constant(ArrayData::array_start_off_set) \ |
434 | \ |
435 | declare_constant(BitData::exception_seen_flag) \ |
436 | declare_constant(BitData::null_seen_flag) \ |
437 | declare_constant(BranchData::not_taken_off_set) \ |
438 | \ |
439 | declare_constant_with_value("CardTable::dirty_card", CardTable::dirty_card_val()) \ |
440 | \ |
441 | declare_constant(CodeInstaller::VERIFIED_ENTRY) \ |
442 | declare_constant(CodeInstaller::UNVERIFIED_ENTRY) \ |
443 | declare_constant(CodeInstaller::OSR_ENTRY) \ |
444 | declare_constant(CodeInstaller::EXCEPTION_HANDLER_ENTRY) \ |
445 | declare_constant(CodeInstaller::DEOPT_HANDLER_ENTRY) \ |
446 | declare_constant(CodeInstaller::INVOKEINTERFACE) \ |
447 | declare_constant(CodeInstaller::INVOKEVIRTUAL) \ |
448 | declare_constant(CodeInstaller::INVOKESTATIC) \ |
449 | declare_constant(CodeInstaller::INVOKESPECIAL) \ |
450 | declare_constant(CodeInstaller::INLINE_INVOKE) \ |
451 | declare_constant(CodeInstaller::POLL_NEAR) \ |
452 | declare_constant(CodeInstaller::POLL_RETURN_NEAR) \ |
453 | declare_constant(CodeInstaller::POLL_FAR) \ |
454 | declare_constant(CodeInstaller::POLL_RETURN_FAR) \ |
455 | declare_constant(CodeInstaller::CARD_TABLE_SHIFT) \ |
456 | declare_constant(CodeInstaller::CARD_TABLE_ADDRESS) \ |
457 | declare_constant(CodeInstaller::HEAP_TOP_ADDRESS) \ |
458 | declare_constant(CodeInstaller::HEAP_END_ADDRESS) \ |
459 | declare_constant(CodeInstaller::NARROW_KLASS_BASE_ADDRESS) \ |
460 | declare_constant(CodeInstaller::NARROW_OOP_BASE_ADDRESS) \ |
461 | declare_constant(CodeInstaller::CRC_TABLE_ADDRESS) \ |
462 | declare_constant(CodeInstaller::LOG_OF_HEAP_REGION_GRAIN_BYTES) \ |
463 | declare_constant(CodeInstaller::INLINE_CONTIGUOUS_ALLOCATION_SUPPORTED) \ |
464 | declare_constant(CodeInstaller::INVOKE_INVALID) \ |
465 | \ |
466 | declare_constant(ConstantPool::CPCACHE_INDEX_TAG) \ |
467 | declare_constant(ConstantPool::_has_dynamic_constant) \ |
468 | \ |
469 | declare_constant(ConstMethod::_has_linenumber_table) \ |
470 | declare_constant(ConstMethod::_has_localvariable_table) \ |
471 | declare_constant(ConstMethod::_has_exception_table) \ |
472 | declare_constant(ConstMethod::_has_method_annotations) \ |
473 | declare_constant(ConstMethod::_has_parameter_annotations) \ |
474 | \ |
475 | declare_constant(CounterData::count_off) \ |
476 | \ |
477 | declare_constant(DataLayout::cell_size) \ |
478 | declare_constant(DataLayout::no_tag) \ |
479 | declare_constant(DataLayout::bit_data_tag) \ |
480 | declare_constant(DataLayout::counter_data_tag) \ |
481 | declare_constant(DataLayout::jump_data_tag) \ |
482 | declare_constant(DataLayout::receiver_type_data_tag) \ |
483 | declare_constant(DataLayout::virtual_call_data_tag) \ |
484 | declare_constant(DataLayout::ret_data_tag) \ |
485 | declare_constant(DataLayout::branch_data_tag) \ |
486 | declare_constant(DataLayout::multi_branch_data_tag) \ |
487 | declare_constant(DataLayout::arg_info_data_tag) \ |
488 | declare_constant(DataLayout::call_type_data_tag) \ |
489 | declare_constant(DataLayout::virtual_call_type_data_tag) \ |
490 | declare_constant(DataLayout::parameters_type_data_tag) \ |
491 | declare_constant(DataLayout::speculative_trap_data_tag) \ |
492 | \ |
493 | declare_constant(Deoptimization::Unpack_deopt) \ |
494 | declare_constant(Deoptimization::Unpack_exception) \ |
495 | declare_constant(Deoptimization::Unpack_uncommon_trap) \ |
496 | declare_constant(Deoptimization::Unpack_reexecute) \ |
497 | \ |
498 | declare_constant(Deoptimization::_action_bits) \ |
499 | declare_constant(Deoptimization::_reason_bits) \ |
500 | declare_constant(Deoptimization::_debug_id_bits) \ |
501 | declare_constant(Deoptimization::_action_shift) \ |
502 | declare_constant(Deoptimization::_reason_shift) \ |
503 | declare_constant(Deoptimization::_debug_id_shift) \ |
504 | \ |
505 | declare_constant(Deoptimization::Action_none) \ |
506 | declare_constant(Deoptimization::Action_maybe_recompile) \ |
507 | declare_constant(Deoptimization::Action_reinterpret) \ |
508 | declare_constant(Deoptimization::Action_make_not_entrant) \ |
509 | declare_constant(Deoptimization::Action_make_not_compilable) \ |
510 | \ |
511 | declare_constant(Deoptimization::Reason_none) \ |
512 | declare_constant(Deoptimization::Reason_null_check) \ |
513 | declare_constant(Deoptimization::Reason_range_check) \ |
514 | declare_constant(Deoptimization::Reason_class_check) \ |
515 | declare_constant(Deoptimization::Reason_array_check) \ |
516 | declare_constant(Deoptimization::Reason_unreached0) \ |
517 | declare_constant(Deoptimization::Reason_constraint) \ |
518 | declare_constant(Deoptimization::Reason_div0_check) \ |
519 | declare_constant(Deoptimization::Reason_loop_limit_check) \ |
520 | declare_constant(Deoptimization::Reason_type_checked_inlining) \ |
521 | declare_constant(Deoptimization::Reason_optimized_type_check) \ |
522 | declare_constant(Deoptimization::Reason_aliasing) \ |
523 | declare_constant(Deoptimization::Reason_transfer_to_interpreter) \ |
524 | declare_constant(Deoptimization::Reason_not_compiled_exception_handler) \ |
525 | declare_constant(Deoptimization::Reason_unresolved) \ |
526 | declare_constant(Deoptimization::Reason_jsr_mismatch) \ |
527 | declare_constant(Deoptimization::Reason_LIMIT) \ |
528 | \ |
529 | declare_constant(FieldInfo::access_flags_offset) \ |
530 | declare_constant(FieldInfo::name_index_offset) \ |
531 | declare_constant(FieldInfo::signature_index_offset) \ |
532 | declare_constant(FieldInfo::initval_index_offset) \ |
533 | declare_constant(FieldInfo::low_packed_offset) \ |
534 | declare_constant(FieldInfo::high_packed_offset) \ |
535 | declare_constant(FieldInfo::field_slots) \ |
536 | \ |
537 | declare_constant(InstanceKlass::linked) \ |
538 | declare_constant(InstanceKlass::fully_initialized) \ |
539 | declare_constant(InstanceKlass::_misc_is_unsafe_anonymous) \ |
540 | \ |
541 | declare_constant(JumpData::taken_off_set) \ |
542 | declare_constant(JumpData::displacement_off_set) \ |
543 | \ |
544 | declare_preprocessor_constant("JVMCIEnv::ok", JVMCI::ok) \ |
545 | declare_preprocessor_constant("JVMCIEnv::dependencies_failed", JVMCI::dependencies_failed) \ |
546 | declare_preprocessor_constant("JVMCIEnv::dependencies_invalid", JVMCI::dependencies_invalid) \ |
547 | declare_preprocessor_constant("JVMCIEnv::cache_full", JVMCI::cache_full) \ |
548 | declare_preprocessor_constant("JVMCIEnv::code_too_large", JVMCI::code_too_large) \ |
549 | declare_constant(JVMCIRuntime::none) \ |
550 | declare_constant(JVMCIRuntime::by_holder) \ |
551 | declare_constant(JVMCIRuntime::by_full_signature) \ |
552 | \ |
553 | declare_constant(Klass::_lh_neutral_value) \ |
554 | declare_constant(Klass::_lh_instance_slow_path_bit) \ |
555 | declare_constant(Klass::_lh_log2_element_size_shift) \ |
556 | declare_constant(Klass::_lh_log2_element_size_mask) \ |
557 | declare_constant(Klass::_lh_element_type_shift) \ |
558 | declare_constant(Klass::_lh_element_type_mask) \ |
559 | declare_constant(Klass::_lh_header_size_shift) \ |
560 | declare_constant(Klass::_lh_header_size_mask) \ |
561 | declare_constant(Klass::_lh_array_tag_shift) \ |
562 | declare_constant(Klass::_lh_array_tag_type_value) \ |
563 | declare_constant(Klass::_lh_array_tag_obj_value) \ |
564 | \ |
565 | declare_constant(markOopDesc::no_hash) \ |
566 | \ |
567 | declare_constant(Method::_caller_sensitive) \ |
568 | declare_constant(Method::_force_inline) \ |
569 | declare_constant(Method::_dont_inline) \ |
570 | declare_constant(Method::_hidden) \ |
571 | declare_constant(Method::_intrinsic_candidate) \ |
572 | declare_constant(Method::_reserved_stack_access) \ |
573 | \ |
574 | declare_constant(Method::nonvirtual_vtable_index) \ |
575 | declare_constant(Method::invalid_vtable_index) \ |
576 | \ |
577 | declare_constant(MultiBranchData::per_case_cell_count) \ |
578 | \ |
579 | declare_constant(ReceiverTypeData::nonprofiled_count_off_set) \ |
580 | declare_constant(ReceiverTypeData::receiver_type_row_cell_count) \ |
581 | declare_constant(ReceiverTypeData::receiver0_offset) \ |
582 | declare_constant(ReceiverTypeData::count0_offset) \ |
583 | \ |
584 | declare_constant(vmIntrinsics::_invokeBasic) \ |
585 | declare_constant(vmIntrinsics::_linkToVirtual) \ |
586 | declare_constant(vmIntrinsics::_linkToStatic) \ |
587 | declare_constant(vmIntrinsics::_linkToSpecial) \ |
588 | declare_constant(vmIntrinsics::_linkToInterface) \ |
589 | \ |
590 | declare_constant(vmSymbols::FIRST_SID) \ |
591 | declare_constant(vmSymbols::SID_LIMIT) \ |
592 | |
593 | #define VM_LONG_CONSTANTS(declare_constant, declare_preprocessor_constant) \ |
594 | declare_constant(InvocationCounter::count_increment) \ |
595 | declare_constant(InvocationCounter::count_shift) \ |
596 | \ |
597 | declare_constant(markOopDesc::hash_shift) \ |
598 | \ |
599 | declare_constant(markOopDesc::biased_lock_mask_in_place) \ |
600 | declare_constant(markOopDesc::age_mask_in_place) \ |
601 | declare_constant(markOopDesc::epoch_mask_in_place) \ |
602 | declare_constant(markOopDesc::hash_mask) \ |
603 | declare_constant(markOopDesc::hash_mask_in_place) \ |
604 | \ |
605 | declare_constant(markOopDesc::unlocked_value) \ |
606 | declare_constant(markOopDesc::biased_lock_pattern) \ |
607 | \ |
608 | declare_constant(markOopDesc::no_hash_in_place) \ |
609 | declare_constant(markOopDesc::no_lock_in_place) \ |
610 | |
611 | #define VM_ADDRESSES(declare_address, declare_preprocessor_address, declare_function) \ |
612 | declare_function(SharedRuntime::register_finalizer) \ |
613 | declare_function(SharedRuntime::exception_handler_for_return_address) \ |
614 | declare_function(SharedRuntime::OSR_migration_end) \ |
615 | declare_function(SharedRuntime::enable_stack_reserved_zone) \ |
616 | declare_function(SharedRuntime::frem) \ |
617 | declare_function(SharedRuntime::drem) \ |
618 | \ |
619 | declare_function(os::dll_load) \ |
620 | declare_function(os::dll_lookup) \ |
621 | declare_function(os::javaTimeMillis) \ |
622 | declare_function(os::javaTimeNanos) \ |
623 | \ |
624 | declare_function(Deoptimization::fetch_unroll_info) \ |
625 | declare_function(Deoptimization::uncommon_trap) \ |
626 | declare_function(Deoptimization::unpack_frames) \ |
627 | \ |
628 | declare_function(JVMCIRuntime::new_instance) \ |
629 | declare_function(JVMCIRuntime::new_array) \ |
630 | declare_function(JVMCIRuntime::new_multi_array) \ |
631 | declare_function(JVMCIRuntime::dynamic_new_array) \ |
632 | declare_function(JVMCIRuntime::dynamic_new_instance) \ |
633 | \ |
634 | declare_function(JVMCIRuntime::new_instance_or_null) \ |
635 | declare_function(JVMCIRuntime::new_array_or_null) \ |
636 | declare_function(JVMCIRuntime::new_multi_array_or_null) \ |
637 | declare_function(JVMCIRuntime::dynamic_new_array_or_null) \ |
638 | declare_function(JVMCIRuntime::dynamic_new_instance_or_null) \ |
639 | \ |
640 | declare_function(JVMCIRuntime::thread_is_interrupted) \ |
641 | declare_function(JVMCIRuntime::vm_message) \ |
642 | declare_function(JVMCIRuntime::identity_hash_code) \ |
643 | declare_function(JVMCIRuntime::exception_handler_for_pc) \ |
644 | declare_function(JVMCIRuntime::monitorenter) \ |
645 | declare_function(JVMCIRuntime::monitorexit) \ |
646 | declare_function(JVMCIRuntime::object_notify) \ |
647 | declare_function(JVMCIRuntime::object_notifyAll) \ |
648 | declare_function(JVMCIRuntime::throw_and_post_jvmti_exception) \ |
649 | declare_function(JVMCIRuntime::throw_klass_external_name_exception) \ |
650 | declare_function(JVMCIRuntime::throw_class_cast_exception) \ |
651 | declare_function(JVMCIRuntime::log_primitive) \ |
652 | declare_function(JVMCIRuntime::log_object) \ |
653 | declare_function(JVMCIRuntime::log_printf) \ |
654 | declare_function(JVMCIRuntime::vm_error) \ |
655 | declare_function(JVMCIRuntime::load_and_clear_exception) \ |
656 | G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_pre)) \ |
657 | G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_post)) \ |
658 | declare_function(JVMCIRuntime::validate_object) \ |
659 | \ |
660 | declare_function(JVMCIRuntime::test_deoptimize_call_int) |
661 | |
662 | |
663 | #if INCLUDE_G1GC |
664 | |
665 | #define VM_STRUCTS_JVMCI_G1GC(nonstatic_field, static_field) \ |
666 | static_field(HeapRegion, LogOfHRGrainBytes, int) |
667 | |
668 | #define VM_INT_CONSTANTS_JVMCI_G1GC(declare_constant, declare_constant_with_value, declare_preprocessor_constant) \ |
669 | declare_constant_with_value("G1CardTable::g1_young_gen", G1CardTable::g1_young_card_val()) \ |
670 | declare_constant_with_value("G1ThreadLocalData::satb_mark_queue_active_offset", in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset())) \ |
671 | declare_constant_with_value("G1ThreadLocalData::satb_mark_queue_index_offset", in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset())) \ |
672 | declare_constant_with_value("G1ThreadLocalData::satb_mark_queue_buffer_offset", in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset())) \ |
673 | declare_constant_with_value("G1ThreadLocalData::dirty_card_queue_index_offset", in_bytes(G1ThreadLocalData::dirty_card_queue_index_offset())) \ |
674 | declare_constant_with_value("G1ThreadLocalData::dirty_card_queue_buffer_offset", in_bytes(G1ThreadLocalData::dirty_card_queue_buffer_offset())) |
675 | |
676 | #endif // INCLUDE_G1GC |
677 | |
678 | |
679 | #ifdef LINUX |
680 | |
681 | #define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function) \ |
682 | declare_preprocessor_address("RTLD_DEFAULT", RTLD_DEFAULT) |
683 | |
684 | #endif |
685 | |
686 | |
687 | #ifdef BSD |
688 | |
689 | #define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function) \ |
690 | declare_preprocessor_address("RTLD_DEFAULT", RTLD_DEFAULT) |
691 | |
692 | #endif |
693 | |
694 | // AARCH64 is defined in closed port, too. TARGET_ARCH_aarch64 is not. |
695 | #ifdef TARGET_ARCH_aarch64 |
696 | |
697 | #define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \ |
698 | volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*) |
699 | |
700 | #define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \ |
701 | declare_constant(VM_Version::CPU_FP) \ |
702 | declare_constant(VM_Version::CPU_ASIMD) \ |
703 | declare_constant(VM_Version::CPU_EVTSTRM) \ |
704 | declare_constant(VM_Version::CPU_AES) \ |
705 | declare_constant(VM_Version::CPU_PMULL) \ |
706 | declare_constant(VM_Version::CPU_SHA1) \ |
707 | declare_constant(VM_Version::CPU_SHA2) \ |
708 | declare_constant(VM_Version::CPU_CRC32) \ |
709 | declare_constant(VM_Version::CPU_LSE) \ |
710 | declare_constant(VM_Version::CPU_STXR_PREFETCH) \ |
711 | declare_constant(VM_Version::CPU_A53MAC) \ |
712 | declare_constant(VM_Version::CPU_DMB_ATOMICS) |
713 | |
714 | #endif |
715 | |
716 | |
717 | #ifdef X86 |
718 | |
719 | #define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \ |
720 | volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*) |
721 | |
722 | #define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \ |
723 | LP64_ONLY(declare_constant(frame::arg_reg_save_area_bytes)) \ |
724 | declare_constant(frame::interpreter_frame_sender_sp_offset) \ |
725 | declare_constant(frame::interpreter_frame_last_sp_offset) \ |
726 | declare_constant(VM_Version::CPU_CX8) \ |
727 | declare_constant(VM_Version::CPU_CMOV) \ |
728 | declare_constant(VM_Version::CPU_FXSR) \ |
729 | declare_constant(VM_Version::CPU_HT) \ |
730 | declare_constant(VM_Version::CPU_MMX) \ |
731 | declare_constant(VM_Version::CPU_3DNOW_PREFETCH) \ |
732 | declare_constant(VM_Version::CPU_SSE) \ |
733 | declare_constant(VM_Version::CPU_SSE2) \ |
734 | declare_constant(VM_Version::CPU_SSE3) \ |
735 | declare_constant(VM_Version::CPU_SSSE3) \ |
736 | declare_constant(VM_Version::CPU_SSE4A) \ |
737 | declare_constant(VM_Version::CPU_SSE4_1) \ |
738 | declare_constant(VM_Version::CPU_SSE4_2) \ |
739 | declare_constant(VM_Version::CPU_POPCNT) \ |
740 | declare_constant(VM_Version::CPU_LZCNT) \ |
741 | declare_constant(VM_Version::CPU_TSC) \ |
742 | declare_constant(VM_Version::CPU_TSCINV) \ |
743 | declare_constant(VM_Version::CPU_AVX) \ |
744 | declare_constant(VM_Version::CPU_AVX2) \ |
745 | declare_constant(VM_Version::CPU_AES) \ |
746 | declare_constant(VM_Version::CPU_ERMS) \ |
747 | declare_constant(VM_Version::CPU_CLMUL) \ |
748 | declare_constant(VM_Version::CPU_BMI1) \ |
749 | declare_constant(VM_Version::CPU_BMI2) \ |
750 | declare_constant(VM_Version::CPU_RTM) \ |
751 | declare_constant(VM_Version::CPU_ADX) \ |
752 | declare_constant(VM_Version::CPU_AVX512F) \ |
753 | declare_constant(VM_Version::CPU_AVX512DQ) \ |
754 | declare_constant(VM_Version::CPU_AVX512PF) \ |
755 | declare_constant(VM_Version::CPU_AVX512ER) \ |
756 | declare_constant(VM_Version::CPU_AVX512CD) |
757 | |
758 | #define VM_LONG_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \ |
759 | declare_preprocessor_constant("VM_Version::CPU_AVX512BW", CPU_AVX512BW) \ |
760 | declare_preprocessor_constant("VM_Version::CPU_AVX512VL", CPU_AVX512VL) \ |
761 | declare_preprocessor_constant("VM_Version::CPU_SHA", CPU_SHA) \ |
762 | declare_preprocessor_constant("VM_Version::CPU_FMA", CPU_FMA) \ |
763 | declare_preprocessor_constant("VM_Version::CPU_VZEROUPPER", CPU_VZEROUPPER) |
764 | |
765 | #endif |
766 | |
767 | |
768 | #ifdef SPARC |
769 | |
770 | #define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \ |
771 | volatile_nonstatic_field(JavaFrameAnchor, _flags, int) |
772 | |
773 | #define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \ |
774 | declare_constant(VM_Version::ISA_V9) \ |
775 | declare_constant(VM_Version::ISA_POPC) \ |
776 | declare_constant(VM_Version::ISA_VIS1) \ |
777 | declare_constant(VM_Version::ISA_VIS2) \ |
778 | declare_constant(VM_Version::ISA_BLK_INIT) \ |
779 | declare_constant(VM_Version::ISA_FMAF) \ |
780 | declare_constant(VM_Version::ISA_VIS3) \ |
781 | declare_constant(VM_Version::ISA_HPC) \ |
782 | declare_constant(VM_Version::ISA_IMA) \ |
783 | declare_constant(VM_Version::ISA_AES) \ |
784 | declare_constant(VM_Version::ISA_DES) \ |
785 | declare_constant(VM_Version::ISA_KASUMI) \ |
786 | declare_constant(VM_Version::ISA_CAMELLIA) \ |
787 | declare_constant(VM_Version::ISA_MD5) \ |
788 | declare_constant(VM_Version::ISA_SHA1) \ |
789 | declare_constant(VM_Version::ISA_SHA256) \ |
790 | declare_constant(VM_Version::ISA_SHA512) \ |
791 | declare_constant(VM_Version::ISA_MPMUL) \ |
792 | declare_constant(VM_Version::ISA_MONT) \ |
793 | declare_constant(VM_Version::ISA_PAUSE) \ |
794 | declare_constant(VM_Version::ISA_CBCOND) \ |
795 | declare_constant(VM_Version::ISA_CRC32C) \ |
796 | declare_constant(VM_Version::ISA_VIS3B) \ |
797 | declare_constant(VM_Version::ISA_ADI) \ |
798 | declare_constant(VM_Version::ISA_SPARC5) \ |
799 | declare_constant(VM_Version::ISA_MWAIT) \ |
800 | declare_constant(VM_Version::ISA_XMPMUL) \ |
801 | declare_constant(VM_Version::ISA_XMONT) \ |
802 | declare_constant(VM_Version::ISA_PAUSE_NSEC) \ |
803 | declare_constant(VM_Version::ISA_VAMASK) \ |
804 | declare_constant(VM_Version::ISA_SPARC6) \ |
805 | declare_constant(VM_Version::ISA_DICTUNP) \ |
806 | declare_constant(VM_Version::ISA_FPCMPSHL) \ |
807 | declare_constant(VM_Version::ISA_RLE) \ |
808 | declare_constant(VM_Version::ISA_SHA3) \ |
809 | declare_constant(VM_Version::ISA_VIS3C) \ |
810 | declare_constant(VM_Version::ISA_SPARC5B) \ |
811 | declare_constant(VM_Version::ISA_MME) \ |
812 | declare_constant(VM_Version::CPU_FAST_IDIV) \ |
813 | declare_constant(VM_Version::CPU_FAST_RDPC) \ |
814 | declare_constant(VM_Version::CPU_FAST_BIS) \ |
815 | declare_constant(VM_Version::CPU_FAST_LD) \ |
816 | declare_constant(VM_Version::CPU_FAST_CMOVE) \ |
817 | declare_constant(VM_Version::CPU_FAST_IND_BR) \ |
818 | declare_constant(VM_Version::CPU_BLK_ZEROING) |
819 | #endif |
820 | |
821 | |
822 | /* |
823 | * Dummy defines for architectures that don't use these. |
824 | */ |
825 | #ifndef VM_STRUCTS_CPU |
826 | #define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) |
827 | #endif |
828 | |
829 | #ifndef VM_TYPES_CPU |
830 | #define VM_TYPES_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) |
831 | #endif |
832 | |
833 | #ifndef VM_INT_CONSTANTS_CPU |
834 | #define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) |
835 | #endif |
836 | |
837 | #ifndef VM_LONG_CONSTANTS_CPU |
838 | #define VM_LONG_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) |
839 | #endif |
840 | |
841 | #ifndef VM_STRUCTS_OS |
842 | #define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) |
843 | #endif |
844 | |
845 | #ifndef VM_TYPES_OS |
846 | #define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) |
847 | #endif |
848 | |
849 | #ifndef VM_INT_CONSTANTS_OS |
850 | #define VM_INT_CONSTANTS_OS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) |
851 | #endif |
852 | |
853 | #ifndef VM_LONG_CONSTANTS_OS |
854 | #define VM_LONG_CONSTANTS_OS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) |
855 | #endif |
856 | |
857 | #ifndef VM_ADDRESSES_OS |
858 | #define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function) |
859 | #endif |
860 | |
861 | |
862 | // |
863 | // Instantiation of VMStructEntries, VMTypeEntries and VMIntConstantEntries |
864 | // |
865 | |
866 | // These initializers are allowed to access private fields in classes |
867 | // as long as class VMStructs is a friend |
868 | VMStructEntry JVMCIVMStructs::localHotSpotVMStructs[] = { |
869 | VM_STRUCTS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
870 | GENERATE_STATIC_VM_STRUCT_ENTRY, |
871 | GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, |
872 | GENERATE_NONSTATIC_VM_STRUCT_ENTRY) |
873 | |
874 | VM_STRUCTS_OS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
875 | GENERATE_STATIC_VM_STRUCT_ENTRY, |
876 | GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, |
877 | GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
878 | GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
879 | GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, |
880 | GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, |
881 | GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY) |
882 | |
883 | VM_STRUCTS_CPU(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
884 | GENERATE_STATIC_VM_STRUCT_ENTRY, |
885 | GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY, |
886 | GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
887 | GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY, |
888 | GENERATE_C2_NONSTATIC_VM_STRUCT_ENTRY, |
889 | GENERATE_C1_UNCHECKED_STATIC_VM_STRUCT_ENTRY, |
890 | GENERATE_C2_UNCHECKED_STATIC_VM_STRUCT_ENTRY) |
891 | |
892 | #if INCLUDE_G1GC |
893 | VM_STRUCTS_JVMCI_G1GC(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, |
894 | GENERATE_STATIC_VM_STRUCT_ENTRY) |
895 | #endif |
896 | |
897 | GENERATE_VM_STRUCT_LAST_ENTRY() |
898 | }; |
899 | |
900 | VMTypeEntry JVMCIVMStructs::localHotSpotVMTypes[] = { |
901 | VM_TYPES(GENERATE_VM_TYPE_ENTRY, |
902 | GENERATE_TOPLEVEL_VM_TYPE_ENTRY, |
903 | GENERATE_INTEGER_VM_TYPE_ENTRY, |
904 | GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY) |
905 | |
906 | VM_TYPES_OS(GENERATE_VM_TYPE_ENTRY, |
907 | GENERATE_TOPLEVEL_VM_TYPE_ENTRY, |
908 | GENERATE_OOP_VM_TYPE_ENTRY, |
909 | GENERATE_INTEGER_VM_TYPE_ENTRY, |
910 | GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, |
911 | GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, |
912 | GENERATE_C2_VM_TYPE_ENTRY, |
913 | GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY) |
914 | |
915 | VM_TYPES_CPU(GENERATE_VM_TYPE_ENTRY, |
916 | GENERATE_TOPLEVEL_VM_TYPE_ENTRY, |
917 | GENERATE_OOP_VM_TYPE_ENTRY, |
918 | GENERATE_INTEGER_VM_TYPE_ENTRY, |
919 | GENERATE_UNSIGNED_INTEGER_VM_TYPE_ENTRY, |
920 | GENERATE_C1_TOPLEVEL_VM_TYPE_ENTRY, |
921 | GENERATE_C2_VM_TYPE_ENTRY, |
922 | GENERATE_C2_TOPLEVEL_VM_TYPE_ENTRY) |
923 | |
924 | GENERATE_VM_TYPE_LAST_ENTRY() |
925 | }; |
926 | |
927 | VMIntConstantEntry JVMCIVMStructs::localHotSpotVMIntConstants[] = { |
928 | VM_INT_CONSTANTS(GENERATE_VM_INT_CONSTANT_ENTRY, |
929 | GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, |
930 | GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
931 | |
932 | VM_INT_CONSTANTS_OS(GENERATE_VM_INT_CONSTANT_ENTRY, |
933 | GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, |
934 | GENERATE_C1_VM_INT_CONSTANT_ENTRY, |
935 | GENERATE_C2_VM_INT_CONSTANT_ENTRY, |
936 | GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
937 | |
938 | VM_INT_CONSTANTS_CPU(GENERATE_VM_INT_CONSTANT_ENTRY, |
939 | GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY, |
940 | GENERATE_C1_VM_INT_CONSTANT_ENTRY, |
941 | GENERATE_C2_VM_INT_CONSTANT_ENTRY, |
942 | GENERATE_C2_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
943 | |
944 | #if INCLUDE_G1GC |
945 | VM_INT_CONSTANTS_JVMCI_G1GC(GENERATE_VM_INT_CONSTANT_ENTRY, |
946 | GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, |
947 | GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) |
948 | #endif |
949 | |
950 | GENERATE_VM_INT_CONSTANT_LAST_ENTRY() |
951 | }; |
952 | |
953 | VMLongConstantEntry JVMCIVMStructs::localHotSpotVMLongConstants[] = { |
954 | VM_LONG_CONSTANTS(GENERATE_VM_LONG_CONSTANT_ENTRY, |
955 | GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY) |
956 | |
957 | VM_LONG_CONSTANTS_OS(GENERATE_VM_LONG_CONSTANT_ENTRY, |
958 | GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, |
959 | GENERATE_C1_VM_LONG_CONSTANT_ENTRY, |
960 | GENERATE_C2_VM_LONG_CONSTANT_ENTRY, |
961 | GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY) |
962 | |
963 | VM_LONG_CONSTANTS_CPU(GENERATE_VM_LONG_CONSTANT_ENTRY, |
964 | GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY, |
965 | GENERATE_C1_VM_LONG_CONSTANT_ENTRY, |
966 | GENERATE_C2_VM_LONG_CONSTANT_ENTRY, |
967 | GENERATE_C2_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY) |
968 | |
969 | GENERATE_VM_LONG_CONSTANT_LAST_ENTRY() |
970 | }; |
971 | |
972 | VMAddressEntry JVMCIVMStructs::localHotSpotVMAddresses[] = { |
973 | VM_ADDRESSES(GENERATE_VM_ADDRESS_ENTRY, |
974 | GENERATE_PREPROCESSOR_VM_ADDRESS_ENTRY, |
975 | GENERATE_VM_FUNCTION_ENTRY) |
976 | VM_ADDRESSES_COMPILER_RUNTIME(GENERATE_VM_ADDRESS_ENTRY, |
977 | GENERATE_PREPROCESSOR_VM_ADDRESS_ENTRY, |
978 | GENERATE_VM_FUNCTION_ENTRY) |
979 | VM_ADDRESSES_OS(GENERATE_VM_ADDRESS_ENTRY, |
980 | GENERATE_PREPROCESSOR_VM_ADDRESS_ENTRY, |
981 | GENERATE_VM_FUNCTION_ENTRY) |
982 | |
983 | GENERATE_VM_ADDRESS_LAST_ENTRY() |
984 | }; |
985 | |
986 | int JVMCIVMStructs::localHotSpotVMStructs_count() { |
987 | // Ignore sentinel entry at the end |
988 | return (sizeof(localHotSpotVMStructs) / sizeof(VMStructEntry)) - 1; |
989 | } |
990 | int JVMCIVMStructs::localHotSpotVMTypes_count() { |
991 | // Ignore sentinel entry at the end |
992 | return (sizeof(localHotSpotVMTypes) / sizeof(VMTypeEntry)) - 1; |
993 | } |
994 | int JVMCIVMStructs::localHotSpotVMIntConstants_count() { |
995 | // Ignore sentinel entry at the end |
996 | return (sizeof(localHotSpotVMIntConstants) / sizeof(VMIntConstantEntry)) - 1; |
997 | } |
998 | int JVMCIVMStructs::localHotSpotVMLongConstants_count() { |
999 | // Ignore sentinel entry at the end |
1000 | return (sizeof(localHotSpotVMLongConstants) / sizeof(VMLongConstantEntry)) - 1; |
1001 | } |
1002 | int JVMCIVMStructs::localHotSpotVMAddresses_count() { |
1003 | // Ignore sentinel entry at the end |
1004 | return (sizeof(localHotSpotVMAddresses) / sizeof(VMAddressEntry)) - 1; |
1005 | } |
1006 | |
1007 | extern "C" { |
1008 | JNIEXPORT VMStructEntry* jvmciHotSpotVMStructs = JVMCIVMStructs::localHotSpotVMStructs; |
1009 | JNIEXPORT VMTypeEntry* jvmciHotSpotVMTypes = JVMCIVMStructs::localHotSpotVMTypes; |
1010 | JNIEXPORT VMIntConstantEntry* jvmciHotSpotVMIntConstants = JVMCIVMStructs::localHotSpotVMIntConstants; |
1011 | JNIEXPORT VMLongConstantEntry* jvmciHotSpotVMLongConstants = JVMCIVMStructs::localHotSpotVMLongConstants; |
1012 | JNIEXPORT VMAddressEntry* jvmciHotSpotVMAddresses = JVMCIVMStructs::localHotSpotVMAddresses; |
1013 | } |
1014 | |