24 #ifndef ARM_COMPUTE_BFLOAT16_H
25 #define ARM_COMPUTE_BFLOAT16_H
40 inline uint16_t float_to_bf16(
const float v)
42 const uint32_t *fromptr =
reinterpret_cast<const uint32_t *
>(&v);
43 #if defined(ARM_COMPUTE_ENABLE_BF16)
46 __asm __volatile(
"ldr s0, [%[fromptr]]\n"
48 "str h0, [%[toptr]]\n"
50 : [fromptr]
"r"(fromptr), [toptr]
"r"(&res)
53 uint16_t res = (*fromptr >> 16);
54 const uint16_t error = (*fromptr & 0x0000ffff);
55 uint16_t bf_l = res & 0x0001;
56 if ((error > 0x8000) || ((error == 0x8000) && (bf_l != 0)))
70 inline float bf16_to_float(
const uint16_t &v)
72 const uint32_t lv = (v << 16);
74 memcpy(&fp, &lv,
sizeof(lv));
102 value = float_to_bf16(v);
109 operator float()
const
111 return bf16_to_float(value);