次の方法で共有


_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");
}
  

参照

参照

__cpuid, __cpuidex

その他の技術情報

_mm_maddsd_epi16

Visual Studio 2010 SP1 用に追加された XOP 組み込み

履歴の変更

日付

履歴

理由

2011 年 3 月

このコンテンツを追加。

SP1 機能変更