hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
void TemplateTable::if_acmp(Condition cc) {
{- -------------------------------------------
(1) (assert) (See: TemplateTable::transition())
---------------------------------------- -}
transition(atos, vtos);
{- -------------------------------------------
(1) コード生成:
「TOS(rax) の値とオペランドスタック上の次の値を比較した後,
引数 cc で指定された条件が成り立つ場合は,
TemplateTable::branch() が生成するコードにより, 分岐を行う.
逆に条件が成り立たない場合は (not_taken ラベルに飛ぶことで)
TemplateTable::branch() が生成するコードは実行せず,
このままフォールスルー.」
---------------------------------------- -}
// assume branch is more often taken than not (loops use backward branches)
Label not_taken;
__ pop_ptr(rdx);
__ cmpptr(rdx, rax);
__ jcc(j_not(cc), not_taken);
branch(false, false);
{- -------------------------------------------
(1) (以下は条件が成り立たない場合のパス)
---------------------------------------- -}
__ bind(not_taken);
{- -------------------------------------------
(1) コード生成: (JIT コンパイラ用のプロファイル情報の取得) (See: [here](no2935fdD.html) for details)
---------------------------------------- -}
__ profile_not_taken_branch(rax);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.