使用WIN32上的Visual C++,有4個或更多SSE參數的函數存在長期存在的問題,例如,Visual Studio參數對齊限制和Windows x64 ABI
__m128i foo4(__m128i m0, __m128i m1, __m128i m2, __m128i m3) {}
生成錯誤:
align.c(8) : error C2719: 'm3': formal parameter with __declspec(align('16')) won't be aligned
使問題更加複雜時,Visual C++仍然不必要強加限制ABI即使功能是__inline
。
我想知道這是否仍然是64位Windows上的問題? ABI限制是否仍然適用於x64?
(我沒有訪問64位Windows系統,否則我想嘗試它自己,以及廣泛的谷歌搜索還沒有止跌回升什麼明確的。)
根據[昂納霧的 「調用約定」 手冊(第7.2節)](http://www.agner.org/optimize/),Windows64傳遞所有__m128參數由指針,所以4個或更多的__m128參數應該不成問題。 (無法檢查,因爲我也無法訪問Windows系統)。 – 2013-04-28 17:39:08