假设您拿了一个 RV32 程序并尝试在 64 位系统上运行它,可能会出现哪些兼容性问题?
据我了解,指令编码是相同的,并且在 RISC-V 上(与其他现代 RISC 架构一样,尽管与 x86 不同),ALU 操作会自动对字长进行操作,所以如果你添加一对寄存器,您将获得适用的 32 位或 64 位添加。加载和存储当然以明确指定的大小工作,因为它们取决于在内存中分配了多少字节。
如果代码依赖于超过 32 位被丢弃,例如将 2^31 添加到自身并将结果与零进行比较,则会出现一个理论上可能的兼容性问题。
如果操作系统提供前 4 GB 之外的内存地址,则会出现另一个更实际的问题,当代码将地址存储在 32 位变量中时,就会出现乱码。
我还有其他问题吗?