< prev index next >

src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp

Print this page

183     tmp2()->print(out);      out->print(" ");
184   }
185 #ifndef PRODUCT
186   virtual const char* name() const {
187     return "shenandoah_cas_obj";
188   }
189 #endif // PRODUCT
190 };
191 
192 class ShenandoahBarrierSetC1 : public BarrierSetC1 {
193 private:
194   CodeBlob* _pre_barrier_c1_runtime_code_blob;
195   CodeBlob* _load_reference_barrier_strong_rt_code_blob;
196   CodeBlob* _load_reference_barrier_strong_native_rt_code_blob;
197   CodeBlob* _load_reference_barrier_weak_rt_code_blob;
198   CodeBlob* _load_reference_barrier_phantom_rt_code_blob;
199 
200   void pre_barrier(LIRGenerator* gen, CodeEmitInfo* info, DecoratorSet decorators, LIR_Opr addr_opr, LIR_Opr pre_val);
201 
202   LIR_Opr load_reference_barrier(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
203   LIR_Opr iu_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators);
204 
205   LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
206 
207   LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj, BasicType type);
208 
209 public:
210   ShenandoahBarrierSetC1();
211 
212   CodeBlob* pre_barrier_c1_runtime_code_blob() {
213     assert(_pre_barrier_c1_runtime_code_blob != nullptr, "");
214     return _pre_barrier_c1_runtime_code_blob;
215   }
216 
217   CodeBlob* load_reference_barrier_strong_rt_code_blob() {
218     assert(_load_reference_barrier_strong_rt_code_blob != nullptr, "");
219     return _load_reference_barrier_strong_rt_code_blob;
220   }
221 
222   CodeBlob* load_reference_barrier_strong_native_rt_code_blob() {
223     assert(_load_reference_barrier_strong_native_rt_code_blob != nullptr, "");

227   CodeBlob* load_reference_barrier_weak_rt_code_blob() {
228     assert(_load_reference_barrier_weak_rt_code_blob != nullptr, "");
229     return _load_reference_barrier_weak_rt_code_blob;
230   }
231 
232   CodeBlob* load_reference_barrier_phantom_rt_code_blob() {
233     assert(_load_reference_barrier_phantom_rt_code_blob != nullptr, "");
234     return _load_reference_barrier_phantom_rt_code_blob;
235   }
236 
237 protected:
238 
239   virtual void store_at_resolved(LIRAccess& access, LIR_Opr value);
240   virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register);
241   virtual void load_at_resolved(LIRAccess& access, LIR_Opr result);
242 
243   virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value);
244 
245   virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value);
246 


247 public:
248 
249   virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob);
250 };
251 
252 #endif // SHARE_GC_SHENANDOAH_C1_SHENANDOAHBARRIERSETC1_HPP

183     tmp2()->print(out);      out->print(" ");
184   }
185 #ifndef PRODUCT
186   virtual const char* name() const {
187     return "shenandoah_cas_obj";
188   }
189 #endif // PRODUCT
190 };
191 
192 class ShenandoahBarrierSetC1 : public BarrierSetC1 {
193 private:
194   CodeBlob* _pre_barrier_c1_runtime_code_blob;
195   CodeBlob* _load_reference_barrier_strong_rt_code_blob;
196   CodeBlob* _load_reference_barrier_strong_native_rt_code_blob;
197   CodeBlob* _load_reference_barrier_weak_rt_code_blob;
198   CodeBlob* _load_reference_barrier_phantom_rt_code_blob;
199 
200   void pre_barrier(LIRGenerator* gen, CodeEmitInfo* info, DecoratorSet decorators, LIR_Opr addr_opr, LIR_Opr pre_val);
201 
202   LIR_Opr load_reference_barrier(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);

203 
204   LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
205 
206   LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj, BasicType type);
207 
208 public:
209   ShenandoahBarrierSetC1();
210 
211   CodeBlob* pre_barrier_c1_runtime_code_blob() {
212     assert(_pre_barrier_c1_runtime_code_blob != nullptr, "");
213     return _pre_barrier_c1_runtime_code_blob;
214   }
215 
216   CodeBlob* load_reference_barrier_strong_rt_code_blob() {
217     assert(_load_reference_barrier_strong_rt_code_blob != nullptr, "");
218     return _load_reference_barrier_strong_rt_code_blob;
219   }
220 
221   CodeBlob* load_reference_barrier_strong_native_rt_code_blob() {
222     assert(_load_reference_barrier_strong_native_rt_code_blob != nullptr, "");

226   CodeBlob* load_reference_barrier_weak_rt_code_blob() {
227     assert(_load_reference_barrier_weak_rt_code_blob != nullptr, "");
228     return _load_reference_barrier_weak_rt_code_blob;
229   }
230 
231   CodeBlob* load_reference_barrier_phantom_rt_code_blob() {
232     assert(_load_reference_barrier_phantom_rt_code_blob != nullptr, "");
233     return _load_reference_barrier_phantom_rt_code_blob;
234   }
235 
236 protected:
237 
238   virtual void store_at_resolved(LIRAccess& access, LIR_Opr value);
239   virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register);
240   virtual void load_at_resolved(LIRAccess& access, LIR_Opr result);
241 
242   virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value);
243 
244   virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value);
245 
246   void post_barrier(LIRAccess& access, LIR_Opr addr, LIR_Opr new_val);
247 
248 public:
249 
250   virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob);
251 };
252 
253 #endif // SHARE_GC_SHENANDOAH_C1_SHENANDOAHBARRIERSETC1_HPP
< prev index next >