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);
     }