Mercurial > hg > graal-jvmci-8
comparison src/share/vm/graal/graalJavaAccess.hpp @ 18172:c59612b9d110
Use arrayOop subclasses in graalJavaAccess
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Fri, 24 Oct 2014 12:45:27 -0700 |
parents | 9a804ec7f707 |
children | c2270ad35f57 |
comparison
equal
deleted
inserted
replaced
18171:9bb816169777 | 18172:c59612b9d110 |
---|---|
45 * static void set_index(jobject obj, jint x); | 45 * static void set_index(jobject obj, jint x); |
46 * }; | 46 * }; |
47 * | 47 * |
48 */ | 48 */ |
49 | 49 |
50 #define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, static_oop_field, static_int_field) \ | 50 #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_int_field) \ |
51 start_class(HotSpotResolvedObjectType) \ | 51 start_class(HotSpotResolvedObjectType) \ |
52 oop_field(HotSpotResolvedObjectType, javaClass, "Ljava/lang/Class;") \ | 52 oop_field(HotSpotResolvedObjectType, javaClass, "Ljava/lang/Class;") \ |
53 end_class \ | 53 end_class \ |
54 start_class(HotSpotResolvedJavaMethod) \ | 54 start_class(HotSpotResolvedJavaMethod) \ |
55 long_field(HotSpotResolvedJavaMethod, metaspaceMethod) \ | 55 long_field(HotSpotResolvedJavaMethod, metaspaceMethod) \ |
68 boolean_field(HotSpotNmethod, isDefault) \ | 68 boolean_field(HotSpotNmethod, isDefault) \ |
69 boolean_field(HotSpotNmethod, isExternal) \ | 69 boolean_field(HotSpotNmethod, isExternal) \ |
70 end_class \ | 70 end_class \ |
71 start_class(HotSpotCompiledCode) \ | 71 start_class(HotSpotCompiledCode) \ |
72 oop_field(HotSpotCompiledCode, comp, "Lcom/oracle/graal/api/code/CompilationResult;") \ | 72 oop_field(HotSpotCompiledCode, comp, "Lcom/oracle/graal/api/code/CompilationResult;") \ |
73 oop_field(HotSpotCompiledCode, sites, "[Lcom/oracle/graal/api/code/CompilationResult$Site;") \ | 73 objArrayOop_field(HotSpotCompiledCode, sites, "[Lcom/oracle/graal/api/code/CompilationResult$Site;") \ |
74 oop_field(HotSpotCompiledCode, exceptionHandlers, "[Lcom/oracle/graal/api/code/CompilationResult$ExceptionHandler;") \ | 74 objArrayOop_field(HotSpotCompiledCode, exceptionHandlers, "[Lcom/oracle/graal/api/code/CompilationResult$ExceptionHandler;") \ |
75 oop_field(HotSpotCompiledCode, comments, "[Lcom/oracle/graal/hotspot/HotSpotCompiledCode$Comment;") \ | 75 objArrayOop_field(HotSpotCompiledCode, comments, "[Lcom/oracle/graal/hotspot/HotSpotCompiledCode$Comment;") \ |
76 oop_field(HotSpotCompiledCode, dataSection, "Lcom/oracle/graal/hotspot/data/DataSection;") \ | 76 oop_field(HotSpotCompiledCode, dataSection, "Lcom/oracle/graal/hotspot/data/DataSection;") \ |
77 end_class \ | 77 end_class \ |
78 start_class(HotSpotCompiledCode_Comment) \ | 78 start_class(HotSpotCompiledCode_Comment) \ |
79 oop_field(HotSpotCompiledCode_Comment, text, "Ljava/lang/String;") \ | 79 oop_field(HotSpotCompiledCode_Comment, text, "Ljava/lang/String;") \ |
80 int_field(HotSpotCompiledCode_Comment, pcOffset) \ | 80 int_field(HotSpotCompiledCode_Comment, pcOffset) \ |
91 start_class(HotSpotForeignCallLinkage) \ | 91 start_class(HotSpotForeignCallLinkage) \ |
92 long_field(HotSpotForeignCallLinkage, address) \ | 92 long_field(HotSpotForeignCallLinkage, address) \ |
93 end_class \ | 93 end_class \ |
94 start_class(DataSection) \ | 94 start_class(DataSection) \ |
95 int_field(DataSection, sectionAlignment) \ | 95 int_field(DataSection, sectionAlignment) \ |
96 oop_field(DataSection, data, "[B") \ | 96 typeArrayOop_field(DataSection, data, "[B") \ |
97 oop_field(DataSection, patches, "[Lcom/oracle/graal/api/code/CompilationResult$DataPatch;") \ | 97 objArrayOop_field(DataSection, patches, "[Lcom/oracle/graal/api/code/CompilationResult$DataPatch;") \ |
98 end_class \ | 98 end_class \ |
99 start_class(DataSectionReference) \ | 99 start_class(DataSectionReference) \ |
100 int_field(DataSectionReference, offset) \ | 100 int_field(DataSectionReference, offset) \ |
101 end_class \ | 101 end_class \ |
102 start_class(MetaspaceData) \ | 102 start_class(MetaspaceData) \ |
112 long_field(ExternalCompilationResult, entryPoint) \ | 112 long_field(ExternalCompilationResult, entryPoint) \ |
113 end_class \ | 113 end_class \ |
114 start_class(CompilationResult) \ | 114 start_class(CompilationResult) \ |
115 int_field(CompilationResult, totalFrameSize) \ | 115 int_field(CompilationResult, totalFrameSize) \ |
116 int_field(CompilationResult, customStackAreaOffset) \ | 116 int_field(CompilationResult, customStackAreaOffset) \ |
117 oop_field(CompilationResult, targetCode, "[B") \ | 117 typeArrayOop_field(CompilationResult, targetCode, "[B") \ |
118 oop_field(CompilationResult, assumptions, "Lcom/oracle/graal/api/code/Assumptions;") \ | 118 oop_field(CompilationResult, assumptions, "Lcom/oracle/graal/api/code/Assumptions;") \ |
119 int_field(CompilationResult, targetCodeSize) \ | 119 int_field(CompilationResult, targetCodeSize) \ |
120 end_class \ | 120 end_class \ |
121 start_class(Assumptions) \ | 121 start_class(Assumptions) \ |
122 oop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;") \ | 122 objArrayOop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;") \ |
123 end_class \ | 123 end_class \ |
124 start_class(Assumptions_MethodContents) \ | 124 start_class(Assumptions_MethodContents) \ |
125 oop_field(Assumptions_MethodContents, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ | 125 oop_field(Assumptions_MethodContents, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ |
126 end_class \ | 126 end_class \ |
127 start_class(Assumptions_NoFinalizableSubclass) \ | 127 start_class(Assumptions_NoFinalizableSubclass) \ |
177 start_class(HotSpotReferenceMap) \ | 177 start_class(HotSpotReferenceMap) \ |
178 oop_field(HotSpotReferenceMap, registerRefMap, "Ljava/util/BitSet;") \ | 178 oop_field(HotSpotReferenceMap, registerRefMap, "Ljava/util/BitSet;") \ |
179 oop_field(HotSpotReferenceMap, frameRefMap, "Ljava/util/BitSet;") \ | 179 oop_field(HotSpotReferenceMap, frameRefMap, "Ljava/util/BitSet;") \ |
180 end_class \ | 180 end_class \ |
181 start_class(RegisterSaveLayout) \ | 181 start_class(RegisterSaveLayout) \ |
182 oop_field(RegisterSaveLayout, registers, "[Lcom/oracle/graal/api/code/Register;") \ | 182 objArrayOop_field(RegisterSaveLayout, registers, "[Lcom/oracle/graal/api/code/Register;") \ |
183 oop_field(RegisterSaveLayout, slots, "[I") \ | 183 typeArrayOop_field(RegisterSaveLayout, slots, "[I") \ |
184 end_class \ | 184 end_class \ |
185 start_class(BitSet) \ | 185 start_class(BitSet) \ |
186 oop_field(BitSet, words, "[J") \ | 186 typeArrayOop_field(BitSet, words, "[J") \ |
187 end_class \ | 187 end_class \ |
188 start_class(BytecodeFrame) \ | 188 start_class(BytecodeFrame) \ |
189 oop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;") \ | 189 objArrayOop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;") \ |
190 int_field(BytecodeFrame, numLocals) \ | 190 int_field(BytecodeFrame, numLocals) \ |
191 int_field(BytecodeFrame, numStack) \ | 191 int_field(BytecodeFrame, numStack) \ |
192 int_field(BytecodeFrame, numLocks) \ | 192 int_field(BytecodeFrame, numLocks) \ |
193 boolean_field(BytecodeFrame, rethrowException) \ | 193 boolean_field(BytecodeFrame, rethrowException) \ |
194 boolean_field(BytecodeFrame, duringCall) \ | 194 boolean_field(BytecodeFrame, duringCall) \ |
257 boolean_field(StackSlot, addFrameSize) \ | 257 boolean_field(StackSlot, addFrameSize) \ |
258 end_class \ | 258 end_class \ |
259 start_class(VirtualObject) \ | 259 start_class(VirtualObject) \ |
260 int_field(VirtualObject, id) \ | 260 int_field(VirtualObject, id) \ |
261 oop_field(VirtualObject, type, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \ | 261 oop_field(VirtualObject, type, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \ |
262 oop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;") \ | 262 objArrayOop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;") \ |
263 end_class \ | 263 end_class \ |
264 start_class(HotSpotMonitorValue) \ | 264 start_class(HotSpotMonitorValue) \ |
265 oop_field(HotSpotMonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;") \ | 265 oop_field(HotSpotMonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;") \ |
266 oop_field(HotSpotMonitorValue, slot, "Lcom/oracle/graal/api/code/StackSlot;") \ | 266 oop_field(HotSpotMonitorValue, slot, "Lcom/oracle/graal/api/code/StackSlot;") \ |
267 boolean_field(HotSpotMonitorValue, eliminated) \ | 267 boolean_field(HotSpotMonitorValue, eliminated) \ |
273 oop_field(HotSpotStackFrameReference, compilerToVM, "Lcom/oracle/graal/hotspot/bridge/CompilerToVM;") \ | 273 oop_field(HotSpotStackFrameReference, compilerToVM, "Lcom/oracle/graal/hotspot/bridge/CompilerToVM;") \ |
274 long_field(HotSpotStackFrameReference, stackPointer) \ | 274 long_field(HotSpotStackFrameReference, stackPointer) \ |
275 int_field(HotSpotStackFrameReference, frameNumber) \ | 275 int_field(HotSpotStackFrameReference, frameNumber) \ |
276 int_field(HotSpotStackFrameReference, bci) \ | 276 int_field(HotSpotStackFrameReference, bci) \ |
277 long_field(HotSpotStackFrameReference, metaspaceMethod) \ | 277 long_field(HotSpotStackFrameReference, metaspaceMethod) \ |
278 oop_field(HotSpotStackFrameReference, locals, "[Ljava/lang/Object;") \ | 278 objArrayOop_field(HotSpotStackFrameReference, locals, "[Ljava/lang/Object;") \ |
279 oop_field(HotSpotStackFrameReference, localIsVirtual, "[Z") \ | 279 typeArrayOop_field(HotSpotStackFrameReference, localIsVirtual, "[Z") \ |
280 end_class \ | 280 end_class \ |
281 /* end*/ | 281 /* end*/ |
282 | 282 |
283 #define START_CLASS(name) \ | 283 #define START_CLASS(name) \ |
284 class name : AllStatic { \ | 284 class name : AllStatic { \ |
292 public: \ | 292 public: \ |
293 static Klass* klass() { return SystemDictionary::name##_klass(); } | 293 static Klass* klass() { return SystemDictionary::name##_klass(); } |
294 | 294 |
295 #define END_CLASS }; | 295 #define END_CLASS }; |
296 | 296 |
297 #define FIELD(name, type, accessor) \ | 297 #define FIELD(name, type, accessor, cast) \ |
298 static int _##name##_offset; \ | 298 static int _##name##_offset; \ |
299 static type name(oop obj) { check(obj); return obj->accessor(_##name##_offset); } \ | 299 static type name(oop obj) { check(obj); return cast obj->accessor(_##name##_offset); } \ |
300 static type name(Handle& obj) { check(obj()); return obj->accessor(_##name##_offset); } \ | 300 static type name(Handle& obj) { check(obj()); return cast obj->accessor(_##name##_offset); } \ |
301 static type name(jobject obj) { check(JNIHandles::resolve(obj)); return JNIHandles::resolve(obj)->accessor(_##name##_offset); } \ | 301 static type name(jobject obj) { check(JNIHandles::resolve(obj)); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); } \ |
302 static void set_##name(oop obj, type x) { check(obj); obj->accessor##_put(_##name##_offset, x); } \ | 302 static void set_##name(oop obj, type x) { check(obj); obj->accessor##_put(_##name##_offset, x); } \ |
303 static void set_##name(Handle& obj, type x) { check(obj()); obj->accessor##_put(_##name##_offset, x); } \ | 303 static void set_##name(Handle& obj, type x) { check(obj()); obj->accessor##_put(_##name##_offset, x); } \ |
304 static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj)); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); } | 304 static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj)); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); } |
305 | 305 |
306 #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field) | 306 #define EMPTY_CAST |
307 #define INT_FIELD(klass, name) FIELD(name, jint, int_field) | 307 #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST) |
308 #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field) | 308 #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST) |
309 #define LONG_FIELD(klass, name) FIELD(name, jlong, long_field) | 309 #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST) |
310 #define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field) | 310 #define LONG_FIELD(klass, name) FIELD(name, jlong, long_field, EMPTY_CAST) |
311 #define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field) | 311 #define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field, EMPTY_CAST) |
312 #define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field, EMPTY_CAST) | |
313 #define OBJARRAYOOP_FIELD(klass, name, signature) FIELD(name, objArrayOop, obj_field, (objArrayOop)) | |
314 #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop)) | |
312 #define STATIC_OOP_FIELD(klassName, name, signature) \ | 315 #define STATIC_OOP_FIELD(klassName, name, signature) \ |
313 static int _##name##_offset; \ | 316 static int _##name##_offset; \ |
314 static oop name() { \ | 317 static oop name() { \ |
315 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ | 318 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ |
316 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ | 319 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ |
339 static void set_##name(int x) { \ | 342 static void set_##name(int x) { \ |
340 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ | 343 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ |
341 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ | 344 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ |
342 *((jint *)addr) = x; \ | 345 *((jint *)addr) = x; \ |
343 } | 346 } |
344 COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD) | 347 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_INT_FIELD) |
345 #undef START_CLASS | 348 #undef START_CLASS |
346 #undef END_CLASS | 349 #undef END_CLASS |
347 #undef FIELD | 350 #undef FIELD |
348 #undef CHAR_FIELD | 351 #undef CHAR_FIELD |
349 #undef INT_FIELD | 352 #undef INT_FIELD |
350 #undef BOOLEAN_FIELD | 353 #undef BOOLEAN_FIELD |
351 #undef LONG_FIELD | 354 #undef LONG_FIELD |
352 #undef FLOAT_FIELD | 355 #undef FLOAT_FIELD |
353 #undef OOP_FIELD | 356 #undef OOP_FIELD |
357 #undef TYPEARRAYOOP_FIELD | |
358 #undef OBJARRAYOOP_FIELD | |
354 #undef STATIC_OOP_FIELD | 359 #undef STATIC_OOP_FIELD |
355 #undef STATIC_INT_FIELD | 360 #undef STATIC_INT_FIELD |
361 #undef EMPTY_CAST | |
356 | 362 |
357 void compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field); | 363 void compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field); |
358 | 364 |
359 #endif // SHARE_VM_GRAAL_GRAAL_JAVA_ACCESS_HPP | 365 #endif // SHARE_VM_GRAAL_GRAAL_JAVA_ACCESS_HPP |