VPERMB

Permute Packed Bytes Elements

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.66.0F38.W0 8D /rVPERMB xmm1 {k1}{z}, xmm2, xmm3/m128AValidoValidoBytes de riesgo en xmm3/m128 utilizando índices de byte AVX512 VBMI) en xmm2 y almacenar el resultado en xmm1 utilizando OR AVX10.1 máscara de escritura k1.
EVEX.256.66.0F38.W0 8D /rVPERMB ymm1 {k1}{z}, ymm2, ymm3/m256AValidoValidoBytes de riesgo en ymm3/m256 utilizando índices de byte AVX512 VBMI) en ymm2 y almacenar el resultado en ymm1 utilizando OR AVX10.1 máscara de escritura k1.
EVEX.512.66.0F38.W0 8D /rVPERMB zmm1 {k1}{z}, zmm2, zmm3/m512AValidoValidoBytes de riesgo en zmm3/m512 utilizando índices de byte OR AVX10.1 en zmm2 y almacenar el resultado en zmm1 utilizando máscara de escritura k1.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

A

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. evex.vvvv lecturaprefijo EVEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Tupla: Full Mem

Coste medido

Cargando las mediciones de arch-data...

Descripción

Copias de bytes del segundo operando de origen (el tercer operando) al operando de destino (el primer operando) según los índices de byte en el primer operando de origen (el segundo operando). Tenga en cuenta que esta instrucción permite que un byte en el operando de origen sea copiado a más de un lugar en el operando de destino.

Sólo los bits bajos 6(EVEX.512)/5(EVEX.256)/4(EVEX.128) de cada índice de byte se utiliza para seleccionar la ubicación del byte fuente del segundo operando de origen.

El primer operando de origen es un registro ZMM/YMM/XMM. El segundo operando de origen puede ser un registro ZMM/YMM/XMM, un 512/256/128-bit ubicación de memoria. El operando de destino es un registro ZMM/YMM/XMM actualizado a byte granularity por la máscara de escritura k1.

Operación

VPERMB (EVEX encoded versions)
(KL, VL) = (16, 128), (32, 256), (64, 512)
IF VL = 128:

    n := 3;
ELSE IF VL = 256:

    n := 4;
ELSE IF VL = 512:

    n := 5;
FI;
FOR j := 0 TO KL-1:

    id := SRC1[j*8 + n : j*8] ; // location of the source byte
    IF k1[j] OR *no writemask* THEN

          DEST[j*8 + 7: j*8] := SRC2[id*8 +7: id*8];
    ELSE IF zeroing-masking THEN

          DEST[j*8 + 7: j*8] := 0;
    *ELSE

          DEST[j*8 + 7: j*8] remains unchanged*
    FI
ENDFOR
DEST[MAX_VL-1:VL] := 0;

Intel C/C++ compilador intrínseco

VPERMB __m512i _mm512_permutexvar_epi8( __m512i idx, __m512i a);
VPERMB __m512i _mm512_mask_permutexvar_epi8(__m512i s, __mmask64 k, __m512i idx, __m512i a);
VPERMB __m512i _mm512_maskz_permutexvar_epi8( __mmask64 k, __m512i idx, __m512i a);
VPERMB __m256i _mm256_permutexvar_epi8( __m256i idx, __m256i a);
VPERMB __m256i _mm256_mask_permutexvar_epi8(__m256i s, __mmask32 k, __m256i idx, __m256i a);
VPERMB __m256i _mm256_maskz_permutexvar_epi8( __mmask32 k, __m256i idx, __m256i a);
VPERMB __m128i _mm_permutexvar_epi8( __m128i idx, __m128i a);
VPERMB __m128i _mm_mask_permutexvar_epi8(__m128i s, __mmask16 k, __m128i idx, __m128i a);
VPERMB __m128i _mm_maskz_permutexvar_epi8( __mmask16 k, __m128i idx, __m128i a);

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Excepciones Tipo E4NF.nb en la tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción."

Fuentes