447 |
447 |
448 // Add stack base to locals and subtract stack size |
448 // Add stack base to locals and subtract stack size |
449 __ addptr(rax, stack_base); |
449 __ addptr(rax, stack_base); |
450 __ subptr(rax, stack_size); |
450 __ subptr(rax, stack_size); |
451 |
451 |
|
452 // Use the maximum number of pages we might bang. |
|
453 const int max_pages = StackShadowPages > (StackRedPages+StackYellowPages) ? StackShadowPages : |
|
454 (StackRedPages+StackYellowPages); |
|
455 |
452 // add in the red and yellow zone sizes |
456 // add in the red and yellow zone sizes |
453 __ addptr(rax, (StackRedPages + StackYellowPages) * page_size); |
457 __ addptr(rax, max_pages * page_size); |
454 |
458 |
455 // check against the current stack bottom |
459 // check against the current stack bottom |
456 __ cmpptr(rsp, rax); |
460 __ cmpptr(rsp, rax); |
457 __ jcc(Assembler::above, after_frame_check); |
461 __ jcc(Assembler::above, after_frame_check); |
458 |
462 |
1500 (callee_locals - callee_param_count)*Interpreter::stackElementWords() + |
1504 (callee_locals - callee_param_count)*Interpreter::stackElementWords() + |
1501 moncount * frame::interpreter_frame_monitor_size() + |
1505 moncount * frame::interpreter_frame_monitor_size() + |
1502 tempcount* Interpreter::stackElementWords() + popframe_extra_args; |
1506 tempcount* Interpreter::stackElementWords() + popframe_extra_args; |
1503 if (interpreter_frame != NULL) { |
1507 if (interpreter_frame != NULL) { |
1504 #ifdef ASSERT |
1508 #ifdef ASSERT |
1505 assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), |
1509 if (!EnableMethodHandles) |
1506 "Frame not properly walkable"); |
1510 // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences? |
|
1511 // Probably, since deoptimization doesn't work yet. |
|
1512 assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable"); |
1507 assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)"); |
1513 assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)"); |
1508 #endif |
1514 #endif |
1509 |
1515 |
1510 interpreter_frame->interpreter_frame_set_method(method); |
1516 interpreter_frame->interpreter_frame_set_method(method); |
1511 // NOTE the difference in using sender_sp and |
1517 // NOTE the difference in using sender_sp and |