changeset 6401:3b3af8fc32a7

Distinguish between the Representation of primitive and Object fields so that Object fields can be stored in a different place.
author Christian Wimmer <christian.wimmer@oracle.com>
date Fri, 14 Sep 2012 13:53:11 -0700
parents e7b50827698e
children 109af7f9490b
files graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaType.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/HotSpotResolvedJavaType.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java
diffstat 4 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaType.java	Fri Sep 14 15:28:05 2012 +0200
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaType.java	Fri Sep 14 13:53:11 2012 -0700
@@ -35,9 +35,14 @@
      */
     public enum Representation {
         /**
-         * The runtime representation of the data structure containing the static fields of this type.
+         * The runtime representation of the data structure containing the static primitive fields of this type.
          */
-        StaticFields,
+        StaticPrimitiveFields,
+
+        /**
+         * The runtime representation of the data structure containing the static object fields of this type.
+         */
+        StaticObjectFields,
 
         /**
          * The runtime representation of the Java class object of this type.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java	Fri Sep 14 15:28:05 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java	Fri Sep 14 13:53:11 2012 -0700
@@ -85,7 +85,7 @@
         if (receiver == null) {
             assert Modifier.isStatic(accessFlags);
             if (holder.isInitialized()) {
-                Constant encoding = holder.getEncoding(Representation.StaticFields);
+                Constant encoding = holder.getEncoding(kind() == Kind.Object ? Representation.StaticObjectFields : Representation.StaticPrimitiveFields);
                 return this.kind().readUnsafeConstant(encoding.asObject(), offset);
             }
             return null;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java	Fri Sep 14 15:28:05 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java	Fri Sep 14 13:53:11 2012 -0700
@@ -122,7 +122,8 @@
                 return Constant.forObject(javaMirror);
             case ObjectHub:
                 return Constant.forObject(klassOop());
-            case StaticFields:
+            case StaticPrimitiveFields:
+            case StaticObjectFields:
                 return Constant.forObject(javaMirror);
             default:
                 assert false : "Should not reach here.";
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Sep 14 15:28:05 2012 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Sep 14 13:53:11 2012 -0700
@@ -829,7 +829,7 @@
         if (constantValue != null) {
             frameState.push(constantValue.getKind().stackKind(), appendConstant(constantValue));
         } else {
-            ValueNode container = genTypeOrDeopt(JavaType.Representation.StaticFields, holder, isInitialized);
+            ValueNode container = genTypeOrDeopt(field.kind() == Kind.Object ? JavaType.Representation.StaticObjectFields : JavaType.Representation.StaticPrimitiveFields, holder, isInitialized);
             Kind kind = field.kind();
             if (container != null) {
                 LoadFieldNode load = currentGraph.add(new LoadFieldNode(container, (ResolvedJavaField) field, graphId));
@@ -843,7 +843,8 @@
 
     private void genPutStatic(JavaField field) {
         JavaType holder = field.holder();
-        ValueNode container = genTypeOrDeopt(JavaType.Representation.StaticFields, holder, field instanceof ResolvedJavaField && ((ResolvedJavaType) holder).isInitialized());
+        boolean isInitialized = (field instanceof ResolvedJavaField) && ((ResolvedJavaType) holder).isInitialized();
+        ValueNode container = genTypeOrDeopt(field.kind() == Kind.Object ? JavaType.Representation.StaticObjectFields : JavaType.Representation.StaticPrimitiveFields, holder, isInitialized);
         ValueNode value = frameState.pop(field.kind().stackKind());
         if (container != null) {
             StoreFieldNode store = currentGraph.add(new StoreFieldNode(container, (ResolvedJavaField) field, value, graphId));