Z Visual C++ na WIN32 istnieje długotrwały problem z funkcjami z 4 lub więcej parametrami SSE, np.Ograniczenia wyrównywania parametrów Visual Studio i Windows x64 ABI
__m128i foo4(__m128i m0, __m128i m1, __m128i m2, __m128i m3) {}
generuje błąd:
align.c(8) : error C2719: 'm3': formal parameter with __declspec(align('16')) won't be aligned
Aby związek ten problem, Visual C++ nadal niepotrzebnie nakłada ograniczenie ABI nawet jeśli funkcja jest __inline
.
Zastanawiam się, czy to nadal problem w 64-bitowym systemie Windows? Czy ograniczenie ABI nadal obowiązuje na x64?
(nie mam dostępu do 64 bitowym systemie Windows inaczej bym go wypróbować siebie i rozbudowana wyszukiwarka Google nie pojawiło się nic ostateczne.)
Zgodnie [Agner mgła w "konwencji dzwonienia" instrukcji (sekcja 7.2)] (http://www.agner.org/optimize/) Windows64 przechodzi przez wszystkie parametry __m128 wskaźnik, więc 4 lub więcej parametrów __m128 nie powinno stanowić problemu. (Nie można tego sprawdzić, ponieważ nie mam również dostępu do systemu Windows). –