< prev index next >

src/share/vm/interpreter/cppInterpreter.cpp

Print this page

        

*** 49,59 **** "Interpreter"); CppInterpreterGenerator g(_code); if (PrintInterpreter) print(); } - // Allow c++ interpreter to do one initialization now that switches are set, etc. BytecodeInterpreter start_msg(BytecodeInterpreter::initialize); if (JvmtiExport::can_post_interpreter_events()) BytecodeInterpreter::runWithChecks(&start_msg); else --- 49,58 ----
*** 71,186 **** TRAPS) { ((ZeroEntry *) entry_point)->invoke_osr(method, osr_buf, THREAD); } - CppInterpreterGenerator::CppInterpreterGenerator(StubQueue* _code): AbstractInterpreterGenerator(_code) { - generate_all(); - } - - static const BasicType types[Interpreter::number_of_result_handlers] = { - T_BOOLEAN, - T_CHAR , - T_BYTE , - T_SHORT , - T_INT , - T_LONG , - T_VOID , - T_FLOAT , - T_DOUBLE , - T_OBJECT - }; - - void CppInterpreterGenerator::generate_all() { - AbstractInterpreterGenerator::generate_all(); - - - #define method_entry(kind) Interpreter::_entry_table[Interpreter::kind] = generate_method_entry(Interpreter::kind) - - { CodeletMark cm(_masm, "(kind = frame_manager)"); - // all non-native method kinds - method_entry(zerolocals); - method_entry(zerolocals_synchronized); - method_entry(empty); - method_entry(accessor); - method_entry(abstract); - method_entry(java_lang_math_sin ); - method_entry(java_lang_math_cos ); - method_entry(java_lang_math_tan ); - method_entry(java_lang_math_abs ); - method_entry(java_lang_math_sqrt ); - method_entry(java_lang_math_log ); - method_entry(java_lang_math_log10 ); - method_entry(java_lang_math_pow ); - method_entry(java_lang_math_exp ); - method_entry(java_lang_ref_reference_get); - - initialize_method_handle_entries(); - - Interpreter::_native_entry_begin = Interpreter::code()->code_end(); - method_entry(native); - method_entry(native_synchronized); - Interpreter::_native_entry_end = Interpreter::code()->code_end(); - } - - - #undef method_entry - } InterpreterCodelet* CppInterpreter::codelet_containing(address pc) { // FIXME: I'm pretty sure _code is null and this is never called, which is why it's copied. return (InterpreterCodelet*)_code->stub_containing(pc); } - // Generate method entries - address CppInterpreterGenerator::generate_method_entry( - AbstractInterpreter::MethodKind kind) { - // determine code generation flags - bool native = false; - bool synchronized = false; - address entry_point = NULL; - - switch (kind) { - case Interpreter::zerolocals : break; - case Interpreter::zerolocals_synchronized: synchronized = true; break; - case Interpreter::native : native = true; break; - case Interpreter::native_synchronized : native = true; synchronized = true; break; - case Interpreter::empty : entry_point = generate_empty_entry(); break; - case Interpreter::accessor : entry_point = generate_accessor_entry(); break; - case Interpreter::abstract : entry_point = generate_abstract_entry(); break; - - case Interpreter::java_lang_math_sin : // fall thru - case Interpreter::java_lang_math_cos : // fall thru - case Interpreter::java_lang_math_tan : // fall thru - case Interpreter::java_lang_math_abs : // fall thru - case Interpreter::java_lang_math_log : // fall thru - case Interpreter::java_lang_math_log10 : // fall thru - case Interpreter::java_lang_math_sqrt : // fall thru - case Interpreter::java_lang_math_pow : // fall thru - case Interpreter::java_lang_math_exp : entry_point = generate_math_entry(kind); break; - case Interpreter::java_lang_ref_reference_get - : entry_point = generate_Reference_get_entry(); break; - default: - fatal("unexpected method kind: %d", kind); - break; - } - - if (entry_point) { - return entry_point; - } - - // We expect the normal and native entry points to be generated first so we can reuse them. - if (native) { - entry_point = Interpreter::entry_for_kind(synchronized ? Interpreter::native_synchronized : Interpreter::native); - if (entry_point == NULL) { - entry_point = generate_native_entry(synchronized); - } - } else { - entry_point = Interpreter::entry_for_kind(synchronized ? Interpreter::zerolocals_synchronized : Interpreter::zerolocals); - if (entry_point == NULL) { - entry_point = generate_normal_entry(synchronized); - } - } - - return entry_point; - } #endif // CC_INTERP --- 70,81 ----
< prev index next >