hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
address TemplateInterpreterGenerator::generate_earlyret_entry_for(TosState state) {
{- -------------------------------------------
(1) (ここからが生成するコードの始まり)
---------------------------------------- -}
address entry = __ pc();
{- -------------------------------------------
(1) コード生成:
「r13(bcp)や r14(locals) を元の値に復帰させる」
---------------------------------------- -}
__ restore_bcp();
__ restore_locals();
{- -------------------------------------------
(1) コード生成:
「オペランドスタック("expression stack")を空にする.」
---------------------------------------- -}
__ empty_expression_stack();
{- -------------------------------------------
(1) コード生成:
「ForceEarlyReturn*() で指定された返り値を TOS にロードする.」
---------------------------------------- -}
__ load_earlyret_value(state);
{- -------------------------------------------
(1) コード生成:
「カレントスレッドに対応する JvmtiThreadState オブジェクトを取得し,
その JvmtiThreadState::_earlyret_state フィールドをクリアする.」
---------------------------------------- -}
__ movptr(rdx, Address(r15_thread, JavaThread::jvmti_thread_state_offset()));
Address cond_addr(rdx, JvmtiThreadState::earlyret_state_offset());
// Clear the earlyret state
__ movl(cond_addr, JvmtiThreadState::earlyret_inactive);
{- -------------------------------------------
(1) コード生成:
「InterpreterMacroAssembler::remove_activation() が生成するコードで
スタックフレームを破棄する.
synchronized method であればロックの解除も行う」
---------------------------------------- -}
__ remove_activation(state, rsi,
false, /* throw_monitor_exception */
false, /* install_monitor_exception */
true); /* notify_jvmdi */
{- -------------------------------------------
(1) コード生成:
「return address へとジャンプすることで,
ForceEarlyReturn*() 対象になったフレームから呼び出し元へとリターンさせる.」
---------------------------------------- -}
__ jmp(rsi);
{- -------------------------------------------
(1) 以上で生成したコードの先頭アドレスをリターン.
---------------------------------------- -}
return entry;
} // end of ForceEarlyReturn support
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.