src/share/vm/runtime/vframeArray.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8004128_2 Sdiff src/share/vm/runtime

src/share/vm/runtime/vframeArray.cpp

Print this page




 279                                  iframe(),
 280                                  is_top_frame,
 281                                  is_bottom_frame);
 282 
 283   // Update the pc in the frame object and overwrite the temporary pc
 284   // we placed in the skeletal frame now that we finally know the
 285   // exact interpreter address we should use.
 286 
 287   _frame.patch_pc(thread, pc);
 288 
 289   assert (!method()->is_synchronized() || locks > 0, "synchronized methods must have monitors");
 290 
 291   BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin();
 292   for (int index = 0; index < locks; index++) {
 293     top = iframe()->previous_monitor_in_interpreter_frame(top);
 294     BasicObjectLock* src = _monitors->at(index);
 295     top->set_obj(src->obj());
 296     src->lock()->move_to(src->obj(), top->lock());
 297   }
 298   if (ProfileInterpreter) {
 299     iframe()->interpreter_frame_set_mdx(0); // clear out the mdp.
 300   }
 301   iframe()->interpreter_frame_set_bcx((intptr_t)bcp); // cannot use bcp because frame is not initialized yet
 302   if (ProfileInterpreter) {
 303     MethodData* mdo = method()->method_data();
 304     if (mdo != NULL) {
 305       int bci = iframe()->interpreter_frame_bci();
 306       if (use_next_mdp) ++bci;
 307       address mdp = mdo->bci_to_dp(bci);
 308       iframe()->interpreter_frame_set_mdp(mdp);
 309     }
 310   }
 311 
 312   // Unpack expression stack
 313   // If this is an intermediate frame (i.e. not top frame) then this
 314   // only unpacks the part of the expression stack not used by callee
 315   // as parameters. The callee parameters are unpacked as part of the
 316   // callee locals.
 317   int i;
 318   for(i = 0; i < expressions()->size(); i++) {
 319     StackValue *value = expressions()->at(i);
 320     intptr_t*   addr  = iframe()->interpreter_frame_expression_stack_at(i);
 321     switch(value->type()) {




 279                                  iframe(),
 280                                  is_top_frame,
 281                                  is_bottom_frame);
 282 
 283   // Update the pc in the frame object and overwrite the temporary pc
 284   // we placed in the skeletal frame now that we finally know the
 285   // exact interpreter address we should use.
 286 
 287   _frame.patch_pc(thread, pc);
 288 
 289   assert (!method()->is_synchronized() || locks > 0, "synchronized methods must have monitors");
 290 
 291   BasicObjectLock* top = iframe()->interpreter_frame_monitor_begin();
 292   for (int index = 0; index < locks; index++) {
 293     top = iframe()->previous_monitor_in_interpreter_frame(top);
 294     BasicObjectLock* src = _monitors->at(index);
 295     top->set_obj(src->obj());
 296     src->lock()->move_to(src->obj(), top->lock());
 297   }
 298   if (ProfileInterpreter) {
 299     iframe()->interpreter_frame_set_mdp(0); // clear out the mdp.
 300   }
 301   iframe()->interpreter_frame_set_bcp(bcp);
 302   if (ProfileInterpreter) {
 303     MethodData* mdo = method()->method_data();
 304     if (mdo != NULL) {
 305       int bci = iframe()->interpreter_frame_bci();
 306       if (use_next_mdp) ++bci;
 307       address mdp = mdo->bci_to_dp(bci);
 308       iframe()->interpreter_frame_set_mdp(mdp);
 309     }
 310   }
 311 
 312   // Unpack expression stack
 313   // If this is an intermediate frame (i.e. not top frame) then this
 314   // only unpacks the part of the expression stack not used by callee
 315   // as parameters. The callee parameters are unpacked as part of the
 316   // callee locals.
 317   int i;
 318   for(i = 0; i < expressions()->size(); i++) {
 319     StackValue *value = expressions()->at(i);
 320     intptr_t*   addr  = iframe()->interpreter_frame_expression_stack_at(i);
 321     switch(value->type()) {


src/share/vm/runtime/vframeArray.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File