< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahForwarding.inline.hpp

Print this page




  38   markWord mark = obj->mark_raw();
  39   if (MarkWord::is_marked(mark)) {
  40     return (HeapWord*) MarkWord::clear_lock_bits(mark);
  41   } else {
  42     return (HeapWord*) obj;
  43   }
  44 }
  45 
  46 inline oop ShenandoahForwarding::get_forwardee(oop obj) {
  47   shenandoah_assert_correct(NULL, obj);
  48   return oop(get_forwardee_raw_unchecked(obj));
  49 }
  50 
  51 inline bool ShenandoahForwarding::is_forwarded(oop obj) {
  52   return MarkWord::is_marked(obj->mark_raw());
  53 }
  54 
  55 inline oop ShenandoahForwarding::try_update_forwardee(oop obj, oop update) {
  56   markWord old_mark = obj->mark_raw();
  57   if (MarkWord::is_marked(old_mark)) {
  58     return (oop) MarkWord::clear_lock_bits(old_mark);
  59   }
  60 
  61   markWord new_mark = MarkWord::encode_pointer_as_mark(update);
  62   markWord prev_mark = obj->cas_set_mark_raw(new_mark, old_mark);
  63   if (prev_mark == old_mark) {
  64     return update;
  65   } else {
  66     return (oop) MarkWord::clear_lock_bits(prev_mark);
  67   }
  68 }
  69 
  70 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHFORWARDING_INLINE_HPP


  38   markWord mark = obj->mark_raw();
  39   if (MarkWord::is_marked(mark)) {
  40     return (HeapWord*) MarkWord::clear_lock_bits(mark);
  41   } else {
  42     return (HeapWord*) obj;
  43   }
  44 }
  45 
  46 inline oop ShenandoahForwarding::get_forwardee(oop obj) {
  47   shenandoah_assert_correct(NULL, obj);
  48   return oop(get_forwardee_raw_unchecked(obj));
  49 }
  50 
  51 inline bool ShenandoahForwarding::is_forwarded(oop obj) {
  52   return MarkWord::is_marked(obj->mark_raw());
  53 }
  54 
  55 inline oop ShenandoahForwarding::try_update_forwardee(oop obj, oop update) {
  56   markWord old_mark = obj->mark_raw();
  57   if (MarkWord::is_marked(old_mark)) {
  58     return oop(reinterpret_cast<oopDesc*>(MarkWord::clear_lock_bits(old_mark)));
  59   }
  60 
  61   markWord new_mark = MarkWord::encode_pointer_as_mark(update);
  62   markWord prev_mark = obj->cas_set_mark_raw(new_mark, old_mark);
  63   if (prev_mark == old_mark) {
  64     return update;
  65   } else {
  66     return oop(reinterpret_cast<oopDesc*>(MarkWord::clear_lock_bits(prev_mark)));
  67   }
  68 }
  69 
  70 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHFORWARDING_INLINE_HPP
< prev index next >