InterpreterGenerator::generate_normal_entry() と InterpreterGenerator::generate_method_handle_entry() 以外で生成される特殊なメソッドの場合, エントリ部だけで処理を全て行ってしまい, そのままリターンする (このため, 行う処理としてはリターン時に行う内容まで含んでいる).
InterpreterGenerator::generate_abstract_entry() が生成したコード -> MacroAssembler::call_VM() が生成したコード -> (See: here for details) -> InterpreterRuntime::throw_AbstractMethodError() InterpreterGenerator::generate_accessor_entry() が生成したコード -> * 高速処理が可能な場合: -> (この生成コード中でフィールドにアクセスしてリターン) * 〃が不可能な場合: -> InterpreterGenerator::generate_normal_entry() が生成したコード InterpreterGenerator::generate_empty_entry() が生成したコード -> * Safepoint 停止要求が出ていない場合: -> (リターンするだけ) * 〃が出ていた場合: -> InterpreterGenerator::generate_normal_entry() が生成したコード InterpreterGenerator::generate_Reference_get_entry() が生成したコード -> * G1GC を使用していて, かつ receiver が NULL ではない場合: -> MacroAssembler::g1_write_barrier_pre() が生成したコード -> (この生成コード中でフィールドにアクセスしてリターン) * G1GC を使用していて, かつ receiver が NULL の場合: -> InterpreterGenerator::generate_normal_entry() が生成したコード * G1GC ではない場合: -> InterpreterGenerator::generate_accessor_entry() が生成したコード
InterpreterGenerator::generate_abstract_entry() が生成したコード -> MacroAssembler::call_VM() が生成したコード -> (See: here for details) -> InterpreterRuntime::throw_AbstractMethodError() InterpreterGenerator::generate_accessor_entry() が生成したコード -> * 高速処理が可能な場合: -> (この生成コード中でフィールドにアクセスしてリターン) * 〃が不可能な場合: -> InterpreterGenerator::generate_normal_entry() が生成したコード InterpreterGenerator::generate_empty_entry() が生成したコード -> * Safepoint 停止要求が出ていない場合: -> (リターンするだけ) * 〃が出ていた場合: -> InterpreterGenerator::generate_normal_entry() が生成したコード InterpreterGenerator::generate_math_entry() が生成したコード -> (1) 対応する算術演算を行う (1) リターン InterpreterGenerator::generate_Reference_get_entry() が生成したコード -> * G1GC を使用していて, かつ receiver が NULL ではない場合: -> MacroAssembler::g1_write_barrier_pre() が生成したコード -> (この生成コード中でフィールドにアクセスしてリターン) * G1GC を使用していて, かつ receiver が NULL の場合: -> InterpreterGenerator::generate_normal_entry() が生成したコード * G1GC ではない場合: -> InterpreterGenerator::generate_accessor_entry() が生成したコード
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.