< prev index next > src/hotspot/share/gc/shared/c1/barrierSetC1.hpp
Print this page
LIRAddressOpr _offset;
BasicType _type;
LIR_Opr _resolved_addr;
CodeEmitInfo* _patch_emit_info;
CodeEmitInfo* _access_emit_info;
public:
LIRAccess(LIRGenerator* gen, DecoratorSet decorators,
LIRAddressOpr base, LIRAddressOpr offset, BasicType type,
! CodeEmitInfo* patch_emit_info = nullptr, CodeEmitInfo* access_emit_info = nullptr) :
_gen(gen),
_decorators(AccessInternal::decorator_fixup(decorators, type)),
_base(base),
_offset(offset),
_type(type),
_resolved_addr(),
_patch_emit_info(patch_emit_info),
! _access_emit_info(access_emit_info) {}
void load_base() { _base.item().load_item(); }
void load_offset() { _offset.item().load_nonconstant(); }
void load_address() {
LIRAddressOpr _offset;
BasicType _type;
LIR_Opr _resolved_addr;
CodeEmitInfo* _patch_emit_info;
CodeEmitInfo* _access_emit_info;
+ ciInlineKlass* _vk; // For flat, atomic accesses that might require GC barriers on oop fields
public:
LIRAccess(LIRGenerator* gen, DecoratorSet decorators,
LIRAddressOpr base, LIRAddressOpr offset, BasicType type,
! CodeEmitInfo* patch_emit_info = nullptr, CodeEmitInfo* access_emit_info = nullptr, ciInlineKlass* vk = nullptr) :
_gen(gen),
_decorators(AccessInternal::decorator_fixup(decorators, type)),
_base(base),
_offset(offset),
_type(type),
_resolved_addr(),
_patch_emit_info(patch_emit_info),
! _access_emit_info(access_emit_info),
+ _vk(vk) {}
void load_base() { _base.item().load_item(); }
void load_offset() { _offset.item().load_nonconstant(); }
void load_address() {
void set_resolved_addr(LIR_Opr addr) { _resolved_addr = addr; }
bool is_oop() const { return is_reference_type(_type); }
DecoratorSet decorators() const { return _decorators; }
void clear_decorators(DecoratorSet ds) { _decorators &= ~ds; }
bool is_raw() const { return (_decorators & AS_RAW) != 0; }
+ ciInlineKlass* vk() const { return _vk; }
};
// The BarrierSetC1 class is the main entry point for the GC backend of the Access API in C1.
// It is called by the LIRGenerator::access_* functions, which is the main entry point for
// access calls in C1.
< prev index next >