< prev index next >

src/share/vm/prims/unsafe.cpp

Print this page
rev 11906 : 8165018: Missing memory barrier for PPC64 in Unsafe_GetObjectVolatile
Reviewed-by:


 307   return ret;
 308 } UNSAFE_END
 309 
 310 UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
 311   oop x = JNIHandles::resolve(x_h);
 312   oop p = JNIHandles::resolve(obj);
 313 
 314   if (UseCompressedOops) {
 315     oop_store((narrowOop*)index_oop_from_field_offset_long(p, offset), x);
 316   } else {
 317     oop_store((oop*)index_oop_from_field_offset_long(p, offset), x);
 318   }
 319 } UNSAFE_END
 320 
 321 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
 322   oop p = JNIHandles::resolve(obj);
 323   void* addr = index_oop_from_field_offset_long(p, offset);
 324 
 325   volatile oop v;
 326 




 327   if (UseCompressedOops) {
 328     volatile narrowOop n = *(volatile narrowOop*) addr;
 329     (void)const_cast<oop&>(v = oopDesc::decode_heap_oop(n));
 330   } else {
 331     (void)const_cast<oop&>(v = *(volatile oop*) addr);
 332   }
 333 
 334   OrderAccess::acquire();
 335   return JNIHandles::make_local(env, v);
 336 } UNSAFE_END
 337 
 338 UNSAFE_ENTRY(void, Unsafe_PutObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
 339   oop x = JNIHandles::resolve(x_h);
 340   oop p = JNIHandles::resolve(obj);
 341   void* addr = index_oop_from_field_offset_long(p, offset);
 342   OrderAccess::release();
 343 
 344   if (UseCompressedOops) {
 345     oop_store((narrowOop*)addr, x);
 346   } else {




 307   return ret;
 308 } UNSAFE_END
 309 
 310 UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
 311   oop x = JNIHandles::resolve(x_h);
 312   oop p = JNIHandles::resolve(obj);
 313 
 314   if (UseCompressedOops) {
 315     oop_store((narrowOop*)index_oop_from_field_offset_long(p, offset), x);
 316   } else {
 317     oop_store((oop*)index_oop_from_field_offset_long(p, offset), x);
 318   }
 319 } UNSAFE_END
 320 
 321 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
 322   oop p = JNIHandles::resolve(obj);
 323   void* addr = index_oop_from_field_offset_long(p, offset);
 324 
 325   volatile oop v;
 326 
 327   if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
 328     OrderAccess::fence();
 329   }
 330 
 331   if (UseCompressedOops) {
 332     volatile narrowOop n = *(volatile narrowOop*) addr;
 333     (void)const_cast<oop&>(v = oopDesc::decode_heap_oop(n));
 334   } else {
 335     (void)const_cast<oop&>(v = *(volatile oop*) addr);
 336   }
 337 
 338   OrderAccess::acquire();
 339   return JNIHandles::make_local(env, v);
 340 } UNSAFE_END
 341 
 342 UNSAFE_ENTRY(void, Unsafe_PutObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
 343   oop x = JNIHandles::resolve(x_h);
 344   oop p = JNIHandles::resolve(obj);
 345   void* addr = index_oop_from_field_offset_long(p, offset);
 346   OrderAccess::release();
 347 
 348   if (UseCompressedOops) {
 349     oop_store((narrowOop*)addr, x);
 350   } else {


< prev index next >