319 // offset is a const and equals referent offset |
319 // offset is a const and equals referent offset |
320 // if (source == null) -> continue |
320 // if (source == null) -> continue |
321 __ cmp(lir_cond_equal, base.result(), LIR_OprFact::oopConst(NULL)); |
321 __ cmp(lir_cond_equal, base.result(), LIR_OprFact::oopConst(NULL)); |
322 __ branch(lir_cond_equal, T_OBJECT, cont->label()); |
322 __ branch(lir_cond_equal, T_OBJECT, cont->label()); |
323 } |
323 } |
324 LIR_Opr src_klass = gen->new_register(T_OBJECT); |
324 LIR_Opr src_klass = gen->new_register(T_METADATA); |
325 if (gen_type_check) { |
325 if (gen_type_check) { |
326 // We have determined that offset == referent_offset && src != null. |
326 // We have determined that offset == referent_offset && src != null. |
327 // if (src->_klass->_reference_type == REF_NONE) -> continue |
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); |
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); |
329 LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE); |