< prev index next >

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

Print this page




 267 // not headers.
 268 inline oop oopDesc::atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest) {
 269   if (UseCompressedOops) {
 270     // encode exchange value from oop to T
 271     narrowOop val = encode_heap_oop(exchange_value);
 272     narrowOop old = (narrowOop)Atomic::xchg(val, (narrowOop*)dest);
 273     // decode old from T to oop
 274     return decode_heap_oop(old);
 275   } else {
 276     return (oop)Atomic::xchg_ptr(exchange_value, (oop*)dest);
 277   }
 278 }
 279 
 280 // In order to put or get a field out of an instance, must first check
 281 // if the field has been compressed and uncompress it.
 282 inline oop oopDesc::obj_field(int offset) const {
 283   return UseCompressedOops ?
 284     load_decode_heap_oop(obj_field_addr<narrowOop>(offset)) :
 285     load_decode_heap_oop(obj_field_addr<oop>(offset));
 286 }
 287 inline volatile oop oopDesc::obj_field_volatile(int offset) const {
 288   volatile oop value = obj_field(offset);
 289   OrderAccess::acquire();
 290   return value;
 291 }
 292 inline void oopDesc::obj_field_put(int offset, oop value) {
 293   UseCompressedOops ? oop_store(obj_field_addr<narrowOop>(offset), value) :
 294                       oop_store(obj_field_addr<oop>(offset),       value);
 295 }
 296 
 297 inline Metadata* oopDesc::metadata_field(int offset) const {
 298   return *metadata_field_addr(offset);
 299 }
 300 
 301 inline void oopDesc::metadata_field_put(int offset, Metadata* value) {
 302   *metadata_field_addr(offset) = value;
 303 }
 304 
 305 inline void oopDesc::obj_field_put_raw(int offset, oop value) {
 306   UseCompressedOops ?
 307     encode_store_heap_oop(obj_field_addr<narrowOop>(offset), value) :
 308     encode_store_heap_oop(obj_field_addr<oop>(offset),       value);
 309 }
 310 inline void oopDesc::obj_field_put_volatile(int offset, oop value) {
 311   OrderAccess::release();




 267 // not headers.
 268 inline oop oopDesc::atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest) {
 269   if (UseCompressedOops) {
 270     // encode exchange value from oop to T
 271     narrowOop val = encode_heap_oop(exchange_value);
 272     narrowOop old = (narrowOop)Atomic::xchg(val, (narrowOop*)dest);
 273     // decode old from T to oop
 274     return decode_heap_oop(old);
 275   } else {
 276     return (oop)Atomic::xchg_ptr(exchange_value, (oop*)dest);
 277   }
 278 }
 279 
 280 // In order to put or get a field out of an instance, must first check
 281 // if the field has been compressed and uncompress it.
 282 inline oop oopDesc::obj_field(int offset) const {
 283   return UseCompressedOops ?
 284     load_decode_heap_oop(obj_field_addr<narrowOop>(offset)) :
 285     load_decode_heap_oop(obj_field_addr<oop>(offset));
 286 }





 287 inline void oopDesc::obj_field_put(int offset, oop value) {
 288   UseCompressedOops ? oop_store(obj_field_addr<narrowOop>(offset), value) :
 289                       oop_store(obj_field_addr<oop>(offset),       value);
 290 }
 291 
 292 inline Metadata* oopDesc::metadata_field(int offset) const {
 293   return *metadata_field_addr(offset);
 294 }
 295 
 296 inline void oopDesc::metadata_field_put(int offset, Metadata* value) {
 297   *metadata_field_addr(offset) = value;
 298 }
 299 
 300 inline void oopDesc::obj_field_put_raw(int offset, oop value) {
 301   UseCompressedOops ?
 302     encode_store_heap_oop(obj_field_addr<narrowOop>(offset), value) :
 303     encode_store_heap_oop(obj_field_addr<oop>(offset),       value);
 304 }
 305 inline void oopDesc::obj_field_put_volatile(int offset, oop value) {
 306   OrderAccess::release();


< prev index next >