OpCodesAsmJs.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft Corporation and contributors. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. // Default all macro to nothing
  6. #ifndef MACRO
  7. #define MACRO( opcode, layout, attr)
  8. #endif
  9. #ifndef MACRO_WMS
  10. #define MACRO_WMS(opcode, layout, attr)
  11. #endif
  12. #ifndef MACRO_EXTEND
  13. #define MACRO_EXTEND(opcode, layout, attr)
  14. #endif
  15. #ifndef MACRO_EXTEND_WMS
  16. #define MACRO_EXTEND_WMS(opcode, layout, attr)
  17. #endif
  18. #define MACRO_WMS_PROFILED( opcode, layout, attr) \
  19. MACRO_WMS(opcode, layout, OpHasProfiled|attr) \
  20. MACRO_WMS(Profiled##opcode, Profiled##layout, OpProfiled|attr) \
  21. // ( OpCodeAsmJs , LayoutAsmJs , OpCodeAttrAsmJs )
  22. // ( | , | , | )
  23. // ( | , | , | )
  24. // ( V , V , V )
  25. MACRO ( EndOfBlock , Empty , None ) // End-of-buffer
  26. // Prefix, order must be maintained to be the same as in OpCodes.h
  27. MACRO ( ExtendedOpcodePrefix , Empty , None )
  28. MACRO ( MediumLayoutPrefix , Empty , None )
  29. MACRO ( ExtendedMediumLayoutPrefix , Empty , None )
  30. MACRO ( LargeLayoutPrefix , Empty , None )
  31. MACRO ( ExtendedLargeLayoutPrefix , Empty , None )
  32. MACRO ( Nop , Empty , None ) // No operation (Default value = 0)
  33. MACRO_EXTEND ( InvalidOpCode , Empty , None ) // No operation (Default value = 0)
  34. MACRO ( Label , Empty , None ) // No operation (Default value = 0)
  35. MACRO ( Ret , Empty , None )
  36. // loads
  37. // Note: bytecode generator assumes this is a contiguous group with this ordering, so don't insert other opcodes in the middle
  38. // (See ByteCodeWriter::Data::EncodeT in AsmJsBytecodeWriter.cpp)
  39. MACRO_WMS ( Ld_IntConst , Int1Const1 , None ) // Sets an int register from a const int
  40. MACRO_WMS ( Ld_Int , Int2 , None ) // Sets an int from another int register
  41. MACRO_WMS ( Ld_LongConst , Long1Const1 , None ) // Sets an int64 register from a const int64
  42. MACRO_WMS ( Ld_Long , Long2 , None ) // Sets an int64 from another int64 register
  43. MACRO_WMS ( Ld_FltConst , Float1Const1 , None ) // Sets a float register from a const float
  44. MACRO_WMS ( Ld_Flt , Float2 , None ) // Sets a float from another float register
  45. MACRO_WMS ( Ld_DbConst , Double1Const1 , None ) // Sets a double register from a const double
  46. MACRO_WMS ( Ld_Db , Double2 , None ) // Sets a double from another double register
  47. // External Function calls
  48. MACRO ( StartCall , StartCall , None ) // Initialize memory for a call
  49. MACRO_WMS ( Call , AsmCall , None ) // Execute call and place return value in register
  50. MACRO ( CheckHeap , Empty , None ) // Make sure the heap is not detached
  51. MACRO_WMS ( ArgOut_Int , Reg1Int1 , None ) // convert int to var and place it for function call
  52. MACRO_WMS ( ArgOut_Long , Reg1Long1 , None ) // convert int64 to var and place it for function call
  53. MACRO_WMS ( ArgOut_Flt , Reg1Float1 , None ) // convert float to var and place it for function call
  54. MACRO_WMS ( ArgOut_Db , Reg1Double1 , None ) // convert double to var and place it for function call
  55. MACRO_WMS ( Conv_VTI , Int1Reg1 , None ) // convert var to int
  56. MACRO_WMS ( Conv_VTF , Float1Reg1 , None ) // convert var to float
  57. MACRO_WMS ( Conv_VTD , Double1Reg1 , None ) // convert var to double
  58. MACRO_WMS ( Conv_VTL , Long1Reg1 , None ) // convert var to int64
  59. // Internal calls
  60. MACRO ( I_StartCall , StartCall , None ) // Initialize memory for a call
  61. MACRO_WMS_PROFILED( I_Call , AsmCall , None ) // Execute call and place return value in register
  62. MACRO_WMS ( I_ArgOut_Db , Reg1Double1 , None ) // place double arg for function call
  63. MACRO_WMS ( I_ArgOut_Int , Reg1Int1 , None ) // place int arg for function call
  64. MACRO_WMS ( I_ArgOut_Long , Reg1Long1 , None ) // place int64 arg for function call
  65. MACRO_WMS ( I_ArgOut_Flt , Reg1Float1 , None ) // place float arg for function call
  66. // loop
  67. MACRO_WMS ( AsmJsLoopBodyStart , AsmUnsigned1 , None ) // Marks the start of an asm.js loop body
  68. MACRO_WMS ( WasmLoopBodyStart , WasmLoopStart , None ) // Marks the start of a wasm loop body
  69. // Branching
  70. MACRO ( AsmBr , AsmBr , OpNoFallThrough ) // Unconditional branch
  71. MACRO_WMS ( BrTrue_Int , BrInt1 , None ) // Jumps to offset if int value is not 0
  72. MACRO_WMS ( BrFalse_Int , BrInt1 , None ) // Jumps to offset if int value is 0
  73. MACRO_WMS ( BrEq_Int , BrInt2 , None ) // Jumps to offset if both int are equals
  74. // Switching
  75. MACRO_WMS ( BeginSwitch_Int , Int2 , None ) // Start of an integer switch statement, same function as Ld_Int
  76. MACRO ( EndSwitch_Int , AsmBr , OpNoFallThrough ) // End of an integer switch statement, jumps to default case or past end of switch
  77. MACRO_WMS ( Case_Int , BrInt2 , None ) // Integer branch, same function as BrInt2
  78. MACRO_WMS ( Case_IntConst , BrInt1Const1 , None ) // Integer branch with inline const, same function as BrInt2
  79. // Type conversion
  80. MACRO_WMS ( Reinterpret_ITF , Float1Int1 , None ) // reinterpret bits of int to float
  81. MACRO_WMS ( Reinterpret_FTI , Int1Float1 , None ) // reinterpret bits of float to int
  82. MACRO_WMS ( Reinterpret_LTD , Double1Long1 , None ) // reinterpret bits of int64 to double
  83. MACRO_WMS ( Reinterpret_DTL , Long1Double1 , None ) // reinterpret bits of double to int64
  84. MACRO_WMS ( Conv_LTI , Int1Long1 , None ) // convert int64 to int
  85. MACRO_WMS ( Conv_DTI , Int1Double1 , None ) // convert double to int
  86. MACRO_WMS ( Conv_FTI , Int1Float1 , None ) // convert float to int
  87. MACRO_WMS ( Conv_DTU , Int1Double1 , None ) // convert double to unsigned int
  88. MACRO_WMS ( Conv_FTU , Int1Float1 , None ) // convert float to unsigned int
  89. MACRO_WMS ( Conv_ITL , Long1Int1 , None ) // convert int to int64
  90. MACRO_WMS ( Conv_UTL , Long1Int1 , None ) // convert unsigned int to int64
  91. MACRO_WMS ( Conv_FTL , Long1Float1 , None ) // convert float to int64
  92. MACRO_WMS ( Conv_DTL , Long1Float1 , None ) // convert double to int64
  93. MACRO_WMS ( Conv_FTUL , Long1Float1 , None ) // convert float to unsigned int64
  94. MACRO_WMS ( Conv_DTUL , Long1Float1 , None ) // convert double to unsigned int64
  95. MACRO_WMS ( Conv_ITD , Double1Int1 , None ) // convert int to double
  96. MACRO_WMS ( Conv_LTD , Double1Long1 , None ) // convert int64 to double
  97. MACRO_WMS ( Conv_FTD , Double1Float1 , None ) // convert float to double
  98. MACRO_WMS ( Conv_UTD , Double1Int1 , None ) // convert unsigned int to double
  99. MACRO_WMS ( Conv_UTF , Float1Int1 , None ) // convert unsigned int to float
  100. MACRO_WMS ( Conv_ULTD , Double1Long1 , None ) // convert unsigned int64 to double
  101. MACRO_WMS ( Conv_ULTF , Float1Long1 , None ) // convert unsigned int64 to float
  102. MACRO_WMS ( Conv_LTF , Float1Long1 , None ) // convert int64 to float
  103. MACRO_WMS ( Return_Long , Long2 , None ) // convert int64 to var
  104. MACRO_WMS ( Return_Db , Double2 , None ) // convert double to var
  105. MACRO_WMS ( Return_Flt , Float2 , None ) // convert float to var
  106. MACRO_WMS ( Return_Int , Int2 , None ) // convert int to var
  107. // Wasm Sign Extension operators
  108. MACRO_WMS ( I32Extend8_s , Int2 , None )
  109. MACRO_WMS ( I32Extend16_s , Int2 , None )
  110. MACRO_WMS ( I64Extend8_s , Long2 , None )
  111. MACRO_WMS ( I64Extend16_s , Long2 , None )
  112. MACRO_WMS ( I64Extend32_s , Long2 , None )
  113. // Module memory manipulation
  114. MACRO_WMS ( LdSlotArr , ElementSlot , None ) // Loads an array of Var from an array of Var
  115. MACRO_WMS ( LdSlot , ElementSlot , None ) // Loads a Var from an array of Var
  116. MACRO_WMS ( LdSlot_Db , ElementSlot , None ) // Loads a double from the Module
  117. MACRO_WMS ( LdSlot_Int , ElementSlot , None ) // Loads an Int from the Module
  118. MACRO_WMS ( LdSlot_Long , ElementSlot , None ) // Loads an Int64 from the Module
  119. MACRO_WMS ( LdSlot_Flt , ElementSlot , None ) // Loads a Float from the Module
  120. MACRO_WMS ( StSlot_Db , ElementSlot , None ) // Sets a double in the Module
  121. MACRO_WMS ( StSlot_Int , ElementSlot , None ) // Sets an Int in the Module
  122. MACRO_WMS ( StSlot_Long , ElementSlot , None ) // Sets an Int64 in the Module
  123. MACRO_WMS ( StSlot_Flt , ElementSlot , None ) // Sets an Int in the Module
  124. MACRO_WMS ( LdArr_Func , ElementSlot , None ) // opcode to load func from function tables
  125. MACRO_WMS ( LdArr_WasmFunc , ElementSlot , None ) // opcode to load wasm func from function table
  126. MACRO_WMS ( CheckSignature , Reg1IntConst1 , None ) // opcode to check signature for wasm indirect call
  127. // Array Buffer manipulations
  128. MACRO_WMS ( LdArrWasm , WasmMemAccess , None )
  129. MACRO_WMS ( StArrWasm , WasmMemAccess , None )
  130. MACRO_EXTEND_WMS( LdArrAtomic , WasmMemAccess , None )
  131. MACRO_EXTEND_WMS( StArrAtomic , WasmMemAccess , None )
  132. MACRO_WMS ( LdArr , AsmTypedArr , None )
  133. MACRO_WMS ( LdArrConst , AsmTypedArr , None )
  134. MACRO_WMS ( StArr , AsmTypedArr , None )
  135. MACRO_WMS ( StArrConst , AsmTypedArr , None )
  136. // Int math
  137. MACRO_WMS ( Neg_Int , Int2 , None ) // int unary '-'
  138. MACRO_WMS ( Not_Int , Int2 , None ) // int unary '~'
  139. MACRO_WMS ( LogNot_Int , Int2 , None ) // int unary '!'
  140. MACRO_WMS ( Conv_ITB , Int2 , None ) // int unary '!!' transform an int into a bool (0|1)
  141. MACRO_WMS ( Add_Int , Int3 , None ) // int32 Arithmetic '+'
  142. MACRO_WMS ( Sub_Int , Int3 , None ) // int32 Arithmetic '-' (subtract)
  143. MACRO_WMS ( Mul_Int , Int3 , None ) // int32 Arithmetic '*'
  144. MACRO_WMS ( Div_Int , Int3 , None ) // int32 Arithmetic '/'
  145. MACRO_WMS ( Div_Trap_Int , Int3 , None ) // (checked) int32 Arithmetic '/'
  146. MACRO_WMS ( Rem_Int , Int3 , None ) // int32 Arithmetic '%'
  147. MACRO_WMS ( Rem_Trap_Int , Int3 , None ) // (checked) int32 Arithmetic '%'
  148. MACRO_WMS ( And_Int , Int3 , None ) // int32 Bitwise '&'
  149. MACRO_WMS ( Or_Int , Int3 , None ) // int32 Bitwise '|'
  150. MACRO_WMS ( Xor_Int , Int3 , None ) // int32 Bitwise '^'
  151. MACRO_WMS ( Shl_Int , Int3 , None ) // int32 Shift '<<' (signed, truncate)
  152. MACRO_WMS ( Shr_Int , Int3 , None ) // int32 Shift '>>' (signed, truncate)
  153. MACRO_WMS ( Shr_UInt , Int3 , None ) // int32 Shift '>>>'(unsigned, truncate)
  154. MACRO_WMS ( Rol_Int , Int3 , None ) // int32 Rotate left
  155. MACRO_WMS ( Ror_Int , Int3 , None ) // int32 Rotate right
  156. MACRO_WMS ( PopCnt_Int , Int2 , None )
  157. // Unsigned int math
  158. MACRO_WMS ( Div_UInt , Int3 , None ) // uint32 Arithmetic '/'
  159. MACRO_WMS ( Div_Trap_UInt , Int3 , None ) // (checked) uint32 Arithmetic '/'
  160. MACRO_WMS ( Rem_UInt , Int3 , None ) // uint32 Arithmetic '%'
  161. MACRO_WMS ( Rem_Trap_UInt , Int3 , None ) // (checked) uint32 Arithmetic '%'
  162. // Int64 Math
  163. MACRO_WMS ( Add_Long , Long3 , None ) // int64 Arithmetic '+'
  164. MACRO_WMS ( Sub_Long , Long3 , None ) // int64 Arithmetic '-' (subtract)
  165. MACRO_WMS ( Mul_Long , Long3 , None ) // int64 Arithmetic '*'
  166. MACRO_WMS ( Div_Trap_Long , Long3 , None ) // int64 Arithmetic '/'
  167. MACRO_WMS ( Div_Trap_ULong , Long3 , None ) // uint64 Arithmetic '/'
  168. MACRO_WMS ( Rem_Trap_Long , Long3 , None ) // int64 Arithmetic '%'
  169. MACRO_WMS ( Rem_Trap_ULong , Long3 , None ) // uint64 Arithmetic '%'
  170. MACRO_WMS ( And_Long , Long3 , None ) // int64 Bitwise '&'
  171. MACRO_WMS ( Or_Long , Long3 , None ) // int64 Bitwise '|'
  172. MACRO_WMS ( Xor_Long , Long3 , None ) // int64 Bitwise '^'
  173. MACRO_WMS ( Shl_Long , Long3 , None ) // int64 Shift '<<' (signed, truncate)
  174. MACRO_WMS ( Shr_ULong , Long3 , None ) // int64 Shift '>>>'(unsigned, truncate)
  175. MACRO_WMS ( Shr_Long , Long3 , None ) // int64 Shift '>>' (signed, truncate)
  176. MACRO_WMS ( Rol_Long , Long3 , None ) // int64 Rotate left
  177. MACRO_WMS ( Ror_Long , Long3 , None ) // int64 Rotate right
  178. MACRO_WMS ( Clz_Long , Long2 , None )
  179. MACRO_WMS ( Ctz_Long , Long2 , None )
  180. MACRO_WMS ( PopCnt_Long , Long2 , None )
  181. // Double math
  182. MACRO_WMS ( Neg_Db , Double2 , None ) // Double Unary '-'
  183. MACRO_WMS ( Add_Db , Double3 , None ) // Double Arithmetic '+'
  184. MACRO_WMS ( Sub_Db , Double3 , None ) // Double Arithmetic '-' (subtract)
  185. MACRO_WMS ( Mul_Db , Double3 , None ) // Double Arithmetic '*'
  186. MACRO_WMS ( Div_Db , Double3 , None ) // Double Arithmetic '/'
  187. MACRO_WMS ( Rem_Db , Double3 , None ) // Double Arithmetic '%'
  188. // float math
  189. MACRO_WMS ( Neg_Flt , Float2 , None ) // Float Unary '-'
  190. MACRO_WMS ( Add_Flt , Float3 , None ) // Float Arithmetic '+'
  191. MACRO_WMS ( Sub_Flt , Float3 , None ) // Float Arithmetic '-' (subtract)
  192. MACRO_WMS ( Mul_Flt , Float3 , None ) // Float Arithmetic '*'
  193. MACRO_WMS ( Div_Flt , Float3 , None ) // Float Arithmetic '/'
  194. // Int comparisons
  195. MACRO_WMS ( CmLt_Int , Int3 , None ) // int32 Comparison <
  196. MACRO_WMS ( CmLe_Int , Int3 , None ) // int32 Comparison <=
  197. MACRO_WMS ( CmGt_Int , Int3 , None ) // int32 Comparison >
  198. MACRO_WMS ( CmGe_Int , Int3 , None ) // int32 Comparison >=
  199. MACRO_WMS ( CmEq_Int , Int3 , None ) // int32 Comparison ==
  200. MACRO_WMS ( CmNe_Int , Int3 , None ) // int32 Comparison !=
  201. MACRO_WMS ( Eqz_Int , Int2 , None ) // int32 Comparison with 0
  202. // Unsigned int comparisons
  203. MACRO_WMS ( CmLt_UInt , Int3 , None ) // uint32 Comparison <
  204. MACRO_WMS ( CmLe_UInt , Int3 , None ) // uint32 Comparison <=
  205. MACRO_WMS ( CmGt_UInt , Int3 , None ) // uint32 Comparison >
  206. MACRO_WMS ( CmGe_UInt , Int3 , None ) // uint32 Comparison >=
  207. // Int64 comparisons
  208. MACRO_WMS ( CmEq_Long , Int1Long2 , None ) // int64 Comparison ==
  209. MACRO_WMS ( CmNe_Long , Int1Long2 , None ) // int64 Comparison !=
  210. MACRO_WMS ( CmLt_Long , Int1Long2 , None ) // int64 Comparison <
  211. MACRO_WMS ( CmLe_Long , Int1Long2 , None ) // int64 Comparison <=
  212. MACRO_WMS ( CmLt_ULong , Int1Long2 , None ) // uint64 Comparison <
  213. MACRO_WMS ( CmLe_ULong , Int1Long2 , None ) // uint64 Comparison <=
  214. MACRO_WMS ( CmGt_Long , Int1Long2 , None ) // int64 Comparison >
  215. MACRO_WMS ( CmGe_Long , Int1Long2 , None ) // int64 Comparison >=
  216. MACRO_WMS ( CmGt_ULong , Int1Long2 , None ) // uint64 Comparison >
  217. MACRO_WMS ( CmGe_ULong , Int1Long2 , None ) // uint64 Comparison >=
  218. MACRO_WMS ( Eqz_Long , Int1Long1 , None ) // int64 Comparison with 0
  219. // Double comparisons
  220. MACRO_WMS ( CmLt_Db , Int1Double2 , None ) // double Comparison <
  221. MACRO_WMS ( CmLe_Db , Int1Double2 , None ) // double Comparison <=
  222. MACRO_WMS ( CmGt_Db , Int1Double2 , None ) // double Comparison >
  223. MACRO_WMS ( CmGe_Db , Int1Double2 , None ) // double Comparison >=
  224. MACRO_WMS ( CmEq_Db , Int1Double2 , None ) // double Comparison ==
  225. MACRO_WMS ( CmNe_Db , Int1Double2 , None ) // double Comparison !=
  226. // Float comparisons
  227. MACRO_WMS ( CmLt_Flt , Int1Float2 , None ) // float Comparison <
  228. MACRO_WMS ( CmLe_Flt , Int1Float2 , None ) // float Comparison <=
  229. MACRO_WMS ( CmGt_Flt , Int1Float2 , None ) // float Comparison >
  230. MACRO_WMS ( CmGe_Flt , Int1Float2 , None ) // float Comparison >=
  231. MACRO_WMS ( CmEq_Flt , Int1Float2 , None ) // float Comparison ==
  232. MACRO_WMS ( CmNe_Flt , Int1Float2 , None ) // float Comparison !=
  233. // Math builtin functions for ints
  234. MACRO_WMS ( Abs_Int , Int2 , None )
  235. MACRO_WMS ( Min_Int , Int3 , None )
  236. MACRO_WMS ( Max_Int , Int3 , None )
  237. MACRO_WMS ( Imul_Int , Int3 , None )
  238. MACRO_WMS ( Clz32_Int , Int2 , None )
  239. MACRO_WMS ( Ctz_Int , Int2 , None )
  240. // Math builtin functions for doubles & floats
  241. MACRO_WMS ( Sin_Db , Double2 , None )
  242. MACRO_WMS ( Cos_Db , Double2 , None )
  243. MACRO_WMS ( Tan_Db , Double2 , None )
  244. MACRO_WMS ( Asin_Db , Double2 , None )
  245. MACRO_WMS ( Acos_Db , Double2 , None )
  246. MACRO_WMS ( Atan_Db , Double2 , None )
  247. MACRO_WMS ( Abs_Db , Double2 , None )
  248. MACRO_WMS ( Ceil_Db , Double2 , None )
  249. MACRO_WMS ( Ceil_Flt , Float2 , None )
  250. MACRO_WMS ( Floor_Db , Double2 , None )
  251. MACRO_WMS ( Floor_Flt , Float2 , None )
  252. MACRO_WMS ( Exp_Db , Double2 , None )
  253. MACRO_WMS ( Log_Db , Double2 , None )
  254. MACRO_WMS ( Pow_Db , Double3 , None )
  255. MACRO_WMS ( Sqrt_Db , Double2 , None )
  256. MACRO_WMS ( Sqrt_Flt , Float2 , None )
  257. MACRO_WMS ( Abs_Flt , Float2 , None )
  258. MACRO_WMS ( Atan2_Db , Double3 , None )
  259. MACRO_WMS ( Min_Db , Double3 , None )
  260. MACRO_WMS ( Min_Flt , Float3 , None )
  261. MACRO_WMS ( Max_Db , Double3 , None )
  262. MACRO_WMS ( Max_Flt , Float3 , None )
  263. // Fround
  264. MACRO_WMS ( Fround_Flt , Float2 , None )
  265. MACRO_WMS ( Fround_Db , Float1Double1 , None )
  266. MACRO_WMS ( Fround_Int , Float1Int1 , None )
  267. MACRO_WMS ( Fround_Long , Float1Long1 , None )
  268. MACRO_EXTEND_WMS( Copysign_Db , Double3 , None )
  269. MACRO_EXTEND_WMS( Copysign_Flt , Float3 , None )
  270. MACRO_EXTEND_WMS( Trunc_Db , Double2 , None )
  271. MACRO_EXTEND_WMS( Trunc_Flt , Float2 , None )
  272. MACRO_EXTEND_WMS( Nearest_Db , Double2 , None )
  273. MACRO_EXTEND_WMS( Nearest_Flt , Float2 , None )
  274. MACRO_EXTEND_WMS( MemorySize_Int , AsmReg1 , None )
  275. MACRO_EXTEND_WMS( GrowMemory , Int2 , None )
  276. MACRO_EXTEND ( Unreachable_Void , Empty , OpNoFallThrough )
  277. MACRO_EXTEND_WMS( Conv_Check_DTI , Int1Double1 , None )
  278. MACRO_EXTEND_WMS( Conv_Check_FTI , Int1Float1 , None )
  279. MACRO_EXTEND_WMS( Conv_Check_DTU , Int1Double1 , None )
  280. MACRO_EXTEND_WMS( Conv_Check_FTU , Int1Float1 , None )
  281. MACRO_EXTEND_WMS( Conv_Check_FTL , Long1Float1 , None )
  282. MACRO_EXTEND_WMS( Conv_Check_FTUL , Long1Float1 , None )
  283. MACRO_EXTEND_WMS( Conv_Check_DTL , Long1Double1 , None )
  284. MACRO_EXTEND_WMS( Conv_Check_DTUL , Long1Double1 , None )
  285. MACRO_EXTEND_WMS( Conv_Sat_DTI , Int1Double1 , None )
  286. MACRO_EXTEND_WMS( Conv_Sat_FTI , Int1Float1 , None )
  287. MACRO_EXTEND_WMS( Conv_Sat_DTU , Int1Double1 , None )
  288. MACRO_EXTEND_WMS( Conv_Sat_FTU , Int1Float1 , None )
  289. MACRO_EXTEND_WMS( Conv_Sat_FTL , Long1Float1 , None )
  290. MACRO_EXTEND_WMS( Conv_Sat_FTUL , Long1Float1 , None )
  291. MACRO_EXTEND_WMS( Conv_Sat_DTL , Long1Double1 , None )
  292. MACRO_EXTEND_WMS( Conv_Sat_DTUL , Long1Double1 , None )
  293. // InOut tracing opcodes
  294. MACRO_EXTEND_WMS( PrintFuncName , Int2, None)
  295. MACRO_EXTEND ( PrintArgSeparator, Empty, None)
  296. MACRO_EXTEND ( PrintBeginCall , Empty, None)
  297. MACRO_EXTEND ( PrintNewLine , Empty, None)
  298. MACRO_EXTEND_WMS( PrintEndCall , Int2, None)
  299. MACRO_EXTEND_WMS( PrintI32, Int2 , None)
  300. MACRO_EXTEND_WMS( PrintI64, Long2 , None)
  301. MACRO_EXTEND_WMS( PrintF32, Float2 , None)
  302. MACRO_EXTEND_WMS( PrintF64, Double2, None)
  303. #define MACRO_SIMD(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO(opcode, asmjsLayout, opCodeAttrAsmJs)
  304. #define MACRO_SIMD_WMS(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_WMS(opcode, asmjsLayout, opCodeAttrAsmJs)
  305. #define MACRO_SIMD_ASMJS_ONLY_WMS(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_WMS(opcode, asmjsLayout, opCodeAttrAsmJs)
  306. #define MACRO_SIMD_EXTEND(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_EXTEND(opcode, asmjsLayout, opCodeAttrAsmJs)
  307. #define MACRO_SIMD_EXTEND_WMS(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_EXTEND_WMS(opcode, asmjsLayout, opCodeAttrAsmJs)
  308. #define MACRO_SIMD_ASMJS_ONLY_EXTEND_WMS(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_EXTEND_WMS(opcode, asmjsLayout, opCodeAttrAsmJs)
  309. #include "OpCodesSimd.h"
  310. // help the caller to undefine all the macros
  311. #undef MACRO
  312. #undef MACRO_WMS
  313. #undef MACRO_EXTEND
  314. #undef MACRO_EXTEND_WMS
  315. #undef MACRO_WMS_PROFILED