wasm_core/
opcode.rs

1use prelude::{Vec, String};
2
3#[derive(Clone, Debug, Serialize, Deserialize)]
4pub enum Opcode {
5    Drop,
6    Select,
7
8    GetLocal(u32),
9    SetLocal(u32),
10    TeeLocal(u32),
11    GetGlobal(u32),
12    SetGlobal(u32),
13
14    CurrentMemory,
15    GrowMemory,
16
17    Nop,
18    Unreachable,
19    Return,
20    Call(u32),
21    CallIndirect(u32),
22
23    I32Const(i32),
24
25    // iunop
26    I32Clz,
27    I32Ctz,
28    I32Popcnt,
29
30    // ibinop
31    I32Add,
32    I32Sub,
33    I32Mul,
34    I32DivU,
35    I32DivS,
36    I32RemU,
37    I32RemS,
38    I32And,
39    I32Or,
40    I32Xor,
41    I32Shl,
42    I32ShrU,
43    I32ShrS,
44    I32Rotl,
45    I32Rotr,
46
47    // itestop
48    I32Eqz,
49
50    // irelop
51    I32Eq,
52    I32Ne,
53    I32LtU,
54    I32LtS,
55    I32LeU,
56    I32LeS,
57    I32GtU,
58    I32GtS,
59    I32GeU,
60    I32GeS,
61
62    I32WrapI64,
63
64    I32Load(Memarg),
65    I32Store(Memarg),
66    I32Load8U(Memarg),
67    I32Load8S(Memarg),
68    I32Load16U(Memarg),
69    I32Load16S(Memarg),
70    I32Store8(Memarg),
71    I32Store16(Memarg),
72
73    I64Const(i64),
74
75    // iunop
76    I64Clz,
77    I64Ctz,
78    I64Popcnt,
79
80    // ibinop
81    I64Add,
82    I64Sub,
83    I64Mul,
84    I64DivU,
85    I64DivS,
86    I64RemU,
87    I64RemS,
88    I64And,
89    I64Or,
90    I64Xor,
91    I64Shl,
92    I64ShrU,
93    I64ShrS,
94    I64Rotl,
95    I64Rotr,
96
97    // itestop
98    I64Eqz,
99
100    // irelop
101    I64Eq,
102    I64Ne,
103    I64LtU,
104    I64LtS,
105    I64LeU,
106    I64LeS,
107    I64GtU,
108    I64GtS,
109    I64GeU,
110    I64GeS,
111
112    I64ExtendI32U,
113    I64ExtendI32S,
114
115    I64Load(Memarg),
116    I64Store(Memarg),
117    I64Load8U(Memarg),
118    I64Load8S(Memarg),
119    I64Load16U(Memarg),
120    I64Load16S(Memarg),
121    I64Load32U(Memarg),
122    I64Load32S(Memarg),
123    I64Store8(Memarg),
124    I64Store16(Memarg),
125    I64Store32(Memarg),
126
127    // Floating point
128    F32Const(u32),
129    F64Const(u64),
130    F32ReinterpretI32,
131    F64ReinterpretI64,
132    I32ReinterpretF32,
133    I64ReinterpretF64,
134    I32TruncSF32,
135    I32TruncUF32,
136    I32TruncSF64,
137    I32TruncUF64,
138    I64TruncSF32,
139    I64TruncUF32,
140    I64TruncSF64,
141    I64TruncUF64,
142    F32ConvertSI32,
143    F32ConvertUI32,
144    F32ConvertSI64,
145    F32ConvertUI64,
146    F64ConvertSI32,
147    F64ConvertUI32,
148    F64ConvertSI64,
149    F64ConvertUI64,
150    F32DemoteF64,
151    F64PromoteF32,
152    F32Abs,
153    F32Neg,
154    F32Ceil,
155    F32Floor,
156    F32Trunc,
157    F32Nearest,
158    F32Sqrt,
159    F32Add,
160    F32Sub,
161    F32Mul,
162    F32Div,
163    F32Min,
164    F32Max,
165    F32Copysign,
166    F32Eq,
167    F32Ne,
168    F32Lt,
169    F32Gt,
170    F32Le,
171    F32Ge,
172    F64Abs,
173    F64Neg,
174    F64Ceil,
175    F64Floor,
176    F64Trunc,
177    F64Nearest,
178    F64Sqrt,
179    F64Add,
180    F64Sub,
181    F64Mul,
182    F64Div,
183    F64Min,
184    F64Max,
185    F64Copysign,
186    F64Eq,
187    F64Ne,
188    F64Lt,
189    F64Gt,
190    F64Le,
191    F64Ge,
192
193    // wasm-core specific opcodes here. Should be generated by front-end.
194    Jmp(u32),
195    JmpIf(u32),
196    JmpEither(u32, u32),
197    JmpTable(Vec<u32>, u32),
198
199    NativeInvoke(u32),
200    Memcpy, // Pops: (dest, src, n_bytes)
201
202    NotImplemented(String)
203}
204
205#[derive(Copy, Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
206pub struct Memarg {
207    pub offset: u32,
208    pub align: u32
209}