指令编码:fmt 位段取消,形态改由前缀分区表达(Q1=010 查表 / Q2 空位待定 / Q3 全组分区)
- 前缀分区:11=RR、10=NONE、011=RRR、010=其他8条(查表)、0010=SLOT+off、 0011=IMM64、0001=预留(32B) - 字节 1 = [func:4 | 空:4](空位待全部编码后定) - 指令集清单:全部 72 行编码按新分区重排;§1 位号表/位图更新 - uses_* 推导:前缀直推 + 010 区查表;编译器优化/指令集优化同步 - op 预算:RR 21/64、NONE 2/64、RRR 26/32、其他 8/32、SLOT+off 8/16、IMM64 1/16
This commit is contained in:
+121
-165
@@ -6,173 +6,126 @@
|
||||
|
||||
## 编码规则摘要(详见指令编码.md)
|
||||
|
||||
- **字节 0** = 长度前缀 + 主操作码:`1`+op:7(4B)、`01`+op:6(8B)、`001`+op:5(16B)、`0001`+op:4(32B)
|
||||
- **字节 1** = `[func:4 | fmt:4]`
|
||||
- **字节 0** = 长度前缀 + 形态分区 + 主操作码:`11`/`10`+op:6(4B)、`011`/`010`+op:5(8B)、`0010`/`0011`+op:4(16B)、`0001`+op:4(32B)
|
||||
- **字节 1** = `[func:4 | 空:4]`(空位待全部编码后定)
|
||||
- **形态由前缀分区表达**(fmt 位段已取消):`11`=RR、`10`=NONE、`011`=RRR、`010`=其他 8 条(查表)、`0010`=SLOT+off、`0011`=IMM64
|
||||
- **func**(语义随 op):0..7 = 宽度×符号(1B无/1B有/2B无/2B有/4B无/4B有/8B无/8B有)、8=F32、9=F64、`—`=无类型(编码 0 保留)
|
||||
- **fmt**:0=RR、1=RRR、2=IMM、3=SLOT、4=JMP、5=JC、6=CALL、7=CAL、8=NONE
|
||||
- disasm 按 func 显示类型后缀(A7 定案):func=3 → `LOAD.I16 r5, s3`
|
||||
- 无类型指令(跳转/调用/RET/NOP/CAL)func 编码为 0(不使用)
|
||||
- 010 区 8 条(LOADK/LOAD/STORE/JMP/JT/JF/CALL/CAL)形态查表:见指令编码.md §5
|
||||
|
||||
|
||||
|
||||
|
||||
## 1. fmt 格式与字段位号
|
||||
## 1. 前缀分区与字段位号
|
||||
|
||||
### 1.1 通用头部(字节 0 + 字节 1,所有指令相同)
|
||||
|
||||
| 字段 | 位号 | 说明 |
|
||||
|---|---|---|
|
||||
| 长度前缀 | 4B: bit7 / 8B: bit7..6 / 16B: bit7..5 / 32B: bit7..4 | `1` / `01` / `001` / `0001` |
|
||||
| opcode | 4B: bit6..0 / 8B: bit5..0 / 16B: bit4..0 / 32B: bit3..0 | 组内独立编号(0 起) |
|
||||
| 长度前缀+形态分区 | 4B: bit7..6(`11`=RR / `10`=NONE);8B: bit7..5(`011`=RRR / `010`=其他);16B: bit7..4(`0010`=SLOT+off / `0011`=IMM64);32B: bit7..4(`0001`=预留) | 长度与形态分区一体 |
|
||||
| opcode | 4B: bit5..0 / 8B: bit4..0 / 16B: bit3..0 / 32B: bit3..0 | 分区内独立编号(0 起) |
|
||||
| func | bit15..12 | 功能细节(宽度×符号/浮点),语义随 op |
|
||||
| fmt | bit11..8 | 操作数形态(下表) |
|
||||
| (空) | bit11..8 | 待全部指令编码完后决定用途 |
|
||||
|
||||
### 1.2 fmt 位号总表(操作数区 = bit16 起;pad = 对齐填充,编码固定 0)
|
||||
### 1.2 形态分区总表(操作数区 = bit16 起;pad = 对齐填充,编码固定 0)
|
||||
|
||||
| fmt | 形态 | 长度组 | 操作数区字段位号 |
|
||||
|---|---|---|---|
|
||||
| 0 | RR | 4B | rd=23..16、rs=31..24 |
|
||||
| 1 | RRR | 8B | rd=23..16、rs1=31..24、rs2=39..32、pad=63..40 |
|
||||
| 2 | IMM | 8B | rd=23..16、imm32=55..24、pad=63..56 |
|
||||
| 3 | SLOT | 8B | rd=23..16、slot32=55..24、pad=63..56 |
|
||||
| 4 | JMP | 8B | off32=47..16、pad=63..48 |
|
||||
| 5 | JC | 8B | rd=23..16、off32=55..24、pad=63..56 |
|
||||
| 6 | CALL | 8B | fn_id32=47..16、pad=63..48 |
|
||||
| 7 | CAL | 8B | fb_id16=31..16、slot32=63..32 |
|
||||
| 8 | NONE | 4B | pad=31..16 |
|
||||
| 9 | SLOT+off | 16B | rd=23..16、slot32=55..24、off32=87..56、pad=127..88 |
|
||||
| 10 | IMM64 | 16B | rd=23..16、imm64=87..24、pad=127..88 |
|
||||
| 11..15 | 预留 | 32B | 操作数区 30B(bit 240..16),格式待定 |
|
||||
| 前缀 | 形态 | 长度组 | 操作数区字段位号 | 识别方式 |
|
||||
|---|---|---|---|---|
|
||||
| `11` | RR | 4B | rd=23..16、rs=31..24 | 前缀直推 |
|
||||
| `10` | NONE | 4B | pad=31..16 | 前缀直推 |
|
||||
| `011` | RRR | 8B | rd=23..16、rs1=31..24、rs2=39..32、pad=63..40 | 前缀直推 |
|
||||
| `010` | IMM/SLOT/JMP/JC/CALL/CAL | 8B | 8 条查表(指令编码.md §5) | **op 查表** |
|
||||
| `0010` | SLOT+off | 16B | rd=23..16、slot32=55..24、off32=87..56、pad=127..88 | 前缀直推 |
|
||||
| `0011` | IMM64 | 16B | rd=23..16、imm64=87..24、pad=127..88 | 前缀直推 |
|
||||
| `0001` | 预留 | 32B | 操作数区 30B(bit 240..16),格式待定 | — |
|
||||
|
||||
### 1.3 各位图(bit 从左(高)到右(低);小端字节序:字节 0 = bit0..7 在右端)
|
||||
|
||||
**fmt=0 RR(4B = bit31..0)**
|
||||
**RR(前缀 `11`,4B = bit31..0)**
|
||||
```text
|
||||
bit31 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌────────────────┬────────────────┬───────────┬─────────┬───────────┐
|
||||
│ rs:8 (31..24) │ rd:8 (23..16) │ func:4 │ fmt:4 │ 前缀1+op:7 │
|
||||
│ rs:8 (31..24) │ rd:8 (23..16) │ func:4 │ 空:4 │ 前缀11+op:6│
|
||||
└────────────────┴────────────────┴───────────┴─────────┴───────────┘
|
||||
```
|
||||
|
||||
**fmt=1 RRR(8B = bit63..0)**
|
||||
**NONE(前缀 `10`,4B = bit31..0)**
|
||||
```text
|
||||
bit63 40 bit39 32 bit31 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌─────────────────┬──────────┬──────────┬──────────┬─────────┬───────┬──────────┐
|
||||
│ pad:24 (63..40) │ rs2:8 │ rs1:8 │ rd:8 │ func:4 │ fmt:4 │ 前缀01+op6│
|
||||
│ │ (39..32) │ (31..24) │ (23..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
└─────────────────┴──────────┴──────────┴──────────┴─────────┴───────┴──────────┘
|
||||
bit31 16 bit15 12 bit11 8 bit7 0
|
||||
┌──────────────────┬─────────┬───────┬───────────┐
|
||||
│ pad:16 (31..16) │ func:4 │ 空:4 │ 前缀10+op:6│
|
||||
└──────────────────┴─────────┴───────┴───────────┘
|
||||
```
|
||||
|
||||
**fmt=2 IMM(8B = bit63..0)**
|
||||
**RRR(前缀 `011`,8B = bit63..0)**
|
||||
```text
|
||||
bit63 56 bit55 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌───────────────┬──────────────┬──────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:8 (63..56)│ imm32 (55..24)│ rd:8 (23..16)│ func:4 │ fmt:4 │ 前缀01+op6│
|
||||
└───────────────┴──────────────┴──────────────┴─────────┴───────┴──────────┘
|
||||
bit63 40 bit39 32 bit31 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌─────────────────┬──────────┬──────────┬──────────┬─────────┬───────┬───────────┐
|
||||
│ pad:24 (63..40) │ rs2:8 │ rs1:8 │ rd:8 │ func:4 │ 空:4 │ 前缀011+op5│
|
||||
│ │ (39..32) │ (31..24) │ (23..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
└─────────────────┴──────────┴──────────┴──────────┴─────────┴───────┴───────────┘
|
||||
```
|
||||
|
||||
**fmt=3 SLOT(8B = bit63..0)**
|
||||
**010 区(8B = bit63..0)**:形态查表(指令编码.md §5)——IMM/SLOT/JMP/JC/CALL/CAL 六种操作数布局:
|
||||
```text
|
||||
bit63 56 bit55 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌───────────────┬──────────────┬──────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:8 (63..56)│ slot32 (55..24)│ rd:8 (23..16)│ func:4 │ fmt:4 │前缀01+op6│
|
||||
└───────────────┴──────────────┴──────────────┴─────────┴───────┴──────────┘
|
||||
IMM/SLOT: rd=23..16、imm32|slot32=55..24、pad=63..56
|
||||
JMP/CALL: off32|fn_id32=47..16、pad=63..48
|
||||
JC: rd=23..16、off32=55..24、pad=63..56
|
||||
CAL: fb_id16=31..16、slot32=63..32
|
||||
```
|
||||
|
||||
**fmt=4 JMP(8B = bit63..0)**
|
||||
```text
|
||||
bit63 48 bit47 16 bit15 12 bit11 8 bit7 0
|
||||
┌──────────────┬─────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:16 │ off32 (47..16)│ func:4 │ fmt:4 │前缀01+op6│
|
||||
│ (63..48) │ │ (15..12)│(11..8)│ (7..0) │
|
||||
└──────────────┴─────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=5 JC(8B = bit63..0)**
|
||||
```text
|
||||
bit63 56 bit55 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌───────────────┬──────────────┬──────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:8 (63..56)│ off32 (55..24)│ rd:8 (23..16)│ func:4 │ fmt:4 │ 前缀01+op6│
|
||||
└───────────────┴──────────────┴──────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=6 CALL(8B = bit63..0)**
|
||||
```text
|
||||
bit63 48 bit47 16 bit15 12 bit11 8 bit7 0
|
||||
┌──────────────┬─────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:16 │ fn_id32 │ func:4 │ fmt:4 │前缀01+op6│
|
||||
│ (63..48) │ (47..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
└──────────────┴─────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=7 CAL(8B = bit63..0)**
|
||||
```text
|
||||
bit63 32 bit31 16 bit15 12 bit11 8 bit7 0
|
||||
┌────────────────┬──────────────┬─────────┬───────┬──────────┐
|
||||
│ slot32 (63..32)│ fb_id16 │ func:4 │ fmt:4 │ 前缀01+op6│
|
||||
│ │ (31..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
└────────────────┴──────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=8 NONE(4B = bit31..0)**
|
||||
```text
|
||||
bit31 16 bit15 12 bit11 8 bit7 0
|
||||
┌──────────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:16 (31..16) │ func:4 │ fmt:4 │ 前缀1+op7 │
|
||||
└──────────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=9 SLOT+off(16B = bit127..0)**
|
||||
**SLOT+off(前缀 `0010`,16B = bit127..0)**
|
||||
```text
|
||||
bit127 88 bit87 56 bit55 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌─────────────────┬──────────────┬──────────────┬──────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:40 │ off32 │ slot32 │ rd:8 │ func:4 │ fmt:4 │ 前缀001+op5│
|
||||
│ (127..88) │ (87..56) │ (55..24) │ (23..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
│ pad:40 │ off32 │ slot32 │ rd:8 │ func:4 │ 空:4 │ 前缀0010+op4│
|
||||
│ (127..88) │ (87..56) │ (55..24) │ (23..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
└─────────────────┴──────────────┴──────────────┴──────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=10 IMM64(16B = bit127..0)**
|
||||
**IMM64(前缀 `0011`,16B = bit127..0)**
|
||||
```text
|
||||
bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
┌─────────────────┬────────────┬──────────────┬─────────┬───────┬──────────┐
|
||||
│ pad:40 │ imm64 │ rd:8 │ func:4 │ fmt:4 │ 前缀001+op5│
|
||||
│ pad:40 │ imm64 │ rd:8 │ func:4 │ 空:4 │ 前缀0011+op4│
|
||||
│ (127..88) │ (87..24) │ (23..16) │ (15..12)│(11..8)│ (7..0) │
|
||||
└─────────────────┴────────────┴──────────────┴─────────┴───────┴──────────┘
|
||||
```
|
||||
|
||||
**fmt=11..15 预留(32B)**:操作数区 30B(bit 240..16),格式待实现时定稿。
|
||||
**32B 预留(前缀 `0001`)**:操作数区 30B(bit 240..16),格式待实现时定稿。
|
||||
|
||||
## 2. 数据搬运
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| MOVE | 4B | `10000000` | RR(0) | 宽度:0=1B/1=2B/2=4B/3=8B | rd, rs | 寄存器搬运(只搬宽度,不管符号/浮点) | 核心 |
|
||||
| LOAD | 8B | `01011010` | SLOT(3) | 全矩阵 0..9 | rd, slot | 槽→寄存器(按 func 读宽+扩展) | 核心 |
|
||||
| STORE | 8B | `01011011` | SLOT(3) | 全矩阵 0..9 | slot, rs | 寄存器→槽(按 func 写宽) | 核心 |
|
||||
| LOADK | 8B | `01011100` | IMM(2) | 全矩阵 0..9 | rd, const_id | 常量表→寄存器(按 func 解释) | 核心 |
|
||||
| MOVE | 4B | `11000000` | RR | 宽度:0=1B/1=2B/2=4B/3=8B | rd, rs | 寄存器搬运(只搬宽度,不管符号/浮点) | 核心 |
|
||||
| LOAD | 8B | `01000001` | SLOT | 全矩阵 0..9 | rd, slot | 槽→寄存器(按 func 读宽+扩展) | 核心 |
|
||||
| STORE | 8B | `01000010` | SLOT | 全矩阵 0..9 | slot, rs | 寄存器→槽(按 func 写宽) | 核心 |
|
||||
| LOADK | 8B | `01000000` | IMM | 全矩阵 0..9 | rd, const_id | 常量表→寄存器(按 func 解释) | 核心 |
|
||||
| LOAD_OFF | 16B | `00100000` | SLOT+off | 全矩阵 0..9 | rd, slot, off | 字段读(结构体/FB 共享体) | 核心 |
|
||||
| STORE_OFF | 16B | `00100001` | SLOT+off | 全矩阵 0..9 | slot, off, rs | 字段写 | 核心 |
|
||||
| LOADK64 | 16B | `00100010` | IMM64 | 全矩阵 0..9 | rd, imm64 | 64 位立即数内嵌(免查表) | 预留 |
|
||||
| LOADK64 | 16B | `00110000` | IMM64 | 全矩阵 0..9 | rd, imm64 | 64 位立即数内嵌(免查表) | 预留 |
|
||||
|
||||
## 3. 逻辑与位运算
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| NOT | 4B | `10000010` | RR(0) | 无符号宽度 0/2/4/6 | rd, rs | BOOL 逻辑非 / 位串按位取反 | 核心 |
|
||||
| AND | 8B | `01000110` | RRR(1) | 无符号宽度 0/2/4/6 | rd, ra, rb | 按宽度逐位与(BOOL 由编译器保证 0/1) | 核心 |
|
||||
| OR | 8B | `01000111` | RRR(1) | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位或 | 核心 |
|
||||
| XOR | 8B | `01001000` | RRR(1) | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位异或 | 核心 |
|
||||
| NAND | 8B | `01001001` | RRR(1) | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位与非 | 扩展 |
|
||||
| NOR | 8B | `01001010` | RRR(1) | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位或非 | 扩展 |
|
||||
| XNOR | 8B | `01001011` | RRR(1) | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位同或 | 扩展 |
|
||||
| SHL | 8B | `01001100` | RRR(1) | 无符号宽度 0/2/4/6 | rd, rs, n | 左移(n 在 rb) | 扩展 |
|
||||
| SHR | 8B | `01001101` | RRR(1) | 0..7(宽度×符号,算术/逻辑右移) | rd, rs, n | 右移 | 扩展 |
|
||||
| ROL | 8B | `01001110` | RRR(1) | 无符号宽度 0/2/4/6 | rd, rs, n | 循环左移(位串) | 扩展 |
|
||||
| ROR | 8B | `01001111` | RRR(1) | 无符号宽度 0/2/4/6 | rd, rs, n | 循环右移 | 扩展 |
|
||||
| GETBIT | 8B | `01011000` | RRR(1) | — | rd, rs, bit | 取位(bit 在 rb) | 扩展 |
|
||||
| SETBIT | 8B | `01011001` | RRR(1) | — | rd, rs, bit | 置位 | 扩展 |
|
||||
| CLRBIT | 8B | `01011010` | RRR(1) | — | rd, rs, bit | 清位 | 扩展 |
|
||||
| TOGBIT | 8B | `01011011` | RRR(1) | — | rd, rs, bit | 翻转位 | 扩展 |
|
||||
| NOT | 4B | `11000001` | RR | 无符号宽度 0/2/4/6 | rd, rs | BOOL 逻辑非 / 位串按位取反 | 核心 |
|
||||
| AND | 8B | `01100110` | RRR | 无符号宽度 0/2/4/6 | rd, ra, rb | 按宽度逐位与(BOOL 由编译器保证 0/1) | 核心 |
|
||||
| OR | 8B | `01100111` | RRR | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位或 | 核心 |
|
||||
| XOR | 8B | `01101000` | RRR | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位异或 | 核心 |
|
||||
| NAND | 8B | `01101001` | RRR | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位与非 | 扩展 |
|
||||
| NOR | 8B | `01101010` | RRR | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位或非 | 扩展 |
|
||||
| XNOR | 8B | `01101011` | RRR | 无符号宽度 0/2/4/6 | rd, ra, rb | 逐位同或 | 扩展 |
|
||||
| SHL | 8B | `01101100` | RRR | 无符号宽度 0/2/4/6 | rd, rs, n | 左移(n 在 rb) | 扩展 |
|
||||
| SHR | 8B | `01101101` | RRR | 0..7(宽度×符号,算术/逻辑右移) | rd, rs, n | 右移 | 扩展 |
|
||||
| ROL | 8B | `01101110` | RRR | 无符号宽度 0/2/4/6 | rd, rs, n | 循环左移(位串) | 扩展 |
|
||||
| ROR | 8B | `01101111` | RRR | 无符号宽度 0/2/4/6 | rd, rs, n | 循环右移 | 扩展 |
|
||||
| GETBIT | 8B | `01110110` | RRR | — | rd, rs, bit | 取位(bit 在 rb) | 扩展 |
|
||||
| SETBIT | 8B | `01110111` | RRR | — | rd, rs, bit | 置位 | 扩展 |
|
||||
| CLRBIT | 8B | `01111000` | RRR | — | rd, rs, bit | 清位 | 扩展 |
|
||||
| TOGBIT | 8B | `01111001` | RRR | — | rd, rs, bit | 翻转位 | 扩展 |
|
||||
|
||||
> 注:SETBIT/CLRBIT/TOGBIT 的"目标可槽"形式(`slot, bit`)后续可在 16B 组扩展(op 预留)。
|
||||
|
||||
@@ -180,58 +133,58 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| ADD | 8B | `01000000` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 整数饱和 / 浮点 IEEE / 无符号 | 核心 |
|
||||
| SUB | 8B | `01000001` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 减 | 核心 |
|
||||
| MUL | 8B | `01000010` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 乘 | 核心 |
|
||||
| DIV | 8B | `01000011` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 除(整数零除/浮点 ±inf) | 核心 |
|
||||
| MOD | 8B | `01000100` | RRR(1) | 0..7(整数) | rd, ra, rb | 取模 | 扩展 |
|
||||
| EXPT | 8B | `01000101` | RRR(1) | 0..9 | rd, ra, rb | 幂 | 扩展 |
|
||||
| NEG | 4B | `10000100` | RR(0) | 0..9 | rd, rs | 取负 | 扩展 |
|
||||
| ABS | 4B | `10000101` | RR(0) | 0..9 | rd, rs | 绝对值 | 扩展 |
|
||||
| INC | 4B | `10000110` | RR(0) | 0..9 | rd, rs | 自增 | 扩展 |
|
||||
| DEC | 4B | `10000111` | RR(0) | 0..9 | rd, rs | 自减 | 扩展 |
|
||||
| SQRT | 4B | `10001000` | RR(0) | 浮点 8/9 | rd, rs | 平方根 | 扩展 |
|
||||
| SIN | 4B | `10001001` | RR(0) | 浮点 8/9 | rd, rs | 正弦 | 扩展 |
|
||||
| COS | 4B | `10001010` | RR(0) | 浮点 8/9 | rd, rs | 余弦 | 扩展 |
|
||||
| TAN | 4B | `10001011` | RR(0) | 浮点 8/9 | rd, rs | 正切 | 扩展 |
|
||||
| ASIN | 4B | `10001100` | RR(0) | 浮点 8/9 | rd, rs | 反正弦 | 扩展 |
|
||||
| ACOS | 4B | `10001101` | RR(0) | 浮点 8/9 | rd, rs | 反余弦 | 扩展 |
|
||||
| ATAN | 4B | `10001110` | RR(0) | 浮点 8/9 | rd, rs | 反正切 | 扩展 |
|
||||
| LN | 4B | `10001111` | RR(0) | 浮点 8/9 | rd, rs | 自然对数 | 扩展 |
|
||||
| LOG | 4B | `10010000` | RR(0) | 浮点 8/9 | rd, rs | 常用对数 | 扩展 |
|
||||
| EXP | 4B | `10010001` | RR(0) | 浮点 8/9 | rd, rs | 指数 | 扩展 |
|
||||
| ROUND | 4B | `10010010` | RR(0) | 浮点 8/9 | rd, rs | 四舍五入(浮点→整数) | 扩展 |
|
||||
| TRUNC | 4B | `10010011` | RR(0) | 浮点 8/9 | rd, rs | 截断 | 扩展 |
|
||||
| FLOOR | 4B | `10010100` | RR(0) | 浮点 8/9 | rd, rs | 向下取整 | 扩展 |
|
||||
| CEIL | 4B | `10010101` | RR(0) | 浮点 8/9 | rd, rs | 向上取整 | 扩展 |
|
||||
| ADD | 8B | `01100000` | RRR | 全矩阵 0..9 | rd, ra, rb | 整数饱和 / 浮点 IEEE / 无符号 | 核心 |
|
||||
| SUB | 8B | `01100001` | RRR | 全矩阵 0..9 | rd, ra, rb | 减 | 核心 |
|
||||
| MUL | 8B | `01100010` | RRR | 全矩阵 0..9 | rd, ra, rb | 乘 | 核心 |
|
||||
| DIV | 8B | `01100011` | RRR | 全矩阵 0..9 | rd, ra, rb | 除(整数零除/浮点 ±inf) | 核心 |
|
||||
| MOD | 8B | `01100100` | RRR | 0..7(整数) | rd, ra, rb | 取模 | 扩展 |
|
||||
| EXPT | 8B | `01100101` | RRR | 0..9 | rd, ra, rb | 幂 | 扩展 |
|
||||
| NEG | 4B | `11000010` | RR | 0..9 | rd, rs | 取负 | 扩展 |
|
||||
| ABS | 4B | `11000011` | RR | 0..9 | rd, rs | 绝对值 | 扩展 |
|
||||
| INC | 4B | `11000100` | RR | 0..9 | rd, rs | 自增 | 扩展 |
|
||||
| DEC | 4B | `11000101` | RR | 0..9 | rd, rs | 自减 | 扩展 |
|
||||
| SQRT | 4B | `11000110` | RR | 浮点 8/9 | rd, rs | 平方根 | 扩展 |
|
||||
| SIN | 4B | `11000111` | RR | 浮点 8/9 | rd, rs | 正弦 | 扩展 |
|
||||
| COS | 4B | `11001000` | RR | 浮点 8/9 | rd, rs | 余弦 | 扩展 |
|
||||
| TAN | 4B | `11001001` | RR | 浮点 8/9 | rd, rs | 正切 | 扩展 |
|
||||
| ASIN | 4B | `11001010` | RR | 浮点 8/9 | rd, rs | 反正弦 | 扩展 |
|
||||
| ACOS | 4B | `11001011` | RR | 浮点 8/9 | rd, rs | 反余弦 | 扩展 |
|
||||
| ATAN | 4B | `11001100` | RR | 浮点 8/9 | rd, rs | 反正切 | 扩展 |
|
||||
| LN | 4B | `11001101` | RR | 浮点 8/9 | rd, rs | 自然对数 | 扩展 |
|
||||
| LOG | 4B | `11001110` | RR | 浮点 8/9 | rd, rs | 常用对数 | 扩展 |
|
||||
| EXP | 4B | `11001111` | RR | 浮点 8/9 | rd, rs | 指数 | 扩展 |
|
||||
| ROUND | 4B | `11010000` | RR | 浮点 8/9 | rd, rs | 四舍五入(浮点→整数) | 扩展 |
|
||||
| TRUNC | 4B | `11010001` | RR | 浮点 8/9 | rd, rs | 截断 | 扩展 |
|
||||
| FLOOR | 4B | `11010010` | RR | 浮点 8/9 | rd, rs | 向下取整 | 扩展 |
|
||||
| CEIL | 4B | `11010011` | RR | 浮点 8/9 | rd, rs | 向上取整 | 扩展 |
|
||||
|
||||
## 5. 比较
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| CMP_EQ | 8B | `01010000` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 相等 | 核心 |
|
||||
| CMP_NE | 8B | `01010001` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 不等 | 核心 |
|
||||
| CMP_LT | 8B | `01010010` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 小于(无符号/浮点按 func) | 核心 |
|
||||
| CMP_LE | 8B | `01010011` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 小于等于 | 核心 |
|
||||
| CMP_GT | 8B | `01010100` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 大于 | 核心 |
|
||||
| CMP_GE | 8B | `01010101` | RRR(1) | 全矩阵 0..9 | rd, ra, rb | 大于等于 | 核心 |
|
||||
| CMP_EQ | 8B | `01110000` | RRR | 全矩阵 0..9 | rd, ra, rb | 相等 | 核心 |
|
||||
| CMP_NE | 8B | `01110001` | RRR | 全矩阵 0..9 | rd, ra, rb | 不等 | 核心 |
|
||||
| CMP_LT | 8B | `01110010` | RRR | 全矩阵 0..9 | rd, ra, rb | 小于(无符号/浮点按 func) | 核心 |
|
||||
| CMP_LE | 8B | `01110011` | RRR | 全矩阵 0..9 | rd, ra, rb | 小于等于 | 核心 |
|
||||
| CMP_GT | 8B | `01110100` | RRR | 全矩阵 0..9 | rd, ra, rb | 大于 | 核心 |
|
||||
| CMP_GE | 8B | `01110101` | RRR | 全矩阵 0..9 | rd, ra, rb | 大于等于 | 核心 |
|
||||
|
||||
## 6. 转换
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| CONV | 4B | `10010110` | RR(0) | **目标类型** 0..9 | rd, rs | 类型转换(src 值已在寄存器,按目标 func 截断/扩展/舍入;舍入模式随目标为浮点→整数时取 TRUNC 语义) | 扩展 |
|
||||
| CONV | 4B | `11010100` | RR | **目标类型** 0..9 | rd, rs | 类型转换(src 值已在寄存器,按目标 func 截断/扩展/舍入;舍入模式随目标为浮点→整数时取 TRUNC 语义) | 扩展 |
|
||||
|
||||
## 7. 控制流
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| JMP | 8B | `01011111` | JMP(4) | — | off32 | 无条件跳转(相对下一条,字节) | 核心 |
|
||||
| JT | 8B | `01100000` | JC(5) | — | rd, off | rd≠0 跳转 | 核心 |
|
||||
| JF | 8B | `01100001` | JC(5) | — | rd, off | rd==0 跳转 | 核心 |
|
||||
| CALL | 8B | `01011101` | CALL(6) | — | fn_id | 压帧调用(r0..r7 复制) | 核心 |
|
||||
| RET | 4B | `10000011` | NONE(8) | — | — | 弹帧 / MAIN 周期结束 | 核心 |
|
||||
| CAL | 8B | `01011110` | CAL(7) | — | fb_id, slot | 内建 FB 调用(fb_id 查 [[fb]] 表) | 核心 |
|
||||
| JMP | 8B | `01000011` | JMP | — | off32 | 无条件跳转(相对下一条,字节) | 核心 |
|
||||
| JT | 8B | `01000100` | JC | — | rd, off | rd≠0 跳转 | 核心 |
|
||||
| JF | 8B | `01000101` | JC | — | rd, off | rd==0 跳转 | 核心 |
|
||||
| CALL | 8B | `01000110` | CALL | — | fn_id | 压帧调用(r0..r7 复制) | 核心 |
|
||||
| RET | 4B | `10000001` | NONE | — | — | 弹帧 / MAIN 周期结束 | 核心 |
|
||||
| CAL | 8B | `01000111` | CAL | — | fb_id, slot | 内建 FB 调用(fb_id 查 [[fb]] 表) | 核心 |
|
||||
| JTBL | 32B | `00010000` | 预留 | — | rd, slot, n | CASE 跳转表 | 预留 |
|
||||
|
||||
## 8. 内建 FB(CAL + fb_id,[[fb]] 表)
|
||||
@@ -257,15 +210,15 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|
|
||||
| STR_LEN | 16B | `00100011` | SLOT+off | 字符串长度 | 预留 |
|
||||
| STR_CMP | 16B | `00100100` | SLOT+off | 比较 | 预留 |
|
||||
| STR_EQ | 16B | `00100101` | SLOT+off | 相等 | 预留 |
|
||||
| STR_MID | 16B | `00100110` | SLOT+off | 取子串 | 预留 |
|
||||
| STR_LEFT | 16B | `00100111` | SLOT+off | 左侧子串 | 预留 |
|
||||
| STR_RIGHT | 16B | `00101000` | SLOT+off | 右侧子串 | 预留 |
|
||||
| STR_CONCAT | 32B | `00010011` | 预留 | 拼接 | 预留 |
|
||||
| STR_FIND | 32B | `00010001` | 预留 | 查找 | 预留 |
|
||||
| STR_REPLACE | 32B | `00010010` | 预留 | 替换 | 预留 |
|
||||
| STR_LEN | 16B | `00100010` | SLOT+off | 字符串长度 | 预留 |
|
||||
| STR_CMP | 16B | `00100011` | SLOT+off | 比较 | 预留 |
|
||||
| STR_EQ | 16B | `00100100` | SLOT+off | 相等 | 预留 |
|
||||
| STR_MID | 16B | `00100101` | SLOT+off | 取子串 | 预留 |
|
||||
| STR_LEFT | 16B | `00100110` | SLOT+off | 左侧子串 | 预留 |
|
||||
| STR_RIGHT | 16B | `00100111` | SLOT+off | 右侧子串 | 预留 |
|
||||
| STR_CONCAT | 32B | `00010001` | 预留 | 拼接 | 预留 |
|
||||
| STR_FIND | 32B | `00010010` | 预留 | 查找 | 预留 |
|
||||
| STR_REPLACE | 32B | `00010011` | 预留 | 替换 | 预留 |
|
||||
|
||||
## 10. 数组(未来)
|
||||
|
||||
@@ -279,16 +232,19 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| NOP | 4B | `10000001` | NONE(8) | — | — | 空操作(占位/对齐) | 核心 |
|
||||
| NOP | 4B | `10000000` | NONE | — | — | 空操作(占位/对齐) | 核心 |
|
||||
|
||||
## 12. op 预算核对(前缀编码按组分治)
|
||||
## 12. op 预算核对(前缀分区按组分治)
|
||||
|
||||
| 组 | op 空间 | 已分配 | 指令 | 余量 |
|
||||
|---|---|---|---|---|
|
||||
| 4B(op:7) | 128 | 23 | MOVE/NOP/NOT/RET/NEG/ABS/INC/DEC + 浮点单目 10 + 舍入 4 + CONV | 105 |
|
||||
| 8B(op:6) | 64 | 34 | 算术 6 + 逻辑 6 + 移位 4 + 位操作 4 + CMP 6 + LOAD/STORE/LOADK/CALL/CAL/JMP/JT/JF 8 | 30 |
|
||||
| 16B(op:5) | 32 | 10 | LOAD_OFF/STORE_OFF/LOADK64 + 字符串 6 + ARR_LEN | 22 |
|
||||
| 32B(op:4) | 16 | 6 | JTBL + STR_CONCAT/FIND/REPLACE + ARR_LOAD/STORE | 10 |
|
||||
| 前缀 | 分区 | op 空间 | 已分配 | 指令 | 余量 |
|
||||
|---|---|---|---|---|---|
|
||||
| `11` | RR | 64 | 21 | MOVE/NOT/NEG/ABS/INC/DEC/浮点单目 10/舍入 4/CONV | 43 |
|
||||
| `10` | NONE | 64 | 2 | NOP/RET | 62 |
|
||||
| `011` | RRR | 32 | 26 | 算术 6 + 逻辑 6 + 移位 4 + 位操作 4 + CMP 6 | 6 |
|
||||
| `010` | 其他(查表) | 32 | 8 | LOADK/LOAD/STORE/JMP/JT/JF/CALL/CAL | 24 |
|
||||
| `0010` | SLOT+off | 16 | 8 | LOAD_OFF/STORE_OFF + 字符串 6 | 8 |
|
||||
| `0011` | IMM64 | 16 | 1 | LOADK64 | 15 |
|
||||
| `0001` | 预留 | 16 | 6 | JTBL + STR_CONCAT/FIND/REPLACE + ARR_LOAD/STORE | 10 |
|
||||
|
||||
> 编码约定:op 按组独立编号;无类型指令 func=0;SETBIT 系列的目标可槽形式与
|
||||
> 字符串/数组的具体操作数形态在实现时定稿(fmt 列「预留」)。
|
||||
> 编码约定:op 按分区独立编号;无类型指令 func=0;010 区形态查表(指令编码.md §5);
|
||||
> 字符串/数组的具体操作数形态在实现时定稿(`0001` 区)。
|
||||
|
||||
Reference in New Issue
Block a user