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

src/cpu/x86/vm/templateInterpreter_x86_32.cpp

Print this page




1510 
1511   // fixed size of an interpreter frame:
1512   int max_locals = method->max_locals() * Interpreter::stackElementWords;
1513   int extra_locals = (method->max_locals() - method->size_of_parameters()) *
1514                      Interpreter::stackElementWords;
1515 
1516   int overhead = frame::sender_sp_offset - frame::interpreter_frame_initial_sp_offset;
1517 
1518   // Our locals were accounted for by the caller (or last_frame_adjust on the transistion)
1519   // Since the callee parameters already account for the callee's params we only need to account for
1520   // the extra locals.
1521 
1522 
1523   int size = overhead +
1524          ((callee_locals - callee_param_count)*Interpreter::stackElementWords) +
1525          (moncount*frame::interpreter_frame_monitor_size()) +
1526          tempcount*Interpreter::stackElementWords + popframe_extra_args;
1527 
1528   if (interpreter_frame != NULL) {
1529 #ifdef ASSERT
1530     if (!EnableMethodHandles)
1531       // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
1532       // Probably, since deoptimization doesn't work yet.
1533       assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
1534     assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
1535 #endif
1536 
1537     interpreter_frame->interpreter_frame_set_method(method);
1538     // NOTE the difference in using sender_sp and interpreter_frame_sender_sp
1539     // interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp)
1540     // and sender_sp is fp+8
1541     intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
1542 
1543     interpreter_frame->interpreter_frame_set_locals(locals);
1544     BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
1545     BasicObjectLock* monbot = montop - moncount;
1546     interpreter_frame->interpreter_frame_set_monitor_end(monbot);
1547 
1548     // Set last_sp
1549     intptr_t*  rsp = (intptr_t*) monbot  -
1550                      tempcount*Interpreter::stackElementWords -




1510 
1511   // fixed size of an interpreter frame:
1512   int max_locals = method->max_locals() * Interpreter::stackElementWords;
1513   int extra_locals = (method->max_locals() - method->size_of_parameters()) *
1514                      Interpreter::stackElementWords;
1515 
1516   int overhead = frame::sender_sp_offset - frame::interpreter_frame_initial_sp_offset;
1517 
1518   // Our locals were accounted for by the caller (or last_frame_adjust on the transistion)
1519   // Since the callee parameters already account for the callee's params we only need to account for
1520   // the extra locals.
1521 
1522 
1523   int size = overhead +
1524          ((callee_locals - callee_param_count)*Interpreter::stackElementWords) +
1525          (moncount*frame::interpreter_frame_monitor_size()) +
1526          tempcount*Interpreter::stackElementWords + popframe_extra_args;
1527 
1528   if (interpreter_frame != NULL) {
1529 #ifdef ASSERT
1530     if (!EnableInvokeDynamic)
1531       // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
1532       // Probably, since deoptimization doesn't work yet.
1533       assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
1534     assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
1535 #endif
1536 
1537     interpreter_frame->interpreter_frame_set_method(method);
1538     // NOTE the difference in using sender_sp and interpreter_frame_sender_sp
1539     // interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp)
1540     // and sender_sp is fp+8
1541     intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
1542 
1543     interpreter_frame->interpreter_frame_set_locals(locals);
1544     BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
1545     BasicObjectLock* monbot = montop - moncount;
1546     interpreter_frame->interpreter_frame_set_monitor_end(monbot);
1547 
1548     // Set last_sp
1549     intptr_t*  rsp = (intptr_t*) monbot  -
1550                      tempcount*Interpreter::stackElementWords -


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