本文主要是介绍Hexagon处理器的条件执行机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
概述
Hexagon处理器基于比较指令在四个预测寄存器(P0-P3)中设置预测位来实现条件执行模型。这些预测位可以用来有条件的执行某些指令。
条件标量操作只可以对预测寄存器的最后一位进行操作,条件矢量操作则可以操作寄存器的多个位。
这些预测寄存器主要用于分支预测的控制。
标量预测
标量预测是一个八位的值,该值在条件指令中表示两种真值:
0xff表示为真
0x00表示假
Hexagon处理器提供了P0-P3四个八位的预测寄存器来控制矢量预测。这些寄存器通过预测驱动指令来设置,通过预测消费指令进行查看。
驱动标量预测
如下的指令可以驱动标量预测:
比较字节、半字、字、双字
比较单精度、双精度的浮点数
分类浮点值
比较比特掩码
边界检测
TLB匹配
保存条件
下图列出了预测驱动指令
比较指令(cmp..eq)包括了一个变量,这个变量保存了一个存储在通用寄存器中的二进制值。
使用标量检测
基于标量预测,CPU可以判断条件从而执行正确的指令,或者有选择的将某个标量预测作为输入或输出。
使用标量预测值的条件指令只能查看预测值的最低一位。在最简单的情况下,该比特位将直接决定CPU将要执行的指令:
1 表明该指令可以被执行
0 表明该指令不能执行
如果条件指令在预测表达式中包括了操作!,那么比特值的逻辑取反将会作为预测的判断值。
条件指令在汇编指令中用指令前缀“if(pred_expr)”来表示,pred_expr表示预测表达式,例如:
if (P0) jump target // jump if P0 is true
if (!P2) R2 = R5 // assign register if !P2 is true
if (P1) R0 = sub(R2,R3) // conditionally subtract if P1
if (P2) R0 = memw(R2) // conditionally load word if P2
如下指令可以被用来做条件指令:
跳转
这篇关于Hexagon处理器的条件执行机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!