FMA3

読み:エフエムエイ・スリー
外語:FMA3: three-operand Fused Multiply/Add 英語
品詞:名詞

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

目次

IntelIntel AVXの一部として導入した。

元々は4オペランドのFMA4を発表していたが、命令長が長くなること、そして命令デコーダーが肥大化することを懸念し、最終的に3オペランドのFMA3となった。

オペコードは当初発表していたFMA4とは異なるものが割り当てられた。

AMDBulldozerは、後から発表されたFMA3の搭載が間に合わない代わりにFMA4が搭載され、FMA3はTrinity(Piledriverなど)から対応した。

なお、Microsoft Visual Studioの実装では、FMA3も含めて「FMA4」と呼んでいるようなので、注意が必要である。

VEX

VEXを使っての符号化でのみ動作する命令である。

VEX.L=1で、ymmおよびm256命令にできる命令が多い。

ss/sdまたはps/pdは、VEX.W=0/1で切り換える。

符号

66 0F 38 xx /r相当の機械語をVEX符号化したものを使う。

命令

3つのオペランドを、それぞれ132/213/231として扱うため3種類の命令がある。

順番が異なるだけで、命令の種類は同じ。分かりにくくなるが、3種類全ての命令を以下に一覧する。

  • 132
    • $0 = $0×$2 + $1
      • vfmadd132pd xmm xmm xmm/m256
      • vfmadd132ps xmm xmm xmm/m256
      • vfmadd132pd xmm xmm xmm/m128
      • vfmadd132ps xmm xmm xmm/m128
      • vfmadd132sd xmm xmm xmm/m64
      • vfmadd132ss xmm xmm xmm/m32
    • $0 = $0×$2 − $1
      • vfmsub132pd xmm xmm xmm/m256
      • vfmsub132ps xmm xmm xmm/m256
      • vfmsub132pd xmm xmm xmm/m128
      • vfmsub132ps xmm xmm xmm/m128
      • vfmsub132sd xmm xmm xmm/m64
      • vfmsub132ss xmm xmm xmm/m32
    • $0 = $0×$2 ± $1
      • vfmaddsub132pd xmm xmm xmm/m256
      • vfmaddsub132ps xmm xmm xmm/m256
      • vfmaddsub132pd xmm xmm xmm/m128
      • vfmaddsub132ps xmm xmm xmm/m128
      • vfmsubadd132pd xmm xmm xmm/m256
      • vfmsubadd132ps xmm xmm xmm/m256
      • vfmsubadd132pd xmm xmm xmm/m128
      • vfmsubadd132ps xmm xmm xmm/m128
    • $0 = -($0×$2) + $1
      • vfnmadd132pd xmm xmm xmm/m256
      • vfnmadd132ps xmm xmm xmm/m256
      • vfnmadd132pd xmm xmm xmm/m128
      • vfnmadd132ps xmm xmm xmm/m128
      • vfnmadd132sd xmm xmm xmm/m64
      • vfnmadd132ss xmm xmm xmm/m32
    • $0 = -($0×$2) − $1
      • vfnmsub132pd xmm xmm xmm/m256
      • vfnmsub132ps xmm xmm xmm/m256
      • vfnmsub132pd xmm xmm xmm/m128
      • vfnmsub132ps xmm xmm xmm/m128
      • vfnmsub132sd xmm xmm xmm/m64
      • vfnmsub132ss xmm xmm xmm/m32
  • 213
    • $0 = $1×$0 + $2
      • vfmadd213pd xmm xmm xmm/m256
      • vfmadd213ps xmm xmm xmm/m256
      • vfmadd213pd xmm xmm xmm/m128
      • vfmadd213ps xmm xmm xmm/m128
      • vfmadd213sd xmm xmm xmm/m64
      • vfmadd213ss xmm xmm xmm/m32
    • $0 = $1×$0 − $2
      • vfmsub213pd xmm xmm xmm/m256
      • vfmsub213ps xmm xmm xmm/m256
      • vfmsub213pd xmm xmm xmm/m128
      • vfmsub213ps xmm xmm xmm/m128
      • vfmsub213sd xmm xmm xmm/m64
      • vfmsub213ss xmm xmm xmm/m32
    • $0 = $1×$0 ± $2
      • vfmaddsub213pd xmm xmm xmm/m256
      • vfmaddsub213ps xmm xmm xmm/m256
      • vfmaddsub213pd xmm xmm xmm/m128
      • vfmaddsub213ps xmm xmm xmm/m128
      • vfmsubadd213pd xmm xmm xmm/m256
      • vfmsubadd213ps xmm xmm xmm/m256
      • vfmsubadd213pd xmm xmm xmm/m128
      • vfmsubadd213ps xmm xmm xmm/m128
    • $0 = -($1×$0) + $2
      • vfnmadd213pd xmm xmm xmm/m256
      • vfnmadd213ps xmm xmm xmm/m256
      • vfnmadd213pd xmm xmm xmm/m128
      • vfnmadd213ps xmm xmm xmm/m128
      • vfnmadd213sd xmm xmm xmm/m64
      • vfnmadd213ss xmm xmm xmm/m32
    • $0 = -($1×$0) − $2
      • vfnmsub213pd xmm xmm xmm/m256
      • vfnmsub213ps xmm xmm xmm/m256
      • vfnmsub213pd xmm xmm xmm/m128
      • vfnmsub213ps xmm xmm xmm/m128
      • vfnmsub213sd xmm xmm xmm/m64
      • vfnmsub213ss xmm xmm xmm/m32
  • 231
    • $0 = $1×$2 + $0
      • vfmadd231pd xmm xmm xmm/m256
      • vfmadd231ps xmm xmm xmm/m256
      • vfmadd231pd xmm xmm xmm/m128
      • vfmadd231ps xmm xmm xmm/m128
      • vfmadd231sd xmm xmm xmm/m64
      • vfmadd231ss xmm xmm xmm/m32
    • $0 = $1×$2 − $0
      • vfmsub231pd xmm xmm xmm/m256
      • vfmsub231ps xmm xmm xmm/m256
      • vfmsub231pd xmm xmm xmm/m128
      • vfmsub231ps xmm xmm xmm/m128
      • vfmsub231sd xmm xmm xmm/m64
      • vfmsub231ss xmm xmm xmm/m32
    • $0 = $1×$2 ± $0
      • vfmaddsub231pd xmm xmm xmm/m256
      • vfmaddsub231ps xmm xmm xmm/m256
      • vfmaddsub231pd xmm xmm xmm/m128
      • vfmaddsub231ps xmm xmm xmm/m128
      • vfmsubadd231pd xmm xmm xmm/m256
      • vfmsubadd231ps xmm xmm xmm/m256
      • vfmsubadd231pd xmm xmm xmm/m128
      • vfmsubadd231ps xmm xmm xmm/m128
    • $0 = -($1×$2) + $0
      • vfnmadd231pd xmm xmm xmm/m256
      • vfnmadd231ps xmm xmm xmm/m256
      • vfnmadd231pd xmm xmm xmm/m128
      • vfnmadd231ps xmm xmm xmm/m128
      • vfnmadd231sd xmm xmm xmm/m64
      • vfnmadd231ss xmm xmm xmm/m32
    • $0 = -($1×$2) − $0
      • vfnmsub231pd xmm xmm xmm/m256
      • vfnmsub231ps xmm xmm xmm/m256
      • vfnmsub231pd xmm xmm xmm/m128
      • vfnmsub231ps xmm xmm xmm/m128
      • vfnmsub231sd xmm xmm xmm/m64
      • vfnmsub231ss xmm xmm xmm/m32
用語の所属
Intel AVX
関連する用語
FMA4

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club