__m64_pmpy2l、__m64_pmpy2r

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 Blank topics are included as placeholders.]

Microsoft 固有の仕様 →

は並列の 2 とおりの形式が増加します (複数の整数の乗算を並列に実行 pmpy2) 命令を生成します。

__m64 __m64_pmpy2l( 
   __m64 a, 
    __m64 b 
);
__m64 __m64_pmpy2r( 
   __m64 a, 
   __m64 b 
);

パラメーター

  • [入力] a
    4 個の 16 ビット符号付き整数の配列を含む __m64 の和集合。

  • [入力] b
    4 個の 16 ビット符号付き整数の配列を含む __m64 の和集合。

戻り値

乗算の結果を表す 2 個の 32 ビット符号付き整数を含む __m64 の和集合。

必要条件

組み込み

アーキテクチャ

__m64_pmpy2l

IPF

__m64_pmpy2r

IPF

ヘッダー ファイル <intrin.h>

解説

__m64_pmpy2l () のままにして組み込みを a[1] *b[1] から a[] * 3 大きくなります b[3] です。 __m64_pmpy2r (右) の組み込みは a[0] *b[0] から a[] * 2 大きくなります b[2] です。 どちらの場合も結果は結果の要素が 0 と 1 の 2 個の 32 ビット符号付き整数です。

使用例

// pmpy2.cpp
// processor: IPF
#include <stdio.h>
#include <intrin.h>

#pragma intrinsic(__m64_pmpy2l, __m64_pmpy2r)

void print16(__int16* ia)
{
    printf_s("{ %8d, %8d, %8d, %8d }\n", ia[0], ia[1], ia[2], ia[3]);
}

void print32(__int32* ia)
{
    printf_s("{ %8d, %8d }\n", ia[0], ia[1]);
}

int main()
{
    __int16 a[4] = { -1, 1, -2, 6000 };
    __int16 b[4] = { -1, 2, 10, 15000 };
    __int32 cl[2], cr[2], i;
    __m64 m, n, result;

    printf_s("a: \n");
    print16(a);
    printf_s("b: \n");
    print16(b);

    for (int i = 0; i < 4; i++)
    {
       m.m64_i16[i] = a[i];
       n.m64_i16[i] = b[i];
    }

    printf_s("__m64_pmpy2r computes a[0]*b[0] and a[2]*b[2] : ");
    result = __m64_pmpy2r(m, n);
    print32(result.m64_i32);
    
    result = __m64_pmpy2l(m, n);
    printf_s("__m64_pmpy2l computes a[1]*b[1] and a[3]*b[3] : ");
    print32(result.m64_i32);

}
          
        

参照

Reference

__m64

コンパイラ組み込み関数。