< prev index next >
src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp
Print this page
rev 55609 : Eliminate extra forwarding pointer per object
@@ -124,26 +124,29 @@
LIR_Opr _addr;
LIR_Opr _cmp_value;
LIR_Opr _new_value;
LIR_Opr _tmp1;
LIR_Opr _tmp2;
+ LIR_Opr _tmp3;
public:
LIR_OpShenandoahCompareAndSwap(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
- LIR_Opr t1, LIR_Opr t2, LIR_Opr result)
+ LIR_Opr t1, LIR_Opr t2, LIR_Opr t3, LIR_Opr result)
: LIR_Op(lir_none, result, NULL) // no info
, _addr(addr)
, _cmp_value(cmp_value)
, _new_value(new_value)
, _tmp1(t1)
- , _tmp2(t2) { }
+ , _tmp2(t2)
+ , _tmp3(t3) { }
LIR_Opr addr() const { return _addr; }
LIR_Opr cmp_value() const { return _cmp_value; }
LIR_Opr new_value() const { return _new_value; }
LIR_Opr tmp1() const { return _tmp1; }
LIR_Opr tmp2() const { return _tmp2; }
+ LIR_Opr tmp3() const { return _tmp3; }
virtual void visit(LIR_OpVisitState* state) {
assert(_addr->is_valid(), "used");
assert(_cmp_value->is_valid(), "used");
assert(_new_value->is_valid(), "used");
@@ -154,10 +157,11 @@
state->do_temp(_cmp_value);
state->do_input(_new_value);
state->do_temp(_new_value);
if (_tmp1->is_valid()) state->do_temp(_tmp1);
if (_tmp2->is_valid()) state->do_temp(_tmp2);
+ if (_tmp3->is_valid()) state->do_temp(_tmp3);
if (_result->is_valid()) state->do_output(_result);
}
virtual void emit_code(LIR_Assembler* masm);
@@ -165,10 +169,11 @@
addr()->print(out); out->print(" ");
cmp_value()->print(out); out->print(" ");
new_value()->print(out); out->print(" ");
tmp1()->print(out); out->print(" ");
tmp2()->print(out); out->print(" ");
+ tmp3()->print(out); out->print(" ");
}
#ifndef PRODUCT
virtual const char* name() const {
return "shenandoah_cas_obj";
}
< prev index next >