src/cpu/x86/vm/templateInterpreter_x86_64.cpp

changeset 1570
e66fd840cb6b
parent 1543
85f13cdfbc1d
child 1609
ddb7834449d0
     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  

mercurial