


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