VPMADD52HUQ
Multiply Packed de Unsigned 52-Bit enteros sin signo y Add High 52-Bit
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
VEX.128.66.0F38.W1 B5 /r | VPMADD52HUQ xmm1, xmm2, xmm3/m128 | A | Valido | Valido | Multiply 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 /r | VPMADD52HUQ ymm1, ymm2, ymm3/m256 | A | Valido | Valido | Multiply 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 /r | VPMADD52HUQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst | B | Valido | Valido | Multiply 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 /r | VPMADD52HUQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | B | Valido | Valido | Multiply 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 /r | VPMADD52HUQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst | B | Valido | Valido | Multiply 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
modrm.reglectura y escriturabyte ModRM, campo reg (bits 5-3)vex.vvvvlecturaprefijo VEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
B
modrm.reglectura y escriturabyte ModRM, campo reg (bits 5-3)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte 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] := 0Intel 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".