VCVTNE2PS2BF16

Convertir dos datos únicos empaquetados en uno de los datos BF16 empaquetados

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.F2.0F38.W0 72 /rVCVTNE2PS2BF16 xmm1{k1}{z}, xmm2, xmm3/m128/m32bcstAValidoValidoConvertir datos individuales empaquetados de xmm2 y AND AVX512VL) xmm3/m128/m32bcst para empaquetar datos BF16 en OR AVX10.1 xmm1 con máscara de escritura k1.
EVEX.256.F2.0F38.W0 72 /rVCVTNE2PS2BF16 ymm1{k1}{z}, ymm2, ymm3/m256/m32bcstAValidoValidoConvertir datos individuales empaquetados de ymm2 y AND AVX512VL) ymm3/m256/m32bcst para empaquetar datos BF16 en OR AVX10.1 ymm1 con máscara de escritura k1.
EVEX.512.F2.0F38.W0 72 /rVCVTNE2PS2BF16 zmm1{k1}{z}, zmm2, zmm3/m512/m32bcstAValidoValidoConvertir datos individuales empaquetados de zmm2 y AND AVX512F) zmm3/m512/m32bcst para empaquetar datos BF16 en OR AVX10.1 zmm1 con 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

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. evex.vvvv lecturaprefijo EVEX, 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: Full

Coste medido

Cargando las mediciones de arch-data...

Descripción

Convierte dos registros SIMD de datos individuales empaquetados en un solo registro de datos BF16 empaquetados.

Esta instrucción no apoya la supresión de la falla de memoria.

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. No se generan excepciones coma flotante.

Operación

VCVTNE2PS2BF16 dest, src1, src2
VL = (128, 256, 512)
KL = VL/16

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

    IF k1[ i ] or *no writemask*:
          IF i < KL/2:
                IF src2 is memory and evex.b == 1:
                    t := src2.fp32[0]
                ELSE:
                    t := src2.fp32[ i ]
          ELSE:
               t := src1.fp32[ i-KL/2]

// See VCVTNEPS2BF16 for definition of convert helper function
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] := 0

Intel C/C++ compilador intrínseco

VCVTNE2PS2BF16 __m128bh _mm_cvtne2ps_pbh (__m128, __m128);
VCVTNE2PS2BF16 __m128bh _mm_mask_cvtne2ps_pbh (__m128bh, __mmask8, __m128, __m128);
VCVTNE2PS2BF16 __m128bh _mm_maskz_cvtne2ps_pbh (__mmask8, __m128, __m128);
VCVTNE2PS2BF16 __m256bh _mm256_cvtne2ps_pbh (__m256, __m256);
VCVTNE2PS2BF16 __m256bh _mm256_mask_cvtne2ps_pbh (__m256bh, __mmask16, __m256, __m256);
VCVTNE2PS2BF16 __m256bh _mm256_maskz_cvtne2ps_ pbh (__mmask16, __m256, __m256);
VCVTNE2PS2BF16 __m512bh _mm512_cvtne2ps_pbh (__m512, __m512);
VCVTNE2PS2BF16 __m512bh _mm512_mask_cvtne2ps_pbh (__m512bh, __mmask32, __m512, __m512);
VCVTNE2PS2BF16 __m512bh _mm512_maskz_cvtne2ps_pbh (__mmask32, __m512, __m512);

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".

Fuentes