HADDPD
Empaquetado coma flotante de precisión doble Horizontal Añadir
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 7C /r | HADDPD xmm1, xmm2/m128 | RM | Valido | Valido | Horizontal añadir valores en coma flotante de precisión doble empaquetados de xmm2/m128 a xmm1. |
VEX.128.66.0F.WIG 7C /r | VHADDPD xmm1,xmm2, xmm3/m128 | RVM | Valido | Valido | Horizontal add valores en coma flotante de precisión doble empaquetados de xmm2 y xmm3/mem. |
VEX.256.66.0F.WIG 7C /r | VHADDPD ymm1, ymm2, ymm3/m256 | RVM | Valido | Valido | Horizontal add valores en coma flotante de precisión doble empaquetados de ymm2 y ymm3/mem. |
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.
RM
modrm.reglectura y escriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
RVM
modrm.regescriturabyte 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
Coste medido
Cargando las mediciones de arch-data...
Descripción
Agrega los valores en coma flotante de precisión doble en las cuádwords altas y bajas del operando de destino y almacena el resultado en el bajo quadword del operando de destino.
Agrega los valores en coma flotante de precisión doble en las cuádwords altas y bajas del operando de origen y almacena el resultado en el cuádpo alto del operando de destino.
En modo de 64 bits, el uso del prefijo REX.R permite esta instrucción para acceder a registros adicionales (XMM8-XMM15).
See Figure 3-12 for HADDPD; see Figure 3-13 for VHADDPD.
HADDPD xmm1, xmm2/m128
[127:64] [63:0] xmm2/m128
[127:64] [63:0]xmm1
xmm2/m128[63:0] + xmm1[63:0] + xmm1[127:64] Result:
xmm2/m128[127:64] [63:0] xmm1[127:64]
OM15993
Figura 3-12. HADDPD--Packed coma flotante de precisión doble Horizontal Add
SRC1 X3 X2 X1 X0
Y2 Y1 Y0SRC2 Y3 X2 + X3 Y0 + Y1 X0 + X1
DEST Y2 + Y3
Figura 3-13. Operación VHADDPD
128-bit Legacy SSE versión: La segunda fuente puede ser un registro XMM o una ubicación de memoria de 128 bits. El destino no es distinto del registro XMM de primera fuente y los bits superiores (MAXVL-1:128) del destino de registro YMM correspondiente no son modificados.
VEX.128 versión codificada: el primer operando de origen es un registro XMM o 128-bit ubicación de memoria. El operando de destino es un registro XMM. Los bits superiores (MAXVL-1:128) del destino de registro YMM correspondiente se ponen a cero.
VEX.256 versión codificada: El primer operando de origen es un registro YMM. El segundo operando de origen puede ser un registro YMM o una ubicación de memoria de 256 bits. El operando de destino es un registro YMM.
Operación
HADDPD (128-bit Legacy SSE Version)
DEST[63:0] := SRC1[127:64] + SRC1[63:0]
DEST[127:64] := SRC2[127:64] + SRC2[63:0]
DEST[MAXVL-1:128] (Unmodified)
VHADDPD (VEX.128 Encoded Version)
DEST[63:0] := SRC1[127:64] + SRC1[63:0]
DEST[127:64] := SRC2[127:64] + SRC2[63:0]
DEST[MAXVL-1:128] := 0
VHADDPD (VEX.256 Encoded Version)
DEST[63:0] := SRC1[127:64] + SRC1[63:0]
DEST[127:64] := SRC2[127:64] + SRC2[63:0]
DEST[191:128] := SRC1[255:192] + SRC1[191:128]
DEST[255:192] := SRC2[255:192] + SRC2[191:128]Intel C/C++ compilador intrínseco
VHADDPD __m256d _mm256_hadd_pd (__m256d a, __m256d b);
HADDPD __m128d _mm_hadd_pd (__m128d a, __m128d b);
Exceptions When the source operand is a memory operand, the operand must be aligned on a 16-byte boundary or a general- protection exception (#GP) will be generated.;Excepciones numéricas
Overflow, Underflow, Invalid, Precision, Denormal.
Otras excepciones
Ver Tabla 2-19, "Tipo 2 Condiciones de Excepción de Clase".