< prev index next >

src/share/vm/runtime/vframeArray.cpp

Print this page




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


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




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