< prev index next >

src/cpu/aarch64/vm/aarch64.ad

Print this page
rev 12502 : 8172144: AArch64: Implement "JEP 270: Reserved Stack Areas for Critical Sections"
Reviewed-by: duke


2991 
2992   if (do_polling() && C->is_method_compilation()) {
2993     st->print("# touch polling page\n\t");
2994     st->print("mov  rscratch1, #0x%lx\n\t", p2i(os::get_polling_page()));
2995     st->print("ldr zr, [rscratch1]");
2996   }
2997 }
2998 #endif
2999 
3000 void MachEpilogNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
3001   Compile* C = ra_->C;
3002   MacroAssembler _masm(&cbuf);
3003   int framesize = C->frame_slots() << LogBytesPerInt;
3004 
3005   __ remove_frame(framesize);
3006 
3007   if (NotifySimulator) {
3008     __ notify(Assembler::method_reentry);
3009   }
3010 




3011   if (do_polling() && C->is_method_compilation()) {
3012     __ read_polling_page(rscratch1, os::get_polling_page(), relocInfo::poll_return_type);
3013   }
3014 }
3015 
3016 uint MachEpilogNode::size(PhaseRegAlloc *ra_) const {
3017   // Variable size. Determine dynamically.
3018   return MachNode::size(ra_);
3019 }
3020 
3021 int MachEpilogNode::reloc() const {
3022   // Return number of relocatable values contained in this instruction.
3023   return 1; // 1 for polling page.
3024 }
3025 
3026 const Pipeline * MachEpilogNode::pipeline() const {
3027   return MachNode::pipeline_class();
3028 }
3029 
3030 // This method seems to be obsolete. It is declared in machnode.hpp




2991 
2992   if (do_polling() && C->is_method_compilation()) {
2993     st->print("# touch polling page\n\t");
2994     st->print("mov  rscratch1, #0x%lx\n\t", p2i(os::get_polling_page()));
2995     st->print("ldr zr, [rscratch1]");
2996   }
2997 }
2998 #endif
2999 
3000 void MachEpilogNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
3001   Compile* C = ra_->C;
3002   MacroAssembler _masm(&cbuf);
3003   int framesize = C->frame_slots() << LogBytesPerInt;
3004 
3005   __ remove_frame(framesize);
3006 
3007   if (NotifySimulator) {
3008     __ notify(Assembler::method_reentry);
3009   }
3010 
3011   if (StackReservedPages > 0 && C->has_reserved_stack_access()) {
3012     __ reserved_stack_check();
3013   }
3014 
3015   if (do_polling() && C->is_method_compilation()) {
3016     __ read_polling_page(rscratch1, os::get_polling_page(), relocInfo::poll_return_type);
3017   }
3018 }
3019 
3020 uint MachEpilogNode::size(PhaseRegAlloc *ra_) const {
3021   // Variable size. Determine dynamically.
3022   return MachNode::size(ra_);
3023 }
3024 
3025 int MachEpilogNode::reloc() const {
3026   // Return number of relocatable values contained in this instruction.
3027   return 1; // 1 for polling page.
3028 }
3029 
3030 const Pipeline * MachEpilogNode::pipeline() const {
3031   return MachNode::pipeline_class();
3032 }
3033 
3034 // This method seems to be obsolete. It is declared in machnode.hpp


< prev index next >