src/cpu/x86/vm/templateInterpreter_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/templateInterpreter_x86_32.cpp

Print this page




 521   // and safer anyway in case of JSR292 adaptations.
 522 
 523   __ pop(rax); // return address must be moved if SP is changed
 524   __ mov(rsp, rsi);
 525   __ push(rax);
 526 
 527   // Note: the restored frame is not necessarily interpreted.
 528   // Use the shared runtime version of the StackOverflowError.
 529   assert(StubRoutines::throw_StackOverflowError_entry() != NULL, "stub not yet generated");
 530   __ jump(ExternalAddress(StubRoutines::throw_StackOverflowError_entry()));
 531   // all done with frame size check
 532   __ bind(after_frame_check_pop);
 533   __ pop(rsi);
 534 
 535   __ bind(after_frame_check);
 536 }
 537 
 538 // Allocate monitor and lock method (asm interpreter)
 539 // rbx, - Method*
 540 //
 541 void InterpreterGenerator::lock_method(void) {
 542   // synchronize method
 543   const Address access_flags      (rbx, Method::access_flags_offset());
 544   const Address monitor_block_top (rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize);
 545   const int entry_size            = frame::interpreter_frame_monitor_size() * wordSize;
 546 
 547   #ifdef ASSERT
 548     { Label L;
 549       __ movl(rax, access_flags);
 550       __ testl(rax, JVM_ACC_SYNCHRONIZED);
 551       __ jcc(Assembler::notZero, L);
 552       __ stop("method doesn't need synchronization");
 553       __ bind(L);
 554     }
 555   #endif // ASSERT
 556   // get synchronization object
 557   { Label done;
 558     const int mirror_offset = in_bytes(Klass::java_mirror_offset());
 559     __ movl(rax, access_flags);
 560     __ testl(rax, JVM_ACC_STATIC);
 561     __ movptr(rax, Address(rdi, Interpreter::local_offset_in_bytes(0)));  // get receiver (assume this is frequent case)




 521   // and safer anyway in case of JSR292 adaptations.
 522 
 523   __ pop(rax); // return address must be moved if SP is changed
 524   __ mov(rsp, rsi);
 525   __ push(rax);
 526 
 527   // Note: the restored frame is not necessarily interpreted.
 528   // Use the shared runtime version of the StackOverflowError.
 529   assert(StubRoutines::throw_StackOverflowError_entry() != NULL, "stub not yet generated");
 530   __ jump(ExternalAddress(StubRoutines::throw_StackOverflowError_entry()));
 531   // all done with frame size check
 532   __ bind(after_frame_check_pop);
 533   __ pop(rsi);
 534 
 535   __ bind(after_frame_check);
 536 }
 537 
 538 // Allocate monitor and lock method (asm interpreter)
 539 // rbx, - Method*
 540 //
 541 void TemplateInterpreterGenerator::lock_method() {
 542   // synchronize method
 543   const Address access_flags      (rbx, Method::access_flags_offset());
 544   const Address monitor_block_top (rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize);
 545   const int entry_size            = frame::interpreter_frame_monitor_size() * wordSize;
 546 
 547   #ifdef ASSERT
 548     { Label L;
 549       __ movl(rax, access_flags);
 550       __ testl(rax, JVM_ACC_SYNCHRONIZED);
 551       __ jcc(Assembler::notZero, L);
 552       __ stop("method doesn't need synchronization");
 553       __ bind(L);
 554     }
 555   #endif // ASSERT
 556   // get synchronization object
 557   { Label done;
 558     const int mirror_offset = in_bytes(Klass::java_mirror_offset());
 559     __ movl(rax, access_flags);
 560     __ testl(rax, JVM_ACC_STATIC);
 561     __ movptr(rax, Address(rdi, Interpreter::local_offset_in_bytes(0)));  // get receiver (assume this is frequent case)


src/cpu/x86/vm/templateInterpreter_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File