kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

wasm_insn_table.c (19710B)


      1 #include "wasm/wasm_insn_table.h"
      2 
      3 /* The one map. Each row is {kind, prefix, opcode-byte, operand-class, mnemonic}.
      4  * Rows are designated-initialized by kind so the array stays enum-indexed (the
      5  * mnemonic helper, encode's O(1) lookup, and the byte->kind reverse index all
      6  * rely on that). Opcode bytes and prefixes mirror the Wasm binary format;
      7  * operand classes mirror how encode writes / decode reads / WAT parses the
      8  * immediates. */
      9 #define I(k, pfx, b, oc, mn) \
     10   [k] = {(uint8_t)(k), (uint8_t)(pfx), (uint8_t)(b), (uint8_t)(oc), mn}
     11 
     12 static const WasmInsnInfo WASM_INSN_TABLE[] = {
     13     I(WASM_INSN_UNREACHABLE, WASM_PREFIX_NONE, 0x00, WASM_OC_NONE,
     14       "unreachable"),
     15     I(WASM_INSN_NOP, WASM_PREFIX_NONE, 0x01, WASM_OC_NONE, "nop"),
     16     I(WASM_INSN_BLOCK, WASM_PREFIX_NONE, 0x02, WASM_OC_BLOCK_TYPE, "block"),
     17     I(WASM_INSN_LOOP, WASM_PREFIX_NONE, 0x03, WASM_OC_BLOCK_TYPE, "loop"),
     18     I(WASM_INSN_IF, WASM_PREFIX_NONE, 0x04, WASM_OC_BLOCK_TYPE, "if"),
     19     I(WASM_INSN_ELSE, WASM_PREFIX_NONE, 0x05, WASM_OC_NONE, "else"),
     20     I(WASM_INSN_END, WASM_PREFIX_NONE, 0x0b, WASM_OC_NONE, "end"),
     21     I(WASM_INSN_BR, WASM_PREFIX_NONE, 0x0c, WASM_OC_IDX, "br"),
     22     I(WASM_INSN_BR_IF, WASM_PREFIX_NONE, 0x0d, WASM_OC_IDX, "br_if"),
     23     I(WASM_INSN_BR_TABLE, WASM_PREFIX_NONE, 0x0e, WASM_OC_BR_TABLE, "br_table"),
     24     I(WASM_INSN_SELECT, WASM_PREFIX_NONE, 0x1b, WASM_OC_NONE, "select"),
     25     I(WASM_INSN_F32_CONST, WASM_PREFIX_NONE, 0x43, WASM_OC_FP, "f32.const"),
     26     I(WASM_INSN_F64_CONST, WASM_PREFIX_NONE, 0x44, WASM_OC_FP, "f64.const"),
     27     I(WASM_INSN_I32_CONST, WASM_PREFIX_NONE, 0x41, WASM_OC_SLEB, "i32.const"),
     28     I(WASM_INSN_I64_CONST, WASM_PREFIX_NONE, 0x42, WASM_OC_SLEB, "i64.const"),
     29     I(WASM_INSN_LOCAL_GET, WASM_PREFIX_NONE, 0x20, WASM_OC_IDX, "local.get"),
     30     I(WASM_INSN_LOCAL_SET, WASM_PREFIX_NONE, 0x21, WASM_OC_IDX, "local.set"),
     31     I(WASM_INSN_LOCAL_TEE, WASM_PREFIX_NONE, 0x22, WASM_OC_IDX, "local.tee"),
     32     I(WASM_INSN_CALL, WASM_PREFIX_NONE, 0x10, WASM_OC_IDX, "call"),
     33     I(WASM_INSN_CALL_INDIRECT, WASM_PREFIX_NONE, 0x11, WASM_OC_CALL_INDIRECT,
     34       "call_indirect"),
     35     I(WASM_INSN_RETURN_CALL, WASM_PREFIX_NONE, 0x12, WASM_OC_IDX,
     36       "return_call"),
     37     I(WASM_INSN_RETURN_CALL_INDIRECT, WASM_PREFIX_NONE, 0x13,
     38       WASM_OC_CALL_INDIRECT, "return_call_indirect"),
     39     I(WASM_INSN_REF_NULL, WASM_PREFIX_NONE, 0xd0, WASM_OC_REF_NULL, "ref.null"),
     40     I(WASM_INSN_REF_FUNC, WASM_PREFIX_NONE, 0xd2, WASM_OC_IDX, "ref.func"),
     41     I(WASM_INSN_REF_IS_NULL, WASM_PREFIX_NONE, 0xd1, WASM_OC_NONE,
     42       "ref.is_null"),
     43     I(WASM_INSN_CALL_REF, WASM_PREFIX_NONE, 0x14, WASM_OC_TYPED_REF,
     44       "call_ref"),
     45     I(WASM_INSN_RETURN_CALL_REF, WASM_PREFIX_NONE, 0x15, WASM_OC_TYPED_REF,
     46       "return_call_ref"),
     47     I(WASM_INSN_GLOBAL_GET, WASM_PREFIX_NONE, 0x23, WASM_OC_IDX, "global.get"),
     48     I(WASM_INSN_GLOBAL_SET, WASM_PREFIX_NONE, 0x24, WASM_OC_IDX, "global.set"),
     49     I(WASM_INSN_RETURN, WASM_PREFIX_NONE, 0x0f, WASM_OC_NONE, "return"),
     50     I(WASM_INSN_DROP, WASM_PREFIX_NONE, 0x1a, WASM_OC_NONE, "drop"),
     51     I(WASM_INSN_I32_LOAD, WASM_PREFIX_NONE, 0x28, WASM_OC_MEMARG, "i32.load"),
     52     I(WASM_INSN_I64_LOAD, WASM_PREFIX_NONE, 0x29, WASM_OC_MEMARG, "i64.load"),
     53     I(WASM_INSN_F32_LOAD, WASM_PREFIX_NONE, 0x2a, WASM_OC_MEMARG, "f32.load"),
     54     I(WASM_INSN_F64_LOAD, WASM_PREFIX_NONE, 0x2b, WASM_OC_MEMARG, "f64.load"),
     55     I(WASM_INSN_I32_LOAD8_S, WASM_PREFIX_NONE, 0x2c, WASM_OC_MEMARG,
     56       "i32.load8_s"),
     57     I(WASM_INSN_I32_LOAD8_U, WASM_PREFIX_NONE, 0x2d, WASM_OC_MEMARG,
     58       "i32.load8_u"),
     59     I(WASM_INSN_I32_LOAD16_S, WASM_PREFIX_NONE, 0x2e, WASM_OC_MEMARG,
     60       "i32.load16_s"),
     61     I(WASM_INSN_I32_LOAD16_U, WASM_PREFIX_NONE, 0x2f, WASM_OC_MEMARG,
     62       "i32.load16_u"),
     63     I(WASM_INSN_I64_LOAD8_S, WASM_PREFIX_NONE, 0x30, WASM_OC_MEMARG,
     64       "i64.load8_s"),
     65     I(WASM_INSN_I64_LOAD8_U, WASM_PREFIX_NONE, 0x31, WASM_OC_MEMARG,
     66       "i64.load8_u"),
     67     I(WASM_INSN_I64_LOAD16_S, WASM_PREFIX_NONE, 0x32, WASM_OC_MEMARG,
     68       "i64.load16_s"),
     69     I(WASM_INSN_I64_LOAD16_U, WASM_PREFIX_NONE, 0x33, WASM_OC_MEMARG,
     70       "i64.load16_u"),
     71     I(WASM_INSN_I64_LOAD32_S, WASM_PREFIX_NONE, 0x34, WASM_OC_MEMARG,
     72       "i64.load32_s"),
     73     I(WASM_INSN_I64_LOAD32_U, WASM_PREFIX_NONE, 0x35, WASM_OC_MEMARG,
     74       "i64.load32_u"),
     75     I(WASM_INSN_I32_STORE, WASM_PREFIX_NONE, 0x36, WASM_OC_MEMARG, "i32.store"),
     76     I(WASM_INSN_I64_STORE, WASM_PREFIX_NONE, 0x37, WASM_OC_MEMARG, "i64.store"),
     77     I(WASM_INSN_F32_STORE, WASM_PREFIX_NONE, 0x38, WASM_OC_MEMARG, "f32.store"),
     78     I(WASM_INSN_F64_STORE, WASM_PREFIX_NONE, 0x39, WASM_OC_MEMARG, "f64.store"),
     79     I(WASM_INSN_I32_STORE8, WASM_PREFIX_NONE, 0x3a, WASM_OC_MEMARG,
     80       "i32.store8"),
     81     I(WASM_INSN_I32_STORE16, WASM_PREFIX_NONE, 0x3b, WASM_OC_MEMARG,
     82       "i32.store16"),
     83     I(WASM_INSN_I64_STORE8, WASM_PREFIX_NONE, 0x3c, WASM_OC_MEMARG,
     84       "i64.store8"),
     85     I(WASM_INSN_I64_STORE16, WASM_PREFIX_NONE, 0x3d, WASM_OC_MEMARG,
     86       "i64.store16"),
     87     I(WASM_INSN_I64_STORE32, WASM_PREFIX_NONE, 0x3e, WASM_OC_MEMARG,
     88       "i64.store32"),
     89     I(WASM_INSN_MEMORY_SIZE, WASM_PREFIX_NONE, 0x3f, WASM_OC_MEM_IDX,
     90       "memory.size"),
     91     I(WASM_INSN_MEMORY_GROW, WASM_PREFIX_NONE, 0x40, WASM_OC_MEM_IDX,
     92       "memory.grow"),
     93     I(WASM_INSN_ATOMIC_FENCE, WASM_PREFIX_FE, 0x03, WASM_OC_FENCE,
     94       "atomic.fence"),
     95     I(WASM_INSN_I32_ATOMIC_LOAD, WASM_PREFIX_FE, 0x10, WASM_OC_MEMARG,
     96       "i32.atomic.load"),
     97     I(WASM_INSN_I64_ATOMIC_LOAD, WASM_PREFIX_FE, 0x11, WASM_OC_MEMARG,
     98       "i64.atomic.load"),
     99     I(WASM_INSN_I32_ATOMIC_LOAD8_U, WASM_PREFIX_FE, 0x12, WASM_OC_MEMARG,
    100       "i32.atomic.load8_u"),
    101     I(WASM_INSN_I32_ATOMIC_LOAD16_U, WASM_PREFIX_FE, 0x13, WASM_OC_MEMARG,
    102       "i32.atomic.load16_u"),
    103     I(WASM_INSN_I64_ATOMIC_LOAD8_U, WASM_PREFIX_FE, 0x14, WASM_OC_MEMARG,
    104       "i64.atomic.load8_u"),
    105     I(WASM_INSN_I64_ATOMIC_LOAD16_U, WASM_PREFIX_FE, 0x15, WASM_OC_MEMARG,
    106       "i64.atomic.load16_u"),
    107     I(WASM_INSN_I64_ATOMIC_LOAD32_U, WASM_PREFIX_FE, 0x16, WASM_OC_MEMARG,
    108       "i64.atomic.load32_u"),
    109     I(WASM_INSN_I32_ATOMIC_STORE, WASM_PREFIX_FE, 0x17, WASM_OC_MEMARG,
    110       "i32.atomic.store"),
    111     I(WASM_INSN_I64_ATOMIC_STORE, WASM_PREFIX_FE, 0x18, WASM_OC_MEMARG,
    112       "i64.atomic.store"),
    113     I(WASM_INSN_I32_ATOMIC_STORE8, WASM_PREFIX_FE, 0x19, WASM_OC_MEMARG,
    114       "i32.atomic.store8"),
    115     I(WASM_INSN_I32_ATOMIC_STORE16, WASM_PREFIX_FE, 0x1a, WASM_OC_MEMARG,
    116       "i32.atomic.store16"),
    117     I(WASM_INSN_I64_ATOMIC_STORE8, WASM_PREFIX_FE, 0x1b, WASM_OC_MEMARG,
    118       "i64.atomic.store8"),
    119     I(WASM_INSN_I64_ATOMIC_STORE16, WASM_PREFIX_FE, 0x1c, WASM_OC_MEMARG,
    120       "i64.atomic.store16"),
    121     I(WASM_INSN_I64_ATOMIC_STORE32, WASM_PREFIX_FE, 0x1d, WASM_OC_MEMARG,
    122       "i64.atomic.store32"),
    123     I(WASM_INSN_I32_ATOMIC_RMW_ADD, WASM_PREFIX_FE, 0x1e, WASM_OC_MEMARG,
    124       "i32.atomic.rmw.add"),
    125     I(WASM_INSN_I64_ATOMIC_RMW_ADD, WASM_PREFIX_FE, 0x1f, WASM_OC_MEMARG,
    126       "i64.atomic.rmw.add"),
    127     I(WASM_INSN_I32_ATOMIC_RMW_SUB, WASM_PREFIX_FE, 0x25, WASM_OC_MEMARG,
    128       "i32.atomic.rmw.sub"),
    129     I(WASM_INSN_I64_ATOMIC_RMW_SUB, WASM_PREFIX_FE, 0x26, WASM_OC_MEMARG,
    130       "i64.atomic.rmw.sub"),
    131     I(WASM_INSN_I32_ATOMIC_RMW_AND, WASM_PREFIX_FE, 0x2c, WASM_OC_MEMARG,
    132       "i32.atomic.rmw.and"),
    133     I(WASM_INSN_I64_ATOMIC_RMW_AND, WASM_PREFIX_FE, 0x2d, WASM_OC_MEMARG,
    134       "i64.atomic.rmw.and"),
    135     I(WASM_INSN_I32_ATOMIC_RMW_OR, WASM_PREFIX_FE, 0x33, WASM_OC_MEMARG,
    136       "i32.atomic.rmw.or"),
    137     I(WASM_INSN_I64_ATOMIC_RMW_OR, WASM_PREFIX_FE, 0x34, WASM_OC_MEMARG,
    138       "i64.atomic.rmw.or"),
    139     I(WASM_INSN_I32_ATOMIC_RMW_XOR, WASM_PREFIX_FE, 0x3a, WASM_OC_MEMARG,
    140       "i32.atomic.rmw.xor"),
    141     I(WASM_INSN_I64_ATOMIC_RMW_XOR, WASM_PREFIX_FE, 0x3b, WASM_OC_MEMARG,
    142       "i64.atomic.rmw.xor"),
    143     I(WASM_INSN_I32_ATOMIC_RMW_XCHG, WASM_PREFIX_FE, 0x41, WASM_OC_MEMARG,
    144       "i32.atomic.rmw.xchg"),
    145     I(WASM_INSN_I64_ATOMIC_RMW_XCHG, WASM_PREFIX_FE, 0x42, WASM_OC_MEMARG,
    146       "i64.atomic.rmw.xchg"),
    147     I(WASM_INSN_I32_ATOMIC_RMW_CMPXCHG, WASM_PREFIX_FE, 0x48, WASM_OC_MEMARG,
    148       "i32.atomic.rmw.cmpxchg"),
    149     I(WASM_INSN_I64_ATOMIC_RMW_CMPXCHG, WASM_PREFIX_FE, 0x49, WASM_OC_MEMARG,
    150       "i64.atomic.rmw.cmpxchg"),
    151     I(WASM_INSN_I32_ATOMIC_WAIT, WASM_PREFIX_FE, 0x01, WASM_OC_MEMARG,
    152       "memory.atomic.wait32"),
    153     I(WASM_INSN_I64_ATOMIC_WAIT, WASM_PREFIX_FE, 0x02, WASM_OC_MEMARG,
    154       "memory.atomic.wait64"),
    155     I(WASM_INSN_MEMORY_ATOMIC_NOTIFY, WASM_PREFIX_FE, 0x00, WASM_OC_MEMARG,
    156       "memory.atomic.notify"),
    157     I(WASM_INSN_I32_ADD, WASM_PREFIX_NONE, 0x6a, WASM_OC_NONE, "i32.add"),
    158     I(WASM_INSN_I32_SUB, WASM_PREFIX_NONE, 0x6b, WASM_OC_NONE, "i32.sub"),
    159     I(WASM_INSN_I32_MUL, WASM_PREFIX_NONE, 0x6c, WASM_OC_NONE, "i32.mul"),
    160     I(WASM_INSN_I32_DIV_S, WASM_PREFIX_NONE, 0x6d, WASM_OC_NONE, "i32.div_s"),
    161     I(WASM_INSN_I32_DIV_U, WASM_PREFIX_NONE, 0x6e, WASM_OC_NONE, "i32.div_u"),
    162     I(WASM_INSN_I32_REM_S, WASM_PREFIX_NONE, 0x6f, WASM_OC_NONE, "i32.rem_s"),
    163     I(WASM_INSN_I32_REM_U, WASM_PREFIX_NONE, 0x70, WASM_OC_NONE, "i32.rem_u"),
    164     I(WASM_INSN_I32_AND, WASM_PREFIX_NONE, 0x71, WASM_OC_NONE, "i32.and"),
    165     I(WASM_INSN_I32_OR, WASM_PREFIX_NONE, 0x72, WASM_OC_NONE, "i32.or"),
    166     I(WASM_INSN_I32_XOR, WASM_PREFIX_NONE, 0x73, WASM_OC_NONE, "i32.xor"),
    167     I(WASM_INSN_I32_SHL, WASM_PREFIX_NONE, 0x74, WASM_OC_NONE, "i32.shl"),
    168     I(WASM_INSN_I32_SHR_S, WASM_PREFIX_NONE, 0x75, WASM_OC_NONE, "i32.shr_s"),
    169     I(WASM_INSN_I32_SHR_U, WASM_PREFIX_NONE, 0x76, WASM_OC_NONE, "i32.shr_u"),
    170     I(WASM_INSN_I32_ROTL, WASM_PREFIX_NONE, 0x77, WASM_OC_NONE, "i32.rotl"),
    171     I(WASM_INSN_I32_ROTR, WASM_PREFIX_NONE, 0x78, WASM_OC_NONE, "i32.rotr"),
    172     I(WASM_INSN_I32_CLZ, WASM_PREFIX_NONE, 0x67, WASM_OC_NONE, "i32.clz"),
    173     I(WASM_INSN_I32_CTZ, WASM_PREFIX_NONE, 0x68, WASM_OC_NONE, "i32.ctz"),
    174     I(WASM_INSN_I32_POPCNT, WASM_PREFIX_NONE, 0x69, WASM_OC_NONE, "i32.popcnt"),
    175     I(WASM_INSN_I32_EQZ, WASM_PREFIX_NONE, 0x45, WASM_OC_NONE, "i32.eqz"),
    176     I(WASM_INSN_I32_EQ, WASM_PREFIX_NONE, 0x46, WASM_OC_NONE, "i32.eq"),
    177     I(WASM_INSN_I32_NE, WASM_PREFIX_NONE, 0x47, WASM_OC_NONE, "i32.ne"),
    178     I(WASM_INSN_I32_LT_S, WASM_PREFIX_NONE, 0x48, WASM_OC_NONE, "i32.lt_s"),
    179     I(WASM_INSN_I32_LT_U, WASM_PREFIX_NONE, 0x49, WASM_OC_NONE, "i32.lt_u"),
    180     I(WASM_INSN_I32_GT_S, WASM_PREFIX_NONE, 0x4a, WASM_OC_NONE, "i32.gt_s"),
    181     I(WASM_INSN_I32_GT_U, WASM_PREFIX_NONE, 0x4b, WASM_OC_NONE, "i32.gt_u"),
    182     I(WASM_INSN_I32_LE_S, WASM_PREFIX_NONE, 0x4c, WASM_OC_NONE, "i32.le_s"),
    183     I(WASM_INSN_I32_LE_U, WASM_PREFIX_NONE, 0x4d, WASM_OC_NONE, "i32.le_u"),
    184     I(WASM_INSN_I32_GE_S, WASM_PREFIX_NONE, 0x4e, WASM_OC_NONE, "i32.ge_s"),
    185     I(WASM_INSN_I32_GE_U, WASM_PREFIX_NONE, 0x4f, WASM_OC_NONE, "i32.ge_u"),
    186     I(WASM_INSN_I64_ADD, WASM_PREFIX_NONE, 0x7c, WASM_OC_NONE, "i64.add"),
    187     I(WASM_INSN_I64_SUB, WASM_PREFIX_NONE, 0x7d, WASM_OC_NONE, "i64.sub"),
    188     I(WASM_INSN_I64_MUL, WASM_PREFIX_NONE, 0x7e, WASM_OC_NONE, "i64.mul"),
    189     I(WASM_INSN_I64_DIV_S, WASM_PREFIX_NONE, 0x7f, WASM_OC_NONE, "i64.div_s"),
    190     I(WASM_INSN_I64_DIV_U, WASM_PREFIX_NONE, 0x80, WASM_OC_NONE, "i64.div_u"),
    191     I(WASM_INSN_I64_REM_S, WASM_PREFIX_NONE, 0x81, WASM_OC_NONE, "i64.rem_s"),
    192     I(WASM_INSN_I64_REM_U, WASM_PREFIX_NONE, 0x82, WASM_OC_NONE, "i64.rem_u"),
    193     I(WASM_INSN_I64_AND, WASM_PREFIX_NONE, 0x83, WASM_OC_NONE, "i64.and"),
    194     I(WASM_INSN_I64_OR, WASM_PREFIX_NONE, 0x84, WASM_OC_NONE, "i64.or"),
    195     I(WASM_INSN_I64_XOR, WASM_PREFIX_NONE, 0x85, WASM_OC_NONE, "i64.xor"),
    196     I(WASM_INSN_I64_SHL, WASM_PREFIX_NONE, 0x86, WASM_OC_NONE, "i64.shl"),
    197     I(WASM_INSN_I64_SHR_S, WASM_PREFIX_NONE, 0x87, WASM_OC_NONE, "i64.shr_s"),
    198     I(WASM_INSN_I64_SHR_U, WASM_PREFIX_NONE, 0x88, WASM_OC_NONE, "i64.shr_u"),
    199     I(WASM_INSN_I64_ROTL, WASM_PREFIX_NONE, 0x89, WASM_OC_NONE, "i64.rotl"),
    200     I(WASM_INSN_I64_ROTR, WASM_PREFIX_NONE, 0x8a, WASM_OC_NONE, "i64.rotr"),
    201     I(WASM_INSN_I64_CLZ, WASM_PREFIX_NONE, 0x79, WASM_OC_NONE, "i64.clz"),
    202     I(WASM_INSN_I64_CTZ, WASM_PREFIX_NONE, 0x7a, WASM_OC_NONE, "i64.ctz"),
    203     I(WASM_INSN_I64_POPCNT, WASM_PREFIX_NONE, 0x7b, WASM_OC_NONE, "i64.popcnt"),
    204     I(WASM_INSN_I64_EQZ, WASM_PREFIX_NONE, 0x50, WASM_OC_NONE, "i64.eqz"),
    205     I(WASM_INSN_I64_EQ, WASM_PREFIX_NONE, 0x51, WASM_OC_NONE, "i64.eq"),
    206     I(WASM_INSN_I64_NE, WASM_PREFIX_NONE, 0x52, WASM_OC_NONE, "i64.ne"),
    207     I(WASM_INSN_I64_LT_S, WASM_PREFIX_NONE, 0x53, WASM_OC_NONE, "i64.lt_s"),
    208     I(WASM_INSN_I64_LT_U, WASM_PREFIX_NONE, 0x54, WASM_OC_NONE, "i64.lt_u"),
    209     I(WASM_INSN_I64_GT_S, WASM_PREFIX_NONE, 0x55, WASM_OC_NONE, "i64.gt_s"),
    210     I(WASM_INSN_I64_GT_U, WASM_PREFIX_NONE, 0x56, WASM_OC_NONE, "i64.gt_u"),
    211     I(WASM_INSN_I64_LE_S, WASM_PREFIX_NONE, 0x57, WASM_OC_NONE, "i64.le_s"),
    212     I(WASM_INSN_I64_LE_U, WASM_PREFIX_NONE, 0x58, WASM_OC_NONE, "i64.le_u"),
    213     I(WASM_INSN_I64_GE_S, WASM_PREFIX_NONE, 0x59, WASM_OC_NONE, "i64.ge_s"),
    214     I(WASM_INSN_I64_GE_U, WASM_PREFIX_NONE, 0x5a, WASM_OC_NONE, "i64.ge_u"),
    215     I(WASM_INSN_F32_ADD, WASM_PREFIX_NONE, 0x92, WASM_OC_NONE, "f32.add"),
    216     I(WASM_INSN_F32_SUB, WASM_PREFIX_NONE, 0x93, WASM_OC_NONE, "f32.sub"),
    217     I(WASM_INSN_F32_MUL, WASM_PREFIX_NONE, 0x94, WASM_OC_NONE, "f32.mul"),
    218     I(WASM_INSN_F32_DIV, WASM_PREFIX_NONE, 0x95, WASM_OC_NONE, "f32.div"),
    219     I(WASM_INSN_F32_EQ, WASM_PREFIX_NONE, 0x5b, WASM_OC_NONE, "f32.eq"),
    220     I(WASM_INSN_F32_NE, WASM_PREFIX_NONE, 0x5c, WASM_OC_NONE, "f32.ne"),
    221     I(WASM_INSN_F32_LT, WASM_PREFIX_NONE, 0x5d, WASM_OC_NONE, "f32.lt"),
    222     I(WASM_INSN_F32_GT, WASM_PREFIX_NONE, 0x5e, WASM_OC_NONE, "f32.gt"),
    223     I(WASM_INSN_F32_LE, WASM_PREFIX_NONE, 0x5f, WASM_OC_NONE, "f32.le"),
    224     I(WASM_INSN_F32_GE, WASM_PREFIX_NONE, 0x60, WASM_OC_NONE, "f32.ge"),
    225     I(WASM_INSN_F64_ADD, WASM_PREFIX_NONE, 0xa0, WASM_OC_NONE, "f64.add"),
    226     I(WASM_INSN_F64_SUB, WASM_PREFIX_NONE, 0xa1, WASM_OC_NONE, "f64.sub"),
    227     I(WASM_INSN_F64_MUL, WASM_PREFIX_NONE, 0xa2, WASM_OC_NONE, "f64.mul"),
    228     I(WASM_INSN_F64_DIV, WASM_PREFIX_NONE, 0xa3, WASM_OC_NONE, "f64.div"),
    229     I(WASM_INSN_F64_EQ, WASM_PREFIX_NONE, 0x61, WASM_OC_NONE, "f64.eq"),
    230     I(WASM_INSN_F64_NE, WASM_PREFIX_NONE, 0x62, WASM_OC_NONE, "f64.ne"),
    231     I(WASM_INSN_F64_LT, WASM_PREFIX_NONE, 0x63, WASM_OC_NONE, "f64.lt"),
    232     I(WASM_INSN_F64_GT, WASM_PREFIX_NONE, 0x64, WASM_OC_NONE, "f64.gt"),
    233     I(WASM_INSN_F64_LE, WASM_PREFIX_NONE, 0x65, WASM_OC_NONE, "f64.le"),
    234     I(WASM_INSN_F64_GE, WASM_PREFIX_NONE, 0x66, WASM_OC_NONE, "f64.ge"),
    235     I(WASM_INSN_F32_NEG, WASM_PREFIX_NONE, 0x8c, WASM_OC_NONE, "f32.neg"),
    236     I(WASM_INSN_F64_NEG, WASM_PREFIX_NONE, 0x9a, WASM_OC_NONE, "f64.neg"),
    237     I(WASM_INSN_I32_WRAP_I64, WASM_PREFIX_NONE, 0xa7, WASM_OC_NONE,
    238       "i32.wrap_i64"),
    239     I(WASM_INSN_I32_TRUNC_F32_S, WASM_PREFIX_NONE, 0xa8, WASM_OC_NONE,
    240       "i32.trunc_f32_s"),
    241     I(WASM_INSN_I32_TRUNC_F32_U, WASM_PREFIX_NONE, 0xa9, WASM_OC_NONE,
    242       "i32.trunc_f32_u"),
    243     I(WASM_INSN_I32_TRUNC_F64_S, WASM_PREFIX_NONE, 0xaa, WASM_OC_NONE,
    244       "i32.trunc_f64_s"),
    245     I(WASM_INSN_I32_TRUNC_F64_U, WASM_PREFIX_NONE, 0xab, WASM_OC_NONE,
    246       "i32.trunc_f64_u"),
    247     I(WASM_INSN_I64_EXTEND_I32_S, WASM_PREFIX_NONE, 0xac, WASM_OC_NONE,
    248       "i64.extend_i32_s"),
    249     I(WASM_INSN_I64_EXTEND_I32_U, WASM_PREFIX_NONE, 0xad, WASM_OC_NONE,
    250       "i64.extend_i32_u"),
    251     I(WASM_INSN_I64_TRUNC_F32_S, WASM_PREFIX_NONE, 0xae, WASM_OC_NONE,
    252       "i64.trunc_f32_s"),
    253     I(WASM_INSN_I64_TRUNC_F32_U, WASM_PREFIX_NONE, 0xaf, WASM_OC_NONE,
    254       "i64.trunc_f32_u"),
    255     I(WASM_INSN_I64_TRUNC_F64_S, WASM_PREFIX_NONE, 0xb0, WASM_OC_NONE,
    256       "i64.trunc_f64_s"),
    257     I(WASM_INSN_I64_TRUNC_F64_U, WASM_PREFIX_NONE, 0xb1, WASM_OC_NONE,
    258       "i64.trunc_f64_u"),
    259     I(WASM_INSN_F32_CONVERT_I32_S, WASM_PREFIX_NONE, 0xb2, WASM_OC_NONE,
    260       "f32.convert_i32_s"),
    261     I(WASM_INSN_F32_CONVERT_I32_U, WASM_PREFIX_NONE, 0xb3, WASM_OC_NONE,
    262       "f32.convert_i32_u"),
    263     I(WASM_INSN_F32_CONVERT_I64_S, WASM_PREFIX_NONE, 0xb4, WASM_OC_NONE,
    264       "f32.convert_i64_s"),
    265     I(WASM_INSN_F32_CONVERT_I64_U, WASM_PREFIX_NONE, 0xb5, WASM_OC_NONE,
    266       "f32.convert_i64_u"),
    267     I(WASM_INSN_F32_DEMOTE_F64, WASM_PREFIX_NONE, 0xb6, WASM_OC_NONE,
    268       "f32.demote_f64"),
    269     I(WASM_INSN_F64_CONVERT_I32_S, WASM_PREFIX_NONE, 0xb7, WASM_OC_NONE,
    270       "f64.convert_i32_s"),
    271     I(WASM_INSN_F64_CONVERT_I32_U, WASM_PREFIX_NONE, 0xb8, WASM_OC_NONE,
    272       "f64.convert_i32_u"),
    273     I(WASM_INSN_F64_CONVERT_I64_S, WASM_PREFIX_NONE, 0xb9, WASM_OC_NONE,
    274       "f64.convert_i64_s"),
    275     I(WASM_INSN_F64_CONVERT_I64_U, WASM_PREFIX_NONE, 0xba, WASM_OC_NONE,
    276       "f64.convert_i64_u"),
    277     I(WASM_INSN_F64_PROMOTE_F32, WASM_PREFIX_NONE, 0xbb, WASM_OC_NONE,
    278       "f64.promote_f32"),
    279     I(WASM_INSN_I32_REINTERPRET_F32, WASM_PREFIX_NONE, 0xbc, WASM_OC_NONE,
    280       "i32.reinterpret_f32"),
    281     I(WASM_INSN_I64_REINTERPRET_F64, WASM_PREFIX_NONE, 0xbd, WASM_OC_NONE,
    282       "i64.reinterpret_f64"),
    283     I(WASM_INSN_F32_REINTERPRET_I32, WASM_PREFIX_NONE, 0xbe, WASM_OC_NONE,
    284       "f32.reinterpret_i32"),
    285     I(WASM_INSN_F64_REINTERPRET_I64, WASM_PREFIX_NONE, 0xbf, WASM_OC_NONE,
    286       "f64.reinterpret_i64"),
    287     I(WASM_INSN_I32_EXTEND8_S, WASM_PREFIX_NONE, 0xc0, WASM_OC_NONE,
    288       "i32.extend8_s"),
    289     I(WASM_INSN_I32_EXTEND16_S, WASM_PREFIX_NONE, 0xc1, WASM_OC_NONE,
    290       "i32.extend16_s"),
    291     I(WASM_INSN_I64_EXTEND8_S, WASM_PREFIX_NONE, 0xc2, WASM_OC_NONE,
    292       "i64.extend8_s"),
    293     I(WASM_INSN_I64_EXTEND16_S, WASM_PREFIX_NONE, 0xc3, WASM_OC_NONE,
    294       "i64.extend16_s"),
    295     I(WASM_INSN_I64_EXTEND32_S, WASM_PREFIX_NONE, 0xc4, WASM_OC_NONE,
    296       "i64.extend32_s"),
    297     I(WASM_INSN_I32_TRUNC_SAT_F32_S, WASM_PREFIX_FC, 0x00, WASM_OC_NONE,
    298       "i32.trunc_sat_f32_s"),
    299     I(WASM_INSN_I32_TRUNC_SAT_F32_U, WASM_PREFIX_FC, 0x01, WASM_OC_NONE,
    300       "i32.trunc_sat_f32_u"),
    301     I(WASM_INSN_I32_TRUNC_SAT_F64_S, WASM_PREFIX_FC, 0x02, WASM_OC_NONE,
    302       "i32.trunc_sat_f64_s"),
    303     I(WASM_INSN_I32_TRUNC_SAT_F64_U, WASM_PREFIX_FC, 0x03, WASM_OC_NONE,
    304       "i32.trunc_sat_f64_u"),
    305     I(WASM_INSN_I64_TRUNC_SAT_F32_S, WASM_PREFIX_FC, 0x04, WASM_OC_NONE,
    306       "i64.trunc_sat_f32_s"),
    307     I(WASM_INSN_I64_TRUNC_SAT_F32_U, WASM_PREFIX_FC, 0x05, WASM_OC_NONE,
    308       "i64.trunc_sat_f32_u"),
    309     I(WASM_INSN_I64_TRUNC_SAT_F64_S, WASM_PREFIX_FC, 0x06, WASM_OC_NONE,
    310       "i64.trunc_sat_f64_s"),
    311     I(WASM_INSN_I64_TRUNC_SAT_F64_U, WASM_PREFIX_FC, 0x07, WASM_OC_NONE,
    312       "i64.trunc_sat_f64_u"),
    313     I(WASM_INSN_MEMORY_INIT, WASM_PREFIX_FC, 0x08, WASM_OC_BULK,
    314       "memory.init"),
    315     I(WASM_INSN_DATA_DROP, WASM_PREFIX_FC, 0x09, WASM_OC_BULK, "data.drop"),
    316     I(WASM_INSN_MEMORY_COPY, WASM_PREFIX_FC, 0x0a, WASM_OC_BULK,
    317       "memory.copy"),
    318     I(WASM_INSN_MEMORY_FILL, WASM_PREFIX_FC, 0x0b, WASM_OC_BULK,
    319       "memory.fill"),
    320     I(WASM_INSN_TABLE_INIT, WASM_PREFIX_FC, 0x0c, WASM_OC_BULK, "table.init"),
    321     I(WASM_INSN_ELEM_DROP, WASM_PREFIX_FC, 0x0d, WASM_OC_BULK, "elem.drop"),
    322     I(WASM_INSN_TABLE_COPY, WASM_PREFIX_FC, 0x0e, WASM_OC_BULK, "table.copy"),
    323     I(WASM_INSN_TABLE_GROW, WASM_PREFIX_FC, 0x0f, WASM_OC_BULK, "table.grow"),
    324     I(WASM_INSN_TABLE_SIZE, WASM_PREFIX_FC, 0x10, WASM_OC_BULK, "table.size"),
    325     I(WASM_INSN_TABLE_FILL, WASM_PREFIX_FC, 0x11, WASM_OC_BULK, "table.fill"),
    326 };
    327 
    328 #undef I
    329 
    330 #define WASM_INSN_TABLE_LEN \
    331   (sizeof(WASM_INSN_TABLE) / sizeof(WASM_INSN_TABLE[0]))
    332 
    333 const WasmInsnInfo* wasm_insn_info(WasmInsnKind kind) {
    334   if ((unsigned)kind >= WASM_INSN_TABLE_LEN) return NULL;
    335   if (!WASM_INSN_TABLE[kind].mnemonic) return NULL;
    336   return &WASM_INSN_TABLE[kind];
    337 }
    338 
    339 int wasm_operand_class_has_imm(WasmOperandClass oc) {
    340   switch (oc) {
    341     case WASM_OC_SLEB:
    342     case WASM_OC_FP:
    343     case WASM_OC_IDX:
    344     case WASM_OC_REF_NULL:
    345       return 1;
    346     default:
    347       return 0;
    348   }
    349 }