hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
changeset 4892 e977b527544a
parent 4752 67a506670cd0
child 4898 b5bbb74def0b
equal deleted inserted replaced
4891:7c8755dd5bb2 4892:e977b527544a
  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() {