Freigeben über


_mm_cmpistra

[Diese Dokumentation ist nur eine Vorschau und wird in späteren Versionen ggf. geändert. Blank topics are included as placeholders.]

Microsoft-spezifisch

Gibt die Anweisung pcmpistrider Streaming SIMD-Erweiterungen 4 (SSE4) aus. Diese Anweisung vergleicht zwei Parameter.

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

Parameter

Parameter

Beschreibung

[in] a

Ein Zeichenfolgen fragment mit einer maximalen Größe von 16 Byte pro Zeichen oder 8 Wortzeichen.

[in] b

Ein Zeichenfolgen fragment mit einer maximalen Größe von 16 Byte pro Zeichen oder 8 Wortzeichen.

[in] mode

Eine Konstante, die angibt, ob Zeichen oder Bytes Wörter, der Typ des Vergleichs sind, und das Format des zurückgegebenen Werts.

Rückgabewert

Ein, wenn b ist, enthält nicht das NULL-Zeichen und die resultierende Maske entspricht null. Andernfalls Null. Die pcmpistri-Anweisung berechnet die Bitmaske, in der bit0, bit1, bit2… in der Maske auf das Ergebnis des Vorgangs auf a0, a1, a2… in aentsprechen.

Anforderungen

Intrinsisch

Architektur

_mm_cmpistra

x86, x64

Headerdatei <nmmintrin.h>

Hinweise

b0, b1, b2… gibt das erste, zweite und dritte… Zeichen in ban. b0 wird in den niedrigstwertigen Byte aus bgespeichert. Dieselbe Schreibweise bezieht sich auf a. MaxSize ist entweder 16 oder 8 Byte pro Zeichen für Zeichen für Wortzeichen. Dies ist die maximale Anzahl von Zeichen, die in __m128i einen Datentyp passen. Die unteren 7 Bits in mode bestimmen den Typ der Eingabezeichen, die den Vergleich ausgeführt und das Format des Rückgabewerts. Sie werden in der folgenden Tabelle beschrieben:

mode in der Binärdatei

Definierte Konstante

Beschreibung

xxxxxx00

_SIDD_UBYTE_OPS

a und aus Zeichenfolgen enthalten b 8-Bit-Zeichen ohne Vorzeichen.

xxxxxx01

_SIDD_UWORD_OPS

a und b enthalten Zeichenfolgen aus 16-Bit-Zeichen ohne Vorzeichen.

xxxxxx10

_SIDD_SBYTE_OPS

a und aus Zeichenfolgen enthalten b 8-Bit-Zeichen mit Vorzeichen.

xxxxxx11

_SIDD_SWORD_OPS

a und b enthalten Zeichenfolgen aus 16-Bit-Zeichen mit Vorzeichen.

xxxx00xx

_SIDD_CMP_EQUAL_ANY

Suchen, wenn gleich einem Modus:

Für jedes Zeichen in ca, bestimmen Sie, ob ein Zeichen in b gleich cist.

xxxx01xx

_SIDD_CMP_RANGES

Suchen Sie im Bereichsmodus:

Für jedes Zeichen in cabestimmen, ob Sie b0 <= c <= b1or b2 <= c <= b3…

xxxx10xx

_SIDD_CMP_EQUAL_EACH

Suchen, wenn gleich jeder Modus:

Diese Zeichenfolgen gleichheits Algorithmus implementiert.

xxxx11xx

_SIDD_CMP_EQUAL_ORDERED

Suchen, wenn gleicher geordneter Modus:

Dieses implementiert den Teilzeichenfolgen suchende Algorithmus.

xx01xxxx

_SIDD_NEGATIVE_POLARITY

Negation der resultierenden Bitmaske.

xx11xxxx

_SIDD_MASKED_NEGATIVE_POLARITY

Negation der resultierenden Bitmaske außer Bits, die einen Index verfügen, der größer ist als die Größe von a oderb(siehe Details pcmpstri Statement).

Vor der Verwendung dieses systeminterne Software muss sicherstellen, dass der Prozessor die Anweisung unterstützt.

Beispiel

#include <stdio.h>
#include <nmmintrin.h>

int main ()
{
    __m128i a, b;

    // Note: _SIDD_LEAST_SIGNIFICANT sets the same bit as _SIDD_BIT_MASK
    const int mode = _SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT;

    a.m128i_u16[7] = 0xFFFF;
    a.m128i_u16[6] = 0xFFFF;
    a.m128i_u16[5] = 0xFFFF;
    a.m128i_u16[4] = 0xFFFF;
    a.m128i_u16[3] = 0xFFFF;
    a.m128i_u16[2] = 0xFFFF;
    a.m128i_u16[1] = 0xFFFF;
    a.m128i_u16[0] = 0xFFFF;

    b.m128i_u16[7] = 0x0001;
    b.m128i_u16[6] = 0x0001;
    b.m128i_u16[5] = 0x0001;
    b.m128i_u16[4] = 0x0001;
    b.m128i_u16[3] = 0x0001;
    b.m128i_u16[2] = 0x0001;
    b.m128i_u16[1] = 0x0001;
    b.m128i_u16[0] = 0x0001;

    int returnValue = _mm_cmpistra(a, b, mode);
    printf_s("_mm_cmpistra return value should be 1: %i\n", returnValue);

    b.m128i_u16[4] = 0x0000;
    returnValue = _mm_cmpistra(a, b, mode);
    printf_s("_mm_cmpistra return value should be 0: %i\n", returnValue);

    b.m128i_u16[5] = 0xFFFF;
    returnValue = _mm_cmpistrc(a, b, mode);
    printf_s("_mm_cmpistrc return value should be 0: %i\n", returnValue);

    b.m128i_u16[4] = 0x0001;
    returnValue = _mm_cmpistrc(a, b, mode);
    printf_s("_mm_cmpistrc return value should be 1: %i\n", returnValue);

    returnValue = _mm_cmpistri(a, b, mode);
    printf_s("_mm_cmpistri return value should be 5: %i\n", returnValue);

    b.m128i_u16[0] = 0xFFFF;
    __m128i fullResult = _mm_cmpistrm(a, b, mode);
    printf_s("_mm_cmpistrm return value: 0x%016I64x 0x%016I64x\n",
                fullResult.m128i_u64[1], fullResult.m128i_u64[0]);

    returnValue = _mm_cmpistro(a, b, mode);
    printf_s("_mm_cmpistro return value should be 1: %i\n", returnValue);

    returnValue = _mm_cmpistrs(a, b, mode);
    printf_s("_mm_cmpistrs return value should be 0: %i\n", returnValue);

    a.m128i_u16[7] = 0x0000;
    returnValue = _mm_cmpistrs(a, b, mode);
    printf_s("_mm_cmpistrs return value should be 1: %i\n", returnValue);

    returnValue = _mm_cmpistrz(a, b, mode);
    printf_s("_mm_cmpistrz return value should be 0: %i\n", returnValue);

    b.m128i_u16[7] = 0x0000;
    returnValue = _mm_cmpistrz(a, b, mode);
    printf_s("_mm_cmpistrz return value should be 1: %i\n", returnValue);

    return 0;
}
          
        

Siehe auch

Referenz

_mm_cmpestra

_mm_cmpestrc

_mm_cmpestri

_mm_cmpestrm

_mm_cmpestro

_mm_cmpestrs

_mm_cmpestrz

_mm_cmpistrc

_mm_cmpistri

_mm_cmpistrm

_mm_cmpistro

_mm_cmpistrs

_mm_cmpistrz

__m64