_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

__cpuid, __cpuidex

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.