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
|