< prev index next >

src/hotspot/share/runtime/vframeArray.cpp

Print this page




 280 
 281   // Setup the interpreter frame
 282 
 283   assert(method() != NULL, "method must exist");
 284   int temps = expressions()->size();
 285 
 286   int locks = monitors() == NULL ? 0 : monitors()->number_of_monitors();
 287 
 288   Interpreter::layout_activation(method(),
 289                                  temps + callee_parameters,
 290                                  popframe_preserved_args_size_in_words,
 291                                  locks,
 292                                  caller_actual_parameters,
 293                                  callee_parameters,
 294                                  callee_locals,
 295                                  caller,
 296                                  iframe(),
 297                                  is_top_frame,
 298                                  is_bottom_frame);
 299 
 300   iframe()->interpreter_frame_set_vt_alloc_ptr((intptr_t*)thread->vt_alloc_ptr());
 301 
 302   // Update the pc in the frame object and overwrite the temporary pc
 303   // we placed in the skeletal frame now that we finally know the
 304   // exact interpreter address we should use.
 305 
 306   _frame.patch_pc(thread, pc);
 307 
 308   assert (!method()->is_synchronized() || locks > 0 || _removed_monitors || raw_bci() == SynchronizationEntryBCI, "synchronized methods must have monitors");
 309 
 310   BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin();
 311   for (int index = 0; index < locks; index++) {
 312     top = iframe()->previous_monitor_in_interpreter_frame(top);
 313     BasicObjectLock* src = _monitors->at(index);
 314     top->set_obj(src->obj());
 315     src->lock()->move_to(src->obj(), top->lock());
 316   }
 317   if (ProfileInterpreter) {
 318     iframe()->interpreter_frame_set_mdp(0); // clear out the mdp.
 319   }
 320   iframe()->interpreter_frame_set_bcp(bcp);
 321   if (ProfileInterpreter) {




 280 
 281   // Setup the interpreter frame
 282 
 283   assert(method() != NULL, "method must exist");
 284   int temps = expressions()->size();
 285 
 286   int locks = monitors() == NULL ? 0 : monitors()->number_of_monitors();
 287 
 288   Interpreter::layout_activation(method(),
 289                                  temps + callee_parameters,
 290                                  popframe_preserved_args_size_in_words,
 291                                  locks,
 292                                  caller_actual_parameters,
 293                                  callee_parameters,
 294                                  callee_locals,
 295                                  caller,
 296                                  iframe(),
 297                                  is_top_frame,
 298                                  is_bottom_frame);
 299 


 300   // Update the pc in the frame object and overwrite the temporary pc
 301   // we placed in the skeletal frame now that we finally know the
 302   // exact interpreter address we should use.
 303 
 304   _frame.patch_pc(thread, pc);
 305 
 306   assert (!method()->is_synchronized() || locks > 0 || _removed_monitors || raw_bci() == SynchronizationEntryBCI, "synchronized methods must have monitors");
 307 
 308   BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin();
 309   for (int index = 0; index < locks; index++) {
 310     top = iframe()->previous_monitor_in_interpreter_frame(top);
 311     BasicObjectLock* src = _monitors->at(index);
 312     top->set_obj(src->obj());
 313     src->lock()->move_to(src->obj(), top->lock());
 314   }
 315   if (ProfileInterpreter) {
 316     iframe()->interpreter_frame_set_mdp(0); // clear out the mdp.
 317   }
 318   iframe()->interpreter_frame_set_bcp(bcp);
 319   if (ProfileInterpreter) {


< prev index next >