インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
1 つ目のベクトルの 16 ビットのパックド符号なし整数データ要素と 2 つ目のベクトルの符号付き要素を乗算します。対応するインテル® AVX2 命令は VPMADDUBSW です。
extern __m256i _mm256_maddubs_epi16(__m256i s1, __m256i s2); |
s1 |
演算に使用する整数ソースベクトル |
s2 |
演算に使用する整数ソースベクトル |
ソースベクトル s1 の各符号なしバイトとソースベクトル s2 の対応する符号付きバイトを垂直乗算し、中間値として 16 ビットの符号付き整数を生成します。そして、隣接する各符号付きワードのペアを加算し、飽和処理済みの結果をデスティネーション・ベクトルにパックします。
例えば、ベクトル s1 と s2 の最下位バイト (ビット 7:0) を乗算し、その中間結果の符号付きワードと、ベクトル s1 と s2 の最下位から 2 番目のバイト (ビット 15:8) を乗算した中間結果を足します。そして、符号付き飽和処理済みの結果をデスティネーション・ベクトルの最下位ワード (15:0) に格納します。同じ演算は、隣接する別のバイトのペアに対しても行われます。
乗算の結果。