hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp
// Abstract method entry
// Attempt to execute abstract method. Throw exception
address InterpreterGenerator::generate_abstract_entry(void) {
{- -------------------------------------------
(1) (生成したコードが実行される時点では, レジスタには以下の値が入っているはず)
---------------------------------------- -}
// rbx: methodOop
// r13: sender SP
{- -------------------------------------------
(1) (ここからが生成するコードの始まり)
---------------------------------------- -}
address entry_point = __ pc();
// abstract method entry
{- -------------------------------------------
(1) コード生成:
「オペランドスタック("expression stack")を空にし,
r13(bcp)や r14(locals) を元に戻しておく」
(きちんと例外ハンドリング処理ができるよう,
インタープリタ用のレジスタを正常な状態に戻しておく処理??)
---------------------------------------- -}
// pop return address, reset last_sp to NULL
__ empty_expression_stack();
__ restore_bcp(); // rsi must be correct for exception handler (was destroyed)
__ restore_locals(); // make sure locals pointer is correct as well (was destroyed)
{- -------------------------------------------
(1) コード生成:
「AbstractMethodError を送出するだけ」
---------------------------------------- -}
// throw exception
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
InterpreterRuntime::throw_AbstractMethodError));
// the call_VM checks for exception, so we should never return here.
__ should_not_reach_here();
{- -------------------------------------------
(1) 以上で生成したコードの先頭アドレスをリターン.
---------------------------------------- -}
return entry_point;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.