Integer Comparison Operations for Streaming SIMD Extensions 2

The comparison intrinsics for Streaming SIMD Extensions 2 and descriptions for each are listed in the following table. The "r" next to the instruction indicates that the operands are reversed in the instruction implementation.

Intrinsic Name Instruction Comparison Elements Size of Elements

_mm_cmpeq_epi8

PCMPEQB

Equality

16

8

_mm_cmpeq_epi16

PCMPEQW

Equality

8

16

_mm_cmpeq_epi32

PCMPEQD

Equality

4

32

_mm_cmpgt_epi8

PCMPGTB

Greater Than

16

8

_mm_cmpgt_epi16

PCMPGTW

Greater Than

8

16

_mm_cmpgt_epi32

PCMPGTD

Greater Than

4

32

_mm_cmplt_epi8

PCMPGTBr

Less Than

16

8

_mm_cmplt_epi16

PCMPGTWr

Less Than

8

16

_mm_cmplt_epi32

PCMPGTDr

Less Than

4

32

__m128i _mm_cmpeq_epi8 ( __m128i a, __m128i b)

Compares the 16 signed or unsigned 8-bit integers in a and the 16 signed or unsigned 8-bit integers in b for equality.

r0 := (a0 == b0) ? 0xff : 0x0

r1 := (a1 == b1) ? 0xff : 0x0

...

r15 := (a15 == b15) ? 0xff : 0x0

 

__m128i _mm_cmpeq_epi16 ( __m128i a, __m128i b)

Compares the 8 signed or unsigned 16-bit integers in a and the 8 signed or unsigned 16-bit integers in b for equality.

r0 := (a0 == b0) ? 0xffff : 0x0

r1 := (a1 == b1) ? 0xffff : 0x0

...

r7 := (a7 == b7) ? 0xffff : 0x0

 

__m128i _mm_cmpeq_epi32 ( __m128i a, __m128i b)

Compares the 4 signed or unsigned 32-bit integers in a and the 4 signed or unsigned 32-bit integers in b for equality.

r0 := (a0 == b0) ? 0xffffffff : 0x0

r1 := (a1 == b1) ? 0xffffffff : 0x0

r2 := (a2 == b2) ? 0xffffffff : 0x0

r3 := (a3 == b3) ? 0xffffffff : 0x0

 

__m128i _mm_cmpgt_epi8 ( __m128i a, __m128i b)

Compares the 16 signed 8-bit integers in a and the 16 signed 8-bit integers in b for greater than.

r0 := (a0 > b0) ? 0xff : 0x0

r1 := (a1 > b1) ? 0xff : 0x0

...

r15 := (a15 > b15) ? 0xff : 0x0

 

__m128i _mm_cmpgt_epi16 ( __m128i a, __m128i b)

Compares the 8 signed 16-bit integers in a and the 8 signed 16-bit integers in b for greater than.

r0 := (a0 > b0) ? 0xffff : 0x0

r1 := (a1 > b1) ? 0xffff : 0x0

...

r7 := (a7 > b7) ? 0xffff : 0x0

 

__m128i _mm_cmpgt_epi32 ( __m128i a, __m128i b)

Compares the 4 signed 32-bit integers in a and the 4 signed 32-bit integers in b for greater than.

r0 := (a0 > b0) ? 0xffff : 0x0

r1 := (a1 > b1) ? 0xffff : 0x0

r2 := (a2 > b2) ? 0xffff : 0x0

r3 := (a3 > b3) ? 0xffff : 0x0

 

__m128i _mm_cmplt_epi8 ( __m128i a, __m128i b)

Compares the 16 signed 8-bit integers in a and the 16 signed 8-bit integers in b for less than.

r0 := (a0 < b0) ? 0xff : 0x0

r1 := (a1 < b1) ? 0xff : 0x0

...

r15 := (a15 < b15) ? 0xff : 0x0

 

__m128i _mm_cmplt_epi16 ( __m128i a, __m128i b)

Compares the 8 signed 16-bit integers in a and the 8 signed 16-bit integers in b for less than.

r0 := (a0 < b0) ? 0xffff : 0x0

r1 := (a1 < b1) ? 0xffff : 0x0

...

r7 := (a7 < b7) ? 0xffff : 0x0

 

__m128i _mm_cmplt_epi32 ( __m128i a, __m128i b)

Compares the 4 signed 32-bit integers in a and the 4 signed 32-bit integers in b for less than.

r0 := (a0 < b0) ? 0xffff : 0x0

r1 := (a1 < b1) ? 0xffff : 0x0

r2 := (a2 < b2) ? 0xffff : 0x0

r3 := (a3 < b3) ? 0xffff : 0x0