s0 / x8 为什么适合保存跨调用值?
s0-s11 调用后保持;callee 修改它们时必须恢复,所以 caller 可以依赖其返回后不变。
s0 是 psABI 的 callee-saved 寄存器:函数如果修改它,返回前必须恢复。psABI 还规定,如果代码使用帧指针,帧指针必须放在 x8,也就是 s0/fp。
psABI 将 s0-s11 标记为调用后保持。被调用函数如果修改这些寄存器,必须在返回前恢复入口值。帧指针是可选的;如果存在,psABI 要求它位于 x8/s0。
s0 / x8 属于 s0-s11 保存寄存器组。psABI 规定它调用后保持;被调用函数如果修改它,返回前必须恢复。
标准 psABI 将 s0-s11 标记为调用后保持。
被调用函数修改 s* 时,必须在返回前恢复入口值。
如果存在帧指针,它必须位于 x8/s0。
# s0 是调用后保持的保存寄存器
# 修改 s0 的过程必须在返回前恢复入口值s0-s11 调用后保持;callee 修改它们时必须恢复,所以 caller 可以依赖其返回后不变。
被调用函数负责恢复。