跳转至

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

图示如下:

barg

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寄存器的内容会被清空,以便下一次块指令执行时重新初始化。