< prev index next >

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

Print this page
rev 55922 : 8228369: Shenandoah: Refactor LRB C1 stubs

*** 88,114 **** class ShenandoahLoadReferenceBarrierStub: public CodeStub { friend class ShenandoahBarrierSetC1; private: LIR_Opr _obj; LIR_Opr _result; public: ! ShenandoahLoadReferenceBarrierStub(LIR_Opr obj, LIR_Opr result) : ! _obj(obj), _result(result) { assert(_obj->is_register(), "should be register"); assert(_result->is_register(), "should be register"); } LIR_Opr obj() const { return _obj; } LIR_Opr result() const { return _result; } virtual void emit_code(LIR_Assembler* e); virtual void visit(LIR_OpVisitState* visitor) { 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 }; --- 88,122 ---- class ShenandoahLoadReferenceBarrierStub: public CodeStub { friend class ShenandoahBarrierSetC1; private: LIR_Opr _obj; LIR_Opr _result; + LIR_Opr _tmp1; + LIR_Opr _tmp2; public: ! ShenandoahLoadReferenceBarrierStub(LIR_Opr obj, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2) : ! _obj(obj), _result(result), _tmp1(tmp1), _tmp2(tmp2) { assert(_obj->is_register(), "should be register"); assert(_result->is_register(), "should be register"); + assert(_tmp1->is_register(), "should be register"); + assert(_tmp2->is_register(), "should be register"); } LIR_Opr obj() const { return _obj; } LIR_Opr result() const { return _result; } + LIR_Opr tmp1() const { return _tmp1; } + LIR_Opr tmp2() const { return _tmp2; } virtual void emit_code(LIR_Assembler* e); virtual void visit(LIR_OpVisitState* visitor) { visitor->do_slow_case(); visitor->do_input(_obj); visitor->do_temp(_result); + visitor->do_temp(_tmp1); + visitor->do_temp(_tmp2); } #ifndef PRODUCT virtual void print_name(outputStream* out) const { out->print("ShenandoahLoadReferenceBarrierStub"); } #endif // PRODUCT };
*** 172,181 **** --- 180,190 ---- }; class ShenandoahBarrierSetC1 : public BarrierSetC1 { private: CodeBlob* _pre_barrier_c1_runtime_code_blob; + CodeBlob* _load_reference_barrier_rt_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); LIR_Opr storeval_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators);
*** 184,193 **** --- 193,203 ---- 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; } + CodeBlob* load_reference_barrier_rt_code_blob() { return _load_reference_barrier_rt_code_blob; } protected: virtual void store_at_resolved(LIRAccess& access, LIR_Opr value); virtual void load_at_resolved(LIRAccess& access, LIR_Opr result);
< prev index next >