/* Sorting for SIMD types Copyright 2024 Ahmet Inan */ #pragma once template static inline SIMD::uint_type, WIDTH> vorder(SIMD a) { SIMD::uint_type, WIDTH> p; p.v[0] = 0; for (int i = 1, j; i < WIDTH; ++i) { TYPE t = a.v[i]; for (j = i; j > 0 && a.v[j-1] > t; --j) { a.v[j] = a.v[j-1]; p.v[j] = p.v[j-1]; } a.v[j] = t; p.v[j] = i; } return p; } template static inline SIMD vsort(SIMD a) { for (int i = 1, j; i < WIDTH; ++i) { TYPE t = a.v[i]; for (j = i; j > 0 && a.v[j-1] > t; --j) a.v[j] = a.v[j-1]; a.v[j] = t; } return a; }