src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp

changeset 3969
1d7922586cf6
parent 3760
8f972594effc
child 4037
da91efe96a93
equal deleted inserted replaced
3944:aba91a731143 3969:1d7922586cf6
2954 2954
2955 2955
2956 void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) { 2956 void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
2957 ciMethod* method = op->profiled_method(); 2957 ciMethod* method = op->profiled_method();
2958 int bci = op->profiled_bci(); 2958 int bci = op->profiled_bci();
2959 ciMethod* callee = op->profiled_callee();
2959 2960
2960 // Update counter for all call types 2961 // Update counter for all call types
2961 ciMethodData* md = method->method_data_or_null(); 2962 ciMethodData* md = method->method_data_or_null();
2962 assert(md != NULL, "Sanity"); 2963 assert(md != NULL, "Sanity");
2963 ciProfileData* data = md->bci_to_data(bci); 2964 ciProfileData* data = md->bci_to_data(bci);
2982 __ add(mdo, O7, mdo); 2983 __ add(mdo, O7, mdo);
2983 } 2984 }
2984 2985
2985 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias); 2986 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias);
2986 Bytecodes::Code bc = method->java_code_at_bci(bci); 2987 Bytecodes::Code bc = method->java_code_at_bci(bci);
2988 const bool callee_is_static = callee->is_loaded() && callee->is_static();
2987 // Perform additional virtual call profiling for invokevirtual and 2989 // Perform additional virtual call profiling for invokevirtual and
2988 // invokeinterface bytecodes 2990 // invokeinterface bytecodes
2989 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && 2991 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) &&
2992 !callee_is_static && // required for optimized MH invokes
2990 C1ProfileVirtualCalls) { 2993 C1ProfileVirtualCalls) {
2991 assert(op->recv()->is_single_cpu(), "recv must be allocated"); 2994 assert(op->recv()->is_single_cpu(), "recv must be allocated");
2992 Register recv = op->recv()->as_register(); 2995 Register recv = op->recv()->as_register();
2993 assert_different_registers(mdo, tmp1, recv); 2996 assert_different_registers(mdo, tmp1, recv);
2994 assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls"); 2997 assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls");

mercurial