stb 头字段偏移常量表:消除 vm/compiler 两侧裸魔法数
- vm/Image.cpp:匿名空间 constexpr 偏移常量(kOffMagic..kOffModelId + 段内行偏移), from/model_id/model_matches/func_row/const_entry 全部替换 - compiler/Stb.h:同值 inline constexpr 表(Codegen 写侧 + Stb 读侧共用) - compiler/Codegen.cpp assemble_image:put_* 头字段/行内偏移替换 - compiler/Stb.cpp StbView:读侧偏移替换 - 两侧 static_assert:头大小 = 72 + 型号标识、字段偏移单调、行内布局自洽
This commit is contained in:
@@ -40,6 +40,42 @@ namespace compiler {
|
||||
/// FNV-1a 64 哈希素数。
|
||||
static const uint64_t kFnvPrime = 0x100000001b3ull;
|
||||
|
||||
// ---- 头字段偏移(与 Doc/isa/指令与映像.md 字段表一致;vm 侧另有同值一份)----
|
||||
inline constexpr size_t kOffMagic = 0; ///< 魔数 "STSC"
|
||||
inline constexpr size_t kOffVersion = 4; ///< 格式版本
|
||||
inline constexpr size_t kOffCycleLimit = 8; ///< 每周期指令数上限
|
||||
inline constexpr size_t kOffDtMs = 12; ///< 周期时长(毫秒)
|
||||
inline constexpr size_t kOffProjectHash = 16; ///< 工程哈希(8 字节)
|
||||
inline constexpr size_t kOffEntryFnId = 24; ///< 入口函数 fn_id
|
||||
inline constexpr size_t kOffNGlobals = 28; ///< 全局槽数
|
||||
inline constexpr size_t kOffNI = 32; ///< 输入(I)槽数
|
||||
inline constexpr size_t kOffNQ = 36; ///< 输出(Q)槽数
|
||||
inline constexpr size_t kOffNM = 40; ///< 中间(M)槽数
|
||||
inline constexpr size_t kOffNConsts = 44; ///< 常量表条目数
|
||||
inline constexpr size_t kOffNFuncs = 48; ///< 函数表行数
|
||||
inline constexpr size_t kOffConst = 52; ///< 常量表段偏移
|
||||
inline constexpr size_t kOffFuncs = 56; ///< 函数表段偏移
|
||||
inline constexpr size_t kOffCode = 60; ///< 字节码段偏移
|
||||
inline constexpr size_t kOffFb = 64; ///< FB 表段偏移
|
||||
inline constexpr size_t kOffData = 68; ///< 数据段偏移
|
||||
inline constexpr size_t kOffModelId = 72; ///< 型号标识[32](12.13 修订)
|
||||
|
||||
// ---- 段内行偏移 ----
|
||||
inline constexpr size_t kConstTagOff = 0; ///< 常量表行内:tag
|
||||
inline constexpr size_t kConstValueOff = 4; ///< 常量表行内:value(8 字节)
|
||||
inline constexpr size_t kFuncNregsOff = 0; ///< 函数表行内:nregs
|
||||
inline constexpr size_t kFuncCodeOff = 4; ///< 函数表行内:code_offset(字节)
|
||||
inline constexpr size_t kFuncLenOff = 8; ///< 函数表行内:code_len(指令条数)
|
||||
|
||||
// 防漂移:头布局自洽性(与 Doc/isa/指令与映像.md 冻结表核对)
|
||||
static_assert(kHeaderSize == kOffModelId + kModelIdSize, "header size = 72 + model id[32]");
|
||||
static_assert(kOffData > kOffFb && kOffFb > kOffCode && kOffCode > kOffFuncs &&
|
||||
kOffFuncs > kOffConst,
|
||||
"header field offsets monotonic");
|
||||
static_assert(kOffModelId == kOffData + 4, "model id follows data offset field");
|
||||
static_assert(kConstEntrySize == kConstValueOff + 8, "const row: tag + value:8");
|
||||
static_assert(kFuncRowSize == kFuncLenOff + 4, "func row: nregs/code_offset/code_len");
|
||||
|
||||
/**
|
||||
* @brief 常量表一行。
|
||||
* @details tag 契约:0=BOOL、1=INT、2=TIME。
|
||||
|
||||
Reference in New Issue
Block a user