BARG寄存器¶
BARG(全称为Block Argument Register Group)是块内部的参数寄存器组,用于存储与块执行和跳转相关的控制与状态信息。
BARG由多个独立字段构成,每个字段用于存储特定类别的控制信息(例如跳转控制、执行状态、调度属性等)。每个字段均可由对应的指令单独设置;指令与字段之间存在一一或一对多的显式映射关系。字段的可写性与更新时机由指令语义约束:仅当执行相应的BARG控制类指令时,相关字段才可被修改;非对应指令对该字段的写入为非法或被忽略。
域段表¶
BARG寄存器包含如下域段:
| 域段名称 | 位宽 | 说明 | 有效块类型 |
|---|---|---|---|
| BPC | 64 | 当前块指令的块头地址,即当前块指令的BPC(块指针) | 所有块类型 |
| BPCN | 64 | 跳转目标块的块头地址,指示块指令执行完成后的跳转位置 | STD, FP |
| LRA | - | 本地返回地址,用于分离块中记录返回块头的地址(复用BPCN字段) | MPAR, MSEQ, VPAR, VSEQ |
| BlockType | 5 | 当前块的块类型 | 所有块类型 |
| TYPE | 2 | 块指令跳转类型,记录当前块指令的跳转逻辑。 | STD, FP |
| TAKEN | 1 | 跳转条件结果,1表示条件跳转成功,0表示条件不满足 | STD, FP |
| AQ,RL | 2 | 块指令的执行序属性 | STD, SYS, FP, VPAR, VSEQ |
| RegDst0 | 5 | 记录分离块第1个输出GGPR | MPAR, MSEQ, VPAR, VSEQ |
| RegDst1 | 5 | 记录分离块第2个输出GGPR | MPAR, MSEQ, VPAR, VSEQ |
| RegDst2 | 5 | 记录分离块第3个输出GGPR | MPAR, MSEQ, VPAR, VSEQ |
| RegDst3 | 5 | 记录分离块第4个输出GGPR | MPAR, MSEQ, VPAR, VSEQ |
图示如下:
1. BPC¶
存储当前块指令块头的地址(BPC)。该域段在块指令初始化时由硬件设置,用于指示当前块的位置。
在块指令初始化时,将当前BSTART的地址赋值进BPC。
2. BPCN¶
块指令初始化或执行时,将跳转目标块的块头地址记录到该字段。块指令结束并提交时用于跳转。
SETC.TGT指令用于设置该字段。
3. LRA¶
分离块中执行B.TEXT时进行初始化,将B.TEXT的下一条指令的地址写进LRA,以便执行完块体后返回。
4. BlockType¶
用于记录当前块的块类型,该信息在异常处理中有比较关键的作用。编码方式如下:
| BlockType | 说明 |
|---|---|
| 0 | 整型标量块STD |
| 1 | 系统块SYS |
| 2 | 浮点标量块FP |
| 3 | 数据块(MPAR, MSEQ, VPAR, VSEQ, CUBE, TMA) |
| 31 | 系统调用块XB |
5. TYPE¶
定义块指令的跳转类型。有效取值如下:
| 汇编 | 名称 | TYPE | TAKEN | BPC | BPCN |
|---|---|---|---|---|---|
| BSTART.FALL | 顺延 | 0 | 0 | 当前BSTART地址 | 下个顺延BSTART地址 |
BSTART.DIRECT label |
直接跳转 | 1 | 1 | 当前BSTART地址 | 直接跳转目标 label |
BSTART.CALL label |
调用 | 1 | 1 | 当前BSTART地址 | 调用目标块头地址 label |
BSTART.COND label |
条件跳转 | 2 | 0/1 | 当前BSTART地址 | 岔路目标块头地址 label |
| BSTART.IND | 间接跳转 | 3 | 1 | 当前BSTART地址 | 间接目标块头地址 |
| BSTART.ICALL | 间接调用 | 3 | 1 | 当前BSTART地址 | 间接目标块头地址 |
| BSTART.RET | 返回 | 3 | 1 | 当前BSTART地址 | 间接目标块头地址 |
6. TAKEN¶
表示条件跳转是否满足条件:
- 1: 条件满足,跳转成功。
- 0: 条件不满足,继续顺延执行。
setc.cond类指令用于设置BARG寄存器的TAKEN位。
7. AQ,RL¶
记录本块与其他块指令的执行序属性,由块头指令 B.CATR 设置。
8. RegDst0~3¶
分离块中存储本块的输出寄存器编号,用于块提交时将块内更新的形参寄存器值更新到指定的全局寄存器GGPR中。
这组字段通过块头指令B.IOR配置。
备注¶
该寄存器有如下特征:
- 该寄存器是可读写(RW)的。
- 该寄存器由处理器硬件 块调度器 和 分支预测执行单元 进行初始化。
- 每次块指令提交后,BARG寄存器的内容会被清空,以便下一次块指令执行时重新初始化。