跳转至

JR

说明

无条件寄存器跳转 (Jump Register)
无条件跳转至源寄存器内TPC加左移一位的立即数偏移指示的目标地址处。

汇编语法

    jr SrcL, label

汇编符号

  • SrcL:源寄存器,可以索引全局寄存器R0-R23和前序1-4条输出至T队列或U队列的指令结果。
  • label:表示跳转目标位置的程序标签。它相对于本指令TPC的偏移距离除以2后编码在simm12字段。

编码格式

JR

执行方式

    integer s = UInt(SrcL);

    bits(64) curtpc = R[s, 64];
    bits(64) offset = SignExtend(simm12);
    TPC = curtpc + (offset << 1);

汇编索引模式

jr a1, label       /* 单寄存器绝对索引 */
jr t#1, label      /* 单寄存器相对索引 */
jr u#1, label      /* 单寄存器相对索引 */

汇编示例

如果需要跳转到一个symbol所在的位置,且j指令偏移的编码不足,可以使用addtpc和jr完成。

label:
   ......

addtpc %tpcrel_hi(label), ->t
jr t#1, %tpcrel_lo(label)

注意事项

本指令不占块内私有寄存器槽位。

备注

本指令属于基础指令集,可用于向量Tile块、并行Tile块和访存Tile块的块体中。