_mm_extract_epi8

Microsoft Specific

Emits the Streaming SIMD Extensions 4 (SSE4) instruction pextrb. This instruction extracts an 8-bit unsigned integer from a 128-bit parameter.

int _mm_extract_epi8( 
   __m128i a,
   const int ndx 
);

Parameters

  • [in] a
    A 128-bit parameter that contains sixteen 8-bit integers. These integers can be signed or unsigned.

  • [in] ndx
    A constant index that specifies the location of the value to extract.

Result value

The return value can be expressed by the following equation:

r := (ndx == 0) ? a0 :
   ((ndx == 1) ? a1 :
   ...
   ((ndx == 14) ? a14 : a15))

Requirements

Intrinsic

Architecture

_mm_extract_epi8

x86, x64

Header file <smmintrin.h>

Remarks

a0 - a15 are the individual 8-bit integers in parameter a, with a0 occupying the lowest 8 bits.

Only the least significant four bits of ndx are used.

The result is the unsigned equivalent of the appropriate 8-bits in parameter a.

Before you use this intrinsic, software must ensure that the processor supports the instruction.

Example

#include <stdio.h>
#include <smmintrin.h>

int main ()
{
    __m128i a;
    const int ndx1 = 4;
    const int ndx2 = 13;

    a.m128i_i8[0] = 1;
    a.m128i_i8[1] = 2;
    a.m128i_i8[2] = 4;
    a.m128i_i8[3] = 8;
    a.m128i_i8[4] = 16;
    a.m128i_i8[5] = 32;
    a.m128i_i8[6] = 64;
    a.m128i_i8[7] = 127;
    a.m128i_i8[8] = -1;
    a.m128i_i8[9] = -2;
    a.m128i_i8[10] = -4;
    a.m128i_i8[11] = -8;
    a.m128i_i8[12] = -16;
    a.m128i_i8[13] = -32;
    a.m128i_i8[14] = -64;
    a.m128i_i8[15] = -128;

    int res = _mm_extract_epi8(a, ndx1);
    printf_s("Result res should equal %d: %d\n", a.m128i_u8[ndx1], res);

    res = _mm_extract_epi8(a, ndx2);
    printf_s("Result res should equal %d: %d\n", a.m128i_u8[ndx2], res);

    return 0;
}

Result res should equal 16: 16
Result res should equal 224: 224

See Also

Concepts

Compiler Intrinsics