VPEXPANDD

Carga Sparse Packed Doubleword Integer Values From Dense Memory/Register

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.66.0F38.W0 89 /rVPEXPANDD xmm1 {k1}{z}, xmm2/m128AValidoValidoAmpliar los valores de entero de doble palabra empaquetados de AVX512F) OR xmm2/m128 a xmm1 utilizando máscara de escritura k1. AVX10.1
EVEX.256.66.0F38.W0 89 /rVPEXPANDD ymm1 {k1}{z}, ymm2/m256AValidoValidoAmpliar los valores de entero de doble palabra empaquetados de AVX512F) OR ymm2/m256 a ymm1 utilizando máscara de escritura k1. AVX10.1
EVEX.512.66.0F38.W0 89 /rVPEXPANDD zmm1 {k1}{z}, zmm2/m512AValidoValidoAmpliar los valores de entero de doble palabra empaquetados de OR AVX10.1 zmm2/m512 a 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. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Tupla: Tuple1 Scalar

Coste medido

Cargando las mediciones de arch-data...

Descripción

Ampliar (carga) hasta 16 valores enteros de doble palabra contiguos del vector de entrada en el operando de origen (el segundo operando) a elementos escasos en el operando de destino (el primer operando), seleccionado por la máscara de escritura k1. El operando de destino es un registro ZMM, el operando de origen puede ser un registro ZMM o ubicación de memoria.

El vector de entrada comienza desde el elemento más bajo del operando de origen. El registro de opmasco k1 selecciona los elementos de destino (un vector parcial o elementos escasos si menos de 8 elementos) para ser reemplazados por los elementos ascendentes en el vector de entrada. Los elementos de destino no seleccionados por la máscara de escritura k1 son sin modificar o cero, dependiendo de EVEX.z.

Nota: EVEX.vvvv está reservado y debe ser 1111b instrucciones de lo contrario #UD.

Tenga en cuenta que el desplazamiento comprimido supone un pre-escalamiento (N) correspondiente al tamaño de un solo elemento en lugar del tamaño del vector completo.

Operación

VPEXPANDD (EVEX encoded versions)

(KL, VL) = (4, 128), (8, 256), (16, 512)

k := 0

FOR j := 0 TO KL-1

i := j * 32

IF k1[j] OR *no writemask*

        THEN

             DEST[i+31:i] := SRC[k+31:k];

             k := k + 32

        ELSE

             IF *merging-masking*             ; merging-masking

                 THEN *DEST[i+31:i] remains unchanged*

                 ELSE                         ; zeroing-masking

                    DEST[i+31:i] := 0

             FI

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0

Intel C/C++ compilador intrínseco

VPEXPANDD __m512i _mm512_mask_expandloadu_epi32(__m512i s, __mmask16 k, void * a);
VPEXPANDD __m512i _mm512_maskz_expandloadu_epi32( __mmask16 k, void * a);
VPEXPANDD __m512i _mm512_mask_expand_epi32(__m512i s, __mmask16 k, __m512i a);
VPEXPANDD __m512i _mm512_maskz_expand_epi32( __mmask16 k, __m512i a);
VPEXPANDD __m256i _mm256_mask_expandloadu_epi32(__m256i s, __mmask8 k, void * a);
VPEXPANDD __m256i _mm256_maskz_expandloadu_epi32( __mmask8 k, void * a);
VPEXPANDD __m256i _mm256_mask_expand_epi32(__m256i s, __mmask8 k, __m256i a);
VPEXPANDD __m256i _mm256_maskz_expand_epi32( __mmask8 k, __m256i a);
VPEXPANDD __m128i _mm_mask_expandloadu_epi32(__m128i s, __mmask8 k, void * a);
VPEXPANDD __m128i _mm_maskz_expandloadu_epi32( __mmask8 k, void * a);
VPEXPANDD __m128i _mm_mask_expand_epi32(__m128i s, __mmask8 k, __m128i a);
VPEXPANDD __m128i _mm_maskz_expand_epi32( __mmask8 k, __m128i a);

SIMD coma flotante Excepciones

None.

Otras excepciones

Instrucciones de código EVEX, ver Excepciones Tipo E4.nb en la tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".

Additionally: If EVEX.vvvv != 1111B.

#UD

Fuentes