602
603 add(c_rarg1, c_rarg1, entry_size); // otherwise advance to next entry
604 bind(entry);
605 cmp(c_rarg1, r19); // check if bottom reached
606 br(Assembler::NE, loop); // if not at bottom then check this entry
607 }
608
609 bind(no_unlock);
610
611 // jvmti support
612 if (notify_jvmdi) {
613 notify_method_exit(state, NotifyJVMTI); // preserve TOSCA
614 } else {
615 notify_method_exit(state, SkipNotifyJVMTI); // preserve TOSCA
616 }
617
618 // remove activation
619 // get sender esp
620 ldr(esp,
621 Address(rfp, frame::interpreter_frame_sender_sp_offset * wordSize));
622 // remove frame anchor
623 leave();
624 // If we're returning to interpreted code we will shortly be
625 // adjusting SP to allow some space for ESP. If we're returning to
626 // compiled code the saved sender SP was saved in sender_sp, so this
627 // restores it.
628 andr(sp, esp, -16);
629 }
630
631 // Lock object
632 //
633 // Args:
634 // c_rarg1: BasicObjectLock to be used for locking
635 //
636 // Kills:
637 // r0
638 // c_rarg0, c_rarg1, c_rarg2, c_rarg3, .. (param regs)
639 // rscratch1, rscratch2 (scratch regs)
640 void InterpreterMacroAssembler::lock_object(Register lock_reg)
641 {
|
602
603 add(c_rarg1, c_rarg1, entry_size); // otherwise advance to next entry
604 bind(entry);
605 cmp(c_rarg1, r19); // check if bottom reached
606 br(Assembler::NE, loop); // if not at bottom then check this entry
607 }
608
609 bind(no_unlock);
610
611 // jvmti support
612 if (notify_jvmdi) {
613 notify_method_exit(state, NotifyJVMTI); // preserve TOSCA
614 } else {
615 notify_method_exit(state, SkipNotifyJVMTI); // preserve TOSCA
616 }
617
618 // remove activation
619 // get sender esp
620 ldr(esp,
621 Address(rfp, frame::interpreter_frame_sender_sp_offset * wordSize));
622 if (StackReservedPages > 0) {
623 // testing if reserved zone needs to be re-enabled
624 Label no_reserved_zone_enabling;
625
626 ldr(rscratch1, Address(rthread, JavaThread::reserved_stack_activation_offset()));
627 cmp(esp, rscratch1);
628 br(Assembler::LS, no_reserved_zone_enabling);
629
630 call_VM_leaf(
631 CAST_FROM_FN_PTR(address, SharedRuntime::enable_stack_reserved_zone), rthread);
632 call_VM(noreg, CAST_FROM_FN_PTR(address,
633 InterpreterRuntime::throw_delayed_StackOverflowError));
634 should_not_reach_here();
635
636 bind(no_reserved_zone_enabling);
637 }
638 // remove frame anchor
639 leave();
640 // If we're returning to interpreted code we will shortly be
641 // adjusting SP to allow some space for ESP. If we're returning to
642 // compiled code the saved sender SP was saved in sender_sp, so this
643 // restores it.
644 andr(sp, esp, -16);
645 }
646
647 // Lock object
648 //
649 // Args:
650 // c_rarg1: BasicObjectLock to be used for locking
651 //
652 // Kills:
653 // r0
654 // c_rarg0, c_rarg1, c_rarg2, c_rarg3, .. (param regs)
655 // rscratch1, rscratch2 (scratch regs)
656 void InterpreterMacroAssembler::lock_object(Register lock_reg)
657 {
|