Mercurial > hg > truffle
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 4993:897b7d18bebc
added RiCompiledMethod.execute and the required VM infrastructure
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Tue, 28 Feb 2012 18:00:35 +0100 |
parents | 5d154704b04c |
children | b5dc2403c1e7 |
comparison
equal
deleted
inserted
replaced
4992:f86ddbd42a7b | 4993:897b7d18bebc |
---|---|
862 // if install_code is true then we installed the code into the given method, no need to return an RiCompiledMethod | 862 // if install_code is true then we installed the code into the given method, no need to return an RiCompiledMethod |
863 if (!install_code && nm != NULL) { | 863 if (!install_code && nm != NULL) { |
864 instanceKlass::cast(HotSpotCompiledMethod::klass())->initialize(CHECK_NULL); | 864 instanceKlass::cast(HotSpotCompiledMethod::klass())->initialize(CHECK_NULL); |
865 Handle obj = instanceKlass::cast(HotSpotCompiledMethod::klass())->allocate_permanent_instance(CHECK_NULL); | 865 Handle obj = instanceKlass::cast(HotSpotCompiledMethod::klass())->allocate_permanent_instance(CHECK_NULL); |
866 assert(obj() != NULL, "must succeed in allocating instance"); | 866 assert(obj() != NULL, "must succeed in allocating instance"); |
867 HotSpotCompiledMethod::set_compiler(obj, VMToCompiler::compilerInstance()()); | |
867 HotSpotCompiledMethod::set_nmethod(obj, (jlong) nm); | 868 HotSpotCompiledMethod::set_nmethod(obj, (jlong) nm); |
868 HotSpotCompiledMethod::set_method(obj, HotSpotTargetMethod::method(targetMethod)); | 869 HotSpotCompiledMethod::set_method(obj, HotSpotTargetMethod::method(targetMethod)); |
869 nm->set_graal_compiled_method(obj()); | 870 nm->set_graal_compiled_method(obj()); |
870 return JNIHandles::make_local(obj()); | 871 return JNIHandles::make_local(obj()); |
871 } else { | 872 } else { |
919 bufferedStream(st); | 920 bufferedStream(st); |
920 method->print_codes_on(&st); | 921 method->print_codes_on(&st); |
921 | 922 |
922 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); | 923 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); |
923 return JNIHandles::make_local(result()); | 924 return JNIHandles::make_local(result()); |
925 } | |
926 | |
927 // public Object executeCompiledMethod(HotSpotCompiledMethod method, Object arg1, Object arg2, Object arg3); | |
928 JNIEXPORT jobject JNICALL Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_executeCompiledMethod(JNIEnv *env, jobject, jobject method, jobject arg1, jobject arg2, jobject arg3) { | |
929 TRACE_graal_3("CompilerToVM::executeCompiledMethod"); | |
930 | |
931 VM_ENTRY_MARK; | |
932 ResourceMark rm; | |
933 HandleMark hm; | |
934 | |
935 methodHandle actualMethod = getMethodFromHotSpotMethod(HotSpotCompiledMethod::method(method)); | |
936 assert(method != NULL, "just checking"); | |
937 JavaValue result(T_OBJECT); | |
938 JavaCallArguments args; | |
939 args.push_oop(JNIHandles::resolve(arg1)); | |
940 args.push_oop(JNIHandles::resolve(arg2)); | |
941 args.push_oop(JNIHandles::resolve(arg3)); | |
942 | |
943 nmethod* nm = (nmethod*) HotSpotCompiledMethod::nmethod(method); | |
944 if (nm == NULL || !nm->is_alive()) { | |
945 THROW_0(vmSymbols::MethodInvalidatedException()); | |
946 } | |
947 | |
948 JavaCalls::call(&result, actualMethod, nm, &args, CHECK_NULL); | |
949 | |
950 return JNIHandles::make_local((oop) result.get_jobject()); | |
924 } | 951 } |
925 | 952 |
926 | 953 |
927 #define CC (char*) /*cast a literal from (const char*)*/ | 954 #define CC (char*) /*cast a literal from (const char*)*/ |
928 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_##f)) | 955 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(Java_com_oracle_max_graal_hotspot_bridge_CompilerToVMImpl_##f)) |
982 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(getConfiguration)}, | 1009 {CC"getConfiguration", CC"()"CONFIG, FN_PTR(getConfiguration)}, |
983 {CC"installMethod", CC"("TARGET_METHOD"Z)"HS_COMP_METHOD, FN_PTR(installMethod)}, | 1010 {CC"installMethod", CC"("TARGET_METHOD"Z)"HS_COMP_METHOD, FN_PTR(installMethod)}, |
984 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)}, | 1011 {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(installStub)}, |
985 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, | 1012 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, |
986 {CC"disassembleJava", CC"("RESOLVED_METHOD")"STRING, FN_PTR(disassembleJava)}, | 1013 {CC"disassembleJava", CC"("RESOLVED_METHOD")"STRING, FN_PTR(disassembleJava)}, |
1014 {CC"executeCompiledMethod", CC"("HS_COMP_METHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, | |
987 }; | 1015 }; |
988 | 1016 |
989 int CompilerToVM_methods_count() { | 1017 int CompilerToVM_methods_count() { |
990 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); | 1018 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); |
991 } | 1019 } |