< prev index next >

src/hotspot/share/prims/unsafe.cpp

Print this page
rev 49250 : [mq]: JDK-8199781.patch


 880   }
 881 } UNSAFE_END
 882 
 883 UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
 884   oop p = JNIHandles::resolve(obj);
 885   if (oopDesc::is_null(p)) {
 886     volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
 887     return RawAccess<>::atomic_cmpxchg(x, addr, e);
 888   } else {
 889     assert_field_offset_sane(p, offset);
 890     return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e);
 891   }
 892 } UNSAFE_END
 893 
 894 UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) {
 895   oop x = JNIHandles::resolve(x_h);
 896   oop e = JNIHandles::resolve(e_h);
 897   oop p = JNIHandles::resolve(obj);
 898   assert_field_offset_sane(p, offset);
 899   oop ret = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e);
 900   return ret == e;
 901 } UNSAFE_END
 902 
 903 UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) {
 904   oop p = JNIHandles::resolve(obj);
 905   if (oopDesc::is_null(p)) {
 906     volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset);
 907     return RawAccess<>::atomic_cmpxchg(x, addr, e) == e;
 908   } else {
 909     assert_field_offset_sane(p, offset);
 910     return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e) == e;
 911   }
 912 } UNSAFE_END
 913 
 914 UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
 915   oop p = JNIHandles::resolve(obj);
 916   if (oopDesc::is_null(p)) {
 917     volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
 918     return RawAccess<>::atomic_cmpxchg(x, addr, e) == e;
 919   } else {
 920     assert_field_offset_sane(p, offset);




 880   }
 881 } UNSAFE_END
 882 
 883 UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
 884   oop p = JNIHandles::resolve(obj);
 885   if (oopDesc::is_null(p)) {
 886     volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
 887     return RawAccess<>::atomic_cmpxchg(x, addr, e);
 888   } else {
 889     assert_field_offset_sane(p, offset);
 890     return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e);
 891   }
 892 } UNSAFE_END
 893 
 894 UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) {
 895   oop x = JNIHandles::resolve(x_h);
 896   oop e = JNIHandles::resolve(e_h);
 897   oop p = JNIHandles::resolve(obj);
 898   assert_field_offset_sane(p, offset);
 899   oop ret = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e);
 900   return oopDesc::equals(ret, e);
 901 } UNSAFE_END
 902 
 903 UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) {
 904   oop p = JNIHandles::resolve(obj);
 905   if (oopDesc::is_null(p)) {
 906     volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset);
 907     return RawAccess<>::atomic_cmpxchg(x, addr, e) == e;
 908   } else {
 909     assert_field_offset_sane(p, offset);
 910     return HeapAccess<>::atomic_cmpxchg_at(x, p, (ptrdiff_t)offset, e) == e;
 911   }
 912 } UNSAFE_END
 913 
 914 UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
 915   oop p = JNIHandles::resolve(obj);
 916   if (oopDesc::is_null(p)) {
 917     volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
 918     return RawAccess<>::atomic_cmpxchg(x, addr, e) == e;
 919   } else {
 920     assert_field_offset_sane(p, offset);


< prev index next >