1.1 --- a/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Mon Jan 04 07:04:46 2010 -0800 1.2 +++ b/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Mon Jan 04 18:38:08 2010 +0100 1.3 @@ -449,8 +449,12 @@ 1.4 __ addptr(rax, stack_base); 1.5 __ subptr(rax, stack_size); 1.6 1.7 + // Use the maximum number of pages we might bang. 1.8 + const int max_pages = StackShadowPages > (StackRedPages+StackYellowPages) ? StackShadowPages : 1.9 + (StackRedPages+StackYellowPages); 1.10 + 1.11 // add in the red and yellow zone sizes 1.12 - __ addptr(rax, (StackRedPages + StackYellowPages) * page_size); 1.13 + __ addptr(rax, max_pages * page_size); 1.14 1.15 // check against the current stack bottom 1.16 __ cmpptr(rsp, rax); 1.17 @@ -1502,8 +1506,10 @@ 1.18 tempcount* Interpreter::stackElementWords() + popframe_extra_args; 1.19 if (interpreter_frame != NULL) { 1.20 #ifdef ASSERT 1.21 - assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), 1.22 - "Frame not properly walkable"); 1.23 + if (!EnableMethodHandles) 1.24 + // @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences? 1.25 + // Probably, since deoptimization doesn't work yet. 1.26 + assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable"); 1.27 assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)"); 1.28 #endif 1.29