569 push(arg_1);
570 MacroAssembler::call_VM_leaf_base(entry_point, 1);
571 }
572
573
574 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2) {
575 push(arg_2);
576 push(arg_1);
577 MacroAssembler::call_VM_leaf_base(entry_point, 2);
578 }
579
580
581 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2, Register arg_3) {
582 push(arg_3);
583 push(arg_2);
584 push(arg_1);
585 MacroAssembler::call_VM_leaf_base(entry_point, 3);
586 }
587
588
589 // Jump to from_interpreted entry of a call unless single stepping is possible
590 // in this thread in which case we must call the i2i entry
591 void InterpreterMacroAssembler::jump_from_interpreted(Register method, Register temp) {
592 // set sender sp
593 lea(rsi, Address(rsp, wordSize));
594 // record last_sp
595 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), rsi);
596
597 if (JvmtiExport::can_post_interpreter_events()) {
598 Label run_compiled_code;
599 // JVMTI events, such as single-stepping, are implemented partly by avoiding running
600 // compiled code in threads for which the event is enabled. Check here for
601 // interp_only_mode if these events CAN be enabled.
602 get_thread(temp);
603 // interp_only is an int, on little endian it is sufficient to test the byte only
604 // Is a cmpl faster (ce
605 cmpb(Address(temp, JavaThread::interp_only_mode_offset()), 0);
606 jcc(Assembler::zero, run_compiled_code);
607 jmp(Address(method, methodOopDesc::interpreter_entry_offset()));
608 bind(run_compiled_code);
609 }
610
611 jmp(Address(method, methodOopDesc::from_interpreted_offset()));
612
613 }
614
615
|
569 push(arg_1);
570 MacroAssembler::call_VM_leaf_base(entry_point, 1);
571 }
572
573
574 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2) {
575 push(arg_2);
576 push(arg_1);
577 MacroAssembler::call_VM_leaf_base(entry_point, 2);
578 }
579
580
581 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2, Register arg_3) {
582 push(arg_3);
583 push(arg_2);
584 push(arg_1);
585 MacroAssembler::call_VM_leaf_base(entry_point, 3);
586 }
587
588
589 void InterpreterMacroAssembler::prepare_to_jump_from_interpreted() {
590 // set sender sp
591 lea(rsi, Address(rsp, wordSize));
592 // record last_sp
593 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), rsi);
594 }
595
596
597 // Jump to from_interpreted entry of a call unless single stepping is possible
598 // in this thread in which case we must call the i2i entry
599 void InterpreterMacroAssembler::jump_from_interpreted(Register method, Register temp) {
600 prepare_to_jump_from_interpreted();
601
602 if (JvmtiExport::can_post_interpreter_events()) {
603 Label run_compiled_code;
604 // JVMTI events, such as single-stepping, are implemented partly by avoiding running
605 // compiled code in threads for which the event is enabled. Check here for
606 // interp_only_mode if these events CAN be enabled.
607 get_thread(temp);
608 // interp_only is an int, on little endian it is sufficient to test the byte only
609 // Is a cmpl faster (ce
610 cmpb(Address(temp, JavaThread::interp_only_mode_offset()), 0);
611 jcc(Assembler::zero, run_compiled_code);
612 jmp(Address(method, methodOopDesc::interpreter_entry_offset()));
613 bind(run_compiled_code);
614 }
615
616 jmp(Address(method, methodOopDesc::from_interpreted_offset()));
617
618 }
619
620
|