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。该文档指出 sp
是 x30
。
那是什么?有不同的 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 用户手册”用于记录移植过程,不保证准确性。
我对 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。该文档指出 sp
是 x30
。
那是什么?有不同的 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 用户手册”用于记录移植过程,不保证准确性。