Arithmetic
The arithmetic operators have a lot of differences between WASM and EVM bytecode, all of the operand requires the order of the stack are reserved…
Sub, Div, Mod and Bitwise Operand
i32.const 2 ;; PUSH1 0x02
i32.const 1 ;; PUSH1 0x01
sub ;; SWAP1
;; SUB
This SWAP1 sticks to all of these reversed order instructions, will introduce
macros to optimize it in v0.3.0.
Comparison
The order of comparison are reversed as well, but however, they are paired!
i32.const 1 ;; PUSH1 0x01
i32.const 0 ;; PUSH1 0x00
gt ;; LT
This is insane, but works perfectly, don’t think too much about it, focus
on if the output is 0 or 1 ;)