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