Print this page
rev 1021 : 6858164: invokedynamic code needs some cleanup (post-6655638)
Note: The bug ID for this change set was erroneously used to call for review of 6815692.
Summary: Fix several crashers, remove needless paths for boxed-style bootstrap method call, refactor & simplify APIs for rewriter constantPoolOop, remove sun.dyn.CallSiteImpl
Reviewed-by: ?
rev 1022 : 6829192: JSR 292 needs to support 64-bit x86
Summary: changes for method handles and invokedynamic
Reviewed-by: ?, ?
rev 1024 : imported patch indy-cleanup-6893081.patch

Split Close
Expand all
Collapse all
          --- old/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
          +++ new/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
↓ open down ↓ 441 lines elided ↑ open up ↑
 442  442    __ cmpptr(stack_size, 0);
 443  443    __ jcc(Assembler::notEqual, stack_size_okay);
 444  444    __ stop("stack size is zero");
 445  445    __ bind(stack_size_okay);
 446  446  #endif
 447  447  
 448  448    // Add stack base to locals and subtract stack size
 449  449    __ addptr(rax, stack_base);
 450  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  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  459    // check against the current stack bottom
 456  460    __ cmpptr(rsp, rax);
 457  461    __ jcc(Assembler::above, after_frame_check);
 458  462  
 459  463    __ pop(rax); // get return address
 460  464    __ jump(ExternalAddress(Interpreter::throw_StackOverflowError_entry()));
 461  465  
 462  466    // all done with frame size check
 463  467    __ bind(after_frame_check);
↓ open down ↓ 1031 lines elided ↑ open up ↑
1495 1499    // Our locals were accounted for by the caller (or last_frame_adjust
1496 1500    // on the transistion) Since the callee parameters already account
1497 1501    // for the callee's params we only need to account for the extra
1498 1502    // locals.
1499 1503    int size = overhead +
1500 1504           (callee_locals - callee_param_count)*Interpreter::stackElementWords() +
1501 1505           moncount * frame::interpreter_frame_monitor_size() +
1502 1506           tempcount* Interpreter::stackElementWords() + popframe_extra_args;
1503 1507    if (interpreter_frame != NULL) {
1504 1508  #ifdef ASSERT
1505      -    assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(),
1506      -           "Frame not properly walkable");
     1509 +    if (!EnableMethodHandles)
     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 1513      assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
1508 1514  #endif
1509 1515  
1510 1516      interpreter_frame->interpreter_frame_set_method(method);
1511 1517      // NOTE the difference in using sender_sp and
1512 1518      // interpreter_frame_sender_sp interpreter_frame_sender_sp is
1513 1519      // the original sp of the caller (the unextended_sp) and
1514 1520      // sender_sp is fp+16 XXX
1515 1521      intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
1516 1522  
↓ open down ↓ 353 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX