src/share/vm/prims/unsafe.cpp
Print this page
rev 5728 : 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
Contributed-by: mdoerr
*** 158,169 ****
--- 158,172 ----
#define SET_FIELD(obj, offset, type_name, x) \
oop p = JNIHandles::resolve(obj); \
*(type_name*)index_oop_from_field_offset_long(p, offset) = x
+ // Support ordering of "Independent Reads of Independent Writes" (see Parse::do_get_xxx).
+ // Solution: implement volatile read as fence-load-acquire.
#define GET_FIELD_VOLATILE(obj, offset, type_name, v) \
oop p = JNIHandles::resolve(obj); \
+ PPC64_ONLY(OrderAccess::fence();) \
volatile type_name v = OrderAccess::load_acquire((volatile type_name*)index_oop_from_field_offset_long(p, offset));
#define SET_FIELD_VOLATILE(obj, offset, type_name, x) \
oop p = JNIHandles::resolve(obj); \
OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), x);