comparison src/share/vm/runtime/deoptimization.cpp @ 10408:836a62f43af9

Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author Doug Simon <doug.simon@oracle.com>
date Wed, 19 Jun 2013 10:45:56 +0200
parents f0ef8f58a1d9 28e5aed7f3a6
children 5fc4aedf7910
comparison
equal deleted inserted replaced
10086:e0fb8a213650 10408:836a62f43af9
665 assert(str.bci() < max_bci, "bci in interpreter frame out of bounds"); 665 assert(str.bci() < max_bci, "bci in interpreter frame out of bounds");
666 // Check to see if we can grab the number of outgoing arguments 666 // Check to see if we can grab the number of outgoing arguments
667 // at an uncommon trap for an invoke (where the compiler 667 // at an uncommon trap for an invoke (where the compiler
668 // generates debug info before the invoke has executed) 668 // generates debug info before the invoke has executed)
669 Bytecodes::Code cur_code = str.next(); 669 Bytecodes::Code cur_code = str.next();
670 if (cur_code == Bytecodes::_invokevirtual || 670 if (cur_code == Bytecodes::_invokevirtual ||
671 cur_code == Bytecodes::_invokespecial || 671 cur_code == Bytecodes::_invokespecial ||
672 cur_code == Bytecodes::_invokestatic || 672 cur_code == Bytecodes::_invokestatic ||
673 cur_code == Bytecodes::_invokeinterface) { 673 cur_code == Bytecodes::_invokeinterface ||
674 cur_code == Bytecodes::_invokedynamic) {
674 Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci()); 675 Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci());
675 Symbol* signature = invoke.signature(); 676 Symbol* signature = invoke.signature();
676 ArgumentSizeComputer asc(signature); 677 ArgumentSizeComputer asc(signature);
677 cur_invoke_parameter_size = asc.size(); 678 cur_invoke_parameter_size = asc.size();
678 if (cur_code != Bytecodes::_invokestatic) { 679 if (invoke.has_receiver()) {
679 // Add in receiver 680 // Add in receiver
680 ++cur_invoke_parameter_size; 681 ++cur_invoke_parameter_size;
682 }
683 if (i != 0 && !invoke.is_invokedynamic() && MethodHandles::has_member_arg(invoke.klass(), invoke.name())) {
684 callee_size_of_parameters++;
681 } 685 }
682 } 686 }
683 if (str.bci() < max_bci) { 687 if (str.bci() < max_bci) {
684 Bytecodes::Code bc = str.next(); 688 Bytecodes::Code bc = str.next();
685 if (bc >= 0) { 689 if (bc >= 0) {
691 switch (cur_code) { 695 switch (cur_code) {
692 case Bytecodes::_invokevirtual: 696 case Bytecodes::_invokevirtual:
693 case Bytecodes::_invokespecial: 697 case Bytecodes::_invokespecial:
694 case Bytecodes::_invokestatic: 698 case Bytecodes::_invokestatic:
695 case Bytecodes::_invokeinterface: 699 case Bytecodes::_invokeinterface:
700 case Bytecodes::_invokedynamic:
696 case Bytecodes::_athrow: 701 case Bytecodes::_athrow:
697 break; 702 break;
698 default: { 703 default: {
699 InterpreterOopMap next_mask; 704 InterpreterOopMap next_mask;
700 OopMapCache::compute_one_oop_map(mh, str.bci(), &next_mask); 705 OopMapCache::compute_one_oop_map(mh, str.bci(), &next_mask);