hotspot/src/cpu/sparc/vm/interpreterRT_sparc.cpp
void InterpreterRuntime::SignatureHandlerGenerator::generate(uint64_t fingerprint) {
{- -------------------------------------------
(1) コード生成:
この InterpreterRuntime::SignatureHandlerGenerator オブジェクトに対して
SignatureIterator::iterate() を呼び出すことにより, 以下のようなコードを生成.
「引数(fingerprint)で指定された型の引数を,
インタープリタのフレーム内から native の ABI に対応した位置へとコピー.」
---------------------------------------- -}
// generate code to handle arguments
iterate(fingerprint);
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
// return result handler
AddressLiteral result_handler(Interpreter::result_handler(method()->result_type()));
{- -------------------------------------------
(1) コード生成:
「返値の型に対応する result handler のアドレスを Lscratch にセットしつつ, リターンする.」
---------------------------------------- -}
__ sethi(result_handler, Lscratch);
__ retl();
__ delayed()->add(Lscratch, result_handler.low10(), Lscratch);
{- -------------------------------------------
(1) 以上のコードを flush().
---------------------------------------- -}
__ flush();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.