< prev index next >

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

Print this page
rev 54386 : 8221766: Load-reference barriers for Shenandoah

*** 83,102 **** #ifndef PRODUCT virtual void print_name(outputStream* out) const { out->print("ShenandoahPreBarrierStub"); } #endif // PRODUCT }; ! class ShenandoahWriteBarrierStub: public CodeStub { friend class ShenandoahBarrierSetC1; private: LIR_Opr _obj; LIR_Opr _result; CodeEmitInfo* _info; bool _needs_null_check; public: ! ShenandoahWriteBarrierStub(LIR_Opr obj, LIR_Opr result, CodeEmitInfo* info, bool needs_null_check) : _obj(obj), _result(result), _info(info), _needs_null_check(needs_null_check) { assert(_obj->is_register(), "should be register"); assert(_result->is_register(), "should be register"); } --- 83,102 ---- #ifndef PRODUCT virtual void print_name(outputStream* out) const { out->print("ShenandoahPreBarrierStub"); } #endif // PRODUCT }; ! class ShenandoahLoadReferenceBarrierStub: public CodeStub { friend class ShenandoahBarrierSetC1; private: LIR_Opr _obj; LIR_Opr _result; CodeEmitInfo* _info; bool _needs_null_check; public: ! ShenandoahLoadReferenceBarrierStub(LIR_Opr obj, LIR_Opr result, CodeEmitInfo* info, bool needs_null_check) : _obj(obj), _result(result), _info(info), _needs_null_check(needs_null_check) { assert(_obj->is_register(), "should be register"); assert(_result->is_register(), "should be register"); }
*** 111,121 **** visitor->do_slow_case(); visitor->do_input(_obj); visitor->do_temp(_result); } #ifndef PRODUCT ! virtual void print_name(outputStream* out) const { out->print("ShenandoahWritePreBarrierStub"); } #endif // PRODUCT }; class LIR_OpShenandoahCompareAndSwap : public LIR_Op { friend class LIR_OpVisitState; --- 111,121 ---- visitor->do_slow_case(); visitor->do_input(_obj); visitor->do_temp(_result); } #ifndef PRODUCT ! virtual void print_name(outputStream* out) const { out->print("ShenandoahLoadReferenceBarrierStub"); } #endif // PRODUCT }; class LIR_OpShenandoahCompareAndSwap : public LIR_Op { friend class LIR_OpVisitState;
*** 179,213 **** private: CodeBlob* _pre_barrier_c1_runtime_code_blob; void pre_barrier(LIRGenerator* gen, CodeEmitInfo* info, DecoratorSet decorators, LIR_Opr addr_opr, LIR_Opr pre_val); ! LIR_Opr read_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, bool need_null_check); ! LIR_Opr write_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, bool need_null_check); LIR_Opr storeval_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators); ! LIR_Opr read_barrier_impl(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, bool need_null_check); ! LIR_Opr write_barrier_impl(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, bool need_null_check); LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj); public: CodeBlob* pre_barrier_c1_runtime_code_blob() { return _pre_barrier_c1_runtime_code_blob; } protected: - virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register); virtual void store_at_resolved(LIRAccess& access, LIR_Opr value); virtual void load_at_resolved(LIRAccess& access, LIR_Opr result); virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value); virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value); - virtual LIR_Opr atomic_add_at_resolved(LIRAccess& access, LIRItem& value); public: - virtual LIR_Opr resolve(LIRGenerator* gen, DecoratorSet decorators, LIR_Opr obj); virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob); }; #endif // SHARE_GC_SHENANDOAH_C1_SHENANDOAHBARRIERSETC1_HPP --- 179,208 ---- private: CodeBlob* _pre_barrier_c1_runtime_code_blob; void pre_barrier(LIRGenerator* gen, CodeEmitInfo* info, DecoratorSet decorators, LIR_Opr addr_opr, LIR_Opr pre_val); ! LIR_Opr load_reference_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, bool need_null_check); LIR_Opr storeval_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators); ! LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, bool need_null_check); LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj); public: CodeBlob* pre_barrier_c1_runtime_code_blob() { return _pre_barrier_c1_runtime_code_blob; } protected: virtual void store_at_resolved(LIRAccess& access, LIR_Opr value); virtual void load_at_resolved(LIRAccess& access, LIR_Opr result); virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value); virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value); public: virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob); }; #endif // SHARE_GC_SHENANDOAH_C1_SHENANDOAHBARRIERSETC1_HPP
< prev index next >