VFNMSUB132SS, VFNMSUB213SS, VFNMSUB231SS
Fused Negative Multiply-Subtract of
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
VEX.LIG.66.0F38.W0 9F /r | VFNMSUB132SS xmm1, xmm2, xmm3/m32 | A | Valido | Valido | Multiply valores en coma flotante de precisión simple escalares de xmm1 y xmm3/m32, niega el resultado de la multiplicación y restar xmm2 y poner resultado en xmm1. |
VEX.LIG.66.0F38.W0 AF /r | VFNMSUB213SS xmm1, xmm2, xmm3/m32 | A | Valido | Valido | Multiply valores en coma flotante de precisión simple escalares de xmm1 y xmm2, niega el resultado de la multiplicación y restar xmm3/m32 y poner resultado en xmm1. |
VEX.LIG.66.0F38.W0 BF /r | VFNMSUB231SS xmm1, xmm2, xmm3/m32 | A | Valido | Valido | Multiply valores en coma flotante de precisión simple escalares de xmm2 y xmm3/m32, niega el resultado de la multiplicación y restar xmm1 y poner resultado en xmm1. |
EVEX.LLIG.66.0F38.W0 9F /r | VFNMSUB132SS xmm1 {k1}{z}, xmm2, xmm3/m32{er} | B | Valido | Valido | Multiply valores en coma flotante de precisión simple escalares de OR AVX10.1 xmm1 y xmm3/m32, niegan el resultado de la multiplicación y restan xmm2 y ponen resultado en xmm1. |
EVEX.LLIG.66.0F38.W0 AF /r | VFNMSUB213SS xmm1 {k1}{z}, xmm2, xmm3/m32{er} | B | Valido | Valido | Multiply valores en coma flotante de precisión simple escalares de OR AVX10.1 xmm1 y xmm2, niegan el resultado de la multiplicación y restan xmm3/m32 y ponen resultado en xmm1. |
EVEX.LLIG.66.0F38.W0 BF /r | VFNMSUB231SS xmm1 {k1}{z}, xmm2, xmm3/m32{er} | B | Valido | Valido | Multiply valores en coma flotante de precisión simple escalares de OR AVX10.1 xmm2 y xmm3/m32, niegan el resultado de la multiplicación y restan xmm1 y ponen resultado en xmm1. |
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: Tuple1 Scalar
Coste medido
Cargando las mediciones de arch-data...
Descripción
VFNMSUB132SS: Multiplica el valor en coma flotante de precisión simple bajo empaquetado desde el primer operando de origen hasta el valor en coma flotante de precisión simple bajo empaquetado en el tercer operando de origen. Desde el resultado intermedio de precisión infinita negada, el valor en coma flotante de precisión simple bajo en el segundo operando de origen, realiza redondeo y almacena el valor en coma flotante de precisión simple empacado resultante al operando de destino (primer operando de origen).
VFNMSUB213SS: Multiplica el valor en coma flotante de precisión simple bajo empaquetado del segundo operando de origen al valor en coma flotante de precisión simple bajo empaquetado en el primer operando de origen. Desde el resultado intermedio de precisión infinita negada, el valor en coma flotante de precisión simple bajo en el tercer operando de origen, realiza redondeo y almacena el valor en coma flotante de precisión simple empacado resultante al operando de destino (primer operando de origen).
VFNMSUB231SS: Multiplica el valor en coma flotante de precisión simple bajo empaquetado de la segunda fuente al valor en coma flotante de precisión simple bajo empaquetado en el tercer operando de origen. Desde el resultado intermedio de precisión infinita negada, el valor en coma flotante de precisión simple bajo en el primer operando de origen, realiza redondeo y almacena el valor en coma flotante de precisión simple empacado resultante al operando de destino (primer operando de origen).
VEX.128 y EVEX versión codificada: El operando de destino (también primer operando de origen) está codificado en reg field. El segundo operando de origen está codificado en VEX.vvvv/EVEX.vvvv. El tercer operando de origen está codificado en rm field. Los bits 127:32 del destino son invariables. Bits MAXVL-1:128 del registro de destino se ponen a cero.
EVEX versión codificada: El elemento de doble palabra bajo del destino se actualiza según la máscara de escritura.
Las herramientas de compilador pueden apoyar opcionalmente una mnemónica complementaria para cada instrucción mnemónica listada en la columna el código de operación/instrucción de la tabla sumaria. El comportamiento de la mnemónica complementaria en situaciones
los NAN se rigen por la definición de la instrucción mnemónica definida en la columna el código de operación/instrucción.
Operación
In the operations below, "*" and "-" symbols represent multiplication and subtraction with infinite precision inputs and outputs (no
rounding).
VFNMSUB132SS DEST, SRC2, SRC3 (EVEX encoded version)
IF (EVEX.b = 1) and SRC3 *is a register*
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
IF k1[0] or *no writemask*
THEN DEST[31:0] := RoundFPControl(-(DEST[31:0]*SRC3[31:0]) - SRC2[31:0])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[31:0] remains unchanged*
ELSE ; zeroing-masking
THEN DEST[31:0] := 0
FI;
FI;
DEST[127:32] := DEST[127:32]
DEST[MAXVL-1:128] := 0
VFNMSUB213SS DEST, SRC2, SRC3 (EVEX encoded version)
IF (EVEX.b = 1) and SRC3 *is a register*
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
IF k1[0] or *no writemask*
THEN DEST[31:0] := RoundFPControl(-(SRC2[31:0]*DEST[31:0]) - SRC3[31:0])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[31:0] remains unchanged*
ELSE ; zeroing-masking
THEN DEST[31:0] := 0
FI;
FI;
DEST[127:32] := DEST[127:32]
DEST[MAXVL-1:128] := 0
VFNMSUB231SS DEST, SRC2, SRC3 (EVEX encoded version)
IF (EVEX.b = 1) and SRC3 *is a register*
THEN
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(EVEX.RC);
ELSE
SET_ROUNDING_MODE_FOR_THIS_INSTRUCTION(MXCSR.RC);
FI;
IF k1[0] or *no writemask*
THEN DEST[31:0] := RoundFPControl(-(SRC2[31:0]*SRC3[63:0]) - DEST[31:0])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[31:0] remains unchanged*
ELSE ; zeroing-masking
THEN DEST[31:0] := 0
FI;
FI;
DEST[127:32] := DEST[127:32]
DEST[MAXVL-1:128] := 0
VFNMSUB132SS DEST, SRC2, SRC3 (VEX encoded version)
DEST[31:0] := RoundFPControl_MXCSR(- (DEST[31:0]*SRC3[31:0]) - SRC2[31:0])
DEST[127:32] := DEST[127:32]
DEST[MAXVL-1:128] := 0
VFNMSUB213SS DEST, SRC2, SRC3 (VEX encoded version)
DEST[31:0] := RoundFPControl_MXCSR(- (SRC2[31:0]*DEST[31:0]) - SRC3[31:0])
DEST[127:32] := DEST[127:32]
DEST[MAXVL-1:128] := 0
VFNMSUB231SS DEST, SRC2, SRC3 (VEX encoded version)
DEST[31:0] := RoundFPControl_MXCSR(- (SRC2[31:0]*SRC3[31:0]) - DEST[31:0])
DEST[127:32] := DEST[127:32]
DEST[MAXVL-1:128] := 0Intel C/C++ compilador intrínseco
VFNMSUBxxxSS __m128 _mm_fnmsub_round_ss(__m128 a, __m128 b, __m128 c, int r);
VFNMSUBxxxSS __m128 _mm_mask_fnmsub_ss(__m128 a, __mmask8 k, __m128 b, __m128 c);
VFNMSUBxxxSS __m128 _mm_maskz_fnmsub_ss(__mmask8 k, __m128 a, __m128 b, __m128 c);
VFNMSUBxxxSS __m128 _mm_mask3_fnmsub_ss(__m128 a, __m128 b, __m128 c, __mmask8 k);
VFNMSUBxxxSS __m128 _mm_mask_fnmsub_round_ss(__m128 a, __mmask8 k, __m128 b, __m128 c, int r);
VFNMSUBxxxSS __m128 _mm_maskz_fnmsub_round_ss(__mmask8 k, __m128 a, __m128 b, __m128 c, int r);
VFNMSUBxxxSS __m128 _mm_mask3_fnmsub_round_ss(__m128 a, __m128 b, __m128 c, __mmask8 k, int r);
VFNMSUBxxxSS __m128 _mm_fnmsub_ss (__m128 a, __m128 b, __m128 c);SIMD coma flotante Excepciones
Overflow, Underflow, Invalid, Precision, Denormal.
Otras excepciones
Instrucciones codificadas por VEX, ver Tabla 2-20, "Tipo 3 Condiciones de Excepción." Instrucciones codificadas por EVEX, ver Tabla 2-49, "Tipo E3 Condiciones de Excepción".