636 assert(str.bci() < max_bci, "bci in interpreter frame out of bounds"); |
636 assert(str.bci() < max_bci, "bci in interpreter frame out of bounds"); |
637 // Check to see if we can grab the number of outgoing arguments |
637 // Check to see if we can grab the number of outgoing arguments |
638 // at an uncommon trap for an invoke (where the compiler |
638 // at an uncommon trap for an invoke (where the compiler |
639 // generates debug info before the invoke has executed) |
639 // generates debug info before the invoke has executed) |
640 Bytecodes::Code cur_code = str.next(); |
640 Bytecodes::Code cur_code = str.next(); |
641 if (cur_code == Bytecodes::_invokevirtual || |
641 if (cur_code == Bytecodes::_invokevirtual || |
642 cur_code == Bytecodes::_invokespecial || |
642 cur_code == Bytecodes::_invokespecial || |
643 cur_code == Bytecodes::_invokestatic || |
643 cur_code == Bytecodes::_invokestatic || |
644 cur_code == Bytecodes::_invokeinterface) { |
644 cur_code == Bytecodes::_invokeinterface || |
|
645 cur_code == Bytecodes::_invokedynamic) { |
645 Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci()); |
646 Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci()); |
646 Symbol* signature = invoke.signature(); |
647 Symbol* signature = invoke.signature(); |
647 ArgumentSizeComputer asc(signature); |
648 ArgumentSizeComputer asc(signature); |
648 cur_invoke_parameter_size = asc.size(); |
649 cur_invoke_parameter_size = asc.size(); |
649 if (cur_code != Bytecodes::_invokestatic) { |
650 if (invoke.has_receiver()) { |
650 // Add in receiver |
651 // Add in receiver |
651 ++cur_invoke_parameter_size; |
652 ++cur_invoke_parameter_size; |
|
653 } |
|
654 if (i != 0 && !invoke.is_invokedynamic() && MethodHandles::has_member_arg(invoke.klass(), invoke.name())) { |
|
655 callee_size_of_parameters++; |
652 } |
656 } |
653 } |
657 } |
654 if (str.bci() < max_bci) { |
658 if (str.bci() < max_bci) { |
655 Bytecodes::Code bc = str.next(); |
659 Bytecodes::Code bc = str.next(); |
656 if (bc >= 0) { |
660 if (bc >= 0) { |
662 switch (cur_code) { |
666 switch (cur_code) { |
663 case Bytecodes::_invokevirtual: |
667 case Bytecodes::_invokevirtual: |
664 case Bytecodes::_invokespecial: |
668 case Bytecodes::_invokespecial: |
665 case Bytecodes::_invokestatic: |
669 case Bytecodes::_invokestatic: |
666 case Bytecodes::_invokeinterface: |
670 case Bytecodes::_invokeinterface: |
|
671 case Bytecodes::_invokedynamic: |
667 case Bytecodes::_athrow: |
672 case Bytecodes::_athrow: |
668 break; |
673 break; |
669 default: { |
674 default: { |
670 InterpreterOopMap next_mask; |
675 InterpreterOopMap next_mask; |
671 OopMapCache::compute_one_oop_map(mh, str.bci(), &next_mask); |
676 OopMapCache::compute_one_oop_map(mh, str.bci(), &next_mask); |