Only C2 optimizes "release stores"?
Martin Buchholz
martinrb at google.com
Mon Dec 1 22:31:04 UTC 2014
Hi fence team,
I'm foolishly reading hotspot sources and see
// The non-intrinsified versions of setOrdered just use setVolatile
But why?
Aside from conservative fear (never ever weaken fences!) why not do the obvious
diff --git a/src/share/vm/prims/unsafe.cpp b/src/share/vm/prims/unsafe.cpp
--- a/src/share/vm/prims/unsafe.cpp
+++ b/src/share/vm/prims/unsafe.cpp
@@ -171,8 +171,12 @@
#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);
+#define SET_FIELD_RELEASE(obj, offset, type_name, x) \
+ oop p = JNIHandles::resolve(obj); \
+ OrderAccess::release_store((volatile
type_name*)index_oop_from_field_offset_long(p, offset), x);
+
// Macros for oops that check UseCompressedOops
#define GET_OOP_FIELD(obj, offset, v) \
oop p = JNIHandles::resolve(obj); \
@@ -372,9 +376,9 @@
// The non-intrinsified versions of setOrdered just use setVolatile
UNSAFE_ENTRY(void, Unsafe_SetOrderedInt(JNIEnv *env, jobject unsafe,
jobject obj, jlong offset, jint x))
UnsafeWrapper("Unsafe_SetOrderedInt");
- SET_FIELD_VOLATILE(obj, offset, jint, x);
+ SET_FIELD_RELEASE(obj, offset, jint, x);
UNSAFE_END
UNSAFE_ENTRY(void, Unsafe_SetOrderedObject(JNIEnv *env, jobject
unsafe, jobject obj, jlong offset, jobject x_h))
UnsafeWrapper("Unsafe_SetOrderedObject");
@@ -386,15 +390,14 @@
oop_store((narrowOop*)addr, x);
} else {
oop_store((oop*)addr, x);
}
- OrderAccess::fence();
UNSAFE_END
UNSAFE_ENTRY(void, Unsafe_SetOrderedLong(JNIEnv *env, jobject unsafe,
jobject obj, jlong offset, jlong x))
UnsafeWrapper("Unsafe_SetOrderedLong");
#ifdef SUPPORTS_NATIVE_CX8
- SET_FIELD_VOLATILE(obj, offset, jlong, x);
+ SET_FIELD_RELEASE(obj, offset, jlong, x);
#else
// Keep old code for platforms which may not have atomic long (8
bytes) instructions
{
if (VM_Version::supports_cx8()) {
More information about the hotspot-runtime-dev
mailing list