Mercurial > hg > truffle
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 5003:5e6f1026a63e
fixes to vtable stub inlining: compute offset on demand, look out for interface methods
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Thu, 01 Mar 2012 15:36:35 +0100 |
parents | b5dc2403c1e7 |
children | 5e9f38419819 |
comparison
equal
deleted
inserted
replaced
5002:6072d5da5c20 | 5003:5e6f1026a63e |
---|---|
949 JavaCalls::call(&result, actualMethod, nm, &args, CHECK_NULL); | 949 JavaCalls::call(&result, actualMethod, nm, &args, CHECK_NULL); |
950 | 950 |
951 return JNIHandles::make_local((oop) result.get_jobject()); | 951 return JNIHandles::make_local((oop) result.get_jobject()); |
952 } | 952 } |
953 | 953 |
954 // public native int RiMethod_vtableEntryOffset(HotSpotMethodResolved method); | |
955 JNIEXPORT jint JNICALL Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_RiMethod_vtableEntryOffset(JNIEnv *, jobject, jobject hotspot_method) { | |
956 TRACE_graal_3("CompilerToVM::RiMethod_vtableEntryOffset"); | |
957 | |
958 methodOop method = getMethodFromHotSpotMethod(hotspot_method); | |
959 assert(!instanceKlass::cast(method->method_holder())->is_interface(), "vtableEntryOffset cannot be called for interface methods"); | |
960 | |
961 // get entry offset in words | |
962 int vtable_entry_offset = instanceKlass::vtable_start_offset() + method->vtable_index() * vtableEntry::size(); | |
963 // convert to bytes | |
964 vtable_entry_offset = vtable_entry_offset * wordSize + vtableEntry::method_offset_in_bytes(); | |
965 | |
966 return vtable_entry_offset; | |
967 } | |
968 | |
954 | 969 |
955 #define CC (char*) /*cast a literal from (const char*)*/ | 970 #define CC (char*) /*cast a literal from (const char*)*/ |
956 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_##f)) | 971 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_##f)) |
957 | 972 |
958 #define PROXY "J" | 973 #define PROXY "J" |
1011 {CC"installMethod", CC"("TARGET_METHOD"Z)"HS_COMP_METHOD, FN_PTR(installMethod)}, | 1026 {CC"installMethod", CC"("TARGET_METHOD"Z)"HS_COMP_METHOD, FN_PTR(installMethod)}, |
1012 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)}, | 1027 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)}, |
1013 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, | 1028 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, |
1014 {CC"disassembleJava", CC"("RESOLVED_METHOD")"STRING, FN_PTR(disassembleJava)}, | 1029 {CC"disassembleJava", CC"("RESOLVED_METHOD")"STRING, FN_PTR(disassembleJava)}, |
1015 {CC"executeCompiledMethod", CC"("HS_COMP_METHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, | 1030 {CC"executeCompiledMethod", CC"("HS_COMP_METHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, |
1031 {CC"RiMethod_vtableEntryOffset", CC"("RESOLVED_METHOD")I", FN_PTR(RiMethod_vtableEntryOffset)}, | |
1016 }; | 1032 }; |
1017 | 1033 |
1018 int CompilerToVM_methods_count() { | 1034 int CompilerToVM_methods_count() { |
1019 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); | 1035 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); |
1020 } | 1036 } |