|
|
|
|
移动端

2.2.5 高效的分支跳转指令

《手把手教你设计CPU——RISC-V处理器篇》第2章大道至简——RISC-V架构之魂,本章将对RISC-V架构的设计思想进行深入浅出的介绍。本节为大家介绍高效的分支跳转指令。

作者:胡振波来源:人民邮电出版社|2018-05-23 13:15

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

2.2.5 高效的分支跳转指令

RISC-V架构有两条无条件跳转指令(Unconditional Jump),即jal指令与jalr指令。跳转链接(Jump and Link)指令——jal指令可用于进行子程序调用,同时将子程序返回地址存在链接寄存器(Link Register,由某一个通用整数寄存器担任)中。跳转链接寄存器(Jump and Link-Register)指令——jalr指令能够用于子程序返回指令,通过将jal指令(跳转进入子程序)保存的链接寄存器用于jalr指令的基地址寄存器,则可以从子程序返回。请参见附录A14.2节了解jal和jalr指令的详细内容。

RISC-V架构有6条带条件跳转指令(Conditional Branch),这种带条件的跳转指令跟普通的运算指令一样直接使用两个整数操作数,然后对其进行比较。如果比较的条件满足,则进行跳转,因此此类指令将比较与跳转两个操作放在一条指令里完成。作为比较,很多其他的RISC架构的处理器需要使用两条独立的指令。第一条指令先使用比较指令,比较的结果被保存到状态寄存器之中;第二条指令使用跳转指令,判断前一条指令保存在状态寄存器当中的比较结果为真时,则进行跳转。相比而言,RISC-V的这种带条件跳转指令不仅减少了指令的条数,同时硬件设计上更加简单。请参见附录A14.2节了解6条带条件跳转指令的详细内容。

对于没有配备硬件分支预测器的低端CPU,为了保证其性能,RISC-V的架构明确要求采用默认的静态分支预测机制,即如果是向后跳转的条件跳转指令,则预测为“跳”;如果是向前跳转的条件跳转指令,则预测为“不跳”,并且RISC-V架构要求编译器也按照这种默认的静态分支预测机制来编译生成汇编代码,从而让低端的CPU也得到不错的性能。

在低端的CPU中,为了使硬件设计尽量简单,RISC-V架构特地定义了所有的带条件跳转指令跳转目标的偏移量(相对于当前指令的地址)都是有符号数,并且其符号位被编码在固定的位置。因此这种静态预测机制在硬件上非常容易实现,硬件译码器可以轻松地找到固定的位置,判断该位置的比特值为1,表示负数(反之则为正数)。根据静态分支预测机制,如果是负数,则表示跳转的目标地址为当前地址减去偏移量,也就是向后跳转,则预测为“跳”。当然,对于配备有硬件分支预测器的高端CPU,则还可以采用高级的动态分支预测机制来保证性能。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Cisco CCNA 640-802题库

Cisco 640-802 Cisco Certified Network Associate (CCNA) Testinside CCNA 640-802 V14 最新题库与Testinside CCNA 640-802 Q&A 192 ...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊