# HG changeset patch # User twisti # Date 1386043524 28800 # Node ID 3f34b8f91cc5744bac3007c57ab1a50e04538d06 # Parent d49e17387efcfe4f812f809459cf34b72e6e2bdf moved CompilerToVM.isTypeInitialized and isTypeLinked to Java diff -r d49e17387efc -r 3f34b8f91cc5 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Dec 02 15:08:14 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Dec 02 20:05:24 2013 -0800 @@ -720,6 +720,7 @@ @HotSpotVMField(name = "Array::_data", get = HotSpotVMField.Type.OFFSET) @Stable public int metaspaceArrayBaseOffset; @HotSpotVMField(name = "InstanceKlass::_init_state", get = HotSpotVMField.Type.OFFSET) @Stable public int klassStateOffset; + @HotSpotVMConstant(name = "InstanceKlass::linked") @Stable public int klassStateLinked; @HotSpotVMConstant(name = "InstanceKlass::fully_initialized") @Stable public int klassStateFullyInitialized; @HotSpotVMField(name = "InstanceKlass::_constants", get = HotSpotVMField.Type.OFFSET) @Stable public int instanceKlassConstantsOffset; diff -r d49e17387efc -r 3f34b8f91cc5 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Mon Dec 02 15:08:14 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Mon Dec 02 20:05:24 2013 -0800 @@ -207,8 +207,6 @@ JavaMethod resolveMethod(HotSpotResolvedObjectType klass, String name, String signature); - boolean isTypeInitialized(HotSpotResolvedObjectType klass); - void initializeType(HotSpotResolvedObjectType klass); ResolvedJavaType getResolvedType(Class javaClass); @@ -273,8 +271,6 @@ void invalidateInstalledCode(HotSpotInstalledCode hotspotInstalledCode); - boolean isTypeLinked(HotSpotResolvedObjectType hotSpotResolvedObjectType); - /** * Collects the current values of all Graal benchmark counters, summed up over all threads. */ diff -r d49e17387efc -r 3f34b8f91cc5 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Mon Dec 02 15:08:14 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Mon Dec 02 20:05:24 2013 -0800 @@ -97,11 +97,6 @@ public native JavaMethod resolveMethod(HotSpotResolvedObjectType klass, String name, String signature); @Override - public native boolean isTypeInitialized(HotSpotResolvedObjectType klass); - - public native boolean isTypeLinked(HotSpotResolvedObjectType hotSpotResolvedObjectType); - - @Override public native boolean hasFinalizableSubclass(HotSpotResolvedObjectType klass); @Override diff -r d49e17387efc -r 3f34b8f91cc5 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Mon Dec 02 15:08:14 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Mon Dec 02 20:05:24 2013 -0800 @@ -139,7 +139,7 @@ if (codeSize == 0) { return null; } - if (code == null && runtime().getCompilerToVM().isTypeLinked(holder)) { + if (code == null && holder.isLinked()) { code = runtime().getCompilerToVM().initializeBytecode(metaspaceMethod, new byte[codeSize]); assert code.length == codeSize : "expected: " + codeSize + ", actual: " + code.length; } diff -r d49e17387efc -r 3f34b8f91cc5 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Mon Dec 02 15:08:14 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Mon Dec 02 20:05:24 2013 -0800 @@ -82,8 +82,6 @@ private HotSpotResolvedJavaField[] instanceFields; private ResolvedJavaType[] interfaces; private ConstantPool constantPool; - private boolean isInitialized; - private boolean isLinked; private ResolvedJavaType arrayOfType; /** @@ -286,27 +284,24 @@ @Override public boolean isInitialized() { - if (!isInitialized) { - isInitialized = runtime().getCompilerToVM().isTypeInitialized(this); - } - return isInitialized; + HotSpotVMConfig config = runtime().getConfig(); + byte state = unsafe.getByte(metaspaceKlass + config.klassStateOffset); + return state == config.klassStateFullyInitialized; } @Override public boolean isLinked() { - if (!isLinked) { - isLinked = runtime().getCompilerToVM().isTypeLinked(this); - } - return isLinked; + HotSpotVMConfig config = runtime().getConfig(); + byte state = unsafe.getByte(metaspaceKlass + config.klassStateOffset); + return state >= config.klassStateLinked; } @Override public void initialize() { - if (!isInitialized) { + if (!isInitialized()) { runtime().getCompilerToVM().initializeType(this); - assert runtime().getCompilerToVM().isTypeInitialized(this); + assert isInitialized(); } - isInitialized = true; } @Override diff -r d49e17387efc -r 3f34b8f91cc5 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Mon Dec 02 15:08:14 2013 -0800 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Mon Dec 02 20:05:24 2013 -0800 @@ -544,20 +544,6 @@ return JNIHandles::make_local(THREAD, VMToCompiler::createResolvedJavaMethod(holder, method(), THREAD)); C2V_END -// TODO move to Java -C2V_VMENTRY(jboolean, isTypeInitialized,(JNIEnv *, jobject, jobject hotspot_klass)) - Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(hotspot_klass)); - assert(klass != NULL, "method must not be called for primitive types"); - return InstanceKlass::cast(klass)->is_initialized(); -C2V_END - -// TODO move to Java -C2V_VMENTRY(jboolean, isTypeLinked,(JNIEnv *, jobject, jobject hotspot_klass)) - Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(hotspot_klass)); - assert(klass != NULL, "method must not be called for primitive types"); - return InstanceKlass::cast(klass)->is_linked(); -C2V_END - C2V_VMENTRY(jboolean, hasFinalizableSubclass,(JNIEnv *, jobject, jobject hotspot_klass)) Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(hotspot_klass)); assert(klass != NULL, "method must not be called for primitive types"); @@ -1116,8 +1102,6 @@ {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METHOD, FN_PTR(resolveMethod)}, {CC"getInstanceFields", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_FIELD, FN_PTR(getInstanceFields)}, {CC"getMethods", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_METHOD, FN_PTR(getMethods)}, - {CC"isTypeInitialized", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(isTypeInitialized)}, - {CC"isTypeLinked", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(isTypeLinked)}, {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)}, {CC"initializeType", CC"("HS_RESOLVED_TYPE")V", FN_PTR(initializeType)}, {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)},