Freigeben über


_mm_cmpestra

[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 pcmpestri der Streaming SIMD-Erweiterungen 4 (SSE4) aus, das diese Anweisung zwei Parameter verglichen werden.

int _mm_cmpestra (
   __m128i a, 
   int la,
   __m128i b,
   int lb, 
   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] la

Eine ganze Zahl, die die Größe der Zeichenfolge in aangibt.

[in] b

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

[in] lb

Eine ganze Zahl, die die Größe der Zeichenfolge in b.angibt

[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 der absolute Wert lb größer als oder gleich MaxSize und die resultierende Maske entspricht null. Andernfalls Null. Die pcmpestri-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_cmpestra

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 <= b1order 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 pcmpestri 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] = 0xCCCC;
    a.m128i_u16[6] = 0xCCCC;
    a.m128i_u16[5] = 0xCCCC;
    a.m128i_u16[4] = 0xCCCC;
    a.m128i_u16[3] = 0xCCCC;
    a.m128i_u16[2] = 0xCCCC;
    a.m128i_u16[1] = 0xCCCC;
    a.m128i_u16[0] = 0xCCCC;

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

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

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

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

    // NOTE: mode has _SIDD_LEAST_SIGNIFICANT set which equals _SIDD_BIT_MASK
    __m128i fullResult = _mm_cmpestrm(a, 8, b, 8, mode);
    printf_s("_mm_cmpestrm return value: 0x%016I64x 0x%016I64x\n",
                fullResult.m128i_u64[1], fullResult.m128i_u64[0]);

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

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

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

    return 0;
}
          
        

Siehe auch

Referenz

_mm_cmpestrc

_mm_cmpestri

_mm_cmpestrm

_mm_cmpestro

_mm_cmpestrs

_mm_cmpestrz

_mm_cmpistra

_mm_cmpistrc

_mm_cmpistri

_mm_cmpistrm

_mm_cmpistro

_mm_cmpistrs

_mm_cmpistrz

Systeminterne Funktionen des Compilers