Mercurial > hg > graal-compiler
changeset 10876:bf50b5daf874
FrameWithoutBoxing: make substitutions forced, use unsafeCast from CompilerDirectives.
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Thu, 25 Jul 2013 19:22:59 +0200 |
parents | 27ba48dffab6 |
children | b4e7f15cebe6 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java |
diffstat | 2 files changed, 17 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- 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 extends Arguments> T getArguments(Class<T> 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());
--- 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); }