我对RISC-V ABI注册名称感到困惑。例如,“RISC-V指令集手册,第I卷:用户级ISA,版本2.0”(第85页)中的表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
。然后我用Google搜索了一下,找到了RISC-V Linux User's Manual。本文档指出sp
为x30
。
那是什么?是否有不同的ABI?我可以使用riscv64-unknown-elf-*
的命令行选项设置ABI吗?在某个地方有一张综合表吗?
答案 0 :(得分:9)
堆栈指针现在是x2
。
Here是当前的ABI文档,已移出User-Level ISA specification,现在包含相同的链接。
修改了ABI以更好地适应新的RISC-V压缩规范,该规范将8个最常用的寄存器放在x8-x15中。
注意:不信任任何非riscv.org网页。 Quan Nguyen在他的介绍中明确指出," RISC-V Linux用户手册"用于记录移植过程,并且不保证准确性。