inline void PSPromotionManager::claim_or_forward_internal_breadth(T* p) {
  if (p != NULL) { // XXX: error if p != NULL here
    oop o = oopDesc::load_decode_heap_oop_not_null(p);
    if (o->is_forwarded()) {
      o = o->forwardee();
    } else {
      o = copy_to_survivor_space(o, false);
    }
    // Card mark
    if (PSScavenge::is_obj_in_young((HeapWord*) o)) {
      PSScavenge::card_table()->inline_write_ref_field_gc(p, o);
    }
    oopDesc::encode_store_heap_oop_not_null(p, o);
  }
}
inline void PSPromotionManager::claim_or_forward_internal_breadth(heapRef* p) {
  if (p != NULL) {
objectRef pref=ALWAYS_UNPOISON_OBJECTREF(*p);
    oop o = pref.as_oop();
    heapRef fref = o->is_forwarded()
      ? (heapRef)o->forwarded_ref()
      : copy_to_survivor_space(o, false, p);
    
    // Card mark
if(fref.is_new()){
PSScavenge::card_table()->inline_write_ref_field_gc(p,fref.as_oop());
    }
    POISON_AND_STORE_REF(p,fref);
  }
}