20 * questions.
21 *
22 */
23
24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
26
27 #include "memory/barrierSet.hpp"
28
29 class ShenandoahHeap;
30
31 class ShenandoahBarrierSet: public BarrierSet {
32 private:
33
34 ShenandoahHeap* _heap;
35
36 public:
37
38 ShenandoahBarrierSet(ShenandoahHeap* heap);
39
40 void print_on(outputStream* st) const;
41
42 bool is_a(BarrierSet::Name bsn);
43
44 bool has_read_prim_array_opt();
45 bool has_read_prim_barrier();
46 bool has_read_ref_array_opt();
47 bool has_read_ref_barrier();
48 bool has_read_region_opt();
49 bool has_write_prim_array_opt();
50 bool has_write_prim_barrier();
51 bool has_write_ref_array_opt();
52 bool has_write_ref_barrier();
53 bool has_write_ref_pre_barrier();
54 bool has_write_region_opt();
55 bool is_aligned(HeapWord* hw);
56 void read_prim_array(MemRegion mr);
57 void read_prim_field(HeapWord* hw, size_t s);
58 bool read_prim_needs_barrier(HeapWord* hw, size_t s);
59 void read_ref_array(MemRegion mr);
83 // type of the barrier set is known. Note that it is non-virtual.
84 template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal);
85
86 // These are the more general virtual versions.
87 void write_ref_field_pre_work(oop* field, oop new_val);
88 void write_ref_field_pre_work(narrowOop* field, oop new_val);
89 void write_ref_field_pre_work(void* field, oop new_val);
90
91 void write_ref_field_work(void* v, oop o, bool release = false);
92 void write_region_work(MemRegion mr);
93
94 virtual oop read_barrier(oop src);
95
96 static inline oop resolve_forwarded_not_null(oop p);
97 static inline oop resolve_forwarded(oop p);
98
99 virtual oop write_barrier(oop obj);
100 static oopDesc* write_barrier_IRT(oopDesc* src);
101 static oopDesc* write_barrier_JRT(oopDesc* src);
102
103 bool obj_equals(oop obj1, oop obj2);
104 bool obj_equals(narrowOop obj1, narrowOop obj2);
105
106 #ifdef ASSERT
107 virtual void verify_safe_oop(oop p);
108 virtual void verify_safe_oop(narrowOop p);
109 #endif
110
111 private:
112 bool need_update_refs_barrier();
113
114 template <class T>
115 void write_ref_array_loop(HeapWord* start, size_t count);
116
117 #ifndef CC_INTERP
118 public:
119 virtual void interpreter_read_barrier(MacroAssembler* masm, Register dst);
120 virtual void interpreter_read_barrier_not_null(MacroAssembler* masm, Register dst);
121 void interpreter_write_barrier(MacroAssembler* masm, Register dst);
122 void asm_acmp_barrier(MacroAssembler* masm, Register op1, Register op2);
123
124 #endif
125 };
126
127 #endif //SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
|
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
26
27 #include "memory/barrierSet.hpp"
28
29 class ShenandoahHeap;
30
31 class ShenandoahBarrierSet: public BarrierSet {
32 private:
33
34 ShenandoahHeap* _heap;
35
36 public:
37
38 ShenandoahBarrierSet(ShenandoahHeap* heap);
39
40 inline static ShenandoahBarrierSet* barrier_set() {
41 BarrierSet *bs = oopDesc::bs();
42 assert(bs->kind() == BarrierSet::ShenandoahBarrierSet, "sanity");
43 return (ShenandoahBarrierSet*)bs;
44 }
45
46 void print_on(outputStream* st) const;
47
48 bool is_a(BarrierSet::Name bsn);
49
50 bool has_read_prim_array_opt();
51 bool has_read_prim_barrier();
52 bool has_read_ref_array_opt();
53 bool has_read_ref_barrier();
54 bool has_read_region_opt();
55 bool has_write_prim_array_opt();
56 bool has_write_prim_barrier();
57 bool has_write_ref_array_opt();
58 bool has_write_ref_barrier();
59 bool has_write_ref_pre_barrier();
60 bool has_write_region_opt();
61 bool is_aligned(HeapWord* hw);
62 void read_prim_array(MemRegion mr);
63 void read_prim_field(HeapWord* hw, size_t s);
64 bool read_prim_needs_barrier(HeapWord* hw, size_t s);
65 void read_ref_array(MemRegion mr);
89 // type of the barrier set is known. Note that it is non-virtual.
90 template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal);
91
92 // These are the more general virtual versions.
93 void write_ref_field_pre_work(oop* field, oop new_val);
94 void write_ref_field_pre_work(narrowOop* field, oop new_val);
95 void write_ref_field_pre_work(void* field, oop new_val);
96
97 void write_ref_field_work(void* v, oop o, bool release = false);
98 void write_region_work(MemRegion mr);
99
100 virtual oop read_barrier(oop src);
101
102 static inline oop resolve_forwarded_not_null(oop p);
103 static inline oop resolve_forwarded(oop p);
104
105 virtual oop write_barrier(oop obj);
106 static oopDesc* write_barrier_IRT(oopDesc* src);
107 static oopDesc* write_barrier_JRT(oopDesc* src);
108
109 oop write_barrier_mutator(oop obj);
110
111 bool obj_equals(oop obj1, oop obj2);
112 bool obj_equals(narrowOop obj1, narrowOop obj2);
113
114 void enqueue(oop obj);
115
116 private:
117 inline bool need_update_refs_barrier();
118
119 template <class T>
120 void write_ref_array_loop(HeapWord* start, size_t count);
121
122 #ifndef CC_INTERP
123 public:
124 virtual void interpreter_read_barrier(MacroAssembler* masm, Register dst);
125 virtual void interpreter_read_barrier_not_null(MacroAssembler* masm, Register dst);
126 void interpreter_write_barrier(MacroAssembler* masm, Register dst);
127 void asm_acmp_barrier(MacroAssembler* masm, Register op1, Register op2);
128
129 #endif
130 };
131
132 #endif //SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
|