_mm_maccs_epi32
Visual Studio 2010 SP1 is required.
Microsoft Specific
Generates the XOP instruction vpmacssdd to perform a saturating integer multiply-add of its sources.
__m128i _mm_maccs_epi32 (
__m128i src1,
__m128i src2,
__m128i src3
);
Parameters
[in] src1
A 128-bit parameter that contains four 32-bit signed integers.[in] src2
A 128-bit parameter that contains four 32-bit signed integers.[in] src3
A 128-bit parameter that contains four 32-bit signed integers.
Return value
A 128-bit result r that contains four 32-bit signed integers.
r[i] := src1[i] * src2[i] + src3[i];
Requirements
Intrinsic |
Architecture |
---|---|
_mm_maccs_epi32 |
XOP |
Header file <intrin.h>
Remarks
Each 32-bit signed integer value in src1 is multiplied by the corresponding 32-bit signed integer value in src2. The 64-bit signed integer product is added to the corresponding 32-bit signed integer value in src3, and the signed 32-bit integer result is stored as the corresponding value in the destination.
If the result of the addition to the 64-bit product is greater than 2147483647 (0x7FFFFFFF) or less than -2147483648 (0x80000000), the multiply-add saturates by setting the result value to 2147483647 or -2147483648, respectively.
The vpmacssdd instruction is part of the XOP family of instructions. Before you use this intrinsic, you must ensure that the processor supports this instruction. . To determine hardware support for this instruction, call the __cpuid intrinsic with InfoType = 0x80000001 and check bit 11 of CPUInfo[2] (ECX). This bit is 1 when the instruction is supported, and 0 otherwise.
Example
#include <stdio.h>
#include <intrin.h>
int main()
{
__m128i a, b, c, d;
int i;
for (i = 0; i < 4; i++) {
a.m128i_i32[i] = 30000;
b.m128i_i32[i] = 16000*(i-2);
c.m128i_i32[i] = 1300000000*i - 2000000000;
}
d = _mm_maccs_epi32(a, b, c);
for (i = 0; i < 4; i++) printf_s(" %d", d.m128i_i32[i]);
printf_s("\n");
}
-2147483648 -1180000000 600000000 2147483647