Top


定義場所(file name)

hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp

名前(function name)

void TemplateTable::if_acmp(Condition cc) {

本体部(body)

  {- -------------------------------------------
  (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.