87
88 CardTable* card_table() const { return _card_table; }
89
90 virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
91
92 virtual void print_on(outputStream* st) const;
93
94 template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
95 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
96 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
97
98 public:
99 template <typename T>
100 static void oop_store_in_heap(T* addr, oop value);
101 template <typename T>
102 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
103 template <typename T>
104 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
105
106 template <typename T>
107 static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
108 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
109 size_t length);
110
111 static void clone_in_heap(oop src, oop dst, size_t size);
112
113 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
114 oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value);
115 }
116
117 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) {
118 return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), new_value);
119 }
120
121 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) {
122 return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), compare_value, new_value);
123 }
124 };
125 };
126
127 template<>
128 struct BarrierSet::GetName<CardTableBarrierSet> {
129 static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
130 };
131
132 template<>
133 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
134 typedef ::CardTableBarrierSet type;
135 };
136
137 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
|
87
88 CardTable* card_table() const { return _card_table; }
89
90 virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
91
92 virtual void print_on(outputStream* st) const;
93
94 template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
95 class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
96 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
97
98 public:
99 template <typename T>
100 static void oop_store_in_heap(T* addr, oop value);
101 template <typename T>
102 static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
103 template <typename T>
104 static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
105
106 template <typename T>
107 static void oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
108 arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
109 size_t length);
110 private:
111 // Failing checkcast or check null during copy, still needs barrier
112 template <typename T>
113 static inline void oop_arraycopy_partial_barrier(BarrierSetT *bs, T* dst_raw, T* p);
114 public:
115
116 static void clone_in_heap(oop src, oop dst, size_t size);
117
118 static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
119 oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value);
120 }
121
122 static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) {
123 return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), new_value);
124 }
125
126 static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) {
127 return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), compare_value, new_value);
128 }
129
130 static void value_copy_in_heap(void* src, void* dst, InlineKlass* md, LayoutKind lk);
131 };
132 };
133
134 template<>
135 struct BarrierSet::GetName<CardTableBarrierSet> {
136 static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
137 };
138
139 template<>
140 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
141 typedef ::CardTableBarrierSet type;
142 };
143
144 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
|