src/cpu/x86/vm/templateInterpreter_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7090904 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/templateInterpreter_x86_32.cpp

Print this page




1592   int size = overhead +
1593          ((callee_locals - callee_param_count)*Interpreter::stackElementWords) +
1594          (moncount*frame::interpreter_frame_monitor_size()) +
1595          tempcount*Interpreter::stackElementWords + popframe_extra_args;
1596 
1597   if (interpreter_frame != NULL) {
1598 #ifdef ASSERT
1599     if (!EnableInvokeDynamic)
1600       // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
1601       // Probably, since deoptimization doesn't work yet.
1602       assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
1603     assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
1604 #endif
1605 
1606     interpreter_frame->interpreter_frame_set_method(method);
1607     // NOTE the difference in using sender_sp and interpreter_frame_sender_sp
1608     // interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp)
1609     // and sender_sp is fp+8
1610     intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
1611 






1612     interpreter_frame->interpreter_frame_set_locals(locals);
1613     BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
1614     BasicObjectLock* monbot = montop - moncount;
1615     interpreter_frame->interpreter_frame_set_monitor_end(monbot);
1616 
1617     // Set last_sp
1618     intptr_t*  rsp = (intptr_t*) monbot  -
1619                      tempcount*Interpreter::stackElementWords -
1620                      popframe_extra_args;
1621     interpreter_frame->interpreter_frame_set_last_sp(rsp);
1622 
1623     // All frames but the initial (oldest) interpreter frame we fill in have a
1624     // value for sender_sp that allows walking the stack but isn't
1625     // truly correct. Correct the value here.
1626 
1627     if (extra_locals != 0 &&
1628         interpreter_frame->sender_sp() == interpreter_frame->interpreter_frame_sender_sp() ) {
1629       interpreter_frame->set_interpreter_frame_sender_sp(caller->sp() + extra_locals);
1630     }
1631     *interpreter_frame->interpreter_frame_cache_addr() =




1592   int size = overhead +
1593          ((callee_locals - callee_param_count)*Interpreter::stackElementWords) +
1594          (moncount*frame::interpreter_frame_monitor_size()) +
1595          tempcount*Interpreter::stackElementWords + popframe_extra_args;
1596 
1597   if (interpreter_frame != NULL) {
1598 #ifdef ASSERT
1599     if (!EnableInvokeDynamic)
1600       // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
1601       // Probably, since deoptimization doesn't work yet.
1602       assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
1603     assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
1604 #endif
1605 
1606     interpreter_frame->interpreter_frame_set_method(method);
1607     // NOTE the difference in using sender_sp and interpreter_frame_sender_sp
1608     // interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp)
1609     // and sender_sp is fp+8
1610     intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
1611 
1612 #ifdef ASSERT
1613     if (caller->is_interpreted_frame()) {
1614       assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
1615     }
1616 #endif
1617 
1618     interpreter_frame->interpreter_frame_set_locals(locals);
1619     BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
1620     BasicObjectLock* monbot = montop - moncount;
1621     interpreter_frame->interpreter_frame_set_monitor_end(monbot);
1622 
1623     // Set last_sp
1624     intptr_t*  rsp = (intptr_t*) monbot  -
1625                      tempcount*Interpreter::stackElementWords -
1626                      popframe_extra_args;
1627     interpreter_frame->interpreter_frame_set_last_sp(rsp);
1628 
1629     // All frames but the initial (oldest) interpreter frame we fill in have a
1630     // value for sender_sp that allows walking the stack but isn't
1631     // truly correct. Correct the value here.
1632 
1633     if (extra_locals != 0 &&
1634         interpreter_frame->sender_sp() == interpreter_frame->interpreter_frame_sender_sp() ) {
1635       interpreter_frame->set_interpreter_frame_sender_sp(caller->sp() + extra_locals);
1636     }
1637     *interpreter_frame->interpreter_frame_cache_addr() =


src/cpu/x86/vm/templateInterpreter_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File