wasm_opcode.h 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043
  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_TRY = 0x06, /* try */
  20. WASM_OP_CATCH = 0x07, /* catch* */
  21. WASM_OP_THROW = 0x08, /* throw of a try catch */
  22. WASM_OP_RETHROW = 0x09, /* rethrow of a try catch */
  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_RETURN_CALL = 0x12, /* return_call */
  32. WASM_OP_RETURN_CALL_INDIRECT = 0x13, /* return_call_indirect */
  33. WASM_OP_CALL_REF = 0x14, /* call_ref */
  34. WASM_OP_RETURN_CALL_REF = 0x15, /* return_call_ref */
  35. WASM_OP_UNUSED_0x16 = 0x16,
  36. WASM_OP_UNUSED_0x17 = 0x17,
  37. WASM_OP_DELEGATE = 0x18, /* delegate block of the try catch*/
  38. WASM_OP_CATCH_ALL = 0x19, /* a catch_all handler in a try block */
  39. /* parametric instructions */
  40. WASM_OP_DROP = 0x1a, /* drop */
  41. WASM_OP_SELECT = 0x1b, /* select */
  42. WASM_OP_SELECT_T = 0x1c, /* select t */
  43. WASM_OP_GET_GLOBAL_64 = 0x1d,
  44. WASM_OP_SET_GLOBAL_64 = 0x1e,
  45. WASM_OP_SET_GLOBAL_AUX_STACK = 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_TABLE_GET = 0x25, /* table.get */
  53. WASM_OP_TABLE_SET = 0x26, /* table.set */
  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.store16 */
  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. WASM_OP_I32_EXTEND8_S = 0xc0, /* i32.extend8_s */
  214. WASM_OP_I32_EXTEND16_S = 0xc1, /* i32.extend16_s */
  215. WASM_OP_I64_EXTEND8_S = 0xc2, /* i64.extend8_s */
  216. WASM_OP_I64_EXTEND16_S = 0xc3, /* i64.extend16_s */
  217. WASM_OP_I64_EXTEND32_S = 0xc4, /* i64.extend32_s */
  218. /* drop/select specified types*/
  219. WASM_OP_DROP_64 = 0xc5,
  220. WASM_OP_SELECT_64 = 0xc6,
  221. /* extend op code */
  222. EXT_OP_GET_LOCAL_FAST = 0xc7,
  223. EXT_OP_SET_LOCAL_FAST_I64 = 0xc8,
  224. EXT_OP_SET_LOCAL_FAST = 0xc9,
  225. EXT_OP_TEE_LOCAL_FAST = 0xca,
  226. EXT_OP_TEE_LOCAL_FAST_I64 = 0xcb,
  227. EXT_OP_COPY_STACK_TOP = 0xcc,
  228. EXT_OP_COPY_STACK_TOP_I64 = 0xcd,
  229. EXT_OP_COPY_STACK_VALUES = 0xce,
  230. WASM_OP_IMPDEP = 0xcf,
  231. WASM_OP_REF_NULL = 0xd0, /* ref.null */
  232. WASM_OP_REF_IS_NULL = 0xd1, /* ref.is_null */
  233. WASM_OP_REF_FUNC = 0xd2, /* ref.func */
  234. WASM_OP_REF_EQ = 0xd3, /* ref.eq */
  235. WASM_OP_REF_AS_NON_NULL = 0xd4, /* ref.as_non_null */
  236. WASM_OP_BR_ON_NULL = 0xd5, /* br_on_null */
  237. WASM_OP_BR_ON_NON_NULL = 0xd6, /* br_on_non_null */
  238. EXT_OP_BLOCK = 0xd7, /* block with blocktype */
  239. EXT_OP_LOOP = 0xd8, /* loop with blocktype */
  240. EXT_OP_IF = 0xd9, /* if with blocktype */
  241. EXT_OP_BR_TABLE_CACHE = 0xda, /* br_table from cache */
  242. EXT_OP_TRY = 0xdb, /* try block with blocktype */
  243. #if WASM_ENABLE_DEBUG_INTERP != 0
  244. DEBUG_OP_BREAK = 0xdc, /* debug break point */
  245. #endif
  246. #if WASM_ENABLE_SIMDE != 0
  247. EXT_OP_SET_LOCAL_FAST_V128 = 0xdd,
  248. EXT_OP_TEE_LOCAL_FAST_V128 = 0xde,
  249. EXT_OP_COPY_STACK_TOP_V128 = 0xdf,
  250. WASM_OP_GET_GLOBAL_V128 = 0xe0,
  251. WASM_OP_SET_GLOBAL_V128 = 0xe1,
  252. WASM_OP_SELECT_128 = 0xe2,
  253. #endif
  254. /* Post-MVP extend op prefix */
  255. WASM_OP_GC_PREFIX = 0xfb,
  256. WASM_OP_MISC_PREFIX = 0xfc,
  257. WASM_OP_SIMD_PREFIX = 0xfd,
  258. WASM_OP_ATOMIC_PREFIX = 0xfe,
  259. } WASMOpcode;
  260. typedef enum WASMGCEXTOpcode {
  261. WASM_OP_STRUCT_NEW = 0x00, /* struct.new */
  262. WASM_OP_STRUCT_NEW_DEFAULT = 0x01, /* struct.new_default */
  263. WASM_OP_STRUCT_GET = 0x02, /* struct.get */
  264. WASM_OP_STRUCT_GET_S = 0x03, /* struct.get_s */
  265. WASM_OP_STRUCT_GET_U = 0x04, /* struct.get_u */
  266. WASM_OP_STRUCT_SET = 0x05, /* struct.set */
  267. WASM_OP_ARRAY_NEW = 0x06, /* array.new */
  268. WASM_OP_ARRAY_NEW_DEFAULT = 0x07, /* array.new_default */
  269. WASM_OP_ARRAY_NEW_FIXED = 0x08, /* array.new_fixed */
  270. WASM_OP_ARRAY_NEW_DATA = 0x09, /* array.new_data */
  271. WASM_OP_ARRAY_NEW_ELEM = 0x0A, /* array.new_elem */
  272. WASM_OP_ARRAY_GET = 0x0B, /* array.get */
  273. WASM_OP_ARRAY_GET_S = 0x0C, /* array.get_s */
  274. WASM_OP_ARRAY_GET_U = 0x0D, /* array.get_u */
  275. WASM_OP_ARRAY_SET = 0x0E, /* array.set */
  276. WASM_OP_ARRAY_LEN = 0x0F, /* array.len */
  277. WASM_OP_ARRAY_FILL = 0x10, /* array.fill */
  278. WASM_OP_ARRAY_COPY = 0x11, /* array.copy */
  279. WASM_OP_ARRAY_INIT_DATA = 0x12,
  280. /* array.init_data */ /* TODO */
  281. WASM_OP_ARRAY_INIT_ELEM = 0x13,
  282. /* array.init_elem */ /* TODO */
  283. WASM_OP_REF_TEST = 0x14, /* ref.test */
  284. WASM_OP_REF_TEST_NULLABLE = 0x15, /* ref.test_nullable */
  285. WASM_OP_REF_CAST = 0x16, /* ref.cast */
  286. WASM_OP_REF_CAST_NULLABLE = 0x17, /* ref.cast_nullable */
  287. WASM_OP_BR_ON_CAST = 0x18, /* br_on_cast */
  288. WASM_OP_BR_ON_CAST_FAIL = 0x19, /* br_on_cast_fail */
  289. WASM_OP_ANY_CONVERT_EXTERN = 0x1A, /* any.convert_extern */
  290. WASM_OP_EXTERN_CONVERT_ANY = 0x1B, /* extern.covert_any */
  291. WASM_OP_REF_I31 = 0x1C, /* ref.i31 */
  292. WASM_OP_I31_GET_S = 0x1D, /* i31.get_s */
  293. WASM_OP_I31_GET_U = 0x1E, /* i31.get_u */
  294. /* stringref related opcodes */
  295. WASM_OP_STRING_NEW_UTF8 = 0x80, /* string.new_utf8 */
  296. WASM_OP_STRING_NEW_WTF16 = 0x81, /* string.new_wtf16 */
  297. WASM_OP_STRING_CONST = 0x82, /* string.const */
  298. WASM_OP_STRING_MEASURE_UTF8 = 0x83, /* string.measure_utf8 */
  299. WASM_OP_STRING_MEASURE_WTF8 = 0x84, /* string.measure_wtf8 */
  300. WASM_OP_STRING_MEASURE_WTF16 = 0x85, /* string.measure_wtf16 */
  301. WASM_OP_STRING_ENCODE_UTF8 = 0x86, /* string.encode_utf8 */
  302. WASM_OP_STRING_ENCODE_WTF16 = 0x87, /* string.encode_wtf16 */
  303. WASM_OP_STRING_CONCAT = 0x88, /* string.concat */
  304. WASM_OP_STRING_EQ = 0x89, /* string.eq */
  305. WASM_OP_STRING_IS_USV_SEQUENCE = 0x8a, /* string.is_usv_sequence */
  306. WASM_OP_STRING_NEW_LOSSY_UTF8 = 0x8b, /* string.new_lossy_utf8 */
  307. WASM_OP_STRING_NEW_WTF8 = 0x8c, /* string.new_wtf8 */
  308. WASM_OP_STRING_ENCODE_LOSSY_UTF8 = 0x8d, /* string.encode_lossy_utf8 */
  309. WASM_OP_STRING_ENCODE_WTF8 = 0x8e, /* string.encode_wtf8 */
  310. WASM_OP_STRING_AS_WTF8 = 0x90, /* string.as_wtf8 */
  311. WASM_OP_STRINGVIEW_WTF8_ADVANCE = 0x91, /* stringview_wtf8.advance */
  312. WASM_OP_STRINGVIEW_WTF8_ENCODE_UTF8 =
  313. 0x92, /* stringview_wtf8.encode_utf8 */
  314. WASM_OP_STRINGVIEW_WTF8_SLICE = 0x93, /* stringview_wtf8.slice */
  315. WASM_OP_STRINGVIEW_WTF8_ENCODE_LOSSY_UTF8 =
  316. 0x94, /* stringview_wtf8.encode_lossy_utf8 */
  317. WASM_OP_STRINGVIEW_WTF8_ENCODE_WTF8 =
  318. 0x95, /* stringview_wtf8.encode_wtf8 */
  319. WASM_OP_STRING_AS_WTF16 = 0x98, /* string.as_wtf16 */
  320. WASM_OP_STRINGVIEW_WTF16_LENGTH = 0x99, /* stringview_wtf16.length */
  321. WASM_OP_STRINGVIEW_WTF16_GET_CODEUNIT =
  322. 0x9a, /* stringview_wtf16.get_codeunit */
  323. WASM_OP_STRINGVIEW_WTF16_ENCODE = 0x9b, /* stringview_wtf16.encode */
  324. WASM_OP_STRINGVIEW_WTF16_SLICE = 0x9c, /* stringview_wtf16.slice */
  325. WASM_OP_STRING_AS_ITER = 0xa0, /* string.as_iter */
  326. WASM_OP_STRINGVIEW_ITER_NEXT = 0xa1, /* stringview_iter.next */
  327. WASM_OP_STRINGVIEW_ITER_ADVANCE = 0xa2, /* stringview_iter.advance */
  328. WASM_OP_STRINGVIEW_ITER_REWIND = 0xa3, /* stringview_iter.rewind */
  329. WASM_OP_STRINGVIEW_ITER_SLICE = 0xa4, /* stringview_iter.slice */
  330. WASM_OP_STRING_NEW_UTF8_ARRAY = 0xb0, /* string.new_utf8_array */
  331. WASM_OP_STRING_NEW_WTF16_ARRAY = 0xb1, /* string.new_wtf16_array */
  332. WASM_OP_STRING_ENCODE_UTF8_ARRAY = 0xb2, /* string.encode_utf8_array */
  333. WASM_OP_STRING_ENCODE_WTF16_ARRAY = 0xb3, /* string.encode_wtf16_array */
  334. WASM_OP_STRING_NEW_LOSSY_UTF8_ARRAY =
  335. 0xb4, /* string.new_lossy_utf8_array */
  336. WASM_OP_STRING_NEW_WTF8_ARRAY = 0xb5, /* string.new_wtf8_array */
  337. WASM_OP_STRING_ENCODE_LOSSY_UTF8_ARRAY =
  338. 0xb6, /* string.encode_lossy_utf8_array */
  339. WASM_OP_STRING_ENCODE_WTF8_ARRAY = 0xb7, /* string.encode_wtf8_array */
  340. } WASMGCEXTOpcode;
  341. typedef enum WASMMiscEXTOpcode {
  342. WASM_OP_I32_TRUNC_SAT_S_F32 = 0x00,
  343. WASM_OP_I32_TRUNC_SAT_U_F32 = 0x01,
  344. WASM_OP_I32_TRUNC_SAT_S_F64 = 0x02,
  345. WASM_OP_I32_TRUNC_SAT_U_F64 = 0x03,
  346. WASM_OP_I64_TRUNC_SAT_S_F32 = 0x04,
  347. WASM_OP_I64_TRUNC_SAT_U_F32 = 0x05,
  348. WASM_OP_I64_TRUNC_SAT_S_F64 = 0x06,
  349. WASM_OP_I64_TRUNC_SAT_U_F64 = 0x07,
  350. WASM_OP_MEMORY_INIT = 0x08,
  351. WASM_OP_DATA_DROP = 0x09,
  352. WASM_OP_MEMORY_COPY = 0x0a,
  353. WASM_OP_MEMORY_FILL = 0x0b,
  354. WASM_OP_TABLE_INIT = 0x0c,
  355. WASM_OP_ELEM_DROP = 0x0d,
  356. WASM_OP_TABLE_COPY = 0x0e,
  357. WASM_OP_TABLE_GROW = 0x0f,
  358. WASM_OP_TABLE_SIZE = 0x10,
  359. WASM_OP_TABLE_FILL = 0x11,
  360. } WASMMiscEXTOpcode;
  361. typedef enum WASMSimdEXTOpcode {
  362. /* memory instruction */
  363. SIMD_v128_load = 0x00,
  364. SIMD_v128_load8x8_s = 0x01,
  365. SIMD_v128_load8x8_u = 0x02,
  366. SIMD_v128_load16x4_s = 0x03,
  367. SIMD_v128_load16x4_u = 0x04,
  368. SIMD_v128_load32x2_s = 0x05,
  369. SIMD_v128_load32x2_u = 0x06,
  370. SIMD_v128_load8_splat = 0x07,
  371. SIMD_v128_load16_splat = 0x08,
  372. SIMD_v128_load32_splat = 0x09,
  373. SIMD_v128_load64_splat = 0x0a,
  374. SIMD_v128_store = 0x0b,
  375. /* basic operation */
  376. SIMD_v128_const = 0x0c,
  377. SIMD_v8x16_shuffle = 0x0d,
  378. SIMD_v8x16_swizzle = 0x0e,
  379. /* splat operation */
  380. SIMD_i8x16_splat = 0x0f,
  381. SIMD_i16x8_splat = 0x10,
  382. SIMD_i32x4_splat = 0x11,
  383. SIMD_i64x2_splat = 0x12,
  384. SIMD_f32x4_splat = 0x13,
  385. SIMD_f64x2_splat = 0x14,
  386. /* lane operation */
  387. SIMD_i8x16_extract_lane_s = 0x15,
  388. SIMD_i8x16_extract_lane_u = 0x16,
  389. SIMD_i8x16_replace_lane = 0x17,
  390. SIMD_i16x8_extract_lane_s = 0x18,
  391. SIMD_i16x8_extract_lane_u = 0x19,
  392. SIMD_i16x8_replace_lane = 0x1a,
  393. SIMD_i32x4_extract_lane = 0x1b,
  394. SIMD_i32x4_replace_lane = 0x1c,
  395. SIMD_i64x2_extract_lane = 0x1d,
  396. SIMD_i64x2_replace_lane = 0x1e,
  397. SIMD_f32x4_extract_lane = 0x1f,
  398. SIMD_f32x4_replace_lane = 0x20,
  399. SIMD_f64x2_extract_lane = 0x21,
  400. SIMD_f64x2_replace_lane = 0x22,
  401. /* i8x16 compare operation */
  402. SIMD_i8x16_eq = 0x23,
  403. SIMD_i8x16_ne = 0x24,
  404. SIMD_i8x16_lt_s = 0x25,
  405. SIMD_i8x16_lt_u = 0x26,
  406. SIMD_i8x16_gt_s = 0x27,
  407. SIMD_i8x16_gt_u = 0x28,
  408. SIMD_i8x16_le_s = 0x29,
  409. SIMD_i8x16_le_u = 0x2a,
  410. SIMD_i8x16_ge_s = 0x2b,
  411. SIMD_i8x16_ge_u = 0x2c,
  412. /* i16x8 compare operation */
  413. SIMD_i16x8_eq = 0x2d,
  414. SIMD_i16x8_ne = 0x2e,
  415. SIMD_i16x8_lt_s = 0x2f,
  416. SIMD_i16x8_lt_u = 0x30,
  417. SIMD_i16x8_gt_s = 0x31,
  418. SIMD_i16x8_gt_u = 0x32,
  419. SIMD_i16x8_le_s = 0x33,
  420. SIMD_i16x8_le_u = 0x34,
  421. SIMD_i16x8_ge_s = 0x35,
  422. SIMD_i16x8_ge_u = 0x36,
  423. /* i32x4 compare operation */
  424. SIMD_i32x4_eq = 0x37,
  425. SIMD_i32x4_ne = 0x38,
  426. SIMD_i32x4_lt_s = 0x39,
  427. SIMD_i32x4_lt_u = 0x3a,
  428. SIMD_i32x4_gt_s = 0x3b,
  429. SIMD_i32x4_gt_u = 0x3c,
  430. SIMD_i32x4_le_s = 0x3d,
  431. SIMD_i32x4_le_u = 0x3e,
  432. SIMD_i32x4_ge_s = 0x3f,
  433. SIMD_i32x4_ge_u = 0x40,
  434. /* f32x4 compare operation */
  435. SIMD_f32x4_eq = 0x41,
  436. SIMD_f32x4_ne = 0x42,
  437. SIMD_f32x4_lt = 0x43,
  438. SIMD_f32x4_gt = 0x44,
  439. SIMD_f32x4_le = 0x45,
  440. SIMD_f32x4_ge = 0x46,
  441. /* f64x2 compare operation */
  442. SIMD_f64x2_eq = 0x47,
  443. SIMD_f64x2_ne = 0x48,
  444. SIMD_f64x2_lt = 0x49,
  445. SIMD_f64x2_gt = 0x4a,
  446. SIMD_f64x2_le = 0x4b,
  447. SIMD_f64x2_ge = 0x4c,
  448. /* v128 operation */
  449. SIMD_v128_not = 0x4d,
  450. SIMD_v128_and = 0x4e,
  451. SIMD_v128_andnot = 0x4f,
  452. SIMD_v128_or = 0x50,
  453. SIMD_v128_xor = 0x51,
  454. SIMD_v128_bitselect = 0x52,
  455. SIMD_v128_any_true = 0x53,
  456. /* Load Lane Operation */
  457. SIMD_v128_load8_lane = 0x54,
  458. SIMD_v128_load16_lane = 0x55,
  459. SIMD_v128_load32_lane = 0x56,
  460. SIMD_v128_load64_lane = 0x57,
  461. SIMD_v128_store8_lane = 0x58,
  462. SIMD_v128_store16_lane = 0x59,
  463. SIMD_v128_store32_lane = 0x5a,
  464. SIMD_v128_store64_lane = 0x5b,
  465. SIMD_v128_load32_zero = 0x5c,
  466. SIMD_v128_load64_zero = 0x5d,
  467. /* Float conversion */
  468. SIMD_f32x4_demote_f64x2_zero = 0x5e,
  469. SIMD_f64x2_promote_low_f32x4_zero = 0x5f,
  470. /* i8x16 Operation */
  471. SIMD_i8x16_abs = 0x60,
  472. SIMD_i8x16_neg = 0x61,
  473. SIMD_i8x16_popcnt = 0x62,
  474. SIMD_i8x16_all_true = 0x63,
  475. SIMD_i8x16_bitmask = 0x64,
  476. SIMD_i8x16_narrow_i16x8_s = 0x65,
  477. SIMD_i8x16_narrow_i16x8_u = 0x66,
  478. SIMD_f32x4_ceil = 0x67,
  479. SIMD_f32x4_floor = 0x68,
  480. SIMD_f32x4_trunc = 0x69,
  481. SIMD_f32x4_nearest = 0x6a,
  482. SIMD_i8x16_shl = 0x6b,
  483. SIMD_i8x16_shr_s = 0x6c,
  484. SIMD_i8x16_shr_u = 0x6d,
  485. SIMD_i8x16_add = 0x6e,
  486. SIMD_i8x16_add_sat_s = 0x6f,
  487. SIMD_i8x16_add_sat_u = 0x70,
  488. SIMD_i8x16_sub = 0x71,
  489. SIMD_i8x16_sub_sat_s = 0x72,
  490. SIMD_i8x16_sub_sat_u = 0x73,
  491. SIMD_f64x2_ceil = 0x74,
  492. SIMD_f64x2_floor = 0x75,
  493. SIMD_i8x16_min_s = 0x76,
  494. SIMD_i8x16_min_u = 0x77,
  495. SIMD_i8x16_max_s = 0x78,
  496. SIMD_i8x16_max_u = 0x79,
  497. SIMD_f64x2_trunc = 0x7a,
  498. SIMD_i8x16_avgr_u = 0x7b,
  499. SIMD_i16x8_extadd_pairwise_i8x16_s = 0x7c,
  500. SIMD_i16x8_extadd_pairwise_i8x16_u = 0x7d,
  501. SIMD_i32x4_extadd_pairwise_i16x8_s = 0x7e,
  502. SIMD_i32x4_extadd_pairwise_i16x8_u = 0x7f,
  503. /* i16x8 operation */
  504. SIMD_i16x8_abs = 0x80,
  505. SIMD_i16x8_neg = 0x81,
  506. SIMD_i16x8_q15mulr_sat_s = 0x82,
  507. SIMD_i16x8_all_true = 0x83,
  508. SIMD_i16x8_bitmask = 0x84,
  509. SIMD_i16x8_narrow_i32x4_s = 0x85,
  510. SIMD_i16x8_narrow_i32x4_u = 0x86,
  511. SIMD_i16x8_extend_low_i8x16_s = 0x87,
  512. SIMD_i16x8_extend_high_i8x16_s = 0x88,
  513. SIMD_i16x8_extend_low_i8x16_u = 0x89,
  514. SIMD_i16x8_extend_high_i8x16_u = 0x8a,
  515. SIMD_i16x8_shl = 0x8b,
  516. SIMD_i16x8_shr_s = 0x8c,
  517. SIMD_i16x8_shr_u = 0x8d,
  518. SIMD_i16x8_add = 0x8e,
  519. SIMD_i16x8_add_sat_s = 0x8f,
  520. SIMD_i16x8_add_sat_u = 0x90,
  521. SIMD_i16x8_sub = 0x91,
  522. SIMD_i16x8_sub_sat_s = 0x92,
  523. SIMD_i16x8_sub_sat_u = 0x93,
  524. SIMD_f64x2_nearest = 0x94,
  525. SIMD_i16x8_mul = 0x95,
  526. SIMD_i16x8_min_s = 0x96,
  527. SIMD_i16x8_min_u = 0x97,
  528. SIMD_i16x8_max_s = 0x98,
  529. SIMD_i16x8_max_u = 0x99,
  530. /* placeholder = 0x9a */
  531. SIMD_i16x8_avgr_u = 0x9b,
  532. SIMD_i16x8_extmul_low_i8x16_s = 0x9c,
  533. SIMD_i16x8_extmul_high_i8x16_s = 0x9d,
  534. SIMD_i16x8_extmul_low_i8x16_u = 0x9e,
  535. SIMD_i16x8_extmul_high_i8x16_u = 0x9f,
  536. /* i32x4 operation */
  537. SIMD_i32x4_abs = 0xa0,
  538. SIMD_i32x4_neg = 0xa1,
  539. /* placeholder = 0xa2 */
  540. SIMD_i32x4_all_true = 0xa3,
  541. SIMD_i32x4_bitmask = 0xa4,
  542. /* placeholder = 0xa5 */
  543. /* placeholder = 0xa6 */
  544. SIMD_i32x4_extend_low_i16x8_s = 0xa7,
  545. SIMD_i32x4_extend_high_i16x8_s = 0xa8,
  546. SIMD_i32x4_extend_low_i16x8_u = 0xa9,
  547. SIMD_i32x4_extend_high_i16x8_u = 0xaa,
  548. SIMD_i32x4_shl = 0xab,
  549. SIMD_i32x4_shr_s = 0xac,
  550. SIMD_i32x4_shr_u = 0xad,
  551. SIMD_i32x4_add = 0xae,
  552. /* placeholder = 0xaf */
  553. /* placeholder = 0xb0 */
  554. SIMD_i32x4_sub = 0xb1,
  555. /* placeholder = 0xb2 */
  556. /* placeholder = 0xb3 */
  557. /* placeholder = 0xb4 */
  558. SIMD_i32x4_mul = 0xb5,
  559. SIMD_i32x4_min_s = 0xb6,
  560. SIMD_i32x4_min_u = 0xb7,
  561. SIMD_i32x4_max_s = 0xb8,
  562. SIMD_i32x4_max_u = 0xb9,
  563. SIMD_i32x4_dot_i16x8_s = 0xba,
  564. /* placeholder = 0xbb */
  565. SIMD_i32x4_extmul_low_i16x8_s = 0xbc,
  566. SIMD_i32x4_extmul_high_i16x8_s = 0xbd,
  567. SIMD_i32x4_extmul_low_i16x8_u = 0xbe,
  568. SIMD_i32x4_extmul_high_i16x8_u = 0xbf,
  569. /* i64x2 operation */
  570. SIMD_i64x2_abs = 0xc0,
  571. SIMD_i64x2_neg = 0xc1,
  572. /* placeholder = 0xc2 */
  573. SIMD_i64x2_all_true = 0xc3,
  574. SIMD_i64x2_bitmask = 0xc4,
  575. /* placeholder = 0xc5 */
  576. /* placeholder = 0xc6 */
  577. SIMD_i64x2_extend_low_i32x4_s = 0xc7,
  578. SIMD_i64x2_extend_high_i32x4_s = 0xc8,
  579. SIMD_i64x2_extend_low_i32x4_u = 0xc9,
  580. SIMD_i64x2_extend_high_i32x4_u = 0xca,
  581. SIMD_i64x2_shl = 0xcb,
  582. SIMD_i64x2_shr_s = 0xcc,
  583. SIMD_i64x2_shr_u = 0xcd,
  584. SIMD_i64x2_add = 0xce,
  585. /* placeholder = 0xcf */
  586. /* placeholder = 0xd0 */
  587. SIMD_i64x2_sub = 0xd1,
  588. /* placeholder = 0xd2 */
  589. /* placeholder = 0xd3 */
  590. /* placeholder = 0xd4 */
  591. SIMD_i64x2_mul = 0xd5,
  592. SIMD_i64x2_eq = 0xd6,
  593. SIMD_i64x2_ne = 0xd7,
  594. SIMD_i64x2_lt_s = 0xd8,
  595. SIMD_i64x2_gt_s = 0xd9,
  596. SIMD_i64x2_le_s = 0xda,
  597. SIMD_i64x2_ge_s = 0xdb,
  598. SIMD_i64x2_extmul_low_i32x4_s = 0xdc,
  599. SIMD_i64x2_extmul_high_i32x4_s = 0xdd,
  600. SIMD_i64x2_extmul_low_i32x4_u = 0xde,
  601. SIMD_i64x2_extmul_high_i32x4_u = 0xdf,
  602. /* f32x4 operation */
  603. SIMD_f32x4_abs = 0xe0,
  604. SIMD_f32x4_neg = 0xe1,
  605. /* placeholder = 0xe2 */
  606. SIMD_f32x4_sqrt = 0xe3,
  607. SIMD_f32x4_add = 0xe4,
  608. SIMD_f32x4_sub = 0xe5,
  609. SIMD_f32x4_mul = 0xe6,
  610. SIMD_f32x4_div = 0xe7,
  611. SIMD_f32x4_min = 0xe8,
  612. SIMD_f32x4_max = 0xe9,
  613. SIMD_f32x4_pmin = 0xea,
  614. SIMD_f32x4_pmax = 0xeb,
  615. /* f64x2 operation */
  616. SIMD_f64x2_abs = 0xec,
  617. SIMD_f64x2_neg = 0xed,
  618. /* placeholder = 0xee */
  619. SIMD_f64x2_sqrt = 0xef,
  620. SIMD_f64x2_add = 0xf0,
  621. SIMD_f64x2_sub = 0xf1,
  622. SIMD_f64x2_mul = 0xf2,
  623. SIMD_f64x2_div = 0xf3,
  624. SIMD_f64x2_min = 0xf4,
  625. SIMD_f64x2_max = 0xf5,
  626. SIMD_f64x2_pmin = 0xf6,
  627. SIMD_f64x2_pmax = 0xf7,
  628. /* conversion operation */
  629. SIMD_i32x4_trunc_sat_f32x4_s = 0xf8,
  630. SIMD_i32x4_trunc_sat_f32x4_u = 0xf9,
  631. SIMD_f32x4_convert_i32x4_s = 0xfa,
  632. SIMD_f32x4_convert_i32x4_u = 0xfb,
  633. SIMD_i32x4_trunc_sat_f64x2_s_zero = 0xfc,
  634. SIMD_i32x4_trunc_sat_f64x2_u_zero = 0xfd,
  635. SIMD_f64x2_convert_low_i32x4_s = 0xfe,
  636. SIMD_f64x2_convert_low_i32x4_u = 0xff,
  637. } WASMSimdEXTOpcode;
  638. typedef enum WASMAtomicEXTOpcode {
  639. /* atomic wait and notify */
  640. WASM_OP_ATOMIC_NOTIFY = 0x00,
  641. WASM_OP_ATOMIC_WAIT32 = 0x01,
  642. WASM_OP_ATOMIC_WAIT64 = 0x02,
  643. WASM_OP_ATOMIC_FENCE = 0x03,
  644. /* atomic load and store */
  645. WASM_OP_ATOMIC_I32_LOAD = 0x10,
  646. WASM_OP_ATOMIC_I64_LOAD = 0x11,
  647. WASM_OP_ATOMIC_I32_LOAD8_U = 0x12,
  648. WASM_OP_ATOMIC_I32_LOAD16_U = 0x13,
  649. WASM_OP_ATOMIC_I64_LOAD8_U = 0x14,
  650. WASM_OP_ATOMIC_I64_LOAD16_U = 0x15,
  651. WASM_OP_ATOMIC_I64_LOAD32_U = 0x16,
  652. WASM_OP_ATOMIC_I32_STORE = 0x17,
  653. WASM_OP_ATOMIC_I64_STORE = 0x18,
  654. WASM_OP_ATOMIC_I32_STORE8 = 0x19,
  655. WASM_OP_ATOMIC_I32_STORE16 = 0x1a,
  656. WASM_OP_ATOMIC_I64_STORE8 = 0x1b,
  657. WASM_OP_ATOMIC_I64_STORE16 = 0x1c,
  658. WASM_OP_ATOMIC_I64_STORE32 = 0x1d,
  659. /* atomic add */
  660. WASM_OP_ATOMIC_RMW_I32_ADD = 0x1e,
  661. WASM_OP_ATOMIC_RMW_I64_ADD = 0x1f,
  662. WASM_OP_ATOMIC_RMW_I32_ADD8_U = 0x20,
  663. WASM_OP_ATOMIC_RMW_I32_ADD16_U = 0x21,
  664. WASM_OP_ATOMIC_RMW_I64_ADD8_U = 0x22,
  665. WASM_OP_ATOMIC_RMW_I64_ADD16_U = 0x23,
  666. WASM_OP_ATOMIC_RMW_I64_ADD32_U = 0x24,
  667. /* atomic sub */
  668. WASM_OP_ATOMIC_RMW_I32_SUB = 0x25,
  669. WASM_OP_ATOMIC_RMW_I64_SUB = 0x26,
  670. WASM_OP_ATOMIC_RMW_I32_SUB8_U = 0x27,
  671. WASM_OP_ATOMIC_RMW_I32_SUB16_U = 0x28,
  672. WASM_OP_ATOMIC_RMW_I64_SUB8_U = 0x29,
  673. WASM_OP_ATOMIC_RMW_I64_SUB16_U = 0x2a,
  674. WASM_OP_ATOMIC_RMW_I64_SUB32_U = 0x2b,
  675. /* atomic and */
  676. WASM_OP_ATOMIC_RMW_I32_AND = 0x2c,
  677. WASM_OP_ATOMIC_RMW_I64_AND = 0x2d,
  678. WASM_OP_ATOMIC_RMW_I32_AND8_U = 0x2e,
  679. WASM_OP_ATOMIC_RMW_I32_AND16_U = 0x2f,
  680. WASM_OP_ATOMIC_RMW_I64_AND8_U = 0x30,
  681. WASM_OP_ATOMIC_RMW_I64_AND16_U = 0x31,
  682. WASM_OP_ATOMIC_RMW_I64_AND32_U = 0x32,
  683. /* atomic or */
  684. WASM_OP_ATOMIC_RMW_I32_OR = 0x33,
  685. WASM_OP_ATOMIC_RMW_I64_OR = 0x34,
  686. WASM_OP_ATOMIC_RMW_I32_OR8_U = 0x35,
  687. WASM_OP_ATOMIC_RMW_I32_OR16_U = 0x36,
  688. WASM_OP_ATOMIC_RMW_I64_OR8_U = 0x37,
  689. WASM_OP_ATOMIC_RMW_I64_OR16_U = 0x38,
  690. WASM_OP_ATOMIC_RMW_I64_OR32_U = 0x39,
  691. /* atomic xor */
  692. WASM_OP_ATOMIC_RMW_I32_XOR = 0x3a,
  693. WASM_OP_ATOMIC_RMW_I64_XOR = 0x3b,
  694. WASM_OP_ATOMIC_RMW_I32_XOR8_U = 0x3c,
  695. WASM_OP_ATOMIC_RMW_I32_XOR16_U = 0x3d,
  696. WASM_OP_ATOMIC_RMW_I64_XOR8_U = 0x3e,
  697. WASM_OP_ATOMIC_RMW_I64_XOR16_U = 0x3f,
  698. WASM_OP_ATOMIC_RMW_I64_XOR32_U = 0x40,
  699. /* atomic xchg */
  700. WASM_OP_ATOMIC_RMW_I32_XCHG = 0x41,
  701. WASM_OP_ATOMIC_RMW_I64_XCHG = 0x42,
  702. WASM_OP_ATOMIC_RMW_I32_XCHG8_U = 0x43,
  703. WASM_OP_ATOMIC_RMW_I32_XCHG16_U = 0x44,
  704. WASM_OP_ATOMIC_RMW_I64_XCHG8_U = 0x45,
  705. WASM_OP_ATOMIC_RMW_I64_XCHG16_U = 0x46,
  706. WASM_OP_ATOMIC_RMW_I64_XCHG32_U = 0x47,
  707. /* atomic cmpxchg */
  708. WASM_OP_ATOMIC_RMW_I32_CMPXCHG = 0x48,
  709. WASM_OP_ATOMIC_RMW_I64_CMPXCHG = 0x49,
  710. WASM_OP_ATOMIC_RMW_I32_CMPXCHG8_U = 0x4a,
  711. WASM_OP_ATOMIC_RMW_I32_CMPXCHG16_U = 0x4b,
  712. WASM_OP_ATOMIC_RMW_I64_CMPXCHG8_U = 0x4c,
  713. WASM_OP_ATOMIC_RMW_I64_CMPXCHG16_U = 0x4d,
  714. WASM_OP_ATOMIC_RMW_I64_CMPXCHG32_U = 0x4e,
  715. } WASMAtomicEXTOpcode;
  716. #if WASM_ENABLE_DEBUG_INTERP != 0
  717. #define DEF_DEBUG_BREAK_HANDLE() \
  718. [DEBUG_OP_BREAK] = HANDLE_OPCODE(DEBUG_OP_BREAK), /* 0xdb */
  719. #else
  720. #define DEF_DEBUG_BREAK_HANDLE()
  721. #endif
  722. #define SET_GOTO_TABLE_ELEM(opcode) [opcode] = HANDLE_OPCODE(opcode)
  723. #if WASM_ENABLE_SIMDE != 0
  724. #define DEF_EXT_V128_HANDLE() \
  725. SET_GOTO_TABLE_ELEM(EXT_OP_SET_LOCAL_FAST_V128), /* 0xdd */ \
  726. SET_GOTO_TABLE_ELEM(EXT_OP_TEE_LOCAL_FAST_V128), /* 0xde */ \
  727. SET_GOTO_TABLE_ELEM(EXT_OP_COPY_STACK_TOP_V128), /* 0xdf */ \
  728. SET_GOTO_TABLE_ELEM(WASM_OP_GET_GLOBAL_V128), /* 0xe0 */ \
  729. SET_GOTO_TABLE_ELEM(WASM_OP_SET_GLOBAL_V128), /* 0xe1 */ \
  730. SET_GOTO_TABLE_ELEM(WASM_OP_SELECT_128), /* 0xe2 */
  731. #else
  732. #define DEF_EXT_V128_HANDLE()
  733. #endif
  734. /*
  735. * Macro used to generate computed goto tables for the C interpreter.
  736. */
  737. #define WASM_INSTRUCTION_NUM 256
  738. #define DEFINE_GOTO_TABLE(type, _name) \
  739. static type _name[WASM_INSTRUCTION_NUM] = { \
  740. HANDLE_OPCODE(WASM_OP_UNREACHABLE), /* 0x00 */ \
  741. HANDLE_OPCODE(WASM_OP_NOP), /* 0x01 */ \
  742. HANDLE_OPCODE(WASM_OP_BLOCK), /* 0x02 */ \
  743. HANDLE_OPCODE(WASM_OP_LOOP), /* 0x03 */ \
  744. HANDLE_OPCODE(WASM_OP_IF), /* 0x04 */ \
  745. HANDLE_OPCODE(WASM_OP_ELSE), /* 0x05 */ \
  746. HANDLE_OPCODE(WASM_OP_TRY), /* 0x06 */ \
  747. HANDLE_OPCODE(WASM_OP_CATCH), /* 0x07 */ \
  748. HANDLE_OPCODE(WASM_OP_THROW), /* 0x08 */ \
  749. HANDLE_OPCODE(WASM_OP_RETHROW), /* 0x09 */ \
  750. HANDLE_OPCODE(WASM_OP_UNUSED_0x0a), /* 0x0a */ \
  751. HANDLE_OPCODE(WASM_OP_END), /* 0x0b */ \
  752. HANDLE_OPCODE(WASM_OP_BR), /* 0x0c */ \
  753. HANDLE_OPCODE(WASM_OP_BR_IF), /* 0x0d */ \
  754. HANDLE_OPCODE(WASM_OP_BR_TABLE), /* 0x0e */ \
  755. HANDLE_OPCODE(WASM_OP_RETURN), /* 0x0f */ \
  756. HANDLE_OPCODE(WASM_OP_CALL), /* 0x10 */ \
  757. HANDLE_OPCODE(WASM_OP_CALL_INDIRECT), /* 0x11 */ \
  758. HANDLE_OPCODE(WASM_OP_RETURN_CALL), /* 0x12 */ \
  759. HANDLE_OPCODE(WASM_OP_RETURN_CALL_INDIRECT), /* 0x13 */ \
  760. HANDLE_OPCODE(WASM_OP_CALL_REF), /* 0x14 */ \
  761. HANDLE_OPCODE(WASM_OP_RETURN_CALL_REF), /* 0x15 */ \
  762. HANDLE_OPCODE(WASM_OP_UNUSED_0x16), /* 0x16 */ \
  763. HANDLE_OPCODE(WASM_OP_UNUSED_0x17), /* 0x17 */ \
  764. HANDLE_OPCODE(WASM_OP_DELEGATE), /* 0x18 */ \
  765. HANDLE_OPCODE(WASM_OP_CATCH_ALL), /* 0x19 */ \
  766. HANDLE_OPCODE(WASM_OP_DROP), /* 0x1a */ \
  767. HANDLE_OPCODE(WASM_OP_SELECT), /* 0x1b */ \
  768. HANDLE_OPCODE(WASM_OP_SELECT_T), /* 0x1c */ \
  769. HANDLE_OPCODE(WASM_OP_GET_GLOBAL_64), /* 0x1d */ \
  770. HANDLE_OPCODE(WASM_OP_SET_GLOBAL_64), /* 0x1e */ \
  771. HANDLE_OPCODE(WASM_OP_SET_GLOBAL_AUX_STACK), /* 0x1f */ \
  772. HANDLE_OPCODE(WASM_OP_GET_LOCAL), /* 0x20 */ \
  773. HANDLE_OPCODE(WASM_OP_SET_LOCAL), /* 0x21 */ \
  774. HANDLE_OPCODE(WASM_OP_TEE_LOCAL), /* 0x22 */ \
  775. HANDLE_OPCODE(WASM_OP_GET_GLOBAL), /* 0x23 */ \
  776. HANDLE_OPCODE(WASM_OP_SET_GLOBAL), /* 0x24 */ \
  777. HANDLE_OPCODE(WASM_OP_TABLE_GET), /* 0x25 */ \
  778. HANDLE_OPCODE(WASM_OP_TABLE_SET), /* 0x26 */ \
  779. HANDLE_OPCODE(WASM_OP_UNUSED_0x27), /* 0x27 */ \
  780. HANDLE_OPCODE(WASM_OP_I32_LOAD), /* 0x28 */ \
  781. HANDLE_OPCODE(WASM_OP_I64_LOAD), /* 0x29 */ \
  782. HANDLE_OPCODE(WASM_OP_F32_LOAD), /* 0x2a */ \
  783. HANDLE_OPCODE(WASM_OP_F64_LOAD), /* 0x2b */ \
  784. HANDLE_OPCODE(WASM_OP_I32_LOAD8_S), /* 0x2c */ \
  785. HANDLE_OPCODE(WASM_OP_I32_LOAD8_U), /* 0x2d */ \
  786. HANDLE_OPCODE(WASM_OP_I32_LOAD16_S), /* 0x2e */ \
  787. HANDLE_OPCODE(WASM_OP_I32_LOAD16_U), /* 0x2f */ \
  788. HANDLE_OPCODE(WASM_OP_I64_LOAD8_S), /* 0x30 */ \
  789. HANDLE_OPCODE(WASM_OP_I64_LOAD8_U), /* 0x31 */ \
  790. HANDLE_OPCODE(WASM_OP_I64_LOAD16_S), /* 0x32 */ \
  791. HANDLE_OPCODE(WASM_OP_I64_LOAD16_U), /* 0x33 */ \
  792. HANDLE_OPCODE(WASM_OP_I64_LOAD32_S), /* 0x34 */ \
  793. HANDLE_OPCODE(WASM_OP_I64_LOAD32_U), /* 0x35 */ \
  794. HANDLE_OPCODE(WASM_OP_I32_STORE), /* 0x36 */ \
  795. HANDLE_OPCODE(WASM_OP_I64_STORE), /* 0x37 */ \
  796. HANDLE_OPCODE(WASM_OP_F32_STORE), /* 0x38 */ \
  797. HANDLE_OPCODE(WASM_OP_F64_STORE), /* 0x39 */ \
  798. HANDLE_OPCODE(WASM_OP_I32_STORE8), /* 0x3a */ \
  799. HANDLE_OPCODE(WASM_OP_I32_STORE16), /* 0x3b */ \
  800. HANDLE_OPCODE(WASM_OP_I64_STORE8), /* 0x3c */ \
  801. HANDLE_OPCODE(WASM_OP_I64_STORE16), /* 0x3d */ \
  802. HANDLE_OPCODE(WASM_OP_I64_STORE32), /* 0x3e */ \
  803. HANDLE_OPCODE(WASM_OP_MEMORY_SIZE), /* 0x3f */ \
  804. HANDLE_OPCODE(WASM_OP_MEMORY_GROW), /* 0x40 */ \
  805. HANDLE_OPCODE(WASM_OP_I32_CONST), /* 0x41 */ \
  806. HANDLE_OPCODE(WASM_OP_I64_CONST), /* 0x42 */ \
  807. HANDLE_OPCODE(WASM_OP_F32_CONST), /* 0x43 */ \
  808. HANDLE_OPCODE(WASM_OP_F64_CONST), /* 0x44 */ \
  809. HANDLE_OPCODE(WASM_OP_I32_EQZ), /* 0x45 */ \
  810. HANDLE_OPCODE(WASM_OP_I32_EQ), /* 0x46 */ \
  811. HANDLE_OPCODE(WASM_OP_I32_NE), /* 0x47 */ \
  812. HANDLE_OPCODE(WASM_OP_I32_LT_S), /* 0x48 */ \
  813. HANDLE_OPCODE(WASM_OP_I32_LT_U), /* 0x49 */ \
  814. HANDLE_OPCODE(WASM_OP_I32_GT_S), /* 0x4a */ \
  815. HANDLE_OPCODE(WASM_OP_I32_GT_U), /* 0x4b */ \
  816. HANDLE_OPCODE(WASM_OP_I32_LE_S), /* 0x4c */ \
  817. HANDLE_OPCODE(WASM_OP_I32_LE_U), /* 0x4d */ \
  818. HANDLE_OPCODE(WASM_OP_I32_GE_S), /* 0x4e */ \
  819. HANDLE_OPCODE(WASM_OP_I32_GE_U), /* 0x4f */ \
  820. HANDLE_OPCODE(WASM_OP_I64_EQZ), /* 0x50 */ \
  821. HANDLE_OPCODE(WASM_OP_I64_EQ), /* 0x51 */ \
  822. HANDLE_OPCODE(WASM_OP_I64_NE), /* 0x52 */ \
  823. HANDLE_OPCODE(WASM_OP_I64_LT_S), /* 0x53 */ \
  824. HANDLE_OPCODE(WASM_OP_I64_LT_U), /* 0x54 */ \
  825. HANDLE_OPCODE(WASM_OP_I64_GT_S), /* 0x55 */ \
  826. HANDLE_OPCODE(WASM_OP_I64_GT_U), /* 0x56 */ \
  827. HANDLE_OPCODE(WASM_OP_I64_LE_S), /* 0x57 */ \
  828. HANDLE_OPCODE(WASM_OP_I64_LE_U), /* 0x58 */ \
  829. HANDLE_OPCODE(WASM_OP_I64_GE_S), /* 0x59 */ \
  830. HANDLE_OPCODE(WASM_OP_I64_GE_U), /* 0x5a */ \
  831. HANDLE_OPCODE(WASM_OP_F32_EQ), /* 0x5b */ \
  832. HANDLE_OPCODE(WASM_OP_F32_NE), /* 0x5c */ \
  833. HANDLE_OPCODE(WASM_OP_F32_LT), /* 0x5d */ \
  834. HANDLE_OPCODE(WASM_OP_F32_GT), /* 0x5e */ \
  835. HANDLE_OPCODE(WASM_OP_F32_LE), /* 0x5f */ \
  836. HANDLE_OPCODE(WASM_OP_F32_GE), /* 0x60 */ \
  837. HANDLE_OPCODE(WASM_OP_F64_EQ), /* 0x61 */ \
  838. HANDLE_OPCODE(WASM_OP_F64_NE), /* 0x62 */ \
  839. HANDLE_OPCODE(WASM_OP_F64_LT), /* 0x63 */ \
  840. HANDLE_OPCODE(WASM_OP_F64_GT), /* 0x64 */ \
  841. HANDLE_OPCODE(WASM_OP_F64_LE), /* 0x65 */ \
  842. HANDLE_OPCODE(WASM_OP_F64_GE), /* 0x66 */ \
  843. HANDLE_OPCODE(WASM_OP_I32_CLZ), /* 0x67 */ \
  844. HANDLE_OPCODE(WASM_OP_I32_CTZ), /* 0x68 */ \
  845. HANDLE_OPCODE(WASM_OP_I32_POPCNT), /* 0x69 */ \
  846. HANDLE_OPCODE(WASM_OP_I32_ADD), /* 0x6a */ \
  847. HANDLE_OPCODE(WASM_OP_I32_SUB), /* 0x6b */ \
  848. HANDLE_OPCODE(WASM_OP_I32_MUL), /* 0x6c */ \
  849. HANDLE_OPCODE(WASM_OP_I32_DIV_S), /* 0x6d */ \
  850. HANDLE_OPCODE(WASM_OP_I32_DIV_U), /* 0x6e */ \
  851. HANDLE_OPCODE(WASM_OP_I32_REM_S), /* 0x6f */ \
  852. HANDLE_OPCODE(WASM_OP_I32_REM_U), /* 0x70 */ \
  853. HANDLE_OPCODE(WASM_OP_I32_AND), /* 0x71 */ \
  854. HANDLE_OPCODE(WASM_OP_I32_OR), /* 0x72 */ \
  855. HANDLE_OPCODE(WASM_OP_I32_XOR), /* 0x73 */ \
  856. HANDLE_OPCODE(WASM_OP_I32_SHL), /* 0x74 */ \
  857. HANDLE_OPCODE(WASM_OP_I32_SHR_S), /* 0x75 */ \
  858. HANDLE_OPCODE(WASM_OP_I32_SHR_U), /* 0x76 */ \
  859. HANDLE_OPCODE(WASM_OP_I32_ROTL), /* 0x77 */ \
  860. HANDLE_OPCODE(WASM_OP_I32_ROTR), /* 0x78 */ \
  861. HANDLE_OPCODE(WASM_OP_I64_CLZ), /* 0x79 */ \
  862. HANDLE_OPCODE(WASM_OP_I64_CTZ), /* 0x7a */ \
  863. HANDLE_OPCODE(WASM_OP_I64_POPCNT), /* 0x7b */ \
  864. HANDLE_OPCODE(WASM_OP_I64_ADD), /* 0x7c */ \
  865. HANDLE_OPCODE(WASM_OP_I64_SUB), /* 0x7d */ \
  866. HANDLE_OPCODE(WASM_OP_I64_MUL), /* 0x7e */ \
  867. HANDLE_OPCODE(WASM_OP_I64_DIV_S), /* 0x7f */ \
  868. HANDLE_OPCODE(WASM_OP_I64_DIV_U), /* 0x80 */ \
  869. HANDLE_OPCODE(WASM_OP_I64_REM_S), /* 0x81 */ \
  870. HANDLE_OPCODE(WASM_OP_I64_REM_U), /* 0x82 */ \
  871. HANDLE_OPCODE(WASM_OP_I64_AND), /* 0x83 */ \
  872. HANDLE_OPCODE(WASM_OP_I64_OR), /* 0x84 */ \
  873. HANDLE_OPCODE(WASM_OP_I64_XOR), /* 0x85 */ \
  874. HANDLE_OPCODE(WASM_OP_I64_SHL), /* 0x86 */ \
  875. HANDLE_OPCODE(WASM_OP_I64_SHR_S), /* 0x87 */ \
  876. HANDLE_OPCODE(WASM_OP_I64_SHR_U), /* 0x88 */ \
  877. HANDLE_OPCODE(WASM_OP_I64_ROTL), /* 0x89 */ \
  878. HANDLE_OPCODE(WASM_OP_I64_ROTR), /* 0x8a */ \
  879. HANDLE_OPCODE(WASM_OP_F32_ABS), /* 0x8b */ \
  880. HANDLE_OPCODE(WASM_OP_F32_NEG), /* 0x8c */ \
  881. HANDLE_OPCODE(WASM_OP_F32_CEIL), /* 0x8d */ \
  882. HANDLE_OPCODE(WASM_OP_F32_FLOOR), /* 0x8e */ \
  883. HANDLE_OPCODE(WASM_OP_F32_TRUNC), /* 0x8f */ \
  884. HANDLE_OPCODE(WASM_OP_F32_NEAREST), /* 0x90 */ \
  885. HANDLE_OPCODE(WASM_OP_F32_SQRT), /* 0x91 */ \
  886. HANDLE_OPCODE(WASM_OP_F32_ADD), /* 0x92 */ \
  887. HANDLE_OPCODE(WASM_OP_F32_SUB), /* 0x93 */ \
  888. HANDLE_OPCODE(WASM_OP_F32_MUL), /* 0x94 */ \
  889. HANDLE_OPCODE(WASM_OP_F32_DIV), /* 0x95 */ \
  890. HANDLE_OPCODE(WASM_OP_F32_MIN), /* 0x96 */ \
  891. HANDLE_OPCODE(WASM_OP_F32_MAX), /* 0x97 */ \
  892. HANDLE_OPCODE(WASM_OP_F32_COPYSIGN), /* 0x98 */ \
  893. HANDLE_OPCODE(WASM_OP_F64_ABS), /* 0x99 */ \
  894. HANDLE_OPCODE(WASM_OP_F64_NEG), /* 0x9a */ \
  895. HANDLE_OPCODE(WASM_OP_F64_CEIL), /* 0x9b */ \
  896. HANDLE_OPCODE(WASM_OP_F64_FLOOR), /* 0x9c */ \
  897. HANDLE_OPCODE(WASM_OP_F64_TRUNC), /* 0x9d */ \
  898. HANDLE_OPCODE(WASM_OP_F64_NEAREST), /* 0x9e */ \
  899. HANDLE_OPCODE(WASM_OP_F64_SQRT), /* 0x9f */ \
  900. HANDLE_OPCODE(WASM_OP_F64_ADD), /* 0xa0 */ \
  901. HANDLE_OPCODE(WASM_OP_F64_SUB), /* 0xa1 */ \
  902. HANDLE_OPCODE(WASM_OP_F64_MUL), /* 0xa2 */ \
  903. HANDLE_OPCODE(WASM_OP_F64_DIV), /* 0xa3 */ \
  904. HANDLE_OPCODE(WASM_OP_F64_MIN), /* 0xa4 */ \
  905. HANDLE_OPCODE(WASM_OP_F64_MAX), /* 0xa5 */ \
  906. HANDLE_OPCODE(WASM_OP_F64_COPYSIGN), /* 0xa6 */ \
  907. HANDLE_OPCODE(WASM_OP_I32_WRAP_I64), /* 0xa7 */ \
  908. HANDLE_OPCODE(WASM_OP_I32_TRUNC_S_F32), /* 0xa8 */ \
  909. HANDLE_OPCODE(WASM_OP_I32_TRUNC_U_F32), /* 0xa9 */ \
  910. HANDLE_OPCODE(WASM_OP_I32_TRUNC_S_F64), /* 0xaa */ \
  911. HANDLE_OPCODE(WASM_OP_I32_TRUNC_U_F64), /* 0xab */ \
  912. HANDLE_OPCODE(WASM_OP_I64_EXTEND_S_I32), /* 0xac */ \
  913. HANDLE_OPCODE(WASM_OP_I64_EXTEND_U_I32), /* 0xad */ \
  914. HANDLE_OPCODE(WASM_OP_I64_TRUNC_S_F32), /* 0xae */ \
  915. HANDLE_OPCODE(WASM_OP_I64_TRUNC_U_F32), /* 0xaf */ \
  916. HANDLE_OPCODE(WASM_OP_I64_TRUNC_S_F64), /* 0xb0 */ \
  917. HANDLE_OPCODE(WASM_OP_I64_TRUNC_U_F64), /* 0xb1 */ \
  918. HANDLE_OPCODE(WASM_OP_F32_CONVERT_S_I32), /* 0xb2 */ \
  919. HANDLE_OPCODE(WASM_OP_F32_CONVERT_U_I32), /* 0xb3 */ \
  920. HANDLE_OPCODE(WASM_OP_F32_CONVERT_S_I64), /* 0xb4 */ \
  921. HANDLE_OPCODE(WASM_OP_F32_CONVERT_U_I64), /* 0xb5 */ \
  922. HANDLE_OPCODE(WASM_OP_F32_DEMOTE_F64), /* 0xb6 */ \
  923. HANDLE_OPCODE(WASM_OP_F64_CONVERT_S_I32), /* 0xb7 */ \
  924. HANDLE_OPCODE(WASM_OP_F64_CONVERT_U_I32), /* 0xb8 */ \
  925. HANDLE_OPCODE(WASM_OP_F64_CONVERT_S_I64), /* 0xb9 */ \
  926. HANDLE_OPCODE(WASM_OP_F64_CONVERT_U_I64), /* 0xba */ \
  927. HANDLE_OPCODE(WASM_OP_F64_PROMOTE_F32), /* 0xbb */ \
  928. HANDLE_OPCODE(WASM_OP_I32_REINTERPRET_F32), /* 0xbc */ \
  929. HANDLE_OPCODE(WASM_OP_I64_REINTERPRET_F64), /* 0xbd */ \
  930. HANDLE_OPCODE(WASM_OP_F32_REINTERPRET_I32), /* 0xbe */ \
  931. HANDLE_OPCODE(WASM_OP_F64_REINTERPRET_I64), /* 0xbf */ \
  932. HANDLE_OPCODE(WASM_OP_I32_EXTEND8_S), /* 0xc0 */ \
  933. HANDLE_OPCODE(WASM_OP_I32_EXTEND16_S), /* 0xc1 */ \
  934. HANDLE_OPCODE(WASM_OP_I64_EXTEND8_S), /* 0xc2 */ \
  935. HANDLE_OPCODE(WASM_OP_I64_EXTEND16_S), /* 0xc3 */ \
  936. HANDLE_OPCODE(WASM_OP_I64_EXTEND32_S), /* 0xc4 */ \
  937. HANDLE_OPCODE(WASM_OP_DROP_64), /* 0xc5 */ \
  938. HANDLE_OPCODE(WASM_OP_SELECT_64), /* 0xc6 */ \
  939. HANDLE_OPCODE(EXT_OP_GET_LOCAL_FAST), /* 0xc7 */ \
  940. HANDLE_OPCODE(EXT_OP_SET_LOCAL_FAST_I64), /* 0xc8 */ \
  941. HANDLE_OPCODE(EXT_OP_SET_LOCAL_FAST), /* 0xc9 */ \
  942. HANDLE_OPCODE(EXT_OP_TEE_LOCAL_FAST), /* 0xca */ \
  943. HANDLE_OPCODE(EXT_OP_TEE_LOCAL_FAST_I64), /* 0xcb */ \
  944. HANDLE_OPCODE(EXT_OP_COPY_STACK_TOP), /* 0xcc */ \
  945. HANDLE_OPCODE(EXT_OP_COPY_STACK_TOP_I64), /* 0xcd */ \
  946. HANDLE_OPCODE(EXT_OP_COPY_STACK_VALUES), /* 0xce */ \
  947. HANDLE_OPCODE(WASM_OP_IMPDEP), /* 0xcf */ \
  948. HANDLE_OPCODE(WASM_OP_REF_NULL), /* 0xd0 */ \
  949. HANDLE_OPCODE(WASM_OP_REF_IS_NULL), /* 0xd1 */ \
  950. HANDLE_OPCODE(WASM_OP_REF_FUNC), /* 0xd2 */ \
  951. HANDLE_OPCODE(WASM_OP_REF_EQ), /* 0xd3 */ \
  952. HANDLE_OPCODE(WASM_OP_REF_AS_NON_NULL), /* 0xd4 */ \
  953. HANDLE_OPCODE(WASM_OP_BR_ON_NULL), /* 0xd5 */ \
  954. HANDLE_OPCODE(WASM_OP_BR_ON_NON_NULL), /* 0xd6 */ \
  955. HANDLE_OPCODE(EXT_OP_BLOCK), /* 0xd7 */ \
  956. HANDLE_OPCODE(EXT_OP_LOOP), /* 0xd8 */ \
  957. HANDLE_OPCODE(EXT_OP_IF), /* 0xd9 */ \
  958. HANDLE_OPCODE(EXT_OP_BR_TABLE_CACHE), /* 0xda */ \
  959. HANDLE_OPCODE(EXT_OP_TRY), /* 0xdb */ \
  960. SET_GOTO_TABLE_ELEM(WASM_OP_GC_PREFIX), /* 0xfb */ \
  961. SET_GOTO_TABLE_ELEM(WASM_OP_MISC_PREFIX), /* 0xfc */ \
  962. SET_GOTO_TABLE_ELEM(WASM_OP_SIMD_PREFIX), /* 0xfd */ \
  963. SET_GOTO_TABLE_ELEM(WASM_OP_ATOMIC_PREFIX), /* 0xfe */ \
  964. DEF_DEBUG_BREAK_HANDLE() DEF_EXT_V128_HANDLE() \
  965. };
  966. #ifdef __cplusplus
  967. }
  968. #endif
  969. #endif /* end of _WASM_OPCODE_H */