hotspot/src/share/vm/runtime/deoptimization.cpp
changeset 17872 2c49e72dcf08
parent 15943 d830a939d985
child 20010 c66a7254680c
child 22808 88bca865e247
equal deleted inserted replaced
17871:6669c8d6f6b3 17872:2c49e72dcf08
   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);