VFMADDxxxPD - Fused Multiply ADD xxx Packed Double
VFMSUBxxxPD - Fused Multiply SUBtract xxx Packed Double
VFMADDSUBxxxPD - Fused Multiply ADD SUBtract xxx Packed Double
VFMSUBADDxxxPD - Fused Multiply SUBtract ADD xxx Packed Double
VFNMADDxxxPD - Fused Negative Multiply ADD xxx Packed Double
VFNMSUBxxxPD - Fused Negative Multiply SUBtract xxx Packed Double




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

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

命令名 奇数 偶数
FMADD VFMADD132PD ①*③+②
VFMADD213PD ②*①+③
VFMADD231PD ②*③+①
_mm_fmadd_pd
_mm256_fmadd_pd
_mm512_fmadd_pd
a*b+c
FMSUB VFMSUB132PD ①*③-②
VFMSUB213PD ②*①-③
VFMSUB231PD ②*③-①
_mm_fmsub_pd
_mm256_fmsub_pd
_mm512_fmsub_pd
a*b-c
FMADDSUB VFMADDSUB132PD ①*③+② ①*③-②
VFMADDSUB213PD ②*①+③ ②*①-③
VFMADDSUB231PD ②*③+① ②*③-①
_mm_fmaddsub_pd
_mm256_fmaddsub_pd
_mm512_fmaddsub_pd
a*b+c a*b-c
FMSUBADD VFMSUBADD132PD ①*③-② ①*③+②
VFMSUBADD213PD ②*①-③ ②*①+③
VFMSUBADD231PD ②*③-① ②*③+①
_mm_fmsubadd_pd
_mm256_fmsubadd_pd
_mm512_fmsubadd_pd
a*b-c a*b+c
FNMADD VFNMADD132PD -①*③+②
VFNMADD213PD -②*①+③
VFNMADD231PD -②*③+①
_mm_fnmadd_pd
_mm256_fnmadd_pd
_mm512_fnmadd_pd
-a*b+c
FNMSUB VFNMSUB132PD -①*③-②
VFNMSUB213PD -②*①-③
VFNMSUB231PD -②*③-①
_mm_fnmsub_pd
_mm256_fnmsub_pd
_mm512_fnmsub_pd
-a*b-c

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


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