san*_*naj 5 assembly instruction-set opcode 32bit-64bit riscv
在通过RISC-V规范时,我注意到64位版本与32位版本的不同之处在于,
这使得RV32代码不兼容RV64。但是,如果64位版本已经实施方式:
ADD/SUB/SHL/..到ADDW/SUBW/SHLW/..与标志让他们只能在32位操作系统上延伸。ADD/SUB/SHL/..或ADDD/SUBD/SHLD/..在全部64位行为这样,RV32程序也可以在RV64上运行。为了实现CPU,工作量将保持不变,因为在两种情况下都必须实现64位和32位指令,而只有64位和32位版本的操作码将被交换。符合规范。(除了乘法指令。)
那么,为什么RISC-V为什么决定将新的操作码分配给RV64中的32位操作而不是64位操作?
RV64 和 RV32 非常兼容。如果程序不依赖于隐式模 32 位算术并且所有地址都适合 32 位,则机器代码可能是相同的。然而,向 RV64 处理器添加完整的 RV32 用户模式非常容易。
\n\nRV32 的 64 位超集太复杂了。AUIPC、JAL、LOAD、STORE 和 BRANCH 没有足够的操作码空间。如果有额外的扩展,情况会更糟。
\n\nRV64 中的少数 32 位指令主要用于过度使用模 32 位算术的程序。这是很常见的问题。不过,快速且可移植的代码应该避免它们。
\n