< prev index next >

src/share/vm/runtime/orderAccess.inline.hpp

Print this page
rev 8362 : CMS fence eliding using fancy synchronization when using UseCondCardMark

@@ -136,17 +136,25 @@
 inline void     OrderAccess::release_store_fence(volatile julong*  p, julong  v) { specialized_release_store_fence((volatile jlong*) p, (jlong) v); }
 
 inline void     OrderAccess::release_store_ptr_fence(volatile intptr_t* p, intptr_t v) { specialized_release_store_fence(p, v); }
 inline void     OrderAccess::release_store_ptr_fence(volatile void*     p, void*    v) { specialized_release_store_fence((volatile intptr_t*)p, (intptr_t)v); }
 
+inline void     OrderAccess::global_fence() { specialized_global_fence<true>(); }
+
 // The following methods can be specialized using simple template specialization
 // in the platform specific files for optimization purposes. Otherwise the
 // generalized variant is used.
 template<typename T> inline T    OrderAccess::specialized_load_acquire       (volatile T* p)       { return ordered_load<T, X_ACQUIRE>(p);    }
 template<typename T> inline void OrderAccess::specialized_release_store      (volatile T* p, T v)  { ordered_store<T, RELEASE_X>(p, v);       }
 template<typename T> inline void OrderAccess::specialized_release_store_fence(volatile T* p, T v)  { ordered_store<T, RELEASE_X_FENCE>(p, v); }
 
+template<bool DummyFlag>
+void OrderAccess::specialized_global_fence() {
+  // no specialization: call general variant
+  general_global_fence();
+}
+
 // Generalized atomic volatile accesses valid in OrderAccess
 // All other types can be expressed in terms of these.
 inline void OrderAccess::store(volatile jbyte*   p, jbyte   v) { *p = v; }
 inline void OrderAccess::store(volatile jshort*  p, jshort  v) { *p = v; }
 inline void OrderAccess::store(volatile jint*    p, jint    v) { *p = v; }
< prev index next >