hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
// Helper for vtos entry point generation
void TemplateInterpreterGenerator::set_vtos_entry_points(Template* t,
address& bep,
address& cep,
address& sep,
address& aep,
address& iep,
address& lep,
address& fep,
address& dep,
address& vep) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(t->is_valid() && t->tos_in() == vtos, "illegal template");
{- -------------------------------------------
(1) TemplateInterpreterGenerator::generate_and_dispatch() でコードを生成する.
各エントリポイントについては, 以下のように設定する.
* vtos で到達した場合のエントリ (= vep) については,
想定されている TOS 状態 (= vtos) とあっているため
そのまま TemplateInterpreterGenerator::generate_and_dispatch() が生成したコードにフォールスルーするエントリを設定.
* それ以外の TOS 状態で到達した場合のエントリについては,
想定されている TOS 状態 (= vtos) に合わせるために TOS の値を push してから
TemplateInterpreterGenerator::generate_and_dispatch() が生成したコードにフォールスルーするエントリを設定.
---------------------------------------- -}
Label L;
aep = __ pc(); __ push_ptr(); __ jmp(L);
fep = __ pc(); __ push_f(); __ jmp(L);
dep = __ pc(); __ push_d(); __ jmp(L);
lep = __ pc(); __ push_l(); __ jmp(L);
bep = cep = sep =
iep = __ pc(); __ push_i();
vep = __ pc();
__ bind(L);
generate_and_dispatch(t);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.