Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Microsoft Specific
Emits the IPF Parallel Shift Right and Add (pshradd2) instruction.
__m64 __m64_pshradd2(
__m64 a,
const int nBit,
__m64 b
);
Parameters
- [in] a
An __m64 union containing an array of four 16-bit signed integers to be shifted right and added to.
- [in] nBit
The number of bits to right shift the integers in the first array. Valid values from 0 to 3.
- [in] b
An __m64 union containing an array of four 16-bit signed integers to add.
Return Value
An __m64 union containing an array of four 16-bit signed integers, the elements of which are computed according to the expression described here.
Requirements
Intrinsic | Architecture |
---|---|
__m64_pshradd2 |
IPF |
Header file <intrin.h>
Remarks
This instruction computes:
c[i] = a[i] >> nBit + b[i]
for each of the four elements i of a and b and returns the array c as an __m64 union.
Example
// m64_pshradd2.c
// processor: IPF
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(__m64_pshradd2)
int main()
{
__m64 a, b, result;
a.m64_i16[0] = 0;
a.m64_i16[1] = 2;
a.m64_i16[2] = 16;
a.m64_i16[3] = 100;
b.m64_i16[0] = 1;
b.m64_i16[1] = 2;
b.m64_i16[2] = 3;
b.m64_i16[3] = 4;
printf_s("Input a: %d %d %d %d\n",
a.m64_i16[0], a.m64_i16[1], a.m64_i16[2],
a.m64_i16[3]);
printf_s("Input b: %d %d %d %d\n",
b.m64_i16[0], b.m64_i16[1], b.m64_i16[2],
b.m64_i16[3]);
result = __m64_pshradd2(a, 1, b);
printf_s("Results of pshradd2(a, 1, b): %d %d %d %d\n",
result.m64_i16[0], result.m64_i16[1], result.m64_i16[2],
result.m64_i16[3]);
}
Output
Input a: 0 2 16 100 Input b: 1 2 3 4 Results of pshradd2(a, 1, b): 1 3 11 54