comparison src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @ 1251:576e77447e3c

6923002: assert(false,"this call site should not be polymorphic") Summary: Clear the total count when a receiver information is cleared. Reviewed-by: never, jrose
author kvn
date Sun, 07 Feb 2010 12:15:06 -0800
parents 18a389214829
children 7b4415a18c8a
comparison
equal deleted inserted replaced
1250:3f5b7efb9642 1251:576e77447e3c
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() {