0.32版本更新¶
日期:2023年9月28日
指令编码设计文档网页版路径请见LinxISA Encoding-v0.32
v0.32版本最主要的变动是对store指令的改动。
指令实现变化¶
Store指令变动¶
- 由于硬件解码器的DecodeType解码类型不匹配,需要对Store指令(sb/sh/sw/sd)的opcode做出调整:
- Reg + Reg格式: opcode 7'b0010110 -> 7'b0010100 / RegDst字段改为全零 /
- Reg + imm格式: opcode 7'b0010111 -> 7'b0010101
- 为了简化Store指令的硬件寄存器的写口,降低硬件实现复杂度。修改sb/sh/sw/sd等指令的执行操作为:不输出目的地址,即不写T寄存器和RegDst寄存器。
- 为了提升内存连续写的效率,新增sb.a/sh.a/sw.a/sd.a指令,在对应的sb/sh/sw/sd功能基础上,增加写地址到目的T和RegDst寄存器的操作。

指令操作数增加TP/GP/CP¶
在v0.32,每条微指令的源寄存器都可以去索引系统寄存器中的TP/GP/CP寄存器。
- 为了提升硬件访问私有变量的效率,增加了微指令索引TP寄存器的操作。
- 为了提升硬件访问全局变量的效率,增加了微指令索引GP寄存器的操作。
- 为了提升硬件做状态迁移的效率,增加了微指令索引CP寄存器的操作。
bit位操作指令变动¶
为了提升字符串库处理的效率,比特位操作指令新增¶
- ctzw:在最低有效字内计数尾随零。
- clz:在整个64bit内计数前导零。
- clzw:在最低有效字内计数前导零。
为了降低硬件实现复杂度。对比特位操作指令bfi编码更新:改为两输入指令,M/N在指令编码中表达。¶
更新前:

更新后:

编码的变化带来指令实现的部分变化
更新后G/L字段和RegDst字段的被M字段占用,因此结果只写到T寄存器。
更新前为三输入指令,为了简化硬件实现,限制了SrcR只能索引块内私有寄存器。更新为两输入后,去掉了该限制,SrcR可以索引T寄存器以及新添加的TP/GP/CP系统寄存器
为了适配bfi编码的修改,对bxu和concat编码有所更新:¶
更新前:

更新后:

bxu/bxs/bfi指令实现加入卷绕情况的处理实现。¶
加入卷绕,可以通过这些指令对操作数实现循环移位操作(ror, rol)。