VPBLENDMD, VPBLENDMQ

Blend Int32/Int64 Vectores Usando un Control OpMask

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.66.0F38.W0 64 /rVPBLENDMD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcstAValidoValidoBlend doubleword integer vector xmm2 y AVX512F) OR doubleword vector xmm3/m128/m32bcst y AVX10.1 almacenan el resultado en xmm1, bajo control máscara.
EVEX.256.66.0F38.W0 64 /rVPBLENDMD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcstAValidoValidoBlend doubleword integer vector ymm2 y AVX512F) OR doubleword vector ymm3/m256/m32bcst y AVX10.1 almacenan el resultado en ymm1, bajo control máscara.
EVEX.512.66.0F38.W0 64 /rVPBLENDMD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcstAValidoValidoBlend doubleword integer vector zmm2 y OR AVX10.1 dobleword vector zmm3/m512/m32bcst y almacenar el resultado en zmm1, bajo control máscara.
EVEX.128.66.0F38.W1 64 /rVPBLENDMQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcstAValidoValidoBlend quadword integer vector xmm2 y AVX512F) OR quadword vector xmm3/m128/m64bcst y almacenar AVX10.1 el resultado en xmm1, bajo máscara de control.
EVEX.256.66.0F38.W1 64 /rVPBLENDMQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcstAValidoValidoBlend quadword integer vector ymm2 y AVX512F) OR quadword vector ymm3/m256/m64bcst y almacenar AVX10.1 el resultado en ymm1, bajo máscara de control.
EVEX.512.66.0F38.W1 64 /rVPBLENDMQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcstAValidoValidoBlend quadword integer vector zmm2 y OR AVX10.1 quadword vector zmm3/m512/m64bcst y almacenar el resultado en zmm1, bajo control máscara.

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

Realiza una mezcla elemento por elemento de elementos dword/qword entre el primer operando de origen (el segundo operando) y los elementos del segundo operando de origen (el tercer operando) utilizando un registro de opmasco como control selecto. El resultado mezclado está escrito en el destino.

El destino y el primer operandos de origen son los registros ZMM. El segundo operando de origen puede ser un registro ZMM, una ubicación de memoria de 512 bits o un vector de 512 bits emitido desde una ubicación de memoria de 32 bits.

El registro de opmasco no se utiliza como una máscara de escritura para esta instrucción. En cambio, la máscara se utiliza como selector de elementos: cada elemento del destino se selecciona condicionalmente entre primera fuente o segunda fuente utilizando el valor del bit de máscara relacionado (0 para el primer operando de origen, 1 para el segundo operando de origen).

Si se establece EVEX.z, los elementos con el valor de bit de máscara correspondiente de 0 en el operando de destino se ponen a cero.

Operación

VPBLENDMD (EVEX encoded versions)

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

FOR j := 0 TO KL-1

i := j * 32

IF k1[j] OR *no controlmask*

     THEN

             IF (EVEX.b = 1) AND (SRC2 *is memory*)

                  THEN

                    DEST[i+31:i] := SRC2[31:0]

                  ELSE

                    DEST[i+31:i] := SRC2[i+31:i]

             FI;

     ELSE

             IF *merging-masking*                 ; merging-masking

                  THEN DEST[i+31:i] := SRC1[i+31:i]

                  ELSE                            ; zeroing-masking

                    DEST[i+31:i] := 0

             FI;

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0;

VPBLENDMD (EVEX encoded versions)

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

FOR j := 0 TO KL-1

i := j * 32

IF k1[j] OR *no controlmask*

     THEN

             IF (EVEX.b = 1) AND (SRC2 *is memory*)

                  THEN

                    DEST[i+31:i] := SRC2[31:0]

                  ELSE

                    DEST[i+31:i] := SRC2[i+31:i]

             FI;

     ELSE

             IF *merging-masking*                 ; merging-masking

                  THEN DEST[i+31:i] := SRC1[i+31:i]

                  ELSE                            ; zeroing-masking

                    DEST[i+31:i] := 0

             FI;

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0

Intel C/C++ compilador intrínseco

VPBLENDMD __m512i _mm512_mask_blend_epi32(__mmask16 k, __m512i a, __m512i b);
VPBLENDMD __m256i _mm256_mask_blend_epi32(__mmask8 m, __m256i a, __m256i b);
VPBLENDMD __m128i _mm_mask_blend_epi32(__mmask8 m, __m128i a, __m128i b);
VPBLENDMQ __m512i _mm512_mask_blend_epi64(__mmask8 k, __m512i a, __m512i b);
VPBLENDMQ __m256i _mm256_mask_blend_epi64(__mmask8 m, __m256i a, __m256i b);
VPBLENDMQ __m128i _mm_mask_blend_epi64(__mmask8 m, __m128i a, __m128i b);

SIMD coma flotante Excepciones

None

Otras excepciones

Ver Tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".

Fuentes