assembly RISC-V对PC溢出做了什么?

zpqajqem  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(171)

当程序计数器(PC)溢出时,RISC-V CPU上会发生什么?
例如,在RV 32 G IALIGN = 32上发生的情况0xFFFF'FFFC处的(32位)NOP已执行?还是在0xFFFF'FFFE处的16位NOP已执行之后在RV 32 GC上执行?这两个问题的最简单答案是“没什么,执行从0x 0000 '0000开始”,但是,在0xFFFF'FFFC执行了 *16位 * NOP之后,RV 32 GC上会发生什么?同样的答案意味着指令获取可能需要跨越地址空间的末尾,这听起来在架构上并不令人愉快。(同样,在IALIGN = 16的情况下,取指可能必须跨越一个 page 边界,这听起来也不是那么令人愉快,而且IIRC x86实现已经为部分错误的取指带来了很多乐趣。)
最好参考the spec PDF,虽然我还没有找到任何相关的内容,如果没有,我想听听实际的硬件实现在这种情况下会做什么。

b91juud3

b91juud31#

https://riscv.org/wp-content/uploads/2019/12/riscv-spec-20191213.pdf
1.4记忆
一个RISC-V哈特有一个2XLEN字节的单字节可寻址地址空间,用于所有的内存访问。一个内存字定义为32位相应地,半字是16位(2个字节),双字为64位(8字节),四字是128位(16个字节)。存储器地址空间是循环的,因此地址2XLEN −1的字节与地址0的字节相邻。因此,由硬件完成的存储器地址计算忽略溢出,而是绕回模2 × LEN。
这对我来说意味着PC机是绕路的,因为增加它是一个内存地址计算。

相关问题