src/cpu/x86/vm/templateInterpreter_x86_64.cpp

changeset 1570
e66fd840cb6b
parent 1543
85f13cdfbc1d
child 1609
ddb7834449d0
equal deleted inserted replaced
1569:0910903272e5 1570:e66fd840cb6b
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

mercurial