指令集优化:§2.1 同步前缀分区方案(fmt/type 位段表述更新为前缀分区+func)
This commit is contained in:
+23
-24
@@ -19,37 +19,36 @@
|
||||
|
||||
## 2. 已定案设计
|
||||
|
||||
### 2.1 变长指令,长度编码在 opcode
|
||||
### 2.1 变长指令,前缀编码 + 形态分区
|
||||
|
||||
- 指令长度**不固定**:4 / 8 / 16 字节(32 字节预留)
|
||||
- **长度组 = opcode 高 2 位**:`[len:2 | op:6]`;长度组 = 操作数形态(fmt)的自然覆盖
|
||||
- 指令长度**不固定**:4 / 8 / 16 字节(32 字节预留);**长度与形态由前缀分区一体表达**(见 [`指令编码.md`](指令编码.md))
|
||||
- **前缀分区**:`11`=RR、`10`=NONE(4B);`011`=RRR、`010`=其他 8 条(查表)(8B);`0010`=SLOT+off、`0011`=IMM64(16B);`0001`=预留(32B)
|
||||
- **fmt 位段已取消**(用户定案):形态由前缀分区 + 010 区查表表达
|
||||
|
||||
```text
|
||||
字节 0 字节 1 字节 2..n(按长度组)
|
||||
[len:2 | op:6] [type:5 | fmt:3] 操作数区
|
||||
字节 0 字节 1 字节 2..n(按长度组)
|
||||
[前缀+形态分区 | op] [func:4 | 空:4] 操作数区
|
||||
```
|
||||
|
||||
| 位段 | 宽度 | 内容 |
|
||||
| 位段 | 位号 | 内容 |
|
||||
|---|---|---|
|
||||
| len | 2 | 4 / 8 / 16B + 32B 预留 |
|
||||
| op | 6 | 主操作码(64 空间,实际约 30 个) |
|
||||
| type | 5 | **32 种:19 IEC 基础类型 + 13 预留** |
|
||||
| fmt | 3 | 8 种形态:**RR、RRR、IMM、SLOT、JMP、JC、NONE、预留** |
|
||||
| 前缀+分区 | 4B: bit7..6 / 8B: bit7..5 / 16B: bit7..4 / 32B: bit7..4 | 长度与形态分区 |
|
||||
| op | 4B: bit5..0 / 8B: bit4..0 / 16B: bit3..0 / 32B: bit3..0 | 分区内独立编号 |
|
||||
| func | bit15..12 | 数据语义(宽度×符号/浮点),语义随 op |
|
||||
| 空 | bit11..8 | 待全部编码完后定用途 |
|
||||
|
||||
**格式合并(9 → 7 种形态)**:`CALL` 并入 **IMM**(fn_id 即 32 位立即数,rd 未用)、`CAL` 并入 **SLOT**(实例号即槽号,rd 未用)——形态相同,指令身份由 op 位段区分。
|
||||
|
||||
| 长度组 | 指令长度 | 覆盖形态 | 操作数区 |
|
||||
| 长度组 | 指令长度 | 形态分区 | 操作数区 |
|
||||
|---|---|---|---|
|
||||
| `00` | 4 字节 | NONE / RR | rd + rs1(各 1B) |
|
||||
| `01` | 8 字节 | RRR / IMM / SLOT / JMP / JC | + rs2 + slot32/fn_id32/const_id32/off32 |
|
||||
| `10` | 16 字节 | **SLOT+off**(字段访问)/ IMM64 | + slot32 + off32/imm64 |
|
||||
| `11` | 32 字节 | 预留 | 超大立即数/未来扩展 |
|
||||
| `11`/`10` | 4 字节 | RR / NONE | rd + rs1(各 1B)/ 无 |
|
||||
| `011`/`010` | 8 字节 | RRR / 其他 8 条(查表) | rd+rs1+rs2 / 见查表 |
|
||||
| `0010`/`0011` | 16 字节 | SLOT+off / IMM64 | rd + slot32 + off32 / rd + imm64 |
|
||||
| `0001` | 32 字节 | 预留 | 超大立即数/未来扩展 |
|
||||
|
||||
- 取指:读字节 0 → `len` 位段定总长 → 搬 4/8/16 字节
|
||||
- **位掩码推导**(全部编码在头 2 字节):
|
||||
- 指令长度 ← `len` 组
|
||||
- 操作数形态 ← `fmt`:`uses_rd = fmt∈{RR,RRR,IMM,SLOT,JC}`、`uses_ra = fmt∈{RR,RRR}`、`uses_rb = {RRR}`(CALL/CAL 的 rd 恒 0,按 fmt 检查无害)
|
||||
- 数据宽度/符号 ← `type`(查 constexpr 宽度/符号表)
|
||||
- 取指:读字节 0 → 前缀定总长 → 搬 4/8/16 字节
|
||||
- **推导**(编码在头两字节):
|
||||
- 指令长度 + 形态 ← 前缀分区(010 区查表)
|
||||
- uses_rd/uses_ra/uses_rb ← 形态:RRR 全真直推;010 区查表(指令编码.md §6)
|
||||
- 数据宽度/符号 ← `func` 位段(查 constexpr 宽度/符号表)
|
||||
- **字段访问统一为 LOAD/STORE 16B 变体**:`LOAD rd, slot, off32`(基槽 + 偏移,编译期算死)——结构体字段与 FB 共享体字段**同一指令**,无单独 LOADF
|
||||
- **跳转偏移字节化**:off32(字节,相对下一条);pc/code_offset/code_len 全字节单位;code 段 16 字节对齐
|
||||
|
||||
@@ -146,8 +145,8 @@
|
||||
| 项 | V1(现状) | V2(定案) |
|
||||
|---|---|---|
|
||||
| 指令长度 | 固定 32bit | **变长 4/8/16B**,长度在 opcode |
|
||||
| opcode | 0..33 乱序,无位域 | `[len:2\|op:6]` + `[type:5\|fmt:3]` 位域 |
|
||||
| 格式 | 9 种(RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE) | **7 种形态**(CALL→IMM、CAL→SLOT 合并)+ 1 预留 |
|
||||
| opcode | 0..33 乱序,无位域 | `[前缀+形态分区\|op]` + `[func:4\|空:4]` |
|
||||
| 格式 | 9 种(RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE) | **形态由前缀分区表达**(11/10/011/010查表/0010/0011),fmt 位段取消 |
|
||||
| 寄存器编号 | 8 位(256/帧) | 8 位(256/帧,不变) |
|
||||
| 变量访问 | 立即数槽号直接寻址 | **槽表引用 → 值区**(两级间接) |
|
||||
| 槽 | 8B 定宽 | 8B 引用表({addr:u32}) |
|
||||
|
||||
Reference in New Issue
Block a user