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 }