我目前正在将一个为ARM编写的编译器移植到另一种目标架构。我发现ARM存在两种不同的ABI: APCS_ABI
和AAPCS_ABI
。
我在谷歌上搜索并参考了ARM手册,但没有找到它们之间的区别。
然而,在编译器后端的实现中,这两种ABI被单独处理并有不同的实现。
顺便说一下,APCS
是ARM过程调用标准的缩写,AAPCS
是ARM体系结构过程调用标准的缩写。(难道它们不是指的同一件事吗?)
那么APCS
和AAPCS
有什么区别?为什么定义了两种不同的ABI?
我目前正在将一个为ARM编写的编译器移植到另一种目标架构。我发现ARM存在两种不同的ABI: APCS_ABI
和AAPCS_ABI
。
我在谷歌上搜索并参考了ARM手册,但没有找到它们之间的区别。
然而,在编译器后端的实现中,这两种ABI被单独处理并有不同的实现。
顺便说一下,APCS
是ARM过程调用标准的缩写,AAPCS
是ARM体系结构过程调用标准的缩写。(难道它们不是指的同一件事吗?)
那么APCS
和AAPCS
有什么区别?为什么定义了两种不同的ABI?
来自ARM文档,
PCS过程调用标准。
AAPCS是ARM架构的过程调用标准(本标准)。 (现行标准)
APCS是ARM过程调用标准 (已过时).
同样,在同一份文档中,
AAPCS是APCS的第五个重大修订版本和TPCS的第三个重大修订版本。它是ARM架构完整ABI规范的一部分。
因此,您可以忘记已过时的 APCS
并开始遵循 AAPCS