190 |
190 |
191 |
191 |
192 void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset) { |
192 void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset) { |
193 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
193 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
194 assert(cache != index, "must use different registers"); |
194 assert(cache != index, "must use different registers"); |
195 load_unsigned_word(index, Address(rsi, bcp_offset)); |
195 load_unsigned_short(index, Address(rsi, bcp_offset)); |
196 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); |
196 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); |
197 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); |
197 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); |
198 shlptr(index, 2); // convert from field index to ConstantPoolCacheEntry index |
198 shlptr(index, 2); // convert from field index to ConstantPoolCacheEntry index |
199 } |
199 } |
200 |
200 |
201 |
201 |
202 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset) { |
202 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset) { |
203 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
203 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
204 assert(cache != tmp, "must use different register"); |
204 assert(cache != tmp, "must use different register"); |
205 load_unsigned_word(tmp, Address(rsi, bcp_offset)); |
205 load_unsigned_short(tmp, Address(rsi, bcp_offset)); |
206 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); |
206 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); |
207 // convert from field index to ConstantPoolCacheEntry index |
207 // convert from field index to ConstantPoolCacheEntry index |
208 // and from word offset to byte offset |
208 // and from word offset to byte offset |
209 shll(tmp, 2 + LogBytesPerWord); |
209 shll(tmp, 2 + LogBytesPerWord); |
210 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); |
210 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); |
1029 test_method_data_pointer(rcx, verify_continue); // If mdp is zero, continue |
1029 test_method_data_pointer(rcx, verify_continue); // If mdp is zero, continue |
1030 get_method(rbx); |
1030 get_method(rbx); |
1031 |
1031 |
1032 // If the mdp is valid, it will point to a DataLayout header which is |
1032 // If the mdp is valid, it will point to a DataLayout header which is |
1033 // consistent with the bcp. The converse is highly probable also. |
1033 // consistent with the bcp. The converse is highly probable also. |
1034 load_unsigned_word(rdx, Address(rcx, in_bytes(DataLayout::bci_offset()))); |
1034 load_unsigned_short(rdx, Address(rcx, in_bytes(DataLayout::bci_offset()))); |
1035 addptr(rdx, Address(rbx, methodOopDesc::const_offset())); |
1035 addptr(rdx, Address(rbx, methodOopDesc::const_offset())); |
1036 lea(rdx, Address(rdx, constMethodOopDesc::codes_offset())); |
1036 lea(rdx, Address(rdx, constMethodOopDesc::codes_offset())); |
1037 cmpptr(rdx, rsi); |
1037 cmpptr(rdx, rsi); |
1038 jcc(Assembler::equal, verify_continue); |
1038 jcc(Assembler::equal, verify_continue); |
1039 // rbx,: method |
1039 // rbx,: method |
1510 get_thread(rcx); |
1510 get_thread(rcx); |
1511 get_method(rbx); |
1511 get_method(rbx); |
1512 call_VM_leaf( |
1512 call_VM_leaf( |
1513 CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), rcx, rbx); |
1513 CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), rcx, rbx); |
1514 } |
1514 } |
|
1515 |
|
1516 // RedefineClasses() tracing support for obsolete method entry |
|
1517 if (RC_TRACE_IN_RANGE(0x00001000, 0x00002000)) { |
|
1518 get_thread(rcx); |
|
1519 get_method(rbx); |
|
1520 call_VM_leaf( |
|
1521 CAST_FROM_FN_PTR(address, SharedRuntime::rc_trace_method_entry), |
|
1522 rcx, rbx); |
|
1523 } |
1515 } |
1524 } |
1516 |
1525 |
1517 |
1526 |
1518 void InterpreterMacroAssembler::notify_method_exit( |
1527 void InterpreterMacroAssembler::notify_method_exit( |
1519 TosState state, NotifyMethodExitMode mode) { |
1528 TosState state, NotifyMethodExitMode mode) { |