Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft Specific
Emit the two forms of the IPF Parallel Multiply (pmpy2) instruction, which performs multiplication in parallel on multiple integers.
__m64 __m64_pmpy2l(
__m64 a,
__m64 b
);
__m64 __m64_pmpy2r(
__m64 a,
__m64 b
);
Parameters
[in] a
An __m64 union containing an array of four 16-bit signed integers.[in] b
An __m64 union containing an array of four 16-bit signed integers.
Return Value
An __m64 union containing two 32-bit signed integers representing the results of the multiplication.
Requirements
Intrinsic |
Architecture |
|---|---|
__m64_pmpy2l |
IPF |
__m64_pmpy2r |
IPF |
Header file <intrin.h>
Remarks
The __m64_pmpy2l (left) intrinsic multiplies a[1]*b[1] and a[3]*b[3]. The __m64_pmpy2r (right) intrinsic multiplies a[0]*b[0] and a[2]*b[2]. In both cases, the result is two 32-bit signed integers, which are placed in elements 0 and 1 of the result.
Example
// 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);
}
a:
{ -1, 1, -2, 6000 }
b:
{ -1, 2, 10, 15000 }
__m64_pmpy2r computes a[0]*b[0] and a[2]*b[2] : { 1, -20 }
__m64_pmpy2l computes a[1]*b[1] and a[3]*b[3] : { 2, 90000000 }