# HG changeset patch # User Andreas Woess # Date 1377541609 -7200 # Node ID ddbeefb142a7bc40c99806ed1cd3e3e01153e621 # Parent decad422aa0c53892025ada1ebf9d0a388afe2ce Truffle: distinguish tag access from byte access. diff -r decad422aa0c -r ddbeefb142a7 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameAccessNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameAccessNode.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameAccessNode.java Mon Aug 26 20:26:49 2013 +0200 @@ -34,6 +34,7 @@ import com.oracle.graal.nodes.type.*; import com.oracle.graal.truffle.*; import com.oracle.graal.truffle.nodes.*; +import com.oracle.graal.truffle.substitutions.*; import com.oracle.truffle.api.frame.*; /** @@ -113,14 +114,17 @@ } protected final boolean isValidAccessKind() { - if (getSlotKind() == Kind.Byte) { - // tag access + if (isTagAccess()) { return true; } return getSlotKind() == getGraalKind(getConstantFrameSlot().getKind()); } + protected final boolean isTagAccess() { + return field == FrameWithoutBoxingSubstitutions.TAGS_FIELD; + } + private static Kind getGraalKind(FrameSlotKind kind) { switch (kind) { case Object: @@ -156,6 +160,9 @@ @Override public Map getDebugProperties(Map map) { Map properties = super.getDebugProperties(map); + if (isTagAccess()) { + properties.put("slotKind", "Tag"); + } if (isConstantFrameSlot()) { properties.put("frameSlot", getConstantFrameSlot().toString()); } diff -r decad422aa0c -r ddbeefb142a7 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameGetNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameGetNode.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameGetNode.java Mon Aug 26 20:26:49 2013 +0200 @@ -78,12 +78,12 @@ LoadFieldNode loadFieldNode = graph().add(new LoadFieldNode(getFrame(), field)); structuredGraph.addBeforeFixed(this, loadFieldNode); FixedWithNextNode loadNode; - if (!getSlotKind().isPrimitive()) { + if (isTagAccess()) { + ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); + loadNode = graph().add(new LoadIndexedNode(loadFieldNode, slotIndex, getSlotKind())); + } else if (!getSlotKind().isPrimitive()) { ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); loadNode = graph().add(new LoadIndexedNode(loadFieldNode, slotIndex, Kind.Object)); - } else if (getSlotKind() == Kind.Byte) { - ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); - loadNode = graph().add(new LoadIndexedNode(loadFieldNode, slotIndex, Kind.Byte)); } else { ValueNode slotOffset = getSlotOffset(Unsafe.ARRAY_LONG_INDEX_SCALE, tool.getRuntime()); loadNode = graph().add(new UnsafeLoadNode(loadFieldNode, Unsafe.ARRAY_LONG_BASE_OFFSET, slotOffset, getSlotKind())); diff -r decad422aa0c -r ddbeefb142a7 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameSetNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameSetNode.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameSetNode.java Mon Aug 26 20:26:49 2013 +0200 @@ -79,10 +79,10 @@ structuredGraph.addBeforeFixed(this, loadFieldNode); FixedWithNextNode storeNode; ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); - if (!getSlotKind().isPrimitive()) { + if (isTagAccess()) { + storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, getSlotKind(), value)); + } else if (!getSlotKind().isPrimitive()) { storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Object, value)); - } else if (getSlotKind() == Kind.Byte) { - storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Byte, value)); } else { storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Long, value)); } diff -r decad422aa0c -r ddbeefb142a7 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Mon Aug 26 20:26:49 2013 +0200 @@ -36,7 +36,7 @@ private static final ResolvedJavaField LOCALS_FIELD; private static final ResolvedJavaField PRIMITIVELOCALS_FIELD; - private static final ResolvedJavaField TAGS_FIELD; + public static final ResolvedJavaField TAGS_FIELD; static { try {