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