* @brief Return a float value for a float16 vector. */
| 996 | * @brief Return a float value for a float16 vector. |
| 997 | */ |
| 998 | ASTCENC_SIMD_INLINE vfloat4 float16_to_float(vint4 a) |
| 999 | { |
| 1000 | #if ASTCENC_F16C >= 1 |
| 1001 | __m128i packed = _mm_packs_epi32(a.m, a.m); |
| 1002 | __m128 f32 = _mm_cvtph_ps(packed); |
| 1003 | return vfloat4(f32); |
| 1004 | #else |
| 1005 | return vfloat4( |
| 1006 | sf16_to_float(static_cast<uint16_t>(a.lane<0>())), |
| 1007 | sf16_to_float(static_cast<uint16_t>(a.lane<1>())), |
| 1008 | sf16_to_float(static_cast<uint16_t>(a.lane<2>())), |
| 1009 | sf16_to_float(static_cast<uint16_t>(a.lane<3>()))); |
| 1010 | #endif |
| 1011 | } |
| 1012 | |
| 1013 | /** |
| 1014 | * @brief Return a float value for a float16 scalar. |