FMA4
読み:エフエムエイ-フォー
外語:FMA4: four-operand Fused Multiply/Add

 オペランドが4つあるFMA(積和演算)命令で、特にx86に搭載されている命令セットの一部をいう。
目次

概要
 元々は、IntelIntel AVXで導入を予定していた命令の一部であった。しかし、命令長が長くなること、そして命令デコーダーが肥大化することを懸念し、最終的に不採用として3オペランドFMA(FMA3)を実装した。
 これに対してAMDは、SSE5をキャンセルしてIntel AVXを採用するのにあわせ、このIntelが不採用とした4オペランドFMAをBulldozerマイクロアーキテクチャーから採用することにした(その代わりFMA3の実装は次の製品に持ち越し)。
 オペコードはAMDが独自に確保するのではなく、当初予定されていたIntelのそれと完全に同じものを採用した。
 しかしIntelが遂にFMA4をサポートしなかったこともあり、殆ど使われていなかったこともあって、その後AMDが発表したZenマイクロアーキテクチャーからは削除された。

特徴

VEX
 VEXを使っての符号化でのみ動作する命令である。
 VEX.L=1で、ymmおよびm256命令にできる命令が多い。
 またすべての命令について、VEX.Wフィールドで、オペランド3とオペランド4の機能を入れ替えることができる。

符号
 66 0F 3A xx /r /is4相当の機械語をVEX符号化したものを使う。
 ModR/Mに続いて/is4があるのが特徴で、このバイトの上位4ビットでもう一つのXMMレジスターを指定できる。

機能の有無判別
 EAX=80000000HでCPUID命令を実行し、返却値EAXの最上位ビットが1となる拡張CPUID対応環境で、かつEAX=80000001HでCPUIDを実行した結果得られたECXレジスターのビット16が1のとき、FMA4に対応している。
 Intelでは対応製品がない。AMDはBulldozer以降で対応する。

命令

再検索