[英]Comparing Intel vs Arm Registers with Swift / lldb
如果您只是在查看调用约定并在函数的进入/退出处注册(不在中间),那么可以,对于x86-64 System V调用约定而言,它们是正确的。
有关函数调用约定的摘要,请参见在i386和x86-64上UNIX和Linux系统调用的调用约定是什么(请参见https://github.com/hjl-tools/x86-psABI/wiki/X86- psABI ,了解ABI的全部详细信息,包括按大小传递/返回大小结构的大小,以及FP值的大小。)
根据https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64),AArch64的标准调用约定在x0..x7
传递args,并在x0
返回。 (从该超简短摘要中尚不清楚可以在寄存器中返回多大的arg,是否可以在x1:x0中返回16字节的结构。)
但是在函数内部 ,这完全取决于编译器,甚至没有尝试类似的代码生成。
您正在为单独的体系结构编译单独的二进制文件。 在针对x86-64进行编译时,编译器甚至可能甚至没有尝试使asm看起来像AArch64一样,只是应用“按条件”规则并使asm为x86-64尽可能高效地实现了该功能。
不同的调整试探法将导致不同的内联和其他代码生成决策。
AArch64比x86-64具有更多的体系结构寄存器。 显然,即使您使用的x86-64编译器试图使x86-64 asm看起来像AArch64 asm一样,也无法实现1:1映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.