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

问题描述 投票:2回答:1

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

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

如果代码依赖于过去32的比特被丢弃,则会出现一个理论上可能的兼容性问题。将2 ^ 31添加到自身并将结果与​​零进行比较。

如果操作系统提供超出前4千兆字节的内存地址,则会出现另一个更实际的问题,当代码将地址存储在32位变量中时,这将是乱码。

我还缺少其他问题吗?

32bit-64bit riscv
1个回答
2
投票

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

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

但是,有指令仅使用低32位进行ALU操作。通过替换二进制文件中的操作码和功能3可能会改变这种情况。

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

参考文献RISC-V Specification v2.2

  • RISC-V规范的第4章。 v2.2概述了从RV32I到RV64I的差异。
  • 第2.8章介绍了控制和状态寄存器
  • 表19.3列出了标准中的所有CSR。
© www.soinside.com 2019 - 2024. All rights reserved.