|
1
3
被调用者不需要 流行音乐 他们(也不应该),只是 负载 他们您可以将它们保留在内存中,直到您为它们做好准备,无需为它们保存/恢复更多保留调用的寄存器,除非您真的想同时在寄存器中存储更多数据。例如。
使用ARM GCC-O3编译( https://godbolt.org/z/v6v6ch4vf )
通过尽快安排这些加载,编译器可以隐藏一些加载使用延迟,因为每次加载都尽可能早于加载结果的使用。 r0..r3和r12 1. 是唯一的 call-clobbered 在GCC正在使用的标准AAPCS调用约定的版本中注册;看见 What registers to save in the ARM C calling convention? 嗯,LR被调用为clobbed,但如果我们真的clobbed了,我们就必须保存/恢复返回地址。 堆栈指针保留调用;当控件返回给调用者时,它必须与进入函数时相同。(换句话说,堆栈参数(如果有的话)是调用方弹出的。)
所以,如果你真的弹出了一些堆栈参数,你需要
脚注1:
我不知道为什么GCC没有更早地加载到r12中(
|
|
|
Daniel · 仅在-O3中进行未对齐的内存访问 3 年前 |
|
|
TRElec · STM32:代码的执行似乎取决于它在闪存中的位置 3 年前 |
|
|
Marietto · FATAL:ThreadManitizer:不支持的VMA范围FATAL:找到39-支持的48/go:添加了github.com/docker/docker v23.0.4+不兼容 3 年前 |
|
|
Ilya Loskutov · 无法将单词加载到寄存器中 4 年前 |