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 }
|