* @brief Return the horizontal maximum of a vector. */
| 485 | * @brief Return the horizontal maximum of a vector. |
| 486 | */ |
| 487 | ASTCENC_SIMD_INLINE vint8 hmax(vint8 a) |
| 488 | { |
| 489 | // Build max within groups of 2, then 4, then 8 |
| 490 | __m256i m = _mm256_max_epi32(a.m, _mm256_shuffle_epi32(a.m, _MM_SHUFFLE(2, 3, 0, 1))); |
| 491 | m = _mm256_max_epi32(m, _mm256_shuffle_epi32(m, _MM_SHUFFLE(1, 0, 3, 2))); |
| 492 | m = _mm256_max_epi32(m, _mm256_permute2x128_si256(m, m, 0x01)); |
| 493 | |
| 494 | vint8 vmax(m); |
| 495 | return vmax; |
| 496 | } |
| 497 | |
| 498 | /** |
| 499 | * @brief Return the horizontal maximum of a vector. |