Mercurial > hg > graal-jvmci-8
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); |