[aarch64-port-dev ] Add frame anchor fences.

Andrew Haley aph at redhat.com
Thu Aug 21 16:02:21 UTC 2014


We need memory barriers when manipulating frame anchors.

Andrew.


changeset:   6876:a01a5c5cdc10
user:        aph
date:        Thu Aug 21 11:58:03 2014 -0400
summary:     Add frame anchor fences.

diff -r 16078783ccb8 -r a01a5c5cdc10 src/cpu/aarch64/vm/javaFrameAnchor_aarch64.hpp
--- a/src/cpu/aarch64/vm/javaFrameAnchor_aarch64.hpp    Thu Aug 21 11:56:52 2014 -0400
+++ b/src/cpu/aarch64/vm/javaFrameAnchor_aarch64.hpp    Thu Aug 21 11:58:03 2014 -0400
@@ -42,7 +42,7 @@
   void clear(void) {
     // clearing _last_Java_sp must be first
     _last_Java_sp = NULL;
-    // fence?
+    OrderAccess::release();
     _last_Java_fp = NULL;
     _last_Java_pc = NULL;
   }
@@ -55,9 +55,10 @@
     // To act like previous version (pd_cache_state) don't NULL _last_Java_sp
     // unless the value is changing
     //
-    if (_last_Java_sp != src->_last_Java_sp)
+    if (_last_Java_sp != src->_last_Java_sp) {
       _last_Java_sp = NULL;
-
+      OrderAccess::release();
+    }
     _last_Java_fp = src->_last_Java_fp;
     _last_Java_pc = src->_last_Java_pc;
     // Must be last so profiler will always see valid frame if has_last_frame() is true
@@ -79,10 +80,10 @@

 public:

-  void set_last_Java_sp(intptr_t* sp)            { _last_Java_sp = sp; }
+  void set_last_Java_sp(intptr_t* sp)            { _last_Java_sp = sp; OrderAccess::release(); }

   intptr_t*   last_Java_fp(void)                     { return _last_Java_fp; }
   // Assert (last_Java_sp == NULL || fp == NULL)
-  void set_last_Java_fp(intptr_t* fp)                { _last_Java_fp = fp; }
+  void set_last_Java_fp(intptr_t* fp)                { OrderAccess::release(); _last_Java_fp = fp; }

 #endif // CPU_AARCH64_VM_JAVAFRAMEANCHOR_AARCH64_HPP



More information about the aarch64-port-dev mailing list