48 * static void set_index(jobject obj, jint x);
49 * };
50 *
51 */
52
53 #define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, typeArrayOop_field, objArrayOop_field, static_oop_field, static_objArrayOop_field, static_int_field, static_boolean_field) \
54 start_class(Architecture) \
55 oop_field(Architecture, wordKind, "Ljdk/vm/ci/meta/PlatformKind;") \
56 end_class \
57 start_class(TargetDescription) \
58 oop_field(TargetDescription, arch, "Ljdk/vm/ci/code/Architecture;") \
59 end_class \
60 start_class(HotSpotResolvedObjectTypeImpl) \
61 oop_field(HotSpotResolvedObjectTypeImpl, javaClass, "Ljava/lang/Class;") \
62 end_class \
63 start_class(HotSpotResolvedJavaMethodImpl) \
64 long_field(HotSpotResolvedJavaMethodImpl, metaspaceMethod) \
65 end_class \
66 start_class(InstalledCode) \
67 long_field(InstalledCode, address) \
68 long_field(InstalledCode, version) \
69 oop_field(InstalledCode, name, "Ljava/lang/String;") \
70 end_class \
71 start_class(HotSpotInstalledCode) \
72 int_field(HotSpotInstalledCode, size) \
73 long_field(HotSpotInstalledCode, codeStart) \
74 int_field(HotSpotInstalledCode, codeSize) \
75 end_class \
76 start_class(HotSpotNmethod) \
77 boolean_field(HotSpotNmethod, isDefault) \
78 end_class \
79 start_class(HotSpotCompiledCode) \
80 oop_field(HotSpotCompiledCode, name, "Ljava/lang/String;") \
81 objArrayOop_field(HotSpotCompiledCode, sites, "[Ljdk/vm/ci/code/CompilationResult$Site;") \
82 objArrayOop_field(HotSpotCompiledCode, exceptionHandlers, "[Ljdk/vm/ci/code/CompilationResult$ExceptionHandler;") \
83 objArrayOop_field(HotSpotCompiledCode, comments, "[Ljdk/vm/ci/hotspot/HotSpotCompiledCode$Comment;") \
84 objArrayOop_field(HotSpotCompiledCode, assumptions, "[Ljdk/vm/ci/meta/Assumptions$Assumption;") \
85 typeArrayOop_field(HotSpotCompiledCode, targetCode, "[B") \
86 int_field(HotSpotCompiledCode, targetCodeSize) \
87 typeArrayOop_field(HotSpotCompiledCode, dataSection, "[B") \
198 int_field(BytecodePosition, bci) \
199 end_class \
200 start_class(JavaConstant) \
201 end_class \
202 start_class(PrimitiveConstant) \
203 oop_field(PrimitiveConstant, kind, "Ljdk/vm/ci/meta/JavaKind;") \
204 long_field(PrimitiveConstant, primitive) \
205 end_class \
206 start_class(RawConstant) \
207 long_field(RawConstant, primitive) \
208 end_class \
209 start_class(NullConstant) \
210 end_class \
211 start_class(HotSpotCompressedNullConstant) \
212 end_class \
213 start_class(HotSpotObjectConstantImpl) \
214 oop_field(HotSpotObjectConstantImpl, object, "Ljava/lang/Object;") \
215 boolean_field(HotSpotObjectConstantImpl, compressed) \
216 end_class \
217 start_class(HotSpotMetaspaceConstantImpl) \
218 long_field(HotSpotMetaspaceConstantImpl, primitive) \
219 oop_field(HotSpotMetaspaceConstantImpl, metaspaceObject, "Ljava/lang/Object;") \
220 boolean_field(HotSpotMetaspaceConstantImpl, compressed) \
221 end_class \
222 start_class(HotSpotSentinelConstant) \
223 end_class \
224 start_class(JavaKind) \
225 char_field(JavaKind, typeChar) \
226 static_oop_field(JavaKind, Boolean, "Ljdk/vm/ci/meta/JavaKind;"); \
227 static_oop_field(JavaKind, Byte, "Ljdk/vm/ci/meta/JavaKind;"); \
228 static_oop_field(JavaKind, Char, "Ljdk/vm/ci/meta/JavaKind;"); \
229 static_oop_field(JavaKind, Short, "Ljdk/vm/ci/meta/JavaKind;"); \
230 static_oop_field(JavaKind, Int, "Ljdk/vm/ci/meta/JavaKind;"); \
231 static_oop_field(JavaKind, Long, "Ljdk/vm/ci/meta/JavaKind;"); \
232 end_class \
233 start_class(LIRKind) \
234 oop_field(LIRKind, platformKind, "Ljdk/vm/ci/meta/PlatformKind;") \
235 int_field(LIRKind, referenceMask) \
236 end_class \
237 start_class(Value) \
238 oop_field(Value, lirKind, "Ljdk/vm/ci/meta/LIRKind;") \
239 static_oop_field(Value, ILLEGAL, "Ljdk/vm/ci/meta/AllocatableValue;"); \
244 start_class(code_Location) \
245 oop_field(code_Location, reg, "Ljdk/vm/ci/code/Register;") \
246 int_field(code_Location, offset) \
247 end_class \
248 start_class(code_Register) \
249 int_field(code_Register, number) \
250 int_field(code_Register, encoding) \
251 end_class \
252 start_class(StackSlot) \
253 int_field(StackSlot, offset) \
254 boolean_field(StackSlot, addFrameSize) \
255 end_class \
256 start_class(VirtualObject) \
257 int_field(VirtualObject, id) \
258 oop_field(VirtualObject, type, "Ljdk/vm/ci/meta/ResolvedJavaType;") \
259 objArrayOop_field(VirtualObject, values, "[Ljdk/vm/ci/meta/JavaValue;") \
260 objArrayOop_field(VirtualObject, slotKinds, "[Ljdk/vm/ci/meta/JavaKind;") \
261 end_class \
262 start_class(StackLockValue) \
263 oop_field(StackLockValue, owner, "Ljdk/vm/ci/meta/JavaValue;") \
264 oop_field(StackLockValue, slot, "Ljdk/vm/ci/code/StackSlotValue;") \
265 boolean_field(StackLockValue, eliminated) \
266 end_class \
267 start_class(SpeculationLog) \
268 oop_field(SpeculationLog, lastFailed, "Ljava/lang/Object;") \
269 end_class \
270 start_class(HotSpotStackFrameReference) \
271 oop_field(HotSpotStackFrameReference, compilerToVM, "Ljdk/vm/ci/hotspot/CompilerToVM;") \
272 long_field(HotSpotStackFrameReference, stackPointer) \
273 int_field(HotSpotStackFrameReference, frameNumber) \
274 int_field(HotSpotStackFrameReference, bci) \
275 oop_field(HotSpotStackFrameReference, method, "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethod;") \
276 objArrayOop_field(HotSpotStackFrameReference, locals, "[Ljava/lang/Object;") \
277 typeArrayOop_field(HotSpotStackFrameReference, localIsVirtual, "[Z") \
278 end_class \
279 start_class(HotSpotMetaData) \
280 typeArrayOop_field(HotSpotMetaData, pcDescBytes, "[B") \
281 typeArrayOop_field(HotSpotMetaData, scopesDescBytes, "[B") \
282 typeArrayOop_field(HotSpotMetaData, relocBytes, "[B") \
283 typeArrayOop_field(HotSpotMetaData, exceptionBytes, "[B") \
284 typeArrayOop_field(HotSpotMetaData, oopMaps, "[B") \
285 objArrayOop_field(HotSpotMetaData, metadata, "[Ljava/lang/String;") \
286 end_class \
287 start_class(HotSpotOopMap) \
288 int_field(HotSpotOopMap, offset) \
289 int_field(HotSpotOopMap, count) \
290 typeArrayOop_field(HotSpotOopMap, data, "[B") \
291 end_class \
292 start_class(HotSpotConstantPool) \
293 long_field(HotSpotConstantPool, metaspaceConstantPool) \
294 end_class \
295 /* end*/
296
297
298 #define START_CLASS(name) \
299 class name : AllStatic { \
300 private: \
301 friend class JVMCICompiler; \
302 static void check(oop obj, const char* field_name, int offset) { \
303 assert(obj != NULL, "NULL field access of %s.%s", #name, field_name); \
304 assert(obj->is_a(SystemDictionary::name##_klass()), "wrong class, " #name " expected, found %s", obj->klass()->external_name()); \
305 assert(offset != 0, "must be valid offset"); \
306 } \
307 static void compute_offsets(); \
308 public: \
309 static InstanceKlass* klass() { return SystemDictionary::name##_klass() == NULL ? NULL : InstanceKlass::cast(SystemDictionary::name##_klass()); }
310
311 #define END_CLASS };
312
313 #define FIELD(name, type, accessor, cast) \
314 static int _##name##_offset; \
315 static type name(oop obj) { check(obj, #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \
316 static type name(Handle& obj) { check(obj(), #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \
317 static type name(jobject obj) { check(JNIHandles::resolve(obj), #name, _##name##_offset); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); } \
|
48 * static void set_index(jobject obj, jint x);
49 * };
50 *
51 */
52
53 #define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, typeArrayOop_field, objArrayOop_field, static_oop_field, static_objArrayOop_field, static_int_field, static_boolean_field) \
54 start_class(Architecture) \
55 oop_field(Architecture, wordKind, "Ljdk/vm/ci/meta/PlatformKind;") \
56 end_class \
57 start_class(TargetDescription) \
58 oop_field(TargetDescription, arch, "Ljdk/vm/ci/code/Architecture;") \
59 end_class \
60 start_class(HotSpotResolvedObjectTypeImpl) \
61 oop_field(HotSpotResolvedObjectTypeImpl, javaClass, "Ljava/lang/Class;") \
62 end_class \
63 start_class(HotSpotResolvedJavaMethodImpl) \
64 long_field(HotSpotResolvedJavaMethodImpl, metaspaceMethod) \
65 end_class \
66 start_class(InstalledCode) \
67 long_field(InstalledCode, address) \
68 long_field(InstalledCode, entryPoint) \
69 long_field(InstalledCode, version) \
70 oop_field(InstalledCode, name, "Ljava/lang/String;") \
71 end_class \
72 start_class(HotSpotInstalledCode) \
73 int_field(HotSpotInstalledCode, size) \
74 long_field(HotSpotInstalledCode, codeStart) \
75 int_field(HotSpotInstalledCode, codeSize) \
76 end_class \
77 start_class(HotSpotNmethod) \
78 boolean_field(HotSpotNmethod, isDefault) \
79 end_class \
80 start_class(HotSpotCompiledCode) \
81 oop_field(HotSpotCompiledCode, name, "Ljava/lang/String;") \
82 objArrayOop_field(HotSpotCompiledCode, sites, "[Ljdk/vm/ci/code/CompilationResult$Site;") \
83 objArrayOop_field(HotSpotCompiledCode, exceptionHandlers, "[Ljdk/vm/ci/code/CompilationResult$ExceptionHandler;") \
84 objArrayOop_field(HotSpotCompiledCode, comments, "[Ljdk/vm/ci/hotspot/HotSpotCompiledCode$Comment;") \
85 objArrayOop_field(HotSpotCompiledCode, assumptions, "[Ljdk/vm/ci/meta/Assumptions$Assumption;") \
86 typeArrayOop_field(HotSpotCompiledCode, targetCode, "[B") \
87 int_field(HotSpotCompiledCode, targetCodeSize) \
88 typeArrayOop_field(HotSpotCompiledCode, dataSection, "[B") \
199 int_field(BytecodePosition, bci) \
200 end_class \
201 start_class(JavaConstant) \
202 end_class \
203 start_class(PrimitiveConstant) \
204 oop_field(PrimitiveConstant, kind, "Ljdk/vm/ci/meta/JavaKind;") \
205 long_field(PrimitiveConstant, primitive) \
206 end_class \
207 start_class(RawConstant) \
208 long_field(RawConstant, primitive) \
209 end_class \
210 start_class(NullConstant) \
211 end_class \
212 start_class(HotSpotCompressedNullConstant) \
213 end_class \
214 start_class(HotSpotObjectConstantImpl) \
215 oop_field(HotSpotObjectConstantImpl, object, "Ljava/lang/Object;") \
216 boolean_field(HotSpotObjectConstantImpl, compressed) \
217 end_class \
218 start_class(HotSpotMetaspaceConstantImpl) \
219 oop_field(HotSpotMetaspaceConstantImpl, metaspaceObject, "Ljdk/vm/ci/hotspot/MetaspaceWrapperObject;") \
220 boolean_field(HotSpotMetaspaceConstantImpl, compressed) \
221 end_class \
222 start_class(HotSpotSentinelConstant) \
223 end_class \
224 start_class(JavaKind) \
225 char_field(JavaKind, typeChar) \
226 static_oop_field(JavaKind, Boolean, "Ljdk/vm/ci/meta/JavaKind;"); \
227 static_oop_field(JavaKind, Byte, "Ljdk/vm/ci/meta/JavaKind;"); \
228 static_oop_field(JavaKind, Char, "Ljdk/vm/ci/meta/JavaKind;"); \
229 static_oop_field(JavaKind, Short, "Ljdk/vm/ci/meta/JavaKind;"); \
230 static_oop_field(JavaKind, Int, "Ljdk/vm/ci/meta/JavaKind;"); \
231 static_oop_field(JavaKind, Long, "Ljdk/vm/ci/meta/JavaKind;"); \
232 end_class \
233 start_class(LIRKind) \
234 oop_field(LIRKind, platformKind, "Ljdk/vm/ci/meta/PlatformKind;") \
235 int_field(LIRKind, referenceMask) \
236 end_class \
237 start_class(Value) \
238 oop_field(Value, lirKind, "Ljdk/vm/ci/meta/LIRKind;") \
239 static_oop_field(Value, ILLEGAL, "Ljdk/vm/ci/meta/AllocatableValue;"); \
244 start_class(code_Location) \
245 oop_field(code_Location, reg, "Ljdk/vm/ci/code/Register;") \
246 int_field(code_Location, offset) \
247 end_class \
248 start_class(code_Register) \
249 int_field(code_Register, number) \
250 int_field(code_Register, encoding) \
251 end_class \
252 start_class(StackSlot) \
253 int_field(StackSlot, offset) \
254 boolean_field(StackSlot, addFrameSize) \
255 end_class \
256 start_class(VirtualObject) \
257 int_field(VirtualObject, id) \
258 oop_field(VirtualObject, type, "Ljdk/vm/ci/meta/ResolvedJavaType;") \
259 objArrayOop_field(VirtualObject, values, "[Ljdk/vm/ci/meta/JavaValue;") \
260 objArrayOop_field(VirtualObject, slotKinds, "[Ljdk/vm/ci/meta/JavaKind;") \
261 end_class \
262 start_class(StackLockValue) \
263 oop_field(StackLockValue, owner, "Ljdk/vm/ci/meta/JavaValue;") \
264 oop_field(StackLockValue, slot, "Ljdk/vm/ci/meta/AllocatableValue;") \
265 boolean_field(StackLockValue, eliminated) \
266 end_class \
267 start_class(HotSpotSpeculationLog) \
268 oop_field(HotSpotSpeculationLog, lastFailed, "Ljava/lang/Object;") \
269 end_class \
270 start_class(HotSpotStackFrameReference) \
271 oop_field(HotSpotStackFrameReference, compilerToVM, "Ljdk/vm/ci/hotspot/CompilerToVM;") \
272 long_field(HotSpotStackFrameReference, stackPointer) \
273 int_field(HotSpotStackFrameReference, frameNumber) \
274 int_field(HotSpotStackFrameReference, bci) \
275 oop_field(HotSpotStackFrameReference, method, "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethod;") \
276 objArrayOop_field(HotSpotStackFrameReference, locals, "[Ljava/lang/Object;") \
277 typeArrayOop_field(HotSpotStackFrameReference, localIsVirtual, "[Z") \
278 end_class \
279 start_class(HotSpotMetaData) \
280 typeArrayOop_field(HotSpotMetaData, pcDescBytes, "[B") \
281 typeArrayOop_field(HotSpotMetaData, scopesDescBytes, "[B") \
282 typeArrayOop_field(HotSpotMetaData, relocBytes, "[B") \
283 typeArrayOop_field(HotSpotMetaData, exceptionBytes, "[B") \
284 typeArrayOop_field(HotSpotMetaData, oopMaps, "[B") \
285 objArrayOop_field(HotSpotMetaData, metadata, "[Ljava/lang/String;") \
286 end_class \
287 start_class(HotSpotOopMap) \
288 int_field(HotSpotOopMap, offset) \
289 int_field(HotSpotOopMap, count) \
290 typeArrayOop_field(HotSpotOopMap, data, "[B") \
291 end_class \
292 start_class(HotSpotConstantPool) \
293 long_field(HotSpotConstantPool, metaspaceConstantPool) \
294 end_class \
295 start_class(HotSpotJVMCIRuntime) \
296 objArrayOop_field(HotSpotJVMCIRuntime, trivialPrefixes, "[Ljava/lang/String;") \
297 end_class \
298 /* end*/
299
300 #define START_CLASS(name) \
301 class name : AllStatic { \
302 private: \
303 friend class JVMCICompiler; \
304 static void check(oop obj, const char* field_name, int offset) { \
305 assert(obj != NULL, "NULL field access of %s.%s", #name, field_name); \
306 assert(obj->is_a(SystemDictionary::name##_klass()), "wrong class, " #name " expected, found %s", obj->klass()->external_name()); \
307 assert(offset != 0, "must be valid offset"); \
308 } \
309 static void compute_offsets(); \
310 public: \
311 static InstanceKlass* klass() { return SystemDictionary::name##_klass() == NULL ? NULL : InstanceKlass::cast(SystemDictionary::name##_klass()); }
312
313 #define END_CLASS };
314
315 #define FIELD(name, type, accessor, cast) \
316 static int _##name##_offset; \
317 static type name(oop obj) { check(obj, #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \
318 static type name(Handle& obj) { check(obj(), #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \
319 static type name(jobject obj) { check(JNIHandles::resolve(obj), #name, _##name##_offset); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); } \
|