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)
|