335 st->print("MOV Rtemp, #PollAddr\t! Load Polling address\n\t");
336 st->print("LDR Rtemp,[Rtemp]\t!Poll for Safepointing");
337 }
338 }
339 #endif
340
341 void MachEpilogNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
342 MacroAssembler _masm(&cbuf);
343 Compile* C = ra_->C;
344
345 size_t framesize = C->frame_size_in_bytes();
346 framesize -= 2*wordSize;
347 if (framesize != 0) {
348 __ add_slow(SP, SP, framesize);
349 }
350 __ raw_pop(FP, LR);
351
352 // If this does safepoint polling, then do it here
353 if (do_polling() && ra_->C->is_method_compilation()) {
354 // mov_slow here is usually one or two instruction
355 __ mov_address(Rtemp, (address)os::get_polling_page(), symbolic_Relocation::polling_page_reference);
356 __ relocate(relocInfo::poll_return_type);
357 __ ldr(Rtemp, Address(Rtemp));
358 }
359 }
360
361 uint MachEpilogNode::size(PhaseRegAlloc *ra_) const {
362 return MachNode::size(ra_);
363 }
364
365 int MachEpilogNode::reloc() const {
366 return 16; // a large enough number
367 }
368
369 const Pipeline * MachEpilogNode::pipeline() const {
370 return MachNode::pipeline_class();
371 }
372
373 int MachEpilogNode::safepoint_offset() const {
374 assert( do_polling(), "no return for this epilog node");
375 // return MacroAssembler::size_of_sethi(os::get_polling_page());
|
335 st->print("MOV Rtemp, #PollAddr\t! Load Polling address\n\t");
336 st->print("LDR Rtemp,[Rtemp]\t!Poll for Safepointing");
337 }
338 }
339 #endif
340
341 void MachEpilogNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
342 MacroAssembler _masm(&cbuf);
343 Compile* C = ra_->C;
344
345 size_t framesize = C->frame_size_in_bytes();
346 framesize -= 2*wordSize;
347 if (framesize != 0) {
348 __ add_slow(SP, SP, framesize);
349 }
350 __ raw_pop(FP, LR);
351
352 // If this does safepoint polling, then do it here
353 if (do_polling() && ra_->C->is_method_compilation()) {
354 // mov_slow here is usually one or two instruction
355 __ mov_address(Rtemp, (address)os::get_polling_page());
356 __ relocate(relocInfo::poll_return_type);
357 __ ldr(Rtemp, Address(Rtemp));
358 }
359 }
360
361 uint MachEpilogNode::size(PhaseRegAlloc *ra_) const {
362 return MachNode::size(ra_);
363 }
364
365 int MachEpilogNode::reloc() const {
366 return 16; // a large enough number
367 }
368
369 const Pipeline * MachEpilogNode::pipeline() const {
370 return MachNode::pipeline_class();
371 }
372
373 int MachEpilogNode::safepoint_offset() const {
374 assert( do_polling(), "no return for this epilog node");
375 // return MacroAssembler::size_of_sethi(os::get_polling_page());
|