< prev index next >
src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp
Print this page
rev 55741 : 8228369: Shenandoah: Refactor LRB C1 stubs
*** 112,122 ****
LIR_Opr ShenandoahBarrierSetC1::load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj) {
assert(ShenandoahLoadRefBarrier, "Should be enabled");
obj = ensure_in_register(gen, obj);
assert(obj->is_register(), "must be a register at this point");
! LIR_Opr result = gen->new_register(T_OBJECT);
__ move(obj, result);
LIR_Opr thrd = gen->getThreadPointer();
LIR_Address* active_flag_addr =
new LIR_Address(thrd,
--- 112,122 ----
LIR_Opr ShenandoahBarrierSetC1::load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj) {
assert(ShenandoahLoadRefBarrier, "Should be enabled");
obj = ensure_in_register(gen, obj);
assert(obj->is_register(), "must be a register at this point");
! LIR_Opr result = gen->result_register_for(obj->value_type());
__ move(obj, result);
LIR_Opr thrd = gen->getThreadPointer();
LIR_Address* active_flag_addr =
new LIR_Address(thrd,
*** 236,250 ****
--- 236,264 ----
bs->generate_c1_pre_barrier_runtime_stub(sasm);
return NULL;
}
};
+ class C1ShenandoahLoadReferenceBarrierCodeGenClosure : public StubAssemblerCodeGenClosure {
+ virtual OopMapSet* generate_code(StubAssembler* sasm) {
+ ShenandoahBarrierSetAssembler* bs = (ShenandoahBarrierSetAssembler*)BarrierSet::barrier_set()->barrier_set_assembler();
+ bs->generate_c1_load_reference_barrier_runtime_stub(sasm);
+ return NULL;
+ }
+ };
+
void ShenandoahBarrierSetC1::generate_c1_runtime_stubs(BufferBlob* buffer_blob) {
C1ShenandoahPreBarrierCodeGenClosure pre_code_gen_cl;
_pre_barrier_c1_runtime_code_blob = Runtime1::generate_blob(buffer_blob, -1,
"shenandoah_pre_barrier_slow",
false, &pre_code_gen_cl);
+ if (ShenandoahLoadRefBarrier) {
+ C1ShenandoahLoadReferenceBarrierCodeGenClosure lrb_code_gen_cl;
+ _load_reference_barrier_rt_code_blob = Runtime1::generate_blob(buffer_blob, -1,
+ "shenandoah_load_reference_barrier_slow",
+ false, &lrb_code_gen_cl);
+ }
}
const char* ShenandoahBarrierSetC1::rtcall_name_for_address(address entry) {
if (entry == CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_native)) {
return "ShenandoahRuntime::load_reference_barrier_native";
< prev index next >