438 if (!obj->is_loaded() || PatchALot) { |
438 if (!obj->is_loaded() || PatchALot) { |
439 assert(info != NULL, "info must be set if class is not loaded"); |
439 assert(info != NULL, "info must be set if class is not loaded"); |
440 __ oop2reg_patch(NULL, r, info); |
440 __ oop2reg_patch(NULL, r, info); |
441 } else { |
441 } else { |
442 // no patching needed |
442 // no patching needed |
443 __ oop2reg(obj->encoding(), r); |
443 __ oop2reg(obj->constant_encoding(), r); |
444 } |
444 } |
445 } |
445 } |
446 |
446 |
447 |
447 |
448 void LIRGenerator::array_range_check(LIR_Opr array, LIR_Opr index, |
448 void LIRGenerator::array_range_check(LIR_Opr array, LIR_Opr index, |
829 assert(data != NULL, "must have profiling data"); |
829 assert(data != NULL, "must have profiling data"); |
830 assert(data->is_BranchData(), "need BranchData for two-way branches"); |
830 assert(data->is_BranchData(), "need BranchData for two-way branches"); |
831 int taken_count_offset = md->byte_offset_of_slot(data, BranchData::taken_offset()); |
831 int taken_count_offset = md->byte_offset_of_slot(data, BranchData::taken_offset()); |
832 int not_taken_count_offset = md->byte_offset_of_slot(data, BranchData::not_taken_offset()); |
832 int not_taken_count_offset = md->byte_offset_of_slot(data, BranchData::not_taken_offset()); |
833 LIR_Opr md_reg = new_register(T_OBJECT); |
833 LIR_Opr md_reg = new_register(T_OBJECT); |
834 __ move(LIR_OprFact::oopConst(md->encoding()), md_reg); |
834 __ move(LIR_OprFact::oopConst(md->constant_encoding()), md_reg); |
835 LIR_Opr data_offset_reg = new_register(T_INT); |
835 LIR_Opr data_offset_reg = new_register(T_INT); |
836 __ cmove(lir_cond(cond), |
836 __ cmove(lir_cond(cond), |
837 LIR_OprFact::intConst(taken_count_offset), |
837 LIR_OprFact::intConst(taken_count_offset), |
838 LIR_OprFact::intConst(not_taken_count_offset), |
838 LIR_OprFact::intConst(not_taken_count_offset), |
839 data_offset_reg); |
839 data_offset_reg); |
1069 signature.append(T_INT); // thread |
1069 signature.append(T_INT); // thread |
1070 signature.append(T_OBJECT); // methodOop |
1070 signature.append(T_OBJECT); // methodOop |
1071 LIR_OprList* args = new LIR_OprList(); |
1071 LIR_OprList* args = new LIR_OprList(); |
1072 args->append(getThreadPointer()); |
1072 args->append(getThreadPointer()); |
1073 LIR_Opr meth = new_register(T_OBJECT); |
1073 LIR_Opr meth = new_register(T_OBJECT); |
1074 __ oop2reg(method()->encoding(), meth); |
1074 __ oop2reg(method()->constant_encoding(), meth); |
1075 args->append(meth); |
1075 args->append(meth); |
1076 call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL); |
1076 call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL); |
1077 } |
1077 } |
1078 |
1078 |
1079 if (x->type()->is_void()) { |
1079 if (x->type()->is_void()) { |
1782 signature.append(T_INT); // thread |
1782 signature.append(T_INT); // thread |
1783 signature.append(T_OBJECT); // methodOop |
1783 signature.append(T_OBJECT); // methodOop |
1784 LIR_OprList* args = new LIR_OprList(); |
1784 LIR_OprList* args = new LIR_OprList(); |
1785 args->append(getThreadPointer()); |
1785 args->append(getThreadPointer()); |
1786 LIR_Opr meth = new_register(T_OBJECT); |
1786 LIR_Opr meth = new_register(T_OBJECT); |
1787 __ oop2reg(method()->encoding(), meth); |
1787 __ oop2reg(method()->constant_encoding(), meth); |
1788 args->append(meth); |
1788 args->append(meth); |
1789 call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL); |
1789 call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL); |
1790 } |
1790 } |
1791 |
1791 |
1792 // move exception oop into fixed register |
1792 // move exception oop into fixed register |
2205 signature.append(T_INT); // thread |
2205 signature.append(T_INT); // thread |
2206 signature.append(T_OBJECT); // methodOop |
2206 signature.append(T_OBJECT); // methodOop |
2207 LIR_OprList* args = new LIR_OprList(); |
2207 LIR_OprList* args = new LIR_OprList(); |
2208 args->append(getThreadPointer()); |
2208 args->append(getThreadPointer()); |
2209 LIR_Opr meth = new_register(T_OBJECT); |
2209 LIR_Opr meth = new_register(T_OBJECT); |
2210 __ oop2reg(method()->encoding(), meth); |
2210 __ oop2reg(method()->constant_encoding(), meth); |
2211 args->append(meth); |
2211 args->append(meth); |
2212 call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), voidType, NULL); |
2212 call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), voidType, NULL); |
2213 } |
2213 } |
2214 |
2214 |
2215 if (method()->is_synchronized()) { |
2215 if (method()->is_synchronized()) { |
2216 LIR_Opr obj; |
2216 LIR_Opr obj; |
2217 if (method()->is_static()) { |
2217 if (method()->is_static()) { |
2218 obj = new_register(T_OBJECT); |
2218 obj = new_register(T_OBJECT); |
2219 __ oop2reg(method()->holder()->java_mirror()->encoding(), obj); |
2219 __ oop2reg(method()->holder()->java_mirror()->constant_encoding(), obj); |
2220 } else { |
2220 } else { |
2221 Local* receiver = x->state()->local_at(0)->as_Local(); |
2221 Local* receiver = x->state()->local_at(0)->as_Local(); |
2222 assert(receiver != NULL, "must already exist"); |
2222 assert(receiver != NULL, "must already exist"); |
2223 obj = receiver->operand(); |
2223 obj = receiver->operand(); |
2224 } |
2224 } |
2658 offset = in_bytes(methodOopDesc::backedge_counter_offset() + |
2658 offset = in_bytes(methodOopDesc::backedge_counter_offset() + |
2659 InvocationCounter::counter_offset()); |
2659 InvocationCounter::counter_offset()); |
2660 } |
2660 } |
2661 |
2661 |
2662 LIR_Opr meth = new_register(T_OBJECT); |
2662 LIR_Opr meth = new_register(T_OBJECT); |
2663 __ oop2reg(method()->encoding(), meth); |
2663 __ oop2reg(method()->constant_encoding(), meth); |
2664 LIR_Opr result = increment_and_return_counter(meth, offset, InvocationCounter::count_increment); |
2664 LIR_Opr result = increment_and_return_counter(meth, offset, InvocationCounter::count_increment); |
2665 __ cmp(lir_cond_aboveEqual, result, LIR_OprFact::intConst(limit)); |
2665 __ cmp(lir_cond_aboveEqual, result, LIR_OprFact::intConst(limit)); |
2666 CodeStub* overflow = new CounterOverflowStub(info, info->bci()); |
2666 CodeStub* overflow = new CounterOverflowStub(info, info->bci()); |
2667 __ branch(lir_cond_aboveEqual, T_INT, overflow); |
2667 __ branch(lir_cond_aboveEqual, T_INT, overflow); |
2668 __ branch_destination(overflow->continuation()); |
2668 __ branch_destination(overflow->continuation()); |