avxopcodes.pas 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046
  1. {$mode objfpc}
  2. unit avxopcodes;
  3. interface
  4. uses Classes;
  5. type
  6. TTestFileTyp = (tfNasm, tfFPC, tfFasm, tfFPCInc);
  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('ADCX,1,1,REG32,RM32,,,');
  36. FOpCodeList.Add('ADCX,1,1,REG64,RM64,,,');
  37. FOpCodeList.Add('ADOX,1,1,REG32,RM32,,,');
  38. FOpCodeList.Add('ADOX,1,1,REG64,RM64,,,');
  39. FOpCodeList.Add('BLSI,1,1,REG32,RM32,,,');
  40. FOpCodeList.Add('BLSI,1,1,REG64,RM64,,,');
  41. FOpCodeList.Add('BLSR,1,1,REG32,RM32,,,');
  42. FOpCodeList.Add('BLSR,1,1,REG64,RM64,,,');
  43. FOpCodeList.Add('BLSMSK,1,1,REG32,RM32,,,');
  44. FOpCodeList.Add('BLSMSK,1,1,REG64,RM64,,,');
  45. FOpCodeList.Add('BZHI,1,1,REG32,RM32,REG32,,');
  46. FOpCodeList.Add('BZHI,1,1,REG64,RM64,REG64,,');
  47. FOpCodeList.Add('MULX,1,1,REG32,REG32,RM32,,');
  48. FOpCodeList.Add('MULX,1,1,REG64,REG64,RM64,,');
  49. FOpCodeList.Add('PDEP,1,1,REG32,REG32,RM32,,');
  50. FOpCodeList.Add('PDEP,1,1,REG64,REG64,RM64,,');
  51. FOpCodeList.Add('PEXT,1,1,REG32,REG32,RM32,,');
  52. FOpCodeList.Add('PEXT,1,1,REG64,REG64,RM64,,');
  53. FOpCodeList.Add('MOVBE,1,1,REG16,MEM16,,,');
  54. FOpCodeList.Add('MOVBE,1,1,MEM16,REG16,,,');
  55. FOpCodeList.Add('MOVBE,1,1,REG32,MEM32,,,');
  56. FOpCodeList.Add('MOVBE,1,1,MEM32,REG32,,,');
  57. FOpCodeList.Add('MOVBE,1,1,REG64,MEM64,,,');
  58. FOpCodeList.Add('MOVBE,1,1,MEM64,REG64,,,');
  59. FOpCodeList.Add('PCLMULQDQ,1,1,XMMREG,XMMRM,IMM8,');
  60. FOpCodeList.Add('VPCLMULQDQ,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  61. FOpCodeList.Add('VADDPD,1,1,XMMREG,XMMREG,XMMRM,');
  62. FOpCodeList.Add('VADDPD,1,1,YMMREG,YMMREG,YMMRM,');
  63. FOpCodeList.Add('VADDPS,1,1,XMMREG,XMMREG,XMMRM,');
  64. FOpCodeList.Add('VADDPS,1,1,YMMREG,YMMREG,YMMRM,');
  65. FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,MEM64,');
  66. FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,XMMREG,');
  67. FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,MEM32,');
  68. FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,XMMREG,');
  69. FOpCodeList.Add('VADDSUBPD,1,1,YMMREG,YMMREG,YMMRM,');
  70. FOpCodeList.Add('VADDSUBPD,1,1,XMMREG,XMMREG,XMMRM,');
  71. FOpCodeList.Add('VADDSUBPS,1,1,YMMREG,YMMREG,YMMRM,');
  72. FOpCodeList.Add('VADDSUBPS,1,1,XMMREG,XMMREG,XMMRM,');
  73. FOpCodeList.Add('VAESDEC,1,1,XMMREG,XMMREG,XMMRM,');
  74. FOpCodeList.Add('VAESDECLAST,1,1,XMMREG,XMMREG,XMMRM,');
  75. FOpCodeList.Add('VAESENC,1,1,XMMREG,XMMREG,XMMRM,');
  76. FOpCodeList.Add('VAESENCLAST,1,1,XMMREG,XMMREG,XMMRM,');
  77. FOpCodeList.Add('VAESIMC,1,1,XMMREG,XMMRM,,');
  78. FOpCodeList.Add('VAESKEYGENASSIST,1,1,XMMREG,XMMRM,IMM8,');
  79. FOpCodeList.Add('VANDNPD,1,1,XMMREG,XMMREG,XMMRM,');
  80. FOpCodeList.Add('VANDNPD,1,1,YMMREG,YMMREG,YMMRM,');
  81. FOpCodeList.Add('VANDNPS,1,1,XMMREG,XMMREG,XMMRM,');
  82. FOpCodeList.Add('VANDNPS,1,1,YMMREG,YMMREG,YMMRM,');
  83. FOpCodeList.Add('VANDPD,1,1,XMMREG,XMMREG,XMMRM,');
  84. FOpCodeList.Add('VANDPD,1,1,YMMREG,YMMREG,YMMRM,');
  85. FOpCodeList.Add('VANDPS,1,1,XMMREG,XMMREG,XMMRM,');
  86. FOpCodeList.Add('VANDPS,1,1,YMMREG,YMMREG,YMMRM,');
  87. FOpCodeList.Add('VBLENDPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  88. FOpCodeList.Add('VBLENDPD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  89. FOpCodeList.Add('VBLENDPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  90. FOpCodeList.Add('VBLENDPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  91. FOpCodeList.Add('VBLENDVPD,1,1,XMMREG,XMMREG,XMMRM,XMMREG');
  92. FOpCodeList.Add('VBLENDVPD,1,1,YMMREG,YMMREG,YMMRM,YMMREG');
  93. FOpCodeList.Add('VBLENDVPS,1,1,XMMREG,XMMREG,XMMRM,XMMREG');
  94. FOpCodeList.Add('VBLENDVPS,1,1,YMMREG,YMMREG,YMMRM,YMMREG');
  95. FOpCodeList.Add('VBROADCASTF128,1,1,YMMREG,MEM128,,');
  96. FOpCodeList.Add('VBROADCASTSD,1,1,YMMREG,MEM64,,');
  97. FOpCodeList.Add('VBROADCASTSS,1,1,YMMREG,MEM32,,');
  98. FOpCodeList.Add('VBROADCASTSS,1,1,XMMREG,MEM32,,');
  99. FOpCodeList.Add('VCMPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  100. FOpCodeList.Add('VCMPPD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  101. FOpCodeList.Add('VCMPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  102. FOpCodeList.Add('VCMPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  103. FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,MEM64,IMM8');
  104. FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  105. FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,MEM64,IMM8');
  106. FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  107. FOpCodeList.Add('VCOMISD,1,1,XMMREG,MEM64,,');
  108. FOpCodeList.Add('VCOMISD,1,1,XMMREG,XMMREG,,');
  109. FOpCodeList.Add('VCOMISS,1,1,XMMREG,MEM32,,');
  110. FOpCodeList.Add('VCOMISS,1,1,XMMREG,XMMREG,,');
  111. FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,MEM64,,');
  112. FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,XMMREG,,');
  113. FOpCodeList.Add('VCVTDQ2PD,1,1,YMMREG,XMMRM,,');
  114. FOpCodeList.Add('VCVTDQ2PS,1,1,XMMREG,XMMRM,,');
  115. FOpCodeList.Add('VCVTDQ2PS,1,1,YMMREG,YMMRM,,');
  116. FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,XMMRM,,');
  117. FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,YMMRM,,');
  118. FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,XMMRM,,');
  119. FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,YMMRM,,');
  120. FOpCodeList.Add('VCVTPS2DQ,1,1,XMMREG,XMMRM,,');
  121. FOpCodeList.Add('VCVTPS2DQ,1,1,YMMREG,YMMRM,,');
  122. FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,MEM64,,');
  123. FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,XMMREG,,');
  124. FOpCodeList.Add('VCVTPS2PD,1,1,YMMREG,XMMRM,,');
  125. FOpCodeList.Add('VCVTSD2SI,1,1,REG32,MEM64,,');
  126. FOpCodeList.Add('VCVTSD2SI,1,1,REG32,XMMREG,,');
  127. FOpCodeList.Add('VCVTSD2SI,0,1,REG64,MEM64,,');
  128. FOpCodeList.Add('VCVTSD2SI,0,1,REG64,XMMREG,,');
  129. FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,MEM64,');
  130. FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,XMMREG,');
  131. FOpCodeList.Add('VCVTSI2SD,1,1,XMMREG,XMMREG,RM32,');
  132. FOpCodeList.Add('VCVTSI2SD,0,1,XMMREG,XMMREG,RM64,');
  133. FOpCodeList.Add('VCVTSI2SS,1,1,XMMREG,XMMREG,RM32,');
  134. FOpCodeList.Add('VCVTSI2SS,0,1,XMMREG,XMMREG,RM64,');
  135. FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,MEM32,');
  136. FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,XMMREG,');
  137. FOpCodeList.Add('VCVTSS2SI,1,1,REG32,MEM32,,');
  138. FOpCodeList.Add('VCVTSS2SI,1,1,REG32,XMMREG,,');
  139. FOpCodeList.Add('VCVTSS2SI,0,1,REG64,MEM32,,');
  140. FOpCodeList.Add('VCVTSS2SI,0,1,REG64,XMMREG,,');
  141. FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,XMMRM,,');
  142. FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,YMMRM,,');
  143. FOpCodeList.Add('VCVTTPS2DQ,1,1,XMMREG,XMMRM,,');
  144. FOpCodeList.Add('VCVTTPS2DQ,1,1,YMMREG,YMMRM,,');
  145. FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,MEM64,,');
  146. FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,XMMREG,,');
  147. FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,MEM64,,');
  148. FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,XMMREG,,');
  149. FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,MEM32,,');
  150. FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,XMMREG,,');
  151. FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,MEM32,,');
  152. FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,XMMREG,,');
  153. FOpCodeList.Add('VDIVPD,1,1,XMMREG,XMMREG,XMMRM,');
  154. FOpCodeList.Add('VDIVPD,1,1,YMMREG,YMMREG,YMMRM,');
  155. FOpCodeList.Add('VDIVPS,1,1,XMMREG,XMMREG,XMMRM,');
  156. FOpCodeList.Add('VDIVPS,1,1,YMMREG,YMMREG,YMMRM,');
  157. FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,MEM64,');
  158. FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,XMMREG,');
  159. FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,MEM32,');
  160. FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,XMMREG,');
  161. FOpCodeList.Add('VDPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  162. FOpCodeList.Add('VDPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  163. FOpCodeList.Add('VDPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  164. FOpCodeList.Add('VEXTRACTF128,1,1,XMMRM,YMMREG,IMM8,');
  165. FOpCodeList.Add('VEXTRACTPS,1,1,RM32,XMMREG,IMM8,');
  166. FOpCodeList.Add('VHADDPD,1,1,XMMREG,XMMREG,XMMRM,');
  167. FOpCodeList.Add('VHADDPD,1,1,YMMREG,YMMREG,YMMRM,');
  168. FOpCodeList.Add('VHADDPS,1,1,XMMREG,XMMREG,XMMRM,');
  169. FOpCodeList.Add('VHADDPS,1,1,YMMREG,YMMREG,YMMRM,');
  170. FOpCodeList.Add('VHSUBPD,1,1,XMMREG,XMMREG,XMMRM,');
  171. FOpCodeList.Add('VHSUBPD,1,1,YMMREG,YMMREG,YMMRM,');
  172. FOpCodeList.Add('VHSUBPS,1,1,XMMREG,XMMREG,XMMRM,');
  173. FOpCodeList.Add('VHSUBPS,1,1,YMMREG,YMMREG,YMMRM,');
  174. FOpCodeList.Add('VINSERTF128,1,1,YMMREG,YMMREG,XMMRM,IMM8');
  175. FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,MEM32,IMM8');
  176. FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  177. FOpCodeList.Add('VLDDQU,1,1,XMMREG,MEM128,,');
  178. FOpCodeList.Add('VLDDQU,1,1,YMMREG,MEM256,,');
  179. FOpCodeList.Add('VLDMXCSR,1,1,MEM32,,,');
  180. FOpCodeList.Add('VMASKMOVDQU,1,1,XMMREG,XMMREG,,');
  181. FOpCodeList.Add('VMASKMOVPD,1,1,MEM256,YMMREG,YMMREG,');
  182. FOpCodeList.Add('VMASKMOVPD,1,1,MEM128,XMMREG,XMMREG,');
  183. FOpCodeList.Add('VMASKMOVPD,1,1,YMMREG,YMMREG,MEM256,');
  184. FOpCodeList.Add('VMASKMOVPD,1,1,XMMREG,XMMREG,MEM128,');
  185. FOpCodeList.Add('VMASKMOVPS,1,1,MEM256,YMMREG,YMMREG,');
  186. FOpCodeList.Add('VMASKMOVPS,1,1,MEM128,XMMREG,XMMREG,');
  187. FOpCodeList.Add('VMASKMOVPS,1,1,YMMREG,YMMREG,MEM256,');
  188. FOpCodeList.Add('VMASKMOVPS,1,1,XMMREG,XMMREG,MEM128,');
  189. FOpCodeList.Add('VMAXPD,1,1,XMMREG,XMMREG,XMMRM,');
  190. FOpCodeList.Add('VMAXPD,1,1,YMMREG,YMMREG,YMMRM,');
  191. FOpCodeList.Add('VMAXPS,1,1,XMMREG,XMMREG,XMMRM,');
  192. FOpCodeList.Add('VMAXPS,1,1,YMMREG,YMMREG,YMMRM,');
  193. FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,MEM64,');
  194. FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,XMMREG,');
  195. FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,MEM32,');
  196. FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,XMMREG,');
  197. FOpCodeList.Add('VMINPD,1,1,XMMREG,XMMREG,XMMRM,');
  198. FOpCodeList.Add('VMINPD,1,1,YMMREG,YMMREG,YMMRM,');
  199. FOpCodeList.Add('VMINPS,1,1,XMMREG,XMMREG,XMMRM,');
  200. FOpCodeList.Add('VMINPS,1,1,YMMREG,YMMREG,YMMRM,');
  201. FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,MEM64,');
  202. FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,XMMREG,');
  203. FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,MEM32,');
  204. FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,XMMREG,');
  205. FOpCodeList.Add('VMOVAPD,1,1,XMMREG,XMMRM,,');
  206. FOpCodeList.Add('VMOVAPD,1,1,XMMRM,XMMREG,,');
  207. FOpCodeList.Add('VMOVAPD,1,1,YMMREG,YMMRM,,');
  208. FOpCodeList.Add('VMOVAPD,1,1,YMMRM,YMMREG,,');
  209. FOpCodeList.Add('VMOVAPS,1,1,XMMREG,XMMRM,,');
  210. FOpCodeList.Add('VMOVAPS,1,1,XMMRM,XMMREG,,');
  211. FOpCodeList.Add('VMOVAPS,1,1,YMMREG,YMMRM,,');
  212. FOpCodeList.Add('VMOVAPS,1,1,YMMRM,YMMREG,,');
  213. FOpCodeList.Add('VMOVD,1,1,XMMREG,RM32,,');
  214. FOpCodeList.Add('VMOVD,1,1,RM32,XMMREG,,');
  215. FOpCodeList.Add('VMOVDDUP,1,1,YMMREG,YMMRM,,');
  216. FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,MEM64,,');
  217. FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,XMMREG,,');
  218. FOpCodeList.Add('VMOVDQA,1,1,YMMRM,YMMREG,,');
  219. FOpCodeList.Add('VMOVDQA,1,1,XMMREG,XMMRM,,');
  220. FOpCodeList.Add('VMOVDQA,1,1,XMMRM,XMMREG,,');
  221. FOpCodeList.Add('VMOVDQA,1,1,YMMREG,YMMRM,,');
  222. FOpCodeList.Add('VMOVDQU,1,1,YMMREG,YMMRM,,');
  223. FOpCodeList.Add('VMOVDQU,1,1,XMMREG,XMMRM,,');
  224. FOpCodeList.Add('VMOVDQU,1,1,XMMRM,XMMREG,,');
  225. FOpCodeList.Add('VMOVDQU,1,1,YMMRM,YMMREG,,');
  226. FOpCodeList.Add('VMOVHLPS,1,1,XMMREG,XMMREG,XMMREG,');
  227. FOpCodeList.Add('VMOVHPD,1,1,MEM64,XMMREG,,');
  228. FOpCodeList.Add('VMOVHPD,1,1,XMMREG,XMMREG,MEM64,');
  229. FOpCodeList.Add('VMOVHPS,1,1,XMMREG,XMMREG,MEM64,');
  230. FOpCodeList.Add('VMOVHPS,1,1,MEM64,XMMREG,,');
  231. FOpCodeList.Add('VMOVLHPS,1,1,XMMREG,XMMREG,XMMREG,');
  232. FOpCodeList.Add('VMOVLPD,1,1,MEM64,XMMREG,,');
  233. FOpCodeList.Add('VMOVLPD,1,1,XMMREG,XMMREG,MEM64,');
  234. FOpCodeList.Add('VMOVLPS,1,1,MEM64,XMMREG,,');
  235. FOpCodeList.Add('VMOVLPS,1,1,XMMREG,XMMREG,MEM64,');
  236. FOpCodeList.Add('VMOVMSKPD,1,1,REG32,YMMREG,,');
  237. FOpCodeList.Add('VMOVMSKPD,1,1,REG64,XMMREG,,');
  238. FOpCodeList.Add('VMOVMSKPD,1,1,REG32,XMMREG,,');
  239. FOpCodeList.Add('VMOVMSKPD,1,1,REG64,YMMREG,,');
  240. FOpCodeList.Add('VMOVMSKPS,1,1,REG32,YMMREG,,');
  241. FOpCodeList.Add('VMOVMSKPS,1,1,REG64,XMMREG,,');
  242. FOpCodeList.Add('VMOVMSKPS,1,1,REG32,XMMREG,,');
  243. FOpCodeList.Add('VMOVMSKPS,1,1,REG64,YMMREG,,');
  244. FOpCodeList.Add('VMOVNTDQ,1,1,MEM128,XMMREG,,');
  245. FOpCodeList.Add('VMOVNTDQ,1,1,MEM256,YMMREG,,');
  246. FOpCodeList.Add('VMOVNTDQA,1,1,XMMREG,MEM128,,');
  247. FOpCodeList.Add('VMOVNTPD,1,1,MEM256,YMMREG,,');
  248. FOpCodeList.Add('VMOVNTPD,1,1,MEM128,XMMREG,,');
  249. FOpCodeList.Add('VMOVNTPS,1,1,MEM128,YMMREG,,');
  250. FOpCodeList.Add('VMOVNTPS,1,1,MEM128,XMMREG,,');
  251. FOpCodeList.Add('VMOVQ,0,1,RM64,XMMREG,,');
  252. FOpCodeList.Add('VMOVQ,0,1,XMMREG,RM64,,');
  253. FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,');
  254. FOpCodeList.Add('VMOVSD,1,1,XMMREG,MEM64,,');
  255. FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,');
  256. FOpCodeList.Add('VMOVSD,1,1,MEM64,XMMREG,,');
  257. FOpCodeList.Add('VMOVSHDUP,1,1,XMMREG,XMMRM,,');
  258. FOpCodeList.Add('VMOVSHDUP,1,1,YMMREG,YMMRM,,');
  259. FOpCodeList.Add('VMOVSLDUP,1,1,XMMREG,XMMRM,,');
  260. FOpCodeList.Add('VMOVSLDUP,1,1,YMMREG,YMMRM,,');
  261. FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,');
  262. FOpCodeList.Add('VMOVSS,1,1,XMMREG,MEM64,,');
  263. FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,');
  264. FOpCodeList.Add('VMOVSS,1,1,MEM64,XMMREG,,');
  265. FOpCodeList.Add('VMOVUPD,1,1,XMMREG,XMMRM,,');
  266. FOpCodeList.Add('VMOVUPD,1,1,XMMRM,XMMREG,,');
  267. FOpCodeList.Add('VMOVUPD,1,1,YMMREG,YMMRM,,');
  268. FOpCodeList.Add('VMOVUPD,1,1,YMMRM,YMMREG,,');
  269. FOpCodeList.Add('VMOVUPS,1,1,XMMREG,XMMRM,,');
  270. FOpCodeList.Add('VMOVUPS,1,1,XMMRM,XMMREG,,');
  271. FOpCodeList.Add('VMOVUPS,1,1,YMMREG,YMMRM,,');
  272. FOpCodeList.Add('VMOVUPS,1,1,YMMRM,YMMREG,,');
  273. FOpCodeList.Add('VMPSADBW,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  274. FOpCodeList.Add('VMULPD,1,1,XMMREG,XMMREG,XMMRM,');
  275. FOpCodeList.Add('VMULPD,1,1,YMMREG,YMMREG,YMMRM,');
  276. FOpCodeList.Add('VMULPS,1,1,XMMREG,XMMREG,XMMRM,');
  277. FOpCodeList.Add('VMULPS,1,1,YMMREG,YMMREG,YMMRM,');
  278. FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,MEM64,');
  279. FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,XMMREG,');
  280. FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,MEM32,');
  281. FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,XMMREG,');
  282. FOpCodeList.Add('VORPD,1,1,XMMREG,XMMREG,XMMRM,');
  283. FOpCodeList.Add('VORPS,1,1,XMMREG,XMMREG,XMMRM,');
  284. FOpCodeList.Add('VORPS,1,1,YMMREG,YMMREG,YMMRM,');
  285. FOpCodeList.Add('VPABSB,1,1,XMMREG,XMMRM,,');
  286. FOpCodeList.Add('VPABSB,1,1,YMMREG,YMMRM,,');
  287. FOpCodeList.Add('VPABSD,1,1,XMMREG,XMMRM,,');
  288. FOpCodeList.Add('VPABSD,1,1,YMMREG,YMMRM,,');
  289. FOpCodeList.Add('VPABSW,1,1,XMMREG,XMMRM,,');
  290. FOpCodeList.Add('VPABSW,1,1,YMMREG,YMMRM,,');
  291. FOpCodeList.Add('VPACKSSDW,1,1,XMMREG,XMMREG,XMMRM,');
  292. FOpCodeList.Add('VPACKSSDW,1,1,YMMREG,YMMREG,YMMRM,');
  293. FOpCodeList.Add('VPACKSSWB,1,1,XMMREG,XMMREG,XMMRM,');
  294. FOpCodeList.Add('VPACKSSWB,1,1,YMMREG,YMMREG,YMMRM,');
  295. FOpCodeList.Add('VPACKUSDW,1,1,XMMREG,XMMREG,XMMRM,');
  296. FOpCodeList.Add('VPACKUSDW,1,1,YMMREG,YMMREG,YMMRM,');
  297. FOpCodeList.Add('VPACKUSWB,1,1,XMMREG,XMMREG,XMMRM,');
  298. FOpCodeList.Add('VPACKUSWB,1,1,YMMREG,YMMREG,YMMRM,');
  299. FOpCodeList.Add('VPADDB,1,1,XMMREG,XMMREG,XMMRM,');
  300. FOpCodeList.Add('VPADDB,1,1,YMMREG,YMMREG,YMMRM,');
  301. FOpCodeList.Add('VPADDD,1,1,XMMREG,XMMREG,XMMRM,');
  302. FOpCodeList.Add('VPADDD,1,1,YMMREG,YMMREG,YMMRM,');
  303. FOpCodeList.Add('VPADDQ,1,1,XMMREG,XMMREG,XMMRM,');
  304. FOpCodeList.Add('VPADDQ,1,1,YMMREG,YMMREG,YMMRM,');
  305. FOpCodeList.Add('VPADDSB,1,1,XMMREG,XMMREG,XMMRM,');
  306. FOpCodeList.Add('VPADDSB,1,1,YMMREG,YMMREG,YMMRM,');
  307. FOpCodeList.Add('VPADDSW,1,1,XMMREG,XMMREG,XMMRM,');
  308. FOpCodeList.Add('VPADDSW,1,1,YMMREG,YMMREG,YMMRM,');
  309. FOpCodeList.Add('VPADDUSB,1,1,XMMREG,XMMREG,XMMRM,');
  310. FOpCodeList.Add('VPADDUSB,1,1,YMMREG,YMMREG,YMMRM,');
  311. FOpCodeList.Add('VPADDUSW,1,1,XMMREG,XMMREG,XMMRM,');
  312. FOpCodeList.Add('VPADDUSW,1,1,YMMREG,YMMREG,YMMRM,');
  313. FOpCodeList.Add('VPADDW,1,1,XMMREG,XMMREG,XMMRM,');
  314. FOpCodeList.Add('VPADDW,1,1,YMMREG,YMMREG,YMMRM,');
  315. FOpCodeList.Add('VPALIGNR,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  316. FOpCodeList.Add('VPALIGNR,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  317. FOpCodeList.Add('VPAND,1,1,XMMREG,XMMREG,XMMRM,');
  318. FOpCodeList.Add('VPAND,1,1,YMMREG,YMMREG,YMMRM,');
  319. FOpCodeList.Add('VPANDN,1,1,XMMREG,XMMREG,XMMRM,');
  320. FOpCodeList.Add('VPANDN,1,1,YMMREG,YMMREG,YMMRM,');
  321. FOpCodeList.Add('VPAVGB,1,1,XMMREG,XMMREG,XMMRM,');
  322. FOpCodeList.Add('VPAVGB,1,1,YMMREG,YMMREG,YMMRM,');
  323. FOpCodeList.Add('VPAVGW,1,1,XMMREG,XMMREG,XMMRM,');
  324. FOpCodeList.Add('VPAVGW,1,1,YMMREG,YMMREG,YMMRM,');
  325. FOpCodeList.Add('VPBLENDVB,1,1,XMMREG,XMMREG,XMMRM,XMMREG');
  326. FOpCodeList.Add('VPBLENDVB,1,1,YMMREG,YMMREG,YMMRM,YMMREG');
  327. FOpCodeList.Add('VPBLENDW,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  328. FOpCodeList.Add('VPBLENDW,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  329. FOpCodeList.Add('VPCLMULQDQ,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  330. FOpCodeList.Add('VPCMPEQB,1,1,XMMREG,XMMREG,XMMRM,');
  331. FOpCodeList.Add('VPCMPEQB,1,1,YMMREG,YMMREG,YMMRM,');
  332. FOpCodeList.Add('VPCMPEQD,1,1,XMMREG,XMMREG,XMMRM,');
  333. FOpCodeList.Add('VPCMPEQD,1,1,YMMREG,YMMREG,YMMRM,');
  334. FOpCodeList.Add('VPCMPEQQ,1,1,XMMREG,XMMREG,XMMRM,');
  335. FOpCodeList.Add('VPCMPEQQ,1,1,YMMREG,YMMREG,YMMRM,');
  336. FOpCodeList.Add('VPCMPEQW,1,1,XMMREG,XMMREG,XMMRM,');
  337. FOpCodeList.Add('VPCMPEQW,1,1,YMMREG,YMMREG,YMMRM,');
  338. FOpCodeList.Add('VPCMPESTRI,1,1,XMMREG,XMMRM,IMM8,');
  339. FOpCodeList.Add('VPCMPESTRM,1,1,XMMREG,XMMRM,IMM8,');
  340. FOpCodeList.Add('VPCMPGTB,1,1,XMMREG,XMMREG,XMMRM,');
  341. FOpCodeList.Add('VPCMPGTB,1,1,YMMREG,YMMREG,YMMRM,');
  342. FOpCodeList.Add('VPCMPGTD,1,1,XMMREG,XMMREG,XMMRM,');
  343. FOpCodeList.Add('VPCMPGTD,1,1,YMMREG,YMMREG,YMMRM,');
  344. FOpCodeList.Add('VPCMPGTQ,1,1,XMMREG,XMMREG,XMMRM,');
  345. FOpCodeList.Add('VPCMPGTQ,1,1,YMMREG,YMMREG,YMMRM,');
  346. FOpCodeList.Add('VPCMPGTW,1,1,XMMREG,XMMREG,XMMRM,');
  347. FOpCodeList.Add('VPCMPGTW,1,1,YMMREG,YMMREG,YMMRM,');
  348. FOpCodeList.Add('VPCMPISTRI,1,1,XMMREG,XMMRM,IMM8,');
  349. FOpCodeList.Add('VPCMPISTRM,1,1,XMMREG,XMMRM,IMM8,');
  350. FOpCodeList.Add('VPERM2F128,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  351. FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMREG,YMMRM,');
  352. FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMRM,IMM8,');
  353. FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMRM,IMM8,');
  354. FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMREG,XMMRM,');
  355. FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMREG,YMMRM,');
  356. FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMRM,IMM8,');
  357. FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMRM,IMM8,');
  358. FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMREG,XMMRM,');
  359. FOpCodeList.Add('VPEXTRB,1,1,REG32,XMMREG,IMM8,');
  360. FOpCodeList.Add('VPEXTRB,1,1,REG64,XMMREG,IMM8,');
  361. FOpCodeList.Add('VPEXTRB,1,1,MEM8,XMMREG,IMM8,');
  362. FOpCodeList.Add('VPEXTRD,1,1,RM32,XMMREG,IMM8,');
  363. FOpCodeList.Add('VPEXTRQ,0,1,RM64,XMMREG,IMM8,');
  364. FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,');
  365. FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,');
  366. FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,');
  367. FOpCodeList.Add('VPEXTRW,1,1,MEM16,XMMREG,IMM8,');
  368. FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,');
  369. FOpCodeList.Add('VPHADDD,1,1,XMMREG,XMMREG,XMMRM,');
  370. FOpCodeList.Add('VPHADDD,1,1,YMMREG,YMMREG,YMMRM,');
  371. FOpCodeList.Add('VPHADDSW,1,1,XMMREG,XMMREG,XMMRM,');
  372. FOpCodeList.Add('VPHADDSW,1,1,YMMREG,YMMREG,YMMRM,');
  373. FOpCodeList.Add('VPHADDW,1,1,XMMREG,XMMREG,XMMRM,');
  374. FOpCodeList.Add('VPHADDW,1,1,YMMREG,YMMREG,YMMRM,');
  375. FOpCodeList.Add('VPHMINPOSUW,1,1,XMMREG,XMMRM,,');
  376. FOpCodeList.Add('VPHSUBD,1,1,XMMREG,XMMREG,XMMRM,');
  377. FOpCodeList.Add('VPHSUBD,1,1,YMMREG,YMMREG,YMMRM,');
  378. FOpCodeList.Add('VPHSUBSW,1,1,XMMREG,XMMREG,XMMRM,');
  379. FOpCodeList.Add('VPHSUBSW,1,1,YMMREG,YMMREG,YMMRM,');
  380. FOpCodeList.Add('VPHSUBW,1,1,XMMREG,XMMREG,XMMRM,');
  381. FOpCodeList.Add('VPHSUBW,1,1,YMMREG,YMMREG,YMMRM,');
  382. FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,REG32,IMM8');
  383. FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,MEM8,IMM8');
  384. FOpCodeList.Add('VPINSRD,1,1,XMMREG,XMMREG,RM32,IMM8');
  385. FOpCodeList.Add('VPINSRQ,0,1,XMMREG,XMMREG,RM64,IMM8');
  386. FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,REG32,IMM8');
  387. FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,MEM16,IMM8');
  388. FOpCodeList.Add('VPMADDUBSW,1,1,XMMREG,XMMREG,XMMRM,');
  389. FOpCodeList.Add('VPMADDUBSW,1,1,YMMREG,YMMREG,YMMRM,');
  390. FOpCodeList.Add('VPMADDWD,1,1,XMMREG,XMMREG,XMMRM,');
  391. FOpCodeList.Add('VPMADDWD,1,1,YMMREG,YMMREG,YMMRM,');
  392. FOpCodeList.Add('VPMAXSB,1,1,XMMREG,XMMREG,XMMRM,');
  393. FOpCodeList.Add('VPMAXSB,1,1,YMMREG,YMMREG,YMMRM,');
  394. FOpCodeList.Add('VPMAXSD,1,1,XMMREG,XMMREG,XMMRM,');
  395. FOpCodeList.Add('VPMAXSD,1,1,YMMREG,YMMREG,YMMRM,');
  396. FOpCodeList.Add('VPMAXSW,1,1,XMMREG,XMMREG,XMMRM,');
  397. FOpCodeList.Add('VPMAXSW,1,1,YMMREG,YMMREG,YMMRM,');
  398. FOpCodeList.Add('VPMAXUB,1,1,XMMREG,XMMREG,XMMRM,');
  399. FOpCodeList.Add('VPMAXUB,1,1,YMMREG,YMMREG,YMMRM,');
  400. FOpCodeList.Add('VPMAXUD,1,1,XMMREG,XMMREG,XMMRM,');
  401. FOpCodeList.Add('VPMAXUD,1,1,YMMREG,YMMREG,YMMRM,');
  402. FOpCodeList.Add('VPMAXUW,1,1,XMMREG,XMMREG,XMMRM,');
  403. FOpCodeList.Add('VPMAXUW,1,1,YMMREG,YMMREG,YMMRM,');
  404. FOpCodeList.Add('VPMINSB,1,1,XMMREG,XMMREG,XMMRM,');
  405. FOpCodeList.Add('VPMINSB,1,1,YMMREG,YMMREG,YMMRM,');
  406. FOpCodeList.Add('VPMINSD,1,1,XMMREG,XMMREG,XMMRM,');
  407. FOpCodeList.Add('VPMINSD,1,1,YMMREG,YMMREG,YMMRM,');
  408. FOpCodeList.Add('VPMINSW,1,1,XMMREG,XMMREG,XMMRM,');
  409. FOpCodeList.Add('VPMINSW,1,1,YMMREG,YMMREG,YMMRM,');
  410. FOpCodeList.Add('VPMINUB,1,1,XMMREG,XMMREG,XMMRM,');
  411. FOpCodeList.Add('VPMINUB,1,1,YMMREG,YMMREG,YMMRM,');
  412. FOpCodeList.Add('VPMINUD,1,1,XMMREG,XMMREG,XMMRM,');
  413. FOpCodeList.Add('VPMINUD,1,1,YMMREG,YMMREG,YMMRM,');
  414. FOpCodeList.Add('VPMINUW,1,1,XMMREG,XMMREG,XMMRM,');
  415. FOpCodeList.Add('VPMINUW,1,1,YMMREG,YMMREG,YMMRM,');
  416. FOpCodeList.Add('VPMOVMSKB,1,1,REG64,XMMREG,,');
  417. FOpCodeList.Add('VPMOVMSKB,1,1,REG64,YMMREG,,');
  418. FOpCodeList.Add('VPMOVMSKB,1,1,REG32,XMMREG,,');
  419. FOpCodeList.Add('VPMOVMSKB,1,1,REG32,YMMREG,,');
  420. FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,MEM32,,');
  421. FOpCodeList.Add('VPMOVSXBD,1,1,YMMREG,MEM64,,');
  422. FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,XMMREG,,');
  423. FOpCodeList.Add('VPMOVSXBD,1,1,YMMREG,XMMREG,,');
  424. FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,MEM16,,');
  425. FOpCodeList.Add('VPMOVSXBQ,1,1,YMMREG,MEM32,,');
  426. FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,XMMREG,,');
  427. FOpCodeList.Add('VPMOVSXBQ,1,1,YMMREG,XMMREG,,');
  428. FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,MEM64,,');
  429. FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,XMMREG,,');
  430. FOpCodeList.Add('VPMOVSXBW,1,1,YMMREG,XMMRM,,');
  431. FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,MEM64,,');
  432. FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,XMMREG,,');
  433. FOpCodeList.Add('VPMOVSXDQ,1,1,YMMREG,XMMRM,,');
  434. FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,MEM64,,');
  435. FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMREG,,');
  436. FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMRM,,');
  437. FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,MEM32,,');
  438. FOpCodeList.Add('VPMOVSXWQ,1,1,YMMREG,MEM64,,');
  439. FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,XMMREG,,');
  440. FOpCodeList.Add('VPMOVSXWQ,1,1,YMMREG,XMMREG,,');
  441. FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,MEM32,,');
  442. FOpCodeList.Add('VPMOVZXBD,1,1,YMMREG,MEM64,,');
  443. FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,XMMREG,,');
  444. FOpCodeList.Add('VPMOVZXBD,1,1,YMMREG,XMMREG,,');
  445. FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,MEM16,,');
  446. FOpCodeList.Add('VPMOVZXBQ,1,1,YMMREG,MEM32,,');
  447. FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,XMMREG,,');
  448. FOpCodeList.Add('VPMOVZXBQ,1,1,YMMREG,XMMREG,,');
  449. FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,MEM64,,');
  450. FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,XMMREG,,');
  451. FOpCodeList.Add('VPMOVZXBW,1,1,YMMREG,XMMRM,,');
  452. FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,MEM64,,');
  453. FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,XMMREG,,');
  454. FOpCodeList.Add('VPMOVZXDQ,1,1,YMMREG,XMMRM,,');
  455. FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,MEM64,,');
  456. FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,XMMREG,,');
  457. FOpCodeList.Add('VPMOVZXWD,1,1,YMMREG,XMMRM,,');
  458. FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,MEM32,,');
  459. FOpCodeList.Add('VPMOVZXWQ,1,1,YMMREG,MEM64,,');
  460. FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,XMMREG,,');
  461. FOpCodeList.Add('VPMOVZXWQ,1,1,YMMREG,XMMREG,,');
  462. FOpCodeList.Add('VPMULDQ,1,1,XMMREG,XMMREG,XMMRM,');
  463. FOpCodeList.Add('VPMULDQ,1,1,YMMREG,YMMREG,YMMRM,');
  464. FOpCodeList.Add('VPMULHRSW,1,1,XMMREG,XMMREG,XMMRM,');
  465. FOpCodeList.Add('VPMULHRSW,1,1,YMMREG,YMMREG,YMMRM,');
  466. FOpCodeList.Add('VPMULHUW,1,1,XMMREG,XMMREG,XMMRM,');
  467. FOpCodeList.Add('VPMULHUW,1,1,YMMREG,YMMREG,YMMRM,');
  468. FOpCodeList.Add('VPMULHW,1,1,XMMREG,XMMREG,XMMRM,');
  469. FOpCodeList.Add('VPMULHW,1,1,YMMREG,YMMREG,YMMRM,');
  470. FOpCodeList.Add('VPMULLD,1,1,XMMREG,XMMREG,XMMRM,');
  471. FOpCodeList.Add('VPMULLD,1,1,YMMREG,YMMREG,YMMRM,');
  472. FOpCodeList.Add('VPMULLW,1,1,XMMREG,XMMREG,XMMRM,');
  473. FOpCodeList.Add('VPMULLW,1,1,YMMREG,YMMREG,YMMRM,');
  474. FOpCodeList.Add('VPMULUDQ,1,1,XMMREG,XMMREG,XMMRM,');
  475. FOpCodeList.Add('VPMULUDQ,1,1,YMMREG,YMMREG,YMMRM,');
  476. FOpCodeList.Add('VPOR,1,1,XMMREG,XMMREG,XMMRM,');
  477. FOpCodeList.Add('VPOR,1,1,YMMREG,YMMREG,YMMRM,');
  478. FOpCodeList.Add('VPSADBW,1,1,XMMREG,XMMREG,XMMRM,');
  479. FOpCodeList.Add('VPSADBW,1,1,YMMREG,YMMREG,YMMRM,');
  480. FOpCodeList.Add('VPSHUFB,1,1,XMMREG,XMMREG,XMMRM,');
  481. FOpCodeList.Add('VPSHUFB,1,1,YMMREG,YMMREG,YMMRM,');
  482. FOpCodeList.Add('VPSHUFD,1,1,XMMREG,XMMRM,IMM8,');
  483. FOpCodeList.Add('VPSHUFD,1,1,YMMREG,YMMRM,IMM8,');
  484. FOpCodeList.Add('VPSHUFHW,1,1,XMMREG,XMMRM,IMM8,');
  485. FOpCodeList.Add('VPSHUFHW,1,1,YMMREG,YMMRM,IMM8,');
  486. FOpCodeList.Add('VPSHUFLW,1,1,XMMREG,XMMRM,IMM8,');
  487. FOpCodeList.Add('VPSHUFLW,1,1,YMMREG,YMMRM,IMM8,');
  488. FOpCodeList.Add('VPSIGNB,1,1,XMMREG,XMMREG,XMMRM,');
  489. FOpCodeList.Add('VPSIGNB,1,1,YMMREG,YMMREG,YMMRM,');
  490. FOpCodeList.Add('VPSIGND,1,1,XMMREG,XMMREG,XMMRM,');
  491. FOpCodeList.Add('VPSIGND,1,1,YMMREG,YMMREG,YMMRM,');
  492. FOpCodeList.Add('VPSIGNW,1,1,XMMREG,XMMREG,XMMRM,');
  493. FOpCodeList.Add('VPSIGNW,1,1,YMMREG,YMMREG,YMMRM,');
  494. FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,IMM8,');
  495. FOpCodeList.Add('VPSLLD,1,1,YMMREG,YMMREG,IMM8,');
  496. FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,XMMRM,');
  497. FOpCodeList.Add('VPSLLD,1,1,YMMREG,YMMREG,XMMRM,');
  498. FOpCodeList.Add('VPSLLDQ,1,1,XMMREG,XMMREG,IMM8,');
  499. FOpCodeList.Add('VPSLLDQ,1,1,YMMREG,YMMREG,IMM8,');
  500. FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,XMMRM,');
  501. FOpCodeList.Add('VPSLLQ,1,1,YMMREG,YMMREG,XMMRM,');
  502. FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,IMM8,');
  503. FOpCodeList.Add('VPSLLQ,1,1,YMMREG,YMMREG,IMM8,');
  504. FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,IMM8,');
  505. FOpCodeList.Add('VPSLLW,1,1,YMMREG,YMMREG,IMM8,');
  506. FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,XMMRM,');
  507. FOpCodeList.Add('VPSLLW,1,1,YMMREG,YMMREG,XMMRM,');
  508. FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,IMM8,');
  509. FOpCodeList.Add('VPSRAD,1,1,YMMREG,YMMREG,IMM8,');
  510. FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,XMMRM,');
  511. FOpCodeList.Add('VPSRAD,1,1,YMMREG,YMMREG,XMMRM,');
  512. FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,IMM8,');
  513. FOpCodeList.Add('VPSRAW,1,1,YMMREG,YMMREG,IMM8,');
  514. FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,XMMRM,');
  515. FOpCodeList.Add('VPSRAW,1,1,YMMREG,YMMREG,XMMRM,');
  516. FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,IMM8,');
  517. FOpCodeList.Add('VPSRLD,1,1,YMMREG,YMMREG,IMM8,');
  518. FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,XMMRM,');
  519. FOpCodeList.Add('VPSRLD,1,1,YMMREG,YMMREG,XMMRM,');
  520. FOpCodeList.Add('VPSRLDQ,1,1,XMMREG,XMMREG,IMM8,');
  521. FOpCodeList.Add('VPSRLDQ,1,1,YMMREG,YMMREG,IMM8,');
  522. FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,IMM8,');
  523. FOpCodeList.Add('VPSRLQ,1,1,YMMREG,YMMREG,IMM8,');
  524. FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,XMMRM,');
  525. FOpCodeList.Add('VPSRLQ,1,1,YMMREG,YMMREG,XMMRM,');
  526. FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,IMM8,');
  527. FOpCodeList.Add('VPSRLW,1,1,YMMREG,YMMREG,IMM8,');
  528. FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,XMMRM,');
  529. FOpCodeList.Add('VPSRLW,1,1,YMMREG,YMMREG,XMMRM,');
  530. FOpCodeList.Add('VPSUBB,1,1,XMMREG,XMMREG,XMMRM,');
  531. FOpCodeList.Add('VPSUBB,1,1,YMMREG,YMMREG,YMMRM,');
  532. FOpCodeList.Add('VPSUBD,1,1,XMMREG,XMMREG,XMMRM,');
  533. FOpCodeList.Add('VPSUBD,1,1,YMMREG,YMMREG,YMMRM,');
  534. FOpCodeList.Add('VPSUBQ,1,1,XMMREG,XMMREG,XMMRM,');
  535. FOpCodeList.Add('VPSUBQ,1,1,YMMREG,YMMREG,YMMRM,');
  536. FOpCodeList.Add('VPSUBSB,1,1,XMMREG,XMMREG,XMMRM,');
  537. FOpCodeList.Add('VPSUBSB,1,1,YMMREG,YMMREG,YMMRM,');
  538. FOpCodeList.Add('VPSUBSW,1,1,XMMREG,XMMREG,XMMRM,');
  539. FOpCodeList.Add('VPSUBSW,1,1,YMMREG,YMMREG,YMMRM,');
  540. FOpCodeList.Add('VPSUBUSB,1,1,XMMREG,XMMREG,XMMRM,');
  541. FOpCodeList.Add('VPSUBUSB,1,1,YMMREG,YMMREG,YMMRM,');
  542. FOpCodeList.Add('VPSUBUSW,1,1,XMMREG,XMMREG,XMMRM,');
  543. FOpCodeList.Add('VPSUBUSW,1,1,YMMREG,YMMREG,YMMRM,');
  544. FOpCodeList.Add('VPSUBW,1,1,XMMREG,XMMREG,XMMRM,');
  545. FOpCodeList.Add('VPSUBW,1,1,YMMREG,YMMREG,YMMRM,');
  546. FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,');
  547. FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,');
  548. FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,');
  549. FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,');
  550. FOpCodeList.Add('VPUNPCKHBW,1,1,XMMREG,XMMREG,XMMRM,');
  551. FOpCodeList.Add('VPUNPCKHBW,1,1,YMMREG,YMMREG,YMMRM,');
  552. FOpCodeList.Add('VPUNPCKHDQ,1,1,XMMREG,XMMREG,XMMRM,');
  553. FOpCodeList.Add('VPUNPCKHDQ,1,1,YMMREG,YMMREG,YMMRM,');
  554. FOpCodeList.Add('VPUNPCKHQDQ,1,1,XMMREG,XMMREG,XMMRM,');
  555. FOpCodeList.Add('VPUNPCKHQDQ,1,1,YMMREG,YMMREG,YMMRM,');
  556. FOpCodeList.Add('VPUNPCKHWD,1,1,XMMREG,XMMREG,XMMRM,');
  557. FOpCodeList.Add('VPUNPCKHWD,1,1,YMMREG,YMMREG,YMMRM,');
  558. FOpCodeList.Add('VPUNPCKLBW,1,1,XMMREG,XMMREG,XMMRM,');
  559. FOpCodeList.Add('VPUNPCKLBW,1,1,YMMREG,YMMREG,YMMRM,');
  560. FOpCodeList.Add('VPUNPCKLDQ,1,1,XMMREG,XMMREG,XMMRM,');
  561. FOpCodeList.Add('VPUNPCKLDQ,1,1,YMMREG,YMMREG,YMMRM,');
  562. FOpCodeList.Add('VPUNPCKLQDQ,1,1,XMMREG,XMMREG,XMMRM,');
  563. FOpCodeList.Add('VPUNPCKLQDQ,1,1,YMMREG,YMMREG,YMMRM,');
  564. FOpCodeList.Add('VPUNPCKLWD,1,1,XMMREG,XMMREG,XMMRM,');
  565. FOpCodeList.Add('VPUNPCKLWD,1,1,YMMREG,YMMREG,YMMRM,');
  566. FOpCodeList.Add('VPXOR,1,1,XMMREG,XMMREG,XMMRM,');
  567. FOpCodeList.Add('VPXOR,1,1,YMMREG,YMMREG,YMMRM,');
  568. FOpCodeList.Add('VRCPPS,1,1,XMMREG,XMMRM,,');
  569. FOpCodeList.Add('VRCPPS,1,1,YMMREG,YMMRM,,');
  570. FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,MEM32,');
  571. FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,XMMREG,');
  572. FOpCodeList.Add('VROUNDPD,1,1,YMMREG,YMMRM,IMM8,');
  573. FOpCodeList.Add('VROUNDPD,1,1,XMMREG,XMMRM,IMM8,');
  574. FOpCodeList.Add('VROUNDPS,1,1,YMMREG,YMMRM,IMM8,');
  575. FOpCodeList.Add('VROUNDPS,1,1,XMMREG,XMMRM,IMM8,');
  576. FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,MEM64,IMM8');
  577. FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  578. FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,MEM32,IMM8');
  579. FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,XMMREG,IMM8');
  580. FOpCodeList.Add('VRSQRTPS,1,1,YMMREG,YMMRM,,');
  581. FOpCodeList.Add('VRSQRTPS,1,1,XMMREG,XMMRM,,');
  582. FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,MEM32,');
  583. FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,XMMREG,');
  584. FOpCodeList.Add('VSHUFPD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  585. FOpCodeList.Add('VSHUFPD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  586. FOpCodeList.Add('VSHUFPS,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  587. FOpCodeList.Add('VSHUFPS,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  588. FOpCodeList.Add('VSQRTPD,1,1,XMMREG,XMMRM,,');
  589. FOpCodeList.Add('VSQRTPD,1,1,YMMREG,YMMRM,,');
  590. FOpCodeList.Add('VSQRTPS,1,1,XMMREG,XMMRM,,');
  591. FOpCodeList.Add('VSQRTPS,1,1,YMMREG,YMMRM,,');
  592. FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,MEM64,');
  593. FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,XMMREG,');
  594. FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,MEM32,');
  595. FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,XMMREG,');
  596. FOpCodeList.Add('VSTMXCSR,1,1,MEM32,,,');
  597. FOpCodeList.Add('VSUBPD,1,1,XMMREG,XMMREG,XMMRM,');
  598. FOpCodeList.Add('VSUBPD,1,1,YMMREG,YMMREG,YMMRM,');
  599. FOpCodeList.Add('VSUBPS,1,1,XMMREG,XMMREG,XMMRM,');
  600. FOpCodeList.Add('VSUBPS,1,1,YMMREG,YMMREG,YMMRM,');
  601. FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,MEM64,');
  602. FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,XMMREG,');
  603. FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,MEM32,');
  604. FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,XMMREG,');
  605. FOpCodeList.Add('VTESTPD,1,1,XMMREG,XMMRM,,');
  606. FOpCodeList.Add('VTESTPD,1,1,YMMREG,YMMRM,,');
  607. FOpCodeList.Add('VTESTPS,1,1,YMMREG,YMMRM,,');
  608. FOpCodeList.Add('VTESTPS,1,1,XMMREG,XMMRM,,');
  609. FOpCodeList.Add('VUCOMISD,1,1,XMMREG,MEM64,,');
  610. FOpCodeList.Add('VUCOMISD,1,1,XMMREG,XMMREG,,');
  611. FOpCodeList.Add('VUCOMISS,1,1,XMMREG,MEM32,,');
  612. FOpCodeList.Add('VUCOMISS,1,1,XMMREG,XMMREG,,');
  613. FOpCodeList.Add('VUNPCKHPD,1,1,XMMREG,XMMREG,XMMRM,');
  614. FOpCodeList.Add('VUNPCKHPD,1,1,YMMREG,YMMREG,YMMRM,');
  615. FOpCodeList.Add('VUNPCKHPS,1,1,XMMREG,XMMREG,XMMRM,');
  616. FOpCodeList.Add('VUNPCKHPS,1,1,YMMREG,YMMREG,YMMRM,');
  617. FOpCodeList.Add('VUNPCKLPD,1,1,XMMREG,XMMREG,XMMRM,');
  618. FOpCodeList.Add('VUNPCKLPD,1,1,YMMREG,YMMREG,YMMRM,');
  619. FOpCodeList.Add('VUNPCKLPS,1,1,XMMREG,XMMREG,XMMRM,');
  620. FOpCodeList.Add('VUNPCKLPS,1,1,YMMREG,YMMREG,YMMRM,');
  621. FOpCodeList.Add('VXORPD,1,1,XMMREG,XMMREG,XMMRM,');
  622. FOpCodeList.Add('VXORPD,1,1,YMMREG,YMMREG,YMMRM,');
  623. FOpCodeList.Add('VXORPS,1,1,XMMREG,XMMREG,XMMRM,');
  624. FOpCodeList.Add('VXORPS,1,1,YMMREG,YMMREG,YMMRM,');
  625. FOpCodeList.Add('VZEROALL,1,1,,,,');
  626. FOpCodeList.Add('VZEROUPPER,1,1,,,,');
  627. FOpCodeList.Add('VBROADCASTI128,1,1,YMMREG,MEM128,,');
  628. FOpCodeList.Add('VEXTRACTI128,1,1,XMMRM,YMMREG,IMM8,');
  629. FOpCodeList.Add('VINSERTI128,1,1,YMMREG,YMMREG,XMMRM,IMM8');
  630. FOpCodeList.Add('VPBLENDD,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  631. FOpCodeList.Add('VPBLENDD,1,1,XMMREG,XMMREG,XMMRM,IMM8');
  632. FOpCodeList.Add('VPBROADCASTB,1,1,XMMREG,XMMREG,,');
  633. FOpCodeList.Add('VPBROADCASTB,1,1,YMMREG,XMMREG,,');
  634. FOpCodeList.Add('VPBROADCASTB,1,1,XMMREG,MEM8,,');
  635. FOpCodeList.Add('VPBROADCASTB,1,1,YMMREG,MEM8,,');
  636. FOpCodeList.Add('VPBROADCASTD,1,1,YMMREG,XMMREG,,');
  637. FOpCodeList.Add('VPBROADCASTD,1,1,XMMREG,MEM32,,');
  638. FOpCodeList.Add('VPBROADCASTD,1,1,XMMREG,XMMREG,,');
  639. FOpCodeList.Add('VPBROADCASTD,1,1,YMMREG,MEM32,,');
  640. FOpCodeList.Add('VPBROADCASTQ,1,1,YMMREG,MEM64,,');
  641. FOpCodeList.Add('VPBROADCASTQ,1,1,XMMREG,MEM64,,');
  642. FOpCodeList.Add('VPBROADCASTQ,1,1,XMMREG,XMMREG,,');
  643. FOpCodeList.Add('VPBROADCASTQ,1,1,YMMREG,XMMREG,,');
  644. FOpCodeList.Add('VPBROADCASTW,1,1,XMMREG,MEM16,,');
  645. FOpCodeList.Add('VPBROADCASTW,1,1,XMMREG,XMMREG,,');
  646. FOpCodeList.Add('VPBROADCASTW,1,1,YMMREG,MEM16,,');
  647. FOpCodeList.Add('VPBROADCASTW,1,1,YMMREG,XMMREG,,');
  648. FOpCodeList.Add('VPERM2I128,1,1,YMMREG,YMMREG,YMMRM,IMM8');
  649. FOpCodeList.Add('VPERMD,1,1,YMMREG,YMMREG,YMMRM,');
  650. FOpCodeList.Add('VPERMPD,1,1,YMMREG,YMMRM,IMM8,');
  651. FOpCodeList.Add('VPERMPS,1,1,YMMREG,YMMREG,YMMRM,');
  652. FOpCodeList.Add('VPERMQ,1,1,YMMREG,YMMRM,IMM8,');
  653. FOpCodeList.Add('VPMASKMOVD,1,1,XMMREG,XMMREG,MEM128,');
  654. FOpCodeList.Add('VPMASKMOVD,1,1,MEM128,XMMREG,XMMREG,');
  655. FOpCodeList.Add('VPMASKMOVD,1,1,YMMREG,YMMREG,MEM256,');
  656. FOpCodeList.Add('VPMASKMOVD,1,1,MEM256,YMMREG,YMMREG,');
  657. FOpCodeList.Add('VPMASKMOVQ,1,1,XMMREG,XMMREG,MEM128,');
  658. FOpCodeList.Add('VPMASKMOVQ,1,1,MEM128,XMMREG,XMMREG,');
  659. FOpCodeList.Add('VPMASKMOVQ,1,1,YMMREG,YMMREG,MEM256,');
  660. FOpCodeList.Add('VPMASKMOVQ,1,1,MEM256,YMMREG,YMMREG,');
  661. FOpCodeList.Add('VPSLLVD,1,1,YMMREG,YMMREG,YMMRM,');
  662. FOpCodeList.Add('VPSLLVD,1,1,XMMREG,XMMREG,XMMRM,');
  663. FOpCodeList.Add('VPSLLVQ,1,1,YMMREG,YMMREG,YMMRM,');
  664. FOpCodeList.Add('VPSLLVQ,1,1,XMMREG,XMMREG,XMMRM,');
  665. FOpCodeList.Add('VPSRAVD,1,1,YMMREG,YMMREG,YMMRM,');
  666. FOpCodeList.Add('VPSRAVD,1,1,XMMREG,XMMREG,XMMRM,');
  667. FOpCodeList.Add('VPSRLVD,1,1,YMMREG,YMMREG,YMMRM,');
  668. FOpCodeList.Add('VPSRLVD,1,1,XMMREG,XMMREG,XMMRM,');
  669. FOpCodeList.Add('VPSRLVQ,1,1,YMMREG,YMMREG,YMMRM,');
  670. FOpCodeList.Add('VPSRLVQ,1,1,XMMREG,XMMREG,XMMRM,');
  671. FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,');
  672. FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,');
  673. FOpCodeList.Add('VFMADD213PD,1,1,YMMREG,YMMREG,YMMRM,');
  674. FOpCodeList.Add('VFMADD213PD,1,1,XMMREG,XMMREG,XMMRM,');
  675. FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,');
  676. FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,');
  677. FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,');
  678. FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,');
  679. FOpCodeList.Add('VFMADD213PS,1,1,YMMREG,YMMREG,YMMRM,');
  680. FOpCodeList.Add('VFMADD213PS,1,1,XMMREG,XMMREG,XMMRM,');
  681. FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,');
  682. FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,');
  683. FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,');
  684. FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,');
  685. FOpCodeList.Add('VFMADD213PD,1,1,YMMREG,YMMREG,YMMRM,');
  686. FOpCodeList.Add('VFMADD213PD,1,1,XMMREG,XMMREG,XMMRM,');
  687. FOpCodeList.Add('VFMADD231PD,1,1,YMMREG,YMMREG,YMMRM,');
  688. FOpCodeList.Add('VFMADD231PD,1,1,XMMREG,XMMREG,XMMRM,');
  689. FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,');
  690. FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,');
  691. FOpCodeList.Add('VFMADD213PS,1,1,YMMREG,YMMREG,YMMRM,');
  692. FOpCodeList.Add('VFMADD213PS,1,1,XMMREG,XMMREG,XMMRM,');
  693. FOpCodeList.Add('VFMADD231PS,1,1,YMMREG,YMMREG,YMMRM,');
  694. FOpCodeList.Add('VFMADD231PS,1,1,XMMREG,XMMREG,XMMRM,');
  695. FOpCodeList.Add('VFMADD132SD,1,1,XMMREG,XMMREG,XMMRM,');
  696. FOpCodeList.Add('VFMADD213SD,1,1,XMMREG,XMMREG,XMMRM,');
  697. FOpCodeList.Add('VFMADD231SD,1,1,XMMREG,XMMREG,XMMRM,');
  698. FOpCodeList.Add('VFMADD132SS,1,1,XMMREG,XMMREG,XMMRM,');
  699. FOpCodeList.Add('VFMADD213SS,1,1,XMMREG,XMMREG,XMMRM,');
  700. FOpCodeList.Add('VFMADD231SS,1,1,XMMREG,XMMREG,XMMRM,');
  701. FOpCodeList.Add('VFMADDSUB132PD,1,1,YMMREG,YMMREG,YMMRM,');
  702. FOpCodeList.Add('VFMADDSUB132PD,1,1,XMMREG,XMMREG,XMMRM,');
  703. FOpCodeList.Add('VFMADDSUB213PD,1,1,YMMREG,YMMREG,YMMRM,');
  704. FOpCodeList.Add('VFMADDSUB213PD,1,1,XMMREG,XMMREG,XMMRM,');
  705. FOpCodeList.Add('VFMADDSUB231PD,1,1,YMMREG,YMMREG,YMMRM,');
  706. FOpCodeList.Add('VFMADDSUB231PD,1,1,XMMREG,XMMREG,XMMRM,');
  707. FOpCodeList.Add('VFMADDSUB132PS,1,1,YMMREG,YMMREG,YMMRM,');
  708. FOpCodeList.Add('VFMADDSUB132PS,1,1,XMMREG,XMMREG,XMMRM,');
  709. FOpCodeList.Add('VFMADDSUB213PS,1,1,YMMREG,YMMREG,YMMRM,');
  710. FOpCodeList.Add('VFMADDSUB213PS,1,1,XMMREG,XMMREG,XMMRM,');
  711. FOpCodeList.Add('VFMADDSUB231PS,1,1,YMMREG,YMMREG,YMMRM,');
  712. FOpCodeList.Add('VFMADDSUB231PS,1,1,XMMREG,XMMREG,XMMRM,');
  713. FOpCodeList.Add('VFMSUBADD132PD,1,1,YMMREG,YMMREG,YMMRM,');
  714. FOpCodeList.Add('VFMSUBADD132PD,1,1,XMMREG,XMMREG,XMMRM,');
  715. FOpCodeList.Add('VFMSUBADD213PD,1,1,YMMREG,YMMREG,YMMRM,');
  716. FOpCodeList.Add('VFMSUBADD213PD,1,1,XMMREG,XMMREG,XMMRM,');
  717. FOpCodeList.Add('VFMSUBADD231PD,1,1,YMMREG,YMMREG,YMMRM,');
  718. FOpCodeList.Add('VFMSUBADD231PD,1,1,XMMREG,XMMREG,XMMRM,');
  719. FOpCodeList.Add('VFMSUBADD132PS,1,1,YMMREG,YMMREG,YMMRM,');
  720. FOpCodeList.Add('VFMSUBADD132PS,1,1,XMMREG,XMMREG,XMMRM,');
  721. FOpCodeList.Add('VFMSUBADD213PS,1,1,YMMREG,YMMREG,YMMRM,');
  722. FOpCodeList.Add('VFMSUBADD213PS,1,1,XMMREG,XMMREG,XMMRM,');
  723. FOpCodeList.Add('VFMSUBADD231PS,1,1,YMMREG,YMMREG,YMMRM,');
  724. FOpCodeList.Add('VFMSUBADD231PS,1,1,XMMREG,XMMREG,XMMRM,');
  725. FOpCodeList.Add('VFMSUB132PD,1,1,YMMREG,YMMREG,YMMRM,');
  726. FOpCodeList.Add('VFMSUB132PD,1,1,XMMREG,XMMREG,XMMRM,');
  727. FOpCodeList.Add('VFMSUB213PD,1,1,YMMREG,YMMREG,YMMRM,');
  728. FOpCodeList.Add('VFMSUB213PD,1,1,XMMREG,XMMREG,XMMRM,');
  729. FOpCodeList.Add('VFMSUB231PD,1,1,YMMREG,YMMREG,YMMRM,');
  730. FOpCodeList.Add('VFMSUB231PD,1,1,XMMREG,XMMREG,XMMRM,');
  731. FOpCodeList.Add('VFMSUB132PS,1,1,YMMREG,YMMREG,YMMRM,');
  732. FOpCodeList.Add('VFMSUB132PS,1,1,XMMREG,XMMREG,XMMRM,');
  733. FOpCodeList.Add('VFMSUB213PS,1,1,YMMREG,YMMREG,YMMRM,');
  734. FOpCodeList.Add('VFMSUB213PS,1,1,XMMREG,XMMREG,XMMRM,');
  735. FOpCodeList.Add('VFMSUB231PS,1,1,YMMREG,YMMREG,YMMRM,');
  736. FOpCodeList.Add('VFMSUB231PS,1,1,XMMREG,XMMREG,XMMRM,');
  737. FOpCodeList.Add('VFMSUB132SD,1,1,XMMREG,XMMREG,XMMRM,');
  738. FOpCodeList.Add('VFMSUB213SD,1,1,XMMREG,XMMREG,XMMRM,');
  739. FOpCodeList.Add('VFMSUB231SD,1,1,XMMREG,XMMREG,XMMRM,');
  740. FOpCodeList.Add('VFMSUB132SS,1,1,XMMREG,XMMREG,XMMRM,');
  741. FOpCodeList.Add('VFMSUB213SS,1,1,XMMREG,XMMREG,XMMRM,');
  742. FOpCodeList.Add('VFMSUB231SS,1,1,XMMREG,XMMREG,XMMRM,');
  743. FOpCodeList.Add('VFNMADD132PD,1,1,YMMREG,YMMREG,YMMRM,');
  744. FOpCodeList.Add('VFNMADD132PD,1,1,XMMREG,XMMREG,XMMRM,');
  745. FOpCodeList.Add('VFNMADD213PD,1,1,YMMREG,YMMREG,YMMRM,');
  746. FOpCodeList.Add('VFNMADD213PD,1,1,XMMREG,XMMREG,XMMRM,');
  747. FOpCodeList.Add('VFNMADD231PD,1,1,YMMREG,YMMREG,YMMRM,');
  748. FOpCodeList.Add('VFNMADD231PD,1,1,XMMREG,XMMREG,XMMRM,');
  749. FOpCodeList.Add('VFNMADD132PS,1,1,YMMREG,YMMREG,YMMRM,');
  750. FOpCodeList.Add('VFNMADD132PS,1,1,XMMREG,XMMREG,XMMRM,');
  751. FOpCodeList.Add('VFNMADD213PS,1,1,YMMREG,YMMREG,YMMRM,');
  752. FOpCodeList.Add('VFNMADD213PS,1,1,XMMREG,XMMREG,XMMRM,');
  753. FOpCodeList.Add('VFNMADD231PS,1,1,YMMREG,YMMREG,YMMRM,');
  754. FOpCodeList.Add('VFNMADD231PS,1,1,XMMREG,XMMREG,XMMRM,');
  755. FOpCodeList.Add('VFNMADD132SD,1,1,XMMREG,XMMREG,XMMRM,');
  756. FOpCodeList.Add('VFNMADD213SD,1,1,XMMREG,XMMREG,XMMRM,');
  757. FOpCodeList.Add('VFNMADD231SD,1,1,XMMREG,XMMREG,XMMRM,');
  758. FOpCodeList.Add('VFNMADD132SS,1,1,XMMREG,XMMREG,XMMRM,');
  759. FOpCodeList.Add('VFNMADD213SS,1,1,XMMREG,XMMREG,XMMRM,');
  760. FOpCodeList.Add('VFNMADD231SS,1,1,XMMREG,XMMREG,XMMRM,');
  761. FOpCodeList.Add('VFNMSUB132PD,1,1,YMMREG,YMMREG,YMMRM,');
  762. FOpCodeList.Add('VFNMSUB132PD,1,1,XMMREG,XMMREG,XMMRM,');
  763. FOpCodeList.Add('VFNMSUB213PD,1,1,YMMREG,YMMREG,YMMRM,');
  764. FOpCodeList.Add('VFNMSUB213PD,1,1,XMMREG,XMMREG,XMMRM,');
  765. FOpCodeList.Add('VFNMSUB231PD,1,1,YMMREG,YMMREG,YMMRM,');
  766. FOpCodeList.Add('VFNMSUB231PD,1,1,XMMREG,XMMREG,XMMRM,');
  767. FOpCodeList.Add('VFNMSUB132PS,1,1,YMMREG,YMMREG,YMMRM,');
  768. FOpCodeList.Add('VFNMSUB132PS,1,1,XMMREG,XMMREG,XMMRM,');
  769. FOpCodeList.Add('VFNMSUB213PS,1,1,YMMREG,YMMREG,YMMRM,');
  770. FOpCodeList.Add('VFNMSUB213PS,1,1,XMMREG,XMMREG,XMMRM,');
  771. FOpCodeList.Add('VFNMSUB231PS,1,1,YMMREG,YMMREG,YMMRM,');
  772. FOpCodeList.Add('VFNMSUB231PS,1,1,XMMREG,XMMREG,XMMRM,');
  773. FOpCodeList.Add('VFNMSUB132SD,1,1,XMMREG,XMMREG,XMMRM,');
  774. FOpCodeList.Add('VFNMSUB213SD,1,1,XMMREG,XMMREG,XMMRM,');
  775. FOpCodeList.Add('VFNMSUB231SD,1,1,XMMREG,XMMREG,XMMRM,');
  776. FOpCodeList.Add('VFNMSUB132SS,1,1,XMMREG,XMMREG,XMMRM,');
  777. FOpCodeList.Add('VFNMSUB213SS,1,1,XMMREG,XMMREG,XMMRM,');
  778. FOpCodeList.Add('VFNMSUB231SS,1,1,XMMREG,XMMREG,XMMRM,');
  779. FOpCodeList.Add('VGATHERDPD,1,1,XMMREG,XMEM32,XMMREG,');
  780. FOpCodeList.Add('VGATHERDPD,1,1,YMMREG,XMEM32,YMMREG,');
  781. FOpCodeList.Add('VGATHERQPD,1,1,XMMREG,XMEM64,XMMREG,');
  782. FOpCodeList.Add('VGATHERQPD,1,1,YMMREG,YMEM64,YMMREG,');
  783. FOpCodeList.Add('VGATHERDPS,1,1,XMMREG,XMEM32,XMMREG,');
  784. FOpCodeList.Add('VGATHERDPS,1,1,YMMREG,YMEM32,YMMREG,');
  785. FOpCodeList.Add('VGATHERQPS,1,1,XMMREG,XMEM64,XMMREG,');
  786. FOpCodeList.Add('VGATHERQPS,1,1,XMMREG,YMEM64,XMMREG,');
  787. FOpCodeList.Add('VPGATHERDD,1,1,XMMREG,XMEM32,XMMREG,');
  788. FOpCodeList.Add('VPGATHERDD,1,1,YMMREG,YMEM32,YMMREG,');
  789. FOpCodeList.Add('VPGATHERQD,1,1,XMMREG,XMEM64,XMMREG,');
  790. FOpCodeList.Add('VPGATHERQD,1,1,XMMREG,YMEM64,XMMREG,');
  791. FOpCodeList.Add('VPGATHERDQ,1,1,XMMREG,XMEM32,XMMREG,');
  792. FOpCodeList.Add('VPGATHERDQ,1,1,YMMREG,XMEM32,YMMREG,');
  793. FOpCodeList.Add('VPGATHERQQ,1,1,XMMREG,XMEM64,XMMREG,');
  794. FOpCodeList.Add('VPGATHERQQ,1,1,YMMREG,YMEM64,YMMREG,');
  795. end;
  796. function TAVXTestGenerator.InternalMakeTestFiles(aX64: boolean; aDestPath, aFileExt: String;
  797. aOpCodeList, aHeaderList, aFooterList: TStringList): boolean;
  798. var
  799. i: integer;
  800. sl: TStringList;
  801. slAsm: TStringList;
  802. LastOpCode: String;
  803. NewOpCode: String;
  804. function SaveFile(aAsmList: TStringList; aOpcode, aDestPath, aFileExt: String; aHeaderList, aFooterList: TStringList): boolean;
  805. begin
  806. result := false;
  807. if aAsmList.Count > 0 then
  808. begin
  809. aAsmList.Insert(0, StringReplace(aHeaderList.Text, '$$$OPCODE$$$', aOpCode, [rfReplaceAll]));
  810. aAsmList.AddStrings(StringReplace(aFooterList.Text, '$$$OPCODE$$$', aOpCode, [rfReplaceAll]));
  811. aAsmList.SaveToFile(IncludeTrailingBackslash(aDestPath) + aOpCode + aFileExt);
  812. end;
  813. end;
  814. begin
  815. result := false;
  816. aOpCodeList.Sort;
  817. sl := TStringList.Create;
  818. try
  819. slAsm := TStringList.Create;
  820. try
  821. LastOpCode := '';
  822. for i := 0 to aOpCodeList.Count - 1 do
  823. //for i := 0 to 0 do
  824. begin
  825. sl.Clear;
  826. sl.CommaText := aOpCodeList[i];
  827. while sl.Count < 7 do sl.Add('');
  828. NewOpCode := sl[0];
  829. if NewOpCode <> '' then
  830. begin
  831. if NewOpCode <> LastOpCode then
  832. begin
  833. if LastOpCode <> '' then
  834. begin
  835. SaveFile(slAsm, LastOpCode, aDestPath, aFileExt, aHeaderList, aFooterList);
  836. writeln(format('%s%s%s', [aDestPath, LastOpCode, aFileExt]));
  837. slAsm.Clear;
  838. LastOpCode := NewOpCode;
  839. end
  840. else LastOpCode := NewOpCode;
  841. end;
  842. if (not(aX64) and (sl[1] = '1')) or // i386
  843. (aX64 and (sl[2] = '1')) then // x86_64
  844. begin
  845. if (sl[3] = '') and
  846. (sl[3] = '') and
  847. (sl[3] = '') and
  848. (sl[3] = '') then
  849. begin // Opcode with no Params, e.g. VZEROALL
  850. slAsm.Add(' ' + sl[0]);
  851. end
  852. else TAsmTestGenerator.CalcTestData(aX64, sl[0], sl[3], sl[4], sl[5], sl[6], slAsm);
  853. end;
  854. end;
  855. end;
  856. if NewOpCode <> '' then
  857. begin
  858. SaveFile(slAsm, NewOpCode, aDestPath, aFileExt, aHeaderList, aFooterList);
  859. writeln(format('%s%s%s', [aDestPath, NewOpCode, aFileExt]));
  860. end;
  861. finally
  862. FreeAndNil(slAsm);
  863. end;
  864. finally
  865. FreeAndNil(sl);
  866. end;
  867. end;
  868. function TAVXTestGenerator.MakeTestFiles(aTyp: TTestFileTyp; aX64: boolean;
  869. aDestPath: String): boolean;
  870. var
  871. slHeader: TStringList;
  872. slFooter: TStringList;
  873. FileExt: String;
  874. i: integer;
  875. const
  876. cPlatform: array[boolean] of String = (('i386'), ('x86_64'));
  877. begin
  878. result := false;
  879. slHeader := TStringList.Create;
  880. try
  881. slFooter := TStringList.Create;
  882. try
  883. case aTyp of
  884. tfFPC: begin
  885. writeln(format('outputformat: fpc platform: %s path: %s',
  886. [cPlatform[aX64], aDestPath]));
  887. FileExt := '.pp';
  888. slHeader.Add('Program $$$OPCODE$$$;');
  889. slHeader.Add('{$asmmode intel}');
  890. slHeader.Add('begin');
  891. slHeader.Add(' asm');
  892. for i := 1 to 10 do
  893. slHeader.Add('NOP');
  894. for i := 1 to 10 do
  895. slFooter.Add('NOP');
  896. slFooter.Add(' end;');
  897. slFooter.Add('end.');
  898. end;
  899. tfFPCInc: begin
  900. writeln(format('outputformat: fpc platform: %s path: %s',
  901. [cPlatform[aX64], aDestPath]));
  902. FileExt := '.pp';
  903. slHeader.Add('Program Test$$$OPCODE$$$;');
  904. slHeader.Add('{$asmmode intel}');
  905. slHeader.Add('{$warn 7102 off}');
  906. slHeader.Add('{$I $$$OPCODE$$$.inc}');
  907. slHeader.Add('Procedure Proc$$$OPCODE$$$;assembler;nostackframe;');
  908. slHeader.Add(' asm');
  909. for i := 1 to 10 do
  910. slHeader.Add(#9'NOP');
  911. for i := 1 to 10 do
  912. slFooter.Add(#9'NOP');
  913. slFooter.Add(' end;');
  914. slFooter.Add('procedure check(const id: string; const expected: array of byte; p: pointer);');
  915. slFooter.Add('var');
  916. slFooter.Add(' i : longint;');
  917. slFooter.Add('begin');
  918. slFooter.Add(' for i:=0 to high(expected) do');
  919. slFooter.Add(' if expected[i]<>pbyte(p)[i] then');
  920. slFooter.Add(' begin');
  921. slFooter.Add(' writeln(id, '' mismatch at offset $'',hexstr(i,4), '', expected=$'',hexstr(expected[i],2),'' actual=$'',hexstr(pbyte(p)[i],2));');
  922. slFooter.Add(' halt(1);');
  923. slFooter.Add(' end;');
  924. slFooter.Add('end;');
  925. slFooter.Add('begin');
  926. if aX64 then
  927. slFooter.Add(' check(''x86_64'',$$$OPCODE$$$,@Proc$$$OPCODE$$$);')
  928. else
  929. slFooter.Add(' check(''i386'',$$$OPCODE$$$,@Proc$$$OPCODE$$$);');
  930. slFooter.Add(' writeln(''ok'');');
  931. slFooter.Add('end.');
  932. end;
  933. tfNasm: begin
  934. writeln(format('outputformat: Nasm platform: %s path: %s',
  935. [cPlatform[aX64], aDestPath]));
  936. FileExt := '.asm';
  937. if aX64 then slHeader.Add('[BITS 64]')
  938. else slHeader.Add('[BITS 32]');
  939. for i := 1 to 10 do
  940. slHeader.Add('NOP');
  941. for i := 1 to 10 do
  942. slFooter.Add('NOP');
  943. end;
  944. tfFasm: begin
  945. writeln(format('outputformat: Fasm platform: %s path: %s',
  946. [cPlatform[aX64], aDestPath]));
  947. FileExt := '.asm';
  948. if aX64 then slHeader.Add('format MS64 COFF')
  949. else slHeader.Add('format MS COFF');
  950. slHeader.Add('section ''.text'' code readable executable');
  951. slHeader.Add('myproc:');
  952. for i := 1 to 10 do
  953. slHeader.Add('NOP');
  954. for i := 1 to 10 do
  955. slFooter.Add('NOP');
  956. end;
  957. end;
  958. InternalMakeTestFiles(aX64, aDestPath, Fileext, FOpCodeList, slHeader, slFooter);
  959. finally
  960. FreeAndNil(slFooter);
  961. end;
  962. finally
  963. FreeAndNil(slHeader);
  964. end;
  965. end;
  966. end.