changeset 7219:69b3b2695fea

added Unsafe.*Ordered* intrinsics fixed an issue that certain intrinsics were not inlined
author Christian Haeubl <haeubl@ssw.jku.at>
date Thu, 06 Dec 2012 13:53:36 +0100
parents df6a4adb2ab5
children fcae6d960acd
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/UnsafeSnippets.java src/share/vm/graal/graalCompiler.hpp
diffstat 2 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/UnsafeSnippets.java	Tue Dec 04 14:58:05 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/UnsafeSnippets.java	Thu Dec 06 13:53:36 2012 +0100
@@ -68,6 +68,12 @@
         MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
     }
 
+    public void putOrderedObject(Object o, long offset, Object x) {
+        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        putObject(o, offset, x);
+        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+    }
+
     public int getInt(Object o, long offset) {
         Integer value = UnsafeLoadNode.load(o, 0, offset, Kind.Int);
         return value;
@@ -90,6 +96,12 @@
         MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
     }
 
+    public void putOrderedInt(Object o, long offset, int x) {
+        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        putInt(o, offset, x);
+        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+    }
+
     public boolean getBoolean(Object o, long offset) {
         @JavacBug(id = 6995200)
         Boolean result = UnsafeLoadNode.load(o, 0, offset, Kind.Boolean);
@@ -205,6 +217,12 @@
         MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
     }
 
+    public void putOrderedLong(Object o, long offset, long x) {
+        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        putLong(o, offset, x);
+        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+    }
+
     public float getFloat(Object o, long offset) {
         @JavacBug(id = 6995200)
         Float result = UnsafeLoadNode.load(o, 0, offset, Kind.Float);
--- a/src/share/vm/graal/graalCompiler.hpp	Tue Dec 04 14:58:05 2012 +0100
+++ b/src/share/vm/graal/graalCompiler.hpp	Thu Dec 06 13:53:36 2012 +0100
@@ -48,7 +48,7 @@
 
   virtual const char* name() { return "G"; }
 
-  virtual bool supports_native()                 { return false; }
+  virtual bool supports_native()                 { return true; }
   virtual bool supports_osr   ()                 { return true; }
 
   bool is_graal()                                { return true; }