_mm_maddd_epi16
更新 : 2011 年 3 月
Visual Studio 2010 SP1 が必要です。
Microsoft 固有の仕様 →
XOP 命令 vpmadcswd を生成して、ソースに対して整数累積積和を実行します。
__m128i _mm_maddd_epi16 (
__m128i src1,
__m128i src2,
__m128i src3
);
パラメーター
[入力] src1
8 個の 16 ビット符号付き整数を含む 128 ビットのパラメーター。[入力] src2
8 個の 16 ビット符号付き整数を含む 128 ビットのパラメーター。[入力] src3
4 個の 32 ビット符号付き整数を含む 128 ビットのパラメーター。
戻り値
4 個の 32 ビット符号付き整数を含む 128 ビットの結果 r。
tempeven[i] := src1[2*i] * src2[2*i]; // 16*16->32
tempodd[i] := src1[2*i+1] * src2[2*i+1]; // 16*16->32
r[i] = tempeven[i] + tempodd[i] + src3[i];
必要条件
組み込み |
アーキテクチャ |
---|---|
_mm_maddd_epi16 |
XOP |
ヘッダー ファイル <intrin.h>
解説
src1 の偶数のインデックスを持つ各 16 ビット符号付き整数値と src2 の対応する 16 ビット符号付き整数値が乗算されます。 src1 の次の (奇数のインデックスを持つ) 16 ビット符号付き整数値と src2 の対応する 16 ビット符号付き整数値が乗算されます。 それぞれの積の 32 ビット符号付き整数が加算され、その合計が src3 の対応する 32 ビット符号付き整数値に加算され、結果の 32 ビット符号付き整数がターゲットの対応する値として格納されます。
オーバーフローは無視されます。
vpmadcswd 命令は、XOP ファミリの命令の一部です。 この組み込みを使用する前に、プロセッサでこの命令がサポートされていることを確認してください。 この命令に対するハードウェア サポートを確認するには、InfoType を 0x80000001 にして __cpuid 組み込みを呼び出し、CPUInfo[2] (ECX) のビット 11 をチェックします。 このビットは、命令がサポートされている場合は 1 になり、サポートされていない場合は 0 になります。
使用例
#include <stdio.h>
#include <intrin.h>
int main()
{
__m128i a, b, c, d;
int i;
for (i = 0; i < 8; i++) {
a.m128i_i16[i] = 8000*(i-4);
b.m128i_i16[i] = 10000;
}
for (i = 0; i < 4; i++) {
c.m128i_i32[i] = -1900000000;
}
d = _mm_maddd_epi16(a, b, c);
for (i = 0; i < 4; i++) printf_s(" %d", d.m128i_i32[i]);
printf_s("\n");
}
参照
参照
その他の技術情報
Visual Studio 2010 SP1 用に追加された XOP 組み込み
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2011 年 3 月 |
このコンテンツを追加。 |
SP1 機能変更 |