Mercurial > hg > graal-compiler
comparison src/cpu/sparc/vm/interpreter_sparc.cpp @ 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 | 6759698e3140 |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6241:aba91a731143 | 6266:1d7922586cf6 |
---|---|
253 return entry; | 253 return entry; |
254 | 254 |
255 } | 255 } |
256 | 256 |
257 | 257 |
258 // Method handle invoker | |
259 // Dispatch a method of the form java.lang.invoke.MethodHandles::invoke(...) | |
260 address InterpreterGenerator::generate_method_handle_entry(void) { | |
261 if (!EnableInvokeDynamic) { | |
262 return generate_abstract_entry(); | |
263 } | |
264 | |
265 return MethodHandles::generate_method_handle_interpreter_entry(_masm); | |
266 } | |
267 | |
268 | |
269 //---------------------------------------------------------------------------------------------------- | 258 //---------------------------------------------------------------------------------------------------- |
270 // Entry points & stack frame layout | 259 // Entry points & stack frame layout |
271 // | 260 // |
272 // Here we generate the various kind of entries into the interpreter. | 261 // Here we generate the various kind of entries into the interpreter. |
273 // The two main entry type are generic bytecode methods and native call method. | 262 // The two main entry type are generic bytecode methods and native call method. |
393 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break; | 382 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break; |
394 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break; | 383 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break; |
395 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; | 384 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; |
396 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; | 385 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; |
397 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; | 386 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; |
398 case Interpreter::method_handle : entry_point = ((InterpreterGenerator*)this)->generate_method_handle_entry(); break; | 387 |
399 case Interpreter::java_lang_math_sin : break; | 388 case Interpreter::java_lang_math_sin : break; |
400 case Interpreter::java_lang_math_cos : break; | 389 case Interpreter::java_lang_math_cos : break; |
401 case Interpreter::java_lang_math_tan : break; | 390 case Interpreter::java_lang_math_tan : break; |
402 case Interpreter::java_lang_math_sqrt : break; | 391 case Interpreter::java_lang_math_sqrt : break; |
403 case Interpreter::java_lang_math_abs : break; | 392 case Interpreter::java_lang_math_abs : break; |
405 case Interpreter::java_lang_math_log10 : break; | 394 case Interpreter::java_lang_math_log10 : break; |
406 case Interpreter::java_lang_math_pow : break; | 395 case Interpreter::java_lang_math_pow : break; |
407 case Interpreter::java_lang_math_exp : break; | 396 case Interpreter::java_lang_math_exp : break; |
408 case Interpreter::java_lang_ref_reference_get | 397 case Interpreter::java_lang_ref_reference_get |
409 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; | 398 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; |
410 default : ShouldNotReachHere(); break; | 399 default: |
400 fatal(err_msg("unexpected method kind: %d", kind)); | |
401 break; | |
411 } | 402 } |
412 | 403 |
413 if (entry_point) return entry_point; | 404 if (entry_point) return entry_point; |
414 | 405 |
415 return ((InterpreterGenerator*)this)->generate_normal_entry(synchronized); | 406 return ((InterpreterGenerator*)this)->generate_normal_entry(synchronized); |