_mm_perm_epi8
Se requiere Visual Studio 2010 SP1.
Específicos de Microsoft
Genera la instrucción XOP vpperm para seleccionar los bytes de sus primeros dos orígenes y, opcionalmente, transformarlos.
__m128i _mm_perm_epi8 (
__m128i src1,
__m128i src2,
__m128i selector
);
Parámetros
[in] src1
Un parámetro de 128 bits que contiene dieciséis bytes.[in] src2
Un parámetro de 128 bits que contiene dieciséis bytes.[in] selector
Un parámetro de 128 bits que selecciona los bytes de src1 y src2 y opcionalmente elige una transformación para aplicar al byte seleccionado.
Valor devuelto
Un resultado de 128 bits r que contiene bytes seleccionados de src1 y src2, y se ha transformado de forma opcional.
Requisitos
Intrínseco |
Arquitectura |
---|---|
_mm_perm_epi8 |
XOP |
Archivo de encabezado <intrin.h>
Comentarios
Para cada byte en selector, los bits de orden inferior seleccionan un byte de src1 o src2. Valores de 0 a 15 seleccionan de 0 a 15 bytes de src1, mientras que valores de 16 a 31 seleccionan de 0 a 15 bytes de src2. Los bits de orden superior de cada byte en selector determina la transformación, si existe, para aplicar al byte seleccionado.
Valor de 3 bits de orden superior de selector |
Transformación elegida |
---|---|
000b |
Sin transformaciones |
001b |
Invertir el byte del origen (los complementan) |
010b |
Byte de origen del bit inverso |
011b |
Byte de origen invertido del bit inverso |
100b |
Establecer el byte de resultado en 0x00 |
101b |
Establecer el byte de resultado en 0xFF |
110b |
Replicar el bit más significativo del byte de origen |
111b |
Replicar el bit más significativo invertido del byte de origen |
La instrucción vpperm 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>
int main()
{
__m128i a, b, selector, d;
int i;
for (i = 15; i >= 0; i--) {
a.m128i_u8[i] = i; // 0x0f0e0d0c...
b.m128i_u8[i] = (i << 4) | i; // 0xffeeddcc...
}
selector.m128i_u64[1] = 0xfedcba9876543210ll;
selector.m128i_u64[0] = 0x0011223344556677ll;
d = _mm_perm_epi8(a, b, selector);
printf_s("%016I64x %016I64x\n", d.m128i_u64[1], d.m128i_u64[0]);
}
Vea también
Referencia
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. |