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
|