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