< prev index next >

src/hotspot/share/prims/unsafe.cpp

Print this page

        

*** 207,249 **** : _thread(thread), _obj(JNIHandles::resolve(obj)), _offset((ptrdiff_t)offset) { assert_field_offset_sane(_obj, offset); } T get() { ! if (oopDesc::is_null(_obj)) { GuardUnsafeAccess guard(_thread); T ret = RawAccess<>::load(addr()); return normalize_for_read(ret); } else { T ret = HeapAccess<>::load_at(_obj, _offset); return normalize_for_read(ret); } } void put(T x) { ! if (oopDesc::is_null(_obj)) { GuardUnsafeAccess guard(_thread); RawAccess<>::store(addr(), normalize_for_write(x)); } else { HeapAccess<>::store_at(_obj, _offset, normalize_for_write(x)); } } T get_volatile() { ! if (oopDesc::is_null(_obj)) { GuardUnsafeAccess guard(_thread); volatile T ret = RawAccess<MO_SEQ_CST>::load(addr()); return normalize_for_read(ret); } else { T ret = HeapAccess<MO_SEQ_CST>::load_at(_obj, _offset); return normalize_for_read(ret); } } void put_volatile(T x) { ! if (oopDesc::is_null(_obj)) { GuardUnsafeAccess guard(_thread); RawAccess<MO_SEQ_CST>::store(addr(), normalize_for_write(x)); } else { HeapAccess<MO_SEQ_CST>::store_at(_obj, _offset, normalize_for_write(x)); } --- 207,249 ---- : _thread(thread), _obj(JNIHandles::resolve(obj)), _offset((ptrdiff_t)offset) { assert_field_offset_sane(_obj, offset); } T get() { ! if (_obj == NULL) { GuardUnsafeAccess guard(_thread); T ret = RawAccess<>::load(addr()); return normalize_for_read(ret); } else { T ret = HeapAccess<>::load_at(_obj, _offset); return normalize_for_read(ret); } } void put(T x) { ! if (_obj == NULL) { GuardUnsafeAccess guard(_thread); RawAccess<>::store(addr(), normalize_for_write(x)); } else { HeapAccess<>::store_at(_obj, _offset, normalize_for_write(x)); } } T get_volatile() { ! if (_obj == NULL) { GuardUnsafeAccess guard(_thread); volatile T ret = RawAccess<MO_SEQ_CST>::load(addr()); return normalize_for_read(ret); } else { T ret = HeapAccess<MO_SEQ_CST>::load_at(_obj, _offset); return normalize_for_read(ret); } } void put_volatile(T x) { ! if (_obj == NULL) { GuardUnsafeAccess guard(_thread); RawAccess<MO_SEQ_CST>::store(addr(), normalize_for_write(x)); } else { HeapAccess<MO_SEQ_CST>::store_at(_obj, _offset, normalize_for_write(x)); }
*** 869,890 **** return JNIHandles::make_local(env, res); } UNSAFE_END UNSAFE_ENTRY(jint, Unsafe_CompareAndExchangeInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); ! if (oopDesc::is_null(p)) { volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e); } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e); } } UNSAFE_END UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { oop p = JNIHandles::resolve(obj); ! if (oopDesc::is_null(p)) { volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e); } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e); --- 869,890 ---- return JNIHandles::make_local(env, res); } UNSAFE_END UNSAFE_ENTRY(jint, Unsafe_CompareAndExchangeInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); ! if (p == NULL) { volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e); } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e); } } UNSAFE_END UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { oop p = JNIHandles::resolve(obj); ! if (p == NULL) { volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e); } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e);
*** 900,921 **** return ret == e; } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); ! if (oopDesc::is_null(p)) { volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e) == e; } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e) == e; } } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { oop p = JNIHandles::resolve(obj); ! if (oopDesc::is_null(p)) { volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e) == e; } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e) == e; --- 900,921 ---- return ret == e; } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); ! if (p == NULL) { volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e) == e; } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e) == e; } } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { oop p = JNIHandles::resolve(obj); ! if (p == NULL) { volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset); return RawAccess<>::atomic_cmpxchg(x, addr, e) == e; } else { assert_field_offset_sane(p, offset); return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e) == e;
< prev index next >