< prev index next >

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

Print this page
rev 56289 : 8231086: Shenandoah: Stronger invariant for object-arraycopy

*** 61,78 **** bool is_a(BarrierSet::Name bsn); bool is_aligned(HeapWord* hw); - void write_ref_array(HeapWord* start, size_t count); - template <class T> void ! write_ref_array_pre_work(T* dst, size_t count); ! ! void write_ref_array_pre(oop* dst, size_t count, bool dest_uninitialized); ! void write_ref_array_pre(narrowOop* dst, size_t count, bool dest_uninitialized); // We export this to make it available in cases where the static // type of the barrier set is known. Note that it is non-virtual. template <class T> inline void inline_write_ref_field_pre(T* field, oop new_val); --- 61,78 ---- bool is_a(BarrierSet::Name bsn); bool is_aligned(HeapWord* hw); template <class T> void ! write_ref_array_pre_work(T* src, T* dst, size_t count, bool dest_uninitialized); ! inline void arraycopy_pre(oop* src, oop* dst, size_t count); ! inline void arraycopy_pre(narrowOop* src, narrowOop* dst, size_t count); ! inline void arraycopy_update(oop* src, size_t count); ! inline void arraycopy_update(narrowOop* src, size_t count); ! inline void clone_barrier(oop src); // We export this to make it available in cases where the static // type of the barrier set is known. Note that it is non-virtual. template <class T> inline void inline_write_ref_field_pre(T* field, oop new_val);
*** 80,90 **** void write_ref_field_pre_work(oop* field, oop new_val); void write_ref_field_pre_work(narrowOop* field, oop new_val); void write_ref_field_pre_work(void* field, oop new_val); void write_ref_field_work(void* v, oop o, bool release = false); - void write_region(MemRegion mr); oop oop_load_from_native_barrier(oop obj); virtual void on_thread_create(Thread* thread); virtual void on_thread_destroy(Thread* thread); --- 80,89 ----
*** 102,113 **** oop load_reference_barrier_not_null(oop obj); void enqueue(oop obj); private: ! template <class T, bool STOREVAL_WRITE_BARRIER> ! void write_ref_array_loop(HeapWord* start, size_t count); oop load_reference_barrier_impl(oop obj); static void keep_alive_if_weak(DecoratorSet decorators, oop value) { assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Reference strength must be known"); --- 101,116 ---- oop load_reference_barrier_not_null(oop obj); void enqueue(oop obj); private: ! template <class T> ! inline void arraycopy_pre_work(T* src, T* dst, size_t count); ! template <class T, bool HAS_FWD, bool EVAC, bool ENQUEUE> ! inline void arraycopy_work(T* src, size_t count); ! template <class T> ! inline void arraycopy_update_impl(T* src, size_t count); oop load_reference_barrier_impl(oop obj); static void keep_alive_if_weak(DecoratorSet decorators, oop value) { assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Reference strength must be known");
*** 116,143 **** if (!peek && !on_strong_oop_ref && value != NULL) { ShenandoahBarrierSet::barrier_set()->keep_alive_barrier(value); } } - template <typename T> - bool arraycopy_loop_1(T* src, T* dst, size_t length, Klass* bound, - bool checkcast, bool satb, bool disjoint, ShenandoahBarrierSet::ArrayCopyStoreValMode storeval_mode); - - template <typename T, bool CHECKCAST> - bool arraycopy_loop_2(T* src, T* dst, size_t length, Klass* bound, - bool satb, bool disjoint, ShenandoahBarrierSet::ArrayCopyStoreValMode storeval_mode); - - template <typename T, bool CHECKCAST, bool SATB> - bool arraycopy_loop_3(T* src, T* dst, size_t length, Klass* bound, - bool disjoint, ShenandoahBarrierSet::ArrayCopyStoreValMode storeval_mode); - - template <typename T, bool CHECKCAST, bool SATB, ShenandoahBarrierSet::ArrayCopyStoreValMode STOREVAL_MODE> - bool arraycopy_loop(T* src, T* dst, size_t length, Klass* bound, bool disjoint); - - template <typename T, bool CHECKCAST, bool SATB, ShenandoahBarrierSet::ArrayCopyStoreValMode STOREVAL_MODE> - bool arraycopy_element(T* cur_src, T* cur_dst, Klass* bound, Thread* const thread, ShenandoahMarkingContext* const ctx); - public: // Callbacks for runtime accesses. template <DecoratorSet decorators, typename BarrierSetT = ShenandoahBarrierSet> class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> { typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw; --- 119,128 ----
< prev index next >