Con Visual C++ su WIN32 esiste un problema di vecchia data con funzioni con 4 o più parametri SSE, ad es.Restrizioni di allineamento dei parametri di Visual Studio e Windows x64 ABI
__m128i foo4(__m128i m0, __m128i m1, __m128i m2, __m128i m3) {}
genera un errore:
align.c(8) : error C2719: 'm3': formal parameter with __declspec(align('16')) won't be aligned
Ad aggravare il problema, Visual C++ ancora impone inutilmente la restrizione ABI anche se la funzione è __inline
.
Mi chiedo se questo è ancora un problema su Windows 64 bit? La restrizione ABI si applica ancora su x64?
(non ho accesso ad un sistema di Windows a 64 bit altrimenti mi piacerebbe provare io stesso, e una lunga ricerca Google non ha alzato nulla di definitivo.)
Secondo [manuale Agner Fog di "convenzioni di chiamata" (paragrafo 7.2)] (http://www.agner.org/optimize/), Windows64 passa tutti i parametri per __m128 puntatore, quindi 4 o più parametri __m128 non dovrebbero essere un problema lì. (Impossibile controllare perché non ho accesso a un sistema Windows). –