首页 > 解决方案 > 为什么 arm64 ABI 中不使用 SVC 的立即数?

问题描述

swi在 aarch32 中,更准确地说是 ARM-OABI,仍然使用的立即值来传输系统调用号。另一方面,在 ARM-EABI 中,使用了寄存器。swi #0然后表示应该使用一个寄存器。

这个选项在 aarch64 中不再可用,所以我一直使用这个组合:

mov  x8, syscall_number
svc  #0

为什么我必须在此处添加额外的 4 个字节的代码大小,而这次立即值仍然未使用?

根据 ARM 程序员指南,立即值存储在异常综合症寄存器 ESR_EL中,因此应该可以使用mrs. 或者这已经是一个太大的性能损失?


参考:

标签: performanceoptimizationarmarm64abi

解决方案


推荐阅读