src/cpu/x86/vm/c1_LIRAssembler_x86.cpp

changeset 2226
75b0735b4d04
parent 2187
22e4420d19f7
child 2203
c393f046f4c5
equal deleted inserted replaced
2225:c77b5c592eab 2226:75b0735b4d04
486 __ unlock_object(rdi, rbx, rax, *stub->entry()); 486 __ unlock_object(rdi, rbx, rax, *stub->entry());
487 __ bind(*stub->continuation()); 487 __ bind(*stub->continuation());
488 } 488 }
489 489
490 if (compilation()->env()->dtrace_method_probes()) { 490 if (compilation()->env()->dtrace_method_probes()) {
491 __ movoop(Address(rsp, 0), method()->constant_encoding()); 491 __ get_thread(rax);
492 __ movptr(Address(rsp, 0), rax);
493 __ movoop(Address(rsp, sizeof(void*)), method()->constant_encoding());
492 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit))); 494 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit)));
493 } 495 }
494 496
495 if (method()->is_synchronized() || compilation()->env()->dtrace_method_probes()) { 497 if (method()->is_synchronized() || compilation()->env()->dtrace_method_probes()) {
496 __ mov(rax, rsi); // Restore the exception 498 __ mov(rax, rsi); // Restore the exception
1614 } 1616 }
1615 1617
1616 void LIR_Assembler::type_profile_helper(Register mdo, 1618 void LIR_Assembler::type_profile_helper(Register mdo,
1617 ciMethodData *md, ciProfileData *data, 1619 ciMethodData *md, ciProfileData *data,
1618 Register recv, Label* update_done) { 1620 Register recv, Label* update_done) {
1619 uint i; 1621 for (uint i = 0; i < ReceiverTypeData::row_limit(); i++) {
1620 for (i = 0; i < ReceiverTypeData::row_limit(); i++) {
1621 Label next_test; 1622 Label next_test;
1622 // See if the receiver is receiver[n]. 1623 // See if the receiver is receiver[n].
1623 __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)))); 1624 __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))));
1624 __ jccb(Assembler::notEqual, next_test); 1625 __ jccb(Assembler::notEqual, next_test);
1625 Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i))); 1626 Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)));
1627 __ jmp(*update_done); 1628 __ jmp(*update_done);
1628 __ bind(next_test); 1629 __ bind(next_test);
1629 } 1630 }
1630 1631
1631 // Didn't find receiver; find next empty slot and fill it in 1632 // Didn't find receiver; find next empty slot and fill it in
1632 for (i = 0; i < ReceiverTypeData::row_limit(); i++) { 1633 for (uint i = 0; i < ReceiverTypeData::row_limit(); i++) {
1633 Label next_test; 1634 Label next_test;
1634 Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))); 1635 Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)));
1635 __ cmpptr(recv_addr, (intptr_t)NULL_WORD); 1636 __ cmpptr(recv_addr, (intptr_t)NULL_WORD);
1636 __ jccb(Assembler::notEqual, next_test); 1637 __ jccb(Assembler::notEqual, next_test);
1637 __ movptr(recv_addr, recv); 1638 __ movptr(recv_addr, recv);

mercurial