hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp
// Empty method, generate a very fast return.
address InterpreterGenerator::generate_empty_entry(void) {
{- -------------------------------------------
(1) (空のメソッドなので, return する以外にすることはない...)
---------------------------------------- -}
// A method that does nother but return...
{- -------------------------------------------
(1) (ここからが生成するコードの始まり)
---------------------------------------- -}
address entry = __ pc();
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
Label slow_path;
{- -------------------------------------------
(1) コード生成: (verify)
---------------------------------------- -}
__ verify_oop(G5_method);
{- -------------------------------------------
(1) UseFastEmptyMethods オプションが指定されている場合には,
以下のコードを生成し, そのエントリポイントのアドレスをリターンする.
(UseFastEmptyMethods オプションが指定されていない場合には, 単に NULL をリターンするだけ)
(<= ところで, 何故少し作ってしまってから判定してるんだろう?? コードを作る前に判定した方がいいのでは... #TODO)
---------------------------------------- -}
// do nothing for empty methods (do not even increment invocation counter)
if ( UseFastEmptyMethods) {
{- -------------------------------------------
(1.1) コード生成:
「Safepoint 処理中かどうかをチェックする (= SafepointSynchronize::address_of_state を確認).
もし Safepoint 停止の要求が出ていれば, slow_path ラベルにジャンプして停止処理を行う.」
---------------------------------------- -}
// If we need a safepoint check, generate full interpreter entry.
AddressLiteral sync_state(SafepointSynchronize::address_of_state());
__ set(sync_state, G3_scratch);
__ cmp(G3_scratch, SafepointSynchronize::_not_synchronized);
__ br(Assembler::notEqual, false, Assembler::pn, slow_path);
__ delayed()->nop();
{- -------------------------------------------
(1.1) コード生成:
「Safepoint 停止要求が出ていなければ, 単にリターンするだけ.
(あわせて, SP を O5_savedSP の値に復帰させておく)」
---------------------------------------- -}
// Code: _return
__ retl();
__ delayed()->mov(O5_savedSP, SP);
{- -------------------------------------------
(1.1) コード生成:
「Safepoint 停止要求が出ていた場合には,
InterpreterGenerator::generate_normal_entry() が生成する通常パスにフォールバック」
---------------------------------------- -}
__ bind(slow_path);
(void) generate_normal_entry(false);
return entry;
}
return NULL;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.