_mm_alignr_pi8
Microsoft Specific
Emits the Supplemental Streaming SIMD Extensions 3 (SSSE3) instruction palignr. This instruction extracts a 64-bit byte aligned value from the concatenation of the input parameters.
__m64 _mm_alignr_pi8(
__m64 a,
__m64 b,
const int ralign
);
Parameters
[in] a
A 64-bit parameter that contains eight 8-bit integers.[in] b
A 64-bit parameter that contains eight 8-bit integers.[in] ralign
An integer constant that specifies how many bytes to shift the interim result to the right.
Return value
r := (CONCAT(a, b) >> (ralign * 8)) & 0xffffffff
Requirements
Intrinsic |
Architecture |
---|---|
_mm_alignr_pi8 |
x86, x64 |
Header file <tmmintrin.h>
Remarks
r is the 64-bit result value.
CONCAT(a, b) is the 128-bit unsigned intermediate value that is formed by concatenating parameters a and b. The result value is the rightmost 64 bits after shifting this intermediate result right by ralign bytes.
If ralign > 16, the result value is zero.
Before using this intrinsic, software must ensure that the processor supports the instruction.
Example
// _mm_alignr_pi8
#include <stdio.h>
#include <tmmintrin.h>
int main () {
__m64 a, b;
a.m64_u32[1] = 0x01234567;
a.m64_u32[0] = 0x89ABCDEF;
b.m64_u32[1] = 0xFFDDEECC;
b.m64_u32[0] = 0xBBAA9988;
// A right align value of four should remove the lowest 4 bytes of "b"
__m64 res = _mm_alignr_pi8( a, b, 4 );
printf_s("Original a: 0x%016I64x\nOriginal b: 0x%016I64x\n",
a.m64_u64, b.m64_u64);
printf_s("Result res: 0x%016I64x\n",
res.m64_u64);
_mm_empty();
return 0;
}
Original a: 0x0123456789abcdef
Original b: 0xffddeeccbbaa9988
Result res: 0x89abcdefffddeecc