# 机器定义:指令集与类型的唯一事实来源(只给编译器) # 格式见 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/instance;format: 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"]]