RISC-V 32/64位兼容性问题

时间:2019-03-28 17:20:10

标签: 32bit-64bit riscv

假设您使用RV32程序并尝试在64位系统上运行它,那么可能会出现哪些兼容性问题?

据我了解,指令编码是相同的,并且在RISC-V上(与其他现代RISC架构一样,尽管与x86不同),ALU操作会自动对字长进行操作,因此,如果添加一对寄存器,您将获得适用的32位或64位加法。当然,加载和存储将以明确指定的大小进行,因为它们取决于已在内存中分配了多少字节。

如果代码依赖于丢弃的32位以上的位(例如,位1),则会出现理论上可能的兼容性问题。加上2 ^ 31并将结果与​​零进行比较。

如果操作系统提供的前4 GB之外的内存地址会出现另一个更实际的问题,当代码将地址存储在32位变量中时,该地址将出现乱码。

我还有其他问题吗?

1 个答案:

答案 0 :(得分:2)

您对这两个可能的兼容性问题都是正确的。

此外,RV64I不需要某些控制和状态寄存器(即cycleh,instreth,timeh),因此不存在。任何尝试访问它们的代码都应该出错。

但是,有指令说明仅将低32位用于ALU操作。可以通过替换二进制文件中的操作码和funct3来进行更改。

因此,在仅返回32位地址的操作系统模式下,只要不使用cycleh和friends,就可以用工作的64位版本替换二进制文件。

参考文献RISC-V Specification v2.2

  • RISC-V规范的第4章。 v2.2概述了从RV32I到RV64I的区别。
  • 第2.8章介绍了控制和状态寄存器
  • 表19.3列出了标准中的所有CSR。