VPMULTISHIFTQB

Select Packed Noligned Bytes From Quadword Sources

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.66.0F38.W1 83 /rVPMULTISHIFTQB xmm1 {k1}{z}, xmm2,xmm3/m128/m64bcstAValidoValidoSeleccione bytes no deseados de qwords en AVX512 VBMI) xmm3/m128/m64bcst usando bytes de control en OR AVX10.1 xmm2, escriba resultados byte a xmm1 bajo k1.
EVEX.256.66.0F38.W1 83 /rVPMULTISHIFTQB ymm1 {k1}{z}, ymm2,ymm3/m256/m64bcstAValidoValidoSeleccione bytes no deseados de qwords en AVX512 VBMI) ymm3/m256/m64bcst usando bytes de control en OR AVX10.1 ymm2, escriba resultados byte a ymm1 bajo k1.
EVEX.512.66.0F38.W1 83 /rVPMULTISHIFTQB zmm1 {k1}{z}, zmm2,zmm3/m512/m64bcstAValidoValidoSeleccione bytes no deseados de qwords en OR AVX10.1 zmm3/m512/m64bcst usando bytes de control en zmm2, escriba resultados byte a zmm1 bajo 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

Coste medido

Cargando las mediciones de arch-data...

Descripción

Esta instrucción selecciona ocho bytes no alineados de cada elemento qword de entrada del segundo operando de origen (el tercer operando) y escribe ocho bytes montados para cada elemento qword en el operando de destino (el primer operando). Cada resultado de byte se selecciona usando un control de cambio de byte-granular dentro del elemento qword correspondiente del primer operando de origen (el segundo operando). Cada resultado byte en el operando de destino se actualiza bajo la máscara de escritura k1.

Sólo los 6 bits bajos de cada byte de control se utilizan para seleccionar una ranura de 8 bits para extraer el byte de salida de los datos de qword en el segundo operando de origen. El bit inicial de la ranura de 8 bits puede ser no aligeado en relación a cualquier límite de byte y se extrae de la fuente de entrada qword en la ubicación especificada en el bajo 6 bit del byte de control. Si la ranura de 8 bits excedería el límite de qword, la porción de salida de la ranura de 8 bits se envuelve de nuevo para comenzar desde el bit 0 del elemento qword de entrada.

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 o un vector 512/256/128-bit transmitido desde una ubicación de memoria de 64 bits. El operando de destino es un registro ZMM/YMM/XMM.

Operación

VPMULTISHIFTQB DEST, SRC1, SRC2 (EVEX encoded version)
(KL, VL) = (2, 128),(4, 256), (8, 512)
FOR i := 0 TO KL-1

    IF EVEX.b=1 AND src2 is memory THEN
                tcur := src2.qword[0]; //broadcasting

    ELSE
                tcur := src2.qword[i];

    FI;
    FOR j := 0 to 7

          ctrl := src1.qword[i].byte[j] & 63;
          FOR k := 0 to 7

                res.bit[k] := tcur.bit[ (ctrl+k) mod 64 ];
          ENDFOR
          IF k1[i*8+j] or no writemask THEN

                DEST.qword[i].byte[j] := res;
          ELSE IF zeroing-masking THEN

                DEST.qword[i].byte[j] := 0;
    ENDFOR
ENDFOR
DEST.qword[MAX_VL-1:VL] := 0;

Intel C/C++ compilador intrínseco

VPMULTISHIFTQB __m512i _mm512_multishift_epi64_epi8( __m512i a, __m512i b);
VPMULTISHIFTQB __m512i _mm512_mask_multishift_epi64_epi8(__m512i s, __mmask64 k, __m512i a, __m512i b);
VPMULTISHIFTQB __m512i _mm512_maskz_multishift_epi64_epi8( __mmask64 k, __m512i a, __m512i b);
VPMULTISHIFTQB __m256i _mm256_multishift_epi64_epi8( __m256i a, __m256i b);
VPMULTISHIFTQB __m256i _mm256_mask_multishift_epi64_epi8(__m256i s, __mmask32 k, __m256i a, __m256i b);
VPMULTISHIFTQB __m256i _mm256_maskz_multishift_epi64_epi8( __mmask32 k, __m256i a, __m256i b);
VPMULTISHIFTQB __m128i _mm_multishift_epi64_epi8( __m128i a, __m128i b);
VPMULTISHIFTQB __m128i _mm_mask_multishift_epi64_epi8(__m128i s, __mmask8 k, __m128i a, __m128i b);
VPMULTISHIFTQB __m128i _mm_maskz_multishift_epi64_epi8( __mmask8 k, __m128i a, __m128i b);

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".

Fuentes