0.43版本更新¶
更新日期:2024年11月25日
指令编码设计文档网页版路径请见LinxISA Encoding-0.43
版本更新总体说明¶
本版本的更新主要分为两部分,其一是块指令执行过程中全局寄存器读写语义的更新,其二是增加部分特权级相关指令。
- 修正块指令执行语义
- 为优化寄存器使用效率,对LinxISA块指令的执行语义进行改进。更新后,块指令输出可直接覆盖输入值,避免多套寄存器状态冗余。
- 引入分离块定义
- 新增分离块(Decoupled Block)功能,将块头和块体分离定义,块头指令中新增B.IO指令。
- 分离块通过B.IO指令定义输入和输出寄存器,B.TEXT指令指定块体位置,适用于fall跳转类型。
- 块指令执行时在CARG.LRA中记录返回地址,允许块头和块体灵活编排与管理。
- 系统调用块设计
- 系统调用块实现低特权级ACR对高特权ACR的轻量级调用,避免了上下文保存开销。
- 关键指令:XB {ACR-ID}, {C-ID}用于指定调用目标ACR及功能ID,结合B.IO指令定义块头输入输出。
- ACR分层机制支持不同软件角色的权限管理,确保安全调用。
- 增加系统调用指令
- 系统块改名为辅助块(aux)。
- 辅助块内新增微指令acrc和acre,保留通用的系统调用功能。
- Fixup异常自处理机制
- 新增Fixup属性,使块在出现异常(如内存访问异常、断言失败)时自动跳转至指定修复位置继续执行。
- Fixup机制优化了异常处理,减少系统开销。
- 块头补充HINT指令编码
- 支持软件主动向硬件传递块跳转概率,块热度以及预取等hint信息。
- 增加GQM指令(属于系统块指令集)
- 新增GQM(General Queue Manager)指令,提供跨模块异步通讯,支持远程访问和消息队列管理。
- 包含qmt、qpush和qpop指令,用于队列维护、入队和出队操作,支持多对多通信的原子性。
- 增加TLB维护指令(属于系统块指令集)
- 增加TLB(Translation Lookaside Buffer)维护指令,包含tlb.iall、tlb.ia、tlb.iv和tlb.iav,清理不同级别和范围的TLB数据。
- 此功能增强了系统对虚拟内存的管理与控制能力,有效提高了内存使用效率。
- 增加原子比较交换指令(属于系统块指令集)
- 增加casb, cash, casw, casd指令,优化原子比较交换操作。
- 增加块内状态寄存器读取指令lsrget
- 补充一种接口用于异常或中断时读取块内状态,并做状态保存。
- 增加系统寄存器与L1 GPR原子交换指令ssrswap
- 补充功能实现,提升系统寄存器与全局寄存器交换效率,避免占用块内相对索引寄存器。
- 删除BSTART.ECALL和BSTART.ERET指令
- 引入了XB系统调用块和微指令acrc,acre系统调用的两种方式。
- 删除trap指令
- 与assert指令语义类似,且灵犀指令集后续不需要使用trap陷出到外部调试器功能。
变动详细介绍¶
该部分主要介绍架构的变动和重要指令的设计,指令的增删修改不在此处详细说明。
修改块指令执行语义¶
本版本后,在同一个块指令内,处于前序的指令更新了某个全局寄存器。那么后序指令读取该寄存器值是更新后的值。
BSTART.STD fall
ldi [a0, 0], ->t
ldi [a0, 8], ->t
add t#1, t#2, ->a1
sdi a1, [a0, 0] # a1的值是上面add指令输出值
...
add t#1, t#2, ->a1的结果写入全局寄存器a1,后序的sdi指令读a1的值是add指令更新后的值。
分离块¶
分离块的执行过程请见块指令跳转。