< prev index next >

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

Print this page

 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
< prev index next >