VPMOVQB, VPMOVSQB, VPMOVUSQB
Down Convertir QWord en Byte
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.F3.0F38.W0 32 /r | VPMOVQB xmm1/m16 {k1}{z}, xmm2 | A | Valido | Valido | Convierte 2 enteros de palabras cuádruples de AVX512F) OR AVX10.1 xmm2 en 2 enteros de byte en xmm1/m16 con truncación bajo máscara de escritura k1. |
EVEX.128.F3.0F38.W0 22 /r | VPMOVSQB xmm1/m16 {k1}{z}, xmm2 | A | Valido | Valido | Convierte 2 enteros de cuádruple firmados AVX512F) OR AVX10.1 de xmm2 en 2 enteros firmados porte integers en xmm1/m16 usando saturación firmada bajo máscara de escritura k1. |
EVEX.128.F3.0F38.W0 12 /r | VPMOVUSQB xmm1/m16 {k1}{z}, xmm2 | A | Valido | Valido | Convierte 2 integers de cuádruple sin firmar AVX512F) O de xmm2 en 2 enteros de byte AVX10.1 sin firmar en xmm1/m16 usando saturación sin firmar bajo máscara de escritura k1. |
EVEX.256.F3.0F38.W0 32 /r | VPMOVQB xmm1/m32 {k1}{z}, ymm2 | A | Valido | Valido | Convierte 4 enteros de palabras cuádruples de AVX512F) OR AVX10.1 ymm2 en 4 enteros de byte en xmm1/m32 con truncación bajo máscara de escritura k1. |
EVEX.256.F3.0F38.W0 22 /r | VPMOVSQB xmm1/m32 {k1}{z}, ymm2 | A | Valido | Valido | Convierte 4 integers de cuádruple firmados AVX512F) OR AVX10.1 de ymm2 en 4 integers de byte firmados en xmm1/m32 usando saturación firmada bajo máscara de escritura k1. |
EVEX.256.F3.0F38.W0 12 /r | VPMOVUSQB xmm1/m32 {k1}{z}, ymm2 | A | Valido | Valido | Convierte 4 integers de cuádruple sin firmar AVX512F) de ymm2 en 4 integers de byte de AVX10.1 sin firmar en xmm1/m32 usando saturación sin firmar bajo máscara de escritura k1. |
EVEX.512.F3.0F38.W0 32 /r | VPMOVQB xmm1/m64 {k1}{z}, zmm2 | A | Valido | Valido | Convierte 8 enteros de palabras cuádruples de OR AVX10.1 zmm2 en 8 enteros de byte en xmm1/m64 con truncación bajo máscara de escritura k1. |
EVEX.512.F3.0F38.W0 22 /r | VPMOVSQB xmm1/m64 {k1}{z}, zmm2 | A | Valido | Valido | Convierte 8 enteros de cuádruple firmados o AVX10.1 de zmm2 en 8 enteros de byte firmados en xmm1/m64 usando saturación firmada bajo máscara de escritura k1. |
EVEX.512.F3.0F38.W0 12 /r | VPMOVUSQB xmm1/m64 {k1}{z}, zmm2 | A | Valido | Valido | Convierte 8 integers de cuádruple sin firmar o AVX10.1 de zmm2 en 8 integers de byte sin firmar en xmm1/m64 usando saturación sin firmar bajo 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.rmescriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pidemodrm.reglecturabyte ModRM, campo reg (bits 5-3)
Tupla: Eighth Mem
Coste medido
Cargando las mediciones de arch-data...
Descripción
VPMOVQB abajo convierte elementos enteros de 64 bits en el operando de origen (el segundo operando) en elementos de byte empaquetados utilizando truncation. VPMOVSQB convierte los enteros firmados de 64 bits en los bytes firmados mediante saturación firmada. VPMOVUSQB convierte los valores de cuádruple no firmados en valores byte no firmados usando saturación no firmada. El operando de origen es un registro de vectores. El operando de destino es un registro XMM o una ubicación de memoria.
Los elementos de byte de baja conversión están escritos al operando de destino (el primer operando) del byte menos significativo. Los elementos Byte del operando de destino se actualizan según la máscara de escritura. Bits (MAXVL-1:64) del destino se ponen a cero.
EVEX.vvvv está reservado y debe ser 1111b instrucciones de lo contrario #UD.
Operación
VPMOVQB instruction (EVEX encoded versions) when dest is a register
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 8
m := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+7:i] := TruncateQuadWordToByte (SRC[m+63:m])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+7:i] remains unchanged*
ELSE *zeroing-masking* ; zeroing-masking
DEST[i+7:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL/8] := 0;
VPMOVQB instruction (EVEX encoded versions) when dest is memory
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 8
m := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+7:i] := TruncateQuadWordToByte (SRC[m+63:m])
ELSE
*DEST[i+7:i] remains unchanged* ; merging-masking
FI;
ENDFOR
VPMOVSQB instruction (EVEX encoded versions) when dest is a register
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 8
m := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+7:i] := SaturateSignedQuadWordToByte (SRC[m+63:m])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+7:i] remains unchanged*
ELSE *zeroing-masking* ; zeroing-masking
DEST[i+7:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL/8] := 0;
VPMOVSQB instruction (EVEX encoded versions) when dest is memory
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 8
m := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+7:i] := SaturateSignedQuadWordToByte (SRC[m+63:m])
ELSE
*DEST[i+7:i] remains unchanged* ; merging-masking
FI;
ENDFOR
VPMOVUSQB instruction (EVEX encoded versions) when dest is a register
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 8
m := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+7:i] := SaturateUnsignedQuadWordToByte (SRC[m+63:m])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+7:i] remains unchanged*
ELSE *zeroing-masking* ; zeroing-masking
DEST[i+7:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL/8] := 0;
VPMOVUSQB instruction (EVEX encoded versions) when dest is memory
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 8
m := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+7:i] := SaturateUnsignedQuadWordToByte (SRC[m+63:m])
ELSE
*DEST[i+7:i] remains unchanged* ; merging-masking
FI;
ENDFORIntel C/C++ compilador intrínseco
VPMOVQB __m128i _mm512_cvtepi64_epi8( __m512i a);
VPMOVQB __m128i _mm512_mask_cvtepi64_epi8(__m128i s, __mmask8 k, __m512i a);
VPMOVQB __m128i _mm512_maskz_cvtepi64_epi8( __mmask8 k, __m512i a);
VPMOVQB void _mm512_mask_cvtepi64_storeu_epi8(void * d, __mmask8 k, __m512i a);
VPMOVSQB __m128i _mm512_cvtsepi64_epi8( __m512i a);
VPMOVSQB __m128i _mm512_mask_cvtsepi64_epi8(__m128i s, __mmask8 k, __m512i a);
VPMOVSQB __m128i _mm512_maskz_cvtsepi64_epi8( __mmask8 k, __m512i a);
VPMOVSQB void _mm512_mask_cvtsepi64_storeu_epi8(void * d, __mmask8 k, __m512i a);
VPMOVUSQB __m128i _mm512_cvtusepi64_epi8( __m512i a);
VPMOVUSQB __m128i _mm512_mask_cvtusepi64_epi8(__m128i s, __mmask8 k, __m512i a);
VPMOVUSQB __m128i _mm512_maskz_cvtusepi64_epi8( __mmask8 k, __m512i a);
VPMOVUSQB void _mm512_mask_cvtusepi64_storeu_epi8(void * d, __mmask8 k, __m512i a);
VPMOVUSQB __m128i _mm256_cvtusepi64_epi8(__m256i a);
VPMOVUSQB __m128i _mm256_mask_cvtusepi64_epi8(__m128i a, __mmask8 k, __m256i b);
VPMOVUSQB __m128i _mm256_maskz_cvtusepi64_epi8( __mmask8 k, __m256i b);
VPMOVUSQB void _mm256_mask_cvtusepi64_storeu_epi8(void * , __mmask8 k, __m256i b);
VPMOVUSQB __m128i _mm_cvtusepi64_epi8(__m128i a);
VPMOVUSQB __m128i _mm_mask_cvtusepi64_epi8(__m128i a, __mmask8 k, __m128i b);
VPMOVUSQB __m128i _mm_maskz_cvtusepi64_epi8( __mmask8 k, __m128i b);
VPMOVUSQB void _mm_mask_cvtusepi64_storeu_epi8(void * , __mmask8 k, __m128i b);
VPMOVSQB __m128i _mm256_cvtsepi64_epi8(__m256i a);
VPMOVSQB __m128i _mm256_mask_cvtsepi64_epi8(__m128i a, __mmask8 k, __m256i b);
VPMOVSQB __m128i _mm256_maskz_cvtsepi64_epi8( __mmask8 k, __m256i b);
VPMOVSQB void _mm256_mask_cvtsepi64_storeu_epi8(void * , __mmask8 k, __m256i b);
VPMOVSQB __m128i _mm_cvtsepi64_epi8(__m128i a);
VPMOVSQB __m128i _mm_mask_cvtsepi64_epi8(__m128i a, __mmask8 k, __m128i b);
VPMOVSQB __m128i _mm_maskz_cvtsepi64_epi8( __mmask8 k, __m128i b);
VPMOVSQB void _mm_mask_cvtsepi64_storeu_epi8(void * , __mmask8 k, __m128i b);
VPMOVQB __m128i _mm256_cvtepi64_epi8(__m256i a);
VPMOVQB __m128i _mm256_mask_cvtepi64_epi8(__m128i a, __mmask8 k, __m256i b);
VPMOVQB __m128i _mm256_maskz_cvtepi64_epi8( __mmask8 k, __m256i b);
VPMOVQB void _mm256_mask_cvtepi64_storeu_epi8(void * , __mmask8 k, __m256i b);
VPMOVQB __m128i _mm_cvtepi64_epi8(__m128i a);
VPMOVQB __m128i _mm_mask_cvtepi64_epi8(__m128i a, __mmask8 k, __m128i b);
VPMOVQB __m128i _mm_maskz_cvtepi64_epi8( __mmask8 k, __m128i b);
VPMOVQB void _mm_mask_cvtepi64_storeu_epi8(void * , __mmask8 k, __m128i b);SIMD coma flotante Excepciones
None.
Otras excepciones
Instrucciones codificadas por EVEX, ver Tabla 2-55, "Tipo E6 Clase Condiciones de Excepción."
Additionally: If EVEX.vvvv != 1111B.
#UD