Mercurial > hg > truffle
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); + } }