< prev index next >

src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp

Print this page
rev 51719 : [mq]: 8210676


3475   // debug-info recordings, as well as let GC find all oops.
3476 
3477   oop_maps->add_gc_map( __ pc() - start, map);
3478 
3479   Label noException;
3480 
3481   __ reset_last_Java_frame(false);
3482 
3483   __ cmpptr(Address(r15_thread, Thread::pending_exception_offset()), (int32_t)NULL_WORD);
3484   __ jcc(Assembler::equal, noException);
3485 
3486   // Exception pending
3487 
3488   RegisterSaver::restore_live_registers(masm, save_vectors);
3489 
3490   __ jump(RuntimeAddress(StubRoutines::forward_exception_entry()));
3491 
3492   // No exception case
3493   __ bind(noException);
3494 
3495   Label no_adjust, bail, no_prefix, not_special;



3496   if (SafepointMechanism::uses_thread_local_poll() && !cause_return) {


3497     // If our stashed return pc was modified by the runtime we avoid touching it
3498     __ cmpptr(rbx, Address(rbp, wordSize));
3499     __ jccb(Assembler::notEqual, no_adjust);
3500 
3501     // Skip over the poll instruction.
3502     // See NativeInstruction::is_safepoint_poll()
3503     // Possible encodings:
3504     //      85 00       test   %eax,(%rax)
3505     //      85 01       test   %eax,(%rcx)
3506     //      85 02       test   %eax,(%rdx)
3507     //      85 03       test   %eax,(%rbx)
3508     //      85 06       test   %eax,(%rsi)
3509     //      85 07       test   %eax,(%rdi)
3510     //
3511     //   41 85 00       test   %eax,(%r8)
3512     //   41 85 01       test   %eax,(%r9)
3513     //   41 85 02       test   %eax,(%r10)
3514     //   41 85 03       test   %eax,(%r11)
3515     //   41 85 06       test   %eax,(%r14)
3516     //   41 85 07       test   %eax,(%r15)




3475   // debug-info recordings, as well as let GC find all oops.
3476 
3477   oop_maps->add_gc_map( __ pc() - start, map);
3478 
3479   Label noException;
3480 
3481   __ reset_last_Java_frame(false);
3482 
3483   __ cmpptr(Address(r15_thread, Thread::pending_exception_offset()), (int32_t)NULL_WORD);
3484   __ jcc(Assembler::equal, noException);
3485 
3486   // Exception pending
3487 
3488   RegisterSaver::restore_live_registers(masm, save_vectors);
3489 
3490   __ jump(RuntimeAddress(StubRoutines::forward_exception_entry()));
3491 
3492   // No exception case
3493   __ bind(noException);
3494 
3495   Label no_adjust;
3496 #ifdef ASSERT
3497   Label bail;
3498 #endif
3499   if (SafepointMechanism::uses_thread_local_poll() && !cause_return) {
3500     Label no_prefix, not_special;
3501 
3502     // If our stashed return pc was modified by the runtime we avoid touching it
3503     __ cmpptr(rbx, Address(rbp, wordSize));
3504     __ jccb(Assembler::notEqual, no_adjust);
3505 
3506     // Skip over the poll instruction.
3507     // See NativeInstruction::is_safepoint_poll()
3508     // Possible encodings:
3509     //      85 00       test   %eax,(%rax)
3510     //      85 01       test   %eax,(%rcx)
3511     //      85 02       test   %eax,(%rdx)
3512     //      85 03       test   %eax,(%rbx)
3513     //      85 06       test   %eax,(%rsi)
3514     //      85 07       test   %eax,(%rdi)
3515     //
3516     //   41 85 00       test   %eax,(%r8)
3517     //   41 85 01       test   %eax,(%r9)
3518     //   41 85 02       test   %eax,(%r10)
3519     //   41 85 03       test   %eax,(%r11)
3520     //   41 85 06       test   %eax,(%r14)
3521     //   41 85 07       test   %eax,(%r15)


< prev index next >