1032 bool ignored_will_link;
1033 ciField* field = method()->get_field_at_bci(bci(), ignored_will_link);
1034 int size = field->type()->size();
1035 bool is_get = (depth >= 0), is_static = (depth & 1);
1036 inputs = (is_static ? 0 : 1);
1037 if (is_get) {
1038 depth = size - inputs;
1039 } else {
1040 inputs += size; // putxxx pops the value from the stack
1041 depth = - inputs;
1042 }
1043 }
1044 break;
1045
1046 case Bytecodes::_invokevirtual:
1047 case Bytecodes::_invokespecial:
1048 case Bytecodes::_invokestatic:
1049 case Bytecodes::_invokedynamic:
1050 case Bytecodes::_invokeinterface:
1051 {
1052 bool ignored_will_link;
1053 ciSignature* declared_signature = NULL;
1054 ciMethod* ignored_callee = method()->get_method_at_bci(bci(), ignored_will_link, &declared_signature);
1055 assert(declared_signature != NULL, "cannot be null");
1056 inputs = declared_signature->arg_size_for_bc(code);
1057 int size = declared_signature->return_type()->size();
1058 depth = size - inputs;
1059 }
1060 break;
1061
1062 case Bytecodes::_multianewarray:
1063 {
1064 ciBytecodeStream iter(method());
1065 iter.reset_to_bci(bci());
1066 iter.next();
1067 inputs = iter.get_dimensions();
1068 assert(rsize == 1, "");
1069 depth = rsize - inputs;
1070 }
1071 break;
1072
1073 case Bytecodes::_ireturn:
1074 case Bytecodes::_lreturn:
1075 case Bytecodes::_freturn:
1076 case Bytecodes::_dreturn:
1077 case Bytecodes::_areturn:
1078 assert(rsize = -depth, "");
|
1032 bool ignored_will_link;
1033 ciField* field = method()->get_field_at_bci(bci(), ignored_will_link);
1034 int size = field->type()->size();
1035 bool is_get = (depth >= 0), is_static = (depth & 1);
1036 inputs = (is_static ? 0 : 1);
1037 if (is_get) {
1038 depth = size - inputs;
1039 } else {
1040 inputs += size; // putxxx pops the value from the stack
1041 depth = - inputs;
1042 }
1043 }
1044 break;
1045
1046 case Bytecodes::_invokevirtual:
1047 case Bytecodes::_invokespecial:
1048 case Bytecodes::_invokestatic:
1049 case Bytecodes::_invokedynamic:
1050 case Bytecodes::_invokeinterface:
1051 {
1052 int size = method()->get_stack_effect_at_invoke(bci(), code, inputs);
1053 depth = size;
1054 }
1055 break;
1056
1057 case Bytecodes::_multianewarray:
1058 {
1059 ciBytecodeStream iter(method());
1060 iter.reset_to_bci(bci());
1061 iter.next();
1062 inputs = iter.get_dimensions();
1063 assert(rsize == 1, "");
1064 depth = rsize - inputs;
1065 }
1066 break;
1067
1068 case Bytecodes::_ireturn:
1069 case Bytecodes::_lreturn:
1070 case Bytecodes::_freturn:
1071 case Bytecodes::_dreturn:
1072 case Bytecodes::_areturn:
1073 assert(rsize = -depth, "");
|