VPMOVDB, VPMOVSDB, VPMOVUSDB

Down Convertir DWord en Byte

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.F3.0F38.W0 31 /rVPMOVDB xmm1/m32 {k1}{z}, xmm2AValidoValidoConvierte 4 enteros de doble palabra embalados de AND AVX512F) OR AVX10.1 xmm2 en 4 enteros de byte en xmm1/m32 con truncación bajo máscara de escritura k1.
EVEX.128.F3.0F38.W0 21 /rVPMOVSDB xmm1/m32 {k1}{z}, xmm2AValidoValidoConvierte 4 integers de doble palabra firmados AND AVX512F) OR AVX10.1 de xmm2 en 4 enteros de byte firmados en xmm1/m32 usando saturación firmada bajo máscara de escritura k1.
EVEX.128.F3.0F38.W0 11 /rVPMOVUSDB xmm1/m32 {k1}{z}, xmm2AValidoValidoConvierte 4 integers de doble palabra sin firmar AND AVX512F) OR AVX10.1 integers de xmm2 en 4 integers de byte sin firmar en xmm1/m32 usando saturación sin firmar bajo máscara de escritura k1.
EVEX.256.F3.0F38.W0 31 /rVPMOVDB xmm1/m64 {k1}{z}, ymm2AValidoValidoConvierte 8 enteros de doble palabra embalados de AND AVX512F) OR AVX10.1 ymm2 en 8 enteros de byte en xmm1/m64 con truncación bajo máscara de escritura k1.
EVEX.256.F3.0F38.W0 21 /rVPMOVSDB xmm1/m64 {k1}{z}, ymm2AValidoValidoConvierte 8 integers de doble palabra firmados AND AVX512F) OR AVX10.1 de ymm2 en 8 enteros de byte firmados en xmm1/m64 usando saturación firmada bajo máscara de escritura k1.
EVEX.256.F3.0F38.W0 11 /rVPMOVUSDB xmm1/m64 {k1}{z}, ymm2AValidoValidoConvierte 8 integers de doble palabra sin firmar AND AVX512F) OR AVX10.1 integers de ymm2 en 8 integers de byte sin firmar en xmm1/m64 usando saturación sin firmar bajo máscara de escritura k1.
EVEX.512.F3.0F38.W0 31 /rVPMOVDB xmm1/m128 {k1}{z}, zmm2AValidoValidoConvierte 16 enteros de doble palabra embalados de OR AVX10.1 zmm2 en 16 enteros de byte en xmm1/m128 con truncación bajo máscara de escritura k1.
EVEX.512.F3.0F38.W0 21 /rVPMOVSDB xmm1/m128 {k1}{z}, zmm2AValidoValidoConvierte 16 enteros firmados de doble palabra OR AVX10.1 de zmm2 en 16 paquetes firmados porte enteros en xmm1/m128 usando saturación firmada bajo máscara de escritura k1.
EVEX.512.F3.0F38.W0 11 /rVPMOVUSDB xmm1/m128 {k1}{z}, zmm2 Op/En Tuple Type A Quarter MemAValidoValidoConvierte 16 integers de doble palabra sin firmar OR AVX10.1 de zmm2 en 16 integers de byte sin firmar en xmm1/m128 usando saturación no firmada bajo escrituramask k1. Ucción de instr Operand Encoding Operand 1 Operand 2 Operand 3 Operand 4 ModRM:r/m (RM) Modr

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.rm escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)

Tupla: Quarter Mem

Coste medido

Cargando las mediciones de arch-data...

Descripción

VPMOVDB abajo convierte los elementos enteros de 32 bits en el operando de origen (el segundo operando) en los bytes empaquetados usando truncation. VPMOVSDB convierte los enteros de 32 bits firmados en los bytes firmados mediante saturación firmada. VPMOVUSDB convierte los valores de doble palabra no firmados en valores byte no firmados usando saturación no firmada.

El operando de origen es un registro ZMM/YMM/XMM. El operando de destino es un registro XMM o un 128/64/32-bit 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:128/64/32) del destino de registro se ponen a cero.

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

Operación

VPMOVDB instruction (EVEX encoded versions) when dest is a register

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

FOR j := 0 TO KL-1

i := j * 8

m := j * 32

IF k1[j] OR *no writemask*

           THEN DEST[i+7:i] := TruncateDoubleWordToByte (SRC[m+31: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/4] := 0;

VPMOVDB instruction (EVEX encoded versions) when dest is memory

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

FOR j := 0 TO KL-1

i := j * 8

m := j * 32

IF k1[j] OR *no writemask*

           THEN DEST[i+7:i] := TruncateDoubleWordToByte (SRC[m+31:m])

           ELSE *DEST[i+7:i] remains unchanged*  ; merging-masking

FI;

ENDFOR

VPMOVSDB instruction (EVEX encoded versions) when dest is a register

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

FOR j := 0 TO KL-1

i := j * 8

m := j * 32

IF k1[j] OR *no writemask*

           THEN DEST[i+7:i] := SaturateSignedDoubleWordToByte (SRC[m+31: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/4] := 0;

VPMOVSDB instruction (EVEX encoded versions) when dest is memory

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

FOR j := 0 TO KL-1

i := j * 8

m := j * 32

IF k1[j] OR *no writemask*

        THEN DEST[i+7:i] := SaturateSignedDoubleWordToByte (SRC[m+31:m])

        ELSE *DEST[i+7:i] remains unchanged*  ; merging-masking

FI;

ENDFOR

VPMOVUSDB instruction (EVEX encoded versions) when dest is a register

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

FOR j := 0 TO KL-1

i := j * 8

m := j * 32

IF k1[j] OR *no writemask*

        THEN DEST[i+7:i] := SaturateUnsignedDoubleWordToByte (SRC[m+31: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/4] := 0;

VPMOVUSDB instruction (EVEX encoded versions) when dest is memory

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

FOR j := 0 TO KL-1

i := j * 8

m := j * 32

IF k1[j] OR *no writemask*

        THEN DEST[i+7:i] := SaturateUnsignedDoubleWordToByte (SRC[m+31:m])

        ELSE *DEST[i+7:i] remains unchanged*  ; merging-masking

FI;

ENDFOR

Intel C/C++ compilador intrínseco

VPMOVDB __m128i _mm512_cvtepi32_epi8( __m512i a);
VPMOVDB __m128i _mm512_mask_cvtepi32_epi8(__m128i s, __mmask16 k, __m512i a);
VPMOVDB __m128i _mm512_maskz_cvtepi32_epi8( __mmask16 k, __m512i a);
VPMOVDB void _mm512_mask_cvtepi32_storeu_epi8(void * d, __mmask16 k, __m512i a);
VPMOVSDB __m128i _mm512_cvtsepi32_epi8( __m512i a);
VPMOVSDB __m128i _mm512_mask_cvtsepi32_epi8(__m128i s, __mmask16 k, __m512i a);
VPMOVSDB __m128i _mm512_maskz_cvtsepi32_epi8( __mmask16 k, __m512i a);
VPMOVSDB void _mm512_mask_cvtsepi32_storeu_epi8(void * d, __mmask16 k, __m512i a);
VPMOVUSDB __m128i _mm512_cvtusepi32_epi8( __m512i a);
VPMOVUSDB __m128i _mm512_mask_cvtusepi32_epi8(__m128i s, __mmask16 k, __m512i a);
VPMOVUSDB __m128i _mm512_maskz_cvtusepi32_epi8( __mmask16 k, __m512i a);
VPMOVUSDB void _mm512_mask_cvtusepi32_storeu_epi8(void * d, __mmask16 k, __m512i a);
VPMOVUSDB __m128i _mm256_cvtusepi32_epi8(__m256i a);
VPMOVUSDB __m128i _mm256_mask_cvtusepi32_epi8(__m128i a, __mmask8 k, __m256i b);
VPMOVUSDB __m128i _mm256_maskz_cvtusepi32_epi8( __mmask8 k, __m256i b);
VPMOVUSDB void _mm256_mask_cvtusepi32_storeu_epi8(void * , __mmask8 k, __m256i b);
VPMOVUSDB __m128i _mm_cvtusepi32_epi8(__m128i a);
VPMOVUSDB __m128i _mm_mask_cvtusepi32_epi8(__m128i a, __mmask8 k, __m128i b);
VPMOVUSDB __m128i _mm_maskz_cvtusepi32_epi8( __mmask8 k, __m128i b);
VPMOVUSDB void _mm_mask_cvtusepi32_storeu_epi8(void * , __mmask8 k, __m128i b);
VPMOVSDB __m128i _mm256_cvtsepi32_epi8(__m256i a);
VPMOVSDB __m128i _mm256_mask_cvtsepi32_epi8(__m128i a, __mmask8 k, __m256i b);
VPMOVSDB __m128i _mm256_maskz_cvtsepi32_epi8( __mmask8 k, __m256i b);
VPMOVSDB void _mm256_mask_cvtsepi32_storeu_epi8(void * , __mmask8 k, __m256i b);
VPMOVSDB __m128i _mm_cvtsepi32_epi8(__m128i a);
VPMOVSDB __m128i _mm_mask_cvtsepi32_epi8(__m128i a, __mmask8 k, __m128i b);
VPMOVSDB __m128i _mm_maskz_cvtsepi32_epi8( __mmask8 k, __m128i b);
VPMOVSDB void _mm_mask_cvtsepi32_storeu_epi8(void * , __mmask8 k, __m128i b);
VPMOVDB __m128i _mm256_cvtepi32_epi8(__m256i a);
VPMOVDB __m128i _mm256_mask_cvtepi32_epi8(__m128i a, __mmask8 k, __m256i b);
VPMOVDB __m128i _mm256_maskz_cvtepi32_epi8( __mmask8 k, __m256i b);
VPMOVDB void _mm256_mask_cvtepi32_storeu_epi8(void * , __mmask8 k, __m256i b);
VPMOVDB __m128i _mm_cvtepi32_epi8(__m128i a);
VPMOVDB __m128i _mm_mask_cvtepi32_epi8(__m128i a, __mmask8 k, __m128i b);
VPMOVDB __m128i _mm_maskz_cvtepi32_epi8( __mmask8 k, __m128i b);
VPMOVDB void _mm_mask_cvtepi32_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

Fuentes