VFMSUB132PD, VFMSUB213PD, VFMSUB231PD
Multiply-Subtract of Packed Double
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
VEX.128.66.0F38.W1 9A /r | VFMSUB132PD xmm1, xmm2, xmm3/m128 | A | Valido | Valido | Multiply valores en coma flotante de precisión doble empaquetados de xmm1 y xmm3/mem, restar xmm2 y poner resultado en xmm1. |
VEX.128.66.0F38.W1 AA /r | VFMSUB213PD xmm1, xmm2, xmm3/m128 | A | Valido | Valido | Multiply valores en coma flotante de precisión doble empaquetados de xmm1 y xmm2, restar xmm3/mem y poner resultado en xmm1. |
VEX.128.66.0F38.W1 BA /r | VFMSUB231PD xmm1, xmm2, xmm3/m128 | A | Valido | Valido | Multiply valores en coma flotante de precisión doble empaquetados de xmm2 y xmm3/mem, restar xmm1 y poner resultado en xmm1. |
VEX.256.66.0F38.W1 9A /r | VFMSUB132PD ymm1, ymm2, ymm3/m256 | A | Valido | Valido | Multiply valores en coma flotante de precisión doble empaquetados de ymm1 y ymm3/mem, restar ymm2 y poner resultado en ymm1. |
VEX.256.66.0F38.W1 AA /r | VFMSUB213PD ymm1, ymm2, ymm3/m256 | A | Valido | Valido | Multiply valores en coma flotante de precisión doble empaquetados de ymm1 y ymm2, restar ymm3/mem y poner resultado en ymm1. |
VEX.256.66.0F38.W1 BA /r | VFMSUB231PD ymm1, ymm2, ymm3/m256 | A | Valido | Valido | Multiply valores en coma flotante de precisión doble empaquetados de ymm2 y ymm3/mem, restar ymm1 y poner resultado en ymm1.S |
EVEX.128.66.0F38.W1 9A /r | VFMSUB132PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst | B | Valido | Valido | Multiply packed coma flotante de precisión doble AVX512F) Los valores OR de xmm1 y xmm3/m128/m64bcst, AVX10.1 subtract xmm2 y poner resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.128.66.0F38.W1 AA /r | VFMSUB213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst | B | Valido | Valido | Multiply packed coma flotante de precisión doble AVX512F) Los valores OR de xmm1 y xmm2, subtract AVX10.1 xmm3/m128/m64bcst y poner resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.128.66.0F38.W1 BA /r | VFMSUB231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst | B | Valido | Valido | Multiply packed coma flotante de precisión doble AVX512F) Los valores OR de xmm2 y xmm3/m128/m64bcst, AVX10.1 subtract xmm1 y poner resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.256.66.0F38.W1 9A /r | VFMSUB132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | B | Valido | Valido | Multiply packed coma flotante de precisión doble AVX512F) Los valores OR de ymm1 y ymm3/m256/m64bcst, AVX10.1 subtract ymm2 y poner resultado en ymm1 sujeto a máscara de escritura k1. |
EVEX.256.66.0F38.W1 AA /r | VFMSUB213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | B | Valido | Valido | Multiply packed coma flotante de precisión doble AVX512F) Los valores OR de ymm1 y ymm2, subtract AVX10.1 ymm3/m256/m64bcst y poner resultado en ymm1 sujeto a máscara de escritura k1. |
EVEX.256.66.0F38.W1 BA /r | VFMSUB231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst Opcode/ Instruction | B | Valido | Valido | Multiply packed coma flotante de precisión doble AVX512F) Los valores OR de ymm2 y ymm3/m256/m64bcst, AVX10.1 subtract ymm1 y poner resultado en ymm1 sujeto a máscara de escritura k1. Op/ 64/3 2 CPUID Modo de Fea Descripción |
EVEX.512.66.0F38.W1 9A /r | VFMSUB132PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er} | b v | Valido | Multiply packed coma flotante de precisión doble OR AVX10. 1 valores de zmm1 y zmm3/m512/m64bcst, subtract zmm2 y poner resultado en zmm1 sujeto a máscara de escritura k1. | |
EVEX.512.66.0F38.W1 AA /r | VFMSUB213PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er} | b v | Valido | Multiply packed coma flotante de precisión doble OR AVX10. 1 valores de zmm1 y zmm2, subtract zmm3/m512/m64bcst y poner resultado en zmm1 sujeto a máscara de escritura k1. | |
EVEX.512.66.0F38.W1 BA /r | VFMSUB231PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er} | b v | Valido | Multiply packed coma flotante de precisión doble OR AVX10. 1 valores de zmm2 y zmm3/m512/m64bcst, subtract zmm1 y poner resultado en zmm1 sujeto a 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
Realiza un conjunto de computación de SIMD multi-subtract en valores en coma flotante de precisión doble empaquetados usando tres operandos de origen y escribe los resultados multi-subtract en el operando de destino. El operando de destino es también el primer operando de origen. El segundo operando debe ser un registro SIMD. El tercer operando de origen puede ser un registro SIMD o una ubicación de memoria.
VFMSUB132PD: Multiplica los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados del primer operando de origen a los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados en el tercer operando de origen. Desde el resultado intermedio de precisión infinita, resta los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados en el segundo operando de origen, realiza redondeo y almacena los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados al operando de destino (primer operando de origen).
VFMSUB213PD: Multiplica los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados del segundo operando de origen a los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados en el primer operando de origen. Desde el resultado intermedio de precisión infinita, resta los dos, cuatro o ocho valores de doble precisión en el tercer operando de origen, realiza redondeo y almacena los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados resultantes al operando de destino (primer operando de origen).
VFMSUB231PD: Multiplica los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados de la segunda fuente a los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados en el tercer operando de origen. Desde el resultado intermedio de precisión infinita, resta los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados en el primer operando de origen, realiza redondeo y almacena los dos, cuatro o ocho valores en coma flotante de precisión doble empaquetados al operando de destino (primer operando de origen).
EVEX versiones codificadas: El operando de destino (también primer operando de origen) y el segundo operando de origen son ZMM/YMM/XMM registro. El tercer operando de origen es un ZMM/YMM/XMM registrado, 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 está actualizado condicionalmente con máscara de escritura k1.
VEX.256 versión codificada: El operando de destino (también primer operando de origen) es un registro YMM y codificado en reg field. El segundo operando de origen es un registro YMM y codificado en VEX.vvvv. El tercer operando de origen es un registro YMM o una ubicación de memoria de 256 bits y codificado en rm field.
VEX.128 versión codificada: El operando de destino (también primer operando de origen) es un registro XMM y codificado en reg field. El segundo operando de origen es un registro XMM y codificado en VEX.vvvv. El tercer operando de origen es un registro XMM o una ubicación de memoria de 128 bits y codificado en rm field. Los 128 bits superiores del destino YMM registran se ponen a cero.
Operación
In the operations below, "*" and "-" symbols represent multiplication and subtraction with infinite precision inputs and outputs (no
rounding).
VFMSUB132PD DEST, SRC2, SRC3 (VEX Encoded Versions)
IF (VEX.128) THEN
MAXNUM := 2
ELSEIF (VEX.256)
MAXNUM := 4
FI
For i = 0 to MAXNUM-1 {
n := 64*i;
DEST[n+63:n] := RoundFPControl_MXCSR(DEST[n+63:n]*SRC3[n+63:n] - SRC2[n+63:n])
}
IF (VEX.128) THEN
DEST[MAXVL-1:128] := 0
ELSEIF (VEX.256)
DEST[MAXVL-1:256] := 0
FI
VFMSUB213PD DEST, SRC2, SRC3 (VEX Encoded Versions)
IF (VEX.128) THEN
MAXNUM := 2
ELSEIF (VEX.256)
MAXNUM := 4
FI
For i = 0 to MAXNUM-1 {
n := 64*i;
DEST[n+63:n] := RoundFPControl_MXCSR(SRC2[n+63:n]*DEST[n+63:n] - SRC3[n+63:n])
}
IF (VEX.128) THEN
DEST[MAXVL-1:128] := 0
ELSEIF (VEX.256)
DEST[MAXVL-1:256] := 0
FI
VFMSUB231PD DEST, SRC2, SRC3 (VEX Encoded Versions)
IF (VEX.128) THEN
MAXNUM := 2
ELSEIF (VEX.256)
MAXNUM := 4
FI
For i = 0 to MAXNUM-1 {
n := 64*i;
DEST[n+63:n] := RoundFPControl_MXCSR(SRC2[n+63:n]*SRC3[n+63:n] - DEST[n+63:n])
}
IF (VEX.128) THEN
DEST[MAXVL-1:128] := 0
ELSEIF (VEX.256)
DEST[MAXVL-1:256] := 0
FI
VFMSUB132PD DEST, SRC2, SRC3 (EVEX Encoded Versions, When SRC3 Operand is a Register)
(KL, VL) = (2, 128), (4, 256), (8, 512)
IF (VL = 512) AND (EVEX.b = 1)
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
FOR j := 0 TO KL-1
i := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+63:i] :=
RoundFPControl(DEST[i+63:i]*SRC3[i+63:i] - SRC2[i+63:i])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VFMSUB132PD DEST, SRC2, SRC3 (EVEX Encoded Versions, When SRC3 Operand is a Memory Source)
(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 (EVEX.b = 1)
THEN
DEST[i+63:i] :=
RoundFPControl_MXCSR(DEST[i+63:i]*SRC3[63:0] - SRC2[i+63:i])
ELSE
DEST[i+63:i] :=
RoundFPControl_MXCSR(DEST[i+63:i]*SRC3[i+63:i] - SRC2[i+63:i])
FI;
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VFMSUB213PD DEST, SRC2, SRC3 (EVEX Encoded Versions, When SRC3 Operand is a Register)
(KL, VL) = (2, 128), (4, 256), (8, 512)
IF (VL = 512) AND (EVEX.b = 1)
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
FOR j := 0 TO KL-1
i := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+63:i] :=
RoundFPControl(SRC2[i+63:i]*DEST[i+63:i] - SRC3[i+63:i])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VFMSUB213PD DEST, SRC2, SRC3 (EVEX Encoded Versions, When SRC3 Operand is a Memory Source)
(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 (EVEX.b = 1)
THEN
DEST[i+63:i] :=
RoundFPControl_MXCSR(SRC2[i+63:i]*DEST[i+63:i] - SRC3[63:0])
+31:i])
ELSE
DEST[i+63:i] :=
RoundFPControl_MXCSR(SRC2[i+63:i]*DEST[i+63:i] - SRC3[i+63:i])
FI;
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VFMSUB231PD DEST, SRC2, SRC3 (EVEX Encoded Versions, When SRC3 Operand is a Register)
(KL, VL) = (2, 128), (4, 256), (8, 512)
IF (VL = 512) AND (EVEX.b = 1)
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
FOR j := 0 TO KL-1
i := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+63:i] :=
RoundFPControl(SRC2[i+63:i]*SRC3[i+63:i] - DEST[i+63:i])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VFMSUB231PD DEST, SRC2, SRC3 (EVEX Encoded Versions, When SRC3 Operand is a Memory Source)
(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 (EVEX.b = 1)
THEN
DEST[i+63:i] :=
RoundFPControl_MXCSR(SRC2[i+63:i]*SRC3[63:0] - DEST[i+63:i])
ELSE
DEST[i+63:i] :=
RoundFPControl_MXCSR(SRC2[i+63:i]*SRC3[i+63:i] - DEST[i+63:i])
FI;
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0Intel C/C++ compilador intrínseco
VFMSUBxxxPD __m512d _mm512_fmsub_pd(__m512d a, __m512d b, __m512d c);
VFMSUBxxxPD __m512d _mm512_fmsub_round_pd(__m512d a, __m512d b, __m512d c, int r);
VFMSUBxxxPD __m512d _mm512_mask_fmsub_pd(__m512d a, __mmask8 k, __m512d b, __m512d c);
VFMSUBxxxPD __m512d _mm512_maskz_fmsub_pd(__mmask8 k, __m512d a, __m512d b, __m512d c);
VFMSUBxxxPD __m512d _mm512_mask3_fmsub_pd(__m512d a, __m512d b, __m512d c, __mmask8 k);
VFMSUBxxxPD __m512d _mm512_mask_fmsub_round_pd(__m512d a, __mmask8 k, __m512d b, __m512d c, int r);
VFMSUBxxxPD __m512d _mm512_maskz_fmsub_round_pd(__mmask8 k, __m512d a, __m512d b, __m512d c, int r);
VFMSUBxxxPD __m512d _mm512_mask3_fmsub_round_pd(__m512d a, __m512d b, __m512d c, __mmask8 k, int r);
VFMSUBxxxPD __m256d _mm256_mask_fmsub_pd(__m256d a, __mmask8 k, __m256d b, __m256d c);
VFMSUBxxxPD __m256d _mm256_maskz_fmsub_pd(__mmask8 k, __m256d a, __m256d b, __m256d c);
VFMSUBxxxPD __m256d _mm256_mask3_fmsub_pd(__m256d a, __m256d b, __m256d c, __mmask8 k);
VFMSUBxxxPD __m128d _mm_mask_fmsub_pd(__m128d a, __mmask8 k, __m128d b, __m128d c);
VFMSUBxxxPD __m128d _mm_maskz_fmsub_pd(__mmask8 k, __m128d a, __m128d b, __m128d c);
VFMSUBxxxPD __m128d _mm_mask3_fmsub_pd(__m128d a, __m128d b, __m128d c, __mmask8 k);
VFMSUBxxxPD __m128d _mm_fmsub_pd (__m128d a, __m128d b, __m128d c);
VFMSUBxxxPD __m256d _mm256_fmsub_pd (__m256d a, __m256d b, __m256d c);SIMD coma flotante Excepciones
Overflow, Underflow, Invalid, Precision, Denormal.
Otras excepciones
Instrucciones codificadas por VEX, ver Tabla 2-19, "Tipo 2 Condiciones de Excepción".
Instrucciones codificadas por EVEX, ver Tabla 2-48, "Tipo E2 Clase Condiciones de Excepción."