Skip to main content

wasi_assembler/program/
instructions.rs

1use super::types::WasmValueType;
2
3/// WASM 指令
4#[derive(Copy, Debug, Clone)]
5pub enum WasiInstruction {
6    /// 无操作
7    Nop,
8    /// 不可达
9    Unreachable,
10    /// 块开始
11    Block {
12        block_type: Option<WasmValueType>,
13    },
14    /// 循环开始
15    Loop {
16        block_type: Option<WasmValueType>,
17    },
18    /// 条件分支
19    If {
20        block_type: Option<WasmValueType>,
21    },
22    /// Else 分支
23    Else,
24    /// 块结束
25    End,
26    /// 分支
27    Br {
28        label_index: u32,
29    },
30    /// 条件分支
31    BrIf {
32        label_index: u32,
33    },
34    /// 返回
35    Return,
36    /// 函数调用
37    Call {
38        function_index: u32,
39    },
40    /// 丢弃栈顶值
41    Drop,
42    /// 选择
43    Select,
44    /// 加载局部变量
45    LocalGet {
46        local_index: u32,
47    },
48    /// 设置局部变量
49    LocalSet {
50        local_index: u32,
51    },
52    /// 加载内存
53    I32Load {
54        offset: u32,
55        align: u32,
56    },
57    I64Load {
58        offset: u32,
59        align: u32,
60    },
61    F32Load {
62        offset: u32,
63        align: u32,
64    },
65    F64Load {
66        offset: u32,
67        align: u32,
68    },
69    /// 存储内存
70    I32Store {
71        offset: u32,
72        align: u32,
73    },
74    I64Store {
75        offset: u32,
76        align: u32,
77    },
78    F32Store {
79        offset: u32,
80        align: u32,
81    },
82    F64Store {
83        offset: u32,
84        align: u32,
85    },
86    /// 结构体操作 (GC Proposal)
87    StructNew {
88        type_index: u32,
89    },
90    StructGet {
91        type_index: u32,
92        field_index: u32,
93    },
94    StructSet {
95        type_index: u32,
96        field_index: u32,
97    },
98    /// 加载常量
99    I32Const {
100        value: i32,
101    },
102    I64Const {
103        value: i64,
104    },
105    F32Const {
106        value: f32,
107    },
108    F64Const {
109        value: f64,
110    },
111    /// 算术运算
112    I32Add,
113    I32Sub,
114    I32Mul,
115    I32DivS,
116    I32DivU,
117    I32RemS,
118    I32RemU,
119    I32And,
120    I32Or,
121    I32Xor,
122    I32Shl,
123    I32ShrS,
124    I32ShrU,
125    I32Rotl,
126    I32Rotr,
127    /// 比较运算
128    I32Eqz,
129    I32Eq,
130    I32Ne,
131    I32LtS,
132    I32LtU,
133    I32GtS,
134    I32GtU,
135    I32LeS,
136    I32LeU,
137    I32GeS,
138    I32GeU,
139    /// 异步任务指令 (WASIp3)
140    TaskBackpressure,
141    TaskReturn,
142    TaskWait,
143    TaskPoll,
144    TaskYield,
145    /// 错误上下文指令 (WASIp3)
146    ErrorContextNew,
147    ErrorContextDebugMessage,
148}