浅谈RISC-V指令集(四)- 条件分支( 二 )

分支指令在运行过程中,比较寄存器rs1和寄存器rs2,根据比较结果,做相应的跳转动作:

rs1和rs2相等,BEQ跳转;rs1和rs2不相等,BNE跳转;rs1小于rs2,BLT和BLTU跳转;rs1大于等于rs2,BGE和BGEU跳转;众所周知,程序的执行效率和跳转的执行次数息息相关。所以软件在优化的过程中,应该保证程序中顺序代码执行的路径为主要的执行路径,将跳转执行指令放到主要执行路径之外。一般情况下,程序向前跳转可以被认为是不需要预测跳转的,而向后跳转时要被预测跳转。不过在现在的处理器中,动态分支预测器可以很好的完成上面的预测工作。

对比条件分支和无条件转移,我们可以做以下总结:

无条件转移采用相对寻址;条件分支的偏移量范围要远远小于无条件转移;条件分支对条件预测的要求比较高。

浅谈RISC-V指令集(四)- 条件分支

条件分支指令解析

通过上面的指令格式,我们了解到RISC-V通过直接比较rs1寄存器和rs2寄存器来进行分支操作。这和之前的X86、ARM、MIPS等指令集的处理方式不同。例如ARM指令集是通过使用条件码、MIPS则是通过比较寄存器和0。那么RISC-V为什么要这么设计,主要有以下几点考虑:

推荐阅读