# HG changeset patch # User twisti # Date 1386554788 28800 # Node ID 81055aacb98d8b9ba16069dd20bc9e9259e3bb57 # Parent f13f6dc290c82c07bf702c1df8591a65dc49ae67 removed CompilerToVM.getJavaField diff -r f13f6dc290c8 -r 81055aacb98d 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 Sun Dec 08 14:33:38 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Sun Dec 08 18:06:28 2013 -0800 @@ -222,8 +222,6 @@ long getMetaspaceConstructor(Constructor reflectionConstructor, HotSpotResolvedObjectType[] resultHolder); - HotSpotResolvedJavaField getJavaField(Field reflectionField); - long getMaxCallTargetOffset(long address); String disassembleCodeBlob(long codeBlob); diff -r f13f6dc290c8 -r 81055aacb98d 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 Sun Dec 08 14:33:38 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Sun Dec 08 18:06:28 2013 -0800 @@ -49,9 +49,6 @@ public native long getMetaspaceConstructor(Constructor reflectionConstructor, HotSpotResolvedObjectType[] resultHolder); @Override - public native HotSpotResolvedJavaField getJavaField(Field reflectionMethod); - - @Override public native byte[] initializeBytecode(long metaspaceMethod, byte[] code); @Override diff -r f13f6dc290c8 -r 81055aacb98d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Sun Dec 08 14:33:38 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Sun Dec 08 18:06:28 2013 -0800 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.meta; +import static com.oracle.graal.graph.UnsafeAccess.*; + import java.lang.reflect.*; import com.oracle.graal.api.meta.*; @@ -76,7 +78,25 @@ } public ResolvedJavaField lookupJavaField(Field reflectionField) { - return runtime.getCompilerToVM().getJavaField(reflectionField); + String name = reflectionField.getName(); + Class fieldHolder = reflectionField.getDeclaringClass(); + Class fieldType = reflectionField.getType(); + // java.lang.reflect.Field's modifiers should be enough here since VM internal modifier bits + // are not used (yet). + final int modifiers = reflectionField.getModifiers(); + final long offset = Modifier.isStatic(modifiers) ? unsafe.staticFieldOffset(reflectionField) : unsafe.objectFieldOffset(reflectionField); + final boolean internal = false; + + ResolvedJavaType holder = HotSpotResolvedObjectType.fromClass(fieldHolder); + ResolvedJavaType type = HotSpotResolvedObjectType.fromClass(fieldType); + + if (offset != -1) { + HotSpotResolvedObjectType resolved = (HotSpotResolvedObjectType) holder; + return resolved.createField(name, type, offset, modifiers, internal); + } else { + // TODO this cast will not succeed + return (ResolvedJavaField) new HotSpotUnresolvedField(holder, name, type); + } } private static int intMaskRight(int n) { diff -r f13f6dc290c8 -r 81055aacb98d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java Sun Dec 08 14:33:38 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java Sun Dec 08 18:06:28 2013 -0800 @@ -52,31 +52,32 @@ private final String name; private final JavaType type; private final int offset; - private final int flags; + private final int modifiers; private Constant constant; - public HotSpotResolvedJavaField(HotSpotResolvedObjectType holder, String name, JavaType type, int offset, int flags, boolean internal) { - assert (flags & FIELD_INTERNAL_FLAG) == 0; + public HotSpotResolvedJavaField(HotSpotResolvedObjectType holder, String name, JavaType type, long offset, int modifiers, boolean internal) { + assert (modifiers & FIELD_INTERNAL_FLAG) == 0; this.holder = holder; this.name = name; this.type = type; assert offset != -1; - this.offset = offset; + assert offset == (int) offset : "offset larger than int"; + this.offset = (int) offset; if (internal) { - this.flags = flags | FIELD_INTERNAL_FLAG; + this.modifiers = modifiers | FIELD_INTERNAL_FLAG; } else { - this.flags = flags; + this.modifiers = modifiers; } } @Override public int getModifiers() { - return flags & Modifier.fieldModifiers(); + return modifiers & Modifier.fieldModifiers(); } @Override public boolean isInternal() { - return (flags & FIELD_INTERNAL_FLAG) != 0; + return (modifiers & FIELD_INTERNAL_FLAG) != 0; } /** @@ -178,7 +179,7 @@ assert !AOTCompilation.getValue() || isCalledForSnippets() : receiver; if (receiver == null) { - assert Modifier.isStatic(flags); + assert Modifier.isStatic(modifiers); if (constant == null) { if (holder.isInitialized() && !holder.getName().equals(SystemClassName) && isEmbeddable()) { if (Modifier.isFinal(getModifiers())) { @@ -192,7 +193,7 @@ * for non-static final fields, we must assume that they are only initialized if they * have a non-default value. */ - assert !Modifier.isStatic(flags); + assert !Modifier.isStatic(modifiers); Object object = receiver.asObject(); // Canonicalization may attempt to process an unsafe read before @@ -232,13 +233,13 @@ @Override public Constant readValue(Constant receiver) { if (receiver == null) { - assert Modifier.isStatic(flags); + assert Modifier.isStatic(modifiers); if (holder.isInitialized()) { return runtime().getHostProviders().getConstantReflection().readUnsafeConstant(getKind(), holder.mirror(), offset, getKind() == Kind.Object); } return null; } else { - assert !Modifier.isStatic(flags); + assert !Modifier.isStatic(modifiers); Object object = receiver.asObject(); assert object != null && isInObject(object); return runtime().getHostProviders().getConstantReflection().readUnsafeConstant(getKind(), object, offset, getKind() == Kind.Object); diff -r f13f6dc290c8 -r 81055aacb98d 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 Sun Dec 08 14:33:38 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Sun Dec 08 18:06:28 2013 -0800 @@ -418,7 +418,7 @@ return method; } - public synchronized ResolvedJavaField createField(String fieldName, JavaType type, int offset, int flags, boolean internal) { + public synchronized ResolvedJavaField createField(String fieldName, JavaType type, long offset, int flags, boolean internal) { ResolvedJavaField result = null; long id = offset + ((long) flags << 32); diff -r f13f6dc290c8 -r 81055aacb98d src/share/vm/graal/graalCompiler.cpp --- a/src/share/vm/graal/graalCompiler.cpp Sun Dec 08 14:33:38 2013 -0800 +++ b/src/share/vm/graal/graalCompiler.cpp Sun Dec 08 18:06:28 2013 -0800 @@ -264,22 +264,6 @@ } } -Handle GraalCompiler::get_JavaTypeFromClass(Handle java_class, TRAPS) { - oop graal_mirror = java_lang_Class::graal_mirror(java_class()); - if (graal_mirror != NULL) { - return graal_mirror; - } - - if (java_lang_Class::is_primitive(java_class())) { - BasicType basicType = java_lang_Class::primitive_type(java_class()); - return VMToCompiler::createPrimitiveJavaType((int) basicType, THREAD); - } else { - KlassHandle klass = java_lang_Class::as_Klass(java_class()); - Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NH); - return GraalCompiler::createHotSpotResolvedObjectType(klass, name, CHECK_NH); - } -} - Handle GraalCompiler::get_JavaType(KlassHandle klass, TRAPS) { Handle name = java_lang_String::create_from_symbol(klass->name(), THREAD); return createHotSpotResolvedObjectType(klass, name, CHECK_NH); diff -r f13f6dc290c8 -r 81055aacb98d src/share/vm/graal/graalCompiler.hpp --- a/src/share/vm/graal/graalCompiler.hpp Sun Dec 08 14:33:38 2013 -0800 +++ b/src/share/vm/graal/graalCompiler.hpp Sun Dec 08 18:06:28 2013 -0800 @@ -74,7 +74,6 @@ static Handle get_JavaTypeFromSignature(Symbol* signature, KlassHandle accessor, TRAPS); static Handle get_JavaType(constantPoolHandle cp, int index, KlassHandle accessor, TRAPS); static Handle get_JavaType(Symbol* klass_name, TRAPS); - static Handle get_JavaTypeFromClass(Handle javaClassHandle, TRAPS); static Handle get_JavaType(KlassHandle klass, TRAPS); static Handle get_JavaField(int offset, int flags, Symbol* field_name, Handle field_holder, Handle field_type, TRAPS); diff -r f13f6dc290c8 -r 81055aacb98d src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Sun Dec 08 14:33:38 2013 -0800 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Sun Dec 08 18:06:28 2013 -0800 @@ -218,22 +218,6 @@ return (jlong) (address) method(); } -C2V_VMENTRY(jobject, getJavaField, (JNIEnv *, jobject, jobject reflection_field_handle)) - oop reflection_field = JNIHandles::resolve(reflection_field_handle); - oop reflection_holder = java_lang_reflect_Field::clazz(reflection_field); - int slot = java_lang_reflect_Field::slot(reflection_field); - InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(reflection_holder)); - - int offset = holder->field_offset(slot); - int flags = holder->field_access_flags(slot); - Symbol* field_name = holder->field_name(slot); - Handle field_holder = GraalCompiler::get_JavaTypeFromClass(reflection_holder, CHECK_NULL); - Handle field_type = GraalCompiler::get_JavaTypeFromClass(java_lang_reflect_Field::type(reflection_field), CHECK_NULL); - - Handle ret = GraalCompiler::get_JavaField(offset, flags, field_name, field_holder, field_type, CHECK_NULL); - return JNIHandles::make_local(THREAD, ret()); -} - C2V_VMENTRY(jlong, getUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_method, jobject resultHolder)) methodHandle method = asMethod(metaspace_method); KlassHandle holder = method->method_holder(); @@ -965,7 +949,6 @@ #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" #define REFLECT_METHOD "Ljava/lang/reflect/Method;" #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" -#define REFLECT_FIELD "Ljava/lang/reflect/Field;" #define STRING "Ljava/lang/String;" #define OBJECT "Ljava/lang/Object;" #define CLASS "Ljava/lang/Class;" @@ -1005,7 +988,6 @@ {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, {CC"getMetaspaceMethod", CC"("REFLECT_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, {CC"getMetaspaceConstructor", CC"("REFLECT_CONSTRUCTOR"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceConstructor)}, - {CC"getJavaField", CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD, FN_PTR(getJavaField)}, {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, {CC"installCode0", CC"("HS_COMPILED_CODE HS_INSTALLED_CODE"[Z)I", FN_PTR(installCode0)}, {CC"notifyCompilationStatistics", CC"(I"HS_RESOLVED_METHOD"ZIJJ"HS_INSTALLED_CODE")V", FN_PTR(notifyCompilationStatistics)}, diff -r f13f6dc290c8 -r 81055aacb98d src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Sun Dec 08 14:33:38 2013 -0800 +++ b/src/share/vm/graal/graalJavaAccess.hpp Sun Dec 08 18:06:28 2013 -0800 @@ -66,9 +66,6 @@ oop_field(HotSpotJavaType, name, "Ljava/lang/String;") \ end_class \ start_class(HotSpotResolvedJavaField) \ - oop_field(HotSpotResolvedJavaField, constant, "Lcom/oracle/graal/api/meta/Constant;") \ - int_field(HotSpotResolvedJavaField, offset) \ - int_field(HotSpotResolvedJavaField, flags) \ end_class \ start_class(HotSpotInstalledCode) \ long_field(HotSpotInstalledCode, codeBlob) \