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
|