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 -
|