VFMSUB132SH, VFMSUB213SH, VFMSUB231SH, VFNMSUB132SH, VFNMSUB213SH, VFNMSUB231SH
Fused Multiply-Subtract of escalar FP16 Values
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.LLIG.66.MAP6.W0 9B /r | VFMSUB132SH xmm1{k1}{z}, xmm2, xmm3/m16 {er} | A | Valido | Valido | Valores multiply FP16 de xmm1 y OR AVX10.1 xmm3/m16, subtract xmm2, y almacenar el resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.LLIG.66.MAP6.W0 AB /r | VFMSUB213SH xmm1{k1}{z}, xmm2, xmm3/m16 {er} | A | Valido | Valido | Valores multiply FP16 de xmm1 y xmm2, OR AVX10.1 subtract xmm3/m16, y almacenar el resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.LLIG.66.MAP6.W0 BB /r | VFMSUB231SH xmm1{k1}{z}, xmm2, xmm3/m16 {er} | A | Valido | Valido | Valores multiply FP16 de xmm2 y OR AVX10.1 xmm3/m16, subtract xmm1, y almacenar el resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.LLIG.66.MAP6.W0 9F /r | VFNMSUB132SH xmm1{k1}{z}, xmm2, xmm3/m16 {er} | A | Valido | Valido | Valores multiply FP16 de xmm1 y OR AVX10.1 xmm3/m16, y negar el valor. Retraer xmm2 de este valor, y almacenar el resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.LLIG.66.MAP6.W0 AF /r | VFNMSUB213SH xmm1{k1}{z}, xmm2, xmm3/m16 {er} | A | Valido | Valido | Valores multiply FP16 de xmm1 y xmm2, y OR AVX10.1 niegan el valor. Retraer xmm3/m16 de este valor, y almacenar el resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.LLIG.66.MAP6.W0 BF /r | VFNMSUB231SH xmm1{k1}{z}, xmm2, xmm3/m16 {er} | A | Valido | Valido | Valores multiply FP16 de xmm2 y OR AVX10.1 xmm3/m16, y negar el valor. Retraer xmm1 de este valor, y almacenar el resultado en xmm1 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
Tupla: Scalar
Coste medido
Cargando las mediciones de arch-data...
Descripción
Esta instrucción realiza un escalar multiplica-subtract o negada computation multi-subtract en los valores bajos FP16 utilizando tres operandos de origen y escribe el resultado en el operando de destino. El operando de destino es también el primer operando de origen. Las formas "N" (negadas) de esta instrucción restan el operando restante del producto intermedio de precisión infinita negada. La notación "132", "213" y "231" indican el uso de los operandos en +/-A * B - C, donde cada dígito corresponde al número el operando, siendo el destino operando 1; véase Tabla 5-9.
Se conservan bits 127:16 del operando de destino. Bits MAXVL-1:128 del operando de destino se ponen a cero. El elemento FP16 bajo del destino se actualiza según la máscara de escritura.
Notation Table 5-9. VF[,N]MSUB[132,213,231]SH Notation for Operands
132 Operands231
213 dest = +/- dest*src3-src2dest = +/- src2src3-dest dest = +/- src2dest-src3
Operación
VF[,N]MSUB132SH DEST, SRC2, SRC3 (EVEX encoded versions)
IF EVEX.b = 1 and SRC3 is a register:
SET_RM(EVEX.RC)
ELSE
SET_RM(MXCSR.RC)
IF k1[0] OR *no writemask*:
IF *negative form*:
DEST.fp16[0] := RoundFPControl(-DEST.fp16[0]*SRC3.fp16[0] - SRC2.fp16[0])
ELSE:
DEST.fp16[0] := RoundFPControl(DEST.fp16[0]*SRC3.fp16[0] - SRC2.fp16[0])
ELSE IF *zeroing*:
DEST.fp16[0] := 0
// else DEST.fp16[0] remains unchanged
//DEST[127:16] remains unchanged
DEST[MAXVL-1:128] := 0
VF[,N]MSUB213SH DEST, SRC2, SRC3 (EVEX encoded versions)
IF EVEX.b = 1 and SRC3 is a register:
SET_RM(EVEX.RC)
ELSE
SET_RM(MXCSR.RC)
IF k1[0] OR *no writemask*:
IF *negative form:
DEST.fp16[0] := RoundFPControl(-SRC2.fp16[0]*DEST.fp16[0] - SRC3.fp16[0])
ELSE:
DEST.fp16[0] := RoundFPControl(SRC2.fp16[0]*DEST.fp16[0] - SRC3.fp16[0])
ELSE IF *zeroing*:
DEST.fp16[0] := 0
// else DEST.fp16[0] remains unchanged
//DEST[127:16] remains unchanged
DEST[MAXVL-1:128] := 0
VF[,N]MSUB231SH DEST, SRC2, SRC3 (EVEX encoded versions)
IF EVEX.b = 1 and SRC3 is a register:
SET_RM(EVEX.RC)
ELSE
SET_RM(MXCSR.RC)
IF k1[0] OR *no writemask*:
IF *negative form*:
DEST.fp16[0] := RoundFPControl(-SRC2.fp16[0]*SRC3.fp16[0] - DEST.fp16[0])
ELSE:
DEST.fp16[0] := RoundFPControl(SRC2.fp16[0]*SRC3.fp16[0] - DEST.fp16[0])
ELSE IF *zeroing*:
DEST.fp16[0] := 0
// else DEST.fp16[0] remains unchanged
//DEST[127:16] remains unchanged
DEST[MAXVL-1:128] := 0Intel C/C++ compilador intrínseco
VFMSUB132SH, VFMSUB213SH, and VFMSUB231SH: __m128h _mm_fmsub_round_sh (__m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask_fmsub_round_sh (__m128h a, __mmask8 k, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask3_fmsub_round_sh (__m128h a, __m128h b, __m128h c, __mmask8 k, const int rounding);
__m128h _mm_maskz_fmsub_round_sh (__mmask8 k, __m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_fmsub_sh (__m128h a, __m128h b, __m128h c);
__m128h _mm_mask_fmsub_sh (__m128h a, __mmask8 k, __m128h b, __m128h c);
__m128h _mm_mask3_fmsub_sh (__m128h a, __m128h b, __m128h c, __mmask8 k);
__m128h _mm_maskz_fmsub_sh (__mmask8 k, __m128h a, __m128h b, __m128h c);
VFNMSUB132SH, VFNMSUB213SH, and VFNMSUB231SH: __m128h _mm_fnmsub_round_sh (__m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask_fnmsub_round_sh (__m128h a, __mmask8 k, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask3_fnmsub_round_sh (__m128h a, __m128h b, __m128h c, __mmask8 k, const int rounding);
__m128h _mm_maskz_fnmsub_round_sh (__mmask8 k, __m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_fnmsub_sh (__m128h a, __m128h b, __m128h c);
__m128h _mm_mask_fnmsub_sh (__m128h a, __mmask8 k, __m128h b, __m128h c);
__m128h _mm_mask3_fnmsub_sh (__m128h a, __m128h b, __m128h c, __mmask8 k);
__m128h _mm_maskz_fnmsub_sh (__mmask8 k, __m128h a, __m128h b, __m128h c);SIMD coma flotante Excepciones
Invalid, Underflow, Overflow, Precision, Denormal
Otras excepciones
Instrucciones codificadas por EVEX, ver Tabla 2-49, "Tipo E3 Clase Condiciones de Excepción."