1#[macro_use]
2mod macros;
3mod arithmetic;
4mod bitwise;
5mod misc;
6
7use crate::{ExitError, ExitReason, ExitSucceed, Machine, Opcode};
8use core::ops::{BitAnd, BitOr, BitXor};
9use primitive_types::{H256, U256};
10
11#[derive(Clone, Eq, PartialEq, Debug)]
12pub enum Control {
13 Continue(usize),
14 Exit(ExitReason),
15 Jump(usize),
16 Trap(Opcode),
17}
18
19fn eval_stop(_state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
20 Control::Exit(ExitSucceed::Stopped.into())
21}
22
23fn eval_add(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
24 op2_u256_tuple!(state, overflowing_add)
25}
26
27fn eval_mul(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
28 op2_u256_tuple!(state, overflowing_mul)
29}
30
31fn eval_sub(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
32 op2_u256_tuple!(state, overflowing_sub)
33}
34
35fn eval_div(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
36 op2_u256_fn!(state, self::arithmetic::div)
37}
38
39fn eval_sdiv(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
40 op2_u256_fn!(state, self::arithmetic::sdiv)
41}
42
43fn eval_mod(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
44 op2_u256_fn!(state, self::arithmetic::rem)
45}
46
47fn eval_smod(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
48 op2_u256_fn!(state, self::arithmetic::srem)
49}
50
51fn eval_addmod(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
52 op3_u256_fn!(state, self::arithmetic::addmod)
53}
54
55fn eval_mulmod(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
56 op3_u256_fn!(state, self::arithmetic::mulmod)
57}
58
59fn eval_exp(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
60 op2_u256_fn!(state, self::arithmetic::exp)
61}
62
63fn eval_signextend(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
64 op2_u256_fn!(state, self::arithmetic::signextend)
65}
66
67fn eval_lt(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
68 op2_u256_bool_ref!(state, lt)
69}
70
71fn eval_gt(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
72 op2_u256_bool_ref!(state, gt)
73}
74
75fn eval_slt(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
76 op2_u256_fn!(state, self::bitwise::slt)
77}
78
79fn eval_sgt(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
80 op2_u256_fn!(state, self::bitwise::sgt)
81}
82
83fn eval_eq(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
84 op2_u256_bool_ref!(state, eq)
85}
86
87fn eval_iszero(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
88 op1_u256_fn!(state, self::bitwise::iszero)
89}
90
91fn eval_and(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
92 op2_u256!(state, bitand)
93}
94
95fn eval_or(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
96 op2_u256!(state, bitor)
97}
98
99fn eval_xor(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
100 op2_u256!(state, bitxor)
101}
102
103fn eval_not(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
104 op1_u256_fn!(state, self::bitwise::not)
105}
106
107fn eval_byte(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
108 op2_u256_fn!(state, self::bitwise::byte)
109}
110
111fn eval_shl(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
112 op2_u256_fn!(state, self::bitwise::shl)
113}
114
115fn eval_shr(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
116 op2_u256_fn!(state, self::bitwise::shr)
117}
118
119fn eval_sar(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
120 op2_u256_fn!(state, self::bitwise::sar)
121}
122
123fn eval_codesize(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
124 self::misc::codesize(state)
125}
126
127fn eval_codecopy(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
128 self::misc::codecopy(state)
129}
130
131fn eval_calldataload(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
132 self::misc::calldataload(state)
133}
134
135fn eval_calldatasize(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
136 self::misc::calldatasize(state)
137}
138
139fn eval_calldatacopy(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
140 self::misc::calldatacopy(state)
141}
142
143fn eval_pop(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
144 self::misc::pop(state)
145}
146
147fn eval_mload(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
148 self::misc::mload(state)
149}
150
151fn eval_mstore(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
152 self::misc::mstore(state)
153}
154
155fn eval_mstore8(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
156 self::misc::mstore8(state)
157}
158
159fn eval_jump(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
160 self::misc::jump(state)
161}
162
163fn eval_jumpi(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
164 self::misc::jumpi(state)
165}
166
167fn eval_pc(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
168 self::misc::pc(state, position)
169}
170
171fn eval_msize(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
172 self::misc::msize(state)
173}
174
175fn eval_jumpdest(_state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
176 Control::Continue(1)
177}
178
179fn eval_mcopy(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
180 self::misc::mcopy(state)
181}
182
183fn eval_push0(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
184 self::misc::push(state, 0, position)
185}
186
187fn eval_push1(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
188 self::misc::push(state, 1, position)
189}
190
191fn eval_push2(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
192 self::misc::push(state, 2, position)
193}
194
195fn eval_push3(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
196 self::misc::push(state, 3, position)
197}
198
199fn eval_push4(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
200 self::misc::push(state, 4, position)
201}
202
203fn eval_push5(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
204 self::misc::push(state, 5, position)
205}
206
207fn eval_push6(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
208 self::misc::push(state, 6, position)
209}
210
211fn eval_push7(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
212 self::misc::push(state, 7, position)
213}
214
215fn eval_push8(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
216 self::misc::push(state, 8, position)
217}
218
219fn eval_push9(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
220 self::misc::push(state, 9, position)
221}
222
223fn eval_push10(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
224 self::misc::push(state, 10, position)
225}
226
227fn eval_push11(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
228 self::misc::push(state, 11, position)
229}
230
231fn eval_push12(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
232 self::misc::push(state, 12, position)
233}
234
235fn eval_push13(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
236 self::misc::push(state, 13, position)
237}
238
239fn eval_push14(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
240 self::misc::push(state, 14, position)
241}
242
243fn eval_push15(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
244 self::misc::push(state, 15, position)
245}
246
247fn eval_push16(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
248 self::misc::push(state, 16, position)
249}
250
251fn eval_push17(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
252 self::misc::push(state, 17, position)
253}
254
255fn eval_push18(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
256 self::misc::push(state, 18, position)
257}
258
259fn eval_push19(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
260 self::misc::push(state, 19, position)
261}
262
263fn eval_push20(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
264 self::misc::push(state, 20, position)
265}
266
267fn eval_push21(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
268 self::misc::push(state, 21, position)
269}
270
271fn eval_push22(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
272 self::misc::push(state, 22, position)
273}
274
275fn eval_push23(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
276 self::misc::push(state, 23, position)
277}
278
279fn eval_push24(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
280 self::misc::push(state, 24, position)
281}
282
283fn eval_push25(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
284 self::misc::push(state, 25, position)
285}
286
287fn eval_push26(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
288 self::misc::push(state, 26, position)
289}
290
291fn eval_push27(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
292 self::misc::push(state, 27, position)
293}
294
295fn eval_push28(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
296 self::misc::push(state, 28, position)
297}
298
299fn eval_push29(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
300 self::misc::push(state, 29, position)
301}
302
303fn eval_push30(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
304 self::misc::push(state, 30, position)
305}
306
307fn eval_push31(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
308 self::misc::push(state, 31, position)
309}
310
311fn eval_push32(state: &mut Machine, _opcode: Opcode, position: usize) -> Control {
312 self::misc::push(state, 32, position)
313}
314
315fn eval_dup1(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
316 self::misc::dup(state, 1)
317}
318
319fn eval_dup2(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
320 self::misc::dup(state, 2)
321}
322
323fn eval_dup3(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
324 self::misc::dup(state, 3)
325}
326
327fn eval_dup4(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
328 self::misc::dup(state, 4)
329}
330
331fn eval_dup5(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
332 self::misc::dup(state, 5)
333}
334
335fn eval_dup6(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
336 self::misc::dup(state, 6)
337}
338
339fn eval_dup7(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
340 self::misc::dup(state, 7)
341}
342
343fn eval_dup8(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
344 self::misc::dup(state, 8)
345}
346
347fn eval_dup9(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
348 self::misc::dup(state, 9)
349}
350
351fn eval_dup10(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
352 self::misc::dup(state, 10)
353}
354
355fn eval_dup11(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
356 self::misc::dup(state, 11)
357}
358
359fn eval_dup12(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
360 self::misc::dup(state, 12)
361}
362
363fn eval_dup13(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
364 self::misc::dup(state, 13)
365}
366
367fn eval_dup14(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
368 self::misc::dup(state, 14)
369}
370
371fn eval_dup15(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
372 self::misc::dup(state, 15)
373}
374
375fn eval_dup16(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
376 self::misc::dup(state, 16)
377}
378
379fn eval_swap1(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
380 self::misc::swap(state, 1)
381}
382
383fn eval_swap2(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
384 self::misc::swap(state, 2)
385}
386
387fn eval_swap3(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
388 self::misc::swap(state, 3)
389}
390
391fn eval_swap4(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
392 self::misc::swap(state, 4)
393}
394
395fn eval_swap5(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
396 self::misc::swap(state, 5)
397}
398
399fn eval_swap6(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
400 self::misc::swap(state, 6)
401}
402
403fn eval_swap7(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
404 self::misc::swap(state, 7)
405}
406
407fn eval_swap8(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
408 self::misc::swap(state, 8)
409}
410
411fn eval_swap9(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
412 self::misc::swap(state, 9)
413}
414
415fn eval_swap10(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
416 self::misc::swap(state, 10)
417}
418
419fn eval_swap11(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
420 self::misc::swap(state, 11)
421}
422
423fn eval_swap12(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
424 self::misc::swap(state, 12)
425}
426
427fn eval_swap13(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
428 self::misc::swap(state, 13)
429}
430
431fn eval_swap14(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
432 self::misc::swap(state, 14)
433}
434
435fn eval_swap15(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
436 self::misc::swap(state, 15)
437}
438
439fn eval_swap16(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
440 self::misc::swap(state, 16)
441}
442
443fn eval_return(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
444 self::misc::ret(state)
445}
446
447fn eval_revert(state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
448 self::misc::revert(state)
449}
450
451fn eval_invalid(_state: &mut Machine, _opcode: Opcode, _position: usize) -> Control {
452 Control::Exit(ExitError::DesignatedInvalid.into())
453}
454
455fn eval_external(_state: &mut Machine, opcode: Opcode, _position: usize) -> Control {
456 Control::Trap(opcode)
457}
458
459#[inline]
460pub fn eval(state: &mut Machine, opcode: Opcode, position: usize) -> Control {
461 static TABLE: [fn(state: &mut Machine, opcode: Opcode, position: usize) -> Control; 256] = {
462 let mut table = [eval_external as _; 256];
463
464 table[Opcode::STOP.as_usize()] = eval_stop as _;
465 table[Opcode::ADD.as_usize()] = eval_add as _;
466 table[Opcode::MUL.as_usize()] = eval_mul as _;
467 table[Opcode::SUB.as_usize()] = eval_sub as _;
468 table[Opcode::DIV.as_usize()] = eval_div as _;
469 table[Opcode::SDIV.as_usize()] = eval_sdiv as _;
470 table[Opcode::MOD.as_usize()] = eval_mod as _;
471 table[Opcode::SMOD.as_usize()] = eval_smod as _;
472 table[Opcode::ADDMOD.as_usize()] = eval_addmod as _;
473 table[Opcode::MULMOD.as_usize()] = eval_mulmod as _;
474 table[Opcode::EXP.as_usize()] = eval_exp as _;
475 table[Opcode::SIGNEXTEND.as_usize()] = eval_signextend as _;
476 table[Opcode::LT.as_usize()] = eval_lt as _;
477 table[Opcode::GT.as_usize()] = eval_gt as _;
478 table[Opcode::SLT.as_usize()] = eval_slt as _;
479 table[Opcode::SGT.as_usize()] = eval_sgt as _;
480 table[Opcode::EQ.as_usize()] = eval_eq as _;
481 table[Opcode::ISZERO.as_usize()] = eval_iszero as _;
482 table[Opcode::AND.as_usize()] = eval_and as _;
483 table[Opcode::OR.as_usize()] = eval_or as _;
484 table[Opcode::XOR.as_usize()] = eval_xor as _;
485 table[Opcode::NOT.as_usize()] = eval_not as _;
486 table[Opcode::BYTE.as_usize()] = eval_byte as _;
487 table[Opcode::SHL.as_usize()] = eval_shl as _;
488 table[Opcode::SHR.as_usize()] = eval_shr as _;
489 table[Opcode::SAR.as_usize()] = eval_sar as _;
490 table[Opcode::CODESIZE.as_usize()] = eval_codesize as _;
491 table[Opcode::CODECOPY.as_usize()] = eval_codecopy as _;
492 table[Opcode::CALLDATALOAD.as_usize()] = eval_calldataload as _;
493 table[Opcode::CALLDATASIZE.as_usize()] = eval_calldatasize as _;
494 table[Opcode::CALLDATACOPY.as_usize()] = eval_calldatacopy as _;
495 table[Opcode::POP.as_usize()] = eval_pop as _;
496 table[Opcode::MLOAD.as_usize()] = eval_mload as _;
497 table[Opcode::MSTORE.as_usize()] = eval_mstore as _;
498 table[Opcode::MSTORE8.as_usize()] = eval_mstore8 as _;
499 table[Opcode::JUMP.as_usize()] = eval_jump as _;
500 table[Opcode::JUMPI.as_usize()] = eval_jumpi as _;
501 table[Opcode::PC.as_usize()] = eval_pc as _;
502 table[Opcode::MSIZE.as_usize()] = eval_msize as _;
503 table[Opcode::JUMPDEST.as_usize()] = eval_jumpdest as _;
504 table[Opcode::MCOPY.as_usize()] = eval_mcopy as _;
505
506 table[Opcode::PUSH0.as_usize()] = eval_push0 as _;
507 table[Opcode::PUSH1.as_usize()] = eval_push1 as _;
508 table[Opcode::PUSH2.as_usize()] = eval_push2 as _;
509 table[Opcode::PUSH3.as_usize()] = eval_push3 as _;
510 table[Opcode::PUSH4.as_usize()] = eval_push4 as _;
511 table[Opcode::PUSH5.as_usize()] = eval_push5 as _;
512 table[Opcode::PUSH6.as_usize()] = eval_push6 as _;
513 table[Opcode::PUSH7.as_usize()] = eval_push7 as _;
514 table[Opcode::PUSH8.as_usize()] = eval_push8 as _;
515 table[Opcode::PUSH9.as_usize()] = eval_push9 as _;
516 table[Opcode::PUSH10.as_usize()] = eval_push10 as _;
517 table[Opcode::PUSH11.as_usize()] = eval_push11 as _;
518 table[Opcode::PUSH12.as_usize()] = eval_push12 as _;
519 table[Opcode::PUSH13.as_usize()] = eval_push13 as _;
520 table[Opcode::PUSH14.as_usize()] = eval_push14 as _;
521 table[Opcode::PUSH15.as_usize()] = eval_push15 as _;
522 table[Opcode::PUSH16.as_usize()] = eval_push16 as _;
523 table[Opcode::PUSH17.as_usize()] = eval_push17 as _;
524 table[Opcode::PUSH18.as_usize()] = eval_push18 as _;
525 table[Opcode::PUSH19.as_usize()] = eval_push19 as _;
526 table[Opcode::PUSH20.as_usize()] = eval_push20 as _;
527 table[Opcode::PUSH21.as_usize()] = eval_push21 as _;
528 table[Opcode::PUSH22.as_usize()] = eval_push22 as _;
529 table[Opcode::PUSH23.as_usize()] = eval_push23 as _;
530 table[Opcode::PUSH24.as_usize()] = eval_push24 as _;
531 table[Opcode::PUSH25.as_usize()] = eval_push25 as _;
532 table[Opcode::PUSH26.as_usize()] = eval_push26 as _;
533 table[Opcode::PUSH27.as_usize()] = eval_push27 as _;
534 table[Opcode::PUSH28.as_usize()] = eval_push28 as _;
535 table[Opcode::PUSH29.as_usize()] = eval_push29 as _;
536 table[Opcode::PUSH30.as_usize()] = eval_push30 as _;
537 table[Opcode::PUSH31.as_usize()] = eval_push31 as _;
538 table[Opcode::PUSH32.as_usize()] = eval_push32 as _;
539
540 table[Opcode::DUP1.as_usize()] = eval_dup1 as _;
541 table[Opcode::DUP2.as_usize()] = eval_dup2 as _;
542 table[Opcode::DUP3.as_usize()] = eval_dup3 as _;
543 table[Opcode::DUP4.as_usize()] = eval_dup4 as _;
544 table[Opcode::DUP5.as_usize()] = eval_dup5 as _;
545 table[Opcode::DUP6.as_usize()] = eval_dup6 as _;
546 table[Opcode::DUP7.as_usize()] = eval_dup7 as _;
547 table[Opcode::DUP8.as_usize()] = eval_dup8 as _;
548 table[Opcode::DUP9.as_usize()] = eval_dup9 as _;
549 table[Opcode::DUP10.as_usize()] = eval_dup10 as _;
550 table[Opcode::DUP11.as_usize()] = eval_dup11 as _;
551 table[Opcode::DUP12.as_usize()] = eval_dup12 as _;
552 table[Opcode::DUP13.as_usize()] = eval_dup13 as _;
553 table[Opcode::DUP14.as_usize()] = eval_dup14 as _;
554 table[Opcode::DUP15.as_usize()] = eval_dup15 as _;
555 table[Opcode::DUP16.as_usize()] = eval_dup16 as _;
556
557 table[Opcode::SWAP1.as_usize()] = eval_swap1 as _;
558 table[Opcode::SWAP2.as_usize()] = eval_swap2 as _;
559 table[Opcode::SWAP3.as_usize()] = eval_swap3 as _;
560 table[Opcode::SWAP4.as_usize()] = eval_swap4 as _;
561 table[Opcode::SWAP5.as_usize()] = eval_swap5 as _;
562 table[Opcode::SWAP6.as_usize()] = eval_swap6 as _;
563 table[Opcode::SWAP7.as_usize()] = eval_swap7 as _;
564 table[Opcode::SWAP8.as_usize()] = eval_swap8 as _;
565 table[Opcode::SWAP9.as_usize()] = eval_swap9 as _;
566 table[Opcode::SWAP10.as_usize()] = eval_swap10 as _;
567 table[Opcode::SWAP11.as_usize()] = eval_swap11 as _;
568 table[Opcode::SWAP12.as_usize()] = eval_swap12 as _;
569 table[Opcode::SWAP13.as_usize()] = eval_swap13 as _;
570 table[Opcode::SWAP14.as_usize()] = eval_swap14 as _;
571 table[Opcode::SWAP15.as_usize()] = eval_swap15 as _;
572 table[Opcode::SWAP16.as_usize()] = eval_swap16 as _;
573
574 table[Opcode::RETURN.as_usize()] = eval_return as _;
575 table[Opcode::REVERT.as_usize()] = eval_revert as _;
576 table[Opcode::INVALID.as_usize()] = eval_invalid as _;
577
578 table
579 };
580
581 TABLE[opcode.as_usize()](state, opcode, position)
582}