src/cpu/x86/vm/interp_masm_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot-dvm Sdiff src/cpu/x86/vm

src/cpu/x86/vm/interp_masm_x86_64.cpp

Print this page
rev 522 : [mq]: meth.patch


 586                                                    Register arg_2,
 587                                                    Register arg_3) {
 588   assert(c_rarg0 != arg_2, "smashed argument");
 589   assert(c_rarg0 != arg_3, "smashed argument");
 590   assert(c_rarg1 != arg_1, "smashed argument");
 591   assert(c_rarg1 != arg_3, "smashed argument");
 592   assert(c_rarg2 != arg_1, "smashed argument");
 593   assert(c_rarg2 != arg_2, "smashed argument");
 594   if (c_rarg0 != arg_1) {
 595     mov(c_rarg0, arg_1);
 596   }
 597   if (c_rarg1 != arg_2) {
 598     mov(c_rarg1, arg_2);
 599   }
 600   if (c_rarg2 != arg_3) {
 601     mov(c_rarg2, arg_3);
 602   }
 603   MacroAssembler::call_VM_leaf_base(entry_point, 3);
 604 }
 605 
 606 // Jump to from_interpreted entry of a call unless single stepping is possible
 607 // in this thread in which case we must call the i2i entry
 608 void InterpreterMacroAssembler::jump_from_interpreted(Register method, Register temp) {
 609   // set sender sp
 610   lea(r13, Address(rsp, wordSize));
 611   // record last_sp
 612   movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), r13);







 613 
 614   if (JvmtiExport::can_post_interpreter_events()) {
 615     Label run_compiled_code;
 616     // JVMTI events, such as single-stepping, are implemented partly by avoiding running
 617     // compiled code in threads for which the event is enabled.  Check here for
 618     // interp_only_mode if these events CAN be enabled.
 619     get_thread(temp);
 620     // interp_only is an int, on little endian it is sufficient to test the byte only
 621     // Is a cmpl faster (ce
 622     cmpb(Address(temp, JavaThread::interp_only_mode_offset()), 0);
 623     jcc(Assembler::zero, run_compiled_code);
 624     jmp(Address(method, methodOopDesc::interpreter_entry_offset()));
 625     bind(run_compiled_code);
 626   }
 627 
 628   jmp(Address(method, methodOopDesc::from_interpreted_offset()));
 629 
 630 }
 631 
 632 




 586                                                    Register arg_2,
 587                                                    Register arg_3) {
 588   assert(c_rarg0 != arg_2, "smashed argument");
 589   assert(c_rarg0 != arg_3, "smashed argument");
 590   assert(c_rarg1 != arg_1, "smashed argument");
 591   assert(c_rarg1 != arg_3, "smashed argument");
 592   assert(c_rarg2 != arg_1, "smashed argument");
 593   assert(c_rarg2 != arg_2, "smashed argument");
 594   if (c_rarg0 != arg_1) {
 595     mov(c_rarg0, arg_1);
 596   }
 597   if (c_rarg1 != arg_2) {
 598     mov(c_rarg1, arg_2);
 599   }
 600   if (c_rarg2 != arg_3) {
 601     mov(c_rarg2, arg_3);
 602   }
 603   MacroAssembler::call_VM_leaf_base(entry_point, 3);
 604 }
 605 
 606 void InterpreterMacroAssembler::prepare_to_jump_from_interpreted() {


 607   // set sender sp
 608   lea(r13, Address(rsp, wordSize));
 609   // record last_sp
 610   movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), r13);
 611 }
 612 
 613 
 614 // Jump to from_interpreted entry of a call unless single stepping is possible
 615 // in this thread in which case we must call the i2i entry
 616 void InterpreterMacroAssembler::jump_from_interpreted(Register method, Register temp) {
 617   prepare_to_jump_from_interpreted();
 618 
 619   if (JvmtiExport::can_post_interpreter_events()) {
 620     Label run_compiled_code;
 621     // JVMTI events, such as single-stepping, are implemented partly by avoiding running
 622     // compiled code in threads for which the event is enabled.  Check here for
 623     // interp_only_mode if these events CAN be enabled.
 624     get_thread(temp);
 625     // interp_only is an int, on little endian it is sufficient to test the byte only
 626     // Is a cmpl faster (ce
 627     cmpb(Address(temp, JavaThread::interp_only_mode_offset()), 0);
 628     jcc(Assembler::zero, run_compiled_code);
 629     jmp(Address(method, methodOopDesc::interpreter_entry_offset()));
 630     bind(run_compiled_code);
 631   }
 632 
 633   jmp(Address(method, methodOopDesc::from_interpreted_offset()));
 634 
 635 }
 636 
 637 


src/cpu/x86/vm/interp_masm_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File