Share via


_mm_com_epu32

Visual Studio 2010 SP1 wird benötigt.

Microsoft-spezifisch

Generiert die XOP-Anweisung vpcomud, um eine Bitmaske zurückzugeben, die durch einen Vergleich ohne Vorzeichen der Doppelworte der ersten zwei Quellen generiert wird, wobei die von der dritten Quelle angegebene Bedingung verwendet wird.

__m128i _mm_com_epu32 (
   __m128i src1,
   __m128i src2,
   int condition
); 

Parameter

  • [in] src1
    Gepacktes 128-Bit-Array von vier 32-Bit-Ganzzahlen ohne Vorzeichen.

  • [in] src2
    Gepacktes 128-Bit-Array von vier 32-Bit-Ganzzahlen ohne Vorzeichen.

  • [in] condition
    Eine 32-Bit-Ganzzahl-Bedingung, die im Vergleich verwendet werden soll. Gültige Werte sind 0 bis 7.

Rückgabewert

Ein gepacktes 128-Bit-Array-r mit vier 32-Bit-Ganzzahlen ohne Vorzeichen, von denen jede entweder den Wert 0x00000000 oder 0xFFFFFFFF hat. Wenn cond der durch den Wert von condition vorgegebene logische Operator ist, dann ist

r[i] := src1[i] cond src2[i] ? 0xFFFFFFFF : 0x00000000;

Anforderungen

Intrinsisch

Architektur

_mm_com_epu32

XOP

Headerdatei <intrin.h>

Hinweise

Diese Anweisung vergleicht jedes Doppelwort von src1 mit dem entsprechenden Doppelwort von src2 und verwendet den in condition beschriebenen Vergleichsoperator. (Jedes Paar Doppelwörter verwendet den gleichen Vergleichsoperator.) Die condition für gültige Werte gibt 0 bis 7 an. Durch Einbinden von <intrin.h> sind Sie in der Lage, statt der numerischen Werte die folgenden Namen für condition zu verwenden:

Ganzzahliger Wert

Symbolischer Name

Bedeutung

0

_MM_PCOMCTRL_LT

r[i] = (src1[i] < src2[i]) ? 0xFFFFFFFF : 0x00000000

1

_MM_PCOMCTRL_LE

r[i] = (src1[i] <= src2[i]) ? 0xFFFFFFFF : 0x00000000

2

_MM_PCOMCTRL_GT

r[i] = (src1[i] > src2[i]) ? 0xFFFFFFFF : 0x00000000

3

_MM_PCOMCTRL_GE

r[i] = (src1[i] >= src2[i]) ? 0xFFFFFFFF : 0x00000000

4

_MM_PCOMCTRL_EQ

r[i] = (src1[i] == src2[i]) ? 0xFFFFFFFF : 0x00000000

5

_MM_PCOMCTRL_NEQ

r[i] = (src1[i] != src2[i]) ? 0xFFFFFFFF : 0x00000000

6

_MM_PCOMCTRL_FALSE

r[i] = 0x00000000 (Maske alle 0 (null))

7

_MM_PCOMCTRL_TRUE

r[i] = 0xFFFFFFFF (Maske alle 1)

Wenn Sie dies vorziehen, können Sie die folgenden Makros verwenden, die durch das Einschließen von <intrin.h> definiert werden:

Makro

Bedeutung

_mm_comlt_epu32(src1, src2)

_mm_com_epu32(src1, src2, 0)

_mm_comle_epu32(src1, src2)

_mm_com_epu32(src1, src2, 1)

_mm_comgt_epu32(src1, src2)

_mm_com_epu32(src1, src2, 2)

_mm_comge_epu32(src1, src2)

_mm_com_epu32(src1, src2, 3)

_mm_comeq_epu32(src1, src2)

_mm_com_epu32(src1, src2, 4)

_mm_comneq_epu32(src1, src2)

_mm_com_epu32(src1, src2, 5)

_mm_comfalse_epu32(src1, src2)

_mm_com_epu32(src1, src2, 6)

_mm_comtrue_epu32(src1, src2)

_mm_com_epu32(src1, src2, 7)

Die vpcomud-Anweisung ist Teil der XOP-Anweisungsfamilie. Bevor Sie diese systeminterne Funktion verwenden, müssen Sie sicherstellen, dass der Prozessor diese Anweisung unterstützt. Um die Hardwareunterstützung für diese Anweisung zu bestimmen, rufen Sie die systeminterne Funktion __cpuid mit InfoType = 0x80000001 auf, und prüfen Sie Bit 11 von CPUInfo[2] (ECX). Dieses Bit ist 1, wenn die Anweisung unterstützt wird, und andernfalls 0.

Beispiel

#include <stdio.h>
#include <intrin.h>
main()
{
    __m128i a, b, d;
    int i;
    for (i = 0; i < 4; i++) {
        a.m128i_i32[i] = 1000*i - 1500;
        b.m128i_i32[i] = 2000*i - 2500;
    }
    printf("src1:       ");
    for (i = 0; i < 4; i++) printf_s("   %10u", a.m128i_u32[i]);
    printf_s("\nsrc2:       ");
    for (i = 0; i < 4; i++) printf_s("   %10u", b.m128i_u32[i]);
    printf_s("\n>   mask:   ");
    d = _mm_com_epi32(a, b, _MM_PCOMCTRL_GT);
    for (i = 0; i < 4; i++) printf_s("     %08x", d.m128i_u32[i]);
    printf_s("\nfalse mask: ");
    d = _mm_com_epi32(a, b, _MM_PCOMCTRL_FALSE);
    for (i = 0; i < 4; i++) printf_s("     %08x", d.m128i_u32[i]);
    printf("\n");
}
  

Siehe auch

Weitere Ressourcen

_mm_com_epu8

_mm_com_epu16

_mm_com_epu64

_mm_com_epi32

In Visual Studio 2010 SP1 hinzugefügte systeminterne XOP-Funktionen

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

März 2011

Diesen Inhalt hinzugefügt.

SP1-Funktionsänderung.