2013-08-08 4 views
5

Я видел в нескольких местах, что соглашения Microsoft для платформ x64 были сужены до одного: Caller очищает стек (cdecl), а параметры передаются в комбинации стека и регистров (я не вхожу в точные подробности здесь). Я предполагаю, что если это соглашение о вызове ОС, то, вероятно, все остальные компиляторы, предназначенные для Windows (например, mingw-w64), также следуют за ним.Соглашение о звонках на x64

Является ли это соглашение о вызове истинным и на других основных платформах (x64 Linux и т. Д.)? Или Linux все еще использует несколько соглашений о вызовах или даже один, но другой? Do GCC или Clang позволяют использовать несколько соглашений о вызовах на x64 Linux?

+6

Те счастливые дни вот-вот закончатся. Microsoft добавляет соглашение о вызове __vectorcall. До шести значений __m128' передавались через регистры SSE2. –

ответ

8

Я только что нашел ответ here и here. В основном, Windows делает это в одну сторону, все остальные делают это по-другому, но каждая платформа делает это только в одном направлении (в отличие от нескольких способов на платформе с x86)

+1

Не указывая пальцем с обеих сторон, но вы думаете, что после того, как вызвали вызовы вызова x86, согласие на стандарт было бы приоритетом с x64 – Basic