496 intptr_t* younger_sp = sp(); 497 intptr_t* sp = sender_sp(); 498 499 // Note: The version of this operation on any platform with callee-save 500 // registers must update the register map (if not null). 501 // In order to do this correctly, the various subtypes of 502 // of frame (interpreted, compiled, glue, native), 503 // must be distinguished. There is no need on SPARC for 504 // such distinctions, because all callee-save registers are 505 // preserved for all frames via SPARC-specific mechanisms. 506 // 507 // *** HOWEVER, *** if and when we make any floating-point 508 // registers callee-saved, then we will have to copy over 509 // the RegisterMap update logic from the Intel code. 510 511 // The constructor of the sender must know whether this frame is interpreted so it can set the 512 // sender's _sp_adjustment_by_callee field. An osr adapter frame was originally 513 // interpreted but its pc is in the code cache (for c1 -> osr_frame_return_id stub), so it must be 514 // explicitly recognized. 515 516 bool frame_is_interpreted = is_interpreted_frame(); 517 if (frame_is_interpreted) { 518 map->make_integer_regs_unsaved(); 519 map->shift_window(sp, younger_sp); 520 } else if (_cb != NULL) { 521 // Update the locations of implicitly saved registers to be their 522 // addresses in the register save area. 523 // For %o registers, the addresses of %i registers in the next younger 524 // frame are used. 525 map->shift_window(sp, younger_sp); 526 if (map->update_map()) { 527 // Tell GC to use argument oopmaps for some runtime stubs that need it. 528 // For C1, the runtime stub might not have oop maps, so set this flag 529 // outside of update_register_map. 530 map->set_include_argument_oops(_cb->caller_must_gc_arguments(map->thread())); 531 if (_cb->oop_maps() != NULL) { 532 OopMapSet::update_register_map(this, map); 533 } 534 } 535 } | 496 intptr_t* younger_sp = sp(); 497 intptr_t* sp = sender_sp(); 498 499 // Note: The version of this operation on any platform with callee-save 500 // registers must update the register map (if not null). 501 // In order to do this correctly, the various subtypes of 502 // of frame (interpreted, compiled, glue, native), 503 // must be distinguished. There is no need on SPARC for 504 // such distinctions, because all callee-save registers are 505 // preserved for all frames via SPARC-specific mechanisms. 506 // 507 // *** HOWEVER, *** if and when we make any floating-point 508 // registers callee-saved, then we will have to copy over 509 // the RegisterMap update logic from the Intel code. 510 511 // The constructor of the sender must know whether this frame is interpreted so it can set the 512 // sender's _sp_adjustment_by_callee field. An osr adapter frame was originally 513 // interpreted but its pc is in the code cache (for c1 -> osr_frame_return_id stub), so it must be 514 // explicitly recognized. 515 516 if (is_ricochet_frame()) return sender_for_ricochet_frame(map); 517 518 bool frame_is_interpreted = is_interpreted_frame(); 519 if (frame_is_interpreted) { 520 map->make_integer_regs_unsaved(); 521 map->shift_window(sp, younger_sp); 522 } else if (_cb != NULL) { 523 // Update the locations of implicitly saved registers to be their 524 // addresses in the register save area. 525 // For %o registers, the addresses of %i registers in the next younger 526 // frame are used. 527 map->shift_window(sp, younger_sp); 528 if (map->update_map()) { 529 // Tell GC to use argument oopmaps for some runtime stubs that need it. 530 // For C1, the runtime stub might not have oop maps, so set this flag 531 // outside of update_register_map. 532 map->set_include_argument_oops(_cb->caller_must_gc_arguments(map->thread())); 533 if (_cb->oop_maps() != NULL) { 534 OopMapSet::update_register_map(this, map); 535 } 536 } 537 } |