< prev index next >
src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp
Print this page
rev 55922 : 8228369: Shenandoah: Refactor LRB C1 stubs
@@ -88,27 +88,35 @@
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) :
- _obj(obj), _result(result)
+ 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,10 +180,11 @@
};
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,10 +193,11 @@
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 >