VCVTNEPS2BF16

Convertir Datos únicos empaquetados en Datos BF16 empaquetados

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
VEX.128.F3.0F38.W0 72 /rVCVTNEPS2BF16 xmm1, xmm2/m128AValidoValidoConvertir los valores de coma flotante de precisión simple CONVERT empaquetados de xmm2/m128 a los valores de BF16 y almacenar en xmm1.
VEX.256.F3.0F38.W0 72 /rVCVTNEPS2BF16 xmm1, ymm2/m256AValidoValidoConvertir los valores de coma flotante de precisión simple CONVERT empaquetados de ymm2/m256 a los valores de BF16 y almacenar en xmm1.
EVEX.128.F3.0F38.W0 72 /rVCVTNEPS2BF16 xmm1{k1}{z}, xmm2/m128/m32bcstBValidoValidoConvertir datos únicos empaquetados de xmm2/m128 AND AVX512VL) en datos BF16 empaquetados en xmm1 con máscara de escritura OR AVX10.1 k1.
EVEX.256.F3.0F38.W0 72 /rVCVTNEPS2BF16 xmm1{k1}{z}, ymm2/m256/m32bcstBValidoValidoConvertir datos únicos empaquetados de ymm2/m256 AND AVX512VL) en datos BF16 empaquetados en xmm1 con máscara de escritura OR AVX10.1 k1.
EVEX.512.F3.0F38.W0 72 /rVCVTNEPS2BF16 ymm1{k1}{z}, zmm2/m512/m32bcstBValidoValidoConvertir datos únicos empaquetados de zmm2/m512 AND AVX512F) en datos BF16 empaquetados en ymm1 con máscara de escritura OR AVX10.1 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

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

B

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte 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 carga elementos FP32 empaquetados de un registro SIMD o memoria, convierte los elementos a BF16, y escribe el resultado al registro SIMD destino.

Los bits superiores del registro de destino más allá de los elementos BF16 desconvertidos se ponen a cero.

Esta instrucción utiliza el modo de redondeo "Round to nearby (even)". Los denormales de salida son siempre a cero y los denormales de entrada siempre se tratan como cero. MXCSR no es consultado ni actualizado.

Como muestra la tabla de codificación operando, el campo EVEX.vvvv no se utiliza para la codificación un operando. EVEX.vvvv está reservado y debe ser 0b1111 instrucciones de lo contrario #UD.

Operación

Define convert_fp32_to_bfloat16(x):
    IF x is zero or denormal:
         dest[15] := x[31] // sign preserving zero (denormal go to zero)
         dest[14:0] := 0
    ELSE IF x is infinity:
         dest[15:0] := x[31:16]
    ELSE IF x is NAN:
         dest[15:0] := x[31:16] // truncate and set MSB of the mantissa to force QNAN
         dest[6] := 1
    ELSE // normal number
         LSB := x[16]
         rounding_bias := 0x00007FFF + LSB
         temp[31:0] := x[31:0] + rounding_bias // integer add
         dest[15:0] := temp[31:16]
    RETURN dest


VCVTNEPS2BF16 dest, src (VEX encoded version)
VL = (128, 256)
KL = VL/16

FOR i := 0 to KL/2-1:
    t := src.fp32[i]
    dest.word[i] := convert_fp32_to_bfloat16(t)

DEST[MAXVL-1:VL/2] := 0

VCVTNEPS2BF16 dest, src (EVEX encoded version)
VL = (128, 256, 512)
KL = VL/16

origdest := dest
FOR i := 0 to KL/2-1:

    IF k1[ i ] or *no writemask*:
          IF src is memory and evex.b == 1:
               t := src.fp32[0]
          ELSE:
               t := src.fp32[ i ]

         dest.word[i] := convert_fp32_to_bfloat16(t)

    ELSE IF *zeroing*:
         dest.word[ i ] := 0

    ELSE: // Merge masking, dest element unchanged
         dest.word[ i ] := origdest.word[ i ]

DEST[MAXVL-1:VL/2] := 0

Intel C/C++ compilador intrínseco

VCVTNEPS2BF16 __m128bh _mm_cvtneps_avx_pbh (__m128 __A);
VCVTNEPS2BF16 __m128bh _mm256_cvtneps_avx_pbh (__m256 __A);
VCVTNEPS2BF16 __m128bh _mm_cvtneps_pbh (__m128 a);
VCVTNEPS2BF16 __m128bh _mm_cvtneps_pbh (__m128 __A);
VCVTNEPS2BF16 __m128bh _mm_mask_cvtneps_pbh (__m128bh src, __mmask8 k, __m128 a);
VCVTNEPS2BF16 __m128bh _mm_maskz_cvtneps_pbh (__mmask8 k, __m128 a);
VCVTNEPS2BF16 __m128bh _mm256_cvtneps_pbh (__m256 a);
VCVTNEPS2BF16 __m128bh _mm256_cvtneps_pbh (__m256 __A);
VCVTNEPS2BF16 __m128bh _mm256_mask_cvtneps_pbh (__m128bh src, __mmask8 k, __m256 a);
VCVTNEPS2BF16 __m128bh _mm256_maskz_cvtneps_pbh (__mmask8 k, __m256 a);
VCVTNEPS2BF16 __m256bh _mm512_cvtneps_pbh (__m512 a);
VCVTNEPS2BF16 __m256bh _mm512_mask_cvtneps_pbh (__m256bh src, __mmask16 k, __m512 a);
VCVTNEPS2BF16 __m256bh _mm512_maskz_cvtneps_pbh (__mmask16 k, __m512 a);

SIMD coma flotante Excepciones

None.

Otras excepciones

Instrucciones codificadas por VEX, ver Tabla 2-21, "Tipo 4 Condiciones de Excepción". Instrucciones codificadas por EVEX, ver Tabla 2-51, "Tipo E4 Condiciones de Excepción de Clase".

Fuentes