< prev index next >
src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.hpp
Print this page
rev 58062 : 8239081: Shenandoah: Consolidate C1 LRB and native barriers
@@ -92,14 +92,14 @@
LIR_Opr _obj;
LIR_Opr _addr;
LIR_Opr _result;
LIR_Opr _tmp1;
LIR_Opr _tmp2;
-
+ bool _native;
public:
- ShenandoahLoadReferenceBarrierStub(LIR_Opr obj, LIR_Opr addr, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2) :
- _obj(obj), _addr(addr), _result(result), _tmp1(tmp1), _tmp2(tmp2)
+ ShenandoahLoadReferenceBarrierStub(LIR_Opr obj, LIR_Opr addr, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2, bool is_native) :
+ _obj(obj), _addr(addr), _result(result), _tmp1(tmp1), _tmp2(tmp2), _native(is_native)
{
assert(_obj->is_register(), "should be register");
assert(_addr->is_register(), "should be register");
assert(_result->is_register(), "should be register");
assert(_tmp1->is_register(), "should be register");
@@ -109,10 +109,11 @@
LIR_Opr obj() const { return _obj; }
LIR_Opr addr() const { return _addr; }
LIR_Opr result() const { return _result; }
LIR_Opr tmp1() const { return _tmp1; }
LIR_Opr tmp2() const { return _tmp2; }
+ bool is_native() const { return _native; }
virtual void emit_code(LIR_Assembler* e);
virtual void visit(LIR_OpVisitState* visitor) {
visitor->do_slow_case();
visitor->do_input(_obj);
@@ -188,17 +189,18 @@
class ShenandoahBarrierSetC1 : public BarrierSetC1 {
private:
CodeBlob* _pre_barrier_c1_runtime_code_blob;
CodeBlob* _load_reference_barrier_rt_code_blob;
+ CodeBlob* _load_reference_barrier_native_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 addr);
+ LIR_Opr load_reference_barrier(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, bool is_native);
LIR_Opr storeval_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators);
- LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr);
+ LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, bool is_native);
LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj, BasicType type);
public:
ShenandoahBarrierSetC1();
@@ -211,10 +213,14 @@
CodeBlob* load_reference_barrier_rt_code_blob() {
assert(_load_reference_barrier_rt_code_blob != NULL, "");
return _load_reference_barrier_rt_code_blob;
}
+ CodeBlob* load_reference_barrier_native_rt_code_blob() {
+ assert(_load_reference_barrier_native_rt_code_blob != NULL, "");
+ return _load_reference_barrier_native_rt_code_blob;
+ }
protected:
virtual void store_at_resolved(LIRAccess& access, LIR_Opr value);
virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register);
virtual void load_at_resolved(LIRAccess& access, LIR_Opr result);
@@ -224,9 +230,8 @@
virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value);
public:
virtual void generate_c1_runtime_stubs(BufferBlob* buffer_blob);
- virtual const char* rtcall_name_for_address(address entry);
};
#endif // SHARE_GC_SHENANDOAH_C1_SHENANDOAHBARRIERSETC1_HPP
< prev index next >