【发布时间】:2013-08-10 17:55:50
【问题描述】:
我在几个地方看到微软对x64 平台的调用约定被缩小到只有一个:调用者清理堆栈(cdecl),参数以堆栈和寄存器的组合形式传递(我不打算讨论)这里的确切细节)。我假设如果这是操作系统的调用约定,那么可能所有其他针对 Windows 的编译器(例如 mingw-w64)也遵循它。
这种调用约定在其他主要平台(x64 Linux 等)上是否也适用?或者 Linux 是否仍然使用多种调用约定,或者甚至只是一种但不同的一种? GCC 或 Clang 是否允许在 x64 Linux 上使用多个调用约定?
【问题讨论】:
-
那些快乐的日子即将结束。 Microsoft 正在添加 __vectorcall 调用约定。最多六个
__m128值通过 SSE2 寄存器。
标签: compiler-construction 64-bit x86-64 calling-convention