540 // done for oops since idealreg2debugmask takes care of debug info |
540 // done for oops since idealreg2debugmask takes care of debug info |
541 // references but there no way to handle oops differently than other |
541 // references but there no way to handle oops differently than other |
542 // pointers as far as the kill mask goes. |
542 // pointers as far as the kill mask goes. |
543 bool exclude_soe = op == Op_CallRuntime; |
543 bool exclude_soe = op == Op_CallRuntime; |
544 |
544 |
|
545 // If the call is a MethodHandle invoke, we need to exclude the |
|
546 // register which is used to save the SP value over MH invokes from |
|
547 // the mask. Otherwise this register could be used for |
|
548 // deoptimization information. |
|
549 if (op == Op_CallStaticJava) { |
|
550 MachCallStaticJavaNode* mcallstaticjava = (MachCallStaticJavaNode*) mcall; |
|
551 if (mcallstaticjava->_method_handle_invoke) |
|
552 proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask()); |
|
553 } |
|
554 |
545 // Fill in the kill mask for the call |
555 // Fill in the kill mask for the call |
546 for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) { |
556 for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) { |
547 if( !regs.Member(r) ) { // Not already defined by the call |
557 if( !regs.Member(r) ) { // Not already defined by the call |
548 // Save-on-call register? |
558 // Save-on-call register? |
549 if ((save_policy[r] == 'C') || |
559 if ((save_policy[r] == 'C') || |