_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;
}