2728 __ set(mdo_offset_bias, O7); |
2728 __ set(mdo_offset_bias, O7); |
2729 __ add(mdo, O7, mdo); |
2729 __ add(mdo, O7, mdo); |
2730 } |
2730 } |
2731 |
2731 |
2732 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias); |
2732 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias); |
2733 __ lduw(counter_addr, tmp1); |
|
2734 __ add(tmp1, DataLayout::counter_increment, tmp1); |
|
2735 __ stw(tmp1, counter_addr); |
|
2736 Bytecodes::Code bc = method->java_code_at_bci(bci); |
2733 Bytecodes::Code bc = method->java_code_at_bci(bci); |
2737 // Perform additional virtual call profiling for invokevirtual and |
2734 // Perform additional virtual call profiling for invokevirtual and |
2738 // invokeinterface bytecodes |
2735 // invokeinterface bytecodes |
2739 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && |
2736 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && |
2740 Tier1ProfileVirtualCalls) { |
2737 Tier1ProfileVirtualCalls) { |
2820 __ delayed()->nop(); |
2817 __ delayed()->nop(); |
2821 __ st_ptr(recv, recv_addr); |
2818 __ st_ptr(recv, recv_addr); |
2822 __ set(DataLayout::counter_increment, tmp1); |
2819 __ set(DataLayout::counter_increment, tmp1); |
2823 __ st_ptr(tmp1, mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) - |
2820 __ st_ptr(tmp1, mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) - |
2824 mdo_offset_bias); |
2821 mdo_offset_bias); |
2825 if (i < (VirtualCallData::row_limit() - 1)) { |
2822 __ br(Assembler::always, false, Assembler::pt, update_done); |
2826 __ br(Assembler::always, false, Assembler::pt, update_done); |
2823 __ delayed()->nop(); |
2827 __ delayed()->nop(); |
|
2828 } |
|
2829 __ bind(next_test); |
2824 __ bind(next_test); |
2830 } |
2825 } |
|
2826 // Receiver did not match any saved receiver and there is no empty row for it. |
|
2827 // Increment total counter to indicate polymorphic case. |
|
2828 __ lduw(counter_addr, tmp1); |
|
2829 __ add(tmp1, DataLayout::counter_increment, tmp1); |
|
2830 __ stw(tmp1, counter_addr); |
2831 |
2831 |
2832 __ bind(update_done); |
2832 __ bind(update_done); |
2833 } |
2833 } |
|
2834 } else { |
|
2835 // Static call |
|
2836 __ lduw(counter_addr, tmp1); |
|
2837 __ add(tmp1, DataLayout::counter_increment, tmp1); |
|
2838 __ stw(tmp1, counter_addr); |
2834 } |
2839 } |
2835 } |
2840 } |
2836 |
2841 |
2837 |
2842 |
2838 void LIR_Assembler::align_backward_branch_target() { |
2843 void LIR_Assembler::align_backward_branch_target() { |