hotspot/src/share/vm/runtime/deoptimization.cpp
changeset 22808 88bca865e247
parent 22807 1cf02ef734e2
parent 17872 2c49e72dcf08
child 22838 82c7497fbad4
equal deleted inserted replaced
22807:1cf02ef734e2 22808:88bca865e247
   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);