跳转至

块指令执行机制

块指令是灵犀指令集架构中的高级组织方式,用于高效表示复杂计算、资源访问及控制流程。块指令按照块头与块体的组织关系可分为一体块(Coupled Block)分离块(Decoupled Block)两大类。它们分别在执行机制、编程约束、寄存器访问等方面拥有各自独特的规定和优势。以下对块指令两类组织及其执行机制进行系统性说明。


一体块(Coupled Block)

一体块是指块头与块体在机器指令空间内紧邻、连续定义的块组织形式,其块指令序列与传统指令集序列几乎一致,块头指示跳转目标,块体执行具体计算过程,具备高度紧凑性和低延迟特性。

执行机制

执行一体块时,处理器将块指令块头对应的 BPC 复制到私有PC,并初始化 TPCBPC 的下一条块体指令:

    BSTART     <- BPC 
    inst0      <- TPC
    inst1
    inst2
    ...
    inst[n]
    BSTOP/BSTART
  • BPC 始终指向当前块指令的起始位置 BSTART
  • TPC 指向当前正在执行的块体指令,并在指令提交时递增本条指令的字节数。

当TPC移动到块体内的 BSTOP 指令(或下个块的 BSTART)代表本块执行结束。块指令提交后,BPC才会更新指向下一个块或目标跳转位置。

    BSTART     <- BPC
    inst0
    inst1
    inst2
    ...
    inst[n]
    BSTOP/BSTART  <- TPC

编程约束

  • 一体块 块内不允许使用B.TEXT指令。
  • 一体块 块体指令可采用16/48/32/64bit编码格式。
  • 一体块 块体中允许直接读写全局寄存器(GGPR),并且允许重复读写同一个寄存器。
  • 一体块 适用于需要紧密整体处理的函数、循环体、以及无参数块操作。

分离块(Decoupled Block)

分离块通过将块头(参数传递及调用控制)与块体(实际计算)分离,实现更灵活的控制流和参数绑定,适用于抽象调用、系统服务、函数复用等高级场景。

块头决定块体位置的方式有两类:

  • 一般分离块:块头中指针直接指向块体地址。
  • 系统调用块:块头指明块体所在特权级及其注册表偏移,用于实现特权级定制的服务调用。

执行机制

分离块执行时,处理器同样将 BPC 复制到私有 PC,TPC 初始化为 BPC 的下一条指令,并在每条指令提交时递增。

当执行到 B.TEXT <label> 指令时,TPC跳转到块体所在位置,并记录返回地址于 BARG.LRA(Local Return Address),以便块体执行结束后返回。

执行流程:

    BSTART                         <- BPC
    B.IOR [a0, a1, a2], [a0, a1]
    B.TEXT <body_label>            <- TPC
    BSTOP/BSTART                   <- BARG.LRA

    body_label:
    inst0
    inst1
    inst2
    ...
    inst[n]
    BSTOP

块体指令依次执行,直到TPC指向块体的 BSTOP 或下一个块头 BSTART,表示块体执行结束。

    body_label:
    inst0
    inst1
    inst2
    ...
    inst[n]
    BSTOP       <- TPC

随后硬件将TPC恢复至 BARG.LRA,继续执行分离块后的 BSTOP指令。

编程约束说明

分离块设计对参数及寄存器访问具有严格限制,以保证安全和正确:

  1. 访问方式约束

    • 分离块若需访问全局寄存器(GGPR),必须通过块头中B.IOR指令指定。
    • 分离块块体内只能访问形参寄存器(RI0~RI11 和 RO0~RO3),禁止直接访问GGPR;
    • 分离块若需访问Tile寄存器,必须通过块头中的B.IOT指令指定。
    • 分离块块体内内需要通过Tile形参寄存器(TA/TB/TO等)访问Tile寄存器空间。
  2. 参数匹配约束

    • 块头(B.IOR/B.IOT)指定的实参寄存器与块体访问形参寄存器数量需严格对应。
    • 如果块头传入的实参寄存器数量多于块体中的形参寄存器数量,那么块头解码时将触发 非法参数异常
    • 如果块头传入的实参寄存器数量少于块体访问的形参寄存器数量,那么编号相对较大的形参寄存器是未初始化的,被读取后结果未定义。
  3. 写入重复约束

    • 分离块 块体中不能重复写同一输出形参寄存器(RO0-RO3),否则应触发 DoubleSetException。
  4. 指令约束

    • 分离块 块体禁止使用16bit和48bit编码指令,只允许使用32bit和64bit编码指令。

总结

灵犀块指令架构通过一体块和分离块两种执行机制,为处理器提供高度抽象的执行单元,高效支持多样化计算和调用模式。一体块强调紧凑、无参数的全局寄存器直接操作;分离块则强调参数化、灵活性和多级访问控制,尤其在系统调用及函数抽象领域表现突出。两种机制分别服务于不同的编程和系统需求,共同强化了指令集架构的功能性与安全性。