【问题标题】:Calling convention on x64 [duplicate]x64上的调用约定[重复]
【发布时间】:2013-08-10 17:55:50
【问题描述】:

我在几个地方看到微软对x64 平台的调用约定被缩小到只有一个:调用者清理堆栈(cdecl),参数以堆栈和寄存器的组合形式传递(我不打算讨论)这里的确切细节)。我假设如果这是操作系统的调用约定,那么可能所有其他针对 Windows 的编译器(例如 mingw-w64)也遵循它。

这种调用约定在其他主要平台(x64 Linux 等)上是否也适用?或者 Linux 是否仍然使用多种调用约定,或者甚至只是一种但不同的一种? GCCClang 是否允许在 x64 Linux 上使用多个调用约定?

【问题讨论】:

  • 那些快乐的日子即将结束。 Microsoft 正在添加 __vectorcall 调用约定。最多六个 __m128 值通过 SSE2 寄存器。

标签: compiler-construction 64-bit x86-64 calling-convention


【解决方案1】:

我刚刚找到了答案herehere。基本上,Windows 采用一种方式,其他人采用另一种方式,但每个平台只采用一种方式(与 x86 的每个平台有多种方式相反)

【讨论】:

  • 没有指指点点,但你会认为在 x86 调用约定造成的所有痛苦之后,就标准达成一致将是 x64 的优先事项
猜你喜欢
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2021-12-20
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多