changeset 13263:81055aacb98d

removed CompilerToVM.getJavaField
author twisti
date Sun, 08 Dec 2013 18:06:28 -0800
parents f13f6dc290c8
children b23cbfb4366a
files 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/HotSpotMetaAccessProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java src/share/vm/graal/graalCompiler.cpp src/share/vm/graal/graalCompiler.hpp src/share/vm/graal/graalCompilerToVM.cpp src/share/vm/graal/graalJavaAccess.hpp
diffstat 9 files changed, 35 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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
--- 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) {
--- 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);
--- 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);
--- 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);
--- 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);
 
--- 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)},
--- 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)                                                                                                                 \