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 ;)