Print this page
rev 1082 : [mq]: indy.compiler.patch

Split Close
Expand all
Collapse all
          --- old/src/share/vm/opto/lcm.cpp
          +++ new/src/share/vm/opto/lcm.cpp
↓ open down ↓ 534 lines elided ↑ open up ↑
 535  535    // When using CallRuntime mark SOE registers as killed by the call
 536  536    // so values that could show up in the RegisterMap aren't live in a
 537  537    // callee saved register since the register wouldn't know where to
 538  538    // find them.  CallLeaf and CallLeafNoFP are ok because they can't
 539  539    // have debug info on them.  Strictly speaking this only needs to be
 540  540    // done for oops since idealreg2debugmask takes care of debug info
 541  541    // references but there no way to handle oops differently than other
 542  542    // pointers as far as the kill mask goes.
 543  543    bool exclude_soe = op == Op_CallRuntime;
 544  544  
      545 +  proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask());
      546 +
 545  547    // Fill in the kill mask for the call
 546  548    for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) {
 547  549      if( !regs.Member(r) ) {     // Not already defined by the call
 548  550        // Save-on-call register?
 549  551        if ((save_policy[r] == 'C') ||
 550  552            (save_policy[r] == 'A') ||
 551  553            ((save_policy[r] == 'E') && exclude_soe)) {
 552  554          proj->_rout.Insert(r);
 553  555        }
 554  556      }
↓ open down ↓ 412 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX