_mm_com_epu8
Se requiere Visual Studio 2010 SP1.
Específicos de Microsoft
Genera la instrucción XOP vpcomub para devolver una máscara de bits generada por una comparación sin signo byte a byte de sus dos primeros orígenes mediante la condición proporcionada por el tercer origen.
__m128i _mm_com_epu8 (
__m128i src1,
__m128i src2,
int condition
);
Parámetros
[in] src1
Matriz empaquetada de 128 bits de dieciséis enteros sin signo de 8 bits.[in] src2
Matriz empaquetada de 128 bits de dieciséis enteros sin signo de 8 bits.[in] condition
Una condición entera de 32 bits que se va a utilizar en la comparación. Los valores válidos van del 0 al 7.
Valor devuelto
Una matriz empaquetada de 128 bits r de ocho enteros sin signo de 16 bits, cada uno de los cuales es 0x0000 o 0xFFFF. Si cond es el operador lógico implicado por el valor condition, entonces
r[i] := src1[i] cond src2[i] ? 0xFF : 0x00;
Requisitos
Intrínseco |
Arquitectura |
---|---|
_mm_com_epu8 |
XOP |
Archivo de encabezado <intrin.h>
Comentarios
Esta instrucción compara cada byte de src1 con el byte correspondiente de src2, utilizando el operador de comparación descrito por condition. (Cada par de bytes usa el mismo operador de comparación.) Los valores condition válidos son del 0 al 7. Incluyendo < intrin.h > podrá utilizar los siguientes nombres en lugar de los valores numéricos para condition:
Valor entero |
Nombre simbólico |
Significado |
---|---|---|
0 |
_MM_PCOMCTRL_LT |
¿r[i] = (src1[i] < src2[i]) ? 0xFF: 0x00 |
1 |
_MM_PCOMCTRL_LE |
¿r[i] = (src1[i] <= src2[i]) ? 0xFF: 0x00 |
2 |
_MM_PCOMCTRL_GT |
¿r[i] = (src1[i] > src2[i]) ? 0xFF: 0x00 |
3 |
_MM_PCOMCTRL_GE |
¿r[i] = (src1[i] >= src2[i]) ? 0xFF: 0x00 |
4 |
_MM_PCOMCTRL_EQ |
¿r[i] = (src1[i] == src2[i]) ? 0xFF: 0x00 |
5 |
_MM_PCOMCTRL_NEQ |
¿r [i] = (src1 [i]! = src2 [i])? 0xFF: 0x00 |
6 |
_MM_PCOMCTRL_FALSE |
r[i] = 0x00 (máscara de todos los ceros) |
7 |
_MM_PCOMCTRL_TRUE |
r[i] = 0xFF (máscara de todos unos) |
Si lo prefiere, puede utilizar las siguientes macros, que se definirán cuando < intrin.h > está incluido:
Macro |
Significado |
---|---|
_mm_comlt_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 0) |
_mm_comle_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 1) |
_mm_comgt_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 2) |
_mm_comge_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 3) |
_mm_comeq_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 4) |
_mm_comneq_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 5) |
_mm_comfalse_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 6) |
_mm_comtrue_epu8 (src1, src2) |
_mm_com_epu8 (src1, src2, 7) |
La instrucción vpcomub forma parte de la familia XOP de instrucciones. Antes de utilizar este intrínseco, debe asegurarse de que el procesador admite esta instrucción. Para determinar la compatibilidad del hardware para obtener esta instrucción, llame a __cpuid intrínseco con InfoType = 0x80000001 y compruebe el bit 11 de CPUInfo [2] (ECX). Este bit es 1 cuando se admite la instrucción, de lo contrario es 0.
Ejemplo
#include <stdio.h>
#include <intrin.h>
main()
{
__m128i a, b, d;
int i;
for (i = 0; i < 16; i++) {
a.m128i_i8[i] = ((11*i) % 31) - 16;
b.m128i_i8[i] = ((13*i) % 31) - 16;
}
printf("src1: ");
for (i = 0; i < 16; i++) printf_s(" %3u", a.m128i_u8[i]);
printf_s("\nsrc2: ");
for (i = 0; i < 16; i++) printf_s(" %3u", b.m128i_u8[i]);
printf_s("\n< mask:");
d = _mm_com_epu8(a, b, _MM_PCOMCTRL_LT);
for (i = 0; i < 16; i++) printf_s(" %02x", d.m128i_u8[i]);
printf_s("\n>=mask:");
d = _mm_com_epu8(a, b, _MM_PCOMCTRL_GE);
for (i = 0; i < 16; i++) printf_s(" %02x", d.m128i_u8[i]);
printf("\n");
}
Vea también
Otros recursos
Intrínsecos XOP agregados para Visual Studio 2010 SP1
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Marzo de 2011 |
Se agrega este contenido. |
Cambio de características de SP1. |