comparison src/share/vm/c1x/c1x_VMEntries.cpp @ 1433:efba53f86c4f

various fixes and enhancements * correct refmap->oopmap conversion (register numbering, stack slot numbering) * fixes for inlining (correct scoping in exception handler lookup, NPE in scope conversion) * support for "jump to runtime stub" (patching code needs to be aware of jmp instruction) * provide more information about methods (to allow inlining: has_balanced_monitors, etc.) * fixes to signature type lookup * isSubTypeOf: correct handling of array classes * RiType: componentType/arrayOf * prologue: inline cache check, icmiss stub * klass state check (resolved but not initialized) in newinstance * card table write barriers * c1x classes are optional (to allow running c1 without them) * correct for stored frame pointer in calling conventions (methods with arguments on stack) * getType(Class<?>) for some basic types, used for optimizations and folding * RiMethod/RiType: throw exception instead of silent failure on unsupported operations * RiType: resolved/unresolved array type support * refactoring: new on-demand template generation mechanism * optimizations: template specialization for no_null_check, given length, etc.
author Lukas Stadler <lukas.stadler@oracle.com>
date Thu, 16 Sep 2010 19:42:20 -0700
parents b61a43cd1255
children 72cfb36c6bb2
comparison
equal deleted inserted replaced
1432:b61a43cd1255 1433:efba53f86c4f
101 } 101 }
102 102
103 return (jobjectArray) JNIHandles::make_local(array()); 103 return (jobjectArray) JNIHandles::make_local(array());
104 } 104 }
105 105
106 // public boolean RiMethod_hasBalancedMonitors(long vmId);
107 JNIEXPORT jint JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1hasBalancedMonitors(JNIEnv *, jobject, jlong vmId) {
108 ciMethod* cimethod;
109 {
110 VM_ENTRY_MARK;
111 cimethod = (ciMethod*)CURRENT_ENV->get_object(VmIds::get<methodOop>(vmId));
112 }
113 return cimethod->has_balanced_monitors();
114 }
115
106 // public RiType RiSignature_lookupType(String returnType, long accessingClassVmId); 116 // public RiType RiSignature_lookupType(String returnType, long accessingClassVmId);
107 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType(JNIEnv *env, jobject, jstring jname, jlong accessingClassVmId) { 117 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType(JNIEnv *env, jobject, jstring jname, jlong accessingClassVmId) {
108 VM_ENTRY_MARK; 118 VM_ENTRY_MARK;
109 119
110 symbolOop nameSymbol = VmIds::toSymbol(jname); 120 symbolOop nameSymbol = VmIds::toSymbol(jname);
126 } else if (nameSymbol == vmSymbols::double_signature()) { 136 } else if (nameSymbol == vmSymbols::double_signature()) {
127 result = VMExits::createRiTypePrimitive((int) T_DOUBLE, THREAD); 137 result = VMExits::createRiTypePrimitive((int) T_DOUBLE, THREAD);
128 } else if (nameSymbol == vmSymbols::float_signature()) { 138 } else if (nameSymbol == vmSymbols::float_signature()) {
129 result = VMExits::createRiTypePrimitive((int) T_FLOAT, THREAD); 139 result = VMExits::createRiTypePrimitive((int) T_FLOAT, THREAD);
130 } else { 140 } else {
131 Handle classloader; 141 klassOop resolved_type = NULL;
132 Handle protectionDomain; 142 // if the name isn't in the symbol table then the class isn't loaded anyway...
133 if (accessingClassVmId != 0) { 143 if (nameSymbol != NULL) {
134 classloader = VmIds::get<klassOop>(accessingClassVmId)->klass_part()->class_loader(); 144 Handle classloader;
135 protectionDomain = VmIds::get<klassOop>(accessingClassVmId)->klass_part()->protection_domain(); 145 Handle protectionDomain;
146 if (accessingClassVmId != 0) {
147 classloader = VmIds::get<klassOop>(accessingClassVmId)->klass_part()->class_loader();
148 protectionDomain = VmIds::get<klassOop>(accessingClassVmId)->klass_part()->protection_domain();
149 }
150 resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD);
136 } 151 }
137 klassOop resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD);
138 if (resolved_type != NULL) { 152 if (resolved_type != NULL) {
139 result = C1XCompiler::createHotSpotTypeResolved(resolved_type, name, CHECK_NULL); 153 result = C1XCompiler::createHotSpotTypeResolved(resolved_type, name, CHECK_NULL);
140 } else { 154 } else {
141 result = VMExits::createRiTypeUnresolved(name, accessingClassVmId, THREAD); 155 result = VMExits::createRiTypeUnresolved(name, accessingClassVmId, THREAD);
142 } 156 }
172 // TODO: Gracefully exit compilation. 186 // TODO: Gracefully exit compilation.
173 fatal("out of memory during compilation!"); 187 fatal("out of memory during compilation!");
174 return NULL; 188 return NULL;
175 } 189 }
176 } 190 }
177 result = VMExits::createCiConstantObject(VmIds::add<oop>(string), CHECK_0); 191 jlong id = VmIds::add<oop>(string);
192 // tty->print("\n\nstring: 0x%08x%08x\n", string, id>>32, id);
193 // string->print();
194 result = VMExits::createCiConstantObject(id, CHECK_0);
178 } else if (tag.is_klass() || tag.is_unresolved_klass()) { 195 } else if (tag.is_klass() || tag.is_unresolved_klass()) {
179 bool ignore; 196 bool ignore;
180 ciInstanceKlass* accessor = (ciInstanceKlass*) ciEnv::current()->get_object(cp->pool_holder()); 197 ciInstanceKlass* accessor = (ciInstanceKlass*) ciEnv::current()->get_object(cp->pool_holder());
181 ciKlass* klass = ciEnv::current()->get_klass_by_index(cp, index, ignore, accessor); 198 ciKlass* klass = ciEnv::current()->get_klass_by_index(cp, index, ignore, accessor);
182 result = C1XCompiler::get_RiType(klass, cp->pool_holder(), CHECK_NULL); 199 result = C1XCompiler::get_RiType(klass, cp->pool_holder(), CHECK_NULL);
236 253
237 constantPoolOop cp = VmIds::get<constantPoolOop>(vmId); 254 constantPoolOop cp = VmIds::get<constantPoolOop>(vmId);
238 255
239 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); 256 ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder());
240 ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index); 257 ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index);
241 return JNIHandles::make_local(THREAD, C1XCompiler::get_RiField(field, THREAD)); 258 return JNIHandles::make_local(THREAD, C1XCompiler::get_RiField(field, cp->pool_holder(), THREAD));
242 } 259 }
243 260
244 // public RiConstantPool RiType_constantPool(long vmId); 261 // public RiConstantPool RiType_constantPool(long vmId);
245 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1constantPool(JNIEnv *, jobject, jlong vmId) { 262 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1constantPool(JNIEnv *, jobject, jlong vmId) {
246 VM_ENTRY_MARK; 263 VM_ENTRY_MARK;
262 JNIEXPORT jboolean JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_2isSubtypeOf(JNIEnv *, jobject, jlong vmId, jobject jother) { 279 JNIEXPORT jboolean JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_2isSubtypeOf(JNIEnv *, jobject, jlong vmId, jobject jother) {
263 oop other = JNIHandles::resolve(jother); 280 oop other = JNIHandles::resolve(jother);
264 assert(other->is_a(HotSpotTypeResolved::klass()), "resolved hotspot type expected"); 281 assert(other->is_a(HotSpotTypeResolved::klass()), "resolved hotspot type expected");
265 klassOop thisKlass = VmIds::get<klassOop>(vmId); 282 klassOop thisKlass = VmIds::get<klassOop>(vmId);
266 klassOop otherKlass = VmIds::get<klassOop>(HotSpotTypeResolved::vmId(other)); 283 klassOop otherKlass = VmIds::get<klassOop>(HotSpotTypeResolved::vmId(other));
267 return instanceKlass::cast(thisKlass)->is_subtype_of(otherKlass); 284 if (thisKlass->klass_part()->oop_is_instance_slow()) {
268 } 285 return instanceKlass::cast(thisKlass)->is_subtype_of(otherKlass);
269 286 } else if (thisKlass->klass_part()->oop_is_array()) {
270 // helpers used to set fields in the HotSpotVMConfig object 287 return arrayKlass::cast(thisKlass)->is_subtype_of(otherKlass);
271 jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) { 288 } else {
272 jfieldID id = env->GetFieldID(env->GetObjectClass(obj), name, sig); 289 fatal("unexpected class type");
273 if (id == NULL) { 290 }
274 TRACE_C1X_1("field not found: %s (%s)", name, sig); 291 }
275 fatal("field not found"); 292
276 } 293 // public RiType RiType_componentType(long vmId);
277 return id; 294 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1componentType(JNIEnv *, jobject, jlong vmId) {
295 ciArrayKlass* klass;
296 {
297 VM_ENTRY_MARK;
298 klass = (ciArrayKlass *) CURRENT_ENV->get_object(VmIds::get<klassOop>(vmId));
299 }
300 ciType* element_type = klass->element_type();
301
302 VM_ENTRY_MARK;
303 return JNIHandles::make_local(C1XCompiler::get_RiType(element_type, VmIds::get<klassOop>(vmId), THREAD));
304 }
305
306 // public RiType RiType_arrayOf(long vmId);
307 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf(JNIEnv *, jobject, jlong vmId) {
308 VM_ENTRY_MARK;
309
310 instanceKlass* klass = instanceKlass::cast(VmIds::get<klassOop>(vmId));
311 KlassHandle array = klass->array_klass(THREAD);
312 Handle name = array->name();
313 return JNIHandles::make_local(THREAD, C1XCompiler::createHotSpotTypeResolved(array, name, THREAD));
278 } 314 }
279 315
280 // public RiType getPrimitiveArrayType(CiKind kind); 316 // public RiType getPrimitiveArrayType(CiKind kind);
281 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_getPrimitiveArrayType(JNIEnv *env, jobject, jobject kind) { 317 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_getPrimitiveArrayType(JNIEnv *env, jobject, jobject kind) {
282 VM_ENTRY_MARK; 318 VM_ENTRY_MARK;
297 } 333 }
298 ciKlass* klass = ciTypeArrayKlass::make(type); 334 ciKlass* klass = ciTypeArrayKlass::make(type);
299 return JNIHandles::make_local(THREAD, C1XCompiler::get_RiType(klass, NULL, THREAD)); 335 return JNIHandles::make_local(THREAD, C1XCompiler::get_RiType(klass, NULL, THREAD));
300 } 336 }
301 337
338 // public RiType getType(Class<?> javaClass);
339 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_getType(JNIEnv *env, jobject, jobject javaClass) {
340 VM_ENTRY_MARK;
341 KlassHandle klass = java_lang_Class::as_klassOop(JNIHandles::resolve(javaClass));
342 Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL);
343
344 oop type = C1XCompiler::createHotSpotTypeResolved(klass, name, CHECK_NULL);
345 return JNIHandles::make_local(THREAD, type);
346 }
347
348
349 // helpers used to set fields in the HotSpotVMConfig object
350 jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) {
351 jfieldID id = env->GetFieldID(env->GetObjectClass(obj), name, sig);
352 if (id == NULL) {
353 TRACE_C1X_1("field not found: %s (%s)", name, sig);
354 fatal("field not found");
355 }
356 return id;
357 }
302 358
303 void set_boolean(JNIEnv* env, jobject obj, const char* name, bool value) { env->SetBooleanField(obj, getFieldID(env, obj, name, "Z"), value); } 359 void set_boolean(JNIEnv* env, jobject obj, const char* name, bool value) { env->SetBooleanField(obj, getFieldID(env, obj, name, "Z"), value); }
304 void set_int(JNIEnv* env, jobject obj, const char* name, int value) { env->SetIntField(obj, getFieldID(env, obj, name, "I"), value); } 360 void set_int(JNIEnv* env, jobject obj, const char* name, int value) { env->SetIntField(obj, getFieldID(env, obj, name, "I"), value); }
305 void set_long(JNIEnv* env, jobject obj, const char* name, long value) { env->SetLongField(obj, getFieldID(env, obj, name, "J"), value); } 361 void set_long(JNIEnv* env, jobject obj, const char* name, long value) { env->SetLongField(obj, getFieldID(env, obj, name, "J"), value); }
306 void set_object(JNIEnv* env, jobject obj, const char* name, jobject value) { env->SetObjectField(obj, getFieldID(env, obj, name, "Ljava/lang/Object;"), value); } 362 void set_object(JNIEnv* env, jobject obj, const char* name, jobject value) { env->SetObjectField(obj, getFieldID(env, obj, name, "Ljava/lang/Object;"), value); }
329 set_int(env, config, "codeEntryAlignment", CodeEntryAlignment); 385 set_int(env, config, "codeEntryAlignment", CodeEntryAlignment);
330 set_int(env, config, "vmPageSize", os::vm_page_size()); 386 set_int(env, config, "vmPageSize", os::vm_page_size());
331 set_int(env, config, "stackShadowPages", StackShadowPages); 387 set_int(env, config, "stackShadowPages", StackShadowPages);
332 set_int(env, config, "hubOffset", oopDesc::klass_offset_in_bytes()); 388 set_int(env, config, "hubOffset", oopDesc::klass_offset_in_bytes());
333 set_int(env, config, "arrayLengthOffset", arrayOopDesc::length_offset_in_bytes()); 389 set_int(env, config, "arrayLengthOffset", arrayOopDesc::length_offset_in_bytes());
390 set_int(env, config, "klassStateOffset", instanceKlass::init_state_offset_in_bytes() + sizeof(oopDesc));
391 set_int(env, config, "klassStateFullyInitialized", (int)instanceKlass::fully_initialized);
334 set_int(env, config, "threadTlabTopOffset", in_bytes(JavaThread::tlab_top_offset())); 392 set_int(env, config, "threadTlabTopOffset", in_bytes(JavaThread::tlab_top_offset()));
335 set_int(env, config, "threadTlabEndOffset", in_bytes(JavaThread::tlab_end_offset())); 393 set_int(env, config, "threadTlabEndOffset", in_bytes(JavaThread::tlab_end_offset()));
336 set_int(env, config, "instanceHeaderPrototypeOffset", Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes()); 394 set_int(env, config, "instanceHeaderPrototypeOffset", Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes());
337 set_int(env, config, "threadExceptionOopOffset", in_bytes(JavaThread::exception_oop_offset())); 395 set_int(env, config, "threadExceptionOopOffset", in_bytes(JavaThread::exception_oop_offset()));
338 set_int(env, config, "threadExceptionPcOffset", in_bytes(JavaThread::exception_pc_offset())); 396 set_int(env, config, "threadExceptionPcOffset", in_bytes(JavaThread::exception_pc_offset()));
339 set_int(env, config, "threadMultiNewArrayStorage", in_bytes(JavaThread::c1x_multinewarray_storage_offset())); 397 set_int(env, config, "threadMultiNewArrayStorage", in_bytes(JavaThread::c1x_multinewarray_storage_offset()));
340 398
341 set_long(env, config, "debugStub", VmIds::addStub((address)warning)); 399 set_long(env, config, "debugStub", VmIds::addStub((address)warning));
342 set_long(env, config, "instanceofStub", VmIds::addStub(Runtime1::entry_for(Runtime1::slow_subtype_check_id))); 400 set_long(env, config, "instanceofStub", VmIds::addStub(Runtime1::entry_for(Runtime1::slow_subtype_check_id)));
343 set_long(env, config, "newInstanceStub", VmIds::addStub(Runtime1::entry_for(Runtime1::fast_new_instance_init_check_id))); 401 set_long(env, config, "newInstanceStub", VmIds::addStub(Runtime1::entry_for(Runtime1::fast_new_instance_init_check_id)));
402 set_long(env, config, "unresolvedNewInstanceStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_instance_id)));
344 set_long(env, config, "newTypeArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_type_array_id))); 403 set_long(env, config, "newTypeArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_type_array_id)));
345 set_long(env, config, "newObjectArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_object_array_id))); 404 set_long(env, config, "newObjectArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_object_array_id)));
346 set_long(env, config, "newMultiArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_multi_array_id))); 405 set_long(env, config, "newMultiArrayStub", VmIds::addStub(Runtime1::entry_for(Runtime1::new_multi_array_id)));
347 set_long(env, config, "loadKlassStub", VmIds::addStub(Runtime1::entry_for(Runtime1::load_klass_patching_id))); 406 set_long(env, config, "loadKlassStub", VmIds::addStub(Runtime1::entry_for(Runtime1::load_klass_patching_id)));
407 set_long(env, config, "accessFieldStub", VmIds::addStub(Runtime1::entry_for(Runtime1::access_field_patching_id)));
348 set_long(env, config, "resolveStaticCallStub", VmIds::addStub(SharedRuntime::get_resolve_static_call_stub())); 408 set_long(env, config, "resolveStaticCallStub", VmIds::addStub(SharedRuntime::get_resolve_static_call_stub()));
409 set_long(env, config, "inlineCacheMissStub", VmIds::addStub(SharedRuntime::get_ic_miss_stub()));
349 set_long(env, config, "unwindExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::c1x_unwind_exception_call_id))); 410 set_long(env, config, "unwindExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::c1x_unwind_exception_call_id)));
350 set_long(env, config, "handleExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::handle_exception_nofpu_id))); 411 set_long(env, config, "handleExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::handle_exception_nofpu_id)));
351 set_long(env, config, "throwClassCastException", VmIds::addStub(Runtime1::entry_for(Runtime1::throw_class_cast_exception_id))); 412 set_long(env, config, "throwClassCastException", VmIds::addStub(Runtime1::entry_for(Runtime1::throw_class_cast_exception_id)));
352 set_long(env, config, "throwArrayStoreException", VmIds::addStub(Runtime1::entry_for(Runtime1::throw_array_store_exception_id))); 413 set_long(env, config, "throwArrayStoreException", VmIds::addStub(Runtime1::entry_for(Runtime1::throw_array_store_exception_id)));
353 set_long(env, config, "throwArrayIndexException", VmIds::addStub(Runtime1::entry_for(Runtime1::throw_range_check_failed_id))); 414 set_long(env, config, "throwArrayIndexException", VmIds::addStub(Runtime1::entry_for(Runtime1::throw_range_check_failed_id)));
415 set_long(env, config, "monitorEnterStub", VmIds::addStub(Runtime1::entry_for(Runtime1::monitorenter_nofpu_id)));
416 set_long(env, config, "monitorExitStub", VmIds::addStub(Runtime1::entry_for(Runtime1::monitorexit_nofpu_id)));
417
418 BarrierSet* bs = Universe::heap()->barrier_set();
419 switch (bs->kind()) {
420 case BarrierSet::CardTableModRef:
421 case BarrierSet::CardTableExtension: {
422 jlong base = (jlong)((CardTableModRefBS*)bs)->byte_map_base;
423 assert(base != 0, "unexpected byte_map_base");
424 set_long(env, config, "cardtableStartAddress", base);
425 set_int(env, config, "cardtableShift", CardTableModRefBS::card_shift);
426 break;
427 }
428 case BarrierSet::ModRef:
429 case BarrierSet::Other:
430 set_long(env, config, "cardtableStartAddress", 0);
431 set_int(env, config, "cardtableShift", 0);
432 // No post barriers
433 break;
434 #ifndef SERIALGC
435 case BarrierSet::G1SATBCT:
436 case BarrierSet::G1SATBCTLogging:
437 #endif // SERIALGC
438 default:
439 ShouldNotReachHere();
440 }
354 441
355 jintArray arrayOffsets = env->NewIntArray(basicTypeCount); 442 jintArray arrayOffsets = env->NewIntArray(basicTypeCount);
356 for (int i=0; i<basicTypeCount; i++) { 443 for (int i=0; i<basicTypeCount; i++) {
357 jint offset = arrayOopDesc::base_offset_in_bytes(basicTypes[i]); 444 jint offset = arrayOopDesc::base_offset_in_bytes(basicTypes[i]);
358 env->SetIntArrayRegion(arrayOffsets, i, 1, &offset); 445 env->SetIntArrayRegion(arrayOffsets, i, 1, &offset);
392 #define HS_METHOD "Lcom/sun/hotspot/c1x/HotSpotMethod;" 479 #define HS_METHOD "Lcom/sun/hotspot/c1x/HotSpotMethod;"
393 #define CI_CONSTANT "Lcom/sun/cri/ci/CiConstant;" 480 #define CI_CONSTANT "Lcom/sun/cri/ci/CiConstant;"
394 #define CI_KIND "Lcom/sun/cri/ci/CiKind;" 481 #define CI_KIND "Lcom/sun/cri/ci/CiKind;"
395 #define STRING "Ljava/lang/String;" 482 #define STRING "Ljava/lang/String;"
396 #define OBJECT "Ljava/lang/Object;" 483 #define OBJECT "Ljava/lang/Object;"
484 #define CLASS "Ljava/lang/Class;"
397 485
398 JNINativeMethod VMEntries_methods[] = { 486 JNINativeMethod VMEntries_methods[] = {
399 {CC"RiMethod_code", CC"("PROXY")[B", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1code)}, 487 {CC"RiMethod_code", CC"("PROXY")[B", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1code)},
400 {CC"RiMethod_maxStackSize", CC"("PROXY")I", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxStackSize)}, 488 {CC"RiMethod_maxStackSize", CC"("PROXY")I", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxStackSize)},
401 {CC"RiMethod_maxLocals", CC"("PROXY")I", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxLocals)}, 489 {CC"RiMethod_maxLocals", CC"("PROXY")I", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxLocals)},
402 {CC"RiMethod_holder", CC"("PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1holder)}, 490 {CC"RiMethod_holder", CC"("PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1holder)},
403 {CC"RiMethod_signature", CC"("PROXY")"STRING, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1signature)}, 491 {CC"RiMethod_signature", CC"("PROXY")"STRING, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1signature)},
404 {CC"RiMethod_accessFlags", CC"("PROXY")I", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1accessFlags)}, 492 {CC"RiMethod_accessFlags", CC"("PROXY")I", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1accessFlags)},
405 {CC"RiMethod_exceptionHandlers", CC"("PROXY")"EXCEPTION_HANDLERS, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1exceptionHandlers)}, 493 {CC"RiMethod_exceptionHandlers", CC"("PROXY")"EXCEPTION_HANDLERS, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1exceptionHandlers)},
494 {CC"RiMethod_hasBalancedMonitors", CC"("PROXY")Z", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1hasBalancedMonitors)},
406 {CC"RiSignature_lookupType", CC"("STRING PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType)}, 495 {CC"RiSignature_lookupType", CC"("STRING PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType)},
407 {CC"RiConstantPool_lookupConstant", CC"("PROXY"I)"OBJECT, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupConstant)}, 496 {CC"RiConstantPool_lookupConstant", CC"("PROXY"I)"OBJECT, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupConstant)},
408 {CC"RiConstantPool_lookupMethod", CC"("PROXY"IB)"METHOD, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupMethod)}, 497 {CC"RiConstantPool_lookupMethod", CC"("PROXY"IB)"METHOD, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupMethod)},
409 {CC"RiConstantPool_lookupSignature", CC"("PROXY"I)"SIGNATURE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupSignature)}, 498 {CC"RiConstantPool_lookupSignature", CC"("PROXY"I)"SIGNATURE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupSignature)},
410 {CC"RiConstantPool_lookupType", CC"("PROXY"I)"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupType)}, 499 {CC"RiConstantPool_lookupType", CC"("PROXY"I)"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupType)},
411 {CC"RiConstantPool_lookupField", CC"("PROXY"I)"FIELD, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupField)}, 500 {CC"RiConstantPool_lookupField", CC"("PROXY"I)"FIELD, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupField)},
412 {CC"RiType_constantPool", CC"("PROXY")"CONSTANT_POOL, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1constantPool)}, 501 {CC"RiType_constantPool", CC"("PROXY")"CONSTANT_POOL, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1constantPool)},
413 {CC"RiType_resolveMethodImpl", CC"("PROXY STRING STRING")"METHOD, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_3resolveMethodImpl)}, 502 {CC"RiType_resolveMethodImpl", CC"("PROXY STRING STRING")"METHOD, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_3resolveMethodImpl)},
414 {CC"RiType_isSubtypeOf", CC"("PROXY TYPE")Z", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_2isSubtypeOf)}, 503 {CC"RiType_isSubtypeOf", CC"("PROXY TYPE")Z", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_2isSubtypeOf)},
504 {CC"RiType_componentType", CC"("PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1componentType)},
505 {CC"RiType_arrayOf", CC"("PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf)},
415 {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getPrimitiveArrayType)}, 506 {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getPrimitiveArrayType)},
507 {CC"getType", CC"("CLASS")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getType)},
416 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getConfiguration)}, 508 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getConfiguration)},
417 {CC"installMethod", CC"("TARGET_METHOD")V", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installMethod)}, 509 {CC"installMethod", CC"("TARGET_METHOD")V", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installMethod)},
418 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installStub)} 510 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installStub)}
419 }; 511 };
420 512