Není tam chyba?
int idx = i/2 + imod - 3;
//vs:
outbuf2[i2 + 1] = (float)raw3;
IMHO v tom prvním má být imod-2
. Nezkoušel jsem, jestli to nějak zlepší výsledek autovektorizace.
Ohledně poznámky výše a SSE vs aarch64 - na Apple M1 netřeba, stačí zkusit Graviton3 v AWS - podporuje Neon i SVE. S těmi 2+2 konverzemi si nejsem jistý, jestli to zvládne efektivně. Ještě by mělo smysl zkusit AVX-512, které je taky už nějakou dobu standard, aspoň u Intel.
PS: Pěkný článek a hezké ne zcela běžné využití SIMD.