hotspot/src/cpu/sparc/vm/interpreterRT_sparc.cpp
void InterpreterRuntime::SignatureHandlerGenerator::pass_float() {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
Argument jni_arg(jni_offset(), false);
{- -------------------------------------------
(1) コード生成: (なお, こちらは 64bit 環境の場合のコード)
「まずインタープリタのフレーム内に置かれている引数を Rtmp にロードし,
次に MacroAssembler::store_float_argument() が生成するコードで
ロードした値を native の ABI での適切な位置にコピーする.
(なお, ロードする際のフレーム内の位置は Interpreter::local_offset_in_bytes() で計算)」
---------------------------------------- -}
#ifdef _LP64
FloatRegister Rtmp = F0;
__ ldf(FloatRegisterImpl::S, Llocals, Interpreter::local_offset_in_bytes(offset()), Rtmp);
__ store_float_argument(Rtmp, jni_arg);
{- -------------------------------------------
(1) #TODO
---------------------------------------- -}
#else
Register Rtmp = O0;
__ ld(Llocals, Interpreter::local_offset_in_bytes(offset()), Rtmp);
__ store_argument(Rtmp, jni_arg);
#endif
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.