69 void write_ref_array_pre(oop* dst, size_t count, bool dest_uninitialized);
70
71 void write_ref_array_pre(narrowOop* dst, size_t count, bool dest_uninitialized);
72
73 // We export this to make it available in cases where the static
74 // type of the barrier set is known. Note that it is non-virtual.
75 template <class T> inline void inline_write_ref_field_pre(T* field, oop new_val);
76
77 // These are the more general virtual versions.
78 void write_ref_field_pre_work(oop* field, oop new_val);
79 void write_ref_field_pre_work(narrowOop* field, oop new_val);
80 void write_ref_field_pre_work(void* field, oop new_val);
81
82 void write_ref_field_work(void* v, oop o, bool release = false);
83 void write_region(MemRegion mr);
84
85 virtual void on_thread_create(Thread* thread);
86 virtual void on_thread_destroy(Thread* thread);
87 virtual void on_thread_attach(Thread* thread);
88 virtual void on_thread_detach(Thread* thread);
89
90 static inline oop resolve_forwarded_not_null(oop p);
91 static inline oop resolve_forwarded(oop p);
92
93 void storeval_barrier(oop obj);
94 void keep_alive_barrier(oop obj);
95
96 oop load_reference_barrier(oop obj);
97 oop load_reference_barrier_mutator(oop obj);
98 oop load_reference_barrier_not_null(oop obj);
99
100 void enqueue(oop obj);
101
102 private:
103 inline bool need_update_refs_barrier();
104
105 template <class T, bool STOREVAL_WRITE_BARRIER>
106 void write_ref_array_loop(HeapWord* start, size_t count);
107
108 oop load_reference_barrier_impl(oop obj);
|
69 void write_ref_array_pre(oop* dst, size_t count, bool dest_uninitialized);
70
71 void write_ref_array_pre(narrowOop* dst, size_t count, bool dest_uninitialized);
72
73 // We export this to make it available in cases where the static
74 // type of the barrier set is known. Note that it is non-virtual.
75 template <class T> inline void inline_write_ref_field_pre(T* field, oop new_val);
76
77 // These are the more general virtual versions.
78 void write_ref_field_pre_work(oop* field, oop new_val);
79 void write_ref_field_pre_work(narrowOop* field, oop new_val);
80 void write_ref_field_pre_work(void* field, oop new_val);
81
82 void write_ref_field_work(void* v, oop o, bool release = false);
83 void write_region(MemRegion mr);
84
85 virtual void on_thread_create(Thread* thread);
86 virtual void on_thread_destroy(Thread* thread);
87 virtual void on_thread_attach(Thread* thread);
88 virtual void on_thread_detach(Thread* thread);
89 virtual bool needs_sts_sync_on_attach_detach() { return true; }
90
91 static inline oop resolve_forwarded_not_null(oop p);
92 static inline oop resolve_forwarded(oop p);
93
94 void storeval_barrier(oop obj);
95 void keep_alive_barrier(oop obj);
96
97 oop load_reference_barrier(oop obj);
98 oop load_reference_barrier_mutator(oop obj);
99 oop load_reference_barrier_not_null(oop obj);
100
101 void enqueue(oop obj);
102
103 private:
104 inline bool need_update_refs_barrier();
105
106 template <class T, bool STOREVAL_WRITE_BARRIER>
107 void write_ref_array_loop(HeapWord* start, size_t count);
108
109 oop load_reference_barrier_impl(oop obj);
|