< prev index next >

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

Print this page
rev 55292 : NativeAccess barrier

*** 23,32 **** --- 23,33 ---- #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_INLINE_HPP #define SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_INLINE_HPP #include "gc/shared/barrierSet.hpp" + #include "gc/shenandoah/shenandoahAsserts.hpp" #include "gc/shenandoah/shenandoahBarrierSet.hpp" #include "gc/shenandoah/shenandoahForwarding.inline.hpp" #include "gc/shenandoah/shenandoahHeap.inline.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp"
*** 63,73 **** template <DecoratorSet decorators, typename BarrierSetT> template <typename T> inline oop ShenandoahBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_not_in_heap(T* addr) { oop value = Raw::oop_load_not_in_heap(addr); ! value = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(value); keep_alive_if_weak(decorators, value); return value; } template <DecoratorSet decorators, typename BarrierSetT> --- 64,84 ---- template <DecoratorSet decorators, typename BarrierSetT> template <typename T> inline oop ShenandoahBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_not_in_heap(T* addr) { oop value = Raw::oop_load_not_in_heap(addr); ! if (CompressedOops::is_null(value)) return value; ! ! ShenandoahHeap* const heap = ShenandoahHeap::heap(); ! if (heap->is_gc_in_progress_mask(ShenandoahHeap::EVACUATION)) { ! ShenandoahMarkingContext* const marking_context = heap->complete_marking_context(); ! if (!marking_context->is_marked(value)) { ! return NULL; ! } ! } ! ! value = ShenandoahBarrierSet::barrier_set()->load_reference_barrier_not_null(value); keep_alive_if_weak(decorators, value); return value; } template <DecoratorSet decorators, typename BarrierSetT>
*** 76,87 **** ShenandoahBarrierSet::barrier_set()->storeval_barrier(value); const bool keep_alive = (decorators & AS_NO_KEEPALIVE) == 0; if (keep_alive) { ShenandoahBarrierSet::barrier_set()->write_ref_field_pre_work(addr, value); } ! Raw::oop_store_in_heap(addr, value); } template <DecoratorSet decorators, typename BarrierSetT> inline void ShenandoahBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) { oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value); } --- 87,112 ---- ShenandoahBarrierSet::barrier_set()->storeval_barrier(value); const bool keep_alive = (decorators & AS_NO_KEEPALIVE) == 0; if (keep_alive) { ShenandoahBarrierSet::barrier_set()->write_ref_field_pre_work(addr, value); } ! Raw::oop_store(addr, value); ! } ! ! #ifdef ASSERT ! template <DecoratorSet decorators, typename BarrierSetT> ! template <typename T> ! inline void ShenandoahBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_store_not_in_heap(T* addr, oop value) { ! ShenandoahHeap* const heap = ShenandoahHeap::heap(); ! if (!CompressedOops::is_null(value) && ! heap->is_gc_in_progress_mask(ShenandoahHeap::EVACUATION)) { ! shenandoah_assert_marked(NULL, value); ! } ! ! Raw::oop_store(addr, value); } + #endif template <DecoratorSet decorators, typename BarrierSetT> inline void ShenandoahBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) { oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value); }
< prev index next >