avxopcodes.pas 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. {$mode objfpc}
  2. unit avxopcodes;
  3. interface
  4. uses Classes;
  5. type
  6. TTestFileTyp = (tfNasm, tfFPC);
  7. TAVXTestGenerator = class(TObject)
  8. private
  9. FOpCodeList: TStringList;
  10. protected
  11. procedure Init;
  12. function InternalMakeTestFiles(aX64: boolean; aDestPath, aFileExt: String; aOpCodeList, aHeaderList, aFooterList: TStringList): boolean;
  13. public
  14. constructor Create;
  15. destructor Destroy; override;
  16. function MakeTestFiles(aTyp: TTestFileTyp; aX64: boolean; aDestPath: String): boolean;
  17. property OpCodeList: TStringList read FOpCodeList write FOpCodeList;
  18. end;
  19. implementation
  20. uses SysUtils, AsmTestGenerator;
  21. { TAVXTestGenerator }
  22. constructor TAVXTestGenerator.Create;
  23. begin
  24. inherited;
  25. FOpCodeList := TStringList.Create;
  26. Init;
  27. end;
  28. destructor TAVXTestGenerator.Destroy;
  29. begin
  30. FreeAndNil(FOpCodeList);
  31. inherited;
  32. end;
  33. procedure TAVXTestGenerator.Init;
  34. begin
  35. FOpCodeList.Add('VADDPD,1,1,XMMREG,XMMREG,XMMRM,');
  36. FOpCodeList.Add('VADDPD,1,1,YMMREG,YMMREG,YMMRM,');
  37. FOpCodeList.Add('VADDPS,1,1,XMMREG,XMMREG,XMMRM,');
  38. FOpCodeList.Add('VADDPS,1,1,YMMREG,YMMREG,YMMRM,');
  39. FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,MEM64,');
  40. FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,XMMREG,');
  41. FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,MEM32,');
  42. FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,XMMREG,');
  43. FOpCodeList.Add('VADDSUBPD,1,1,YMMREG,YMMREG,YMMRM,');
  44. FOpCodeList.Add('VADDSUBPD,1,1,XMMREG,XMMREG,XMMRM,');
  45. FOpCodeList.Add('VADDSUBPS,1,1,YMMREG,YMMREG,YMMRM,');
  46. FOpCodeList.Add('VADDSUBPS,1,1,XMMREG,XMMREG,XMMRM,');
  47. FOpCodeList.Add('VAESDEC,1,1,XMMREG,XMMREG,XMMRM,');
  48. FOpCodeList.Add('VAESDECLAST,1,1,XMMREG,XMMREG,XMMRM,');
  49. FOpCodeList.Add('VAESENC,1,1,XMMREG,XMMREG,XMMRM,');
  50. FOpCodeList.Add('VAESENCLAST,1,1,XMMREG,XMMREG,XMMRM,');
  51. FOpCodeList.Add('VAESIMC,1,1,XMMREG,XMMRM,,');
  52. FOpCodeList.Add('VAESKEYGENASSIST,1,1,XMMREG,XMMRM,IMM8,');
  53. FOpCodeList.Add('VANDNPD,1,1,XMMREG,XMMREG,XMMRM,');
  54. FOpCodeList.Add('VANDNPD,1,1,YMMREG,YMMREG,YMMRM,');
  55. FOpCodeList.Add('VANDNPS,1,1,XMMREG,XMMREG,XMMRM,');
  56. FOpCodeList.Add('VANDNPS,1,1,YMMREG,YMMREG,YMMRM,');
  57. FOpCodeList.Add('VANDPD,1,1,XMMREG,XMMREG,XMMRM,');
  58. FOpCodeList.Add('VANDPD,1,1,YMMREG,YMMREG,YMMRM,');
  59. FOpCodeList.Add('VANDPS,1,1,XMMREG,XMMREG,XMMRM,');
  60. FOpCodeList.Add('VANDPS,1,1,YMMREG,YMMREG,YMMRM,');
  61. FOpCodeList.Add('VBLENDPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  62. FOpCodeList.Add('VBLENDPD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  63. FOpCodeList.Add('VBLENDPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  64. FOpCodeList.Add('VBLENDPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  65. FOpCodeList.Add('VBLENDVPD,1,1,XMMREG,XMMREG,XMMRM,XMMREG');
  66. FOpCodeList.Add('VBLENDVPD,1,1,YMMREG,YMMREG,YMMRM,YMMREG');
  67. FOpCodeList.Add('VBLENDVPS,1,1,XMMREG,XMMREG,XMMRM,XMMREG');
  68. FOpCodeList.Add('VBLENDVPS,1,1,YMMREG,YMMREG,YMMRM,YMMREG');
  69. FOpCodeList.Add('VBROADCASTF128,1,1,YMMREG,MEM128,,');
  70. FOpCodeList.Add('VBROADCASTSD,1,1,YMMREG,MEM64,,');
  71. FOpCodeList.Add('VBROADCASTSS,1,1,YMMREG,MEM32,,');
  72. FOpCodeList.Add('VBROADCASTSS,1,1,XMMREG,MEM32,,');
  73. FOpCodeList.Add('VCMPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  74. FOpCodeList.Add('VCMPPD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  75. FOpCodeList.Add('VCMPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  76. FOpCodeList.Add('VCMPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  77. FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,MEM64,IMM8');
  78. FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  79. FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,MEM64,IMM8');
  80. FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  81. FOpCodeList.Add('VCOMISD,1,1,XMMREG,MEM64,,');
  82. FOpCodeList.Add('VCOMISD,1,1,XMMREG,XMMREG,,');
  83. FOpCodeList.Add('VCOMISS,1,1,XMMREG,MEM32,,');
  84. FOpCodeList.Add('VCOMISS,1,1,XMMREG,XMMREG,,');
  85. FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,MEM64,,');
  86. FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,XMMREG,,');
  87. FOpCodeList.Add('VCVTDQ2PD,1,1,YMMREG,YMMREG,,');
  88. FOpCodeList.Add('VCVTDQ2PD,1,1,YMMREG,MEM128,,');
  89. FOpCodeList.Add('VCVTDQ2PS,1,1,XMMREG,XMMRM,,');
  90. FOpCodeList.Add('VCVTDQ2PS,1,1,YMMREG,YMMRM,,');
  91. FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,XMMRM,,');
  92. FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,YMMRM,,');
  93. FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,XMMRM,,');
  94. FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,YMMRM,,');
  95. FOpCodeList.Add('VCVTPS2DQ,1,1,XMMREG,XMMRM,,');
  96. FOpCodeList.Add('VCVTPS2DQ,1,1,YMMREG,YMMRM,,');
  97. FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,MEM64,,');
  98. FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,XMMREG,,');
  99. FOpCodeList.Add('VCVTPS2PD,1,1,YMMREG,XMMRM,,');
  100. FOpCodeList.Add('VCVTSD2SI,1,1,REG32,MEM64,,');
  101. FOpCodeList.Add('VCVTSD2SI,1,1,REG32,XMMREG,,');
  102. FOpCodeList.Add('VCVTSD2SI,0,1,REG64,MEM64,,');
  103. FOpCodeList.Add('VCVTSD2SI,0,1,REG64,XMMREG,,');
  104. FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,MEM64,');
  105. FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,XMMREG,');
  106. FOpCodeList.Add('VCVTSI2SD,1,1,XMMREG,XMMREG,RM32,');
  107. FOpCodeList.Add('VCVTSI2SD,0,1,XMMREG,XMMREG,RM64,');
  108. FOpCodeList.Add('VCVTSI2SS,1,1,XMMREG,XMMREG,RM32,');
  109. FOpCodeList.Add('VCVTSI2SS,0,1,XMMREG,XMMREG,RM64,');
  110. FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,MEM32,');
  111. FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,XMMREG,');
  112. FOpCodeList.Add('VCVTSS2SI,1,1,REG32,MEM32,,');
  113. FOpCodeList.Add('VCVTSS2SI,1,1,REG32,XMMREG,,');
  114. FOpCodeList.Add('VCVTSS2SI,0,1,REG64,MEM32,,');
  115. FOpCodeList.Add('VCVTSS2SI,0,1,REG64,XMMREG,,');
  116. FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,XMMRM,,');
  117. FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,YMMRM,,');
  118. FOpCodeList.Add('VCVTTPS2DQ,1,1,XMMREG,XMMRM,,');
  119. FOpCodeList.Add('VCVTTPS2DQ,1,1,YMMREG,YMMRM,,');
  120. FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,MEM64,,');
  121. FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,XMMREG,,');
  122. FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,MEM64,,');
  123. FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,XMMREG,,');
  124. FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,MEM32,,');
  125. FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,XMMREG,,');
  126. FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,MEM32,,');
  127. FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,XMMREG,,');
  128. FOpCodeList.Add('VDIVPD,1,1,XMMREG,XMMREG,XMMRM,');
  129. FOpCodeList.Add('VDIVPD,1,1,YMMREG,YMMREG,YMMRM,');
  130. FOpCodeList.Add('VDIVPS,1,1,XMMREG,XMMREG,XMMRM,');
  131. FOpCodeList.Add('VDIVPS,1,1,YMMREG,YMMREG,YMMRM,');
  132. FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,MEM64,');
  133. FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,XMMREG,');
  134. FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,MEM32,');
  135. FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,XMMREG,');
  136. FOpCodeList.Add('VDPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  137. FOpCodeList.Add('VDPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  138. FOpCodeList.Add('VDPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  139. FOpCodeList.Add('VEXTRACTF128,1,1,XMMRM,YMMREG,IMM8,');
  140. FOpCodeList.Add('VEXTRACTPS,1,1,RM32,XMMREG,IMM8,');
  141. FOpCodeList.Add('VHADDPD,1,1,XMMREG,XMMREG,XMMRM,');
  142. FOpCodeList.Add('VHADDPD,1,1,YMMREG,YMMREG,YMMRM,');
  143. FOpCodeList.Add('VHADDPS,1,1,XMMREG,XMMREG,XMMRM,');
  144. FOpCodeList.Add('VHADDPS,1,1,YMMREG,YMMREG,YMMRM,');
  145. FOpCodeList.Add('VHSUBPD,1,1,XMMREG,XMMREG,XMMRM,');
  146. FOpCodeList.Add('VHSUBPD,1,1,YMMREG,YMMREG,YMMRM,');
  147. FOpCodeList.Add('VHSUBPS,1,1,XMMREG,XMMREG,XMMRM,');
  148. FOpCodeList.Add('VHSUBPS,1,1,YMMREG,YMMREG,YMMRM,');
  149. FOpCodeList.Add('VINSERTF128,1,1,YMMREG,YMMREG,XMMRM,IMM8');
  150. FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,MEM32,IMM8');
  151. FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  152. FOpCodeList.Add('VLDDQU,1,1,XMMREG,MEM128,,');
  153. FOpCodeList.Add('VLDDQU,1,1,YMMREG,MEM256,,');
  154. FOpCodeList.Add('VLDMXCSR,1,1,MEM32,,,');
  155. FOpCodeList.Add('VMASKMOVDQU,1,1,XMMREG,XMMREG,,');
  156. FOpCodeList.Add('VMASKMOVPD,1,1,MEM256,YMMREG,YMMREG,');
  157. FOpCodeList.Add('VMASKMOVPD,1,1,MEM128,XMMREG,XMMREG,');
  158. FOpCodeList.Add('VMASKMOVPD,1,1,YMMREG,YMMREG,MEM256,');
  159. FOpCodeList.Add('VMASKMOVPD,1,1,XMMREG,XMMREG,MEM128,');
  160. FOpCodeList.Add('VMASKMOVPS,1,1,MEM256,YMMREG,YMMREG,');
  161. FOpCodeList.Add('VMASKMOVPS,1,1,MEM128,XMMREG,XMMREG,');
  162. FOpCodeList.Add('VMASKMOVPS,1,1,YMMREG,YMMREG,MEM256,');
  163. FOpCodeList.Add('VMASKMOVPS,1,1,XMMREG,XMMREG,MEM128,');
  164. FOpCodeList.Add('VMAXPD,1,1,XMMREG,XMMREG,XMMRM,');
  165. FOpCodeList.Add('VMAXPD,1,1,YMMREG,YMMREG,YMMRM,');
  166. FOpCodeList.Add('VMAXPS,1,1,XMMREG,XMMREG,XMMRM,');
  167. FOpCodeList.Add('VMAXPS,1,1,YMMREG,YMMREG,YMMRM,');
  168. FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,MEM64,');
  169. FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,XMMREG,');
  170. FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,MEM32,');
  171. FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,XMMREG,');
  172. FOpCodeList.Add('VMINPD,1,1,XMMREG,XMMREG,XMMRM,');
  173. FOpCodeList.Add('VMINPD,1,1,YMMREG,YMMREG,YMMRM,');
  174. FOpCodeList.Add('VMINPS,1,1,XMMREG,XMMREG,XMMRM,');
  175. FOpCodeList.Add('VMINPS,1,1,YMMREG,YMMREG,YMMRM,');
  176. FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,MEM64,');
  177. FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,XMMREG,');
  178. FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,MEM32,');
  179. FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,XMMREG,');
  180. FOpCodeList.Add('VMOVAPD,1,1,XMMREG,XMMRM,,');
  181. FOpCodeList.Add('VMOVAPD,1,1,XMMRM,XMMREG,,');
  182. FOpCodeList.Add('VMOVAPD,1,1,YMMREG,YMMRM,,');
  183. FOpCodeList.Add('VMOVAPD,1,1,YMMRM,YMMREG,,');
  184. FOpCodeList.Add('VMOVAPS,1,1,XMMREG,XMMRM,,');
  185. FOpCodeList.Add('VMOVAPS,1,1,XMMRM,XMMREG,,');
  186. FOpCodeList.Add('VMOVAPS,1,1,YMMREG,YMMRM,,');
  187. FOpCodeList.Add('VMOVAPS,1,1,YMMRM,YMMREG,,');
  188. FOpCodeList.Add('VMOVD,1,1,XMMREG,RM32,,');
  189. FOpCodeList.Add('VMOVD,1,1,RM32,XMMREG,,');
  190. FOpCodeList.Add('VMOVDDUP,1,1,YMMREG,YMMRM,,');
  191. FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,MEM64,,');
  192. FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,XMMREG,,');
  193. FOpCodeList.Add('VMOVDQA,1,1,YMMRM,YMMREG,,');
  194. FOpCodeList.Add('VMOVDQA,1,1,XMMREG,XMMRM,,');
  195. FOpCodeList.Add('VMOVDQA,1,1,XMMRM,XMMREG,,');
  196. FOpCodeList.Add('VMOVDQA,1,1,YMMREG,YMMRM,,');
  197. FOpCodeList.Add('VMOVDQU,1,1,YMMREG,YMMRM,,');
  198. FOpCodeList.Add('VMOVDQU,1,1,XMMREG,XMMRM,,');
  199. FOpCodeList.Add('VMOVDQU,1,1,XMMRM,XMMREG,,');
  200. FOpCodeList.Add('VMOVDQU,1,1,YMMRM,YMMREG,,');
  201. FOpCodeList.Add('VMOVHLPS,1,1,XMMREG,XMMREG,XMMREG,');
  202. FOpCodeList.Add('VMOVHPD,1,1,MEM64,XMMREG,,');
  203. FOpCodeList.Add('VMOVHPD,1,1,XMMREG,XMMREG,MEM64,');
  204. FOpCodeList.Add('VMOVHPS,1,1,XMMREG,XMMREG,MEM64,');
  205. FOpCodeList.Add('VMOVHPS,1,1,MEM64,XMMREG,,');
  206. FOpCodeList.Add('VMOVLHPS,1,1,XMMREG,XMMREG,XMMREG,');
  207. FOpCodeList.Add('VMOVLPD,1,1,MEM64,XMMREG,,');
  208. FOpCodeList.Add('VMOVLPD,1,1,XMMREG,XMMREG,MEM64,');
  209. FOpCodeList.Add('VMOVLPS,1,1,MEM64,XMMREG,,');
  210. FOpCodeList.Add('VMOVLPS,1,1,XMMREG,XMMREG,MEM64,');
  211. FOpCodeList.Add('VMOVMSKPD,1,1,REG32,YMMREG,,');
  212. FOpCodeList.Add('VMOVMSKPD,1,1,REG64,XMMREG,,');
  213. FOpCodeList.Add('VMOVMSKPD,1,1,REG32,XMMREG,,');
  214. FOpCodeList.Add('VMOVMSKPD,1,1,REG64,YMMREG,,');
  215. FOpCodeList.Add('VMOVMSKPS,1,1,REG32,YMMREG,,');
  216. FOpCodeList.Add('VMOVMSKPS,1,1,REG64,XMMREG,,');
  217. FOpCodeList.Add('VMOVMSKPS,1,1,REG32,XMMREG,,');
  218. FOpCodeList.Add('VMOVMSKPS,1,1,REG64,YMMREG,,');
  219. FOpCodeList.Add('VMOVNTDQ,1,1,MEM128,XMMREG,,');
  220. FOpCodeList.Add('VMOVNTDQ,1,1,MEM256,YMMREG,,');
  221. FOpCodeList.Add('VMOVNTDQA,1,1,XMMREG,MEM128,,');
  222. FOpCodeList.Add('VMOVNTPD,1,1,MEM256,YMMREG,,');
  223. FOpCodeList.Add('VMOVNTPD,1,1,MEM128,XMMREG,,');
  224. FOpCodeList.Add('VMOVNTPS,1,1,MEM128,YMMREG,,');
  225. FOpCodeList.Add('VMOVNTPS,1,1,MEM128,XMMREG,,');
  226. FOpCodeList.Add('VMOVQ,0,1,RM64,XMMREG,,');
  227. FOpCodeList.Add('VMOVQ,0,1,XMMREG,RM64,,');
  228. FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,');
  229. FOpCodeList.Add('VMOVSD,1,1,XMMREG,MEM64,,');
  230. FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,');
  231. FOpCodeList.Add('VMOVSD,1,1,MEM64,XMMREG,,');
  232. FOpCodeList.Add('VMOVSHDUP,1,1,XMMREG,XMMRM,,');
  233. FOpCodeList.Add('VMOVSHDUP,1,1,YMMREG,YMMRM,,');
  234. FOpCodeList.Add('VMOVSLDUP,1,1,XMMREG,XMMRM,,');
  235. FOpCodeList.Add('VMOVSLDUP,1,1,YMMREG,YMMRM,,');
  236. FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,');
  237. FOpCodeList.Add('VMOVSS,1,1,XMMREG,MEM64,,');
  238. FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,');
  239. FOpCodeList.Add('VMOVSS,1,1,MEM64,XMMREG,,');
  240. FOpCodeList.Add('VMOVUPD,1,1,XMMREG,XMMRM,,');
  241. FOpCodeList.Add('VMOVUPD,1,1,XMMRM,XMMREG,,');
  242. FOpCodeList.Add('VMOVUPD,1,1,YMMREG,YMMRM,,');
  243. FOpCodeList.Add('VMOVUPD,1,1,YMMRM,YMMREG,,');
  244. FOpCodeList.Add('VMOVUPS,1,1,XMMREG,XMMRM,,');
  245. FOpCodeList.Add('VMOVUPS,1,1,XMMRM,XMMREG,,');
  246. FOpCodeList.Add('VMOVUPS,1,1,YMMREG,YMMRM,,');
  247. FOpCodeList.Add('VMOVUPS,1,1,YMMRM,YMMREG,,');
  248. FOpCodeList.Add('VMPSADBW,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  249. FOpCodeList.Add('VMULPD,1,1,XMMREG,XMMREG,XMMRM,');
  250. FOpCodeList.Add('VMULPD,1,1,YMMREG,YMMREG,YMMRM,');
  251. FOpCodeList.Add('VMULPS,1,1,XMMREG,XMMREG,XMMRM,');
  252. FOpCodeList.Add('VMULPS,1,1,YMMREG,YMMREG,YMMRM,');
  253. FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,MEM64,');
  254. FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,XMMREG,');
  255. FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,MEM32,');
  256. FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,XMMREG,');
  257. FOpCodeList.Add('VORPD,1,1,XMMREG,XMMREG,XMMRM,');
  258. FOpCodeList.Add('VORPS,1,1,XMMREG,XMMREG,XMMRM,');
  259. FOpCodeList.Add('VORPS,1,1,YMMREG,YMMREG,YMMRM,');
  260. FOpCodeList.Add('VPABSB,1,1,XMMREG,XMMRM,,');
  261. FOpCodeList.Add('VPABSD,1,1,XMMREG,XMMRM,,');
  262. FOpCodeList.Add('VPABSW,1,1,XMMREG,XMMRM,,');
  263. FOpCodeList.Add('VPACKSSDW,1,1,XMMREG,XMMREG,XMMRM,');
  264. FOpCodeList.Add('VPACKSSWB,1,1,XMMREG,XMMREG,XMMRM,');
  265. FOpCodeList.Add('VPACKUSDW,1,1,XMMREG,XMMREG,XMMRM,');
  266. FOpCodeList.Add('VPACKUSWB,1,1,XMMREG,XMMREG,XMMRM,');
  267. FOpCodeList.Add('VPADDB,1,1,XMMREG,XMMREG,XMMRM,');
  268. FOpCodeList.Add('VPADDD,1,1,XMMREG,XMMREG,XMMRM,');
  269. FOpCodeList.Add('VPADDQ,1,1,XMMREG,XMMREG,XMMRM,');
  270. FOpCodeList.Add('VPADDSB,1,1,XMMREG,XMMREG,XMMRM,');
  271. FOpCodeList.Add('VPADDSW,1,1,XMMREG,XMMREG,XMMRM,');
  272. FOpCodeList.Add('VPADDUSB,1,1,XMMREG,XMMREG,XMMRM,');
  273. FOpCodeList.Add('VPADDUSW,1,1,XMMREG,XMMREG,XMMRM,');
  274. FOpCodeList.Add('VPADDW,1,1,XMMREG,XMMREG,XMMRM,');
  275. FOpCodeList.Add('VPALIGNR,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  276. FOpCodeList.Add('VPAND,1,1,XMMREG,XMMREG,XMMRM,');
  277. FOpCodeList.Add('VPANDN,1,1,XMMREG,XMMREG,XMMRM,');
  278. FOpCodeList.Add('VPAVGB,1,1,XMMREG,XMMREG,XMMRM,');
  279. FOpCodeList.Add('VPAVGW,1,1,XMMREG,XMMREG,XMMRM,');
  280. FOpCodeList.Add('VPBLENDVB,1,1,XMMREG,XMMREG,XMMRM,XMMREG');
  281. FOpCodeList.Add('VPBLENDW,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  282. FOpCodeList.Add('VPCLMULQDQ,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  283. FOpCodeList.Add('VPCMPEQB,1,1,XMMREG,XMMREG,XMMRM,');
  284. FOpCodeList.Add('VPCMPEQD,1,1,XMMREG,XMMREG,XMMRM,');
  285. FOpCodeList.Add('VPCMPEQQ,1,1,XMMREG,XMMREG,XMMRM,');
  286. FOpCodeList.Add('VPCMPEQW,1,1,XMMREG,XMMREG,XMMRM,');
  287. FOpCodeList.Add('VPCMPESTRI,1,1,XMMREG,XMMRM,IMM8,');
  288. FOpCodeList.Add('VPCMPESTRM,1,1,XMMREG,XMMRM,IMM8,');
  289. FOpCodeList.Add('VPCMPGTB,1,1,XMMREG,XMMREG,XMMRM,');
  290. FOpCodeList.Add('VPCMPGTD,1,1,XMMREG,XMMREG,XMMRM,');
  291. FOpCodeList.Add('VPCMPGTQ,1,1,XMMREG,XMMREG,XMMRM,');
  292. FOpCodeList.Add('VPCMPGTW,1,1,XMMREG,XMMREG,XMMRM,');
  293. FOpCodeList.Add('VPCMPISTRI,1,1,XMMREG,XMMRM,IMM8,');
  294. FOpCodeList.Add('VPCMPISTRM,1,1,XMMREG,XMMRM,IMM8,');
  295. FOpCodeList.Add('VPERM2F128,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  296. FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMREG,YMMRM,');
  297. FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMRM,IMM8,');
  298. FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMRM,IMM8,');
  299. FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMREG,XMMRM,');
  300. FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMREG,YMMRM,');
  301. FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMRM,IMM8,');
  302. FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMRM,IMM8,');
  303. FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMREG,XMMRM,');
  304. FOpCodeList.Add('VPEXTRB,1,1,REG32,XMMREG,IMM8,');
  305. FOpCodeList.Add('VPEXTRB,1,1,REG64,XMMREG,IMM8,');
  306. FOpCodeList.Add('VPEXTRB,1,1,MEM8,XMMREG,IMM8,');
  307. FOpCodeList.Add('VPEXTRD,1,1,RM32,XMMREG,IMM8,');
  308. FOpCodeList.Add('VPEXTRQ,0,1,RM64,XMMREG,IMM8,');
  309. FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,');
  310. FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,');
  311. FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,');
  312. FOpCodeList.Add('VPEXTRW,1,1,MEM16,XMMREG,IMM8,');
  313. FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,');
  314. FOpCodeList.Add('VPHADDD,1,1,XMMREG,XMMREG,XMMRM,');
  315. FOpCodeList.Add('VPHADDSW,1,1,XMMREG,XMMREG,XMMRM,');
  316. FOpCodeList.Add('VPHADDW,1,1,XMMREG,XMMREG,XMMRM,');
  317. FOpCodeList.Add('VPHMINPOSUW,1,1,XMMREG,XMMRM,,');
  318. FOpCodeList.Add('VPHSUBD,1,1,XMMREG,XMMREG,XMMRM,');
  319. FOpCodeList.Add('VPHSUBSW,1,1,XMMREG,XMMREG,XMMRM,');
  320. FOpCodeList.Add('VPHSUBW,1,1,XMMREG,XMMREG,XMMRM,');
  321. FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,REG32,IMM8');
  322. FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,MEM8,IMM8');
  323. FOpCodeList.Add('VPINSRD,1,1,XMMREG,XMMREG,RM32,IMM8');
  324. FOpCodeList.Add('VPINSRQ,0,1,XMMREG,XMMREG,RM64,IMM8');
  325. FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,REG32,IMM8');
  326. FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,MEM16,IMM8');
  327. FOpCodeList.Add('VPMADDUBSW,1,1,XMMREG,XMMREG,XMMRM,');
  328. FOpCodeList.Add('VPMADDWD,1,1,XMMREG,XMMREG,XMMRM,');
  329. FOpCodeList.Add('VPMAXSB,1,1,XMMREG,XMMREG,XMMRM,');
  330. FOpCodeList.Add('VPMAXSD,1,1,XMMREG,XMMREG,XMMRM,');
  331. FOpCodeList.Add('VPMAXSW,1,1,XMMREG,XMMREG,XMMRM,');
  332. FOpCodeList.Add('VPMAXUB,1,1,XMMREG,XMMREG,XMMRM,');
  333. FOpCodeList.Add('VPMAXUD,1,1,XMMREG,XMMREG,XMMRM,');
  334. FOpCodeList.Add('VPMAXUW,1,1,XMMREG,XMMREG,XMMRM,');
  335. FOpCodeList.Add('VPMINSB,1,1,XMMREG,XMMREG,XMMRM,');
  336. FOpCodeList.Add('VPMINSD,1,1,XMMREG,XMMREG,XMMRM,');
  337. FOpCodeList.Add('VPMINSW,1,1,XMMREG,XMMREG,XMMRM,');
  338. FOpCodeList.Add('VPMINUB,1,1,XMMREG,XMMREG,XMMRM,');
  339. FOpCodeList.Add('VPMINUD,1,1,XMMREG,XMMREG,XMMRM,');
  340. FOpCodeList.Add('VPMINUW,1,1,XMMREG,XMMREG,XMMRM,');
  341. FOpCodeList.Add('VPMOVMSKB,1,1,REG64,XMMREG,,');
  342. FOpCodeList.Add('VPMOVMSKB,1,1,REG32,XMMREG,,');
  343. FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,MEM32,,');
  344. FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,XMMREG,,');
  345. FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,MEM16,,');
  346. FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,XMMREG,,');
  347. FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,MEM64,,');
  348. FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,XMMREG,,');
  349. FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,MEM64,,');
  350. FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,XMMREG,,');
  351. FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,MEM64,,');
  352. FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMREG,,');
  353. FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,MEM32,,');
  354. FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,XMMREG,,');
  355. FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,MEM32,,');
  356. FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,XMMREG,,');
  357. FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,MEM16,,');
  358. FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,XMMREG,,');
  359. FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,MEM64,,');
  360. FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,XMMREG,,');
  361. FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,MEM64,,');
  362. FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,XMMREG,,');
  363. FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,MEM64,,');
  364. FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,XMMREG,,');
  365. FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,MEM32,,');
  366. FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,XMMREG,,');
  367. FOpCodeList.Add('VPMULDQ,1,1,XMMREG,XMMREG,XMMRM,');
  368. FOpCodeList.Add('VPMULHRSW,1,1,XMMREG,XMMREG,XMMRM,');
  369. FOpCodeList.Add('VPMULHUW,1,1,XMMREG,XMMREG,XMMRM,');
  370. FOpCodeList.Add('VPMULHW,1,1,XMMREG,XMMREG,XMMRM,');
  371. FOpCodeList.Add('VPMULLD,1,1,XMMREG,XMMREG,XMMRM,');
  372. FOpCodeList.Add('VPMULLW,1,1,XMMREG,XMMREG,XMMRM,');
  373. FOpCodeList.Add('VPMULUDQ,1,1,XMMREG,XMMREG,XMMRM,');
  374. FOpCodeList.Add('VPOR,1,1,XMMREG,XMMREG,XMMRM,');
  375. FOpCodeList.Add('VPSADBW,1,1,XMMREG,XMMREG,XMMRM,');
  376. FOpCodeList.Add('VPSHUFB,1,1,XMMREG,XMMREG,XMMRM,');
  377. FOpCodeList.Add('VPSHUFD,1,1,XMMREG,XMMRM,IMM8,');
  378. FOpCodeList.Add('VPSHUFHW,1,1,XMMREG,XMMRM,IMM8,');
  379. FOpCodeList.Add('VPSHUFLW,1,1,XMMREG,XMMRM,IMM8,');
  380. FOpCodeList.Add('VPSIGNB,1,1,XMMREG,XMMREG,XMMRM,');
  381. FOpCodeList.Add('VPSIGND,1,1,XMMREG,XMMREG,XMMRM,');
  382. FOpCodeList.Add('VPSIGNW,1,1,XMMREG,XMMREG,XMMRM,');
  383. FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,IMM8,');
  384. FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,XMMRM,');
  385. FOpCodeList.Add('VPSLLDQ,1,1,XMMREG,XMMREG,IMM8,');
  386. FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,XMMRM,');
  387. FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,IMM8,');
  388. FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,IMM8,');
  389. FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,XMMRM,');
  390. FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,IMM8,');
  391. FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,XMMRM,');
  392. FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,IMM8,');
  393. FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,XMMRM,');
  394. FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,IMM8,');
  395. FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,XMMRM,');
  396. FOpCodeList.Add('VPSRLDQ,1,1,XMMREG,XMMREG,IMM8,');
  397. FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,IMM8,');
  398. FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,XMMRM,');
  399. FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,IMM8,');
  400. FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,XMMRM,');
  401. FOpCodeList.Add('VPSUBB,1,1,XMMREG,XMMREG,XMMRM,');
  402. FOpCodeList.Add('VPSUBD,1,1,XMMREG,XMMREG,XMMRM,');
  403. FOpCodeList.Add('VPSUBQ,1,1,XMMREG,XMMREG,XMMRM,');
  404. FOpCodeList.Add('VPSUBSB,1,1,XMMREG,XMMREG,XMMRM,');
  405. FOpCodeList.Add('VPSUBSW,1,1,XMMREG,XMMREG,XMMRM,');
  406. FOpCodeList.Add('VPSUBUSB,1,1,XMMREG,XMMREG,XMMRM,');
  407. FOpCodeList.Add('VPSUBUSW,1,1,XMMREG,XMMREG,XMMRM,');
  408. FOpCodeList.Add('VPSUBW,1,1,XMMREG,XMMREG,XMMRM,');
  409. FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,');
  410. FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,');
  411. FOpCodeList.Add('VPUNPCKHBW,1,1,XMMREG,XMMREG,XMMRM,');
  412. FOpCodeList.Add('VPUNPCKHDQ,1,1,XMMREG,XMMREG,XMMRM,');
  413. FOpCodeList.Add('VPUNPCKHQDQ,1,1,XMMREG,XMMREG,XMMRM,');
  414. FOpCodeList.Add('VPUNPCKHWD,1,1,XMMREG,XMMREG,XMMRM,');
  415. FOpCodeList.Add('VPUNPCKLBW,1,1,XMMREG,XMMREG,XMMRM,');
  416. FOpCodeList.Add('VPUNPCKLDQ,1,1,XMMREG,XMMREG,XMMRM,');
  417. FOpCodeList.Add('VPUNPCKLQDQ,1,1,XMMREG,XMMREG,XMMRM,');
  418. FOpCodeList.Add('VPUNPCKLWD,1,1,XMMREG,XMMREG,XMMRM,');
  419. FOpCodeList.Add('VPXOR,1,1,XMMREG,XMMREG,XMMRM,');
  420. FOpCodeList.Add('VRCPPS,1,1,XMMREG,XMMRM,,');
  421. FOpCodeList.Add('VRCPPS,1,1,YMMREG,YMMRM,,');
  422. FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,MEM32,');
  423. FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,XMMREG,');
  424. FOpCodeList.Add('VROUNDPD,1,1,YMMREG,YMMRM,IMM8,');
  425. FOpCodeList.Add('VROUNDPD,1,1,XMMREG,XMMRM,IMM8,');
  426. FOpCodeList.Add('VROUNDPS,1,1,YMMREG,YMMRM,IMM8,');
  427. FOpCodeList.Add('VROUNDPS,1,1,XMMREG,XMMRM,IMM8,');
  428. FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,MEM64,IMM8');
  429. FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  430. FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,MEM32,IMM8');
  431. FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  432. FOpCodeList.Add('VRSQRTPS,1,1,YMMREG,YMMRM,,');
  433. FOpCodeList.Add('VRSQRTPS,1,1,XMMREG,XMMRM,,');
  434. FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,MEM32,');
  435. FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,XMMREG,');
  436. FOpCodeList.Add('VSHUFPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  437. FOpCodeList.Add('VSHUFPD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  438. FOpCodeList.Add('VSHUFPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  439. FOpCodeList.Add('VSHUFPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  440. FOpCodeList.Add('VSQRTPD,1,1,XMMREG,XMMRM,,');
  441. FOpCodeList.Add('VSQRTPD,1,1,YMMREG,YMMRM,,');
  442. FOpCodeList.Add('VSQRTPS,1,1,XMMREG,XMMRM,,');
  443. FOpCodeList.Add('VSQRTPS,1,1,YMMREG,YMMRM,,');
  444. FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,MEM64,');
  445. FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,XMMREG,');
  446. FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,MEM32,');
  447. FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,XMMREG,');
  448. FOpCodeList.Add('VSTMXCSR,1,1,MEM32,,,');
  449. FOpCodeList.Add('VSUBPD,1,1,XMMREG,XMMREG,XMMRM,');
  450. FOpCodeList.Add('VSUBPD,1,1,YMMREG,YMMREG,YMMRM,');
  451. FOpCodeList.Add('VSUBPS,1,1,XMMREG,XMMREG,XMMRM,');
  452. FOpCodeList.Add('VSUBPS,1,1,YMMREG,YMMREG,YMMRM,');
  453. FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,MEM64,');
  454. FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,XMMREG,');
  455. FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,MEM32,');
  456. FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,XMMREG,');
  457. FOpCodeList.Add('VTESTPD,1,1,XMMREG,XMMRM,,');
  458. FOpCodeList.Add('VTESTPD,1,1,YMMREG,YMMRM,,');
  459. FOpCodeList.Add('VTESTPS,1,1,YMMREG,YMMRM,,');
  460. FOpCodeList.Add('VTESTPS,1,1,XMMREG,XMMRM,,');
  461. FOpCodeList.Add('VUCOMISD,1,1,XMMREG,MEM64,,');
  462. FOpCodeList.Add('VUCOMISD,1,1,XMMREG,XMMREG,,');
  463. FOpCodeList.Add('VUCOMISS,1,1,XMMREG,MEM32,,');
  464. FOpCodeList.Add('VUCOMISS,1,1,XMMREG,XMMREG,,');
  465. FOpCodeList.Add('VUNPCKHPD,1,1,XMMREG,XMMREG,XMMRM,');
  466. FOpCodeList.Add('VUNPCKHPD,1,1,YMMREG,YMMREG,YMMRM,');
  467. FOpCodeList.Add('VUNPCKHPS,1,1,XMMREG,XMMREG,XMMRM,');
  468. FOpCodeList.Add('VUNPCKHPS,1,1,YMMREG,YMMREG,YMMRM,');
  469. FOpCodeList.Add('VUNPCKLPD,1,1,XMMREG,XMMREG,XMMRM,');
  470. FOpCodeList.Add('VUNPCKLPD,1,1,YMMREG,YMMREG,YMMRM,');
  471. FOpCodeList.Add('VUNPCKLPS,1,1,XMMREG,XMMREG,XMMRM,');
  472. FOpCodeList.Add('VUNPCKLPS,1,1,YMMREG,YMMREG,YMMRM,');
  473. FOpCodeList.Add('VXORPD,1,1,XMMREG,XMMREG,XMMRM,');
  474. FOpCodeList.Add('VXORPD,1,1,YMMREG,YMMREG,YMMRM,');
  475. FOpCodeList.Add('VXORPS,1,1,XMMREG,XMMREG,XMMRM,');
  476. FOpCodeList.Add('VXORPS,1,1,YMMREG,YMMREG,YMMRM,');
  477. FOpCodeList.Add('VZEROALL,1,1,,,,');
  478. FOpCodeList.Add('VZEROUPPER,1,1,,,,');
  479. end;
  480. function TAVXTestGenerator.InternalMakeTestFiles(aX64: boolean; aDestPath, aFileExt: String;
  481. aOpCodeList, aHeaderList, aFooterList: TStringList): boolean;
  482. var
  483. i: integer;
  484. sl: TStringList;
  485. slAsm: TStringList;
  486. LastOpCode: String;
  487. NewOpCode: String;
  488. function SaveFile(aAsmList: TStringList; aOpcode, aDestPath, aFileExt: String; aHeaderList, aFooterList: TStringList): boolean;
  489. begin
  490. result := false;
  491. if aAsmList.Count > 0 then
  492. begin
  493. aAsmList.Insert(0, StringReplace(aHeaderList.Text, '$$$OPCODE$$$', aOpCode, []));
  494. aAsmList.AddStrings(aFooterList);
  495. aAsmList.SaveToFile(IncludeTrailingBackslash(aDestPath) + aOpCode + aFileExt);
  496. end;
  497. end;
  498. begin
  499. result := false;
  500. aOpCodeList.Sort;
  501. sl := TStringList.Create;
  502. try
  503. slAsm := TStringList.Create;
  504. try
  505. LastOpCode := '';
  506. for i := 0 to aOpCodeList.Count - 1 do
  507. //for i := 0 to 0 do
  508. begin
  509. sl.Clear;
  510. sl.CommaText := aOpCodeList[i];
  511. while sl.Count < 7 do sl.Add('');
  512. NewOpCode := sl[0];
  513. if NewOpCode <> '' then
  514. begin
  515. if NewOpCode <> LastOpCode then
  516. begin
  517. if LastOpCode <> '' then
  518. begin
  519. SaveFile(slAsm, LastOpCode, aDestPath, aFileExt, aHeaderList, aFooterList);
  520. writeln(format('%s%s%s', [aDestPath, NewOpCode, aFileExt]));
  521. slAsm.Clear;
  522. LastOpCode := NewOpCode;
  523. end
  524. else LastOpCode := NewOpCode;
  525. end;
  526. if (not(aX64) and (sl[1] = '1')) or // i386
  527. (aX64 and (sl[2] = '1')) then // x86_64
  528. begin
  529. if (sl[3] = '') and
  530. (sl[3] = '') and
  531. (sl[3] = '') and
  532. (sl[3] = '') then
  533. begin // Opcode with no Params, e.g. VZEROALL
  534. slAsm.Add(' ' + sl[0]);
  535. end
  536. else TAsmTestGenerator.CalcTestData(aX64, sl[0], sl[3], sl[4], sl[5], sl[6], slAsm);
  537. end;
  538. end;
  539. end;
  540. if NewOpCode <> '' then
  541. begin
  542. SaveFile(slAsm, NewOpCode, aDestPath, aFileExt, aHeaderList, aFooterList);
  543. writeln(format('%s%s%s', [aDestPath, NewOpCode, aFileExt]));
  544. end;
  545. finally
  546. FreeAndNil(slAsm);
  547. end;
  548. finally
  549. FreeAndNil(sl);
  550. end;
  551. end;
  552. function TAVXTestGenerator.MakeTestFiles(aTyp: TTestFileTyp; aX64: boolean;
  553. aDestPath: String): boolean;
  554. var
  555. slHeader: TStringList;
  556. slFooter: TStringList;
  557. FileExt: String;
  558. i: integer;
  559. const
  560. cPlatform: array[boolean] of String = (('i386'), ('x86_64'));
  561. begin
  562. result := false;
  563. slHeader := TStringList.Create;
  564. try
  565. slFooter := TStringList.Create;
  566. try
  567. case aTyp of
  568. tfFPC: begin
  569. writeln(format('outputformat: fpc platform: %s path: %s',
  570. [cPlatform[aX64], aDestPath]));
  571. FileExt := '.pp';
  572. slHeader.Add('Program $$$OPCODE$$$;');
  573. slHeader.Add('{$asmmode intel}');
  574. slHeader.Add('begin');
  575. slHeader.Add(' asm');
  576. for i := 1 to 10 do
  577. slHeader.Add('NOP');
  578. for i := 1 to 10 do
  579. slFooter.Add('NOP');
  580. slFooter.Add(' end;');
  581. slFooter.Add('end.');
  582. end;
  583. tfNasm: begin
  584. writeln(format('outputformat: fpc platform: %s path: %s',
  585. [cPlatform[aX64], aDestPath]));
  586. FileExt := '.asm';
  587. for i := 1 to 10 do
  588. slHeader.Add('NOP');
  589. for i := 1 to 10 do
  590. slFooter.Add('NOP');
  591. end;
  592. end;
  593. InternalMakeTestFiles(aX64, aDestPath, Fileext, FOpCodeList, slHeader, slFooter);
  594. finally
  595. FreeAndNil(slFooter);
  596. end;
  597. finally
  598. FreeAndNil(slHeader);
  599. end;
  600. end;
  601. end.