Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Expand Minimize
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.


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 

[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.

r := (CONCAT(a, b) >> (ralign * 8)) & 0xffffffff




x86, x64

Header file <tmmintrin.h>

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.

// _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",


    return 0;
Original a: 0x0123456789abcdef Original b: 0xffddeeccbbaa9988 Result res: 0x89abcdefffddeecc

Community Additions

© 2015 Microsoft