< prev index next >

src/cpu/aarch64/vm/interp_masm_aarch64.cpp

Print this page
rev 12502 : 8172144: AArch64: Implement "JEP 270: Reserved Stack Areas for Critical Sections"
Reviewed-by: duke


 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 {


< prev index next >