575 __ get_thread(poll_addr); 576 __ movptr(poll_addr, Address(poll_addr, Thread::polling_page_offset())); 577 #endif 578 __ relocate(relocInfo::poll_return_type); 579 __ testl(rax, Address(poll_addr, 0)); 580 } else { 581 AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_return_type); 582 583 if (Assembler::is_polling_page_far()) { 584 __ lea(rscratch1, polling_page); 585 __ relocate(relocInfo::poll_return_type); 586 __ testl(rax, Address(rscratch1, 0)); 587 } else { 588 __ testl(rax, polling_page); 589 } 590 } 591 __ ret(0); 592 } 593 594 595 void LIR_Assembler::store_value_type_fields_to_buf(ciValueKlass* vk) { 596 __ store_value_type_fields_to_buf(vk); 597 } 598 599 int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) { 600 guarantee(info != NULL, "Shouldn't be NULL"); 601 int offset = __ offset(); 602 if (SafepointMechanism::uses_thread_local_poll()) { 603 #ifdef _LP64 604 const Register poll_addr = rscratch1; 605 __ movptr(poll_addr, Address(r15_thread, Thread::polling_page_offset())); 606 #else 607 assert(tmp->is_cpu_register(), "needed"); 608 const Register poll_addr = tmp->as_register(); 609 __ get_thread(poll_addr); 610 __ movptr(poll_addr, Address(poll_addr, in_bytes(Thread::polling_page_offset()))); 611 #endif 612 add_debug_info_for_branch(info); 613 __ relocate(relocInfo::poll_type); 614 address pre_pc = __ pc(); 615 __ testl(rax, Address(poll_addr, 0)); 616 address post_pc = __ pc(); | 575 __ get_thread(poll_addr); 576 __ movptr(poll_addr, Address(poll_addr, Thread::polling_page_offset())); 577 #endif 578 __ relocate(relocInfo::poll_return_type); 579 __ testl(rax, Address(poll_addr, 0)); 580 } else { 581 AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_return_type); 582 583 if (Assembler::is_polling_page_far()) { 584 __ lea(rscratch1, polling_page); 585 __ relocate(relocInfo::poll_return_type); 586 __ testl(rax, Address(rscratch1, 0)); 587 } else { 588 __ testl(rax, polling_page); 589 } 590 } 591 __ ret(0); 592 } 593 594 595 int LIR_Assembler::store_value_type_fields_to_buf(ciValueKlass* vk) { 596 return (__ store_value_type_fields_to_buf(vk, false)); 597 } 598 599 int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) { 600 guarantee(info != NULL, "Shouldn't be NULL"); 601 int offset = __ offset(); 602 if (SafepointMechanism::uses_thread_local_poll()) { 603 #ifdef _LP64 604 const Register poll_addr = rscratch1; 605 __ movptr(poll_addr, Address(r15_thread, Thread::polling_page_offset())); 606 #else 607 assert(tmp->is_cpu_register(), "needed"); 608 const Register poll_addr = tmp->as_register(); 609 __ get_thread(poll_addr); 610 __ movptr(poll_addr, Address(poll_addr, in_bytes(Thread::polling_page_offset()))); 611 #endif 612 add_debug_info_for_branch(info); 613 __ relocate(relocInfo::poll_type); 614 address pre_pc = __ pc(); 615 __ testl(rax, Address(poll_addr, 0)); 616 address post_pc = __ pc(); |