# HG changeset patch # User Christian Wimmer # Date 1347655991 25200 # Node ID 3b3af8fc32a755caa26188ba6ecafe7f7d80ee72 # Parent e7b50827698e42272336ecb26f32e58fec0e3609 Distinguish between the Representation of primitive and Object fields so that Object fields can be stored in a different place. diff -r e7b50827698e -r 3b3af8fc32a7 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaType.java --- 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. diff -r e7b50827698e -r 3b3af8fc32a7 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 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; diff -r e7b50827698e -r 3b3af8fc32a7 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 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."; diff -r e7b50827698e -r 3b3af8fc32a7 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- 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));