Mercurial > hg > truffle
changeset 13214:3f34b8f91cc5
moved CompilerToVM.isTypeInitialized and isTypeLinked to Java
author | twisti |
---|---|
date | Mon, 02 Dec 2013 20:05:24 -0800 |
parents | d49e17387efc |
children | dca16b3416ab b429ec5c46d6 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java src/share/vm/graal/graalCompilerToVM.cpp |
diffstat | 6 files changed, 10 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- 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<Klass*>::_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;
--- 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. */
--- 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
--- 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; }
--- 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
--- 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)},