src/cpu/x86/vm/c1_LIRAssembler_x86.cpp

changeset 2163
5511edd5d719
parent 2146
3a294e483abc
child 2187
22e4420d19f7
equal deleted inserted replaced
2162:b2045e0af26e 2163:5511edd5d719
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);

mercurial