1663 |
1663 |
1664 if (UseLoopCounter) { |
1664 if (UseLoopCounter) { |
1665 if (ProfileInterpreter) { |
1665 if (ProfileInterpreter) { |
1666 // Out-of-line code to allocate method data oop. |
1666 // Out-of-line code to allocate method data oop. |
1667 __ bind(profile_method); |
1667 __ bind(profile_method); |
1668 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method), rsi); |
1668 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method)); |
1669 __ load_unsigned_byte(rbx, Address(rsi, 0)); // restore target bytecode |
1669 __ load_unsigned_byte(rbx, Address(rsi, 0)); // restore target bytecode |
1670 __ movptr(rcx, Address(rbp, method_offset)); |
1670 __ set_method_data_pointer_for_bcp(); |
1671 __ movptr(rcx, Address(rcx, in_bytes(methodOopDesc::method_data_offset()))); |
|
1672 __ movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), rcx); |
|
1673 __ test_method_data_pointer(rcx, dispatch); |
|
1674 // offset non-null mdp by MDO::data_offset() + IR::profile_method() |
|
1675 __ addptr(rcx, in_bytes(methodDataOopDesc::data_offset())); |
|
1676 __ addptr(rcx, rax); |
|
1677 __ movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), rcx); |
|
1678 __ jmp(dispatch); |
1671 __ jmp(dispatch); |
1679 } |
1672 } |
1680 |
1673 |
1681 if (UseOnStackReplacement) { |
1674 if (UseOnStackReplacement) { |
1682 |
1675 |