< prev index next >

src/hotspot/share/oops/oop.inline.hpp

Print this page




 371   // heap oop is not pointer sized.
 372   OrderAccess::release_store(p, encode_heap_oop_not_null(v));
 373 }
 374 void oopDesc::release_encode_store_heap_oop_not_null(volatile oop* p, oop v) {
 375   OrderAccess::release_store(p, v);
 376 }
 377 
 378 void oopDesc::release_encode_store_heap_oop(volatile oop* p, oop v) {
 379   OrderAccess::release_store(p, v);
 380 }
 381 void oopDesc::release_encode_store_heap_oop(volatile narrowOop* p, oop v) {
 382   OrderAccess::release_store(p, encode_heap_oop(v));
 383 }
 384 
 385 // These functions are only used to exchange oop fields in instances,
 386 // not headers.
 387 oop oopDesc::atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest) {
 388   if (UseCompressedOops) {
 389     // encode exchange value from oop to T
 390     narrowOop val = encode_heap_oop(exchange_value);
 391     narrowOop old = (narrowOop)Atomic::xchg(val, (narrowOop*)dest);
 392     // decode old from T to oop
 393     return decode_heap_oop(old);
 394   } else {
 395     return Atomic::xchg(exchange_value, (oop*)dest);
 396   }
 397 }
 398 
 399 oop oopDesc::atomic_compare_exchange_oop(oop exchange_value,
 400                                          volatile HeapWord *dest,
 401                                          oop compare_value,
 402                                          bool prebarrier) {
 403   if (UseCompressedOops) {
 404     if (prebarrier) {
 405       update_barrier_set_pre((narrowOop*)dest, exchange_value);
 406     }
 407     // encode exchange and compare value from oop to T
 408     narrowOop val = encode_heap_oop(exchange_value);
 409     narrowOop cmp = encode_heap_oop(compare_value);
 410 
 411     narrowOop old = Atomic::cmpxchg(val, (narrowOop*)dest, cmp);




 371   // heap oop is not pointer sized.
 372   OrderAccess::release_store(p, encode_heap_oop_not_null(v));
 373 }
 374 void oopDesc::release_encode_store_heap_oop_not_null(volatile oop* p, oop v) {
 375   OrderAccess::release_store(p, v);
 376 }
 377 
 378 void oopDesc::release_encode_store_heap_oop(volatile oop* p, oop v) {
 379   OrderAccess::release_store(p, v);
 380 }
 381 void oopDesc::release_encode_store_heap_oop(volatile narrowOop* p, oop v) {
 382   OrderAccess::release_store(p, encode_heap_oop(v));
 383 }
 384 
 385 // These functions are only used to exchange oop fields in instances,
 386 // not headers.
 387 oop oopDesc::atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest) {
 388   if (UseCompressedOops) {
 389     // encode exchange value from oop to T
 390     narrowOop val = encode_heap_oop(exchange_value);
 391     narrowOop old = Atomic::xchg(val, (narrowOop*)dest);
 392     // decode old from T to oop
 393     return decode_heap_oop(old);
 394   } else {
 395     return Atomic::xchg(exchange_value, (oop*)dest);
 396   }
 397 }
 398 
 399 oop oopDesc::atomic_compare_exchange_oop(oop exchange_value,
 400                                          volatile HeapWord *dest,
 401                                          oop compare_value,
 402                                          bool prebarrier) {
 403   if (UseCompressedOops) {
 404     if (prebarrier) {
 405       update_barrier_set_pre((narrowOop*)dest, exchange_value);
 406     }
 407     // encode exchange and compare value from oop to T
 408     narrowOop val = encode_heap_oop(exchange_value);
 409     narrowOop cmp = encode_heap_oop(compare_value);
 410 
 411     narrowOop old = Atomic::cmpxchg(val, (narrowOop*)dest, cmp);


< prev index next >