Díky, přidal jsem to do testovacího programu.
i7-9700TE, GCC 10 (z Debianu stable): numpy 163us, naivní 294us, ručně unroll 92us*, tvoje 73us, moje SSE 31us, moje AVX 24us.
* tohle je zajímavé, protože ve standalone testovacím programu (co je na githubu) ruční unroll pomohl hodně, ale v celém tom zpracování vůbec. IMHO se nějak blbě zpropagovaly restrict nebo další kvalifikátory a ve standalone se to podařilo optimalizovat. Ale výsledný kód se mi asi teď úplně zkoumat nechce.
Strict aliasing se dá řešit pomocí unions těch datových typů, ne?