changeset 19308:5b2589732c45

Truffle: store byte and boolean as int in FrameWithoutBoxing
author Andreas Woess <andreas.woess@oracle.com>
date Wed, 11 Feb 2015 15:47:14 +0100
parents 16a2ea2078bc
children c386ace07981
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotKind.java
diffstat 5 files changed, 27 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java	Wed Feb 11 14:03:06 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java	Wed Feb 11 15:47:14 2015 +0100
@@ -105,9 +105,9 @@
     }
 
     private byte getByteUnsafe(FrameSlot slot) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Byte);
+        long offset = getPrimitiveOffset(slot);
         boolean condition = this.getTags()[slot.getIndex()] == FrameSlotKind.Byte.ordinal();
-        return unsafeGetByte(getPrimitiveLocals(), offset, condition, slot);
+        return (byte) unsafeGetInt(getPrimitiveLocals(), offset, condition, slot);
     }
 
     @Override
@@ -117,8 +117,8 @@
     }
 
     private void setByteUnsafe(FrameSlot slot, byte value) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Boolean);
-        unsafePutByte(getPrimitiveLocals(), offset, value, slot);
+        long offset = getPrimitiveOffset(slot);
+        unsafePutInt(getPrimitiveLocals(), offset, value, slot);
     }
 
     @Override
@@ -128,9 +128,9 @@
     }
 
     private boolean getBooleanUnsafe(FrameSlot slot) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Boolean);
+        long offset = getPrimitiveOffset(slot);
         boolean condition = this.getTags()[slot.getIndex()] == FrameSlotKind.Boolean.ordinal();
-        return unsafeGetBoolean(getPrimitiveLocals(), offset, condition, slot);
+        return unsafeGetInt(getPrimitiveLocals(), offset, condition, slot) != 0;
     }
 
     @Override
@@ -140,8 +140,8 @@
     }
 
     private void setBooleanUnsafe(FrameSlot slot, boolean value) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Boolean);
-        unsafePutBoolean(getPrimitiveLocals(), offset, value, slot);
+        long offset = getPrimitiveOffset(slot);
+        unsafePutInt(getPrimitiveLocals(), offset, value ? 1 : 0, slot);
     }
 
     @Override
@@ -151,7 +151,7 @@
     }
 
     private float getFloatUnsafe(FrameSlot slot) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Float);
+        long offset = getPrimitiveOffset(slot);
         boolean condition = this.getTags()[slot.getIndex()] == FrameSlotKind.Float.ordinal();
         return unsafeGetFloat(getPrimitiveLocals(), offset, condition, slot);
     }
@@ -163,7 +163,7 @@
     }
 
     private void setFloatUnsafe(FrameSlot slot, float value) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Float);
+        long offset = getPrimitiveOffset(slot);
         unsafePutFloat(getPrimitiveLocals(), offset, value, slot);
     }
 
@@ -174,7 +174,7 @@
     }
 
     private long getLongUnsafe(FrameSlot slot) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Long);
+        long offset = getPrimitiveOffset(slot);
         boolean condition = this.getTags()[slot.getIndex()] == FrameSlotKind.Long.ordinal();
         return unsafeGetLong(getPrimitiveLocals(), offset, condition, slot);
     }
@@ -186,7 +186,7 @@
     }
 
     private void setLongUnsafe(FrameSlot slot, long value) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Long);
+        long offset = getPrimitiveOffset(slot);
         unsafePutLong(getPrimitiveLocals(), offset, value, slot);
     }
 
@@ -197,7 +197,7 @@
     }
 
     private int getIntUnsafe(FrameSlot slot) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Int);
+        long offset = getPrimitiveOffset(slot);
         boolean condition = this.getTags()[slot.getIndex()] == FrameSlotKind.Int.ordinal();
         return unsafeGetInt(getPrimitiveLocals(), offset, condition, slot);
     }
@@ -209,7 +209,7 @@
     }
 
     private void setIntUnsafe(FrameSlot slot, int value) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Int);
+        long offset = getPrimitiveOffset(slot);
         unsafePutInt(getPrimitiveLocals(), offset, value, slot);
     }
 
@@ -220,7 +220,7 @@
     }
 
     private double getDoubleUnsafe(FrameSlot slot) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Double);
+        long offset = getPrimitiveOffset(slot);
         boolean condition = this.getTags()[slot.getIndex()] == FrameSlotKind.Double.ordinal();
         return unsafeGetDouble(getPrimitiveLocals(), offset, condition, slot);
     }
@@ -232,7 +232,7 @@
     }
 
     private void setDoubleUnsafe(FrameSlot slot, double value) {
-        long offset = getPrimitiveOffset(slot, FrameSlotKind.Double);
+        long offset = getPrimitiveOffset(slot);
         unsafePutDouble(getPrimitiveLocals(), offset, value, slot);
     }
 
@@ -269,8 +269,8 @@
         }
     }
 
-    private static long getPrimitiveOffset(FrameSlot slot, FrameSlotKind forKind) {
-        return Unsafe.ARRAY_LONG_BASE_OFFSET + slot.getIndex() * (long) Unsafe.ARRAY_LONG_INDEX_SCALE + forKind.getByteOffset();
+    private static long getPrimitiveOffset(FrameSlot slot) {
+        return Unsafe.ARRAY_LONG_BASE_OFFSET + slot.getIndex() * (long) Unsafe.ARRAY_LONG_INDEX_SCALE;
     }
 
     @Override
@@ -362,16 +362,6 @@
     }
 
     @SuppressWarnings("unused")
-    static boolean unsafeGetBoolean(Object receiver, long offset, boolean condition, Object locationIdentity) {
-        return UNSAFE.getBoolean(receiver, offset);
-    }
-
-    @SuppressWarnings("unused")
-    static byte unsafeGetByte(Object receiver, long offset, boolean condition, Object locationIdentity) {
-        return UNSAFE.getByte(receiver, offset);
-    }
-
-    @SuppressWarnings("unused")
     static int unsafeGetInt(Object receiver, long offset, boolean condition, Object locationIdentity) {
         return UNSAFE.getInt(receiver, offset);
     }
@@ -397,16 +387,6 @@
     }
 
     @SuppressWarnings("unused")
-    static void unsafePutBoolean(Object receiver, long offset, boolean value, Object locationIdentity) {
-        UNSAFE.putBoolean(receiver, offset, value);
-    }
-
-    @SuppressWarnings("unused")
-    static void unsafePutByte(Object receiver, long offset, byte value, Object locationIdentity) {
-        UNSAFE.putByte(receiver, offset, value);
-    }
-
-    @SuppressWarnings("unused")
     static void unsafePutInt(Object receiver, long offset, int value, Object locationIdentity) {
         UNSAFE.putInt(receiver, offset, value);
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java	Wed Feb 11 14:03:06 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java	Wed Feb 11 15:47:14 2015 +0100
@@ -195,11 +195,7 @@
         Kind graalKind = null;
         switch (kind) {
             case Boolean:
-                graalKind = Kind.Boolean;
-                break;
             case Byte:
-                graalKind = Kind.Byte;
-                break;
             case Int:
                 graalKind = Kind.Int;
                 break;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java	Wed Feb 11 14:03:06 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java	Wed Feb 11 15:47:14 2015 +0100
@@ -41,12 +41,6 @@
     public static native Object unsafeCast(Object value, Class<?> clazz, boolean condition, boolean nonNull);
 
     @MacroSubstitution(macro = CustomizedUnsafeLoadMacroNode.class, isStatic = true)
-    public static native boolean unsafeGetBoolean(Object receiver, long offset, boolean condition, Object locationIdentity);
-
-    @MacroSubstitution(macro = CustomizedUnsafeLoadMacroNode.class, isStatic = true)
-    public static native byte unsafeGetByte(Object receiver, long offset, boolean condition, Object locationIdentity);
-
-    @MacroSubstitution(macro = CustomizedUnsafeLoadMacroNode.class, isStatic = true)
     public static native int unsafeGetInt(Object receiver, long offset, boolean condition, Object locationIdentity);
 
     @MacroSubstitution(macro = CustomizedUnsafeLoadMacroNode.class, isStatic = true)
@@ -62,12 +56,6 @@
     public static native Object unsafeGetObject(Object receiver, long offset, boolean condition, Object locationIdentity);
 
     @MacroSubstitution(macro = CustomizedUnsafeStoreMacroNode.class, isStatic = true)
-    public static native void unsafePutBoolean(Object receiver, long offset, boolean value, Object locationIdentity);
-
-    @MacroSubstitution(macro = CustomizedUnsafeStoreMacroNode.class, isStatic = true)
-    public static native void unsafePutByte(Object receiver, long offset, byte value, Object locationIdentity);
-
-    @MacroSubstitution(macro = CustomizedUnsafeStoreMacroNode.class, isStatic = true)
     public static native void unsafePutInt(Object receiver, long offset, int value, Object locationIdentity);
 
     @MacroSubstitution(macro = CustomizedUnsafeStoreMacroNode.class, isStatic = true)
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java	Wed Feb 11 14:03:06 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java	Wed Feb 11 15:47:14 2015 +0100
@@ -190,7 +190,7 @@
             }
         });
 
-        registerUnsafeLoadStorePlugins(r, Kind.Boolean, Kind.Byte, Kind.Int, Kind.Long, Kind.Float, Kind.Double, Kind.Object);
+        registerUnsafeLoadStorePlugins(r, Kind.Int, Kind.Long, Kind.Float, Kind.Double, Kind.Object);
 
         // CompilerDirectives.class
         r = new Registration(plugins, metaAccess, CompilerDirectives.class);
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotKind.java	Wed Feb 11 14:03:06 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotKind.java	Wed Feb 11 15:47:14 2015 +0100
@@ -24,25 +24,13 @@
  */
 package com.oracle.truffle.api.frame;
 
-import java.nio.*;
-
 public enum FrameSlotKind {
-    Object(0),
-    Illegal(0),
-    Long(0),
-    Int(0),
-    Double(0),
-    Float(0),
-    Boolean(3),
-    Byte(3);
-
-    private final int byteOffset;
-
-    private FrameSlotKind(int bigEndianByteOffset) {
-        this.byteOffset = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN ? bigEndianByteOffset : 0;
-    }
-
-    public int getByteOffset() {
-        return byteOffset;
-    }
+    Object,
+    Illegal,
+    Long,
+    Int,
+    Double,
+    Float,
+    Boolean,
+    Byte;
 }