40 };
41 private:
42
43 ShenandoahHeap* _heap;
44 BufferNode::Allocator _satb_mark_queue_buffer_allocator;
45 ShenandoahSATBMarkQueueSet _satb_mark_queue_set;
46
47 public:
48 ShenandoahBarrierSet(ShenandoahHeap* heap);
49
50 static ShenandoahBarrierSetAssembler* assembler();
51
52 inline static ShenandoahBarrierSet* barrier_set() {
53 return barrier_set_cast<ShenandoahBarrierSet>(BarrierSet::barrier_set());
54 }
55
56 static ShenandoahSATBMarkQueueSet& satb_mark_queue_set() {
57 return barrier_set()->_satb_mark_queue_set;
58 }
59
60 void print_on(outputStream* st) const;
61
62 bool is_a(BarrierSet::Name bsn);
63
64 bool is_aligned(HeapWord* hw);
65
66 template <class T> void
67 write_ref_array_pre_work(T* src, T* dst, size_t count, bool dest_uninitialized);
68
69 inline void arraycopy_pre(oop* src, oop* dst, size_t count);
70 inline void arraycopy_pre(narrowOop* src, narrowOop* dst, size_t count);
71 inline void arraycopy_update(oop* src, size_t count);
72 inline void arraycopy_update(narrowOop* src, size_t count);
73 inline void clone_barrier(oop src);
74 void clone_barrier_runtime(oop src);
75
76 // We export this to make it available in cases where the static
77 // type of the barrier set is known. Note that it is non-virtual.
78 template <class T> inline void inline_write_ref_field_pre(T* field, oop new_val);
79
|
40 };
41 private:
42
43 ShenandoahHeap* _heap;
44 BufferNode::Allocator _satb_mark_queue_buffer_allocator;
45 ShenandoahSATBMarkQueueSet _satb_mark_queue_set;
46
47 public:
48 ShenandoahBarrierSet(ShenandoahHeap* heap);
49
50 static ShenandoahBarrierSetAssembler* assembler();
51
52 inline static ShenandoahBarrierSet* barrier_set() {
53 return barrier_set_cast<ShenandoahBarrierSet>(BarrierSet::barrier_set());
54 }
55
56 static ShenandoahSATBMarkQueueSet& satb_mark_queue_set() {
57 return barrier_set()->_satb_mark_queue_set;
58 }
59
60 static bool need_load_reference_barrier(DecoratorSet decorators, BasicType type);
61 static bool use_native_load_reference_barrier(DecoratorSet decorators, BasicType type);
62 static bool need_keep_alive_barrier(DecoratorSet decorators, BasicType type);
63
64 void print_on(outputStream* st) const;
65
66 bool is_a(BarrierSet::Name bsn);
67
68 bool is_aligned(HeapWord* hw);
69
70 template <class T> void
71 write_ref_array_pre_work(T* src, T* dst, size_t count, bool dest_uninitialized);
72
73 inline void arraycopy_pre(oop* src, oop* dst, size_t count);
74 inline void arraycopy_pre(narrowOop* src, narrowOop* dst, size_t count);
75 inline void arraycopy_update(oop* src, size_t count);
76 inline void arraycopy_update(narrowOop* src, size_t count);
77 inline void clone_barrier(oop src);
78 void clone_barrier_runtime(oop src);
79
80 // We export this to make it available in cases where the static
81 // type of the barrier set is known. Note that it is non-virtual.
82 template <class T> inline void inline_write_ref_field_pre(T* field, oop new_val);
83
|