< prev index next >

src/cpu/aarch64/vm/frame_aarch64.cpp

Print this page
rev 9429 : 8143072: Port JVMCI to AArch64
Summary: AArch64-specific code for JVMCI
Reviewed-by: duke


 437   // this is weird "H" ought to be at a higher address however the
 438   // oopMaps seems to have the "H" regs at the same address and the
 439   // vanilla register.
 440   // XXXX make this go away
 441   if (true) {
 442     map->set_location(rfp->as_VMReg()->next(), (address) link_addr);
 443   }
 444 }
 445 
 446 
 447 //------------------------------------------------------------------------------
 448 // frame::sender_for_interpreter_frame
 449 frame frame::sender_for_interpreter_frame(RegisterMap* map) const {
 450   // SP is the raw SP from the sender after adapter or interpreter
 451   // extension.
 452   intptr_t* sender_sp = this->sender_sp();
 453 
 454   // This is the sp before any possible extension (adapter/locals).
 455   intptr_t* unextended_sp = interpreter_frame_sender_sp();
 456 
 457 #ifdef COMPILER2
 458   if (map->update_map()) {
 459     update_map_with_saved_link(map, (intptr_t**) addr_at(link_offset));
 460   }
 461 #endif // COMPILER2
 462 
 463   return frame(sender_sp, unextended_sp, link(), sender_pc());
 464 }
 465 
 466 
 467 //------------------------------------------------------------------------------
 468 // frame::sender_for_compiled_frame
 469 frame frame::sender_for_compiled_frame(RegisterMap* map) const {
 470   // we cannot rely upon the last fp having been saved to the thread
 471   // in C2 code but it will have been pushed onto the stack. so we
 472   // have to find it relative to the unextended sp
 473 
 474   assert(_cb->frame_size() >= 0, "must have non-zero frame size");
 475   intptr_t* l_sender_sp = unextended_sp() + _cb->frame_size();
 476   intptr_t* unextended_sp = l_sender_sp;
 477 
 478   // the return_address is always the word on the stack
 479   address sender_pc = (address) *(l_sender_sp-1);
 480 
 481   intptr_t** saved_fp_addr = (intptr_t**) (l_sender_sp - frame::sender_sp_offset);




 437   // this is weird "H" ought to be at a higher address however the
 438   // oopMaps seems to have the "H" regs at the same address and the
 439   // vanilla register.
 440   // XXXX make this go away
 441   if (true) {
 442     map->set_location(rfp->as_VMReg()->next(), (address) link_addr);
 443   }
 444 }
 445 
 446 
 447 //------------------------------------------------------------------------------
 448 // frame::sender_for_interpreter_frame
 449 frame frame::sender_for_interpreter_frame(RegisterMap* map) const {
 450   // SP is the raw SP from the sender after adapter or interpreter
 451   // extension.
 452   intptr_t* sender_sp = this->sender_sp();
 453 
 454   // This is the sp before any possible extension (adapter/locals).
 455   intptr_t* unextended_sp = interpreter_frame_sender_sp();
 456 
 457 #if defined(COMPILER2) || INCLUDE_JVMCI
 458   if (map->update_map()) {
 459     update_map_with_saved_link(map, (intptr_t**) addr_at(link_offset));
 460   }
 461 #endif // COMPILER2 || INCLUDE_JVMCI
 462 
 463   return frame(sender_sp, unextended_sp, link(), sender_pc());
 464 }
 465 
 466 
 467 //------------------------------------------------------------------------------
 468 // frame::sender_for_compiled_frame
 469 frame frame::sender_for_compiled_frame(RegisterMap* map) const {
 470   // we cannot rely upon the last fp having been saved to the thread
 471   // in C2 code but it will have been pushed onto the stack. so we
 472   // have to find it relative to the unextended sp
 473 
 474   assert(_cb->frame_size() >= 0, "must have non-zero frame size");
 475   intptr_t* l_sender_sp = unextended_sp() + _cb->frame_size();
 476   intptr_t* unextended_sp = l_sender_sp;
 477 
 478   // the return_address is always the word on the stack
 479   address sender_pc = (address) *(l_sender_sp-1);
 480 
 481   intptr_t** saved_fp_addr = (intptr_t**) (l_sender_sp - frame::sender_sp_offset);


< prev index next >