equal
deleted
inserted
replaced
260 gclab->retire(); |
260 gclab->retire(); |
261 } |
261 } |
262 } |
262 } |
263 } |
263 } |
264 |
264 |
265 oop ShenandoahBarrierSet::oop_load_from_native_barrier(oop obj) { |
265 oop ShenandoahBarrierSet::oop_load_from_native_barrier(oop obj, oop* load_addr) { |
266 if (CompressedOops::is_null(obj)) { |
266 if (CompressedOops::is_null(obj)) { |
267 return NULL; |
267 return NULL; |
268 } |
268 } |
269 |
269 |
270 ShenandoahMarkingContext* const marking_context = _heap->marking_context(); |
270 ShenandoahMarkingContext* const marking_context = _heap->marking_context(); |
275 } else { |
275 } else { |
276 return obj; |
276 return obj; |
277 } |
277 } |
278 } |
278 } |
279 |
279 |
280 return load_reference_barrier_not_null(obj); |
280 oop fwd = load_reference_barrier_not_null(obj); |
|
281 if (load_addr != NULL && fwd != obj) { |
|
282 // Since we are here and we know the load address, update the reference. |
|
283 ShenandoahHeap::cas_oop(fwd, load_addr, obj); |
|
284 } |
|
285 |
|
286 return fwd; |
281 } |
287 } |
282 |
288 |
283 void ShenandoahBarrierSet::clone_barrier_runtime(oop src) { |
289 void ShenandoahBarrierSet::clone_barrier_runtime(oop src) { |
284 if (_heap->has_forwarded_objects()) { |
290 if (_heap->has_forwarded_objects()) { |
285 clone_barrier(src); |
291 clone_barrier(src); |