【发布时间】:2020-04-16 05:58:37
【问题描述】:
我们知道jal 指定了一个 21 位的偏移量。但是,它不编码 21 位偏移量,而是 20 位偏移量。原因是地址的最低有效位总是为零,因为最小可能的 RISC-V 指令是 2 个字节,所以该位没有在指令中编码。
通过这种方式对偏移进行编码,它可以提供 ±1MiB 的跳跃范围。如果jal 确实对 LSB 进行了编码,那么它只会提供 ±512KiB 的跳跃范围。
但是,指定 12 位偏移量的 jalr 指令确实对 LSB 进行了编码。这会将跳跃范围减小到 ±2kiB(而不是 ±4kiB)。我知道jalr 使用I 型格式,与addi 相同,并且对于这种指令必须对立即数的LSB 进行编码。但是,我看不出为什么必须为jalr 编码最低有效位。
【问题讨论】:
-
与许多其他类似问题不同,我认为该指令集的创建者还活着,您可以尝试联系他们。明白这样的决定并不总是技术性的,而只是他们碰巧选择的。也许范围无关紧要,逻辑的实现可能比跳跃范围更重要。在任何一种情况下,选择这条路都是某人或某个会议或某些团体的意见,而不必有技术/固定/理智的原因。
-
作者的姓名应该在 risc-v 规范中,您可以直接联系其中一位或多位作者来解决这个基于意见的问题。
标签: assembly riscv instruction-set instruction-encoding