* @brief Accumulate lane-wise sums for a vector, folded 4-wide. * * This is invariant with 4-wide implementations. */
| 849 | * This is invariant with 4-wide implementations. |
| 850 | */ |
| 851 | ASTCENC_SIMD_INLINE void haccumulate(vfloat4& accum, vfloat a) |
| 852 | { |
| 853 | #if defined(ASTCENC_NO_INVARIANCE) |
| 854 | accum.m[0] += hadd_s(a); |
| 855 | #else |
| 856 | vfloat_t vacc = __riscv_vle32_v_f32m1(accum.m, 4); |
| 857 | vacc = __riscv_vfadd(vacc, a.m, 4); |
| 858 | for (size_t i = 4; i < vfloat::vl(); i += 4) |
| 859 | { |
| 860 | vacc = __riscv_vfadd(vacc, __riscv_vslidedown(a.m, i, 4), 4); |
| 861 | } |
| 862 | __riscv_vse32(accum.m, vacc, 4); |
| 863 | #endif |
| 864 | } |
| 865 | |
| 866 | /** |
| 867 | * @brief Accumulate lane-wise sums for a vector. |