hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp
changeset 2154 72a9b7284ccf
parent 2105 347008ce7984
parent 2151 ad54958f7e9e
child 2259 d3c946e7f127
equal deleted inserted replaced
2106:ec595a5e793e 2154:72a9b7284ccf
   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) {