comparison src/share/vm/graal/graalCompilerToVM.cpp @ 13478:fe03864a2c72

replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
author twisti
date Wed, 25 Dec 2013 12:14:29 -0800
parents 52eb34dd84d7
children 606959535fd4
comparison
equal deleted inserted replaced
13477:37f0c86f58d4 13478:fe03864a2c72
179 MutexLocker locker(Compile_lock); 179 MutexLocker locker(Compile_lock);
180 Method* ucm = Dependencies::find_unique_concrete_method(holder(), method()); 180 Method* ucm = Dependencies::find_unique_concrete_method(holder(), method());
181 return (jlong) (address) ucm; 181 return (jlong) (address) ucm;
182 C2V_END 182 C2V_END
183 183
184 C2V_VMENTRY(jobject, getUniqueImplementor, (JNIEnv *, jobject, jobject interface_type)) 184 C2V_VMENTRY(jlong, getKlassImplementor, (JNIEnv *, jobject, jlong metaspace_klass))
185 InstanceKlass* klass = (InstanceKlass*) java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(interface_type)); 185 InstanceKlass* klass = (InstanceKlass*) asKlass(metaspace_klass);
186 assert(klass->is_interface(), "must be"); 186 return (jlong) (address) klass->implementor();
187 if (klass->nof_implementors() == 1) {
188 InstanceKlass* implementor = (InstanceKlass*) klass->implementor();
189 if (!implementor->is_abstract() && !implementor->is_interface() && implementor->is_leaf_class()) {
190 Handle type = GraalCompiler::createHotSpotResolvedObjectType(implementor, CHECK_NULL);
191 return JNIHandles::make_local(THREAD, type());
192 }
193 }
194 return NULL;
195 C2V_END 187 C2V_END
196 188
197 C2V_VMENTRY(void, initializeMethod,(JNIEnv *, jobject, jlong metaspace_method, jobject hotspot_method)) 189 C2V_VMENTRY(void, initializeMethod,(JNIEnv *, jobject, jlong metaspace_method, jobject hotspot_method))
198 methodHandle method = asMethod(metaspace_method); 190 methodHandle method = asMethod(metaspace_method);
199 InstanceKlass::cast(HotSpotResolvedJavaMethod::klass())->initialize(CHECK); 191 InstanceKlass::cast(HotSpotResolvedJavaMethod::klass())->initialize(CHECK);
837 C2V_END 829 C2V_END
838 830
839 #define CC (char*) /*cast a literal from (const char*)*/ 831 #define CC (char*) /*cast a literal from (const char*)*/
840 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f)) 832 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
841 833
842 #define RESOLVED_TYPE "Lcom/oracle/graal/api/meta/ResolvedJavaType;"
843 #define TYPE "Lcom/oracle/graal/api/meta/JavaType;" 834 #define TYPE "Lcom/oracle/graal/api/meta/JavaType;"
844 #define METHOD "Lcom/oracle/graal/api/meta/JavaMethod;" 835 #define METHOD "Lcom/oracle/graal/api/meta/JavaMethod;"
845 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" 836 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;"
846 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;"
847 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;"
848 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;"
849 #define KIND "Lcom/oracle/graal/api/meta/Kind;"
850 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;"
851 #define REFLECT_METHOD "Ljava/lang/reflect/Method;"
852 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;"
853 #define STRING "Ljava/lang/String;" 837 #define STRING "Ljava/lang/String;"
854 #define OBJECT "Ljava/lang/Object;" 838 #define OBJECT "Ljava/lang/Object;"
855 #define CLASS "Ljava/lang/Class;" 839 #define CLASS "Ljava/lang/Class;"
856 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;" 840 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;"
857 #define HS_RESOLVED_TYPE "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedObjectType;" 841 #define HS_RESOLVED_TYPE "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedObjectType;"
858 #define HS_RESOLVED_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;" 842 #define HS_RESOLVED_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;"
859 #define HS_RESOLVED_FIELD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaField;" 843 #define HS_RESOLVED_FIELD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaField;"
860 #define HS_COMPILED_CODE "Lcom/oracle/graal/hotspot/HotSpotCompiledCode;" 844 #define HS_COMPILED_CODE "Lcom/oracle/graal/hotspot/HotSpotCompiledCode;"
861 #define HS_CONFIG "Lcom/oracle/graal/hotspot/HotSpotVMConfig;" 845 #define HS_CONFIG "Lcom/oracle/graal/hotspot/HotSpotVMConfig;"
862 #define HS_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotMethod;"
863 #define HS_INSTALLED_CODE "Lcom/oracle/graal/hotspot/meta/HotSpotInstalledCode;" 846 #define HS_INSTALLED_CODE "Lcom/oracle/graal/hotspot/meta/HotSpotInstalledCode;"
847 #define METASPACE_KLASS "J"
864 #define METASPACE_METHOD "J" 848 #define METASPACE_METHOD "J"
865 #define METASPACE_CONSTANT_POOL "J" 849 #define METASPACE_CONSTANT_POOL "J"
866 850
867 JNINativeMethod CompilerToVM_methods[] = { 851 JNINativeMethod CompilerToVM_methods[] = {
868 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, 852 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)},
869 {CC"exceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(exceptionTableStart)}, 853 {CC"exceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(exceptionTableStart)},
870 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, 854 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)},
871 {CC"findUniqueConcreteMethod", CC"("METASPACE_METHOD")"METASPACE_METHOD, FN_PTR(findUniqueConcreteMethod)}, 855 {CC"findUniqueConcreteMethod", CC"("METASPACE_METHOD")"METASPACE_METHOD, FN_PTR(findUniqueConcreteMethod)},
872 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)}, 856 {CC"getKlassImplementor", CC"("METASPACE_KLASS")"METASPACE_KLASS, FN_PTR(getKlassImplementor)},
873 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, 857 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)},
874 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)}, 858 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)},
875 {CC"doNotInlineOrCompile", CC"("METASPACE_METHOD")V", FN_PTR(doNotInlineOrCompile)}, 859 {CC"doNotInlineOrCompile", CC"("METASPACE_METHOD")V", FN_PTR(doNotInlineOrCompile)},
876 {CC"isMethodCompilable", CC"("METASPACE_METHOD")Z", FN_PTR(isMethodCompilable)}, 860 {CC"isMethodCompilable", CC"("METASPACE_METHOD")Z", FN_PTR(isMethodCompilable)},
877 {CC"getCompiledCodeSize", CC"("METASPACE_METHOD")I", FN_PTR(getCompiledCodeSize)}, 861 {CC"getCompiledCodeSize", CC"("METASPACE_METHOD")I", FN_PTR(getCompiledCodeSize)},