< prev index next >

src/hotspot/share/gc/shared/cardTableBarrierSet.hpp

Print this page

102   virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
103 
104   virtual void print_on(outputStream* st) const;
105 
106   template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
107   class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
108     typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
109 
110   public:
111     template <typename T>
112     static void oop_store_in_heap(T* addr, oop value);
113     template <typename T>
114     static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
115     template <typename T>
116     static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
117 
118     template <typename T>
119     static OopCopyResult oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
120                                                arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
121                                                size_t length);





122 
123     static void clone_in_heap(oop src, oop dst, size_t size);
124 
125     static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
126       oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value);
127     }
128 
129     static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) {
130       return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), new_value);
131     }
132 
133     static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) {
134       return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), compare_value, new_value);
135     }



136   };
137 };
138 
139 template<>
140 struct BarrierSet::GetName<CardTableBarrierSet> {
141   static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
142 };
143 
144 template<>
145 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
146   typedef ::CardTableBarrierSet type;
147 };
148 
149 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP

102   virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
103 
104   virtual void print_on(outputStream* st) const;
105 
106   template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
107   class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
108     typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
109 
110   public:
111     template <typename T>
112     static void oop_store_in_heap(T* addr, oop value);
113     template <typename T>
114     static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value);
115     template <typename T>
116     static oop oop_atomic_xchg_in_heap(T* addr, oop new_value);
117 
118     template <typename T>
119     static OopCopyResult oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
120                                                arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
121                                                size_t length);
122   private:
123     // Failing checkcast or check null during copy, still needs barrier
124     template <typename T>
125     static inline void oop_arraycopy_partial_barrier(BarrierSetT *bs, T* dst_raw, T* p);
126   public:
127 
128     static void clone_in_heap(oop src, oop dst, size_t size);
129 
130     static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) {
131       oop_store_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), value);
132     }
133 
134     static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) {
135       return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), new_value);
136     }
137 
138     static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) {
139       return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr<decorators>(base, offset), compare_value, new_value);
140     }
141 
142     static void value_copy_in_heap(const ValuePayload& src, const ValuePayload& dst);
143     static void value_store_null_in_heap(const ValuePayload& dst);
144   };
145 };
146 
147 template<>
148 struct BarrierSet::GetName<CardTableBarrierSet> {
149   static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
150 };
151 
152 template<>
153 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
154   typedef ::CardTableBarrierSet type;
155 };
156 
157 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
< prev index next >