块指令执行机制¶
块指令是灵犀指令集架构中的高级组织方式,用于高效表示复杂计算、资源访问及控制流程。块指令按照块头与块体的组织关系可分为一体块(Coupled Block)和分离块(Decoupled Block)两大类。它们分别在执行机制、编程约束、寄存器访问等方面拥有各自独特的规定和优势。以下对块指令两类组织及其执行机制进行系统性说明。
一体块(Coupled Block)¶
一体块是指块头与块体在机器指令空间内紧邻、连续定义的块组织形式,其块指令序列与传统指令集序列几乎一致,块头指示跳转目标,块体执行具体计算过程,具备高度紧凑性和低延迟特性。
执行机制¶
执行一体块时,处理器将块指令块头对应的 BPC 复制到私有PC,并初始化 TPC 为 BPC 的下一条块体指令:
- BPC 始终指向当前块指令的起始位置
BSTART。 - TPC 指向当前正在执行的块体指令,并在指令提交时递增本条指令的字节数。
当TPC移动到块体内的 BSTOP 指令(或下个块的 BSTART)代表本块执行结束。块指令提交后,BPC才会更新指向下一个块或目标跳转位置。
编程约束¶
- 一体块 块内不允许使用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,表示块体执行结束。
随后硬件将TPC恢复至 BARG.LRA,继续执行分离块后的 BSTOP指令。
编程约束说明¶
分离块设计对参数及寄存器访问具有严格限制,以保证安全和正确:
-
访问方式约束
-
参数匹配约束
- 块头(B.IOR/B.IOT)指定的
实参寄存器与块体访问形参寄存器数量需严格对应。 - 如果块头传入的
实参寄存器数量多于块体中的形参寄存器数量,那么块头解码时将触发 非法参数异常。 - 如果块头传入的
实参寄存器数量少于块体访问的形参寄存器数量,那么编号相对较大的形参寄存器是未初始化的,被读取后结果未定义。
- 块头(B.IOR/B.IOT)指定的
-
写入重复约束
- 分离块 块体中不能重复写同一输出形参寄存器(RO0-RO3),否则应触发 DoubleSetException。
-
指令约束
- 分离块 块体禁止使用16bit和48bit编码指令,只允许使用32bit和64bit编码指令。
总结¶
灵犀块指令架构通过一体块和分离块两种执行机制,为处理器提供高度抽象的执行单元,高效支持多样化计算和调用模式。一体块强调紧凑、无参数的全局寄存器直接操作;分离块则强调参数化、灵活性和多级访问控制,尤其在系统调用及函数抽象领域表现突出。两种机制分别服务于不同的编程和系统需求,共同强化了指令集架构的功能性与安全性。