VFMADDxxxPH - Fused Multiply ADD xxx Packed Half
VFMSUBxxxPH - Fused Multiply SUBtract xxx Packed Half
VFMADDSUBxxxPH - Fused Multiply ADD SUBtract xxx Packed Half
VFMSUBADDxxxPH - Fused Multiply SUBtract ADD xxx Packed Half
VFNMADDxxxPH - Fused Negative Multiply ADD xxx Packed Half
VFNMSUBxxxPH - Fused Negative Multiply SUBtract xxx Packed Half




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

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

命令名 奇数 偶数
FMADD VFMADD132PH ①*③+②
VFMADD213PH ②*①+③
VFMADD231PH ②*③+①
_mm_fmadd_ph
_mm256_fmadd_ph
_mm512_fmadd_ph
a*b+c
FMSUB VFMSUB132PH ①*③-②
VFMSUB213PH ②*①-③
VFMSUB231PH ②*③-①
_mm_fmsub_ph
_mm256_fmsub_ph
_mm512_fmsub_ph
a*b-c
FMADDSUB VFMADDSUB132PH ①*③+② ①*③-②
VFMADDSUB213PH ②*①+③ ②*①-③
VFMADDSUB231PH ②*③+① ②*③-①
_mm_fmaddsub_ph
_mm256_fmaddsub_ph
_mm512_fmaddsub_ph
a*b+c a*b-c
FMSUBADD VFMSUBADD132PH ①*③-② ①*③+②
VFMSUBADD213PH ②*①-③ ②*①+③
VFMSUBADD231PH ②*③-① ②*③+①
_mm_fmsubadd_ph
_mm256_fmsubadd_ph
_mm512_fmsubadd_ph
a*b-c a*b+c
FNMADD VFNMADD132PH -①*③+②
VFNMADD213PH -②*①+③
VFNMADD231PH -②*③+①
_mm_fnmadd_ph
_mm256_fnmadd_ph
_mm512_fnmadd_ph
-a*b+c
FNMSUB VFNMSUB132PH -①*③-②
VFNMSUB213PH -②*①-③
VFNMSUB231PH -②*③-①
_mm_fnmsub_ph
_mm256_fnmsub_ph
_mm512_fnmsub_ph
-a*b-c

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


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