VFMSUB132PH, VFMSUB213PH, VFMSUB231PH, VFNMSUB132PH, VFNMSUB213PH, VFNMSUB231PH
Fused Multiply-Subtract of Packed FP16 Values
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.66.MAP6.W0 9A /r | VFMSUB132PH xmm1{k1}{z}, xmm2, xmm3/m128/m16bcst | A | Valido | Valido | Multiply packedFP16valores dexmm1yAND AVX512VL) xmm3/m128/m16bcst, subtractxmm2, y almacenar OAVX10.1el resultado enxmm1sujeto amáscara de escritura k1. |
EVEX.256.66.MAP6.W0 9A /r | VFMSUB132PH ymm1{k1}{z}, ymm2, ymm3/m256/m16bcst | A | Valido | Valido | Multiply packedFP16valores deymm1yAND AVX512VL) ymm3/m256/m16bcst, subtractymm2, y almacenar OAVX10.1el resultado enymm1sujeto amáscara de escritura k1. |
EVEX.512.66.MAP6.W0 9A /r | VFMSUB132PH zmm1{k1}{z}, zmm2, zmm3/m512/m16bcst {er} | A | Valido | Valido | Valores multiply packed FP16 de zmm1 y OR AVX10.1 zmm3/m512/m16bcst, subtract zmm2 y almacenar el resultado en zmm1 sujeto a máscara de escritura k1. |
EVEX.128.66.MAP6.W0 AA /r | VFMSUB213PH xmm1{k1}{z}, xmm2, xmm3/m128/m16bcst | A | Valido | Valido | Multiply packedFP16valores dexmm1yAND AVX512VL) xmm2, subtractxmm3/m128/m16bcst, y almacenar ORAVX10.1el resultado enxmm1sujeto amáscara de escritura k1. |
EVEX.256.66.MAP6.W0 AA /r | VFMSUB213PH ymm1{k1}{z}, ymm2, ymm3/m256/m16bcst | A | Valido | Valido | Multiply packedFP16valores deymm1yAND AVX512VL) ymm2, subtractymm3/m256/m16bcst, y almacenar ORAVX10.1el resultado enymm1sujeto amáscara de escritura k1. |
EVEX.512.66.MAP6.W0 AA /r | VFMSUB213PH zmm1{k1}{z}, zmm2, zmm3/m512/m16bcst {er} | A | Valido | Valido | Multiply packedFP16valores dezmm1y OAVX10.1 zmm2, subtractzmm3/m512/m16bcst, y almacenar el resultado enzmm1sujeto amáscara de escritura k1. |
EVEX.128.66.MAP6.W0 BA /r | VFMSUB231PH xmm1{k1}{z}, xmm2, xmm3/m128/m16bcst | A | Valido | Valido | Multiply packedFP16valores dexmm2yAND AVX512VL) xmm3/m128/m16bcst, subtractxmm1, y almacenar OAVX10.1el resultado enxmm1sujeto amáscara de escritura k1. |
EVEX.256.66.MAP6.W0 BA /r | VFMSUB231PH ymm1{k1}{z}, ymm2, ymm3/m256/m16bcst | A | Valido | Valido | Multiply packedFP16valores deymm2yAND AVX512VL) ymm3/m256/m16bcst, subtractymm1, y almacenar OAVX10.1el resultado enymm1sujeto amáscara de escritura k1. |
EVEX.512.66.MAP6.W0 BA /r | VFMSUB231PH zmm1{k1}{z}, zmm2, zmm3/m512/m16bcst {er} | A | Valido | Valido | Valores multiply packed FP16 de zmm2 y OR AVX10.1 zmm3/m512/m16bcst, subtract zmm1 y almacenar el resultado en zmm1 sujeto a máscara de escritura k1. |
EVEX.128.66.MAP6.W0 9E /r | VFNMSUB132PH xmm1{k1}{z}, xmm2, xmm3/m128/m16bcst | A | Valido | Valido | Multiply packedFP16valores dexmm1yAND AVX512VL) xmm3/m128/m16bcst, y negar el valor. OAVX10.1Subtractxmm2de este valor, y almacenar el resultado enxmm1sujeto amáscara de escritura k1. |
EVEX.256.66.MAP6.W0 9E /r | VFNMSUB132PH ymm1{k1}{z}, ymm2, ymm3/m256/m16bcst | A | Valido | Valido | Multiply packedFP16valores deymm1yAND AVX512VL) ymm3/m256/m16bcst, y negar el valor. OAVX10.1Subtractymm2de este valor, y almacenar el resultado enymm1sujeto amáscara de escritura k1. |
EVEX.512.66.MAP6.W0 9E /r | VFNMSUB132PH zmm1{k1}{z}, zmm2, zmm3/m512/m16bcst {er} | A | Valido | Valido | Multiply packedFP16valores dezmm1y OAVX10.1 zmm3/m512/m16bcst, y negar el valor.zmm2de este valor, y almacenar el resultado enzmm1sujeto amáscara de escritura k1. |
EVEX.128.66.MAP6.W0 AE /r | VFNMSUB213PH xmm1{k1}{z}, xmm2, xmm3/m128/m16bcst | A | Valido | Valido | Valores multiply packed FP16 de xmm1 y AND AVX512VL) xmm2, y negar el valor. Subtract OR AVX10.1 xmm3/m128/m16bcst de este valor, y almacenar el resultado en xmm1 sujeto a máscara de escritura k1. |
EVEX.256.66.MAP6.W0 AE /r | VFNMSUB213PH ymm1{k1}{z}, ymm2, ymm3/m256/m16bcst Opcode/ Instruction | A | Valido | Valido | Multiply packedFP16valores deymm1yAND AVX512VL) ymm2, y negar el valor.AVX10.1 ymm3/m256/m16bcst de este valor, y almacenar el resultado enymm1sujeto amáscara de escritura k1. Op/ 64/3 2CPUIDFeature Des cription En Bit Supp Mode Flag ort |
EVEX.512.66.MAP6.W0 AE /r | VFNMSUB213PH zmm1{k1}{z}, zmm2, zmm3/m512/m16bcst {er} | a v | Valido | los valores de FP16 empaquetados de zmm1 y OR AVX10.1 zmm 2, y negar el valor. Subtract zmm el 3/m512/m16bcst de este valor, y el resultado de la tienda en zmm1 sujeto a escrituramask k1. | |
EVEX.128.66.MAP6.W0 BE /r | VFNMSUB231PH xmm1{k1}{z}, xmm2, xmm3/m128/m16bcst | a v | Valido | los valores de FP16 empaquetados de xmm2 y AND AVX512VL) xmm 3/m128/m16bcst, y negar el valor. OR AVX10.1 Sub re tracto xmm1 de este valor, y almacenar la ult en xmm1 sujeto a escrituramask k1. | |
EVEX.256.66.MAP6.W0 BE /r | VFNMSUB231PH ymm1{k1}{z}, ymm2, ymm3/m256/m16bcst | a v | Valido | los valores de FP16 empaquetados de ymm2 y AND AVX512VL) ymm 3/m256/m16bcst, y negar el valor. OR AVX10.1 Sub re tracto ymm1 de este valor, y almacenar la ult en ymm1 sujeto a escrituramask k1. | |
EVEX.512.66.MAP6.W0 BE /r | VFNMSUB231PH zmm1{k1}{z}, zmm2, zmm3/m512/m16bcst {er} | a v | Valido | los valores de FP16 empaquetados de zmm2 y OR AVX10.1 zmm 3/m512/m16bcst, y negar el valor. Sub res tracto zmm1 de este valor, y almacenar la ult 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
Tupla: Full
Coste medido
Cargando las mediciones de arch-data...
Descripción
Esta instrucción realiza un multiplica-subtract empaquetado o una computación de subtracto multiplicado negada en los valores de FP16 utilizando tres operandos de origen y escribe los resultados 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-8.
Los elementos de destino se actualizan según la máscara de escritura.
Notation Table 5-8. VF[,N]MSUB[132,213,231]PH Notation for Operands
132 Operands231
213 dest = +/- dest*src3-src2dest = +/- src2src3-dest dest = +/- src2dest-src3
Operación
VF[,N]MSUB132PH DEST, SRC2, SRC3 (EVEX encoded versions) when src3 operand is a register
VL = 128, 256 or 512
KL := VL/16
IF (VL = 512) AND (EVEX.b = 1):
SET_RM(EVEX.RC)
ELSE
SET_RM(MXCSR.RC)
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
IF *negative form*:
DEST.fp16[j] := RoundFPControl(-DEST.fp16[j]*SRC3.fp16[j] - SRC2.fp16[j])
ELSE:
DEST.fp16[j] := RoundFPControl(DEST.fp16[j]*SRC3.fp16[j] - SRC2.fp16[j])
ELSE IF *zeroing*:
DEST.fp16[j] := 0
// else dest.fp16[j] remains unchanged
DEST[MAXVL-1:VL] := 0
VF[,N]MSUB132PH DEST, SRC2, SRC3 (EVEX encoded versions) when src3 operand is a memory source
VL = 128, 256 or 512
KL := VL/16
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
IF EVEX.b = 1:
t3 := SRC3.fp16[0]
ELSE:
t3 := SRC3.fp16[j]
IF *negative form*:
DEST.fp16[j] := RoundFPControl(-DEST.fp16[j] * t3 - SRC2.fp16[j])
ELSE:
DEST.fp16[j] := RoundFPControl(DEST.fp16[j] * t3 - SRC2.fp16[j])
ELSE IF *zeroing*:
DEST.fp16[j] := 0
// else dest.fp16[j] remains unchanged
DEST[MAXVL-1:VL] := 0
VF[,N]MSUB213PH DEST, SRC2, SRC3 (EVEX encoded versions) when src3 operand is a register
VL = 128, 256 or 512
KL := VL/16
IF (VL = 512) AND (EVEX.b = 1):
SET_RM(EVEX.RC)
ELSE
SET_RM(MXCSR.RC)
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
IF *negative form*:
DEST.fp16[j] := RoundFPControl(-SRC2.fp16[j]*DEST.fp16[j] - SRC3.fp16[j])
ELSE
DEST.fp16[j] := RoundFPControl(SRC2.fp16[j]*DEST.fp16[j] - SRC3.fp16[j])
ELSE IF *zeroing*:
DEST.fp16[j] := 0
// else dest.fp16[j] remains unchanged
DEST[MAXVL-1:VL] := 0
VF[,N]MSUB213PH DEST, SRC2, SRC3 (EVEX encoded versions) when src3 operand is a memory source
VL = 128, 256 or 512
KL := VL/16
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
IF EVEX.b = 1:
t3 := SRC3.fp16[0]
ELSE:
t3 := SRC3.fp16[j]
IF *negative form*:
DEST.fp16[j] := RoundFPControl(-SRC2.fp16[j] * DEST.fp16[j] - t3 )
ELSE:
DEST.fp16[j] := RoundFPControl(SRC2.fp16[j] * DEST.fp16[j] - t3 )
ELSE IF *zeroing*:
DEST.fp16[j] := 0
// else dest.fp16[j] remains unchanged
DEST[MAXVL-1:VL] := 0
VF[,N]MSUB231PH DEST, SRC2, SRC3 (EVEX encoded versions) when src3 operand is a register
VL = 128, 256 or 512
KL := VL/16
IF (VL = 512) AND (EVEX.b = 1):
SET_RM(EVEX.RC)
ELSE
SET_RM(MXCSR.RC)
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
IF *negative form:
DEST.fp16[j] := RoundFPControl(-SRC2.fp16[j]*SRC3.fp16[j] - DEST.fp16[j])
ELSE:
DEST.fp16[j] := RoundFPControl(SRC2.fp16[j]*SRC3.fp16[j] - DEST.fp16[j])
ELSE IF *zeroing*:
DEST.fp16[j] := 0
// else dest.fp16[j] remains unchanged
DEST[MAXVL-1:VL] := 0
VF[,N]MSUB231PH DEST, SRC2, SRC3 (EVEX encoded versions) when src3 operand is a memory source
VL = 128, 256 or 512
KL := VL/16
FOR j := 0 TO KL-1:
IF k1[j] OR *no writemask*:
IF EVEX.b = 1:
t3 := SRC3.fp16[0]
ELSE:
t3 := SRC3.fp16[j]
IF *negative form*:
DEST.fp16[j] := RoundFPControl(-SRC2.fp16[j] * t3 - DEST.fp16[j] )
ELSE:
DEST.fp16[j] := RoundFPControl(SRC2.fp16[j] * t3 - DEST.fp16[j] )
ELSE IF *zeroing*:
DEST.fp16[j] := 0
// else dest.fp16[j] remains unchanged
DEST[MAXVL-1:VL] := 0Intel C/C++ compilador intrínseco
VFMSUB132PH, VFMSUB213PH, and VFMSUB231PH: __m128h _mm_fmsub_ph (__m128h a, __m128h b, __m128h c);
__m128h _mm_mask_fmsub_ph (__m128h a, __mmask8 k, __m128h b, __m128h c);
__m128h _mm_mask3_fmsub_ph (__m128h a, __m128h b, __m128h c, __mmask8 k);
__m128h _mm_maskz_fmsub_ph (__mmask8 k, __m128h a, __m128h b, __m128h c);
__m256h _mm256_fmsub_ph (__m256h a, __m256h b, __m256h c);
__m256h _mm256_mask_fmsub_ph (__m256h a, __mmask16 k, __m256h b, __m256h c);
__m256h _mm256_mask3_fmsub_ph (__m256h a, __m256h b, __m256h c, __mmask16 k);
__m256h _mm256_maskz_fmsub_ph (__mmask16 k, __m256h a, __m256h b, __m256h c);
__m512h _mm512_fmsub_ph (__m512h a, __m512h b, __m512h c);
__m512h _mm512_mask_fmsub_ph (__m512h a, __mmask32 k, __m512h b, __m512h c);
__m512h _mm512_mask3_fmsub_ph (__m512h a, __m512h b, __m512h c, __mmask32 k);
__m512h _mm512_maskz_fmsub_ph (__mmask32 k, __m512h a, __m512h b, __m512h c);
__m512h _mm512_fmsub_round_ph (__m512h a, __m512h b, __m512h c, const int rounding);
__m512h _mm512_mask_fmsub_round_ph (__m512h a, __mmask32 k, __m512h b, __m512h c, const int rounding);
__m512h _mm512_mask3_fmsub_round_ph (__m512h a, __m512h b, __m512h c, __mmask32 k, const int rounding);
__m512h _mm512_maskz_fmsub_round_ph (__mmask32 k, __m512h a, __m512h b, __m512h c, const int rounding);
VFNMSUB132PH, VFNMSUB213PH, and VFNMSUB231PH: __m128h _mm_fnmsub_ph (__m128h a, __m128h b, __m128h c);
__m128h _mm_mask_fnmsub_ph (__m128h a, __mmask8 k, __m128h b, __m128h c);
__m128h _mm_mask3_fnmsub_ph (__m128h a, __m128h b, __m128h c, __mmask8 k);
__m128h _mm_maskz_fnmsub_ph (__mmask8 k, __m128h a, __m128h b, __m128h c);
__m256h _mm256_fnmsub_ph (__m256h a, __m256h b, __m256h c);
__m256h _mm256_mask_fnmsub_ph (__m256h a, __mmask16 k, __m256h b, __m256h c);
__m256h _mm256_mask3_fnmsub_ph (__m256h a, __m256h b, __m256h c, __mmask16 k);
__m256h _mm256_maskz_fnmsub_ph (__mmask16 k, __m256h a, __m256h b, __m256h c);
__m512h _mm512_fnmsub_ph (__m512h a, __m512h b, __m512h c);
__m512h _mm512_mask_fnmsub_ph (__m512h a, __mmask32 k, __m512h b, __m512h c);
__m512h _mm512_mask3_fnmsub_ph (__m512h a, __m512h b, __m512h c, __mmask32 k);
__m512h _mm512_maskz_fnmsub_ph (__mmask32 k, __m512h a, __m512h b, __m512h c);
__m512h _mm512_fnmsub_round_ph (__m512h a, __m512h b, __m512h c, const int rounding);
__m512h _mm512_mask_fnmsub_round_ph (__m512h a, __mmask32 k, __m512h b, __m512h c, const int rounding);
__m512h _mm512_mask3_fnmsub_round_ph (__m512h a, __m512h b, __m512h c, __mmask32 k, const int rounding);
__m512h _mm512_maskz_fnmsub_round_ph (__mmask32 k, __m512h a, __m512h b, __m512h c, const int rounding);SIMD coma flotante Excepciones
Invalid, Underflow, Overflow, Precision, Denormal.
Otras excepciones
Instrucciones codificadas por EVEX, ver Tabla 2-48, "Tipo E2 Clase Condiciones de Excepción."