2332 // offset is a const and equals referent offset |
2332 // offset is a const and equals referent offset |
2333 // if (source == null) -> continue |
2333 // if (source == null) -> continue |
2334 __ cmp(lir_cond_equal, src_reg, LIR_OprFact::oopConst(NULL)); |
2334 __ cmp(lir_cond_equal, src_reg, LIR_OprFact::oopConst(NULL)); |
2335 __ branch(lir_cond_equal, T_OBJECT, Lcont->label()); |
2335 __ branch(lir_cond_equal, T_OBJECT, Lcont->label()); |
2336 } |
2336 } |
2337 LIR_Opr src_klass = new_register(T_OBJECT); |
2337 LIR_Opr src_klass = new_register(T_METADATA); |
2338 if (gen_type_check) { |
2338 if (gen_type_check) { |
2339 // We have determined that offset == referent_offset && src != null. |
2339 // We have determined that offset == referent_offset && src != null. |
2340 // if (src->_klass->_reference_type == REF_NONE) -> continue |
2340 // if (src->_klass->_reference_type == REF_NONE) -> continue |
2341 __ move(new LIR_Address(src_reg, oopDesc::klass_offset_in_bytes(), T_ADDRESS), src_klass); |
2341 __ move(new LIR_Address(src_reg, oopDesc::klass_offset_in_bytes(), T_ADDRESS), src_klass); |
2342 LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE); |
2342 LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE); |
3297 } |
3297 } |
3298 |
3298 |
3299 void LIRGenerator::do_ProfileCall(ProfileCall* x) { |
3299 void LIRGenerator::do_ProfileCall(ProfileCall* x) { |
3300 // Need recv in a temporary register so it interferes with the other temporaries |
3300 // Need recv in a temporary register so it interferes with the other temporaries |
3301 LIR_Opr recv = LIR_OprFact::illegalOpr; |
3301 LIR_Opr recv = LIR_OprFact::illegalOpr; |
3302 LIR_Opr mdo = new_register(T_OBJECT); |
3302 LIR_Opr mdo = new_register(T_METADATA); |
3303 // tmp is used to hold the counters on SPARC |
3303 // tmp is used to hold the counters on SPARC |
3304 LIR_Opr tmp = new_pointer_register(); |
3304 LIR_Opr tmp = new_pointer_register(); |
3305 |
3305 |
3306 if (x->nb_profiled_args() > 0) { |
3306 if (x->nb_profiled_args() > 0) { |
3307 profile_arguments(x); |
3307 profile_arguments(x); |