RISC-V:为什么在JALR中将最低有效位设置为零

时间:2016-11-06 19:42:22

标签: cpu cpu-architecture riscv risc

为什么我们需要在RISC-V指令集中的JALR中将最低有效位设置为零,如RISC-V指令手册中所述?

是否建议对齐?

enter image description here

3 个答案:

答案 0 :(得分:4)

RISC-V中的最小指令是2个字节。没有有效的RISC-V指令从奇数指令开始,因此没有任何目的允许最低有效位为1.

答案 1 :(得分:3)

在RISC-V中,所有指令必须与4个字节对齐,但通过允许16,48或64位指令大小的扩展,允许指令与2个字节对​​齐。如说明书(V 2.1,第5页)中所述:

  

基本RISC-V ISA具有固定长度的32位指令,必须在32位上自然对齐   边界。但是,标准RISC-V编码方案旨在支持ISA扩展   使用可变长度指令,其中每条指令可以是任意数量的16位指令   长度和宗地的地块自然地在16位边界上对齐。

因此JALR目标地址中的最低有效位必须始终为零。 RISC-V的开发人员希望重用现有格式而不是创建新格式,其中立即数乘以2。如第p节所述。规范中的16:

  

请注意,JALR指令不会将12位立即数视为2个字节的倍数,   与条件分支指令不同。这避免了硬件中的一种直接格式。

这不是一个真正的缺点,因为实现可以使用指针的最低有效位。一个例子是区分函数指针和数据指针,这对于解释器来说很方便。在说明书中也提到了p。 16:

  

[...]允许使用低位的函数指针进行存储   辅助信息。

答案 2 :(得分:2)

我不了解RISC-V架构,但我的猜测如下:
立即寻址允许您通常访问任何存储器地址,例如奇数存储器地址的单个字节(最低有效地址位= 1) 但是,总是对偶数地址进行跳转,以便可以在单个周期中获取下一条指令(而不是在两个周期中,因为跳转地址 - 以及后续指令 - 的情况最少重要地址位= 1)。
因此,RISC-V架构显然强制仅从偶数地址获取指令。