comparison src/share/vm/ci/ciMethod.hpp @ 6266:1d7922586cf6

7023639: JSR 292 method handle invocation needs a fast path for compiled code 6984705: JSR 292 method handle creation should not go through JNI Summary: remove assembly code for JDK 7 chained method handles Reviewed-by: jrose, twisti, kvn, mhaupt Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author twisti
date Tue, 24 Jul 2012 10:51:00 -0700
parents 6d8f36bcef55
children da91efe96a93
comparison
equal deleted inserted replaced
6241:aba91a731143 6266:1d7922586cf6
131 int arg_size() const { 131 int arg_size() const {
132 check_is_loaded(); 132 check_is_loaded();
133 return _signature->size() + (_flags.is_static() ? 0 : 1); 133 return _signature->size() + (_flags.is_static() ? 0 : 1);
134 } 134 }
135 // Report the number of elements on stack when invoking this method. 135 // Report the number of elements on stack when invoking this method.
136 // This is different than the regular arg_size because invokdynamic 136 // This is different than the regular arg_size because invokedynamic
137 // has an implicit receiver. 137 // has an implicit receiver.
138 int invoke_arg_size(Bytecodes::Code code) const { 138 int invoke_arg_size(Bytecodes::Code code) const {
139 int arg_size = _signature->size(); 139 if (is_loaded()) {
140 // Add a receiver argument, maybe: 140 return arg_size();
141 if (code != Bytecodes::_invokestatic && 141 } else {
142 code != Bytecodes::_invokedynamic) { 142 int arg_size = _signature->size();
143 arg_size++; 143 // Add a receiver argument, maybe:
144 if (code != Bytecodes::_invokestatic &&
145 code != Bytecodes::_invokedynamic) {
146 arg_size++;
147 }
148 return arg_size;
144 } 149 }
145 return arg_size;
146 } 150 }
147 151
148 152
149 // Method code and related information. 153 // Method code and related information.
150 address code() { if (_code == NULL) load_code(); return _code; } 154 address code() { if (_code == NULL) load_code(); return _code; }
159 163
160 // Code size for inlining decisions. 164 // Code size for inlining decisions.
161 int code_size_for_inlining(); 165 int code_size_for_inlining();
162 166
163 bool force_inline() { return get_methodOop()->force_inline(); } 167 bool force_inline() { return get_methodOop()->force_inline(); }
168 bool dont_inline() { return get_methodOop()->dont_inline(); }
164 169
165 int comp_level(); 170 int comp_level();
166 int highest_osr_comp_level(); 171 int highest_osr_comp_level();
167 172
168 Bytecodes::Code java_code_at_bci(int bci) { 173 Bytecodes::Code java_code_at_bci(int bci) {
256 bool check_call(int refinfo_index, bool is_static) const; 261 bool check_call(int refinfo_index, bool is_static) const;
257 bool ensure_method_data(); // make sure it exists in the VM also 262 bool ensure_method_data(); // make sure it exists in the VM also
258 int scale_count(int count, float prof_factor = 1.); // make MDO count commensurate with IIC 263 int scale_count(int count, float prof_factor = 1.); // make MDO count commensurate with IIC
259 264
260 // JSR 292 support 265 // JSR 292 support
261 bool is_method_handle_invoke() const; 266 bool is_method_handle_intrinsic() const;
262 bool is_method_handle_adapter() const; 267 bool is_compiled_lambda_form() const;
263 ciInstance* method_handle_type(); 268 bool has_member_arg() const;
264 269
265 // What kind of ciObject is this? 270 // What kind of ciObject is this?
266 bool is_method() { return true; } 271 bool is_method() { return true; }
267 272
268 // Java access flags 273 // Java access flags