hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
changeset 6478 75ef8813e3e2
parent 6461 cfc616b49f58
child 6758 2c14f9ec1cbf
equal deleted inserted replaced
6477:5a4b9e39ce51 6478:75ef8813e3e2
  1614 }
  1614 }
  1615 
  1615 
  1616 void LIR_Assembler::type_profile_helper(Register mdo,
  1616 void LIR_Assembler::type_profile_helper(Register mdo,
  1617                                         ciMethodData *md, ciProfileData *data,
  1617                                         ciMethodData *md, ciProfileData *data,
  1618                                         Register recv, Label* update_done) {
  1618                                         Register recv, Label* update_done) {
  1619   uint i;
  1619   for (uint i = 0; i < ReceiverTypeData::row_limit(); i++) {
  1620   for (i = 0; i < ReceiverTypeData::row_limit(); i++) {
       
  1621     Label next_test;
  1620     Label next_test;
  1622     // See if the receiver is receiver[n].
  1621     // See if the receiver is receiver[n].
  1623     __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))));
  1622     __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))));
  1624     __ jccb(Assembler::notEqual, next_test);
  1623     __ jccb(Assembler::notEqual, next_test);
  1625     Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)));
  1624     Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)));
  1627     __ jmp(*update_done);
  1626     __ jmp(*update_done);
  1628     __ bind(next_test);
  1627     __ bind(next_test);
  1629   }
  1628   }
  1630 
  1629 
  1631   // Didn't find receiver; find next empty slot and fill it in
  1630   // Didn't find receiver; find next empty slot and fill it in
  1632   for (i = 0; i < ReceiverTypeData::row_limit(); i++) {
  1631   for (uint i = 0; i < ReceiverTypeData::row_limit(); i++) {
  1633     Label next_test;
  1632     Label next_test;
  1634     Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)));
  1633     Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)));
  1635     __ cmpptr(recv_addr, (intptr_t)NULL_WORD);
  1634     __ cmpptr(recv_addr, (intptr_t)NULL_WORD);
  1636     __ jccb(Assembler::notEqual, next_test);
  1635     __ jccb(Assembler::notEqual, next_test);
  1637     __ movptr(recv_addr, recv);
  1636     __ movptr(recv_addr, recv);