97#if HALF_ENABLE_F16C_INTRINSICS
98 return _mm_cvtsi128_si32(_mm_cvtps_ph(_mm_set_ss(value), _MM_FROUND_TO_NEAREST_INT));
101 std::memcpy(&fbits, &value,
sizeof(
float));
103 std::uint16_t sign = (fbits >> 16) & 0x8000;
105 if (fbits >= 0x7F800000)
106 return sign | 0x7C00 | ((fbits > 0x7F800000) ? (0x200 | ((fbits >> 13) & 0x3FF)) : 0);
107 if (fbits >= 0x47800000)
109 if (fbits >= 0x38800000)
110 return GetRoundedValue(sign | (((fbits >> 23) - 112) << 10) | ((fbits >> 13) & 0x3FF), (fbits >> 12) & 1,
111 (fbits & 0xFFF) != 0);
112 if (fbits >= 0x33000000) {
113 int i = 125 - (fbits >> 23);
114 fbits = (fbits & 0x7FFFFF) | 0x800000;
116 (fbits & ((
static_cast<std::uint32_t
>(1) << i) - 1)) != 0);