_mm_com_epu32
È necessario Visual Studio 2010 SP1.
Specifici di Microsoft
Genera l'istruzione XOP vpcomud per restituire una maschera di bit generata da un confronto con unsigned parola doppia per parola doppia delle prime due origini utilizzando la condizione fornita dalla terza origine.
__m128i _mm_com_epu32 (
__m128i src1,
__m128i src2,
int condition
);
Parametri
[in] src1
Matrice a 128 bit compressa di quattro interi senza segno a 32 bit.[in] src2
Matrice a 128 bit compressa di quattro interi senza segno a 32 bit.[in] condition
Una condizione dell'intero a 32 bit da utilizzare nel confronto. I valori consentiti sono compresi tra 0 e 7.
Valore restituito
Una matrice a 128 bit compressa r di quattro Unsigned Integer a 32 bit, ognuno dei quali è 0x00000000 o 0xFFFFFFFF. Se cond è l'operatore logico dato dal valore di condition, allora
r[i] := src1[i] cond src2[i] ? 0xFFFFFFFF : 0x00000000;
Requisiti
Intrinseco |
Architettura |
---|---|
_mm_com_epu32 |
XOP |
File di intestazione <intrin.h>
Note
Questa istruzione confronta ogni parola doppia di src1 con la parola doppia corrispondente di src2, utilizzando l'operatore di confronto descritto da condition. (Ogni coppia di parole doppie utilizza lo stesso operatore di confronto). I valori consentiti condition vanno da 0 a 7. Includendo <intrin.h> sarà possibile utilizzare i nomi seguenti piuttosto che valori numerici per condition:
Valore Integer |
Nome simbolico |
Significato |
---|---|---|
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 (maschera di tutti gli zeri) |
7 |
_MM_PCOMCTRL_TRUE |
r[i] = 0xFFFFFFFF (maschera di tutti gli uno) |
Se si preferisce, è possibile utilizzare le macro seguenti che saranno definite quando è incluso <intrin.h>:
Macro |
Significato |
---|---|
_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) |
L'istruzione vpcomud è parte della famiglia XOP di istruzioni. Prima di utilizzare questo intrinseco, è necessario assicurarsi che il processore supporti questa istruzione. Per determinare il supporto hardware per questa istruzione, chiamare l'intrinseco __cpuid con InfoType = 0x80000001 e il bit di controllo 11 di CPUInfo[2] (ECX). Questo bit è 1 quando l'istruzione è supportata, e 0 in caso contrario.
Esempio
#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");
}
Vedere anche
Altre risorse
Oggetti intrinseci XOP aggiunti per Visual Studio 2010 SP1
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Marzo 2011 |
È stato aggiunto questo contenuto. |
Modifica di funzionalità in SP1. |