__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);
}