< prev index next >

src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp

Print this page


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


< prev index next >