Share via


_mm_cmpistrm

Microsoft Specific

Emits the Streaming SIMD Extensions 4 (SSE4) instruction pcmpistrm. This instruction compares two parameters.

__m128i _mm_cmpistrm (
   __m128i a, 
   __m128i b, 
   const int mode
); 

Parameters

Parameter

Description

[in] a

A string fragment with a maximum size of 16 byte characters or 8 word characters.

[in] b

A string fragment with a maximum size of 16 byte characters or 8 word characters.

[in] mode

A constant that indicates if characters are bytes or words, the type of comparison to do, and the format of the returned value.

Return value

Either the computed mask of MaxSize bits or its expansion to a 128-bit parameter. If the return value is expanded, each bit of the result mask is expanded to a byte or a word.

The pcmpistrm instruction computes the result mask, where bit0, bit1, bit2… in the mask correspond to the result of the operation on a0, a1, a2… in a.

Requirements

Intrinsic

Architecture

_mm_cmpistrm

x86, x64

Header file <nmmintrin.h>

Remarks

b0, b1, b2… indicate the first, second, third… characters in b. b0 is stored in the least significant bits of b. The same notation applies to a. MaxSize is either 16 for byte characters or 8 for word characters. This is the maximum number of characters that fit into a __m128i data type. The lower 7 bits in mode determine the type of the input characters, which comparison to run, and the format of the return value. They are described in the following:

mode in binary

Predefined constant

Description

xxxxxx00

_SIDD_UBYTE_OPS

a and b contain strings of unsigned 8-bit characters.

xxxxxx01

_SIDD_UWORD_OPS

a and b contain strings of unsigned 16-bit characters.

xxxxxx10

_SIDD_SBYTE_OPS

a and b contain strings of signed 8-bit characters.

xxxxxx11

_SIDD_SWORD_OPS

a and b contain strings of signed 16-bit characters.

xxxx00xx

_SIDD_CMP_EQUAL_ANY

Find if equal any mode:

For each character c in a, determine whether any character in b is equal to c.

xxxx01xx

_SIDD_CMP_RANGES

Find in ranges mode:

For each character c in a, determine whether b0 <= c <= b1or b2 <= c <= b3…

xxxx10xx

_SIDD_CMP_EQUAL_EACH

Find if equal each mode:

This implements the string equality algorithm.

xxxx11xx

_SIDD_CMP_EQUAL_ORDERED

Find if equal ordered mode:

This implements the substring search algorithm.

xxx0xxxx

_SIDD_POSITIVE_POLARITY

No effect.

xx01xxxx

_SIDD_NEGATIVE_POLARITY

Negation of resulting bitmask.

xx11xxxx

_SIDD_MASKED_NEGATIVE_POLARITY

Negation of resulting bitmask except for bits that have an index larger than the size of a or b (see details of pcmpstrm instruction).

x0xxxxxx

_SIDD_BIT_MASK

The result mask is returned.

x1xxxxxx

_SIDD_UNIT_MASK

Each bit of the result mask is expanded to 16 bytes or 8 words before it is returned.

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

Example

See the example for _mm_cmpistra.

See Also

Reference

_mm_cmpestra

_mm_cmpestrc

_mm_cmpestri

_mm_cmpestrm

_mm_cmpestro

_mm_cmpestrs

_mm_cmpestrz

_mm_cmpistra

_mm_cmpistrc

_mm_cmpistri

_mm_cmpistro

_mm_cmpistrs

_mm_cmpistrz

__m64