comparison src/share/vm/runtime/deoptimization.cpp @ 10390:28e5aed7f3a6

8009981: nashorn tests fail with -XX:+VerifyStack Summary: nmethod::preserve_callee_argument_oops() must take appendix into account. Reviewed-by: kvn, twisti
author roland
date Fri, 31 May 2013 14:40:26 +0200
parents 0094485b46c7
children 836a62f43af9 01b268b3080a b5c8a61d7fa0
comparison
equal deleted inserted replaced
10389:f15fe46d8c00 10390:28e5aed7f3a6
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);