_mm_cvtepi8_epi32
Microsoft Specific
Emits the Streaming SIMD Extensions 4 (SSE4) instruction pmovsxbd. This instruction performs a conversion of signed integers from 8-bit to 32-bit.
__m128i _mm_cvtepi8_epi32( __m128i a );
The result is defined as follows:
r0 := a0 r1 := (a0 < 0) ? 0xff : 0 r2 := (a0 < 0) ? 0xff : 0 r3 := (a0 < 0) ? 0xff : 0 r4 := a1 r5 := (a1 < 0) ? 0xff : 0 r6 := (a1 < 0) ? 0xff : 0 r7 := (a1 < 0) ? 0xff : 0 r8 := a2 r9 := (a2 < 0) ? 0xff : 0 r10 := (a2 < 0) ? 0xff : 0 r11 := (a2 < 0) ? 0xff : 0 r12 := a3 r13 := (a3 < 0) ? 0xff : 0 r14 := (a3 < 0) ? 0xff : 0 r15 := (a3 < 0) ? 0xff : 0
r0-r15 and a0-a15 are the sequentially ordered 8-bit components of return value r and parameter a, respectively. r0 and a0 are the least significant 8 bits.
Before you use this intrinsic, software must ensure that the processor supports the instruction.
#include <stdio.h>
#include <smmintrin.h>
int main ()
{
__m128i a;
a.m128i_i8[0] = 1;
a.m128i_i8[1] = -1;
a.m128i_i8[2] = 127;
a.m128i_i8[3] = -128;
__m128i res = _mm_cvtepi8_epi32(a);
printf_s("Original lowest 8 bit integers:\n%5i, %5i\n%5i, %5i\n\n",
a.m128i_i8[3], a.m128i_i8[2], a.m128i_i8[1], a.m128i_i8[0]);
printf_s("Resulting 32 bit integers:\n%5i, %5i\n%5i, %5i\n",
res.m128i_i32[3], res.m128i_i32[2], res.m128i_i32[1], res.m128i_i32[0]);
return 0;
}
Original lowest 8 bit integers: -128, 127 -1, 1 Resulting 32 bit integers: -128, 127 -1, 1