步骤E:文档收尾——基址寻址落地同步(编译器优化/寄存器码/用例对照/指令与映像/指令集清单/指令执行)
This commit is contained in:
+6
-4
@@ -43,7 +43,7 @@ CMake 目标:`isa`(`STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
|
||||
| 项 | V2 定案 |
|
||||
|---|---|
|
||||
| 指令宽度 | **变长 4/8/16/32B**,长度与形态由**前缀分区**表达 |
|
||||
| 前缀 | `11`=RR、`10`=NONE、`011`=RRR、`010 000..101`=IMM/SLOT/JMP/JC/CALL/CAL、`0010`=SLOT+off、`0011`=IMM64、`0001`=预留(32B) |
|
||||
| 前缀 | `11`=RR、`10`=NONE、`011`=RRR、`010 000..101`=IMM/SLOT/JMP/JC/CALL/CAL、`0010`=SLOT+off / RS+off、`0011`=IMM64、`0001`=预留(32B) |
|
||||
| 头部 | 字节 0 = `[前缀+分区\|op]`;字节 1 = `[func:4\|空:4]`(空位延后定) |
|
||||
| func | 4 位:0..7 = 宽度×符号(1/2/4/8B×有/无)、8=F32、9=F64;无类型指令 = 0 |
|
||||
| 寄存器 | 编号 8 位(**256 = 寻址上限**),值 int64;**每帧按函数头 nregs 动态分配** |
|
||||
@@ -86,12 +86,12 @@ CMake 目标:`isa`(`STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
|
||||
| `010 100` | 8B | CALL | 2 位 | 4 | 前缀直推 |
|
||||
| `010 101` | 8B | CAL | 2 位 | 4 | 前缀直推 |
|
||||
| `010 110/111` | 8B | 预留 | 2 位 | 8 | — |
|
||||
| `0010` | 16B | SLOT+off | 4 位 | 16 | 前缀直推 |
|
||||
| `0010` | 16B | SLOT+off / RS+off | 4 位 | 16 | 前缀直推 |
|
||||
| `0011` | 16B | IMM64 | 4 位 | 16 | 前缀直推 |
|
||||
| `0001` | 32B | 预留(N2) | 4 位 | 16 | — |
|
||||
|
||||
- op 按分区独立编号(0 起);取指:读字节 0 → 前缀定长 → 搬整条
|
||||
- **uses_rd/uses_ra/uses_rb 全部前缀直推**(零查表):RRR 三寄存器全真;RR 的 rd/rs;IMM/SLOT/JC/SLOT+off/IMM64 仅 rd;JMP/CALL/CAL/NONE 无
|
||||
- **uses_rd/uses_ra/uses_rb 全部前缀直推**(零查表):RRR 三寄存器全真;RR 的 rd/rs;IMM/SLOT/JC/SLOT+off/RS+off/IMM64 的 rd;RS+off 另含 rs(基址寄存器);JMP/CALL/CAL/NONE 无
|
||||
|
||||
### 3.2 func 位段(字节 1 高 4 位)
|
||||
|
||||
@@ -126,6 +126,7 @@ CMake 目标:`isa`(`STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
|
||||
| CALL | fn_id32=47..16、pad=63..48(**rd 恒 0**) |
|
||||
| CAL | fb_id16=31..16、slot32=63..32(**rd 恒 0**) |
|
||||
| SLOT+off | rd=23..16、slot32=55..24、off32=87..56、pad=127..88 |
|
||||
| RS+off | rd=23..16、rs=31..24(基址寄存器)、off32=87..56、pad=127..88 |
|
||||
| IMM64 | rd=23..16、imm64=87..24、pad=127..88 |
|
||||
|
||||
---
|
||||
@@ -192,7 +193,8 @@ CMake 目标:`isa`(`STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
|
||||
- `MOVE rd, rs`(RR,func=宽度 0..3):寄存器间按宽度搬运(高位清 0),不管符号/浮点
|
||||
- `LOAD rd, slot` / `STORE slot, rs`(SLOT,func 全矩阵):槽表[slot].addr → 值区按 func 读/写宽度
|
||||
- `LOADK rd, const_id`(IMM,func 全矩阵):常量表条目 8B 原始值,按 func 解释
|
||||
- `LOAD_OFF rd, slot, off` / `STORE_OFF slot, off, rs`(SLOT+off):字段访问(结构体/FB 共享体统一)
|
||||
- `LOAD_OFF rd, slot, off` / `STORE_OFF slot, off, rs`(SLOT+off):字段访问(绝对实例槽,调用点/输出读用)
|
||||
- `LOAD_PTR rd, rs, off` / `STORE_PTR rd, rs, off`(RS+off):**基址寻址**——rs 寄存器 = 值区地址(实例指针),addr+off 直读值区(FB 共享体函数体内字段访问)
|
||||
|
||||
### 6.2 逻辑与位运算
|
||||
|
||||
|
||||
+4
-2
@@ -41,7 +41,7 @@
|
||||
| `010 011` | JC | 8B | rd=23..16、off32=55..24、pad=63..56 | 前缀直推 |
|
||||
| `010 100` | CALL | 8B | fn_id32=47..16、pad=63..48 | 前缀直推 |
|
||||
| `010 101` | CAL | 8B | fb_id16=31..16、slot32=63..32 | 前缀直推 |
|
||||
| `0010` | SLOT+off | 16B | rd=23..16、slot32=55..24、off32=87..56、pad=127..88 | 前缀直推 |
|
||||
| `0010` | SLOT+off / RS+off | 16B | SLOT+off: rd=23..16、slot32=55..24、off32=87..56;RS+off: rd=23..16、rs=31..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),格式待定 | — |
|
||||
|
||||
@@ -112,6 +112,8 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
| 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 | 字段写 | 核心 |
|
||||
| LOAD_PTR | 16B | `00101000` | RS+off | 全矩阵 0..9 | rd, rs, off | 基址读(rs 寄存器 = 值区地址 + 偏移;FB 共享体) | 核心 |
|
||||
| STORE_PTR | 16B | `00101001` | RS+off | 全矩阵 0..9 | rd, rs, off | 基址写 | 核心 |
|
||||
| LOADK64 | 16B | `00110000` | IMM64 | 全矩阵 0..9 | rd, imm64 | 64 位立即数内嵌(免查表) | 预留 |
|
||||
|
||||
## 3. 逻辑与位运算
|
||||
@@ -270,7 +272,7 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
| `10` | NONE | 64 | 2 | NOP/RET | 62 |
|
||||
| `011` | RRR | 32 | 26 | 算术 6 + 逻辑 6 + 移位 4 + 位操作 4 + CMP 6 | 6 |
|
||||
| `010 000`..`010 101` | IMM/SLOT/JMP/JC/CALL/CAL | 6×4 | 8 | LOADK(1)/LOAD·STORE(2)/JMP(1)/JT·JF(2)/CALL(1)/CAL(1) | 16(含 2 个预留形态区) |
|
||||
| `0010` | SLOT+off | 16 | 8 | LOAD_OFF/STORE_OFF + 字符串 6 | 8 |
|
||||
| `0010` | SLOT+off / RS+off | 16 | 10 | LOAD_OFF/STORE_OFF + LOAD_PTR/STORE_PTR + 字符串 6 | 6 |
|
||||
| `0011` | IMM64 | 16 | 1 | LOADK64 | 15 |
|
||||
| `0001` | 预留 | 16 | 6 | JTBL + STR_CONCAT/FIND/REPLACE + ARR_LOAD/STORE | 10 |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user