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 I32Clz,
27 I32Ctz,
28 I32Popcnt,
29
30 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 I32Eqz,
49
50 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 I64Clz,
77 I64Ctz,
78 I64Popcnt,
79
80 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 I64Eqz,
99
100 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 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 Jmp(u32),
195 JmpIf(u32),
196 JmpEither(u32, u32),
197 JmpTable(Vec<u32>, u32),
198
199 NativeInvoke(u32),
200 Memcpy, 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}