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

标签 cpu-registers calling-convention abi riscv

我对 RISC-V ABI 寄存器名称感到困惑。例如,第 85 页的“RISC-V 指令集手册,第一卷:用户级 ISA,2.0 版”中的表 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-* ?某处有综合表吗?

最佳答案

堆栈指针现在是 x2 .
Here是当前的 ABI 文档,已移出 User-Level ISA specification ,现在包含相同的链接。
修改了 ABI 以更好地适应新的 RISC-V 压缩规范,该规范将 8 个最常用的寄存器在 x8-x15 中彼此相邻。
注:不要相信任何非 riscv.org 网页。 Quan Nguyen 在他的介绍中明确指出,“RISC-V Linux 用户手册”用于记录移植过程,并且不保证准确性。

关于cpu-registers - RISC-V 调用约定的 ABI 寄存器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30636566/

相关文章:

assembly - 将字数组复制到双字数组 NASM 程序集

c++ - 表示带有 union 和位域的寄存器的问题

cpu-registers - 如何理解 volatile 和非 volatile 寄存器?

android - arm64-v8a 是否与 armeabi-v7a 兼容?

pointers - 在方括号中添加两个寄存器是什么意思?

assembly - AX、AH、AL如何映射到EAX?

c++ - 当我真的不关心调用约定时,我是否应该更喜欢 "default"调用约定而不是 __fastcall?

visual-c++ - 这个接口(interface)二进制文件在 MSVC 和 mingw 之间是否兼容?

C# 接口(interface)损坏,ABI

android - 以编程方式检索 Android ARM 处理器版本