# HG changeset patch # User Doug Simon # Date 1347486637 -7200 # Node ID cc402f4396f417cb365b5fb4d6128ddd401df6a1 # Parent 67ee6f880ef3b5f66c89b715533bd17757be773b deleted caching of initial mark word in HotSpotResolvedJavaType. This value is modified by the biased locking mechanism and so it not constant for a Klass diff -r 67ee6f880ef3 -r cc402f4396f4 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 Wed Sep 12 23:37:39 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Sep 12 23:50:37 2012 +0200 @@ -60,6 +60,11 @@ public int hubOffset; /** + * The offset of the _prototype_header field in a Klass. + */ + public int initialMarkWordOffset; + + /** * The offset of an the array length in an array's header. */ public int arrayLengthOffset; @@ -106,8 +111,6 @@ public int threadObjectOffset; - public int instanceHeaderPrototypeOffset; - public int threadExceptionOopOffset; public int threadExceptionPcOffset; public int threadMultiNewArrayStorageOffset; diff -r 67ee6f880ef3 -r cc402f4396f4 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 Wed Sep 12 23:37:39 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Wed Sep 12 23:50:37 2012 +0200 @@ -117,5 +117,7 @@ String decodePC(long pc); + long JavaType_initialMarkWord(HotSpotResolvedJavaType hotSpotResolvedJavaType); + // Checkstyle: resume } diff -r 67ee6f880ef3 -r cc402f4396f4 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 Wed Sep 12 23:37:39 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Wed Sep 12 23:50:37 2012 +0200 @@ -167,5 +167,8 @@ @Override public native String decodePC(long pc); + @Override + public native long JavaType_initialMarkWord(HotSpotResolvedJavaType type); + // Checkstyle: resume } diff -r 67ee6f880ef3 -r cc402f4396f4 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java Wed Sep 12 23:37:39 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java Wed Sep 12 23:50:37 2012 +0200 @@ -55,11 +55,6 @@ private boolean isInitialized; private ResolvedJavaType arrayOfType; - /** - * Initial value for the mark word in a new object of this type. - */ - private long initialMarkWord; - private HotSpotResolvedJavaType() { throw new GraalInternalError(HotSpotResolvedJavaType.class + " should only be created from C++ code"); } @@ -294,6 +289,6 @@ } public long initialMarkWord() { - return initialMarkWord; + return HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaType_initialMarkWord(this); } } diff -r 67ee6f880ef3 -r cc402f4396f4 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotXirGenerator.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotXirGenerator.java Wed Sep 12 23:37:39 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotXirGenerator.java Wed Sep 12 23:50:37 2012 +0200 @@ -294,7 +294,7 @@ asm.bindInline(resume); - asm.pload(target.wordKind, temp1, hub, asm.i(config.instanceHeaderPrototypeOffset), false); + asm.pload(target.wordKind, temp1, hub, asm.i(config.initialMarkWordOffset), false); asm.pstore(target.wordKind, result, asm.i(config.markOffset), temp1, false); asm.mov(temp1o, hub); // need a temporary register since Intel cannot store 64-bit constants to memory asm.pstore(Kind.Object, result, asm.i(config.hubOffset), temp1o, false); @@ -380,7 +380,7 @@ asm.pstore(target.wordKind, thread, asm.i(config.threadTlabTopOffset), temp1, false); // Now the new object is in result, store mark word and klass - asm.pload(target.wordKind, temp1, hub, asm.i(config.instanceHeaderPrototypeOffset), false); + asm.pload(target.wordKind, temp1, hub, asm.i(config.initialMarkWordOffset), false); asm.pstore(target.wordKind, result, asm.i(config.markOffset), temp1, false); asm.mov(temp1o, hub); // need a temporary register since Intel cannot store 64-bit constants to memory asm.pstore(Kind.Object, result, asm.i(config.hubOffset), temp1o, false); diff -r 67ee6f880ef3 -r cc402f4396f4 src/share/vm/graal/graalCompiler.cpp --- a/src/share/vm/graal/graalCompiler.cpp Wed Sep 12 23:37:39 2012 +0200 +++ b/src/share/vm/graal/graalCompiler.cpp Wed Sep 12 23:50:37 2012 +0200 @@ -273,7 +273,6 @@ HotSpotResolvedJavaType::set_accessFlags(obj, klass->access_flags().as_int()); HotSpotResolvedJavaType::set_isInterface(obj, klass->is_interface()); HotSpotResolvedJavaType::set_superCheckOffset(obj, klass->super_check_offset()); - HotSpotResolvedJavaType::set_initialMarkWord(obj, (jlong) klass->prototype_header()); HotSpotResolvedJavaType::set_isInstanceClass(obj, klass->oop_is_instance()); if (klass->oop_is_javaArray()) { diff -r 67ee6f880ef3 -r cc402f4396f4 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Wed Sep 12 23:37:39 2012 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Wed Sep 12 23:50:37 2012 +0200 @@ -551,6 +551,18 @@ } // public JavaType JavaType_superType(HotSpotResolvedType klass); +JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_JavaType_initialMarkWord(JNIEnv *, jobject, jobject klass) { + TRACE_graal_3("CompilerToVM::JavaType_superType"); + VM_ENTRY_MARK; + KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotResolvedJavaType::javaMirror(klass))); + if (klass_handle->oop_is_array()) { + return (int32_t)(intptr_t) markOopDesc::prototype(); + } else { + return (jlong) (intptr_t) klass_handle->prototype_header(); + } +} + +// public JavaType JavaType_superType(HotSpotResolvedType klass); JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_JavaType_1superType(JNIEnv *, jobject, jobject klass) { TRACE_graal_3("CompilerToVM::JavaType_superType"); VM_ENTRY_MARK; @@ -724,6 +736,7 @@ set_int(env, config, "stackShadowPages", StackShadowPages); set_int(env, config, "hubOffset", oopDesc::klass_offset_in_bytes()); set_int(env, config, "markOffset", oopDesc::mark_offset_in_bytes()); + set_int(env, config, "initialMarkWordOffset", in_bytes(Klass::prototype_header_offset())); set_int(env, config, "superCheckOffsetOffset", in_bytes(Klass::super_check_offset_offset())); set_int(env, config, "secondarySuperCacheOffset", in_bytes(Klass::secondary_super_cache_offset())); set_int(env, config, "secondarySupersOffset", in_bytes(Klass::secondary_supers_offset())); @@ -733,7 +746,6 @@ set_int(env, config, "threadTlabTopOffset", in_bytes(JavaThread::tlab_top_offset())); set_int(env, config, "threadTlabEndOffset", in_bytes(JavaThread::tlab_end_offset())); set_int(env, config, "threadObjectOffset", in_bytes(JavaThread::threadObj_offset())); - set_int(env, config, "instanceHeaderPrototypeOffset", in_bytes(Klass::prototype_header_offset())); set_int(env, config, "threadExceptionOopOffset", in_bytes(JavaThread::exception_oop_offset())); set_int(env, config, "threadExceptionPcOffset", in_bytes(JavaThread::exception_pc_offset())); set_int(env, config, "threadMultiNewArrayStorageOffset", in_bytes(JavaThread::graal_multinewarray_storage_offset())); @@ -1035,6 +1047,7 @@ {CC"JavaType_componentType", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(JavaType_1componentType)}, {CC"JavaType_uniqueConcreteSubtype", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(JavaType_1uniqueConcreteSubtype)}, {CC"JavaType_superType", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(JavaType_1superType)}, + {CC"JavaType_initialMarkWord", CC"("RESOLVED_TYPE")J", FN_PTR(JavaType_initialMarkWord)}, {CC"JavaType_arrayOf", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(JavaType_1arrayOf)}, {CC"JavaType_fields", CC"("RESOLVED_TYPE")["RESOLVED_FIELD, FN_PTR(JavaType_1fields)}, {CC"JavaType_isInitialized", CC"("RESOLVED_TYPE")Z", FN_PTR(JavaType_1isInitialized)}, diff -r 67ee6f880ef3 -r cc402f4396f4 src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Wed Sep 12 23:37:39 2012 +0200 +++ b/src/share/vm/graal/graalJavaAccess.hpp Wed Sep 12 23:50:37 2012 +0200 @@ -52,7 +52,6 @@ oop_field(HotSpotResolvedJavaType, javaMirror, "Ljava/lang/Class;") \ oop_field(HotSpotResolvedJavaType, simpleName, "Ljava/lang/String;") \ int_field(HotSpotResolvedJavaType, accessFlags) \ - long_field(HotSpotResolvedJavaType, initialMarkWord) \ boolean_field(HotSpotResolvedJavaType, hasFinalizer) \ boolean_field(HotSpotResolvedJavaType, hasFinalizableSubclass) \ int_field(HotSpotResolvedJavaType, superCheckOffset) \