VFMADDxxxPS - Fused Multiply ADD xxx Packed Single
VFMSUBxxxPS - Fused Multiply SUBtract xxx Packed Single
VFMADDSUBxxxPS - Fused Multiply ADD SUBtract xxx Packed Single
VFMSUBADDxxxPS - Fused Multiply SUBtract ADD xxx Packed Single
VFNMADDxxxPS - Fused Negative Multiply ADD xxx Packed Single
VFNMSUBxxxPS - Fused Negative Multiply SUBtract xxx Packed Single




3つのオペランドを使って乗算と加算/減算を行い結果を第1オペランド(戻り値)に返す。

どれとどれを掛けてどれを足す/引くかは命令名の数字(123)の並び順で決まる。intrinsicsでは引数の並び順で決まる。

命令名 奇数 偶数
FMADD VFMADD132PS ①*③+②
VFMADD213PS ②*①+③
VFMADD231PS ②*③+①
_mm_fmadd_ps
_mm256_fmadd_ps
_mm512_fmadd_ps
a*b+c
FMSUB VFMSUB132PS ①*③-②
VFMSUB213PS ②*①-③
VFMSUB231PS ②*③-①
_mm_fmsub_ps
_mm256_fmsub_ps
_mm512_fmsub_ps
a*b-c
FMADDSUB VFMADDSUB132PS ①*③+② ①*③-②
VFMADDSUB213PS ②*①+③ ②*①-③
VFMADDSUB231PS ②*③+① ②*③-①
_mm_fmaddsub_ps
_mm256_fmaddsub_ps
_mm512_fmaddsub_ps
a*b+c a*b-c
FMSUBADD VFMSUBADD132PS ①*③-② ①*③+②
VFMSUBADD213PS ②*①-③ ②*①+③
VFMSUBADD231PS ②*③-① ②*③+①
_mm_fmsubadd_ps
_mm256_fmsubadd_ps
_mm512_fmsubadd_ps
a*b-c a*b+c
FNMADD VFNMADD132PS -①*③+②
VFNMADD213PS -②*①+③
VFNMADD231PS -②*③+①
_mm_fnmadd_ps
_mm256_fnmadd_ps
_mm512_fnmadd_ps
-a*b+c
FNMSUB VFNMSUB132PS -①*③-②
VFNMSUB213PS -②*①-③
VFNMSUB231PS -②*③-①
_mm_fnmsub_ps
_mm256_fnmsub_ps
_mm512_fnmsub_ps
-a*b-c

_mask_ kのビットが0の場合、aが入る
_mask3_ kのビットが0の場合、cが入る
_maskz_ kのビットが0の場合、0クリアされる


x86/x64 SIMD命令一覧表  フィードバック