< prev index next >

src/share/vm/runtime/deoptimization.cpp

Print this page




 459   // area as created by the compiled frame will not be usable by
 460   // the interpreter. (Depending on the calling convention there
 461   // may not even be enough space).
 462 
 463   // QQQ I'd rather see this pushed down into last_frame_adjust
 464   // and have it take the sender (aka caller).
 465 
 466   if (deopt_sender.is_compiled_frame() || caller_was_method_handle) {
 467     caller_adjustment = last_frame_adjust(0, callee_locals);
 468   } else if (callee_locals > callee_parameters) {
 469     // The caller frame may need extending to accommodate
 470     // non-parameter locals of the first unpacked interpreted frame.
 471     // Compute that adjustment.
 472     caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
 473   }
 474 
 475   // If the sender is deoptimized the we must retrieve the address of the handler
 476   // since the frame will "magically" show the original pc before the deopt
 477   // and we'd undo the deopt.
 478 
 479   frame_pcs[0] = deopt_sender.raw_pc();
 480 
 481 #ifndef SHARK
 482   assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc");
 483 #endif // SHARK
 484 
 485   UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord,
 486                                       caller_adjustment * BytesPerWord,
 487                                       caller_was_method_handle ? 0 : callee_parameters,
 488                                       number_of_frames,
 489                                       frame_sizes,
 490                                       frame_pcs,
 491                                       return_type);
 492   // On some platforms, we need a way to pass some platform dependent
 493   // information to the unpacking code so the skeletal frames come out
 494   // correct (initial fp value, unextended sp, ...)
 495   info->set_initial_info((intptr_t) array->sender().initial_deoptimization_info());
 496 
 497   if (array->frames() > 1) {
 498     if (VerifyStack && TraceDeoptimization) {
 499       ttyLocker ttyl;




 459   // area as created by the compiled frame will not be usable by
 460   // the interpreter. (Depending on the calling convention there
 461   // may not even be enough space).
 462 
 463   // QQQ I'd rather see this pushed down into last_frame_adjust
 464   // and have it take the sender (aka caller).
 465 
 466   if (deopt_sender.is_compiled_frame() || caller_was_method_handle) {
 467     caller_adjustment = last_frame_adjust(0, callee_locals);
 468   } else if (callee_locals > callee_parameters) {
 469     // The caller frame may need extending to accommodate
 470     // non-parameter locals of the first unpacked interpreted frame.
 471     // Compute that adjustment.
 472     caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
 473   }
 474 
 475   // If the sender is deoptimized the we must retrieve the address of the handler
 476   // since the frame will "magically" show the original pc before the deopt
 477   // and we'd undo the deopt.
 478 
 479   frame_pcs[0] = deopt_sender.raw_pc(thread);
 480 
 481 #ifndef SHARK
 482   assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc");
 483 #endif // SHARK
 484 
 485   UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord,
 486                                       caller_adjustment * BytesPerWord,
 487                                       caller_was_method_handle ? 0 : callee_parameters,
 488                                       number_of_frames,
 489                                       frame_sizes,
 490                                       frame_pcs,
 491                                       return_type);
 492   // On some platforms, we need a way to pass some platform dependent
 493   // information to the unpacking code so the skeletal frames come out
 494   // correct (initial fp value, unextended sp, ...)
 495   info->set_initial_info((intptr_t) array->sender().initial_deoptimization_info());
 496 
 497   if (array->frames() > 1) {
 498     if (VerifyStack && TraceDeoptimization) {
 499       ttyLocker ttyl;


< prev index next >