RISC-V 调用约定的 ABI 寄存器名称

ABI Register Names for RISC-V Calling Convention

我对 RISC-V ABI 寄存器名称感到困惑。例如,第 85 页 "RISC-V Instruction Set Manual, Volume I: User-Level ISA, Version 2.0" 中的 Table 18.2 指定堆栈指针 sp 是寄存器 x14。然而,指令

addi sp,zero,0

被riscv64-unknown-elf-as编译为0x00000113(-m32没有区别)。二进制:

000000000000 00000 000 00010 0010011
^imm         ^rs1  ^f3 ^rd   ^opcode

所以这里sp好像是x2。然后我用谷歌搜索了一下,找到了 RISC-V Linux User's Manual。该文档指出 spx30

那是什么?有不同的 ABI 吗?我可以使用命令行选项将 ABI 设置为 riscv64-unknown-elf-* 吗?有什么综合的table吗?

堆栈指针现在是x2

Here is the current ABI documentation, which has been moved out of the User-Level ISA specification,现在包含相同的 link。

修改了 ABI 以更好地适应新的 RISC-V 压缩规范,它在 x8-x15 中将 8 个最常用的寄存器并排放置。

注意: 不要相信任何非 riscv.org 的网页。 Quan Nguyen 在他的介绍中明确表示,“RISC-V Linux 用户手册”用于记录移植过程,不保证准确性。