VPMADD52HUQ

Multiply Packed de Unsigned 52-Bit enteros sin signo y Add High 52-Bit

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
VEX.128.66.0F38.W1 B5 /rVPMADD52HUQ xmm1, xmm2, xmm3/m128AValidoValidoMultiply unsigned 52-bit enteros en xmm2 y xmm3/m128 y añadir los 52 pedazos altos del producto 104-bit al qword enteros sin signo en xmm1.
VEX.256.66.0F38.W1 B5 /rVPMADD52HUQ ymm1, ymm2, ymm3/m256AValidoValidoMultiply unsigned 52-bit enteros en ymm2 y ymm3/m256 y añadir los 52 pedazos altos del producto 104-bit al qword enteros sin signo en ymm1.
EVEX.128.66.0F38.W1 B5 /rVPMADD52HUQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcstBValidoValidoMultiply unsigned 52-bit integers in xmm2 and AND AVX512VL) xmm3/m128 y añadir los 52 bits altos del producto OR AVX10.1 104-bit al qword enteros sin signo en xmm1 utilizando máscara de escritura k1.
EVEX.256.66.0F38.W1 B5 /rVPMADD52HUQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcstBValidoValidoMultiply unsigned 52-bit integers in ymm2 and AND AVX512VL) ymm3/m256 y añadir los 52 bits altos del producto OR AVX10.1 104-bit al qword enteros sin signo en ymm1 utilizando máscara de escritura k1.
EVEX.512.66.0F38.W1 B5 /rVPMADD52HUQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcstBValidoValidoMultiply unsigned 52-bit integers in zmm2 y OR AVX10.1 zmm3/m512 y añadir los 52 pedazos altos del producto 104-bit al qword enteros sin signo en zmm1 utilizando 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

  1. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  2. vex.vvvv lecturaprefijo VEX, 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

B

  1. modrm.reg lectura y 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

Multiplica los enteros de 52 bits empaquetados en cada elemento qword del primer operando de origen (el segundo operando) con los enteros de 52 bits empaquetados en los elementos correspondientes del segundo operando de origen (el tercer operando) para formar los resultados intermedios de 104 bits empaquetados. El entero alto de 52 bits, sin firmar de cada producto de 104 bits se añade al entero sin firmar correspondiente del operando de destino (el primer operando) bajo la máscara de escritura k1.

El primer operando de origen es un registro 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 operando de destino es un ZMM/YMM/XMM registro actualizado condicionalmente con máscara de escritura k1 a la granularidad de 64 bits.

Operación

VPMADDHUQ srcdest, src1, src2 (VEX version)
VL = (128,256)
KL = VL/64

FOR i in 0 .. KL-1:
    temp128 := zeroextend64(src1.qword[i][51:0]) *zeroextend64(src2.qword[i][51:0])
    srcdest.qword[i] := srcdest.qword[i] +zeroextend64(temp128[103:52])

srcdest[MAXVL:VL] := 0

VPMADD52HUQ (EVEX encoded)
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1

    i := j * 64;
    IF k1[j] OR *no writemask* THEN

          IF src2 is Memory AND EVEX.b=1 THEN
                tsrc2[63:0] := ZeroExtend64(src2[51:0]);

          ELSE
                tsrc2[63:0] := ZeroExtend64(src2[i+51:i];

          FI;
          Temp128[127:0] := ZeroExtend64(src1[i+51:i]) * tsrc2[63:0];
          Temp2[63:0] := DEST[i+63:i] + ZeroExtend64(temp128[103:52]) ;
          DEST[i+63:i] := Temp2[63:0];
    ELSE
          IF *zeroing-masking* THEN

                DEST[i+63:i] := 0;
          ELSE *merge-masking*

                DEST[i+63:i] is unchanged;
          FI;
    FI;
ENDFOR
DEST[MAX_VL-1:VL] := 0

Intel C/C++ compilador intrínseco

VPMADD52HUQ __m128i _mm_madd52hi_avx_epu64 (__m128i __X, __m128i __Y, __m128i __Z);
VPMADD52HUQ __m128i _mm_maskz_madd52hi_epu64( __mmask8 k, __m128i a, __m128i b, __m128i c);
VPMADD52HUQ __m128i _mm_madd52hi_epu64 (__m128i __X, __m128i __Y, __m128i __Z);
VPMADD52HUQ __m128i _mm_madd52hi_epu64( __m128i a, __m128i b, __m128i c);
VPMADD52HUQ __m128i _mm_mask_madd52hi_epu64(__m128i s, __mmask8 k, __m128i a, __m128i b, __m128i c);
VPMADD52HUQ __m256i _mm256_madd52hi_avx_epu64 (__m256i __X, __m256i __Y, __m256i __Z);
VPMADD52HUQ __m256i _mm256_madd52hi_epu64( __m256i a, __m256i b, __m256i c);
VPMADD52HUQ __m256i _mm256_madd52hi_epu64 (__m256i __X, __m256i __Y, __m256i __Z);
VPMADD52HUQ __m256i _mm256_mask_madd52hi_epu64(__m256i s, __mmask8 k, __m256i a, __m256i b, __m256i c);
VPMADD52HUQ __m256i _mm256_maskz_madd52hi_epu64( __mmask8 k, __m256i a, __m256i b, __m256i c);
VPMADD52HUQ __m512i _mm512_madd52hi_epu64( __m512i a, __m512i b, __m512i c);
VPMADD52HUQ __m512i _mm512_mask_madd52hi_epu64(__m512i s, __mmask8 k, __m512i a, __m512i b, __m512i c);
VPMADD52HUQ __m512i _mm512_maskz_madd52hi_epu64( __mmask8 k, __m512i a, __m512i b, __m512i c);

Banderas afectadas

None.

SIMD coma flotante Excepciones

None.

Otras excepciones

Instrucciones codificadas por VEX, ver Tabla 2-21, "Tipo 4 Condiciones de Excepción". Instrucciones codificadas por EVEX, ver Tabla 2-51, "Tipo E4 Condiciones de Excepción de Clase".

Fuentes