Files
Interpreter/compiler/machine.toml
T
Admin 4dab914e7c 阶段 A 步骤 2:machine.toml 落地(meta/type/op/fb)。
- meta:STATOR v1(参与 .stb 型号标识)
- type 3 条:BOOL(uint8, range=[0,1], tag=0) / INT(int16, tag=1) / TIME(int64, tag=2)
- op 34 条:全属性必填,与 kOpDefs 逐条一致(26 PLAIN + 8 INSTANCE=CAL)
- fb 8 条:opcode 与 op 行一致,字段类型命中 type 表
- 核对程序通过:types=3 ops=34 fbs=8 ALL CONSISTENT
2026-08-21 22:07:04 +08:00

343 lines
5.3 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 机器定义:指令集与类型的唯一事实来源(只给编译器)
# 格式见 Doc/isa/指令配置.md;全属性必填,与代码强校验一致。
[meta]
name = "STATOR" # 型号名(参与 .stb 型号标识[32])
version = 1 # 指令集版本(参与 .stb 型号标识[32])
# ---- 类型:编译器内建基元(bit/int8/int16/int32/int64/uint8/uint16/uint32/uint64/float32/float64
# 配置类型 = 基元别名(+ 值域约束 + .stb 契约 tag
[[type]]
name = "BOOL"
base = "uint8"
range = [0, 1] # 值域约束:只允许 0/1
tag = 0
[[type]]
name = "INT"
base = "int16"
tag = 1
[[type]]
name = "TIME"
base = "int64"
tag = 2
# ---- 指令(全属性必填;class: plain/instanceformat: RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE
[[op]]
name = "MOVE"
opcode = 0
class = "plain"
format = "RR"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "LOADK"
opcode = 1
class = "plain"
format = "IMM"
params = ["rd", "const_id"]
enabled = true
[[op]]
name = "NOT"
opcode = 2
class = "plain"
format = "RR"
params = ["rd", "rs"]
enabled = true
[[op]]
name = "AND"
opcode = 3
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "OR"
opcode = 4
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "ADD"
opcode = 5
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "SUB"
opcode = 6
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "MUL"
opcode = 7
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "DIV"
opcode = 8
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_EQ"
opcode = 9
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_NE"
opcode = 10
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_LT"
opcode = 11
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_LE"
opcode = 12
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_GT"
opcode = 13
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "CMP_GE"
opcode = 14
class = "plain"
format = "RRR"
params = ["rd", "ra", "rb"]
enabled = true
[[op]]
name = "JMP"
opcode = 15
class = "plain"
format = "JMP"
params = ["off"]
enabled = true
[[op]]
name = "JT"
opcode = 16
class = "plain"
format = "JC"
params = ["r", "off"]
enabled = true
[[op]]
name = "JF"
opcode = 17
class = "plain"
format = "JC"
params = ["r", "off"]
enabled = true
[[op]]
name = "LOAD_I"
opcode = 18
class = "plain"
format = "SLOT"
params = ["rd", "slot"]
enabled = true
[[op]]
name = "STORE_Q"
opcode = 19
class = "plain"
format = "SLOT"
params = ["rs", "slot"]
enabled = true
[[op]]
name = "LOAD_M"
opcode = 20
class = "plain"
format = "SLOT"
params = ["rd", "slot"]
enabled = true
[[op]]
name = "STORE_M"
opcode = 21
class = "plain"
format = "SLOT"
params = ["rs", "slot"]
enabled = true
[[op]]
name = "LOAD_GLOBAL"
opcode = 22
class = "plain"
format = "SLOT"
params = ["rd", "slot"]
enabled = true
[[op]]
name = "STORE_GLOBAL"
opcode = 23
class = "plain"
format = "SLOT"
params = ["rs", "slot"]
enabled = true
[[op]]
name = "CAL_TON"
opcode = 24
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_TOF"
opcode = 25
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_TP"
opcode = 26
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_CTU"
opcode = 27
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_CTD"
opcode = 28
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_CTUD"
opcode = 29
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_R_TRIG"
opcode = 30
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CAL_F_TRIG"
opcode = 31
class = "instance"
format = "CAL"
params = ["instance"]
enabled = true
[[op]]
name = "CALL"
opcode = 32
class = "plain"
format = "CALL"
params = ["fn_id"]
enabled = true
[[op]]
name = "RET"
opcode = 33
class = "plain"
format = "NONE"
params = []
enabled = true
# ---- 内建 FB(布局登记;opcode 与 op 行强校验一致;字段类型命中 type 表)
[[fb]]
name = "ton"
opcode = 24
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "tof"
opcode = 25
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "tp"
opcode = 26
fields = [["in", "BOOL"], ["pt", "TIME"], ["q", "BOOL"], ["et", "TIME"]]
[[fb]]
name = "ctu"
opcode = 27
fields = [["cu", "BOOL"], ["r", "BOOL"], ["pv", "INT"], ["q", "BOOL"], ["cv", "INT"]]
[[fb]]
name = "ctd"
opcode = 28
fields = [["cd", "BOOL"], ["ld", "BOOL"], ["pv", "INT"], ["q", "BOOL"], ["cv", "INT"]]
[[fb]]
name = "ctud"
opcode = 29
fields = [["cu", "BOOL"], ["cd", "BOOL"], ["r", "BOOL"], ["lu", "BOOL"],
["pv", "INT"], ["qu", "BOOL"], ["qd", "BOOL"], ["cv", "INT"]]
[[fb]]
name = "r_trig"
opcode = 30
fields = [["clk", "BOOL"], ["q", "BOOL"]]
[[fb]]
name = "f_trig"
opcode = 31
fields = [["clk", "BOOL"], ["q", "BOOL"]]