VPEXPANDB, VPEXPANDW
Ampliar valores Byte/Word
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.66.0F38.W0 62 /r | VPEXPANDB xmm1{k1}{z}, m128 | A | Valido | Valido | Se expande hasta 128 bits de valores de byte embalados AND AVX512VL) OR AVX10.1 de m128 a xmm1 con máscara de escritura k1. |
EVEX.128.66.0F38.W0 62 /r | VPEXPANDB xmm1{k1}{z}, xmm2 | B | Valido | Valido | Se expande hasta 128 bits de valores de byte embalados AND AVX512VL) OR AVX10.1 de xmm2 a xmm1 con máscara de escritura k1. |
EVEX.256.66.0F38.W0 62 /r | VPEXPANDB ymm1{k1}{z}, m256 | A | Valido | Valido | Se expande hasta 256 bits de valores de byte embalados AND AVX512VL) OR AVX10.1 de m256 a ymm1 con máscara de escritura k1. |
EVEX.256.66.0F38.W0 62 /r | VPEXPANDB ymm1{k1}{z}, ymm2 | B | Valido | Valido | Se expande hasta 256 bits de valores de byte embalados AND AVX512VL) OR AVX10.1 de ymm2 a ymm1 con máscara de escritura k1. |
EVEX.512.66.0F38.W0 62 /r | VPEXPANDB zmm1{k1}{z}, m512 | A | Valido | Valido | Se expande hasta 512 bits de valores de byte embalados OR AVX10.1 de m512 a zmm1 con máscara de escritura k1. |
EVEX.512.66.0F38.W0 62 /r | VPEXPANDB zmm1{k1}{z}, zmm2 | B | Valido | Valido | Se expande hasta 512 bits de valores de byte embalados OR AVX10.1 de zmm2 a zmm1 con máscara de escritura k1. |
EVEX.128.66.0F38.W1 62 /r | VPEXPANDW xmm1{k1}{z}, m128 | A | Valido | Valido | Se expande hasta 128 bits de valores de palabras empaquetados AND AVX512VL) OR AVX10.1 de m128 a xmm1 con máscara de escritura k1. |
EVEX.128.66.0F38.W1 62 /r | VPEXPANDW xmm1{k1}{z}, xmm2 | B | Valido | Valido | Se expande hasta 128 bits de valores de palabras empaquetados AND AVX512VL) OR AVX10.1 de xmm2 a xmm1 con máscara de escritura k1. |
EVEX.256.66.0F38.W1 62 /r | VPEXPANDW ymm1{k1}{z}, m256 | A | Valido | Valido | Se expande hasta 256 bits de valores de palabras empaquetados AND AVX512VL) OR AVX10.1 de m256 a ymm1 con máscara de escritura k1. |
EVEX.256.66.0F38.W1 62 /r | VPEXPANDW ymm1{k1}{z}, ymm2 | B | Valido | Valido | Se expande hasta 256 bits de valores de palabras empaquetados AND AVX512VL) OR AVX10.1 de ymm2 a ymm1 con máscara de escritura k1. |
EVEX.512.66.0F38.W1 62 /r | VPEXPANDW zmm1{k1}{z}, m512 | A | Valido | Valido | Se expande hasta 512 bits de valores de palabras empaquetados OR AVX10.1 de m512 a zmm1 con máscara de escritura k1. |
EVEX.512.66.0F38.W1 62 /r | VPEXPANDW zmm1{k1}{z}, zmm2 | B | Valido | Valido | Se expande hasta 512 bits de valores empaquetados de byte integer OR AVX10.1 de zmm2 a zmm1 con 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
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Tupla: Tuple1 Scalar
B
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Coste medido
Cargando las mediciones de arch-data...
Descripción
Expande (cargas) hasta 64 valores enteros de byte o 32 valores enteros de palabras del operando de origen (operando de memoria) al operando de destino (registr operando), basado en los elementos activos determinados por la máscara de escritura operando.
Nota: EVEX.vvvv está reservado y debe ser 1111b instrucciones de lo contrario #UD.
Mueva 128, 256 o 512 bits de valores enteros de byte empaquetados del operando de origen (operando de memoria) al operando de destino (register operando). Esta instrucción se utiliza para cargar desde un registro vectorial int8 o ubicación de memoria
al insertar los datos en elementos escasos del registro vectorial de destino utilizando los elementos activos señalados por el operando máscara de escritura.
Esta instrucción admite la supresión de la falla de memoria.
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
VPEXPANDB
(KL, VL) = (16, 128), (32, 256), (64, 512)
k := 0
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
DEST.byte[j] := SRC.byte[k];
k := k + 1
ELSE:
IF *merging-masking*:
*DEST.byte[j] remains unchanged*
ELSE: ; zeroing-masking
DEST.byte[j] := 0
DEST[MAX_VL-1:VL] := 0
VPEXPANDW
(KL, VL) = (8,128), (16,256), (32, 512)
k := 0
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
DEST.word[j] := SRC.word[k];
k := k + 1
ELSE:
IF *merging-masking*:
*DEST.word[j] remains unchanged*
ELSE: ; zeroing-masking
DEST.word[j] := 0
DEST[MAX_VL-1:VL] := 0Intel C/C++ compilador intrínseco
VPEXPAND __m128i _mm_mask_expand_epi8(__m128i, __mmask16, __m128i);
VPEXPAND __m128i _mm_maskz_expand_epi8(__mmask16, __m128i);
VPEXPAND __m128i _mm_mask_expandloadu_epi8(__m128i, __mmask16, const void*);
VPEXPAND __m128i _mm_maskz_expandloadu_epi8(__mmask16, const void*);
VPEXPAND __m256i _mm256_mask_expand_epi8(__m256i, __mmask32, __m256i);
VPEXPAND __m256i _mm256_maskz_expand_epi8(__mmask32, __m256i);
VPEXPAND __m256i _mm256_mask_expandloadu_epi8(__m256i, __mmask32, const void*);
VPEXPAND __m256i _mm256_maskz_expandloadu_epi8(__mmask32, const void*);
VPEXPAND __m512i _mm512_mask_expand_epi8(__m512i, __mmask64, __m512i);
VPEXPAND __m512i _mm512_maskz_expand_epi8(__mmask64, __m512i);
VPEXPAND __m512i _mm512_mask_expandloadu_epi8(__m512i, __mmask64, const void*);
VPEXPAND __m512i _mm512_maskz_expandloadu_epi8(__mmask64, const void*);
VPEXPANDW __m128i _mm_mask_expand_epi16(__m128i, __mmask8, __m128i);
VPEXPANDW __m128i _mm_maskz_expand_epi16(__mmask8, __m128i);
VPEXPANDW __m128i _mm_mask_expandloadu_epi16(__m128i, __mmask8, const void*);
VPEXPANDW __m128i _mm_maskz_expandloadu_epi16(__mmask8, const void *);
VPEXPANDW __m256i _mm256_mask_expand_epi16(__m256i, __mmask16, __m256i);
VPEXPANDW __m256i _mm256_maskz_expand_epi16(__mmask16, __m256i);
VPEXPANDW __m256i _mm256_mask_expandloadu_epi16(__m256i, __mmask16, const void*);
VPEXPANDW __m256i _mm256_maskz_expandloadu_epi16(__mmask16, const void*);
VPEXPANDW __m512i _mm512_mask_expand_epi16(__m512i, __mmask32, __m512i);
VPEXPANDW __m512i _mm512_maskz_expand_epi16(__mmask32, __m512i);
VPEXPANDW __m512i _mm512_mask_expandloadu_epi16(__m512i, __mmask32, const void*);
VPEXPANDW __m512i _mm512_maskz_expandloadu_epi16(__mmask32, const void*);SIMD coma flotante Excepciones
None.
Otras excepciones
Ver Tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".