跳转至

0.43版本更新

更新日期:2024年11月25日

指令编码设计文档网页版路径请见LinxISA Encoding-0.43

版本更新总体说明

本版本的更新主要分为两部分,其一是块指令执行过程中全局寄存器读写语义的更新,其二是增加部分特权级相关指令。

  1. 修正块指令执行语义
    • 为优化寄存器使用效率,对LinxISA块指令的执行语义进行改进。更新后,块指令输出可直接覆盖输入值,避免多套寄存器状态冗余
  2. 引入分离块定义
    • 新增分离块(Decoupled Block)功能,将块头和块体分离定义,块头指令中新增B.IO指令
    • 分离块通过B.IO指令定义输入和输出寄存器,B.TEXT指令指定块体位置,适用于fall跳转类型
    • 块指令执行时在CARG.LRA中记录返回地址,允许块头和块体灵活编排与管理。
  3. 系统调用块设计
    • 系统调用块实现低特权级ACR对高特权ACR的轻量级调用,避免了上下文保存开销。
    • 关键指令:XB {ACR-ID}, {C-ID}用于指定调用目标ACR及功能ID,结合B.IO指令定义块头输入输出。
    • ACR分层机制支持不同软件角色的权限管理,确保安全调用。
  4. 增加系统调用指令
    • 系统块改名为辅助块(aux)
    • 辅助块内新增微指令acrcacre,保留通用的系统调用功能。
  5. Fixup异常自处理机制
    • 新增Fixup属性,使块在出现异常(如内存访问异常、断言失败)时自动跳转至指定修复位置继续执行。
    • Fixup机制优化了异常处理,减少系统开销。
  6. 块头补充HINT指令编码
    • 支持软件主动向硬件传递块跳转概率,块热度以及预取等hint信息。
  7. 增加GQM指令(属于系统块指令集)
    • 新增GQM(General Queue Manager)指令,提供跨模块异步通讯,支持远程访问和消息队列管理。
    • 包含qmt、qpush和qpop指令,用于队列维护、入队和出队操作,支持多对多通信的原子性。
  8. 增加TLB维护指令(属于系统块指令集)
    • 增加TLB(Translation Lookaside Buffer)维护指令,包含tlb.iall、tlb.ia、tlb.iv和tlb.iav,清理不同级别和范围的TLB数据。
    • 此功能增强了系统对虚拟内存的管理与控制能力,有效提高了内存使用效率。
  9. 增加原子比较交换指令(属于系统块指令集)
    • 增加casb, cash, casw, casd指令,优化原子比较交换操作。
  10. 增加块内状态寄存器读取指令lsrget
    • 补充一种接口用于异常或中断时读取块内状态,并做状态保存。
  11. 增加系统寄存器与L1 GPR原子交换指令ssrswap
    • 补充功能实现,提升系统寄存器与全局寄存器交换效率,避免占用块内相对索引寄存器。
  12. 删除BSTART.ECALL和BSTART.ERET指令
    • 引入了XB系统调用块和微指令acrc,acre系统调用的两种方式。
  13. 删除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指令更新后的值。

分离块

分离块的执行过程请见块指令跳转