oop unmask_chunked_array_oop(StarTask p) { assert(is_oop_masked(p), "invariant"); assert(!p.is_narrow(), "chunked array oops cannot be narrow"); oop *chunk = (oop*)p; // cast p to oop (uses conversion operator) oop ret = oop((oop*)((uintptr_t)chunk & ~PS_CHUNKED_ARRAY_OOP_MASK)); assert(!is_oop_masked((oop*) ret), "invariant"); return ret; }
inline void PSPromotionManager::process_popped_location_depth(StarTask p) { if (is_oop_masked(p)) { assert(PSChunkLargeArrays, "invariant"); oop const old = unmask_chunked_array_oop(p); process_array_chunk(old); } else { if (p.is_narrow()) { PSScavenge::copy_and_push_safe_barrier(this, (narrowOop*)p); } else { PSScavenge::copy_and_push_safe_barrier(this, (oop*)p); } } }
oop* mask_chunked_array_oop(oop obj) { assert(!is_oop_masked((oop*) obj), "invariant"); oop* ret = (oop*) ((uintptr_t)obj | PS_CHUNKED_ARRAY_OOP_MASK); assert(is_oop_masked(ret), "invariant"); return ret; }
void PSPromotionManager::record_steal(StarTask& p) { if (is_oop_masked(p)) { ++_masked_steals; } }