< prev index next >

src/hotspot/share/gc/shared/c1/barrierSetC1.cpp

Print this page
rev 51436 : 8209667: Explicit barriers for C1/LIR


 317     }
 318     if (gen_source_check) {
 319       // offset is a const and equals referent offset
 320       // if (source == null) -> continue
 321       __ cmp(lir_cond_equal, base.result(), LIR_OprFact::oopConst(NULL));
 322       __ branch(lir_cond_equal, T_OBJECT, cont->label());
 323     }
 324     LIR_Opr src_klass = gen->new_register(T_OBJECT);
 325     if (gen_type_check) {
 326       // We have determined that offset == referent_offset && src != null.
 327       // if (src->_klass->_reference_type == REF_NONE) -> continue
 328       __ move(new LIR_Address(base.result(), oopDesc::klass_offset_in_bytes(), T_ADDRESS), src_klass);
 329       LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE);
 330       LIR_Opr reference_type = gen->new_register(T_INT);
 331       __ move(reference_type_addr, reference_type);
 332       __ cmp(lir_cond_equal, reference_type, LIR_OprFact::intConst(REF_NONE));
 333       __ branch(lir_cond_equal, T_INT, cont->label());
 334     }
 335   }
 336 }






 317     }
 318     if (gen_source_check) {
 319       // offset is a const and equals referent offset
 320       // if (source == null) -> continue
 321       __ cmp(lir_cond_equal, base.result(), LIR_OprFact::oopConst(NULL));
 322       __ branch(lir_cond_equal, T_OBJECT, cont->label());
 323     }
 324     LIR_Opr src_klass = gen->new_register(T_OBJECT);
 325     if (gen_type_check) {
 326       // We have determined that offset == referent_offset && src != null.
 327       // if (src->_klass->_reference_type == REF_NONE) -> continue
 328       __ move(new LIR_Address(base.result(), oopDesc::klass_offset_in_bytes(), T_ADDRESS), src_klass);
 329       LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE);
 330       LIR_Opr reference_type = gen->new_register(T_INT);
 331       __ move(reference_type_addr, reference_type);
 332       __ cmp(lir_cond_equal, reference_type, LIR_OprFact::intConst(REF_NONE));
 333       __ branch(lir_cond_equal, T_INT, cont->label());
 334     }
 335   }
 336 }
 337 
 338 LIR_Opr BarrierSetC1::resolve(LIRAccess& access) {
 339   return access.base().opr();
 340 }
< prev index next >