Mercurial > hg > truffle
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 |