VBCSTNEBF162PS
Load BF16 Element and Convert to FP32 Element With Broadcast
stableVMJITAOTinstruction
Encodings
| Opcode | Instruction | Op/En | 64-bit | Compat/Legacy | Description |
|---|---|---|---|---|---|
VEX.128.F3.0F38.W0 B1 | !(11):rrr:bbb VBCSTNEBF162PS xmm1, m16 | A | Valid | Valid | Load one BF16 floating-point element from CONVERT m16, convert to FP32 and store result in xmm1. |
VEX.256.F3.0F38.W0 B1 | !(11):rrr:bbb VBCSTNEBF162PS ymm1, m16 | A | Valid | Valid | Load one BF16 floating-point element from CONVERT m16, convert to FP32 and store result in ymm1. |
Operand encoding
Each mode is a value of the Op/En column above. It says which field of the encoded instruction carries each operand, in the order they are written, and whether the instruction reads it, writes it or both.
A
modrm.regescrituraModRM byte, reg field (bits 5-3)modrm.rmlecturaModRM byte, r/m field (bits 2-0); with the SIB byte and the displacement when the mod field asks for them
Measured cost
Loading measurements from arch-data...
Description
This instruction loads one BF16 element from memory, converts it to FP32, and broadcasts it to a SIMD register.
This instruction does not generate floating-point exceptions and does not consult or update MXCSR.
Since any BF16 number can be represented in FP32, the conversion result is exact and no rounding is needed.
Operation
VBCSTNEBF162PS dest, src (VEX encoded version)
VL = (128, 256)
KL = VL/32
FOR i in range(0, KL):
tmp.dword[i].word[0] = src.word[0] // reads 16b from memory
FOR i in range(0, KL):
dest.dword[i] = make_fp32(TMP.dword[i].word[0])
DEST[MAXVL-1:VL] := 0Flags affected
None.
Intel C/C++ compiler intrinsics
VBCSTNEBF162PS __m128 _mm_bcstnebf16_ps (const __bf16* __A);
VBCSTNEBF162PS __m256 _mm256_bcstnebf16_ps (const __bf16* __A);SIMD Floating-Point Exceptions
None.
Other Exceptions
See Table 2-22, "Type 5 Class Exception Conditions."