comparison src/share/vm/interpreter/interpreter.cpp @ 9025:ff5a32117e02

Implement fast invocation of installed code (direct tail call to the target machine code address).
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Fri, 12 Apr 2013 01:53:52 +0200
parents b9a918201d47
children c6a1ffc707ff
comparison
equal deleted inserted replaced
9024:2b840ae76df1 9025:ff5a32117e02
186 if (m->is_abstract()) return abstract; 186 if (m->is_abstract()) return abstract;
187 187
188 // Method handle primitive? 188 // Method handle primitive?
189 if (m->is_method_handle_intrinsic()) { 189 if (m->is_method_handle_intrinsic()) {
190 vmIntrinsics::ID id = m->intrinsic_id(); 190 vmIntrinsics::ID id = m->intrinsic_id();
191 if (id == vmIntrinsics::_CompilerToVMImpl_executeCompiledMethod) {
192 return AbstractInterpreter::execute_compiled_method;
193 }
191 assert(MethodHandles::is_signature_polymorphic(id), "must match an intrinsic"); 194 assert(MethodHandles::is_signature_polymorphic(id), "must match an intrinsic");
192 MethodKind kind = (MethodKind)( method_handle_invoke_FIRST + 195 MethodKind kind = (MethodKind)( method_handle_invoke_FIRST +
193 ((int)id - vmIntrinsics::FIRST_MH_SIG_POLY) ); 196 ((int)id - vmIntrinsics::FIRST_MH_SIG_POLY) );
194 assert(kind <= method_handle_invoke_LAST, "parallel enum ranges"); 197 assert(kind <= method_handle_invoke_LAST, "parallel enum ranges");
195 return kind; 198 return kind;
285 switch (kind) { 288 switch (kind) {
286 case zerolocals : tty->print("zerolocals" ); break; 289 case zerolocals : tty->print("zerolocals" ); break;
287 case zerolocals_synchronized: tty->print("zerolocals_synchronized"); break; 290 case zerolocals_synchronized: tty->print("zerolocals_synchronized"); break;
288 case native : tty->print("native" ); break; 291 case native : tty->print("native" ); break;
289 case native_synchronized : tty->print("native_synchronized" ); break; 292 case native_synchronized : tty->print("native_synchronized" ); break;
293 case execute_compiled_method: tty->print("execute_compiled_method"); break;
290 case empty : tty->print("empty" ); break; 294 case empty : tty->print("empty" ); break;
291 case accessor : tty->print("accessor" ); break; 295 case accessor : tty->print("accessor" ); break;
292 case abstract : tty->print("abstract" ); break; 296 case abstract : tty->print("abstract" ); break;
293 case java_lang_math_sin : tty->print("java_lang_math_sin" ); break; 297 case java_lang_math_sin : tty->print("java_lang_math_sin" ); break;
294 case java_lang_math_cos : tty->print("java_lang_math_cos" ); break; 298 case java_lang_math_cos : tty->print("java_lang_math_cos" ); break;