RISC-V 标准 ABI 对 sp 有什么对齐要求?
标准 ABI 要求 sp 在过程入口按 128-bit 边界对齐,并在执行期间保持对齐。
sp 是 RISC-V 标准调用约定使用的栈指针。标准 ABI 中栈向低地址增长;sp 在过程入口必须按 128-bit 边界对齐,并在执行期间保持对齐。
psABI 将 sp 标记为调用后保持:函数返回时必须恢复其入口值。函数内调整 sp 建立栈帧时,仍须遵守标准 ABI 的栈对齐要求,即在过程入口及执行期间保持 128-bit 对齐。
psABI 将 x2 命名为 sp,并标记为调用后保持。函数可以在栈帧建立期间移动 sp,但返回前必须恢复到入口值。
sp / x2 是标准调用约定的栈指针。psABI 标记它调用后保持;函数可以移动 sp 建立栈帧,但返回前必须恢复,并保持标准 ABI 的 128-bit 对齐要求。
标准 ABI 要求栈指针在过程入口按 128-bit 边界对齐,并在执行期间保持对齐。
callee 可以移动 sp 建立栈帧,但返回前必须恢复。
调用其他函数前,当前函数应确保栈状态满足 ABI 要求。
addi sp, sp, -16
sd ra, 8(sp)
sd s0, 0(sp)
addi s0, sp, 16
...
ld s0, 0(sp)
ld ra, 8(sp)
addi sp, sp, 16
retsp 是 x2 栈指针,标准 ABI 中栈向低地址增长,过程入口的 sp 需要保持 128-bit 对齐。s0/fp 是 x8;psABI 规定帧指针是可选的,但如果存在,必须位于 x8/s0。两者都属于调用后保持的 ABI 状态,但 sp 负责栈位置,s0/fp 只在采用帧指针约定时承担帧指针角色。
不要把 sp 当普通临时寄存器使用。标准 ABI 要求它在过程入口按 128-bit 对齐并在执行期间保持对齐;手写代码调整 sp 时必须维持这些条件。
标准 ABI 要求 sp 在过程入口按 128-bit 边界对齐,并在执行期间保持对齐。