- README.md:依赖方向(STCompiler→compiler 不链 isa)、模块表、isa 归执行器侧、 数据流图(machine.toml + 型号/SHA) - isa/README.md:重写——只管指令定义(Types/Op/Instr/Encode),删 Image 部分 - 指令与映像.md:依赖图与 CMake(compiler 不链 isa) - 编译管线.md:管线首步加载 machine.toml、产物含型号/SHA - 初步计划.md:12.10/12.13 修订(--machine、依赖方向) - 扫描周期.md / 指令执行.md:12.9 步骤标注已落地、vm 读校验说明 - compiler/vm/executor README:依赖与边界同步
2.7 KiB
2.7 KiB
isa
归执行器侧,只管指令定义。CMake 目标:isa(STATIC),无依赖;被 vm 依赖。
compiler 不依赖 isa——指令 opcode / 类型元数据 / FB 布局全部来自 compiler/machine.toml(见 指令配置.md)。.stb 映像读写由 compiler(写侧)与 vm(读侧)各自实现。
STCompiler → compiler (编码查 machine.toml,自带 .stb 写)
BytecodeExecutor → vm → isa (isa 只管指令;vm 自带 .stb 读)
操作码、指令字以 doc/isa/指令与映像.md 为准。 头文件实现该文,本 README 不另当规范。.stb 结构拆解见 doc/isa/stb文件格式.md。指令/类型/FB 登记见 doc/isa/指令配置.md。
公开头:isa/include/isa/。
做 / 不做
做: 操作码与 32-bit 指令字、BOOL/INT/TIME 定宽与饱和、编解码、一条指令的文本转储。
不做: 映像读写(compiler/vm 各自实现)、toml/关键字/符号表/AST、VM 执行 switch(在 vm)、扫描周期、I/O 采样。
目录与 CMake
isa/
CMakeLists.txt
README.md
include/isa/
Types.h # 宽度、饱和
Op.h # 操作码枚举 + OpFormat/OpClass + kOpDefs 表 + 助记符
Instr.h # 32-bit 打包/拆字段(inline)
Encode.h # encode / decode / disasm
src/
Encode.cpp
add_library(isa STATIC src/Encode.cpp)
target_include_directories(isa PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
vm:target_link_libraries(vm PUBLIC isa);compiler 不链 isa。
实现说明
Types.h:Bool=uint8_t、Int=int16_t、Time=int64_t(毫秒,理由见规范文);sat_add/sub/mul/div(饱和规则见规范文);TypeTag(0/1/2,.stb常量表契约)Op.h:enum Op : uint8_t(数值即编码,与machine.toml强校验一致);OpFormat(RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE)与OpClass(Plain/Instance);34 条kOpDefs{ name, format, cls };mnemonic/format/op_class查表Encode.cpp:encode/decode往返 +disasm(按 format 表驱动,文本与规范文一致)
测试
tests/isa_test(链 isa):饱和、操作码冻结值、指令打包、encode/decode 往返、disasm 文本、OpClass 分类。
验收
cmake --build过;ctest过(isa_roundtrip等 14 个用例全绿)vm只#include <isa/...>;compiler不引用isa- 操作码有变:先改
compiler/machine.toml+ 本目录 + 测试,再改两端