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クリアされる