diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java @ 8436:10293cbfc2b6

wrote implementations for node intrinsics so that they can be interpreted when a method substitution is deoptimized and added unit tests to ensure existing method substitutions can run interpreted
author Doug Simon <doug.simon@oracle.com>
date Fri, 22 Mar 2013 11:19:53 +0100
parents 7aefc149c471
children 2ffd472c5d25
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java	Thu Mar 21 15:55:00 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java	Fri Mar 22 11:19:53 2013 +0100
@@ -22,6 +22,8 @@
  */
 package com.oracle.graal.nodes.extended;
 
+import static com.oracle.graal.graph.UnsafeAccess.*;
+
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
@@ -119,31 +121,58 @@
     }
 
     // specialized on value type until boxing/unboxing is sorted out in intrinsification
-    @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, Object value, @ConstantNodeParameter Kind kind);
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, boolean value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, Object value, @ConstantNodeParameter Kind kind) {
+        unsafe.putObject(object, offset + displacement, value);
+    }
+
+    @SuppressWarnings("unused")
+    @NodeIntrinsic
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, boolean value, @ConstantNodeParameter Kind kind) {
+        unsafe.putBoolean(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, byte value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, byte value, @ConstantNodeParameter Kind kind) {
+        unsafe.putByte(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, char value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, char value, @ConstantNodeParameter Kind kind) {
+        unsafe.putChar(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, double value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, double value, @ConstantNodeParameter Kind kind) {
+        unsafe.putDouble(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, float value, @ConstantNodeParameter Kind kind);
-
-    @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, int value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, float value, @ConstantNodeParameter Kind kind) {
+        unsafe.putFloat(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, long value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, int value, @ConstantNodeParameter Kind kind) {
+        unsafe.putInt(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
     @NodeIntrinsic
-    public static native void store(Object object, @ConstantNodeParameter int displacement, long offset, short value, @ConstantNodeParameter Kind kind);
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, long value, @ConstantNodeParameter Kind kind) {
+        unsafe.putLong(object, offset + displacement, value);
+    }
 
+    @SuppressWarnings("unused")
+    @NodeIntrinsic
+    public static void store(Object object, @ConstantNodeParameter int displacement, long offset, short value, @ConstantNodeParameter Kind kind) {
+        unsafe.putShort(object, offset + displacement, value);
+    }
 }