< prev index next >

src/cpu/aarch64/vm/templateInterpreter_aarch64.cpp

Print this page




 518 
 519   // Note: the restored frame is not necessarily interpreted.
 520   // Use the shared runtime version of the StackOverflowError.
 521   assert(StubRoutines::throw_StackOverflowError_entry() != NULL, "stub not yet generated");
 522   __ far_jump(RuntimeAddress(StubRoutines::throw_StackOverflowError_entry()));
 523 
 524   // all done with frame size check
 525   __ bind(after_frame_check);
 526 }
 527 
 528 // Allocate monitor and lock method (asm interpreter)
 529 //
 530 // Args:
 531 //      rmethod: Method*
 532 //      rlocals: locals
 533 //
 534 // Kills:
 535 //      r0
 536 //      c_rarg0, c_rarg1, c_rarg2, c_rarg3, ...(param regs)
 537 //      rscratch1, rscratch2 (scratch regs)
 538 void InterpreterGenerator::lock_method(void) {
 539   // synchronize method
 540   const Address access_flags(rmethod, Method::access_flags_offset());
 541   const Address monitor_block_top(
 542         rfp,
 543         frame::interpreter_frame_monitor_block_top_offset * wordSize);
 544   const int entry_size = frame::interpreter_frame_monitor_size() * wordSize;
 545 
 546 #ifdef ASSERT
 547   {
 548     Label L;
 549     __ ldrw(r0, access_flags);
 550     __ tst(r0, JVM_ACC_SYNCHRONIZED);
 551     __ br(Assembler::NE, L);
 552     __ stop("method doesn't need synchronization");
 553     __ bind(L);
 554   }
 555 #endif // ASSERT
 556 
 557   // get synchronization object
 558   {




 518 
 519   // Note: the restored frame is not necessarily interpreted.
 520   // Use the shared runtime version of the StackOverflowError.
 521   assert(StubRoutines::throw_StackOverflowError_entry() != NULL, "stub not yet generated");
 522   __ far_jump(RuntimeAddress(StubRoutines::throw_StackOverflowError_entry()));
 523 
 524   // all done with frame size check
 525   __ bind(after_frame_check);
 526 }
 527 
 528 // Allocate monitor and lock method (asm interpreter)
 529 //
 530 // Args:
 531 //      rmethod: Method*
 532 //      rlocals: locals
 533 //
 534 // Kills:
 535 //      r0
 536 //      c_rarg0, c_rarg1, c_rarg2, c_rarg3, ...(param regs)
 537 //      rscratch1, rscratch2 (scratch regs)
 538 void TemplateInterpreterGenerator::lock_method() {
 539   // synchronize method
 540   const Address access_flags(rmethod, Method::access_flags_offset());
 541   const Address monitor_block_top(
 542         rfp,
 543         frame::interpreter_frame_monitor_block_top_offset * wordSize);
 544   const int entry_size = frame::interpreter_frame_monitor_size() * wordSize;
 545 
 546 #ifdef ASSERT
 547   {
 548     Label L;
 549     __ ldrw(r0, access_flags);
 550     __ tst(r0, JVM_ACC_SYNCHRONIZED);
 551     __ br(Assembler::NE, L);
 552     __ stop("method doesn't need synchronization");
 553     __ bind(L);
 554   }
 555 #endif // ASSERT
 556 
 557   // get synchronization object
 558   {


< prev index next >