# HG changeset patch # User Andreas Woess # Date 1374772979 -7200 # Node ID bf50b5daf8746110c3789d34546d17e0f5eedae0 # Parent 27ba48dffab6860b73df637158b21117b426ca95 FrameWithoutBoxing: make substitutions forced, use unsafeCast from CompilerDirectives. diff -r 27ba48dffab6 -r bf50b5daf874 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Thu Jul 25 13:52:53 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Thu Jul 25 19:22:59 2013 +0200 @@ -54,14 +54,9 @@ this.tags = new byte[descriptor.getSize()]; } - @SuppressWarnings("unchecked") @Override public T getArguments(Class clazz) { - return (T) unsafeCast(arguments, clazz); - } - - private static Object unsafeCast(Object value, @SuppressWarnings("unused") Class clazz) { - return value; + return CompilerDirectives.unsafeCast(arguments, clazz); } @Override @@ -212,6 +207,7 @@ private void verifySet(FrameSlot slot, FrameSlotKind accessKind) throws FrameSlotTypeException { FrameSlotKind slotKind = slot.getKind(); if (slotKind != accessKind) { + CompilerDirectives.transferToInterpreter(); if (slotKind == FrameSlotKind.Illegal) { slot.setKind(accessKind); } else { @@ -229,6 +225,7 @@ private void verifyGet(FrameSlot slot, FrameSlotKind accessKind) throws FrameSlotTypeException { FrameSlotKind slotKind = slot.getKind(); if (slotKind != accessKind) { + CompilerDirectives.transferToInterpreter(); if (slotKind == FrameSlotKind.Illegal && accessKind == FrameSlotKind.Object) { slot.setKind(FrameSlotKind.Object); this.setObject(slot, descriptor.getTypeConversion().getDefaultValue()); diff -r 27ba48dffab6 -r bf50b5daf874 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 Thu Jul 25 13:52:53 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Thu Jul 25 19:22:59 2013 +0200 @@ -27,7 +27,6 @@ import com.oracle.graal.api.replacements.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.spi.*; import com.oracle.graal.truffle.*; import com.oracle.graal.truffle.nodes.*; import com.oracle.truffle.api.frame.*; @@ -50,82 +49,79 @@ } } - @MacroSubstitution(macro = UnsafeCastMacroNode.class, isStatic = true) - public static native Object unsafeCast(Object value, Class clazz); - @SuppressWarnings("unused") - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static Object pack(FrameWithoutBoxing frame) { return null; } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static Object getObject(FrameWithoutBoxing frame, FrameSlot slot) { verifyGet(frame, slot, FrameSlotKind.Object); return getObjectUnsafe(frame, slot); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static void setObject(FrameWithoutBoxing frame, FrameSlot slot, Object value) { verifySet(frame, slot, FrameSlotKind.Object); setObjectUnsafe(frame, slot, value); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static boolean getBoolean(FrameWithoutBoxing frame, FrameSlot slot) { verifyGet(frame, slot, FrameSlotKind.Boolean); return getBooleanUnsafe(frame, slot); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static void setBoolean(FrameWithoutBoxing frame, FrameSlot slot, boolean value) { verifySet(frame, slot, FrameSlotKind.Boolean); setBooleanUnsafe(frame, slot, value); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static float getFloat(FrameWithoutBoxing frame, FrameSlot slot) { verifyGet(frame, slot, FrameSlotKind.Float); return getFloatUnsafe(frame, slot); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static void setFloat(FrameWithoutBoxing frame, FrameSlot slot, float value) { verifySet(frame, slot, FrameSlotKind.Float); setFloatUnsafe(frame, slot, value); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static long getLong(FrameWithoutBoxing frame, FrameSlot slot) { verifyGet(frame, slot, FrameSlotKind.Long); return getLongUnsafe(frame, slot); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static void setLong(FrameWithoutBoxing frame, FrameSlot slot, long value) { verifySet(frame, slot, FrameSlotKind.Long); setLongUnsafe(frame, slot, value); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static int getInt(FrameWithoutBoxing frame, FrameSlot slot) { verifyGet(frame, slot, FrameSlotKind.Int); return getIntUnsafe(frame, slot); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static void setInt(FrameWithoutBoxing frame, FrameSlot slot, int value) { verifySet(frame, slot, FrameSlotKind.Int); setIntUnsafe(frame, slot, value); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static double getDouble(FrameWithoutBoxing frame, FrameSlot slot) { verifyGet(frame, slot, FrameSlotKind.Double); return getDoubleUnsafe(frame, slot); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static void setDouble(FrameWithoutBoxing frame, FrameSlot slot, double value) { verifySet(frame, slot, FrameSlotKind.Double); setDoubleUnsafe(frame, slot, value); @@ -209,7 +205,7 @@ FrameSetNode.set(Kind.Byte, frame, slot, tag, TAGS_FIELD); } - @MethodSubstitution(isStatic = false) + @MethodSubstitution(isStatic = false, forced = true) public static MaterializedFrame materialize(FrameWithoutBoxing frame) { return MaterializeFrameNode.materialize(frame); }