hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
changeset 360 21d113ecbf6a
parent 1 489c9b5090e2
child 670 ddf3e9583f2f
equal deleted inserted replaced
357:f4edb0d9f109 360:21d113ecbf6a
   662   // jvmti support
   662   // jvmti support
   663   __ notify_method_entry();
   663   __ notify_method_entry();
   664 
   664 
   665   // work registers
   665   // work registers
   666   const Register method = rbx;
   666   const Register method = rbx;
   667   const Register t      = r12;
   667   const Register t      = r11;
   668 
   668 
   669   // allocate space for parameters
   669   // allocate space for parameters
   670   __ get_method(method);
   670   __ get_method(method);
   671   __ verify_oop(method);
   671   __ verify_oop(method);
   672   __ load_unsigned_word(t,
   672   __ load_unsigned_word(t,
   842     __ movq(r12, rsp); // remember sp
   842     __ movq(r12, rsp); // remember sp
   843     __ subq(rsp, frame::arg_reg_save_area_bytes); // windows
   843     __ subq(rsp, frame::arg_reg_save_area_bytes); // windows
   844     __ andq(rsp, -16); // align stack as required by ABI
   844     __ andq(rsp, -16); // align stack as required by ABI
   845     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, JavaThread::check_special_condition_for_native_trans)));
   845     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, JavaThread::check_special_condition_for_native_trans)));
   846     __ movq(rsp, r12); // restore sp
   846     __ movq(rsp, r12); // restore sp
       
   847     __ reinit_heapbase();
   847     __ bind(Continue);
   848     __ bind(Continue);
   848   }
   849   }
   849 
   850 
   850   // change thread state
   851   // change thread state
   851   __ movl(Address(r15_thread, JavaThread::thread_state_offset()), _thread_in_Java);
   852   __ movl(Address(r15_thread, JavaThread::thread_state_offset()), _thread_in_Java);
   889     __ subq(rsp, frame::arg_reg_save_area_bytes); // windows
   890     __ subq(rsp, frame::arg_reg_save_area_bytes); // windows
   890     __ andq(rsp, -16); // align stack as required by ABI
   891     __ andq(rsp, -16); // align stack as required by ABI
   891     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::reguard_yellow_pages)));
   892     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::reguard_yellow_pages)));
   892     __ movq(rsp, r12); // restore sp
   893     __ movq(rsp, r12); // restore sp
   893     __ popaq(); // XXX only restore smashed registers
   894     __ popaq(); // XXX only restore smashed registers
       
   895     __ reinit_heapbase();
   894 
   896 
   895     __ bind(no_reguard);
   897     __ bind(no_reguard);
   896   }
   898   }
   897 
   899 
   898 
   900 
  1358   __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
  1360   __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
  1359   // rax: exception
  1361   // rax: exception
  1360   // rdx: return address/pc that threw exception
  1362   // rdx: return address/pc that threw exception
  1361   __ restore_bcp();    // r13 points to call/send
  1363   __ restore_bcp();    // r13 points to call/send
  1362   __ restore_locals();
  1364   __ restore_locals();
       
  1365   __ reinit_heapbase();  // restore r12 as heapbase.
  1363   // Entry point for exceptions thrown within interpreter code
  1366   // Entry point for exceptions thrown within interpreter code
  1364   Interpreter::_throw_exception_entry = __ pc();
  1367   Interpreter::_throw_exception_entry = __ pc();
  1365   // expression stack is undefined here
  1368   // expression stack is undefined here
  1366   // rax: exception
  1369   // rax: exception
  1367   // r13: exception bcp
  1370   // r13: exception bcp
  1656          "entry must have been generated");
  1659          "entry must have been generated");
  1657   __ movq(r12, rsp); // remember sp
  1660   __ movq(r12, rsp); // remember sp
  1658   __ andq(rsp, -16); // align stack as required by ABI
  1661   __ andq(rsp, -16); // align stack as required by ABI
  1659   __ call(RuntimeAddress(Interpreter::trace_code(t->tos_in())));
  1662   __ call(RuntimeAddress(Interpreter::trace_code(t->tos_in())));
  1660   __ movq(rsp, r12); // restore sp
  1663   __ movq(rsp, r12); // restore sp
       
  1664   __ reinit_heapbase();
  1661 }
  1665 }
  1662 
  1666 
  1663 
  1667 
  1664 void TemplateInterpreterGenerator::stop_interpreter_at() {
  1668 void TemplateInterpreterGenerator::stop_interpreter_at() {
  1665   Label L;
  1669   Label L;