VBLENDMPD, VBLENDMPS

Blend Float64/Float32 Vectores Usando un Control OpMask

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.66.0F38.W1 65 /rVBLENDMPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcstAValidoValidoBlend doble precisión vector xmm2 y doble AVX512F) OR vector de precisión xmm3/m128/m64bcst y almacenar el resultado AVX10.1 en xmm1, bajo máscara de control.
EVEX.256.66.0F38.W1 65 /rVBLENDMPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcstAValidoValidoBlend doble precisión vector ymm2 y doble AVX512F) OR vector de precisión ymm3/m256/m64bcst y almacenar el resultado AVX10.1 en ymm1, bajo máscara de control.
EVEX.512.66.0F38.W1 65 /rVBLENDMPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcstAValidoValidoBlend doble precisión vector zmm2 y doble OR AVX10.1 de precisión vector zmm3/m512/m64bcst y almacenar el resultado en zmm1, bajo máscara de control.
EVEX.128.66.0F38.W0 65 /rVBLENDMPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcstAValidoValidoBlend vector de precisión simple xmm2 y simple AVX512F) O vector de precisión xmm3/m128/m32bcst y almacenar el resultado AVX10.1 en xmm1, bajo máscara de control.
EVEX.256.66.0F38.W0 65 /rVBLENDMPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcstAValidoValidoBlend vector de precisión simple ymm2 y simple AVX512F) O vector de precisión ymm3/m256/m32bcst y almacenar el resultado AVX10.1 en ymm1, bajo máscara de control.
EVEX.512.66.0F38.W0 65 /rVBLENDMPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcstAValidoValidoBlend vector de precisión simple zmm2 y único OR AVX10.1 vector de precisión zmm3/m512/m32bcst utilizando k1 como control selecto y almacenar el resultado en zmm1.

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 de elementos por elemento entre elementos flotantes64/float32 en el primer operando de origen (el segundo operando) con los elementos en el segundo operando de origen (el tercer operando) utilizando un registro de opmasco como control selecto. El resultado mezclado se escribe en el registro de destino.

El destino y el primer operandos de origen son los registros ZMM/YMM/XMM. El segundo operando de origen puede ser un registro ZMM/YMM/XMM, un 512/256/128-bit ubicación de memoria o un vector 512/256/128-bit transmitido desde una ubicación de memoria de 64 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 primer operando de origen, 1 para 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

VBLENDMPD (EVEX Encoded Versions)

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

FOR j := 0 TO KL-1

i := j * 64

IF k1[j] OR *no controlmask*

     THEN

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

                  THEN

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

                  ELSE

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

             FI;

     ELSE

             IF *merging-masking*                 ; merging-masking

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

                  ELSE                            ; zeroing-masking

                    DEST[i+63:i] := 0

             FI;

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0

VBLENDMPS (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

VBLENDMPD __m512d _mm512_mask_blend_pd(__mmask8 k, __m512d a, __m512d b);
VBLENDMPD __m256d _mm256_mask_blend_pd(__mmask8 k, __m256d a, __m256d b);
VBLENDMPD __m128d _mm_mask_blend_pd(__mmask8 k, __m128d a, __m128d b);
VBLENDMPS __m512 _mm512_mask_blend_ps(__mmask16 k, __m512 a, __m512 b);
VBLENDMPS __m256 _mm256_mask_blend_ps(__mmask8 k, __m256 a, __m256 b);
VBLENDMPS __m128 _mm_mask_blend_ps(__mmask8 k, __m128 a, __m128 b);

SIMD coma flotante Excepciones

None.

Otras excepciones

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

Fuentes