FCMOV

FCMOVは、 Intel x86アーキテクチャの浮動小数点条件付き移動オペコードであり、 Pentium Proプロセッサで初めて導入されました。この命令は、 EFLAGS整数フラグレジスタの内容に応じて、浮動小数点スタックレジスタの1つの内容をST(0)(スタックの先頭)レジスタにコピーします。この命令には、移動を実行するために設定する必要がある条件コードによって選択される8つのバリエーションがあります。

CMOV命令と同様に、FCMOVでは、通常の分岐オーバーヘッドなしでいくつかの条件付き操作を実行できます。 [ 1 ]ただし、条件分岐命令よりもレイテンシが高くなります。[ 2 ]したがって、単純だが予測できない比較や条件付き操作に最も役立ち、大幅なパフォーマンスの向上が得られます。

この命令は通常、FCOMI命令またはFCOM - FSTSW - SAHFイディオムと組み合わせて使用​​され、浮動小数点比較の結果に基づいて関連する条件コードを設定します。

変種

この表はFCMOV命令のバリエーションを示しています。[ 1 ]第1オペランドは常にST(0)レジスタ(浮動小数点スタックの先頭)です。オペコード列は2バイトのシーケンスを示しており、2バイト目は第2オペランドに使用する浮動小数点スタックレジスタの番号を示す基本値です。必要な数値を加算することで、対応するオペコード値を完成させます。

オペコード ニモニック 意味 状態
DA C0+i FCMOVB 下の場合移動 キャリーフラグセット
DA C8+i FCムーブ 等しい場合は移動 ゼロフラグセット
DA D0+i FCMOVBE 以下の場合または等しい場合移動 キャリーフラグまたはゼロフラグがセットされている
DA D8+i FCMOVU 順序がない場合は移動する パリティフラグセット
DB C0+i FCMOVNB 下回っている場合は移動 キャリーフラグがクリアされました
DB C8+i FCMOVNE 等しくない場合は移動する ゼロフラグがクリアされました
DB D0+i FCMOVNBE 以下または等しくない場合は移動 キャリーフラグとゼロフラグがクリアされました
DB D8+i FCMOVNU 順序がない場合は移動する パリティフラグがクリアされました

参考文献

  1. ^ a b Intelアーキテクチャ・ソフトウェア開発マニュアル第2巻:命令セットリファレンス。[1]からダウンロード可能。
  2. ^ Fog, A:アセンブリ言語におけるサブルーチンの最適化。x86プラットフォーム向け最適化ガイド。[2]からダウンロード可能。