AsmJsJitTemplate.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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. #pragma once
  6. #ifdef ASMJS_PLAT
  7. namespace Js
  8. {
  9. void AsmJsCommonEntryPoint(Js::ScriptFunction* func, void* savedEbp);
  10. namespace AsmJsJitTemplate
  11. {
  12. const int PAGESIZE = 0x1000;
  13. typedef AsmJsEncoder* TemplateContext;
  14. // Initialise template data for architecture specific
  15. void* InitTemplateData();
  16. // Free template data for architecture specific
  17. void FreeTemplateData( void* userData );
  18. struct Globals
  19. {
  20. #if DBG_DUMP
  21. static FunctionBody* CurrentEncodingFunction;
  22. #endif
  23. // Number of Vars on the stack before the first variable
  24. static const int StackVarCount = 2;
  25. static const int ModuleSlotOffset ;
  26. static const int ModuleEnvOffset ;
  27. static const int ArrayBufferOffset ;
  28. static const int ArraySizeOffset ;
  29. static const int ScriptContextOffset;
  30. };
  31. #ifdef _M_IX86
  32. #define CreateTemplate(name,...) \
  33. struct name\
  34. {\
  35. static int ApplyTemplate( TemplateContext context, BYTE*& buffer,##__VA_ARGS__ );\
  36. }
  37. #else
  38. #define CreateTemplate(name,...) \
  39. struct name\
  40. {\
  41. static int ApplyTemplate( TemplateContext context, BYTE*& buffer,##__VA_ARGS__ ) { __debugbreak(); return 0; }\
  42. }
  43. #endif
  44. CreateTemplate( FunctionEntry );
  45. CreateTemplate( FunctionExit );
  46. CreateTemplate( Br, BYTE** relocAddr, bool isBackEdge);
  47. CreateTemplate( BrTrue, int offset, BYTE** relocAddr, bool isBackEdge);
  48. CreateTemplate( BrEq, int leftOffset, int rightOffset, BYTE** relocAddr, bool isBackEdge, bool isSrc2Const = false);
  49. CreateTemplate( Label );
  50. CreateTemplate( LdUndef, int targetOffset );
  51. CreateTemplate( LdSlot, int targetOffset, int arrOffset, int slotIndex );
  52. CreateTemplate( LdArr_Func, int targetOffset, int arrOffset, int slotVarIndex );
  53. // int operations
  54. CreateTemplate( Ld_Int, int targetOffset, int rightOffset );
  55. CreateTemplate( LdSlot_Int, int targetOffset, int slotIndex);
  56. CreateTemplate( LdSlot_Flt, int targetOffset, int slotIndex);
  57. CreateTemplate( StSlot_Flt, int srcOffset, int slotIndex);
  58. CreateTemplate( StSlot_Int, int srcOffset, int slotIndex);
  59. CreateTemplate( LdConst_Int, int offset, int value );
  60. CreateTemplate( SetReturn_Int, int offset );
  61. CreateTemplate( Db_To_Int, int targetOffset, int rightOffset );
  62. CreateTemplate( Int_To_Bool, int targetOffset, int rightOffset );
  63. CreateTemplate( LogNot_Int, int targetOffset, int rightOffset );
  64. CreateTemplate( Neg_Int, int targetOffset, int rightOffset );
  65. CreateTemplate( Not_Int, int targetOffset, int rightOffset );
  66. CreateTemplate( Or_Int, int targetOffset, int leftOffset, int rightOffset );
  67. CreateTemplate( And_Int, int targetOffset, int leftOffset, int rightOffset );
  68. CreateTemplate( Xor_Int, int targetOffset, int leftOffset, int rightOffset );
  69. CreateTemplate( Shl_Int , int targetOffset, int leftOffset, int rightOffset );
  70. CreateTemplate( Shr_Int , int targetOffset, int leftOffset, int rightOffset );
  71. CreateTemplate( Shr_UInt, int targetOffset, int leftOffset, int rightOffset );
  72. CreateTemplate( Add_Int, int targetOffset, int leftOffset, int rightOffset );
  73. CreateTemplate( Sub_Int, int targetOffset, int leftOffset, int rightOffset );
  74. CreateTemplate( Mul_Int, int targetOffset, int leftOffset, int rightOffset );
  75. CreateTemplate( Div_Int, int targetOffset, int leftOffset, int rightOffset );
  76. CreateTemplate( Rem_Int, int targetOffset, int leftOffset, int rightOffset );
  77. CreateTemplate( Lt_Int, int targetOffset, int leftOffset, int rightOffset );
  78. CreateTemplate( Le_Int, int targetOffset, int leftOffset, int rightOffset );
  79. CreateTemplate( Gt_Int, int targetOffset, int leftOffset, int rightOffset );
  80. CreateTemplate( Ge_Int, int targetOffset, int leftOffset, int rightOffset );
  81. CreateTemplate( Eq_Int, int targetOffset, int leftOffset, int rightOffset );
  82. CreateTemplate( Ne_Int, int targetOffset, int leftOffset, int rightOffset );
  83. CreateTemplate( Min_Int, int targetOffset, int leftOffset, int rightOffset );
  84. CreateTemplate( Max_Int, int targetOffset, int leftOffset, int rightOffset );
  85. CreateTemplate( Abs_Int, int targetOffset, int rightOffset );
  86. CreateTemplate( Clz32_Int,int targetOffset,int rightOffset );
  87. // uint operations
  88. CreateTemplate( Div_UInt, int targetOffset, int leftOffset, int rightOffset );
  89. CreateTemplate( Mul_UInt, int targetOffset, int leftOffset, int rightOffset );
  90. CreateTemplate( Rem_UInt, int targetOffset, int leftOffset, int rightOffset );
  91. CreateTemplate( Lt_UInt, int targetOffset, int leftOffset, int rightOffset );
  92. CreateTemplate( Le_UInt, int targetOffset, int leftOffset, int rightOffset );
  93. CreateTemplate( Gt_UInt, int targetOffset, int leftOffset, int rightOffset );
  94. CreateTemplate( Ge_UInt, int targetOffset, int leftOffset, int rightOffset );
  95. //Float Operations
  96. CreateTemplate( Add_Flt, int targetOffset, int leftOffset, int rightOffset);
  97. CreateTemplate( Sub_Flt, int targetOffset, int leftOffset, int rightOffset);
  98. CreateTemplate( Mul_Flt, int targetOffset, int leftOffset, int rightOffset);
  99. CreateTemplate( Div_Flt, int targetOffset, int leftOffset, int rightOffset);
  100. // Double operations
  101. CreateTemplate( Ld_Db, int targetOffset, int rightOffset);
  102. CreateTemplate( Ld_Flt, int targetOffset, int rightOffset);
  103. CreateTemplate( LdAddr_Db, int targetOffset, const double* dbAddr);
  104. CreateTemplate( LdSlot_Db, int targetOffset, int slotIndex );
  105. CreateTemplate( StSlot_Db, int srcOffset, int slotIndex );
  106. CreateTemplate( SetReturn_Db, int offset);
  107. CreateTemplate( SetReturn_Flt, int offset);
  108. CreateTemplate( SetFround_Db, int targetOffset, int rightOffset);
  109. CreateTemplate( SetFround_Flt, int targetOffset, int rightOffset);
  110. CreateTemplate( SetFround_Int, int targetOffset, int rightOffset);
  111. CreateTemplate( Int_To_Db, int targetOffset, int rightOffset );
  112. CreateTemplate( Float_To_Db, int targetOffset, int rightOffset);
  113. CreateTemplate( Float_To_Int, int targetOffset, int rightOffset);
  114. CreateTemplate( UInt_To_Db, int targetOffset, int rightOffset);
  115. CreateTemplate( Neg_Db, int targetOffset, int rightOffset);
  116. CreateTemplate( Neg_Flt, int targetOffset, int rightOffset);
  117. CreateTemplate( Add_Db, int targetOffset, int leftOffset, int rightOffset );
  118. CreateTemplate( Sub_Db, int targetOffset, int leftOffset, int rightOffset );
  119. CreateTemplate( Mul_Db, int targetOffset, int leftOffset, int rightOffset );
  120. CreateTemplate( Div_Db, int targetOffset, int leftOffset, int rightOffset );
  121. CreateTemplate( Rem_Db, int targetOffset, int leftOffset, int rightOffset );
  122. CreateTemplate( CmpLt_Db, int targetOffset, int leftOffset, int rightOffset );
  123. CreateTemplate( CmpLe_Db, int targetOffset, int leftOffset, int rightOffset );
  124. CreateTemplate( CmpGt_Db, int targetOffset, int leftOffset, int rightOffset );
  125. CreateTemplate( CmpGe_Db, int targetOffset, int leftOffset, int rightOffset );
  126. CreateTemplate( CmpEq_Db, int targetOffset, int leftOffset, int rightOffset );
  127. CreateTemplate( CmpNe_Db, int targetOffset, int leftOffset, int rightOffset );
  128. CreateTemplate( CmpLt_Flt, int targetOffset, int leftOffset, int rightOffset);
  129. CreateTemplate( CmpLe_Flt, int targetOffset, int leftOffset, int rightOffset);
  130. CreateTemplate( CmpGt_Flt, int targetOffset, int leftOffset, int rightOffset);
  131. CreateTemplate( CmpGe_Flt, int targetOffset, int leftOffset, int rightOffset);
  132. CreateTemplate( CmpEq_Flt, int targetOffset, int leftOffset, int rightOffset);
  133. CreateTemplate( CmpNe_Flt, int targetOffset, int leftOffset, int rightOffset);
  134. // offsets : array of offset for double variables, the first one is where the result should be put in
  135. // D0 = func(D1,D2,D3); => offsets = [D0,D1,D2,D3]
  136. CreateTemplate(Call_Db, int nbOffsets, int* offsets, void* addr, bool addEsp);
  137. CreateTemplate(Call_Flt, int nbOffsets, int* offsets, void* addr, bool addEsp);
  138. //external calls
  139. CreateTemplate( StartCall, int argBytesSize );
  140. CreateTemplate( ArgOut_Int, int argIndex, int offset );
  141. CreateTemplate( ArgOut_Db, int argIndex, int offset);
  142. CreateTemplate( Call, int targetOffset, int funcOffset, int nbArgs);
  143. CreateTemplate( Conv_VTI, int targetOffset, int srcOffset);
  144. CreateTemplate( Conv_VTD, int targetOffset, int srcOffset);
  145. CreateTemplate( Conv_VTF, int targetOffset, int srcOffset);
  146. //internal calls
  147. CreateTemplate( I_StartCall, int argBytesSize );
  148. CreateTemplate( I_ArgOut_Int, int argIndex, int offset );
  149. CreateTemplate( I_ArgOut_Db, int argIndex, int offset);
  150. CreateTemplate( I_ArgOut_Flt, int argIndex, int offset);
  151. CreateTemplate( I_Call, int targetOffset, int funcOffset, int nbArgs, AsmJsRetType retType);
  152. CreateTemplate( I_Conv_VTI, int targetOffset, int srcOffset);
  153. CreateTemplate( I_Conv_VTD, int targetOffset, int srcOffset);
  154. CreateTemplate( I_Conv_VTF, int targetOffset, int srcOffset);
  155. CreateTemplate( LdArr, int targetOffset, int slotVarIndex, ArrayBufferView::ViewType viewType);
  156. CreateTemplate( LdArrDb, int targetOffset, int slotVarIndex, ArrayBufferView::ViewType viewType);
  157. CreateTemplate( LdArrFlt, int targetOffset, int slotVarIndex, ArrayBufferView::ViewType viewType);
  158. CreateTemplate( StArr, int srcOffset, int slotVarIndex, ArrayBufferView::ViewType viewType );
  159. CreateTemplate( StArrDb, int srcOffset, int slotVarIndex, ArrayBufferView::ViewType viewType);
  160. CreateTemplate( StArrFlt, int srcOffset, int slotVarIndex, ArrayBufferView::ViewType viewType);
  161. CreateTemplate( ConstLdArr, int targetOffset, int constIndex, ArrayBufferView::ViewType viewType);
  162. CreateTemplate( ConstLdArrDb, int targetOffset, int constIndex, ArrayBufferView::ViewType viewType);
  163. CreateTemplate( ConstLdArrFlt, int targetOffset, int constIndex, ArrayBufferView::ViewType viewType);
  164. CreateTemplate( ConstStArr, int srcOffset, int constIndex, ArrayBufferView::ViewType viewType );
  165. CreateTemplate( ConstStArrDb, int srcOffset, int constIndex, ArrayBufferView::ViewType viewType);
  166. CreateTemplate( ConstStArrFlt, int srcOffset, int constIndex, ArrayBufferView::ViewType viewType);
  167. CreateTemplate(AsmJsLoopBody, int offset);
  168. CreateTemplate(Simd128_Ld_F4, int targetOffsetF4, int srcOffsetF4);
  169. CreateTemplate(Simd128_Ld_I4, int targetOffsetI4, int srcOffsetI4);
  170. CreateTemplate(Simd128_Ld_D2, int targetOffsetD2, int srcOffsetD2);
  171. CreateTemplate(Simd128_LdSlot_F4, int targetOffset, int slotIndex);
  172. CreateTemplate(Simd128_LdSlot_I4, int targetOffset, int slotIndex);
  173. CreateTemplate(Simd128_LdSlot_D2, int targetOffset, int slotIndex);
  174. CreateTemplate(Simd128_StSlot_F4, int srcOffset, int slotIndex);
  175. CreateTemplate(Simd128_StSlot_I4, int srcOffset, int slotIndex);
  176. CreateTemplate(Simd128_StSlot_D2, int srcOffset, int slotIndex);
  177. CreateTemplate(Simd128_FloatsToF4, int targetOffsetF4_0, int srcOffsetF1, int srcOffsetF2, int srcOffsetF3, int srcOffsetF4);
  178. CreateTemplate(Simd128_IntsToI4, int targetOffsetI4_0, int srcOffsetI1, int srcOffsetI2, int srcOffsetI3, int srcOffsetI4);
  179. CreateTemplate(Simd128_DoublesToD2, int targetOffsetD2_0, int srcOffsetD0, int srcOffsetD1);
  180. CreateTemplate(Simd128_Return_F4, int srcOffsetF4);
  181. CreateTemplate(Simd128_Return_I4, int srcOffsetI4);
  182. CreateTemplate(Simd128_Return_D2, int srcOffsetD2);
  183. CreateTemplate(Simd128_Splat_F4, int targetOffsetF4_0, int srcOffsetF1);
  184. CreateTemplate(Simd128_Splat_I4, int targetOffsetI4_0, int srcOffsetI1);
  185. CreateTemplate(Simd128_Splat_D2, int targetOffsetD2_0, int srcOffsetD1);
  186. CreateTemplate(Simd128_FromFloat64x2_F4, int targetOffsetF4_0, int srcOffsetD2_1);
  187. CreateTemplate(Simd128_FromInt32x4_F4, int targetOffsetF4_0, int srcOffsetI4_1);
  188. CreateTemplate(Simd128_FromFloat32x4_I4, int targetOffsetI4_0, int srcOffsetF4_1);
  189. CreateTemplate(Simd128_FromFloat64x2_I4, int targetOffsetI4_0, int srcOffsetD2_1);
  190. CreateTemplate(Simd128_FromFloat32x4_D2, int targetOffsetD2_0, int srcOffsetF4_1);
  191. CreateTemplate(Simd128_FromInt32x4_D2, int targetOffsetD2_0, int srcOffsetI4_1);
  192. CreateTemplate(Simd128_FromFloat32x4Bits_D2, int targetOffsetD2_0, int srcOffsetF4_1);
  193. CreateTemplate(Simd128_FromInt32x4Bits_D2, int targetOffsetD2_0, int srcOffsetI4_1);
  194. CreateTemplate(Simd128_FromFloat32x4Bits_I4, int targetOffsetI4_0, int srcOffsetF4_1);
  195. CreateTemplate(Simd128_FromFloat64x2Bits_I4, int targetOffsetI4_0, int srcOffsetD2_1);
  196. CreateTemplate(Simd128_FromFloat64x2Bits_F4, int targetOffsetF4_0, int srcOffsetD2_1);
  197. CreateTemplate(Simd128_FromInt32x4Bits_F4, int targetOffsetF4_0, int srcOffsetI4_1);
  198. CreateTemplate(Simd128_Abs_F4, int targetOffsetF4_0, int srcOffsetF4_1);
  199. CreateTemplate(Simd128_Abs_D2, int targetOffsetD2_0, int srcOffsetD2_1);
  200. CreateTemplate(Simd128_Neg_F4, int targetOffsetF4_0, int srcOffsetF4_1);
  201. CreateTemplate(Simd128_Neg_I4, int targetOffsetI4_0, int srcOffsetI4_1);
  202. CreateTemplate(Simd128_Neg_D2, int targetOffsetD2_0, int srcOffsetD2_1);
  203. CreateTemplate(Simd128_Rcp_F4, int targetOffsetF4_0, int srcOffsetF4_1);
  204. CreateTemplate(Simd128_Rcp_D2, int targetOffsetD2_0, int srcOffsetD2_1);
  205. CreateTemplate(Simd128_RcpSqrt_F4, int targetOffsetF4_0, int srcOffsetF4_1);
  206. CreateTemplate(Simd128_RcpSqrt_D2, int targetOffsetD2_0, int srcOffsetD2_1);
  207. CreateTemplate(Simd128_Sqrt_F4, int targetOffsetF4_0, int srcOffsetF4_1);
  208. CreateTemplate(Simd128_Sqrt_D2, int targetOffsetD2_0, int srcOffsetD2_1);
  209. CreateTemplate(Simd128_Not_F4, int targetOffsetF4_0, int srcOffsetF4_1);
  210. CreateTemplate(Simd128_Not_I4, int targetOffsetI4_0, int srcOffsetI4_1);
  211. CreateTemplate(Simd128_Add_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  212. CreateTemplate(Simd128_Add_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  213. CreateTemplate(Simd128_Add_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  214. CreateTemplate(Simd128_Sub_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  215. CreateTemplate(Simd128_Sub_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  216. CreateTemplate(Simd128_Sub_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  217. CreateTemplate(Simd128_Mul_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  218. CreateTemplate(Simd128_Mul_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  219. CreateTemplate(Simd128_Mul_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  220. CreateTemplate(Simd128_Div_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  221. CreateTemplate(Simd128_Div_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  222. CreateTemplate(Simd128_Min_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  223. CreateTemplate(Simd128_Min_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  224. CreateTemplate(Simd128_Max_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  225. CreateTemplate(Simd128_Max_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  226. CreateTemplate(Simd128_Lt_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  227. CreateTemplate(Simd128_Lt_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  228. CreateTemplate(Simd128_Lt_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  229. CreateTemplate(Simd128_Gt_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  230. CreateTemplate(Simd128_Gt_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  231. CreateTemplate(Simd128_Gt_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  232. CreateTemplate(Simd128_LtEq_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  233. CreateTemplate(Simd128_LtEq_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  234. CreateTemplate(Simd128_GtEq_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  235. CreateTemplate(Simd128_GtEq_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  236. CreateTemplate(Simd128_Eq_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  237. CreateTemplate(Simd128_Eq_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  238. CreateTemplate(Simd128_Eq_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  239. CreateTemplate(Simd128_Neq_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  240. CreateTemplate(Simd128_Neq_D2, int targetOffsetD2_0, int srcOffsetD2_1, int srcOffsetD2_2);
  241. CreateTemplate(Simd128_And_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  242. CreateTemplate(Simd128_And_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  243. CreateTemplate(Simd128_Or_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  244. CreateTemplate(Simd128_Or_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  245. CreateTemplate(Simd128_Xor_F4, int targetOffsetF4_0, int srcOffsetF4_1, int srcOffsetF4_2);
  246. CreateTemplate(Simd128_Xor_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2);
  247. CreateTemplate(Simd128_Select_F4, int targetOffsetF4_0, int srcOffsetI4_1, int srcOffsetF4_2, int srcOffsetF4_3);
  248. CreateTemplate(Simd128_Select_I4, int targetOffsetI4_0, int srcOffsetI4_1, int srcOffsetI4_2, int srcOffsetI4_3);
  249. CreateTemplate(Simd128_Select_D2, int targetOffsetD2_0, int srcOffsetI4_1, int srcOffsetD2_2, int srcOffsetD2_3);
  250. CreateTemplate(Simd128_ExtractLane_I4, int targetOffsetI0, int srcOffsetI4_1, int index);
  251. CreateTemplate(Simd128_ExtractLane_F4, int targetOffsetF0, int srcOffsetF4_1, int index);
  252. CreateTemplate(Simd128_ReplaceLane_I4, int targetOffsetI4_0, int srcOffsetI4_1, int index, int srcOffsetI3);
  253. CreateTemplate(Simd128_ReplaceLane_F4, int targetOffsetF4_0, int srcOffsetF4_1, int index, int srcOffsetF3);
  254. CreateTemplate(Simd128_I_ArgOut_F4, int argIndex, int offset);
  255. CreateTemplate(Simd128_I_ArgOut_I4, int argIndex, int offset);
  256. CreateTemplate(Simd128_I_ArgOut_D2, int argIndex, int offset);
  257. CreateTemplate(Simd128_I_Conv_VTF4, int targetOffset, int srcOffset);
  258. CreateTemplate(Simd128_I_Conv_VTI4, int targetOffset, int srcOffset);
  259. CreateTemplate(Simd128_I_Conv_VTD2, int targetOffset, int srcOffset);
  260. };
  261. };
  262. #endif