src/cpu/sparc/vm/frame_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7045514 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/frame_sparc.cpp

Print this page




 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   }


src/cpu/sparc/vm/frame_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File