wasm_opcode.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #ifndef _WASM_OPCODE_H
  6. #define _WASM_OPCODE_H
  7. #include "wasm.h"
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. typedef enum WASMOpcode {
  12. /* control instructions */
  13. WASM_OP_UNREACHABLE = 0x00, /* unreachable */
  14. WASM_OP_NOP = 0x01, /* nop */
  15. WASM_OP_BLOCK = 0x02, /* block */
  16. WASM_OP_LOOP = 0x03, /* loop */
  17. WASM_OP_IF = 0x04, /* if */
  18. WASM_OP_ELSE = 0x05, /* else */
  19. WASM_OP_UNUSED_0x06 = 0x06,
  20. WASM_OP_UNUSED_0x07 = 0x07,
  21. WASM_OP_UNUSED_0x08 = 0x08,
  22. WASM_OP_UNUSED_0x09 = 0x09,
  23. WASM_OP_UNUSED_0x0a = 0x0a,
  24. WASM_OP_END = 0x0b, /* end */
  25. WASM_OP_BR = 0x0c, /* br */
  26. WASM_OP_BR_IF = 0x0d, /* br if */
  27. WASM_OP_BR_TABLE = 0x0e, /* br table */
  28. WASM_OP_RETURN = 0x0f, /* return */
  29. WASM_OP_CALL = 0x10, /* call */
  30. WASM_OP_CALL_INDIRECT = 0x11, /* call_indirect */
  31. WASM_OP_UNUSED_0x12 = 0x12,
  32. WASM_OP_UNUSED_0x13 = 0x13,
  33. WASM_OP_UNUSED_0x14 = 0x14,
  34. WASM_OP_UNUSED_0x15 = 0x15,
  35. WASM_OP_UNUSED_0x16 = 0x16,
  36. WASM_OP_UNUSED_0x17 = 0x17,
  37. WASM_OP_UNUSED_0x18 = 0x18,
  38. WASM_OP_UNUSED_0x19 = 0x19,
  39. /* parametric instructions */
  40. WASM_OP_DROP = 0x1a, /* drop */
  41. WASM_OP_SELECT = 0x1b, /* select */
  42. WASM_OP_UNUSED_0x1c = 0x1c,
  43. WASM_OP_UNUSED_0x1d = 0x1d,
  44. WASM_OP_UNUSED_0x1e = 0x1e,
  45. WASM_OP_UNUSED_0x1f = 0x1f,
  46. /* variable instructions */
  47. WASM_OP_GET_LOCAL = 0x20, /* get_local */
  48. WASM_OP_SET_LOCAL = 0x21, /* set_local */
  49. WASM_OP_TEE_LOCAL = 0x22, /* tee_local */
  50. WASM_OP_GET_GLOBAL = 0x23, /* get_global */
  51. WASM_OP_SET_GLOBAL = 0x24, /* set_global */
  52. WASM_OP_UNUSED_0x25 = 0x25,
  53. WASM_OP_UNUSED_0x26 = 0x26,
  54. WASM_OP_UNUSED_0x27 = 0x27,
  55. /* memory instructions */
  56. WASM_OP_I32_LOAD = 0x28, /* i32.load */
  57. WASM_OP_I64_LOAD = 0x29, /* i64.load */
  58. WASM_OP_F32_LOAD = 0x2a, /* f32.load */
  59. WASM_OP_F64_LOAD = 0x2b, /* f64.load */
  60. WASM_OP_I32_LOAD8_S = 0x2c, /* i32.load8_s */
  61. WASM_OP_I32_LOAD8_U = 0x2d, /* i32.load8_u */
  62. WASM_OP_I32_LOAD16_S = 0x2e, /* i32.load16_s */
  63. WASM_OP_I32_LOAD16_U = 0x2f, /* i32.load16_u */
  64. WASM_OP_I64_LOAD8_S = 0x30, /* i64.load8_s */
  65. WASM_OP_I64_LOAD8_U = 0x31, /* i64.load8_u */
  66. WASM_OP_I64_LOAD16_S = 0x32, /* i64.load16_s */
  67. WASM_OP_I64_LOAD16_U = 0x33, /* i64.load16_u */
  68. WASM_OP_I64_LOAD32_S = 0x34, /* i32.load32_s */
  69. WASM_OP_I64_LOAD32_U = 0x35, /* i32.load32_u */
  70. WASM_OP_I32_STORE = 0x36, /* i32.store */
  71. WASM_OP_I64_STORE = 0x37, /* i64.store */
  72. WASM_OP_F32_STORE = 0x38, /* f32.store */
  73. WASM_OP_F64_STORE = 0x39, /* f64.store */
  74. WASM_OP_I32_STORE8 = 0x3a, /* i32.store8 */
  75. WASM_OP_I32_STORE16 = 0x3b, /* i32.store16 */
  76. WASM_OP_I64_STORE8 = 0x3c, /* i64.store8 */
  77. WASM_OP_I64_STORE16 = 0x3d, /* i64.sotre16 */
  78. WASM_OP_I64_STORE32 = 0x3e, /* i64.store32 */
  79. WASM_OP_MEMORY_SIZE = 0x3f, /* memory.size */
  80. WASM_OP_MEMORY_GROW = 0x40, /* memory.grow */
  81. /* constant instructions */
  82. WASM_OP_I32_CONST = 0x41, /* i32.const */
  83. WASM_OP_I64_CONST = 0x42, /* i64.const */
  84. WASM_OP_F32_CONST = 0x43, /* f32.const */
  85. WASM_OP_F64_CONST = 0x44, /* f64.const */
  86. /* comparison instructions */
  87. WASM_OP_I32_EQZ = 0x45, /* i32.eqz */
  88. WASM_OP_I32_EQ = 0x46, /* i32.eq */
  89. WASM_OP_I32_NE = 0x47, /* i32.ne */
  90. WASM_OP_I32_LT_S = 0x48, /* i32.lt_s */
  91. WASM_OP_I32_LT_U = 0x49, /* i32.lt_u */
  92. WASM_OP_I32_GT_S = 0x4a, /* i32.gt_s */
  93. WASM_OP_I32_GT_U = 0x4b, /* i32.gt_u */
  94. WASM_OP_I32_LE_S = 0x4c, /* i32.le_s */
  95. WASM_OP_I32_LE_U = 0x4d, /* i32.le_u */
  96. WASM_OP_I32_GE_S = 0x4e, /* i32.ge_s */
  97. WASM_OP_I32_GE_U = 0x4f, /* i32.ge_u */
  98. WASM_OP_I64_EQZ = 0x50, /* i64.eqz */
  99. WASM_OP_I64_EQ = 0x51, /* i64.eq */
  100. WASM_OP_I64_NE = 0x52, /* i64.ne */
  101. WASM_OP_I64_LT_S = 0x53, /* i64.lt_s */
  102. WASM_OP_I64_LT_U = 0x54, /* i64.lt_u */
  103. WASM_OP_I64_GT_S = 0x55, /* i64.gt_s */
  104. WASM_OP_I64_GT_U = 0x56, /* i64.gt_u */
  105. WASM_OP_I64_LE_S = 0x57, /* i64.le_s */
  106. WASM_OP_I64_LE_U = 0x58, /* i64.le_u */
  107. WASM_OP_I64_GE_S = 0x59, /* i64.ge_s */
  108. WASM_OP_I64_GE_U = 0x5a, /* i64.ge_u */
  109. WASM_OP_F32_EQ = 0x5b, /* f32.eq */
  110. WASM_OP_F32_NE = 0x5c, /* f32.ne */
  111. WASM_OP_F32_LT = 0x5d, /* f32.lt */
  112. WASM_OP_F32_GT = 0x5e, /* f32.gt */
  113. WASM_OP_F32_LE = 0x5f, /* f32.le */
  114. WASM_OP_F32_GE = 0x60, /* f32.ge */
  115. WASM_OP_F64_EQ = 0x61, /* f64.eq */
  116. WASM_OP_F64_NE = 0x62, /* f64.ne */
  117. WASM_OP_F64_LT = 0x63, /* f64.lt */
  118. WASM_OP_F64_GT = 0x64, /* f64.gt */
  119. WASM_OP_F64_LE = 0x65, /* f64.le */
  120. WASM_OP_F64_GE = 0x66, /* f64.ge */
  121. /* numeric operators */
  122. WASM_OP_I32_CLZ = 0x67, /* i32.clz */
  123. WASM_OP_I32_CTZ = 0x68, /* i32.ctz */
  124. WASM_OP_I32_POPCNT = 0x69, /* i32.popcnt */
  125. WASM_OP_I32_ADD = 0x6a, /* i32.add */
  126. WASM_OP_I32_SUB = 0x6b, /* i32.sub */
  127. WASM_OP_I32_MUL = 0x6c, /* i32.mul */
  128. WASM_OP_I32_DIV_S = 0x6d, /* i32.div_s */
  129. WASM_OP_I32_DIV_U = 0x6e, /* i32.div_u */
  130. WASM_OP_I32_REM_S = 0x6f, /* i32.rem_s */
  131. WASM_OP_I32_REM_U = 0x70, /* i32.rem_u */
  132. WASM_OP_I32_AND = 0x71, /* i32.and */
  133. WASM_OP_I32_OR = 0x72, /* i32.or */
  134. WASM_OP_I32_XOR = 0x73, /* i32.xor */
  135. WASM_OP_I32_SHL = 0x74, /* i32.shl */
  136. WASM_OP_I32_SHR_S = 0x75, /* i32.shr_s */
  137. WASM_OP_I32_SHR_U = 0x76, /* i32.shr_u */
  138. WASM_OP_I32_ROTL = 0x77, /* i32.rotl */
  139. WASM_OP_I32_ROTR = 0x78, /* i32.rotr */
  140. WASM_OP_I64_CLZ = 0x79, /* i64.clz */
  141. WASM_OP_I64_CTZ = 0x7a, /* i64.ctz */
  142. WASM_OP_I64_POPCNT = 0x7b, /* i64.popcnt */
  143. WASM_OP_I64_ADD = 0x7c, /* i64.add */
  144. WASM_OP_I64_SUB = 0x7d, /* i64.sub */
  145. WASM_OP_I64_MUL = 0x7e, /* i64.mul */
  146. WASM_OP_I64_DIV_S = 0x7f, /* i64.div_s */
  147. WASM_OP_I64_DIV_U = 0x80, /* i64.div_u */
  148. WASM_OP_I64_REM_S = 0x81, /* i64.rem_s */
  149. WASM_OP_I64_REM_U = 0x82, /* i64.rem_u */
  150. WASM_OP_I64_AND = 0x83, /* i64.and */
  151. WASM_OP_I64_OR = 0x84, /* i64.or */
  152. WASM_OP_I64_XOR = 0x85, /* i64.xor */
  153. WASM_OP_I64_SHL = 0x86, /* i64.shl */
  154. WASM_OP_I64_SHR_S = 0x87, /* i64.shr_s */
  155. WASM_OP_I64_SHR_U = 0x88, /* i64.shr_u */
  156. WASM_OP_I64_ROTL = 0x89, /* i64.rotl */
  157. WASM_OP_I64_ROTR = 0x8a, /* i64.rotr */
  158. WASM_OP_F32_ABS = 0x8b, /* f32.abs */
  159. WASM_OP_F32_NEG = 0x8c, /* f32.neg */
  160. WASM_OP_F32_CEIL = 0x8d, /* f32.ceil */
  161. WASM_OP_F32_FLOOR = 0x8e, /* f32.floor */
  162. WASM_OP_F32_TRUNC = 0x8f, /* f32.trunc */
  163. WASM_OP_F32_NEAREST = 0x90, /* f32.nearest */
  164. WASM_OP_F32_SQRT = 0x91, /* f32.sqrt */
  165. WASM_OP_F32_ADD = 0x92, /* f32.add */
  166. WASM_OP_F32_SUB = 0x93, /* f32.sub */
  167. WASM_OP_F32_MUL = 0x94, /* f32.mul */
  168. WASM_OP_F32_DIV = 0x95, /* f32.div */
  169. WASM_OP_F32_MIN = 0x96, /* f32.min */
  170. WASM_OP_F32_MAX = 0x97, /* f32.max */
  171. WASM_OP_F32_COPYSIGN = 0x98, /* f32.copysign */
  172. WASM_OP_F64_ABS = 0x99, /* f64.abs */
  173. WASM_OP_F64_NEG = 0x9a, /* f64.neg */
  174. WASM_OP_F64_CEIL = 0x9b, /* f64.ceil */
  175. WASM_OP_F64_FLOOR = 0x9c, /* f64.floor */
  176. WASM_OP_F64_TRUNC = 0x9d, /* f64.trunc */
  177. WASM_OP_F64_NEAREST = 0x9e, /* f64.nearest */
  178. WASM_OP_F64_SQRT = 0x9f, /* f64.sqrt */
  179. WASM_OP_F64_ADD = 0xa0, /* f64.add */
  180. WASM_OP_F64_SUB = 0xa1, /* f64.sub */
  181. WASM_OP_F64_MUL = 0xa2, /* f64.mul */
  182. WASM_OP_F64_DIV = 0xa3, /* f64.div */
  183. WASM_OP_F64_MIN = 0xa4, /* f64.min */
  184. WASM_OP_F64_MAX = 0xa5, /* f64.max */
  185. WASM_OP_F64_COPYSIGN = 0xa6, /* f64.copysign */
  186. /* conversions */
  187. WASM_OP_I32_WRAP_I64 = 0xa7, /* i32.wrap/i64 */
  188. WASM_OP_I32_TRUNC_S_F32 = 0xa8, /* i32.trunc_s/f32 */
  189. WASM_OP_I32_TRUNC_U_F32 = 0xa9, /* i32.trunc_u/f32 */
  190. WASM_OP_I32_TRUNC_S_F64 = 0xaa, /* i32.trunc_s/f64 */
  191. WASM_OP_I32_TRUNC_U_F64 = 0xab, /* i32.trunc_u/f64 */
  192. WASM_OP_I64_EXTEND_S_I32 = 0xac, /* i64.extend_s/i32 */
  193. WASM_OP_I64_EXTEND_U_I32 = 0xad, /* i64.extend_u/i32 */
  194. WASM_OP_I64_TRUNC_S_F32 = 0xae, /* i64.trunc_s/f32 */
  195. WASM_OP_I64_TRUNC_U_F32 = 0xaf, /* i64.trunc_u/f32 */
  196. WASM_OP_I64_TRUNC_S_F64 = 0xb0, /* i64.trunc_s/f64 */
  197. WASM_OP_I64_TRUNC_U_F64 = 0xb1, /* i64.trunc_u/f64 */
  198. WASM_OP_F32_CONVERT_S_I32 = 0xb2, /* f32.convert_s/i32 */
  199. WASM_OP_F32_CONVERT_U_I32 = 0xb3, /* f32.convert_u/i32 */
  200. WASM_OP_F32_CONVERT_S_I64 = 0xb4, /* f32.convert_s/i64 */
  201. WASM_OP_F32_CONVERT_U_I64 = 0xb5, /* f32.convert_u/i64 */
  202. WASM_OP_F32_DEMOTE_F64 = 0xb6, /* f32.demote/f64 */
  203. WASM_OP_F64_CONVERT_S_I32 = 0xb7, /* f64.convert_s/i32 */
  204. WASM_OP_F64_CONVERT_U_I32 = 0xb8, /* f64.convert_u/i32 */
  205. WASM_OP_F64_CONVERT_S_I64 = 0xb9, /* f64.convert_s/i64 */
  206. WASM_OP_F64_CONVERT_U_I64 = 0xba, /* f64.convert_u/i64 */
  207. WASM_OP_F64_PROMOTE_F32 = 0xbb, /* f64.promote/f32 */
  208. /* reinterpretations */
  209. WASM_OP_I32_REINTERPRET_F32 = 0xbc, /* i32.reinterpret/f32 */
  210. WASM_OP_I64_REINTERPRET_F64 = 0xbd, /* i64.reinterpret/f64 */
  211. WASM_OP_F32_REINTERPRET_I32 = 0xbe, /* f32.reinterpret/i32 */
  212. WASM_OP_F64_REINTERPRET_I64 = 0xbf, /* f64.reinterpret/i64 */
  213. /* drop/select specified types*/
  214. WASM_OP_DROP_64 = 0xc0,
  215. WASM_OP_SELECT_64 = 0xc1,
  216. /* extend op code */
  217. EXT_OP_GET_LOCAL_FAST = 0xc2,
  218. EXT_OP_SET_LOCAL_FAST_I64 = 0xc3,
  219. EXT_OP_SET_LOCAL_FAST = 0xc4,
  220. EXT_OP_TEE_LOCAL_FAST = 0xc5,
  221. EXT_OP_TEE_LOCAL_FAST_I64 = 0xc6,
  222. EXT_OP_COPY_STACK_TOP = 0xc7,
  223. EXT_OP_COPY_STACK_TOP_I64 = 0xc8,
  224. WASM_OP_IMPDEP = 0xc9
  225. } WASMOpcode;
  226. #ifdef __cplusplus
  227. }
  228. #endif
  229. /*
  230. * Macro used to generate computed goto tables for the C interpreter.
  231. */
  232. #define WASM_INSTRUCTION_NUM 256
  233. #define DEFINE_GOTO_TABLE(_name) \
  234. static const void *_name[WASM_INSTRUCTION_NUM] = { \
  235. HANDLE_OPCODE (WASM_OP_UNREACHABLE), /* 0x00 */ \
  236. HANDLE_OPCODE (WASM_OP_NOP), /* 0x01 */ \
  237. HANDLE_OPCODE (WASM_OP_BLOCK), /* 0x02 */ \
  238. HANDLE_OPCODE (WASM_OP_LOOP), /* 0x03 */ \
  239. HANDLE_OPCODE (WASM_OP_IF), /* 0x04 */ \
  240. HANDLE_OPCODE (WASM_OP_ELSE), /* 0x05 */ \
  241. HANDLE_OPCODE (WASM_OP_UNUSED_0x06), /* 0x06 */ \
  242. HANDLE_OPCODE (WASM_OP_UNUSED_0x07), /* 0x07 */ \
  243. HANDLE_OPCODE (WASM_OP_UNUSED_0x08), /* 0x08 */ \
  244. HANDLE_OPCODE (WASM_OP_UNUSED_0x09), /* 0x09 */ \
  245. HANDLE_OPCODE (WASM_OP_UNUSED_0x0a), /* 0x0a */ \
  246. HANDLE_OPCODE (WASM_OP_END), /* 0x0b */ \
  247. HANDLE_OPCODE (WASM_OP_BR), /* 0x0c */ \
  248. HANDLE_OPCODE (WASM_OP_BR_IF), /* 0x0d */ \
  249. HANDLE_OPCODE (WASM_OP_BR_TABLE), /* 0x0e */ \
  250. HANDLE_OPCODE (WASM_OP_RETURN), /* 0x0f */ \
  251. HANDLE_OPCODE (WASM_OP_CALL), /* 0x10 */ \
  252. HANDLE_OPCODE (WASM_OP_CALL_INDIRECT), /* 0x11 */ \
  253. HANDLE_OPCODE (WASM_OP_UNUSED_0x12), /* 0x12 */ \
  254. HANDLE_OPCODE (WASM_OP_UNUSED_0x13), /* 0x13 */ \
  255. HANDLE_OPCODE (WASM_OP_UNUSED_0x14), /* 0x14 */ \
  256. HANDLE_OPCODE (WASM_OP_UNUSED_0x15), /* 0x15 */ \
  257. HANDLE_OPCODE (WASM_OP_UNUSED_0x16), /* 0x16 */ \
  258. HANDLE_OPCODE (WASM_OP_UNUSED_0x17), /* 0x17 */ \
  259. HANDLE_OPCODE (WASM_OP_UNUSED_0x18), /* 0x18 */ \
  260. HANDLE_OPCODE (WASM_OP_UNUSED_0x19), /* 0x19 */ \
  261. HANDLE_OPCODE (WASM_OP_DROP), /* 0x1a */ \
  262. HANDLE_OPCODE (WASM_OP_SELECT), /* 0x1b */ \
  263. HANDLE_OPCODE (WASM_OP_UNUSED_0x1c), /* 0x1c */ \
  264. HANDLE_OPCODE (WASM_OP_UNUSED_0x1d), /* 0x1d */ \
  265. HANDLE_OPCODE (WASM_OP_UNUSED_0x1e), /* 0x1e */ \
  266. HANDLE_OPCODE (WASM_OP_UNUSED_0x1f), /* 0x1f */ \
  267. HANDLE_OPCODE (WASM_OP_GET_LOCAL), /* 0x20 */ \
  268. HANDLE_OPCODE (WASM_OP_SET_LOCAL), /* 0x21 */ \
  269. HANDLE_OPCODE (WASM_OP_TEE_LOCAL), /* 0x22 */ \
  270. HANDLE_OPCODE (WASM_OP_GET_GLOBAL), /* 0x23 */ \
  271. HANDLE_OPCODE (WASM_OP_SET_GLOBAL), /* 0x24 */ \
  272. HANDLE_OPCODE (WASM_OP_UNUSED_0x25), /* 0x25 */ \
  273. HANDLE_OPCODE (WASM_OP_UNUSED_0x26), /* 0x26 */ \
  274. HANDLE_OPCODE (WASM_OP_UNUSED_0x27), /* 0x27 */ \
  275. HANDLE_OPCODE (WASM_OP_I32_LOAD), /* 0x28 */ \
  276. HANDLE_OPCODE (WASM_OP_I64_LOAD), /* 0x29 */ \
  277. HANDLE_OPCODE (WASM_OP_F32_LOAD), /* 0x2a */ \
  278. HANDLE_OPCODE (WASM_OP_F64_LOAD), /* 0x2b */ \
  279. HANDLE_OPCODE (WASM_OP_I32_LOAD8_S), /* 0x2c */ \
  280. HANDLE_OPCODE (WASM_OP_I32_LOAD8_U), /* 0x2d */ \
  281. HANDLE_OPCODE (WASM_OP_I32_LOAD16_S), /* 0x2e */ \
  282. HANDLE_OPCODE (WASM_OP_I32_LOAD16_U), /* 0x2f */ \
  283. HANDLE_OPCODE (WASM_OP_I64_LOAD8_S), /* 0x30 */ \
  284. HANDLE_OPCODE (WASM_OP_I64_LOAD8_U), /* 0x31 */ \
  285. HANDLE_OPCODE (WASM_OP_I64_LOAD16_S), /* 0x32 */ \
  286. HANDLE_OPCODE (WASM_OP_I64_LOAD16_U), /* 0x33 */ \
  287. HANDLE_OPCODE (WASM_OP_I64_LOAD32_S), /* 0x34 */ \
  288. HANDLE_OPCODE (WASM_OP_I64_LOAD32_U), /* 0x35 */ \
  289. HANDLE_OPCODE (WASM_OP_I32_STORE), /* 0x36 */ \
  290. HANDLE_OPCODE (WASM_OP_I64_STORE), /* 0x37 */ \
  291. HANDLE_OPCODE (WASM_OP_F32_STORE), /* 0x38 */ \
  292. HANDLE_OPCODE (WASM_OP_F64_STORE), /* 0x39 */ \
  293. HANDLE_OPCODE (WASM_OP_I32_STORE8), /* 0x3a */ \
  294. HANDLE_OPCODE (WASM_OP_I32_STORE16), /* 0x3b */ \
  295. HANDLE_OPCODE (WASM_OP_I64_STORE8), /* 0x3c */ \
  296. HANDLE_OPCODE (WASM_OP_I64_STORE16), /* 0x3d */ \
  297. HANDLE_OPCODE (WASM_OP_I64_STORE32), /* 0x3e */ \
  298. HANDLE_OPCODE (WASM_OP_MEMORY_SIZE), /* 0x3f */ \
  299. HANDLE_OPCODE (WASM_OP_MEMORY_GROW), /* 0x40 */ \
  300. HANDLE_OPCODE (WASM_OP_I32_CONST), /* 0x41 */ \
  301. HANDLE_OPCODE (WASM_OP_I64_CONST), /* 0x42 */ \
  302. HANDLE_OPCODE (WASM_OP_F32_CONST), /* 0x43 */ \
  303. HANDLE_OPCODE (WASM_OP_F64_CONST), /* 0x44 */ \
  304. HANDLE_OPCODE (WASM_OP_I32_EQZ), /* 0x45 */ \
  305. HANDLE_OPCODE (WASM_OP_I32_EQ), /* 0x46 */ \
  306. HANDLE_OPCODE (WASM_OP_I32_NE), /* 0x47 */ \
  307. HANDLE_OPCODE (WASM_OP_I32_LT_S), /* 0x48 */ \
  308. HANDLE_OPCODE (WASM_OP_I32_LT_U), /* 0x49 */ \
  309. HANDLE_OPCODE (WASM_OP_I32_GT_S), /* 0x4a */ \
  310. HANDLE_OPCODE (WASM_OP_I32_GT_U), /* 0x4b */ \
  311. HANDLE_OPCODE (WASM_OP_I32_LE_S), /* 0x4c */ \
  312. HANDLE_OPCODE (WASM_OP_I32_LE_U), /* 0x4d */ \
  313. HANDLE_OPCODE (WASM_OP_I32_GE_S), /* 0x4e */ \
  314. HANDLE_OPCODE (WASM_OP_I32_GE_U), /* 0x4f */ \
  315. HANDLE_OPCODE (WASM_OP_I64_EQZ), /* 0x50 */ \
  316. HANDLE_OPCODE (WASM_OP_I64_EQ), /* 0x51 */ \
  317. HANDLE_OPCODE (WASM_OP_I64_NE), /* 0x52 */ \
  318. HANDLE_OPCODE (WASM_OP_I64_LT_S), /* 0x53 */ \
  319. HANDLE_OPCODE (WASM_OP_I64_LT_U), /* 0x54 */ \
  320. HANDLE_OPCODE (WASM_OP_I64_GT_S), /* 0x55 */ \
  321. HANDLE_OPCODE (WASM_OP_I64_GT_U), /* 0x56 */ \
  322. HANDLE_OPCODE (WASM_OP_I64_LE_S), /* 0x57 */ \
  323. HANDLE_OPCODE (WASM_OP_I64_LE_U), /* 0x58 */ \
  324. HANDLE_OPCODE (WASM_OP_I64_GE_S), /* 0x59 */ \
  325. HANDLE_OPCODE (WASM_OP_I64_GE_U), /* 0x5a */ \
  326. HANDLE_OPCODE (WASM_OP_F32_EQ), /* 0x5b */ \
  327. HANDLE_OPCODE (WASM_OP_F32_NE), /* 0x5c */ \
  328. HANDLE_OPCODE (WASM_OP_F32_LT), /* 0x5d */ \
  329. HANDLE_OPCODE (WASM_OP_F32_GT), /* 0x5e */ \
  330. HANDLE_OPCODE (WASM_OP_F32_LE), /* 0x5f */ \
  331. HANDLE_OPCODE (WASM_OP_F32_GE), /* 0x60 */ \
  332. HANDLE_OPCODE (WASM_OP_F64_EQ), /* 0x61 */ \
  333. HANDLE_OPCODE (WASM_OP_F64_NE), /* 0x62 */ \
  334. HANDLE_OPCODE (WASM_OP_F64_LT), /* 0x63 */ \
  335. HANDLE_OPCODE (WASM_OP_F64_GT), /* 0x64 */ \
  336. HANDLE_OPCODE (WASM_OP_F64_LE), /* 0x65 */ \
  337. HANDLE_OPCODE (WASM_OP_F64_GE), /* 0x66 */ \
  338. HANDLE_OPCODE (WASM_OP_I32_CLZ), /* 0x67 */ \
  339. HANDLE_OPCODE (WASM_OP_I32_CTZ), /* 0x68 */ \
  340. HANDLE_OPCODE (WASM_OP_I32_POPCNT), /* 0x69 */ \
  341. HANDLE_OPCODE (WASM_OP_I32_ADD), /* 0x6a */ \
  342. HANDLE_OPCODE (WASM_OP_I32_SUB), /* 0x6b */ \
  343. HANDLE_OPCODE (WASM_OP_I32_MUL), /* 0x6c */ \
  344. HANDLE_OPCODE (WASM_OP_I32_DIV_S), /* 0x6d */ \
  345. HANDLE_OPCODE (WASM_OP_I32_DIV_U), /* 0x6e */ \
  346. HANDLE_OPCODE (WASM_OP_I32_REM_S), /* 0x6f */ \
  347. HANDLE_OPCODE (WASM_OP_I32_REM_U), /* 0x70 */ \
  348. HANDLE_OPCODE (WASM_OP_I32_AND), /* 0x71 */ \
  349. HANDLE_OPCODE (WASM_OP_I32_OR), /* 0x72 */ \
  350. HANDLE_OPCODE (WASM_OP_I32_XOR), /* 0x73 */ \
  351. HANDLE_OPCODE (WASM_OP_I32_SHL), /* 0x74 */ \
  352. HANDLE_OPCODE (WASM_OP_I32_SHR_S), /* 0x75 */ \
  353. HANDLE_OPCODE (WASM_OP_I32_SHR_U), /* 0x76 */ \
  354. HANDLE_OPCODE (WASM_OP_I32_ROTL), /* 0x77 */ \
  355. HANDLE_OPCODE (WASM_OP_I32_ROTR), /* 0x78 */ \
  356. HANDLE_OPCODE (WASM_OP_I64_CLZ), /* 0x79 */ \
  357. HANDLE_OPCODE (WASM_OP_I64_CTZ), /* 0x7a */ \
  358. HANDLE_OPCODE (WASM_OP_I64_POPCNT), /* 0x7b */ \
  359. HANDLE_OPCODE (WASM_OP_I64_ADD), /* 0x7c */ \
  360. HANDLE_OPCODE (WASM_OP_I64_SUB), /* 0x7d */ \
  361. HANDLE_OPCODE (WASM_OP_I64_MUL), /* 0x7e */ \
  362. HANDLE_OPCODE (WASM_OP_I64_DIV_S), /* 0x7f */ \
  363. HANDLE_OPCODE (WASM_OP_I64_DIV_U), /* 0x80 */ \
  364. HANDLE_OPCODE (WASM_OP_I64_REM_S), /* 0x81 */ \
  365. HANDLE_OPCODE (WASM_OP_I64_REM_U), /* 0x82 */ \
  366. HANDLE_OPCODE (WASM_OP_I64_AND), /* 0x83 */ \
  367. HANDLE_OPCODE (WASM_OP_I64_OR), /* 0x84 */ \
  368. HANDLE_OPCODE (WASM_OP_I64_XOR), /* 0x85 */ \
  369. HANDLE_OPCODE (WASM_OP_I64_SHL), /* 0x86 */ \
  370. HANDLE_OPCODE (WASM_OP_I64_SHR_S), /* 0x87 */ \
  371. HANDLE_OPCODE (WASM_OP_I64_SHR_U), /* 0x88 */ \
  372. HANDLE_OPCODE (WASM_OP_I64_ROTL), /* 0x89 */ \
  373. HANDLE_OPCODE (WASM_OP_I64_ROTR), /* 0x8a */ \
  374. HANDLE_OPCODE (WASM_OP_F32_ABS), /* 0x8b */ \
  375. HANDLE_OPCODE (WASM_OP_F32_NEG), /* 0x8c */ \
  376. HANDLE_OPCODE (WASM_OP_F32_CEIL), /* 0x8d */ \
  377. HANDLE_OPCODE (WASM_OP_F32_FLOOR), /* 0x8e */ \
  378. HANDLE_OPCODE (WASM_OP_F32_TRUNC), /* 0x8f */ \
  379. HANDLE_OPCODE (WASM_OP_F32_NEAREST), /* 0x90 */ \
  380. HANDLE_OPCODE (WASM_OP_F32_SQRT), /* 0x91 */ \
  381. HANDLE_OPCODE (WASM_OP_F32_ADD), /* 0x92 */ \
  382. HANDLE_OPCODE (WASM_OP_F32_SUB), /* 0x93 */ \
  383. HANDLE_OPCODE (WASM_OP_F32_MUL), /* 0x94 */ \
  384. HANDLE_OPCODE (WASM_OP_F32_DIV), /* 0x95 */ \
  385. HANDLE_OPCODE (WASM_OP_F32_MIN), /* 0x96 */ \
  386. HANDLE_OPCODE (WASM_OP_F32_MAX), /* 0x97 */ \
  387. HANDLE_OPCODE (WASM_OP_F32_COPYSIGN), /* 0x98 */ \
  388. HANDLE_OPCODE (WASM_OP_F64_ABS), /* 0x99 */ \
  389. HANDLE_OPCODE (WASM_OP_F64_NEG), /* 0x9a */ \
  390. HANDLE_OPCODE (WASM_OP_F64_CEIL), /* 0x9b */ \
  391. HANDLE_OPCODE (WASM_OP_F64_FLOOR), /* 0x9c */ \
  392. HANDLE_OPCODE (WASM_OP_F64_TRUNC), /* 0x9d */ \
  393. HANDLE_OPCODE (WASM_OP_F64_NEAREST), /* 0x9e */ \
  394. HANDLE_OPCODE (WASM_OP_F64_SQRT), /* 0x9f */ \
  395. HANDLE_OPCODE (WASM_OP_F64_ADD), /* 0xa0 */ \
  396. HANDLE_OPCODE (WASM_OP_F64_SUB), /* 0xa1 */ \
  397. HANDLE_OPCODE (WASM_OP_F64_MUL), /* 0xa2 */ \
  398. HANDLE_OPCODE (WASM_OP_F64_DIV), /* 0xa3 */ \
  399. HANDLE_OPCODE (WASM_OP_F64_MIN), /* 0xa4 */ \
  400. HANDLE_OPCODE (WASM_OP_F64_MAX), /* 0xa5 */ \
  401. HANDLE_OPCODE (WASM_OP_F64_COPYSIGN), /* 0xa6 */ \
  402. HANDLE_OPCODE (WASM_OP_I32_WRAP_I64), /* 0xa7 */ \
  403. HANDLE_OPCODE (WASM_OP_I32_TRUNC_S_F32), /* 0xa8 */ \
  404. HANDLE_OPCODE (WASM_OP_I32_TRUNC_U_F32), /* 0xa9 */ \
  405. HANDLE_OPCODE (WASM_OP_I32_TRUNC_S_F64), /* 0xaa */ \
  406. HANDLE_OPCODE (WASM_OP_I32_TRUNC_U_F64), /* 0xab */ \
  407. HANDLE_OPCODE (WASM_OP_I64_EXTEND_S_I32), /* 0xac */ \
  408. HANDLE_OPCODE (WASM_OP_I64_EXTEND_U_I32), /* 0xad */ \
  409. HANDLE_OPCODE (WASM_OP_I64_TRUNC_S_F32), /* 0xae */ \
  410. HANDLE_OPCODE (WASM_OP_I64_TRUNC_U_F32), /* 0xaf */ \
  411. HANDLE_OPCODE (WASM_OP_I64_TRUNC_S_F64), /* 0xb0 */ \
  412. HANDLE_OPCODE (WASM_OP_I64_TRUNC_U_F64), /* 0xb1 */ \
  413. HANDLE_OPCODE (WASM_OP_F32_CONVERT_S_I32), /* 0xb2 */ \
  414. HANDLE_OPCODE (WASM_OP_F32_CONVERT_U_I32), /* 0xb3 */ \
  415. HANDLE_OPCODE (WASM_OP_F32_CONVERT_S_I64), /* 0xb4 */ \
  416. HANDLE_OPCODE (WASM_OP_F32_CONVERT_U_I64), /* 0xb5 */ \
  417. HANDLE_OPCODE (WASM_OP_F32_DEMOTE_F64), /* 0xb6 */ \
  418. HANDLE_OPCODE (WASM_OP_F64_CONVERT_S_I32), /* 0xb7 */ \
  419. HANDLE_OPCODE (WASM_OP_F64_CONVERT_U_I32), /* 0xb8 */ \
  420. HANDLE_OPCODE (WASM_OP_F64_CONVERT_S_I64), /* 0xb9 */ \
  421. HANDLE_OPCODE (WASM_OP_F64_CONVERT_U_I64), /* 0xba */ \
  422. HANDLE_OPCODE (WASM_OP_F64_PROMOTE_F32), /* 0xbb */ \
  423. HANDLE_OPCODE (WASM_OP_I32_REINTERPRET_F32), /* 0xbc */ \
  424. HANDLE_OPCODE (WASM_OP_I64_REINTERPRET_F64), /* 0xbd */ \
  425. HANDLE_OPCODE (WASM_OP_F32_REINTERPRET_I32), /* 0xbe */ \
  426. HANDLE_OPCODE (WASM_OP_F64_REINTERPRET_I64), /* 0xbf */ \
  427. HANDLE_OPCODE (WASM_OP_DROP_64), /* 0xc0 */ \
  428. HANDLE_OPCODE (WASM_OP_SELECT_64), /* 0xc1 */ \
  429. HANDLE_OPCODE (EXT_OP_GET_LOCAL_FAST), /* 0xc2 */ \
  430. HANDLE_OPCODE (EXT_OP_SET_LOCAL_FAST_I64), /* 0xc3 */ \
  431. HANDLE_OPCODE (EXT_OP_SET_LOCAL_FAST), /* 0xc4 */ \
  432. HANDLE_OPCODE (EXT_OP_TEE_LOCAL_FAST), /* 0xc5 */ \
  433. HANDLE_OPCODE (EXT_OP_TEE_LOCAL_FAST_I64), /* 0xc6 */ \
  434. HANDLE_OPCODE (EXT_OP_COPY_STACK_TOP), /* 0xc7 */ \
  435. HANDLE_OPCODE (EXT_OP_COPY_STACK_TOP_I64), /* 0xc8 */ \
  436. HANDLE_OPCODE (WASM_OP_IMPDEP), /* 0xc9 */ \
  437. }
  438. #endif /* end of _WASM_OPCODE_H */