VFMADD132SH, VFMADD213SH, VFMADD231SH, VFNMADD132SH, VFNMADD213SH, VFNMADD231SH

Fused Multiply-Add of escalar FP16 Values

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.LLIG.66.MAP6.W0 99 /rVFMADD132SH xmm1{k1}{z}, xmm2, xmm3/m16 {er}AValidoValidoValores multiply FP16 de xmm1 y OR AVX10.1 xmm3/m16, añadir a xmm2 y almacenar el resultado en xmm1.
EVEX.LLIG.66.MAP6.W0 A9 /rVFMADD213SH xmm1{k1}{z}, xmm2, xmm3/m16 {er}AValidoValidoValores multiply FP16 de xmm1 y xmm2, añadir OR AVX10.1 a xmm3/m16, y almacenar el resultado en xmm1.
EVEX.LLIG.66.MAP6.W0 B9 /rVFMADD231SH xmm1{k1}{z}, xmm2, xmm3/m16 {er}AValidoValidoValores multiply FP16 de xmm2 y OR AVX10.1 xmm3/m16, añadir a xmm1 y almacenar el resultado en xmm1.
EVEX.LLIG.66.MAP6.W0 9D /rVFNMADD132SH xmm1{k1}{z}, xmm2, xmm3/m16 {er}AValidoValidoValores multiply FP16 de xmm1 y OR AVX10.1 xmm3/m16, y negar el valor. Añadir este valor a xmm2, y almacenar el resultado en xmm1.
EVEX.LLIG.66.MAP6.W0 AD /rVFNMADD213SH xmm1{k1}{z}, xmm2, xmm3/m16 {er}AValidoValidoValores multiply FP16 de xmm1 y xmm2, y OR AVX10.1 niegan el valor. Añadir este valor a xmm3/m16, y almacenar el resultado en xmm1.
EVEX.LLIG.66.MAP6.W0 BD /rVFNMADD231SH xmm1{k1}{z}, xmm2, xmm3/m16 {er}AValidoValidoValores multiply FP16 de xmm2 y OR AVX10.1 xmm3/m16, y negar el valor. Añadir este valor a xmm1, y almacenar el 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

  1. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  2. vex.vvvv lecturaprefijo VEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte 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

Realiza una computación multiplicada de escalar o negada en los valores bajos de 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 añaden el producto intermedio de precisión infinita negada al correspondiente operando restante. 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-6.

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-6. VF[,N]MADD[132,213,231]SH Notation for Operands
                132                                                                       Operands

231

                213                                                             dest = +/- dest*src3+src2

dest = +/- src2src3+dest dest = +/- src2dest+src3

Operación

VF[,N]MADD132SH 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]MADD213SH 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]MADD231SH 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] := 0

Intel C/C++ compilador intrínseco

VFMADD132SH, VFMADD213SH, and VFMADD231SH: __m128h _mm_fmadd_round_sh (__m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask_fmadd_round_sh (__m128h a, __mmask8 k, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask3_fmadd_round_sh (__m128h a, __m128h b, __m128h c, __mmask8 k, const int rounding);
__m128h _mm_maskz_fmadd_round_sh (__mmask8 k, __m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_fmadd_sh (__m128h a, __m128h b, __m128h c);
__m128h _mm_mask_fmadd_sh (__m128h a, __mmask8 k, __m128h b, __m128h c);
__m128h _mm_mask3_fmadd_sh (__m128h a, __m128h b, __m128h c, __mmask8 k);
__m128h _mm_maskz_fmadd_sh (__mmask8 k, __m128h a, __m128h b, __m128h c);
VFNMADD132SH, VFNMADD213SH, and VFNMADD231SH: __m128h _mm_fnmadd_round_sh (__m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask_fnmadd_round_sh (__m128h a, __mmask8 k, __m128h b, __m128h c, const int rounding);
__m128h _mm_mask3_fnmadd_round_sh (__m128h a, __m128h b, __m128h c, __mmask8 k, const int rounding);
__m128h _mm_maskz_fnmadd_round_sh (__mmask8 k, __m128h a, __m128h b, __m128h c, const int rounding);
__m128h _mm_fnmadd_sh (__m128h a, __m128h b, __m128h c);
__m128h _mm_mask_fnmadd_sh (__m128h a, __mmask8 k, __m128h b, __m128h c);
__m128h _mm_mask3_fnmadd_sh (__m128h a, __m128h b, __m128h c, __mmask8 k);
__m128h _mm_maskz_fnmadd_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."

Fuentes