2
0

FoxAMD64InstructionSet.Mod 249 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463
  1. MODULE FoxAMD64InstructionSet; (** AUTHOR "fof & fn"; PURPOSE "Oberon Compiler:AMD 64 Instruction Set"; **)
  2. (* (c) fof ETH Zürich, 2008 *)
  3. (** This module has been written with inspiration from
  4. -module CCIx86A.Mod : Component Compiler, Intel x86 Backend Assembler, 2005-2007, by Luc Bläser and
  5. -module AsmAMD64.Mod: AMD64 instruction set repository, 2006, by Florian Negele
  6. The instruction set reference generator is built by parsing the file InstructionSetAMD64.txt also written by Florian Negele
  7. Parser for parsing the file is contained in FoxProgTools.Mod
  8. **)
  9. (** referenced literature
  10. [AMD:3] AMD64 Architecture Programmer's Manual Volume 3:General-Purpose and System Instructions
  11. Revision 3.14 September 2007
  12. [AMD:4] AMD64 Architecture Programmer's Manual Volume 4: 128-Bit Media Instructions
  13. Revision 3.14 September 2007
  14. [AMD:5] AMD64 Architecture Programmer's Manual Volume 5: 64-Bit Media and x87 Floating-Point Instructions
  15. Revision 3.14 September 2007
  16. [AMD:SSE5] AMD64 Technology 128-Bit SSE5 Instruction Set
  17. Revision 3.01 August 2007
  18. [INTEL:2A] Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2A: Instruction Set Reference, A-M
  19. September 2008
  20. [INTEL:2B] Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z
  21. September 2008
  22. **)
  23. IMPORT KernelLog (* debugging *);
  24. CONST
  25. maxCPUs* = 30;
  26. maxNumberOperands*=5; (* maximal two source and one destination operand *)
  27. (* numbers generated by the instruction set parser *)
  28. maxNumberMnemonics = 1012;
  29. maxNumberInstructions = 3380;
  30. maxMnemonicNameLength =20;
  31. maxCodeLength* =12;
  32. none* = -1;
  33. bitsDefault*=0;
  34. bits8*=1;
  35. bits16*=2;
  36. bits32*=4;
  37. bits64*=8;
  38. bits128*=16;
  39. (** cpu options **)
  40. cpu8086* = 0;
  41. cpu186* = 1;
  42. cpu286* = 2;
  43. cpu386* = 3;
  44. cpu486* = 4;
  45. cpuPentium* = 5;
  46. cpuP6* = 6;
  47. cpuKatmai* = 7;
  48. cpuWillamette* = 8;
  49. cpuPrescott* = 9;
  50. cpuAMD64* = 10;
  51. (* unused options
  52. cpuSW = 11;
  53. cpuSB = 11;
  54. cpuSMM = 11;
  55. cpuAR1 = 11;
  56. cpuAR2 = 11;
  57. cpuND = 11;
  58. *)
  59. (** options selectable with CODE {SYSTEM.....} **)
  60. cpuPrivileged* = 20;
  61. cpuProtected* = 21;
  62. cpuSSE* = 22;
  63. cpuSSE2* = 23;
  64. cpuSSE3* = 24;
  65. cpu3DNow* = 25;
  66. cpuMMX* = 26;
  67. cpuFPU* = 27;
  68. cpuOptions* = {cpuPrivileged .. cpuFPU};
  69. (** instruction options **)
  70. optO16* = 0; (* default 16bit operand size *)
  71. optO32* = 1; (* default 32bit operand size *)
  72. optO64* = 2; (* default 64bit operand size *)
  73. optD64* = 3; (* default 64bit operand size in 64bit mode *)
  74. optNot64* = 4; (* instruction invalid in 64bit mode *)
  75. optA16* = 5; (* default 16bit address size *)
  76. optA32* = 6; (* default 32bit address size *)
  77. optPOP* = 7; (* an operand size override prefix must preceed the instruction *)
  78. optPLOCK* = 8; (* a lock prefix must preceed the instruction *)
  79. optPREP* = 9; (* a repeat prefix must preceed the instruction *)
  80. optPREPN* = 10; (* a repeat prefix must preceed the instruction *)
  81. (*
  82. FoxProgTools.Enum -l=1 -e
  83. (** operand types, numbers assigned to the types do not have a special meaning **)
  84. (* register classes first *)
  85. reg8 reg16 reg32 reg64 CRn DRn segReg mmx xmm ymm sti
  86. (* other classes *)
  87. mem imm ioffset pntr1616 pntr1632
  88. (* special registers *)
  89. AL AX CL CR8 CS DS DX EAX ECX ES FS GS RAX SS rAX st0
  90. (* immediates and memory locations *)
  91. imm16 imm32 imm64 imm8
  92. uimm16 uimm32 uimm8
  93. simm16 simm32 simm8
  94. mem256
  95. mem128 mem16 mem32 mem64 mem8
  96. moffset16 moffset32 moffset64 moffset8
  97. rel16off rel32off rel8off
  98. (* ambivalent operand types *)
  99. reg3264
  100. regmem16 regmem32 regmem64 regmem8 reg32mem16
  101. mmxmem32 mmxmem64
  102. xmmmem256 xmmmem128 xmmmem32 xmmmem64
  103. xmmmem8
  104. xmmmem16
  105. ymmmem128
  106. ymmmem256
  107. (* miscellaneous *)
  108. one three
  109. vm32x
  110. vm32y
  111. vm64x
  112. vm64y
  113. m2z;
  114. ~
  115. *)
  116. (** operand types, numbers assigned to the types do not have a special meaning **)
  117. (* register classes first *)
  118. reg8*= 0;
  119. reg16*= 1;
  120. reg32*= 2;
  121. reg64*= 3;
  122. CRn*= 4;
  123. DRn*= 5;
  124. segReg*= 6;
  125. mmx*= 7;
  126. xmm*= 8;
  127. ymm*= 9;
  128. sti*= 10;
  129. (* other classes *)
  130. mem*= 11;
  131. imm*= 12;
  132. ioffset*= 13;
  133. pntr1616*= 14;
  134. pntr1632*= 15;
  135. (* special registers *)
  136. AL*= 16;
  137. AX*= 17;
  138. CL*= 18;
  139. CR8*= 19;
  140. CS*= 20;
  141. DS*= 21;
  142. DX*= 22;
  143. EAX*= 23;
  144. ECX*= 24;
  145. ES*= 25;
  146. FS*= 26;
  147. GS*= 27;
  148. RAX*= 28;
  149. SS*= 29;
  150. rAX*= 30;
  151. st0*= 31;
  152. (* immediates and memory locations *)
  153. imm16*= 32;
  154. imm32*= 33;
  155. imm64*= 34;
  156. imm8*= 35;
  157. uimm16*= 36;
  158. uimm32*= 37;
  159. uimm8*= 38;
  160. simm16*= 39;
  161. simm32*= 40;
  162. simm8*= 41;
  163. mem256*= 42;
  164. mem128*= 43;
  165. mem16*= 44;
  166. mem32*= 45;
  167. mem64*= 46;
  168. mem8*= 47;
  169. moffset16*= 48;
  170. moffset32*= 49;
  171. moffset64*= 50;
  172. moffset8*= 51;
  173. rel16off*= 52;
  174. rel32off*= 53;
  175. rel8off*= 54;
  176. (* ambivalent operand types *)
  177. reg3264*= 55;
  178. regmem16*= 56;
  179. regmem32*= 57;
  180. regmem64*= 58;
  181. regmem8*= 59;
  182. reg32mem16*= 60;
  183. mmxmem32*= 61;
  184. mmxmem64*= 62;
  185. xmmmem256*= 63;
  186. xmmmem128*= 64;
  187. xmmmem32*= 65;
  188. xmmmem64*= 66;
  189. xmmmem8*= 67;
  190. xmmmem16*= 68;
  191. ymmmem128*= 69;
  192. ymmmem256*= 70;
  193. (* miscellaneous *)
  194. one*= 71;
  195. three*= 72;
  196. vm32x*= 73;
  197. vm32y*= 74;
  198. vm64x*= 75;
  199. vm64y*= 76;
  200. m2z*= 77;
  201. (** prefixes **)
  202. prfOP* = 066H;
  203. prfADR* = 067H;
  204. prfCS* = 02EH; (* ignored in 64bit mode *)
  205. prfDS* = 03EH; (* ignored in 64bit mode *)
  206. prfES* = 026H; (* ignored in 64bit mode *)
  207. prfFS* = 064H;
  208. prfGS* = 065H;
  209. prfSS* = 036H; (* ignored in 64bit mode *)
  210. prfLOCK* = 0F0H;
  211. prfREP* = 0F3H;
  212. prfREPE* = 0F3H;
  213. prfREPZ* = 0F3H;
  214. prfREPNE* = 0F2H;
  215. prfREPNZ* = 0F2H;
  216. (* registers
  217. FoxProgTools.Enum -e -l=8 -s=0
  218. (** 8 bit general purpose registers **)
  219. regAL regCL regDL regBL regAH regCH regDH regBH
  220. regSPL regBPL regSIL regDIL
  221. ~
  222. FoxProgTools.Enum -e -l=16 -s=16
  223. regR8B regR9B regR10B regR11B regR12B regR13B regR14B regR15B
  224. ~
  225. FoxProgTools.Enum -l=8 -e -s=32
  226. (** 16 bit general purpose registers **)
  227. regAX regCX regDX regBX regSP regBP regSI regDI
  228. regR8W regR9W regR10W regR11W regR12W regR13W regR14W regR15W
  229. ~
  230. FoxProgTools.Enum -l=8 -e -s=64
  231. (** 32 bit general purpose registers **)
  232. regEAX regECX regEDX regEBX regESP regEBP regESI regEDI
  233. regR8D regR9D regR10D regR11D regR12D regR13D regR14D regR15D
  234. ~
  235. FoxProgTools.Enum -l=8 -e -s=96
  236. (** 64 bit general purpose registers **)
  237. regRAX regRCX regRDX regRBX regRSP regRBP regRSI regRDI
  238. regR8 regR9 regR10 regR11 regR12 regR13 regR14 regR15 regRIP
  239. ~
  240. FoxProgTools.Enum -l=8 -e -s=128
  241. regES regCS regSS regDS regFS regGS
  242. regCR0 regCR1 regCR2 regCR3 regCR4 regCR5 regCR6 regCR7
  243. regCR8 regCR9 regCR10 regCR11 regCR12 regCR13 regCR14 regCR15
  244. regDR0 regDR1 regDR2 regDR3 regDR4 regDR5 regDR6 regDR7
  245. regDR8 regDR9 regDR10 regDR11 regDR12 regDR13 regDR14 regDR15
  246. regST0 regST1 regST2 regST3 regST4 regST5 regST6 regST7
  247. regXMM0 regXMM1 regXMM2 regXMM3 regXMM4 regXMM5 regXMM6 regXMM7
  248. regXMM8 regXMM9 regXMM10 regXMM11 regXMM12 regXMM13 regXMM14 regXMM15
  249. regMMX0 regMMX1 regMMX2 regMMX3 regMMX4 regMMX5 regMMX6 regMMX7
  250. regYMM0 regYMM1 regYMM2 regYMM3 regYMM4 regYMM5 regYMM6 regYMM7
  251. regYMM8 regYMM9 regYMM10 regYMM11 regYMM12 regYMM13 regYMM14 regYMM15
  252. numberRegisters
  253. ~
  254. *)
  255. (*
  256. regNumber = S*32 + N
  257. N\S 0 1 2 3
  258. 0 AL AX EAX RAX
  259. 1 CL CX ECX RCX
  260. 2 DL DX EDX RDX
  261. 3 BL BX EBX RBX
  262. 4 SPL SP ESP RSP
  263. 5 BPL BP EBP RBP
  264. 6 SIL SI ESI RSI
  265. 7 DIL DI EDI RDI
  266. 8 R8B R8W R8D R8
  267. 9 R9B R9W R9D R9
  268. 10 R10B R10W R10D R10
  269. 11 R11B R11W R11D R11
  270. 12 R12B R12W R12D R12
  271. 13 R13B R13W R13D R13
  272. 14 R14B R14W R14D R14
  273. 15 R15B R15W R15D R15
  274. 16 AH
  275. 17 CH
  276. 18 BH
  277. 19 DH
  278. *)
  279. (** register indices, the order is arbitrary and has no meaning for instruction encoding,
  280. it nevertheless should not be changed as the numbers are important on in the code generator ! **)
  281. (** 8 bit general purpose registers : index DIV 32 = 0**)
  282. regAL*= 0; regCL*= 1; regDL*= 2; regBL*= 3; regSPL*= 4; regBPL*= 5; regSIL*= 6; regDIL*= 7;
  283. regAH*= 16; regCH*= 17; regDH*= 18; regBH*= 19;
  284. regR8B*= 8; regR9B*= 9; regR10B*= 10; regR11B*= 11; regR12B*= 12; regR13B*= 13; regR14B*= 14; regR15B*= 15;
  285. (** 16 bit general purpose registers : index DIV 32 = 1**)
  286. regAX*= 32; regCX*= 33; regDX*= 34; regBX*= 35; regSP*= 36; regBP*= 37; regSI*= 38; regDI*= 39;
  287. regR8W*= 40; regR9W*= 41; regR10W*= 42; regR11W*= 43; regR12W*= 44; regR13W*= 45; regR14W*= 46; regR15W*= 47;
  288. (** 32 bit general purpose registers: index DIV 32 = 2 **)
  289. regEAX*= 64; regECX*= 65; regEDX*= 66; regEBX*= 67; regESP*= 68; regEBP*= 69; regESI*= 70; regEDI*= 71;
  290. regR8D*= 72; regR9D*= 73; regR10D*= 74; regR11D*= 75; regR12D*= 76; regR13D*= 77; regR14D*= 78; regR15D*= 79;
  291. (** 64 bit general purpose registers : index DIV 32 = 3 (except for regRIP) **)
  292. regRAX*= 96; regRCX*= 97; regRDX*= 98; regRBX*= 99; regRSP*= 100; regRBP*= 101; regRSI*= 102; regRDI*= 103;
  293. regR8*= 104; regR9*= 105; regR10*= 106; regR11*= 107; regR12*= 108; regR13*= 109; regR14*= 110; regR15*= 111;
  294. regRIP*= 112;
  295. (** other registers **)
  296. regES*= 128; regCS*= 129; regSS*= 130; regDS*= 131; regFS*= 132; regGS*= 133; regCR0*= 134; regCR1*= 135;
  297. regCR2*= 136; regCR3*= 137; regCR4*= 138; regCR5*= 139; regCR6*= 140; regCR7*= 141; regCR8*= 142; regCR9*= 143;
  298. regCR10*= 144; regCR11*= 145; regCR12*= 146; regCR13*= 147; regCR14*= 148; regCR15*= 149; regDR0*= 150; regDR1*= 151;
  299. regDR2*= 152; regDR3*= 153; regDR4*= 154; regDR5*= 155; regDR6*= 156; regDR7*= 157; regDR8*= 158; regDR9*= 159;
  300. regDR10*= 160; regDR11*= 161; regDR12*= 162; regDR13*= 163; regDR14*= 164; regDR15*= 165; regST0*= 166; regST1*= 167;
  301. regST2*= 168; regST3*= 169; regST4*= 170; regST5*= 171; regST6*= 172; regST7*= 173; regXMM0*= 174; regXMM1*= 175;
  302. regXMM2*= 176; regXMM3*= 177; regXMM4*= 178; regXMM5*= 179; regXMM6*= 180; regXMM7*= 181; regXMM8*= 182; regXMM9*= 183;
  303. regXMM10*= 184; regXMM11*= 185; regXMM12*= 186; regXMM13*= 187; regXMM14*= 188; regXMM15*= 189; regMMX0*= 190; regMMX1*= 191;
  304. regMMX2*= 192; regMMX3*= 193; regMMX4*= 194; regMMX5*= 195; regMMX6*= 196; regMMX7*= 197; regYMM0*= 198; regYMM1*= 199;
  305. regYMM2*= 200; regYMM3*= 201; regYMM4*= 202; regYMM5*= 203; regYMM6*= 204; regYMM7*= 205; regYMM8*= 206; regYMM9*= 207;
  306. regYMM10*= 208; regYMM11*= 209; regYMM12*= 210; regYMM13*= 211; regYMM14*= 212; regYMM15*= 213;
  307. numberRegisters*= 214;
  308. VAR
  309. opAAA*,
  310. opAAD*,
  311. opAAM*,
  312. opAAS*,
  313. opADC*,
  314. opADD*,
  315. opADDPD*,
  316. opADDPS*,
  317. opADDSD*,
  318. opADDSS*,
  319. opADDSUBPD*,
  320. opADDSUBPS*,
  321. opAND*,
  322. opANDNPD*,
  323. opANDNPS*,
  324. opANDPD*,
  325. opANDPS*,
  326. opARPL*,
  327. opBOUND*,
  328. opBSF*,
  329. opBSR*,
  330. opBSWAP*,
  331. opBT*,
  332. opBTC*,
  333. opBTR*,
  334. opBTS*,
  335. opCALL*,
  336. opCALLFAR*,
  337. opCBW*,
  338. opCDQ*,
  339. opCDQE*,
  340. opCLC*,
  341. opCLD*,
  342. opCLFLUSH*,
  343. opCLGI*,
  344. opCLI*,
  345. opCLTS*,
  346. opCMC*,
  347. opCMOVA*,
  348. opCMOVAE*,
  349. opCMOVB*,
  350. opCMOVBE*,
  351. opCMOVC*,
  352. opCMOVE*,
  353. opCMOVG*,
  354. opCMOVGE*,
  355. opCMOVL*,
  356. opCMOVLE*,
  357. opCMOVNA*,
  358. opCMOVNAE*,
  359. opCMOVNB*,
  360. opCMOVNBE*,
  361. opCMOVNC*,
  362. opCMOVNE*,
  363. opCMOVNG*,
  364. opCMOVNGE*,
  365. opCMOVNL*,
  366. opCMOVNLE*,
  367. opCMOVNO*,
  368. opCMOVNP*,
  369. opCMOVNS*,
  370. opCMOVNZ*,
  371. opCMOVO*,
  372. opCMOVP*,
  373. opCMOVPE*,
  374. opCMOVPO*,
  375. opCMOVS*,
  376. opCMOVZ*,
  377. opCMP*,
  378. opCMPPD*,
  379. opCMPPS*,
  380. opCMPS*,
  381. opCMPSB*,
  382. opCMPSD*,
  383. opCMPSQ*,
  384. opCMPSS*,
  385. opCMPSW*,
  386. opCMPXCHG*,
  387. opCMPXCHG16B*,
  388. opCMPXCHG8B*,
  389. opCOMISD*,
  390. opCOMISS*,
  391. opCPUID*,
  392. opCQO*,
  393. opCVTDQ2PD*,
  394. opCVTDQ2PS*,
  395. opCVTPD2DQ*,
  396. opCVTPD2PI*,
  397. opCVTPD2PS*,
  398. opCVTPI2PD*,
  399. opCVTPI2PS*,
  400. opCVTPS2DQ*,
  401. opCVTPS2PD*,
  402. opCVTPS2PI*,
  403. opCVTSD2SI*,
  404. opCVTSD2SS*,
  405. opCVTSI2SD*,
  406. opCVTSI2SS*,
  407. opCVTSS2SD*,
  408. opCVTSS2SI*,
  409. opCVTTPD2DQ*,
  410. opCVTTPD2PI*,
  411. opCVTTPS2DQ*,
  412. opCVTTPS2PI*,
  413. opCVTTSD2SI*,
  414. opCVTTSS2SI*,
  415. opCWD*,
  416. opCWDE*,
  417. opDAA*,
  418. opDAS*,
  419. opDEC*,
  420. opDIV*,
  421. opDIVPD*,
  422. opDIVPS*,
  423. opDIVSD*,
  424. opDIVSS*,
  425. opEMMS*,
  426. opENTER*,
  427. opF2XM1*,
  428. opFABS*,
  429. opFADD*,
  430. opFADDP*,
  431. opFBLD*,
  432. opFBSTP*,
  433. opFCHS*,
  434. opFCLEX*,
  435. opFCMOVB*,
  436. opFCMOVBE*,
  437. opFCMOVE*,
  438. opFCMOVNB*,
  439. opFCMOVNBE*,
  440. opFCMOVNE*,
  441. opFCMOVNU*,
  442. opFCMOVU*,
  443. opFCOM*,
  444. opFCOMI*,
  445. opFCOMIP*,
  446. opFCOMP*,
  447. opFCOMPP*,
  448. opFCOS*,
  449. opFDECSTP*,
  450. opFDIV*,
  451. opFDIVP*,
  452. opFDIVR*,
  453. opFDIVRP*,
  454. opFEMMS*,
  455. opFFREE*,
  456. opFIADD*,
  457. opFICOM*,
  458. opFICOMP*,
  459. opFIDIV*,
  460. opFIDIVR*,
  461. opFILD*,
  462. opFIMUL*,
  463. opFINCSTP*,
  464. opFINIT*,
  465. opFIST*,
  466. opFISTP*,
  467. opFISTTP*,
  468. opFISUB*,
  469. opFISUBR*,
  470. opFLD*,
  471. opFLD1*,
  472. opFLDCW*,
  473. opFLDENV*,
  474. opFLDL2E*,
  475. opFLDL2T*,
  476. opFLDLG2*,
  477. opFLDLN2*,
  478. opFLDPI*,
  479. opFLDZ*,
  480. opFMUL*,
  481. opFMULP*,
  482. opFNCLEX*,
  483. opFNINIT*,
  484. opFNOP*,
  485. opFNSAVE*,
  486. opFNSTCW*,
  487. opFNSTENV*,
  488. opFNSTSW*,
  489. opFPATAN*,
  490. opFPREM*,
  491. opFPREM1*,
  492. opFPTAN*,
  493. opFRNDINT*,
  494. opFRSTOR*,
  495. opFSAVE*,
  496. opFSCALE*,
  497. opFSIN*,
  498. opFSINCOS*,
  499. opFSQRT*,
  500. opFST*,
  501. opFSTCW*,
  502. opFSTENV*,
  503. opFSTP*,
  504. opFSTSW*,
  505. opFSUB*,
  506. opFSUBP*,
  507. opFSUBR*,
  508. opFSUBRP*,
  509. opFTST*,
  510. opFUCOM*,
  511. opFUCOMI*,
  512. opFUCOMIP*,
  513. opFUCOMP*,
  514. opFUCOMPP*,
  515. opFWAIT*,
  516. opFXAM*,
  517. opFXCH*,
  518. opFXRSTOR*,
  519. opFXSAVE*,
  520. opFXTRACT*,
  521. opFYL2X*,
  522. opFYL2XP1*,
  523. opHADDPD*,
  524. opHADDPS*,
  525. opHLT*,
  526. opHSUBPD*,
  527. opHSUBPS*,
  528. opIDIV*,
  529. opIMUL*,
  530. opIN*,
  531. opINC*,
  532. opINS*,
  533. opINSB*,
  534. opINSD*,
  535. opINSW*,
  536. opINT*,
  537. opINT3*,
  538. opINTO*,
  539. opINVD*,
  540. opINVLPG*,
  541. opINVLPGA*,
  542. opIRET*,
  543. opIRETD*,
  544. opIRETQ*,
  545. opJA*,
  546. opJAE*,
  547. opJB*,
  548. opJBE*,
  549. opJC*,
  550. opJCXZ*,
  551. opJE*,
  552. opJECXZ*,
  553. opJG*,
  554. opJGE*,
  555. opJL*,
  556. opJLE*,
  557. opJMP*,
  558. opJMPFAR*,
  559. opJNA*,
  560. opJNAE*,
  561. opJNB*,
  562. opJNBE*,
  563. opJNC*,
  564. opJNE*,
  565. opJNG*,
  566. opJNGE*,
  567. opJNL*,
  568. opJNLE*,
  569. opJNO*,
  570. opJNP*,
  571. opJNS*,
  572. opJNZ*,
  573. opJO*,
  574. opJP*,
  575. opJPE*,
  576. opJPO*,
  577. opJRCXZ*,
  578. opJS*,
  579. opJZ*,
  580. opLAHF*,
  581. opLAR*,
  582. opLDDQU*,
  583. opLDMXCSR*,
  584. opLDS*,
  585. opLEA*,
  586. opLEAVE*,
  587. opLES*,
  588. opLFENCE*,
  589. opLFS*,
  590. opLGDT*,
  591. opLGS*,
  592. opLIDT*,
  593. opLLDT*,
  594. opLMSW*,
  595. opLODS*,
  596. opLODSB*,
  597. opLODSD*,
  598. opLODSQ*,
  599. opLODSW*,
  600. opLOOP*,
  601. opLOOPE*,
  602. opLOOPNE*,
  603. opLOOPNZ*,
  604. opLOOPZ*,
  605. opLSL*,
  606. opLSS*,
  607. opLTR*,
  608. opMASKMOVDQU*,
  609. opMASKMOVQ*,
  610. opMAXPD*,
  611. opMAXPS*,
  612. opMAXSD*,
  613. opMAXSS*,
  614. opMFENCE*,
  615. opMINPD*,
  616. opMINPS*,
  617. opMINSD*,
  618. opMINSS*,
  619. opMOV*,
  620. opMOVAPD*,
  621. opMOVAPS*,
  622. opMOVD*,
  623. opMOVDDUP*,
  624. opMOVDQ2Q*,
  625. opMOVDQA*,
  626. opMOVDQU*,
  627. opMOVHLPS*,
  628. opMOVHPD*,
  629. opMOVHPS*,
  630. opMOVLHPS*,
  631. opMOVLPD*,
  632. opMOVLPS*,
  633. opMOVMSKPD*,
  634. opMOVMSKPS*,
  635. opMOVNTDQ*,
  636. opMOVNTI*,
  637. opMOVNTPD*,
  638. opMOVNTPS*,
  639. opMOVNTQ*,
  640. opMOVQ*,
  641. opMOVQ2DQ*,
  642. opMOVS*,
  643. opMOVSB*,
  644. opMOVSD*,
  645. opMOVSHDUP*,
  646. opMOVSLDUP*,
  647. opMOVSQ*,
  648. opMOVSS*,
  649. opMOVSW*,
  650. opMOVSX*,
  651. opMOVSXD*,
  652. opMOVUPD*,
  653. opMOVUPS*,
  654. opMOVZX*,
  655. opMUL*,
  656. opMULPD*,
  657. opMULPS*,
  658. opMULSD*,
  659. opMULSS*,
  660. opNEG*,
  661. opNOP*,
  662. opNOT*,
  663. opOR*,
  664. opORPD*,
  665. opORPS*,
  666. opOUT*,
  667. opOUTS*,
  668. opOUTSB*,
  669. opOUTSD*,
  670. opOUTSW*,
  671. opPACKSSDW*,
  672. opPACKSSWB*,
  673. opPACKUSWB*,
  674. opPADDB*,
  675. opPADDD*,
  676. opPADDQ*,
  677. opPADDSB*,
  678. opPADDSW*,
  679. opPADDUSB*,
  680. opPADDUSW*,
  681. opPADDW*,
  682. opPAND*,
  683. opPANDN*,
  684. opPAUSE*,
  685. opPAVGB*,
  686. opPAVGUSB*,
  687. opPAVGW*,
  688. opPCMPEQB*,
  689. opPCMPEQD*,
  690. opPCMPEQW*,
  691. opPCMPGTB*,
  692. opPCMPGTD*,
  693. opPCMPGTW*,
  694. opPEXTRW*,
  695. opPF2ID*,
  696. opPF2IW*,
  697. opPFACC*,
  698. opPFADD*,
  699. opPFCMPEQ*,
  700. opPFCMPGE*,
  701. opPFCMPGT*,
  702. opPFMAX*,
  703. opPFMIN*,
  704. opPFMUL*,
  705. opPFNACC*,
  706. opPFPNACC*,
  707. opPFRCP*,
  708. opPFRCPIT1*,
  709. opPFRCPIT2*,
  710. opPFRSQIT1*,
  711. opPFRSQRT*,
  712. opPFSUB*,
  713. opPFSUBR*,
  714. opPI2FD*,
  715. opPI2FW*,
  716. opPINSRW*,
  717. opPMADDWD*,
  718. opPMAXSW*,
  719. opPMAXUB*,
  720. opPMINSW*,
  721. opPMINUB*,
  722. opPMOVMSKB*,
  723. opPMULHRW*,
  724. opPMULHUW*,
  725. opPMULHW*,
  726. opPMULLW*,
  727. opPMULUDQ*,
  728. opPOP*,
  729. opPOPA*,
  730. opPOPAD*,
  731. opPOPAW*,
  732. opPOPF*,
  733. opPOPFD*,
  734. opPOPFQ*,
  735. opPOR*,
  736. opPREFETCH*,
  737. opPREFETCHNTA*,
  738. opPREFETCHT0*,
  739. opPREFETCHT1*,
  740. opPREFETCHT2*,
  741. opPREFETCHW*,
  742. opPSADBW*,
  743. opPSHUFD*,
  744. opPSHUFHW*,
  745. opPSHUFLW*,
  746. opPSHUFW*,
  747. opPSLLD*,
  748. opPSLLDQ*,
  749. opPSLLQ*,
  750. opPSLLW*,
  751. opPSRAD*,
  752. opPSRAW*,
  753. opPSRLD*,
  754. opPSRLDQ*,
  755. opPSRLQ*,
  756. opPSRLW*,
  757. opPSUBB*,
  758. opPSUBD*,
  759. opPSUBQ*,
  760. opPSUBSB*,
  761. opPSUBSW*,
  762. opPSUBUSB*,
  763. opPSUBUSW*,
  764. opPSUBW*,
  765. opPSWAPD*,
  766. opPUNPCKHBW*,
  767. opPUNPCKHDQ*,
  768. opPUNPCKHQDQ*,
  769. opPUNPCKHWD*,
  770. opPUNPCKLBW*,
  771. opPUNPCKLDQ*,
  772. opPUNPCKLQDQ*,
  773. opPUNPCKLWD*,
  774. opPUSH*,
  775. opPUSHA*,
  776. opPUSHAD*,
  777. opPUSHF*,
  778. opPUSHFD*,
  779. opPUSHFQ*,
  780. opPXOR*,
  781. opRCL*,
  782. opRCPPS*,
  783. opRCPSS*,
  784. opRCR*,
  785. opRDMSR*,
  786. opRDPMC*,
  787. opRDTSC*,
  788. opRDTSCP*,
  789. opRET*,
  790. opRETF*,
  791. opROL*,
  792. opROR*,
  793. opRSM*,
  794. opRSQRTPS*,
  795. opRSQRTSS*,
  796. opSAHF*,
  797. opSAL*,
  798. opSAR*,
  799. opSBB*,
  800. opSCAS*,
  801. opSCASB*,
  802. opSCASD*,
  803. opSCASQ*,
  804. opSCASW*,
  805. opSETA*,
  806. opSETAE*,
  807. opSETB*,
  808. opSETBE*,
  809. opSETC*,
  810. opSETE*,
  811. opSETG*,
  812. opSETGE*,
  813. opSETL*,
  814. opSETLE*,
  815. opSETNA*,
  816. opSETNAE*,
  817. opSETNB*,
  818. opSETNBE*,
  819. opSETNC*,
  820. opSETNE*,
  821. opSETNG*,
  822. opSETNGE*,
  823. opSETNL*,
  824. opSETNLE*,
  825. opSETNO*,
  826. opSETNP*,
  827. opSETNS*,
  828. opSETNZ*,
  829. opSETO*,
  830. opSETP*,
  831. opSETPE*,
  832. opSETPO*,
  833. opSETS*,
  834. opSETZ*,
  835. opSFENCE*,
  836. opSGDT*,
  837. opSHL*,
  838. opSHLD*,
  839. opSHR*,
  840. opSHRD*,
  841. opSHUFPD*,
  842. opSHUFPS*,
  843. opSIDT*,
  844. opSKINIT*,
  845. opSLDT*,
  846. opSMSW*,
  847. opSQRTPD*,
  848. opSQRTPS*,
  849. opSQRTSD*,
  850. opSQRTSS*,
  851. opSTC*,
  852. opSTD*,
  853. opSTGI*,
  854. opSTI*,
  855. opSTMXCSR*,
  856. opSTOS*,
  857. opSTOSB*,
  858. opSTOSD*,
  859. opSTOSQ*,
  860. opSTOSW*,
  861. opSTR*,
  862. opSUB*,
  863. opSUBPD*,
  864. opSUBPS*,
  865. opSUBSD*,
  866. opSUBSS*,
  867. opSWAPGS*,
  868. opSYSCALL*,
  869. opSYSENTER*,
  870. opSYSEXIT*,
  871. opSYSRET*,
  872. opTEST*,
  873. opUCOMISD*,
  874. opUCOMISS*,
  875. opUD2*,
  876. opUNPCKHPD*,
  877. opUNPCKHPS*,
  878. opUNPCKLPD*,
  879. opUNPCKLPS*,
  880. opVERR*,
  881. opVERW*,
  882. opVMLOAD*,
  883. opVMMCALL*,
  884. opVMRUN*,
  885. opVMSAVE*,
  886. opWBINVD*,
  887. opWRMSR*,
  888. opXADD*,
  889. opXCHG*,
  890. opXLAT*,
  891. opXLATB*,
  892. opXOR*,
  893. opXORPD*,
  894. opXORPS*: LONGINT;
  895. (* AVX 2 Media instructions *)
  896. opVAESKEYGENASSIST*,
  897. opVPMADCSWD*,
  898. opVADDPD*,
  899. opVADDPS*,
  900. opVADDSD*,
  901. opVADDSS*,
  902. opVADDSUBPD*,
  903. opVADDSUBPS*,
  904. opVAESDEC*,
  905. opVAESDECLAST*,
  906. opVAESENC*,
  907. opVAESENCLAST*,
  908. opVAESIMC*,
  909. opVANDNPD*,
  910. opVANDNPS*,
  911. opVANDPD*,
  912. opVANDPS*,
  913. opVBLENDPD*,
  914. opVBLENDPS*,
  915. opVBLENDVPD*,
  916. opVBLENDVPS*,
  917. opVBROADCASTF128*,
  918. opVBROADCASTI128*,
  919. opVBROADCASTSD*,
  920. opVBROADCASTSS*,
  921. opVCMPPD*,
  922. opVCMPPS*,
  923. opVCMPSD*,
  924. opVCMPSS*,
  925. opVCOMISD*,
  926. opVCOMISS*,
  927. opVCVTDQ2PD*,
  928. opVCVTDQ2PS*,
  929. opVCVTPD2DQ*,
  930. opVCVTPD2PS*,
  931. opVCVTPH2PS*,
  932. opVCVTPS2DQ*,
  933. opVCVTPS2PD*,
  934. opVCVTPS2PH*,
  935. opVCVTSD2SI*,
  936. opVCVTSD2SS*,
  937. opVCVTSI2SD*,
  938. opVCVTSI2SS*,
  939. opVCVTSS2SD*,
  940. opVCVTSS2SI*,
  941. opVCVTTPD2DQ*,
  942. opVCVTTPS2DQ*,
  943. opVCVTTSD2SI*,
  944. opVCVTTSS2SI*,
  945. opVDIVPD*,
  946. opVDIVPS*,
  947. opVDIVSD*,
  948. opVDIVSS*,
  949. opVDPPD*,
  950. opVDPPS*,
  951. opVEXTRACTF128*,
  952. opVEXTRACTI128*,
  953. opVEXTRACTPS*,
  954. opVFMADD132PD*,
  955. opVFMADD132PS*,
  956. opVFMADD132SD*,
  957. opVFMADD132SS*,
  958. opVFMADD213PD*,
  959. opVFMADD213PS*,
  960. opVFMADD213SD*,
  961. opVFMADD213SS*,
  962. opVFMADD231PD*,
  963. opVFMADD231PS*,
  964. opVFMADD231SD*,
  965. opVFMADD231SS*,
  966. opVFMADDPD*,
  967. opVFMADDPS*,
  968. opVFMADDSD*,
  969. opVFMADDSS*,
  970. opVFMADDSUB132PD*,
  971. opVFMADDSUB132PS*,
  972. opVFMADDSUB213PD*,
  973. opVFMADDSUB213PS*,
  974. opVFMADDSUB231PD*,
  975. opVFMADDSUB231PS*,
  976. opVFMADDSUBPD*,
  977. opVFMADDSUBPS*,
  978. opVFMSUB132PD*,
  979. opVFMSUB132PS*,
  980. opVFMSUB132SD*,
  981. opVFMSUB132SS*,
  982. opVFMSUB213PD*,
  983. opVFMSUB213PS*,
  984. opVFMSUB213SD*,
  985. opVFMSUB213SS*,
  986. opVFMSUB231PD*,
  987. opVFMSUB231PS*,
  988. opVFMSUB231SD*,
  989. opVFMSUB231SS*,
  990. opVFMSUBADD132PD*,
  991. opVFMSUBADD132PS*,
  992. opVFMSUBADD213PD*,
  993. opVFMSUBADD213PS*,
  994. opVFMSUBADD231PD*,
  995. opVFMSUBADD231PS*,
  996. opVFMSUBADDPD*,
  997. opVFMSUBADDPS*,
  998. opVFMSUBPD*,
  999. opVFMSUBPS*,
  1000. opVFMSUBSD*,
  1001. opVFMSUBSS*,
  1002. opVFNMADD132PD*,
  1003. opVFNMADD132PS*,
  1004. opVFNMADD132SD*,
  1005. opVFNMADD132SS*,
  1006. opVFNMADD213PD*,
  1007. opVFNMADD213PS*,
  1008. opVFNMADD213SD*,
  1009. opVFNMADD213SS*,
  1010. opVFNMADD231PD*,
  1011. opVFNMADD231PS*,
  1012. opVFNMADD231SD*,
  1013. opVFNMADD231SS*,
  1014. opVFNMADDPD*,
  1015. opVFNMADDPS*,
  1016. opVFNMADDSD*,
  1017. opVFNMADDSS*,
  1018. opVFNMSUB132PD*,
  1019. opVFNMSUB132PS*,
  1020. opVFNMSUB132SD*,
  1021. opVFNMSUB132SS*,
  1022. opVFNMSUB213PD*,
  1023. opVFNMSUB213PS*,
  1024. opVFNMSUB213SD*,
  1025. opVFNMSUB213SS*,
  1026. opVFNMSUB231PD*,
  1027. opVFNMSUB231PS*,
  1028. opVFNMSUB231SD*,
  1029. opVFNMSUB231SS*,
  1030. opVFNMSUBPD*,
  1031. opVFNMSUBPS*,
  1032. opVFNMSUBSD*,
  1033. opVFNMSUBSS*,
  1034. opVFRCZPD*,
  1035. opVFRCZPS*,
  1036. opVFRCZSD*,
  1037. opVFRCZSS*,
  1038. opVGATHERDPD*,
  1039. opVGATHERDPS*,
  1040. opVGATHERQPD*,
  1041. opVGATHERQPS*,
  1042. opVHADDPD*,
  1043. opVHADDPS*,
  1044. opVHSUBPD*,
  1045. opVHSUBPS*,
  1046. opVINSERTF128*,
  1047. opVINSERTI128*,
  1048. opVINSERTPS*,
  1049. opVLDDQU*,
  1050. opVLDMXCSR*,
  1051. opVMASKMOVDQU*,
  1052. opVMASKMOVPD*,
  1053. opVMASKMOVPS*,
  1054. opVMAXPD*,
  1055. opVMAXPS*,
  1056. opVMAXSD*,
  1057. opVMAXSS*,
  1058. opVMINPD*,
  1059. opVMINPS*,
  1060. opVMINSD*,
  1061. opVMINSS*,
  1062. opVMOVAPD*,
  1063. opVMOVAPS*,
  1064. opVMOVD*,
  1065. opVMOVDDUP*,
  1066. opVMOVDQA*,
  1067. opVMOVDQU*,
  1068. opVMOVHLPS*,
  1069. opVMOVHPD*,
  1070. opVMOVHPS*,
  1071. opVMOVLHPS*,
  1072. opVMOVLPD*,
  1073. opVMOVLPS*,
  1074. opVPMOVMSKB*,
  1075. opVMOVMSKPD*,
  1076. opVMOVMSKPS*,
  1077. opVMOVNTDQ*,
  1078. opVMOVNTDQA*,
  1079. opVMOVNTPD*,
  1080. opVMOVNTPS*,
  1081. opVMOVQ*,
  1082. opVMOVSD*,
  1083. opVMOVSHDUP*,
  1084. opVMOVSLDUP*,
  1085. opVMOVSS*,
  1086. opVMOVUPD*,
  1087. opVMOVUPS*,
  1088. opVMPSADBW*,
  1089. opVMULPD*,
  1090. opVMULPS*,
  1091. opVMULSD*,
  1092. opVMULSS*,
  1093. opVORPD*,
  1094. opVORPS*,
  1095. opVPABSB*,
  1096. opVPABSD*,
  1097. opVPABSW*,
  1098. opVPACKSSDW*,
  1099. opVPACKSSWB*,
  1100. opVPACKUSDW*,
  1101. opVPACKUSWB*,
  1102. opVPADDB*,
  1103. opVPADDD*,
  1104. opVPADDQ*,
  1105. opVPADDSB*,
  1106. opVPADDSW*,
  1107. opVPADDUSB*,
  1108. opVPADDUSW*,
  1109. opVPADDW*,
  1110. opVPALIGNR*,
  1111. opVPAND*,
  1112. opVPANDN*,
  1113. opVPAVGB*,
  1114. opVPAVGW*,
  1115. opVPBLENDD*,
  1116. opVPBLENDVB*,
  1117. opVPBLENDW*,
  1118. opVPBROADCASTB*,
  1119. opVPBROADCASTD*,
  1120. opVPBROADCASTQ*,
  1121. opVPBROADCASTW*,
  1122. opVPCLMULQDQ*,
  1123. opVPCMOV*,
  1124. opVPCMPEQB*,
  1125. opVPCMPEQD*,
  1126. opVPCMPEQQ*,
  1127. opVPCMPEQW*,
  1128. opVPCMPESTRI*,
  1129. opVPCMPESTRM*,
  1130. opVPCMPGTB*,
  1131. opVPCMPGTD*,
  1132. opVPCMPGTQ*,
  1133. opVPCMPGTW*,
  1134. opVPCMPISTRI*,
  1135. opVPCMPISTRM*,
  1136. opVPCOMB*,
  1137. opVPCOMD*,
  1138. opVPCOMQ*,
  1139. opVPCOMUB*,
  1140. opVPCOMUD*,
  1141. opVPCOMUQ*,
  1142. opVPCOMUW*,
  1143. opVPCOMW*,
  1144. opVPERM2F128*,
  1145. opVPERM2I128*,
  1146. opVPERMD*,
  1147. opVPERMIL2PD*,
  1148. opVPERMIL2PS*,
  1149. opVPERMILPD*,
  1150. opVPERMILPS*,
  1151. opVPERMPD*,
  1152. opVPERMPS*,
  1153. opVPERMQ*,
  1154. opVPEXTRB*,
  1155. opVPEXTRD*,
  1156. opVPEXTRQ*,
  1157. opVPEXTRW*,
  1158. opVPGATHERDD*,
  1159. opVPGATHERDQ*,
  1160. opVPGATHERQD*,
  1161. opVPGATHERQQ*,
  1162. opVPHADDBD*,
  1163. opVPHADDBQ*,
  1164. opVPHADDBW*,
  1165. opVPHADDD*,
  1166. opVPHADDDQ*,
  1167. opVPHADDSW*,
  1168. opVPHADDUBD*,
  1169. opVPHADDUBQ*,
  1170. opVPHADDUBW*,
  1171. opVPHADDUDQ*,
  1172. opVPHADDUWD*,
  1173. opVPHADDUWQ*,
  1174. opVPHADDW*,
  1175. opVPHADDWD*,
  1176. opVPHADDWQ*,
  1177. opVPHMINPOSUW*,
  1178. opVPHSUBBW*,
  1179. opVPHSUBD*,
  1180. opVPHSUBDQ*,
  1181. opVPHSUBSW*,
  1182. opVPHSUBW*,
  1183. opVPHSUBWD*,
  1184. opVPINSRB*,
  1185. opVPINSRD*,
  1186. opVPINSRQ*,
  1187. opVPINSRW*,
  1188. opVPMACSDD*,
  1189. opVPMACSDQH*,
  1190. opVPMACSDQL*,
  1191. opVPMACSSDD*,
  1192. opVPMACSSDQH*,
  1193. opVPMACSSDQL*,
  1194. opVPMACSSWD*,
  1195. opVPMACSSWW*,
  1196. opVPMACSWD*,
  1197. opVPMACSWW*,
  1198. opVPMADCSSWD*,
  1199. opVPMADDUBSW*,
  1200. opVPMADDWD*,
  1201. opVPMASKMOVD*,
  1202. opVPMASKMOVQ*,
  1203. opVPMAXSB*,
  1204. opVPMAXSD*,
  1205. opVPMAXSW*,
  1206. opVPMAXUB*,
  1207. opVPMAXUD*,
  1208. opVPMAXUW*,
  1209. opVPMINSB*,
  1210. opVPMINSD*,
  1211. opVPMINSW*,
  1212. opVPMINUB*,
  1213. opVPMINUD*,
  1214. opVPMINUW*,
  1215. opVPMOVSXBD*,
  1216. opVPMOVSXBQ*,
  1217. opVPMOVSXBW*,
  1218. opVPMOVSXDQ*,
  1219. opVPMOVSXWD*,
  1220. opVPMOVSXWQ*,
  1221. opVPMOVZXBD*,
  1222. opVPMOVZXBQ*,
  1223. opVPMOVZXBW*,
  1224. opVPMOVZXDQ*,
  1225. opVPMOVZXWD*,
  1226. opVPMOVZXWQ*,
  1227. opVPMULDQ*,
  1228. opVPMULHRSW*,
  1229. opVPMULHUW*,
  1230. opVPMULHW*,
  1231. opVPMULLD*,
  1232. opVPMULLW*,
  1233. opVPMULUDQ*,
  1234. opVPOR*,
  1235. opVPPERM*,
  1236. opVPROTB*,
  1237. opVPROTD*,
  1238. opVPROTQ*,
  1239. opVPROTW*,
  1240. opVPSADBW*,
  1241. opVPSHAB*,
  1242. opVPSHAD*,
  1243. opVPSHAQ*,
  1244. opVPSHAW*,
  1245. opVPSHLB*,
  1246. opVPSHLD*,
  1247. opVPSHLQ*,
  1248. opVPSHLW*,
  1249. opVPSHUFB*,
  1250. opVPSHUFD*,
  1251. opVPSHUFHW*,
  1252. opVPSHUFLW*,
  1253. opVPSIGNB*,
  1254. opVPSIGND*,
  1255. opVPSIGNW*,
  1256. opVPSLLD*,
  1257. opVPSLLDQ*,
  1258. opVPSLLQ*,
  1259. opVPSLLVD*,
  1260. opVPSLLVQ*,
  1261. opVPSLLW*,
  1262. opVPSRAD*,
  1263. opVPSRAVD*,
  1264. opVPSRAW*,
  1265. opVPSRLD*,
  1266. opVPSRLDQ*,
  1267. opVPSRLQ*,
  1268. opVPSRLVD*,
  1269. opVPSRLVQ*,
  1270. opVPSRLW*,
  1271. opVPSUBB*,
  1272. opVPSUBD*,
  1273. opVPSUBQ*,
  1274. opVPSUBSB*,
  1275. opVPSUBSW*,
  1276. opVPSUBUSB*,
  1277. opVPSUBUSW*,
  1278. opVPSUBW*,
  1279. opVPTEST*,
  1280. opVPUNPCKHBW*,
  1281. opVPUNPCKHDQ*,
  1282. opVPUNPCKHQDQ*,
  1283. opVPUNPCKHWD*,
  1284. opVPUNPCKLBW*,
  1285. opVPUNPCKLDQ*,
  1286. opVPUNPCKLQDQ*,
  1287. opVPUNPCKLWD*,
  1288. opVPXOR*,
  1289. opVRCPPS*,
  1290. opVRCPSS*,
  1291. opVROUNDPD*,
  1292. opVROUNDPS*,
  1293. opVROUNDSD*,
  1294. opVROUNDSS*,
  1295. opVRSQRTPS*,
  1296. opVRSQRTSS*,
  1297. opVSHUFPD*,
  1298. opVSHUFPS*,
  1299. opVSQRTPD*,
  1300. opVSQRTPS*,
  1301. opVSQRTSD*,
  1302. opVSQRTSS*,
  1303. opVSTMXCSR*,
  1304. opVSUBPD*,
  1305. opVSUBPS*,
  1306. opVSUBSD*,
  1307. opVSUBSS*,
  1308. opVTESTPD*,
  1309. opVTESTPS*,
  1310. opVUCOMISD*,
  1311. opVUCOMISS*,
  1312. opVUNPCKHPD*,
  1313. opVUNPCKHPS*,
  1314. opVUNPCKLPD*,
  1315. opVUNPCKLPS*,
  1316. opVXORPD*,
  1317. opVXORPS*,
  1318. opVZEROALL*,
  1319. opVZEROUPPER*
  1320. : LONGINT
  1321. (*
  1322. FoxProgTools.Enum -l=8 -e
  1323. opCode
  1324. modRMExtension
  1325. modRMBoth
  1326. cb cw cd cp
  1327. ib iw id iq
  1328. rb rw rd rq
  1329. mem64Operand mem128Operand
  1330. fpStackOperand
  1331. directMemoryOffset
  1332. ~
  1333. *)
  1334. CONST
  1335. (* opcode flags, cf [AMD:3], pp. 39-40 *)
  1336. opCode*= 0; modRMExtension*= 1; modRMBoth*= 2; cb*= 3; cw*= 4; cd*= 5; cp*= 6; ib*= 7;
  1337. iw*= 8; id*= 9; iq*= 10; rb*= 11; rw*= 12; rd*= 13; rq*= 14; mem64Operand*= 15;
  1338. mem128Operand*= 16; fpStackOperand*= 17; directMemoryOffset*= 18;
  1339. Src1Prefix* = 19; Src2Prefix* = 20; CountPrefix*= 21; DestPrefix*=22; RXB*=23;
  1340. TYPE
  1341. Name = ARRAY 20 OF CHAR;
  1342. OperandType* = SHORTINT;
  1343. CPUOptions*= SET;
  1344. Code*=CHAR; (* should be unsigned -- for emitter *)
  1345. Instruction* = RECORD
  1346. code-: ARRAY maxCodeLength OF Code; (* for the encoding cd. InitInstructions.Encode *)
  1347. operands-: ARRAY maxNumberOperands OF OperandType;
  1348. bitwidthOptions-: SET;
  1349. cpuOptions-: SET;
  1350. END;
  1351. Mnemonic* = RECORD
  1352. name-: ARRAY maxMnemonicNameLength OF CHAR;
  1353. firstInstruction-, lastInstruction-: LONGINT;
  1354. END;
  1355. CPUType* = RECORD
  1356. name-: Name;
  1357. cpuOptions-: SET;
  1358. END;
  1359. Register* = RECORD
  1360. name-: Name; (* name for debug output and for an assembler *)
  1361. type-: OperandType; (* can be one of reg8, reg16, reg32, reg64, CRn, DRn, segReg, mmx, xmm, sti
  1362. the particular value of reg8 ... sti does not have a meaning *)
  1363. index-: SHORTINT; (* this index has a meaning for instruction encoding, it is the register index used in the instruction *)
  1364. sizeInBytes-: SHORTINT; (* size in bytes *)
  1365. END;
  1366. VAR
  1367. (* repository *)
  1368. mnemonics-: ARRAY maxNumberMnemonics OF Mnemonic;
  1369. numberMnemonics: LONGINT;
  1370. instructions-: ARRAY maxNumberInstructions OF Instruction;
  1371. numberInstructions: LONGINT;
  1372. registers-: ARRAY numberRegisters OF Register;
  1373. registersByClass-: ARRAY sti+1 OF ARRAY 17 OF LONGINT;
  1374. cpus-: ARRAY maxCPUs OF CPUType;
  1375. cpuCount: LONGINT;
  1376. (* perform a binary search for the index of the specified mnemonic *)
  1377. PROCEDURE FindMnemonic* (CONST mnem: ARRAY OF CHAR): LONGINT;
  1378. VAR l, r, m: LONGINT;
  1379. BEGIN
  1380. l := 0;
  1381. r := numberMnemonics;
  1382. WHILE l # r DO
  1383. m := (l + r) DIV 2;
  1384. IF mnem < mnemonics[m].name THEN r := m;
  1385. ELSIF mnem > mnemonics[m].name THEN l := m + 1;
  1386. ELSE RETURN m;
  1387. END
  1388. END;
  1389. RETURN none;
  1390. END FindMnemonic;
  1391. (* search for the register name and return it's index *)
  1392. PROCEDURE FindRegister* (CONST reg: ARRAY OF CHAR): LONGINT;
  1393. VAR i: LONGINT;
  1394. BEGIN
  1395. FOR i := 0 TO numberRegisters - 1 DO
  1396. IF registers[i].name = reg THEN RETURN i END;
  1397. END;
  1398. RETURN none;
  1399. END FindRegister;
  1400. PROCEDURE RegisterType*(regNumber: LONGINT): OperandType;
  1401. BEGIN IF regNumber = none THEN RETURN none ELSE RETURN registers[regNumber].type END
  1402. END RegisterType;
  1403. PROCEDURE RegisterIndex*(regNumber: LONGINT): SHORTINT;
  1404. BEGIN IF regNumber = none THEN RETURN none ELSE RETURN registers[regNumber].index END
  1405. END RegisterIndex;
  1406. (* search for the CPU name and return it's index *)
  1407. PROCEDURE FindCPU* (CONST cpu: ARRAY OF CHAR): LONGINT;
  1408. VAR i: LONGINT;
  1409. BEGIN
  1410. FOR i := 0 TO cpuCount - 1 DO
  1411. IF cpus[i].name = cpu THEN RETURN i END;
  1412. END;
  1413. RETURN none;
  1414. END FindCPU;
  1415. PROCEDURE StringToOperand(CONST name: ARRAY OF CHAR): SHORTINT;
  1416. BEGIN
  1417. IF name = "" THEN RETURN none
  1418. ELSIF name = "1" THEN RETURN one;
  1419. ELSIF name = "3" THEN RETURN three;
  1420. ELSIF name = "reg8" THEN RETURN reg8;
  1421. ELSIF name = "reg16" THEN RETURN reg16;
  1422. ELSIF name = "reg32" THEN RETURN reg32;
  1423. ELSIF name = "reg64" THEN RETURN reg64;
  1424. ELSIF name = "reg" THEN RETURN reg3264;
  1425. ELSIF name = "CRn" THEN RETURN CRn
  1426. ELSIF name = "DRn" THEN RETURN DRn
  1427. ELSIF name = "segReg" THEN RETURN segReg
  1428. ELSIF name = "mmx" THEN RETURN mmx
  1429. ELSIF name = "xmm" THEN RETURN xmm
  1430. ELSIF name = "mem" THEN RETURN mem
  1431. ELSIF name = "imm" THEN RETURN imm
  1432. ELSIF name = "ioffset" THEN RETURN ioffset
  1433. ELSIF name = "pntr1616" THEN RETURN pntr1616
  1434. ELSIF name = "pntr1632" THEN RETURN pntr1632
  1435. ELSIF name = "AL" THEN RETURN AL;
  1436. ELSIF name = "AX" THEN RETURN AX;
  1437. ELSIF name = "CL" THEN RETURN CL;
  1438. ELSIF name = "CR8" THEN RETURN CR8;
  1439. ELSIF name = "CS" THEN RETURN CS;
  1440. ELSIF name = "DS" THEN RETURN DS;
  1441. ELSIF name = "DX" THEN RETURN DX;
  1442. ELSIF name = "EAX" THEN RETURN EAX;
  1443. ELSIF name = "ECX" THEN RETURN ECX;
  1444. ELSIF name = "ES" THEN RETURN ES;
  1445. ELSIF name = "FS" THEN RETURN FS;
  1446. ELSIF name = "GS" THEN RETURN GS;
  1447. ELSIF name = "RAX" THEN RETURN RAX;
  1448. ELSIF name = "SS" THEN RETURN SS;
  1449. ELSIF name = "rAX" THEN RETURN rAX;
  1450. ELSIF name = "ST(0)" THEN RETURN st0;
  1451. ELSIF name = "ST(i)" THEN RETURN sti;
  1452. ELSIF name = "imm16" THEN RETURN imm16
  1453. ELSIF name = "imm32" THEN RETURN imm32;
  1454. ELSIF name = "imm64" THEN RETURN imm64
  1455. ELSIF name = "imm8" THEN RETURN imm8
  1456. ELSIF name = "uimm16" THEN RETURN uimm16
  1457. ELSIF name = "uimm32" THEN RETURN uimm32
  1458. ELSIF name = "uimm8" THEN RETURN uimm8
  1459. ELSIF name = "simm16" THEN RETURN simm16
  1460. ELSIF name = "simm32" THEN RETURN simm32
  1461. ELSIF name = "simm8" THEN RETURN simm8
  1462. ELSIF name = "mem256" THEN RETURN mem256
  1463. ELSIF name = "mem128" THEN RETURN mem128
  1464. ELSIF name = "mem16" THEN RETURN mem16
  1465. ELSIF name = "mem32" THEN RETURN mem32
  1466. ELSIF name = "mem64" THEN RETURN mem64
  1467. ELSIF name = "mem8" THEN RETURN mem8
  1468. ELSIF name = "moffset16" THEN RETURN moffset16
  1469. ELSIF name = "moffset32" THEN RETURN moffset32
  1470. ELSIF name = "moffset64" THEN RETURN moffset64
  1471. ELSIF name = "moffset8" THEN RETURN moffset8
  1472. ELSIF name = "rel16off" THEN RETURN rel16off
  1473. ELSIF name = "rel32off" THEN RETURN rel32off
  1474. ELSIF name = "rel8off" THEN RETURN rel8off
  1475. ELSIF name = "reg/mem8" THEN RETURN regmem8;
  1476. ELSIF name = "reg/mem16" THEN RETURN regmem16;
  1477. ELSIF name = "reg/mem32" THEN RETURN regmem32;
  1478. ELSIF name = "reg32/mem32" THEN RETURN regmem32;
  1479. ELSIF name = "reg32/mem16" THEN RETURN reg32mem16;
  1480. ELSIF name = "reg/mem64" THEN RETURN regmem64;
  1481. ELSIF name = "reg64/mem64" THEN RETURN regmem64;
  1482. ELSIF name = "mem14/28env" THEN RETURN mem;
  1483. ELSIF name = "mem16&mem16" THEN RETURN mem;
  1484. ELSIF name = "mem32&mem32" THEN RETURN mem;
  1485. ELSIF name = "mem16:16" THEN RETURN mem;
  1486. ELSIF name = "mem16:32" THEN RETURN mem;
  1487. ELSIF name = "mem16:64" THEN RETURN mem;
  1488. ELSIF name = "mem512env" THEN RETURN mem;
  1489. ELSIF name = "mem80dec" THEN RETURN mem;
  1490. ELSIF name = "mem80real" THEN RETURN mem;
  1491. ELSIF name = "mem94/108env" THEN RETURN mem;
  1492. ELSIF name = "mem2env" THEN RETURN mem16;
  1493. ELSIF name = "xmm0" THEN RETURN xmm;
  1494. ELSIF name = "xmm1" THEN RETURN xmm;
  1495. ELSIF name = "xmm2" THEN RETURN xmm;
  1496. ELSIF name = "xmm3" THEN RETURN xmm;
  1497. ELSIF name = "xmm4" THEN RETURN xmm;
  1498. ELSIF name = "xmm/mem32" THEN RETURN xmmmem32;
  1499. ELSIF name = "xmm/mem64" THEN RETURN xmmmem64;
  1500. ELSIF name = "xmm/mem128" THEN RETURN xmmmem128;
  1501. ELSIF name = "xmm1/mem32" THEN RETURN xmmmem32;
  1502. ELSIF name = "xmm1/mem64" THEN RETURN xmmmem64;
  1503. ELSIF name = "xmm1/mem128" THEN RETURN xmmmem128;
  1504. ELSIF name = "xmm2/mem8" THEN RETURN xmmmem8;
  1505. ELSIF name = "xmm2/mem16" THEN RETURN xmmmem16;
  1506. ELSIF name = "xmm2/mem32" THEN RETURN xmmmem32;
  1507. ELSIF name = "xmm2/mem64" THEN RETURN xmmmem64;
  1508. ELSIF name = "xmm2/mem128" THEN RETURN xmmmem128;
  1509. ELSIF name = "xmm2/mem256" THEN RETURN xmmmem256;
  1510. ELSIF name = "xmm2/m64" THEN RETURN xmmmem64;
  1511. ELSIF name = "xmm2/m128" THEN RETURN xmmmem128;
  1512. ELSIF name = "xmm3/mem32" THEN RETURN xmmmem32;
  1513. ELSIF name = "xmm3/mem64" THEN RETURN xmmmem64;
  1514. ELSIF name = "xmm3/mem128" THEN RETURN xmmmem128;
  1515. ELSIF name = "xmm4/mem32" THEN RETURN xmmmem32;
  1516. ELSIF name = "xmm4/mem64" THEN RETURN xmmmem64;
  1517. ELSIF name = "xmm4/mem128" THEN RETURN xmmmem128;
  1518. ELSIF name = "mmx/mem64" THEN RETURN mmxmem64;
  1519. ELSIF name = "mmx1" THEN RETURN mmx;
  1520. ELSIF name = "mmx2" THEN RETURN mmx;
  1521. ELSIF name = "mmx1/mem64" THEN RETURN mmxmem64;
  1522. ELSIF name = "mmx2/mem32" THEN RETURN mmxmem32;
  1523. ELSIF name = "mmx2/mem64" THEN RETURN mmxmem64;
  1524. ELSIF name = "pntr16:16" THEN RETURN pntr1616;
  1525. ELSIF name = "pntr16:32" THEN RETURN pntr1632;
  1526. ELSIF name = "mem16int" THEN RETURN mem16;
  1527. ELSIF name = "mem32int" THEN RETURN mem32;
  1528. ELSIF name = "mem32real" THEN RETURN mem32;
  1529. ELSIF name = "mem64int" THEN RETURN mem64;
  1530. ELSIF name = "mem64real" THEN RETURN mem64;
  1531. ELSIF name = "ymm" THEN RETURN ymm;
  1532. ELSIF name = "ymm0" THEN RETURN ymm;
  1533. ELSIF name = "ymm1" THEN RETURN ymm;
  1534. ELSIF name = "ymm2" THEN RETURN ymm;
  1535. ELSIF name = "ymm3" THEN RETURN ymm;
  1536. ELSIF name = "ymm4" THEN RETURN ymm;
  1537. ELSIF name = "ymm1/mem256" THEN RETURN ymmmem256;
  1538. ELSIF name = "ymm1/m256" THEN RETURN ymmmem256;
  1539. ELSIF name = "ymm2/mem256" THEN RETURN ymmmem256;
  1540. ELSIF name = "ymm2/m256" THEN RETURN ymmmem256;
  1541. ELSIF name = "ymm3/mem256" THEN RETURN ymmmem256;
  1542. ELSIF name = "ymm1/mem128" THEN RETURN ymmmem128;
  1543. ELSIF name = "ymm1/m128" THEN RETURN ymmmem128;
  1544. ELSIF name = "ymm2/mem128" THEN RETURN ymmmem128;
  1545. ELSIF name = "ymm2/m128" THEN RETURN ymmmem128;
  1546. ELSIF name = "ymm3/mem128" THEN RETURN ymmmem128;
  1547. ELSIF name = "ymm4/mem256" THEN RETURN ymmmem256;
  1548. ELSIF name = "vm32x" THEN RETURN vm32x
  1549. ELSIF name = "vm32y" THEN RETURN vm32y
  1550. ELSIF name = "vm64x" THEN RETURN vm64x
  1551. ELSIF name = "vm64y" THEN RETURN vm64y
  1552. ELSIF name = "m2z" THEN RETURN m2z
  1553. ELSE HALT(200)
  1554. END;
  1555. END StringToOperand;
  1556. PROCEDURE ParseOperand(CONST op: ARRAY OF CHAR; VAR at: LONGINT): SHORTINT;
  1557. VAR name: ARRAY 32 OF CHAR; i: LONGINT;
  1558. BEGIN
  1559. i := 0;
  1560. WHILE(op[at] # 0X) & (op[at] # ",") DO
  1561. name[i] := op[at];
  1562. INC(i); INC(at);
  1563. END;
  1564. name[i] := 0X;
  1565. IF op[at] = "," THEN INC(at) END;
  1566. RETURN StringToOperand(name);
  1567. END ParseOperand;
  1568. (** setup instruction and mnemonic tables **)
  1569. PROCEDURE InitInstructions;
  1570. VAR
  1571. PROCEDURE AddMnemonic(VAR op: LONGINT; CONST name: ARRAY OF CHAR);
  1572. BEGIN
  1573. op := numberMnemonics;
  1574. COPY (name, mnemonics[op].name);
  1575. mnemonics[op].firstInstruction := -1;
  1576. INC(numberMnemonics);
  1577. END AddMnemonic;
  1578. PROCEDURE HexOrd (ch: CHAR): INTEGER;
  1579. BEGIN
  1580. IF ("0" <= ch) & (ch <= "9") THEN RETURN ORD (ch) - ORD ("0")
  1581. ELSIF ("A" <= ch) & (ch <= "F") THEN RETURN ORD (CAP (ch)) - ORD ("A") + 10
  1582. ELSE HALT(100);
  1583. END
  1584. END HexOrd;
  1585. PROCEDURE Encode(CONST charcode: ARRAY OF CHAR; VAR code: ARRAY OF Code);
  1586. (* simple encoding:
  1587. code =
  1588. {
  1589. opCode number
  1590. |modRMBoth
  1591. |modRMExtension number
  1592. |cb|cw|cd|cp
  1593. |ib|iw|id|iq
  1594. |m6|m1
  1595. |+i|+o
  1596. |rb|rw|rd|rq
  1597. }
  1598. none
  1599. {
  1600. none
  1601. }
  1602. all symbols 8 bit wide, numbers also 8 bits wide
  1603. *)
  1604. VAR i,k,length: SHORTINT; ch1,ch2: CHAR;
  1605. BEGIN
  1606. i := 0; k := 0;
  1607. WHILE(charcode[2*i] # 0X) DO
  1608. ch1 := charcode[2*i];
  1609. ch2 := charcode[2*i+1];
  1610. CASE ch1 OF
  1611. '0'..'9','A'..'F':
  1612. CASE ch2 OF '0'..'9','A'..'F':
  1613. code[k] := CHR(opCode);INC(k);
  1614. code[k] := CHR(HexOrd(ch1)*10H+HexOrd(ch2)); INC(k);
  1615. ELSE HALT(100)
  1616. END;
  1617. |'/':
  1618. CASE ch2 OF
  1619. 'r': code[k] := CHR(modRMBoth); INC(k);
  1620. |'0'..'7': code[k] := CHR(modRMExtension); INC(k); code[k] := CHR(HexOrd(ch2)); INC(k);
  1621. ELSE HALT(100)
  1622. END;
  1623. |'c':
  1624. CASE ch2 OF
  1625. 'b': code[k] := CHR(cb); INC(k);
  1626. |'w': code[k] := CHR(cw); INC(k);
  1627. |'d': code[k] := CHR(cd); INC(k);
  1628. |'p': code[k] := CHR(cp); INC(k);
  1629. ELSE HALT(100)
  1630. END;
  1631. |'i':
  1632. CASE ch2 OF
  1633. 'b': code[k] := CHR(ib); INC(k);
  1634. |'w': code[k] := CHR(iw); INC(k);
  1635. |'d': code[k] := CHR(id); INC(k);
  1636. |'q': code[k] := CHR(iq); INC(k);
  1637. ELSE HALT(100)
  1638. END;
  1639. |'m':
  1640. CASE ch2 OF
  1641. '6': code[k] := CHR(mem64Operand); INC(k);
  1642. |'1': code[k] := CHR(mem128Operand); INC(k);
  1643. ELSE HALT(100)
  1644. END;
  1645. |'+':
  1646. CASE ch2 OF
  1647. 'i': code[k] := CHR(fpStackOperand); INC(k);
  1648. |'o': code[k] := CHR(directMemoryOffset); INC(k);
  1649. ELSE HALT(100)
  1650. END;
  1651. |'r':
  1652. CASE ch2 OF
  1653. 'b': code[k] := CHR(rb); INC(k);
  1654. |'w': code[k] := CHR(rw); INC(k);
  1655. |'d': code[k] := CHR(rd); INC(k);
  1656. |'q': code[k] := CHR(rq); INC(k);
  1657. ELSE HALT(100)
  1658. END;
  1659. ELSE HALT(100)
  1660. END;
  1661. INC(i);
  1662. END;
  1663. length := k;
  1664. WHILE(k < LEN(code)) DO
  1665. code[k] := CHR(none);
  1666. INC(k);
  1667. END;
  1668. END Encode;
  1669. PROCEDURE EncodeV(CONST charcode: ARRAY OF CHAR; VAR code: ARRAY OF Code);
  1670. (* simple encoding:
  1671. code =
  1672. {
  1673. opCode number
  1674. |modRMBoth
  1675. |modRMExtension number
  1676. |cb|cw|cd|cp
  1677. |ib|iw|id|iq
  1678. |m6|m1
  1679. |+i|+o
  1680. |rb|rw|rd|rq
  1681. }
  1682. none
  1683. {
  1684. none
  1685. }
  1686. all symbols 8 bit wide, numbers also 8 bits wide
  1687. *)
  1688. PROCEDURE GetCode(CONST charcode: ARRAY OF CHAR; VAR at: LONGINT; VAR cd: ARRAY OF CHAR): BOOLEAN;
  1689. VAR i: LONGINT;
  1690. BEGIN
  1691. WHILE(charcode[at] = " ") DO INC(at) END;
  1692. IF charcode[at] = 0X THEN RETURN FALSE END;
  1693. i := 0;
  1694. WHILE (charcode[at] # " ") & (charcode[at] # 0X) DO
  1695. cd[i] := charcode[at];
  1696. INC(i); INC(at);
  1697. END;
  1698. cd[i] := 0X;
  1699. RETURN TRUE;
  1700. END GetCode;
  1701. VAR i,k,length: SHORTINT; ch1,ch2: CHAR; cdc: ARRAY 32 OF CHAR; at,mul,val: LONGINT;
  1702. BEGIN
  1703. i := 0; k := 0; at := 0;
  1704. WHILE(GetCode(charcode,at,cdc)) DO
  1705. ch1 := cdc[0];
  1706. ch2 := cdc[1];
  1707. IF (ch2 = ".") & ((ch1="0") OR (ch1="1") OR (ch1="X")) THEN
  1708. mul := 80H;
  1709. val := 0;
  1710. i := 0;
  1711. code[k] := CHR(opCode);
  1712. WHILE (cdc[i] # 0X) DO
  1713. IF (cdc[i] ="0") OR (cdc[i]="X") THEN
  1714. mul := mul DIV 2;
  1715. ELSIF cdc[i] = "1" THEN
  1716. INC(val, mul);
  1717. mul := mul DIV 2;
  1718. ELSIF cdc[i] = "." (* next *) THEN
  1719. ELSIF cdc[i] = "c" THEN
  1720. INC(i); ASSERT(cdc[i] ="o");
  1721. INC(i); ASSERT(cdc[i] ="u");
  1722. INC(i); ASSERT(cdc[i] ="n");
  1723. INC(i); ASSERT(cdc[i] ="t");
  1724. code[k] := CHR(CountPrefix);
  1725. mul := mul DIV 10H;
  1726. ELSIF cdc[i] = "d" THEN
  1727. INC(i); ASSERT(cdc[i] ="e");
  1728. INC(i); ASSERT(cdc[i] ="s");
  1729. INC(i); ASSERT(cdc[i] ="t");
  1730. code[k] := CHR(DestPrefix);
  1731. mul := mul DIV 10H;
  1732. ELSIF cdc[i] = "s" THEN
  1733. INC(i); ASSERT(cdc[i] ="r");
  1734. INC(i); ASSERT(cdc[i] ="c");
  1735. code[k] := CHR(Src1Prefix);
  1736. ASSERT(mul = 64);
  1737. IF (cdc[i+1] = "1") THEN
  1738. INC(i);
  1739. ELSIF (cdc[i+1] = "2") THEN
  1740. code[k] := CHR(Src2Prefix);
  1741. INC(i);
  1742. END;
  1743. mul := mul DIV 10H;
  1744. ELSE HALT(100);
  1745. END;
  1746. INC(i);
  1747. END;
  1748. INC(k);
  1749. code[k] := CHR(val); INC(k);
  1750. ELSIF (ch1="R") THEN
  1751. code[k] := CHR(RXB); INC(k);
  1752. IF (cdc = "RXB.00001") OR (cdc ="RXB.01") THEN
  1753. code[k] := CHR(1);
  1754. ELSIF (cdc ="RXB.00011") OR (cdc = "RXB.03") THEN
  1755. code[k] := CHR(3);
  1756. ELSIF (cdc ="RXB.00010") OR (cdc = "RXB.2") OR (cdc = "RXB.02") THEN
  1757. code[k] := CHR(2);
  1758. ELSIF (cdc ="RXB.01000") OR (cdc ="RXB.08") THEN
  1759. code[k] := CHR(8);
  1760. ELSIF cdc ="RXB.09" THEN
  1761. code[k] := CHR(9);
  1762. ELSE HALT(100)
  1763. END;
  1764. INC(k);
  1765. ELSE
  1766. CASE ch1 OF
  1767. '0'..'9','A'..'F':
  1768. CASE ch2 OF '0'..'9','A'..'F':
  1769. code[k] := CHR(opCode);INC(k);
  1770. code[k] := CHR(HexOrd(ch1)*10H+HexOrd(ch2)); INC(k);
  1771. ELSE HALT(100)
  1772. END;
  1773. |'/':
  1774. CASE ch2 OF
  1775. 'r': code[k] := CHR(modRMBoth); INC(k);
  1776. |'0'..'7': code[k] := CHR(modRMExtension); INC(k); code[k] := CHR(HexOrd(ch2)); INC(k);
  1777. ELSE
  1778. IF cdc = "/imm8" THEN
  1779. (*todo*)
  1780. ELSIF cdc = "/is4" THEN
  1781. (*todo*)
  1782. ELSIF cdc = "/ib" THEN
  1783. code[k] := CHR(ib); INC(k);
  1784. ELSE
  1785. HALT(100)
  1786. END;
  1787. END;
  1788. |'c':
  1789. CASE ch2 OF
  1790. 'b': code[k] := CHR(cb); INC(k);
  1791. |'w': code[k] := CHR(cw); INC(k);
  1792. |'d': code[k] := CHR(cd); INC(k);
  1793. |'p': code[k] := CHR(cp); INC(k);
  1794. ELSE HALT(100)
  1795. END;
  1796. |'i':
  1797. CASE ch2 OF
  1798. 'b': code[k] := CHR(ib); INC(k);
  1799. |'w': code[k] := CHR(iw); INC(k);
  1800. |'d': code[k] := CHR(id); INC(k);
  1801. |'q': code[k] := CHR(iq); INC(k);
  1802. ELSE
  1803. IF cdc = "is4" THEN
  1804. (*todo*)
  1805. ELSIF cdc = "is5" THEN
  1806. (*todo*)
  1807. ELSE
  1808. HALT(100)
  1809. END;
  1810. END;
  1811. |'m':
  1812. CASE ch2 OF
  1813. '6': code[k] := CHR(mem64Operand); INC(k);
  1814. |'1': code[k] := CHR(mem128Operand); INC(k);
  1815. ELSE HALT(100)
  1816. END;
  1817. |'+':
  1818. CASE ch2 OF
  1819. 'i': code[k] := CHR(fpStackOperand); INC(k);
  1820. |'o': code[k] := CHR(directMemoryOffset); INC(k);
  1821. ELSE HALT(100)
  1822. END;
  1823. |'r':
  1824. CASE ch2 OF
  1825. 'b': code[k] := CHR(rb); INC(k);
  1826. |'w': code[k] := CHR(rw); INC(k);
  1827. |'d': code[k] := CHR(rd); INC(k);
  1828. |'q': code[k] := CHR(rq); INC(k);
  1829. ELSE HALT(100)
  1830. END;
  1831. ELSE HALT(100)
  1832. END;
  1833. INC(i);
  1834. END;
  1835. END;
  1836. length := k;
  1837. WHILE(k < LEN(code)) DO
  1838. code[k] := CHR(none);
  1839. INC(k);
  1840. END;
  1841. END EncodeV;
  1842. PROCEDURE AddInstructionV(mnemonic: LONGINT; CONST operands, code: ARRAY OF CHAR);
  1843. VAR i, at: LONGINT; name: ARRAY 32 OF CHAR;
  1844. BEGIN
  1845. i := 0; at := 0;
  1846. WHILE (i<maxNumberOperands) DO
  1847. instructions[numberInstructions].operands[i] := ParseOperand(operands,at);
  1848. INC(i);
  1849. END;
  1850. ASSERT(operands[at] = 0X); (* all operands parsed *)
  1851. EncodeV(code,instructions[numberInstructions].code);
  1852. COPY(mnemonics[mnemonic].name,name);
  1853. IF mnemonics[mnemonic].firstInstruction = -1 THEN
  1854. mnemonics[mnemonic].firstInstruction := numberInstructions;
  1855. mnemonics[mnemonic].lastInstruction := numberInstructions;
  1856. ELSE
  1857. ASSERT(mnemonics[mnemonic].lastInstruction = numberInstructions-1);
  1858. mnemonics[mnemonic].lastInstruction := numberInstructions;
  1859. END;
  1860. INC(numberInstructions);
  1861. END AddInstructionV;
  1862. PROCEDURE AddInstruction(mnemonic: LONGINT; CONST op,code: ARRAY OF CHAR; bitwidthOptions, cpuOptions: SET);
  1863. VAR i: SHORTINT; at: LONGINT;
  1864. BEGIN
  1865. i := 0; at := 0;
  1866. WHILE (i<maxNumberOperands) DO
  1867. instructions[numberInstructions].operands[i] := ParseOperand(op,at);
  1868. INC(i);
  1869. END;
  1870. Encode(code,instructions[numberInstructions].code);
  1871. instructions[numberInstructions].bitwidthOptions := bitwidthOptions;
  1872. instructions[numberInstructions].cpuOptions := cpuOptions;
  1873. IF mnemonics[mnemonic].firstInstruction = -1 THEN
  1874. mnemonics[mnemonic].firstInstruction := numberInstructions;
  1875. mnemonics[mnemonic].lastInstruction := numberInstructions;
  1876. ELSE
  1877. ASSERT(mnemonics[mnemonic].lastInstruction = numberInstructions-1);
  1878. mnemonics[mnemonic].lastInstruction := numberInstructions;
  1879. END;
  1880. INC(numberInstructions);
  1881. END AddInstruction;
  1882. (* the following has partially been generated with
  1883. FoxProgTools.ParseAMDInstructionSet FoxInstructionSetAMD64TabSeperated.txt ~
  1884. Do not change or re-order. The alphabetical order is of importance
  1885. *)
  1886. BEGIN
  1887. numberMnemonics := 0;
  1888. numberInstructions := 0;
  1889. AddMnemonic(opAAA, "AAA");
  1890. AddMnemonic(opAAD, "AAD");
  1891. AddMnemonic(opAAM, "AAM");
  1892. AddMnemonic(opAAS, "AAS");
  1893. AddMnemonic(opADC, "ADC");
  1894. AddMnemonic(opADD, "ADD");
  1895. AddMnemonic(opADDPD, "ADDPD");
  1896. AddMnemonic(opADDPS, "ADDPS");
  1897. AddMnemonic(opADDSD, "ADDSD");
  1898. AddMnemonic(opADDSS, "ADDSS");
  1899. AddMnemonic(opADDSUBPD, "ADDSUBPD");
  1900. AddMnemonic(opADDSUBPS, "ADDSUBPS");
  1901. AddMnemonic(opAND, "AND");
  1902. AddMnemonic(opANDNPD, "ANDNPD");
  1903. AddMnemonic(opANDNPS, "ANDNPS");
  1904. AddMnemonic(opANDPD, "ANDPD");
  1905. AddMnemonic(opANDPS, "ANDPS");
  1906. AddMnemonic(opARPL, "ARPL");
  1907. AddMnemonic(opBOUND, "BOUND");
  1908. AddMnemonic(opBSF, "BSF");
  1909. AddMnemonic(opBSR, "BSR");
  1910. AddMnemonic(opBSWAP, "BSWAP");
  1911. AddMnemonic(opBT, "BT");
  1912. AddMnemonic(opBTC, "BTC");
  1913. AddMnemonic(opBTR, "BTR");
  1914. AddMnemonic(opBTS, "BTS");
  1915. AddMnemonic(opCALL, "CALL");
  1916. AddMnemonic(opCALLFAR, "CALLFAR");
  1917. AddMnemonic(opCBW, "CBW");
  1918. AddMnemonic(opCDQ, "CDQ");
  1919. AddMnemonic(opCDQE, "CDQE");
  1920. AddMnemonic(opCLC, "CLC");
  1921. AddMnemonic(opCLD, "CLD");
  1922. AddMnemonic(opCLFLUSH, "CLFLUSH");
  1923. AddMnemonic(opCLGI, "CLGI");
  1924. AddMnemonic(opCLI, "CLI");
  1925. AddMnemonic(opCLTS, "CLTS");
  1926. AddMnemonic(opCMC, "CMC");
  1927. AddMnemonic(opCMOVA, "CMOVA");
  1928. AddMnemonic(opCMOVAE, "CMOVAE");
  1929. AddMnemonic(opCMOVB, "CMOVB");
  1930. AddMnemonic(opCMOVBE, "CMOVBE");
  1931. AddMnemonic(opCMOVC, "CMOVC");
  1932. AddMnemonic(opCMOVE, "CMOVE");
  1933. AddMnemonic(opCMOVG, "CMOVG");
  1934. AddMnemonic(opCMOVGE, "CMOVGE");
  1935. AddMnemonic(opCMOVL, "CMOVL");
  1936. AddMnemonic(opCMOVLE, "CMOVLE");
  1937. AddMnemonic(opCMOVNA, "CMOVNA");
  1938. AddMnemonic(opCMOVNAE, "CMOVNAE");
  1939. AddMnemonic(opCMOVNB, "CMOVNB");
  1940. AddMnemonic(opCMOVNBE, "CMOVNBE");
  1941. AddMnemonic(opCMOVNC, "CMOVNC");
  1942. AddMnemonic(opCMOVNE, "CMOVNE");
  1943. AddMnemonic(opCMOVNG, "CMOVNG");
  1944. AddMnemonic(opCMOVNGE, "CMOVNGE");
  1945. AddMnemonic(opCMOVNL, "CMOVNL");
  1946. AddMnemonic(opCMOVNLE, "CMOVNLE");
  1947. AddMnemonic(opCMOVNO, "CMOVNO");
  1948. AddMnemonic(opCMOVNP, "CMOVNP");
  1949. AddMnemonic(opCMOVNS, "CMOVNS");
  1950. AddMnemonic(opCMOVNZ, "CMOVNZ");
  1951. AddMnemonic(opCMOVO, "CMOVO");
  1952. AddMnemonic(opCMOVP, "CMOVP");
  1953. AddMnemonic(opCMOVPE, "CMOVPE");
  1954. AddMnemonic(opCMOVPO, "CMOVPO");
  1955. AddMnemonic(opCMOVS, "CMOVS");
  1956. AddMnemonic(opCMOVZ, "CMOVZ");
  1957. AddMnemonic(opCMP, "CMP");
  1958. AddMnemonic(opCMPPD, "CMPPD");
  1959. AddMnemonic(opCMPPS, "CMPPS");
  1960. AddMnemonic(opCMPS, "CMPS");
  1961. AddMnemonic(opCMPSB, "CMPSB");
  1962. AddMnemonic(opCMPSD, "CMPSD");
  1963. AddMnemonic(opCMPSQ, "CMPSQ");
  1964. AddMnemonic(opCMPSS, "CMPSS");
  1965. AddMnemonic(opCMPSW, "CMPSW");
  1966. AddMnemonic(opCMPXCHG, "CMPXCHG");
  1967. AddMnemonic(opCMPXCHG16B, "CMPXCHG16B");
  1968. AddMnemonic(opCMPXCHG8B, "CMPXCHG8B");
  1969. AddMnemonic(opCOMISD, "COMISD");
  1970. AddMnemonic(opCOMISS, "COMISS");
  1971. AddMnemonic(opCPUID, "CPUID");
  1972. AddMnemonic(opCQO, "CQO");
  1973. AddMnemonic(opCVTDQ2PD, "CVTDQ2PD");
  1974. AddMnemonic(opCVTDQ2PS, "CVTDQ2PS");
  1975. AddMnemonic(opCVTPD2DQ, "CVTPD2DQ");
  1976. AddMnemonic(opCVTPD2PI, "CVTPD2PI");
  1977. AddMnemonic(opCVTPD2PS, "CVTPD2PS");
  1978. AddMnemonic(opCVTPI2PD, "CVTPI2PD");
  1979. AddMnemonic(opCVTPI2PS, "CVTPI2PS");
  1980. AddMnemonic(opCVTPS2DQ, "CVTPS2DQ");
  1981. AddMnemonic(opCVTPS2PD, "CVTPS2PD");
  1982. AddMnemonic(opCVTPS2PI, "CVTPS2PI");
  1983. AddMnemonic(opCVTSD2SI, "CVTSD2SI");
  1984. AddMnemonic(opCVTSD2SS, "CVTSD2SS");
  1985. AddMnemonic(opCVTSI2SD, "CVTSI2SD");
  1986. AddMnemonic(opCVTSI2SS, "CVTSI2SS");
  1987. AddMnemonic(opCVTSS2SD, "CVTSS2SD");
  1988. AddMnemonic(opCVTSS2SI, "CVTSS2SI");
  1989. AddMnemonic(opCVTTPD2DQ, "CVTTPD2DQ");
  1990. AddMnemonic(opCVTTPD2PI, "CVTTPD2PI");
  1991. AddMnemonic(opCVTTPS2DQ, "CVTTPS2DQ");
  1992. AddMnemonic(opCVTTPS2PI, "CVTTPS2PI");
  1993. AddMnemonic(opCVTTSD2SI, "CVTTSD2SI");
  1994. AddMnemonic(opCVTTSS2SI, "CVTTSS2SI");
  1995. AddMnemonic(opCWD, "CWD");
  1996. AddMnemonic(opCWDE, "CWDE");
  1997. AddMnemonic(opDAA, "DAA");
  1998. AddMnemonic(opDAS, "DAS");
  1999. AddMnemonic(opDEC, "DEC");
  2000. AddMnemonic(opDIV, "DIV");
  2001. AddMnemonic(opDIVPD, "DIVPD");
  2002. AddMnemonic(opDIVPS, "DIVPS");
  2003. AddMnemonic(opDIVSD, "DIVSD");
  2004. AddMnemonic(opDIVSS, "DIVSS");
  2005. AddMnemonic(opEMMS, "EMMS");
  2006. AddMnemonic(opENTER, "ENTER");
  2007. AddMnemonic(opF2XM1, "F2XM1");
  2008. AddMnemonic(opFABS, "FABS");
  2009. AddMnemonic(opFADD, "FADD");
  2010. AddMnemonic(opFADDP, "FADDP");
  2011. AddMnemonic(opFBLD, "FBLD");
  2012. AddMnemonic(opFBSTP, "FBSTP");
  2013. AddMnemonic(opFCHS, "FCHS");
  2014. AddMnemonic(opFCLEX, "FCLEX");
  2015. AddMnemonic(opFCMOVB, "FCMOVB");
  2016. AddMnemonic(opFCMOVBE, "FCMOVBE");
  2017. AddMnemonic(opFCMOVE, "FCMOVE");
  2018. AddMnemonic(opFCMOVNB, "FCMOVNB");
  2019. AddMnemonic(opFCMOVNBE, "FCMOVNBE");
  2020. AddMnemonic(opFCMOVNE, "FCMOVNE");
  2021. AddMnemonic(opFCMOVNU, "FCMOVNU");
  2022. AddMnemonic(opFCMOVU, "FCMOVU");
  2023. AddMnemonic(opFCOM, "FCOM");
  2024. AddMnemonic(opFCOMI, "FCOMI");
  2025. AddMnemonic(opFCOMIP, "FCOMIP");
  2026. AddMnemonic(opFCOMP, "FCOMP");
  2027. AddMnemonic(opFCOMPP, "FCOMPP");
  2028. AddMnemonic(opFCOS, "FCOS");
  2029. AddMnemonic(opFDECSTP, "FDECSTP");
  2030. AddMnemonic(opFDIV, "FDIV");
  2031. AddMnemonic(opFDIVP, "FDIVP");
  2032. AddMnemonic(opFDIVR, "FDIVR");
  2033. AddMnemonic(opFDIVRP, "FDIVRP");
  2034. AddMnemonic(opFEMMS, "FEMMS");
  2035. AddMnemonic(opFFREE, "FFREE");
  2036. AddMnemonic(opFIADD, "FIADD");
  2037. AddMnemonic(opFICOM, "FICOM");
  2038. AddMnemonic(opFICOMP, "FICOMP");
  2039. AddMnemonic(opFIDIV, "FIDIV");
  2040. AddMnemonic(opFIDIVR, "FIDIVR");
  2041. AddMnemonic(opFILD, "FILD");
  2042. AddMnemonic(opFIMUL, "FIMUL");
  2043. AddMnemonic(opFINCSTP, "FINCSTP");
  2044. AddMnemonic(opFINIT, "FINIT");
  2045. AddMnemonic(opFIST, "FIST");
  2046. AddMnemonic(opFISTP, "FISTP");
  2047. AddMnemonic(opFISTTP, "FISTTP");
  2048. AddMnemonic(opFISUB, "FISUB");
  2049. AddMnemonic(opFISUBR, "FISUBR");
  2050. AddMnemonic(opFLD, "FLD");
  2051. AddMnemonic(opFLD1, "FLD1");
  2052. AddMnemonic(opFLDCW, "FLDCW");
  2053. AddMnemonic(opFLDENV, "FLDENV");
  2054. AddMnemonic(opFLDL2E, "FLDL2E");
  2055. AddMnemonic(opFLDL2T, "FLDL2T");
  2056. AddMnemonic(opFLDLG2, "FLDLG2");
  2057. AddMnemonic(opFLDLN2, "FLDLN2");
  2058. AddMnemonic(opFLDPI, "FLDPI");
  2059. AddMnemonic(opFLDZ, "FLDZ");
  2060. AddMnemonic(opFMUL, "FMUL");
  2061. AddMnemonic(opFMULP, "FMULP");
  2062. AddMnemonic(opFNCLEX, "FNCLEX");
  2063. AddMnemonic(opFNINIT, "FNINIT");
  2064. AddMnemonic(opFNOP, "FNOP");
  2065. AddMnemonic(opFNSAVE, "FNSAVE");
  2066. AddMnemonic(opFNSTCW, "FNSTCW");
  2067. AddMnemonic(opFNSTENV, "FNSTENV");
  2068. AddMnemonic(opFNSTSW, "FNSTSW");
  2069. AddMnemonic(opFPATAN, "FPATAN");
  2070. AddMnemonic(opFPREM, "FPREM");
  2071. AddMnemonic(opFPREM1, "FPREM1");
  2072. AddMnemonic(opFPTAN, "FPTAN");
  2073. AddMnemonic(opFRNDINT, "FRNDINT");
  2074. AddMnemonic(opFRSTOR, "FRSTOR");
  2075. AddMnemonic(opFSAVE, "FSAVE");
  2076. AddMnemonic(opFSCALE, "FSCALE");
  2077. AddMnemonic(opFSIN, "FSIN");
  2078. AddMnemonic(opFSINCOS, "FSINCOS");
  2079. AddMnemonic(opFSQRT, "FSQRT");
  2080. AddMnemonic(opFST, "FST");
  2081. AddMnemonic(opFSTCW, "FSTCW");
  2082. AddMnemonic(opFSTENV, "FSTENV");
  2083. AddMnemonic(opFSTP, "FSTP");
  2084. AddMnemonic(opFSTSW, "FSTSW");
  2085. AddMnemonic(opFSUB, "FSUB");
  2086. AddMnemonic(opFSUBP, "FSUBP");
  2087. AddMnemonic(opFSUBR, "FSUBR");
  2088. AddMnemonic(opFSUBRP, "FSUBRP");
  2089. AddMnemonic(opFTST, "FTST");
  2090. AddMnemonic(opFUCOM, "FUCOM");
  2091. AddMnemonic(opFUCOMI, "FUCOMI");
  2092. AddMnemonic(opFUCOMIP, "FUCOMIP");
  2093. AddMnemonic(opFUCOMP, "FUCOMP");
  2094. AddMnemonic(opFUCOMPP, "FUCOMPP");
  2095. AddMnemonic(opFWAIT, "FWAIT");
  2096. AddMnemonic(opFXAM, "FXAM");
  2097. AddMnemonic(opFXCH, "FXCH");
  2098. AddMnemonic(opFXRSTOR, "FXRSTOR");
  2099. AddMnemonic(opFXSAVE, "FXSAVE");
  2100. AddMnemonic(opFXTRACT, "FXTRACT");
  2101. AddMnemonic(opFYL2X, "FYL2X");
  2102. AddMnemonic(opFYL2XP1, "FYL2XP1");
  2103. AddMnemonic(opHADDPD, "HADDPD");
  2104. AddMnemonic(opHADDPS, "HADDPS");
  2105. AddMnemonic(opHLT, "HLT");
  2106. AddMnemonic(opHSUBPD, "HSUBPD");
  2107. AddMnemonic(opHSUBPS, "HSUBPS");
  2108. AddMnemonic(opIDIV, "IDIV");
  2109. AddMnemonic(opIMUL, "IMUL");
  2110. AddMnemonic(opIN, "IN");
  2111. AddMnemonic(opINC, "INC");
  2112. AddMnemonic(opINS, "INS");
  2113. AddMnemonic(opINSB, "INSB");
  2114. AddMnemonic(opINSD, "INSD");
  2115. AddMnemonic(opINSW, "INSW");
  2116. AddMnemonic(opINT, "INT");
  2117. AddMnemonic(opINT3, "INT3");
  2118. AddMnemonic(opINTO, "INTO");
  2119. AddMnemonic(opINVD, "INVD");
  2120. AddMnemonic(opINVLPG, "INVLPG");
  2121. AddMnemonic(opINVLPGA, "INVLPGA");
  2122. AddMnemonic(opIRET, "IRET");
  2123. AddMnemonic(opIRETD, "IRETD");
  2124. AddMnemonic(opIRETQ, "IRETQ");
  2125. AddMnemonic(opJA, "JA");
  2126. AddMnemonic(opJAE, "JAE");
  2127. AddMnemonic(opJB, "JB");
  2128. AddMnemonic(opJBE, "JBE");
  2129. AddMnemonic(opJC, "JC");
  2130. AddMnemonic(opJCXZ, "JCXZ");
  2131. AddMnemonic(opJE, "JE");
  2132. AddMnemonic(opJECXZ, "JECXZ");
  2133. AddMnemonic(opJG, "JG");
  2134. AddMnemonic(opJGE, "JGE");
  2135. AddMnemonic(opJL, "JL");
  2136. AddMnemonic(opJLE, "JLE");
  2137. AddMnemonic(opJMP, "JMP");
  2138. AddMnemonic(opJMPFAR, "JMPFAR");
  2139. AddMnemonic(opJNA, "JNA");
  2140. AddMnemonic(opJNAE, "JNAE");
  2141. AddMnemonic(opJNB, "JNB");
  2142. AddMnemonic(opJNBE, "JNBE");
  2143. AddMnemonic(opJNC, "JNC");
  2144. AddMnemonic(opJNE, "JNE");
  2145. AddMnemonic(opJNG, "JNG");
  2146. AddMnemonic(opJNGE, "JNGE");
  2147. AddMnemonic(opJNL, "JNL");
  2148. AddMnemonic(opJNLE, "JNLE");
  2149. AddMnemonic(opJNO, "JNO");
  2150. AddMnemonic(opJNP, "JNP");
  2151. AddMnemonic(opJNS, "JNS");
  2152. AddMnemonic(opJNZ, "JNZ");
  2153. AddMnemonic(opJO, "JO");
  2154. AddMnemonic(opJP, "JP");
  2155. AddMnemonic(opJPE, "JPE");
  2156. AddMnemonic(opJPO, "JPO");
  2157. AddMnemonic(opJRCXZ, "JRCXZ");
  2158. AddMnemonic(opJS, "JS");
  2159. AddMnemonic(opJZ, "JZ");
  2160. AddMnemonic(opLAHF, "LAHF");
  2161. AddMnemonic(opLAR, "LAR");
  2162. AddMnemonic(opLDDQU, "LDDQU");
  2163. AddMnemonic(opLDMXCSR, "LDMXCSR");
  2164. AddMnemonic(opLDS, "LDS");
  2165. AddMnemonic(opLEA, "LEA");
  2166. AddMnemonic(opLEAVE, "LEAVE");
  2167. AddMnemonic(opLES, "LES");
  2168. AddMnemonic(opLFENCE, "LFENCE");
  2169. AddMnemonic(opLFS, "LFS");
  2170. AddMnemonic(opLGDT, "LGDT");
  2171. AddMnemonic(opLGS, "LGS");
  2172. AddMnemonic(opLIDT, "LIDT");
  2173. AddMnemonic(opLLDT, "LLDT");
  2174. AddMnemonic(opLMSW, "LMSW");
  2175. AddMnemonic(opLODS, "LODS");
  2176. AddMnemonic(opLODSB, "LODSB");
  2177. AddMnemonic(opLODSD, "LODSD");
  2178. AddMnemonic(opLODSQ, "LODSQ");
  2179. AddMnemonic(opLODSW, "LODSW");
  2180. AddMnemonic(opLOOP, "LOOP");
  2181. AddMnemonic(opLOOPE, "LOOPE");
  2182. AddMnemonic(opLOOPNE, "LOOPNE");
  2183. AddMnemonic(opLOOPNZ, "LOOPNZ");
  2184. AddMnemonic(opLOOPZ, "LOOPZ");
  2185. AddMnemonic(opLSL, "LSL");
  2186. AddMnemonic(opLSS, "LSS");
  2187. AddMnemonic(opLTR, "LTR");
  2188. AddMnemonic(opMASKMOVDQU, "MASKMOVDQU");
  2189. AddMnemonic(opMASKMOVQ, "MASKMOVQ");
  2190. AddMnemonic(opMAXPD, "MAXPD");
  2191. AddMnemonic(opMAXPS, "MAXPS");
  2192. AddMnemonic(opMAXSD, "MAXSD");
  2193. AddMnemonic(opMAXSS, "MAXSS");
  2194. AddMnemonic(opMFENCE, "MFENCE");
  2195. AddMnemonic(opMINPD, "MINPD");
  2196. AddMnemonic(opMINPS, "MINPS");
  2197. AddMnemonic(opMINSD, "MINSD");
  2198. AddMnemonic(opMINSS, "MINSS");
  2199. AddMnemonic(opMOV, "MOV");
  2200. AddMnemonic(opMOVAPD, "MOVAPD");
  2201. AddMnemonic(opMOVAPS, "MOVAPS");
  2202. AddMnemonic(opMOVD, "MOVD");
  2203. AddMnemonic(opMOVDDUP, "MOVDDUP");
  2204. AddMnemonic(opMOVDQ2Q, "MOVDQ2Q");
  2205. AddMnemonic(opMOVDQA, "MOVDQA");
  2206. AddMnemonic(opMOVDQU, "MOVDQU");
  2207. AddMnemonic(opMOVHLPS, "MOVHLPS");
  2208. AddMnemonic(opMOVHPD, "MOVHPD");
  2209. AddMnemonic(opMOVHPS, "MOVHPS");
  2210. AddMnemonic(opMOVLHPS, "MOVLHPS");
  2211. AddMnemonic(opMOVLPD, "MOVLPD");
  2212. AddMnemonic(opMOVLPS, "MOVLPS");
  2213. AddMnemonic(opMOVMSKPD, "MOVMSKPD");
  2214. AddMnemonic(opMOVMSKPS, "MOVMSKPS");
  2215. AddMnemonic(opMOVNTDQ, "MOVNTDQ");
  2216. AddMnemonic(opMOVNTI, "MOVNTI");
  2217. AddMnemonic(opMOVNTPD, "MOVNTPD");
  2218. AddMnemonic(opMOVNTPS, "MOVNTPS");
  2219. AddMnemonic(opMOVNTQ, "MOVNTQ");
  2220. AddMnemonic(opMOVQ, "MOVQ");
  2221. AddMnemonic(opMOVQ2DQ, "MOVQ2DQ");
  2222. AddMnemonic(opMOVS, "MOVS");
  2223. AddMnemonic(opMOVSB, "MOVSB");
  2224. AddMnemonic(opMOVSD, "MOVSD");
  2225. AddMnemonic(opMOVSHDUP, "MOVSHDUP");
  2226. AddMnemonic(opMOVSLDUP, "MOVSLDUP");
  2227. AddMnemonic(opMOVSQ, "MOVSQ");
  2228. AddMnemonic(opMOVSS, "MOVSS");
  2229. AddMnemonic(opMOVSW, "MOVSW");
  2230. AddMnemonic(opMOVSX, "MOVSX");
  2231. AddMnemonic(opMOVSXD, "MOVSXD");
  2232. AddMnemonic(opMOVUPD, "MOVUPD");
  2233. AddMnemonic(opMOVUPS, "MOVUPS");
  2234. AddMnemonic(opMOVZX, "MOVZX");
  2235. AddMnemonic(opMUL, "MUL");
  2236. AddMnemonic(opMULPD, "MULPD");
  2237. AddMnemonic(opMULPS, "MULPS");
  2238. AddMnemonic(opMULSD, "MULSD");
  2239. AddMnemonic(opMULSS, "MULSS");
  2240. AddMnemonic(opNEG, "NEG");
  2241. AddMnemonic(opNOP, "NOP");
  2242. AddMnemonic(opNOT, "NOT");
  2243. AddMnemonic(opOR, "OR");
  2244. AddMnemonic(opORPD, "ORPD");
  2245. AddMnemonic(opORPS, "ORPS");
  2246. AddMnemonic(opOUT, "OUT");
  2247. AddMnemonic(opOUTS, "OUTS");
  2248. AddMnemonic(opOUTSB, "OUTSB");
  2249. AddMnemonic(opOUTSD, "OUTSD");
  2250. AddMnemonic(opOUTSW, "OUTSW");
  2251. AddMnemonic(opPACKSSDW, "PACKSSDW");
  2252. AddMnemonic(opPACKSSWB, "PACKSSWB");
  2253. AddMnemonic(opPACKUSWB, "PACKUSWB");
  2254. AddMnemonic(opPADDB, "PADDB");
  2255. AddMnemonic(opPADDD, "PADDD");
  2256. AddMnemonic(opPADDQ, "PADDQ");
  2257. AddMnemonic(opPADDSB, "PADDSB");
  2258. AddMnemonic(opPADDSW, "PADDSW");
  2259. AddMnemonic(opPADDUSB, "PADDUSB");
  2260. AddMnemonic(opPADDUSW, "PADDUSW");
  2261. AddMnemonic(opPADDW, "PADDW");
  2262. AddMnemonic(opPAND, "PAND");
  2263. AddMnemonic(opPANDN, "PANDN");
  2264. AddMnemonic(opPAUSE, "PAUSE");
  2265. AddMnemonic(opPAVGB, "PAVGB");
  2266. AddMnemonic(opPAVGUSB, "PAVGUSB");
  2267. AddMnemonic(opPAVGW, "PAVGW");
  2268. AddMnemonic(opPCMPEQB, "PCMPEQB");
  2269. AddMnemonic(opPCMPEQD, "PCMPEQD");
  2270. AddMnemonic(opPCMPEQW, "PCMPEQW");
  2271. AddMnemonic(opPCMPGTB, "PCMPGTB");
  2272. AddMnemonic(opPCMPGTD, "PCMPGTD");
  2273. AddMnemonic(opPCMPGTW, "PCMPGTW");
  2274. AddMnemonic(opPEXTRW, "PEXTRW");
  2275. AddMnemonic(opPF2ID, "PF2ID");
  2276. AddMnemonic(opPF2IW, "PF2IW");
  2277. AddMnemonic(opPFACC, "PFACC");
  2278. AddMnemonic(opPFADD, "PFADD");
  2279. AddMnemonic(opPFCMPEQ, "PFCMPEQ");
  2280. AddMnemonic(opPFCMPGE, "PFCMPGE");
  2281. AddMnemonic(opPFCMPGT, "PFCMPGT");
  2282. AddMnemonic(opPFMAX, "PFMAX");
  2283. AddMnemonic(opPFMIN, "PFMIN");
  2284. AddMnemonic(opPFMUL, "PFMUL");
  2285. AddMnemonic(opPFNACC, "PFNACC");
  2286. AddMnemonic(opPFPNACC, "PFPNACC");
  2287. AddMnemonic(opPFRCP, "PFRCP");
  2288. AddMnemonic(opPFRCPIT1, "PFRCPIT1");
  2289. AddMnemonic(opPFRCPIT2, "PFRCPIT2");
  2290. AddMnemonic(opPFRSQIT1, "PFRSQIT1");
  2291. AddMnemonic(opPFRSQRT, "PFRSQRT");
  2292. AddMnemonic(opPFSUB, "PFSUB");
  2293. AddMnemonic(opPFSUBR, "PFSUBR");
  2294. AddMnemonic(opPI2FD, "PI2FD");
  2295. AddMnemonic(opPI2FW, "PI2FW");
  2296. AddMnemonic(opPINSRW, "PINSRW");
  2297. AddMnemonic(opPMADDWD, "PMADDWD");
  2298. AddMnemonic(opPMAXSW, "PMAXSW");
  2299. AddMnemonic(opPMAXUB, "PMAXUB");
  2300. AddMnemonic(opPMINSW, "PMINSW");
  2301. AddMnemonic(opPMINUB, "PMINUB");
  2302. AddMnemonic(opPMOVMSKB, "PMOVMSKB");
  2303. AddMnemonic(opPMULHRW, "PMULHRW");
  2304. AddMnemonic(opPMULHUW, "PMULHUW");
  2305. AddMnemonic(opPMULHW, "PMULHW");
  2306. AddMnemonic(opPMULLW, "PMULLW");
  2307. AddMnemonic(opPMULUDQ, "PMULUDQ");
  2308. AddMnemonic(opPOP, "POP");
  2309. AddMnemonic(opPOPA, "POPA");
  2310. AddMnemonic(opPOPAD, "POPAD");
  2311. AddMnemonic(opPOPAW, "POPAW");
  2312. AddMnemonic(opPOPF, "POPF");
  2313. AddMnemonic(opPOPFD, "POPFD");
  2314. AddMnemonic(opPOPFQ, "POPFQ");
  2315. AddMnemonic(opPOR, "POR");
  2316. AddMnemonic(opPREFETCH, "PREFETCH");
  2317. AddMnemonic(opPREFETCHNTA, "PREFETCHNTA");
  2318. AddMnemonic(opPREFETCHT0, "PREFETCHT0");
  2319. AddMnemonic(opPREFETCHT1, "PREFETCHT1");
  2320. AddMnemonic(opPREFETCHT2, "PREFETCHT2");
  2321. AddMnemonic(opPREFETCHW, "PREFETCHW");
  2322. AddMnemonic(opPSADBW, "PSADBW");
  2323. AddMnemonic(opPSHUFD, "PSHUFD");
  2324. AddMnemonic(opPSHUFHW, "PSHUFHW");
  2325. AddMnemonic(opPSHUFLW, "PSHUFLW");
  2326. AddMnemonic(opPSHUFW, "PSHUFW");
  2327. AddMnemonic(opPSLLD, "PSLLD");
  2328. AddMnemonic(opPSLLDQ, "PSLLDQ");
  2329. AddMnemonic(opPSLLQ, "PSLLQ");
  2330. AddMnemonic(opPSLLW, "PSLLW");
  2331. AddMnemonic(opPSRAD, "PSRAD");
  2332. AddMnemonic(opPSRAW, "PSRAW");
  2333. AddMnemonic(opPSRLD, "PSRLD");
  2334. AddMnemonic(opPSRLDQ, "PSRLDQ");
  2335. AddMnemonic(opPSRLQ, "PSRLQ");
  2336. AddMnemonic(opPSRLW, "PSRLW");
  2337. AddMnemonic(opPSUBB, "PSUBB");
  2338. AddMnemonic(opPSUBD, "PSUBD");
  2339. AddMnemonic(opPSUBQ, "PSUBQ");
  2340. AddMnemonic(opPSUBSB, "PSUBSB");
  2341. AddMnemonic(opPSUBSW, "PSUBSW");
  2342. AddMnemonic(opPSUBUSB, "PSUBUSB");
  2343. AddMnemonic(opPSUBUSW, "PSUBUSW");
  2344. AddMnemonic(opPSUBW, "PSUBW");
  2345. AddMnemonic(opPSWAPD, "PSWAPD");
  2346. AddMnemonic(opPUNPCKHBW, "PUNPCKHBW");
  2347. AddMnemonic(opPUNPCKHDQ, "PUNPCKHDQ");
  2348. AddMnemonic(opPUNPCKHQDQ, "PUNPCKHQDQ");
  2349. AddMnemonic(opPUNPCKHWD, "PUNPCKHWD");
  2350. AddMnemonic(opPUNPCKLBW, "PUNPCKLBW");
  2351. AddMnemonic(opPUNPCKLDQ, "PUNPCKLDQ");
  2352. AddMnemonic(opPUNPCKLQDQ, "PUNPCKLQDQ");
  2353. AddMnemonic(opPUNPCKLWD, "PUNPCKLWD");
  2354. AddMnemonic(opPUSH, "PUSH");
  2355. AddMnemonic(opPUSHA, "PUSHA");
  2356. AddMnemonic(opPUSHAD, "PUSHAD");
  2357. AddMnemonic(opPUSHF, "PUSHF");
  2358. AddMnemonic(opPUSHFD, "PUSHFD");
  2359. AddMnemonic(opPUSHFQ, "PUSHFQ");
  2360. AddMnemonic(opPXOR, "PXOR");
  2361. AddMnemonic(opRCL, "RCL");
  2362. AddMnemonic(opRCPPS, "RCPPS");
  2363. AddMnemonic(opRCPSS, "RCPSS");
  2364. AddMnemonic(opRCR, "RCR");
  2365. AddMnemonic(opRDMSR, "RDMSR");
  2366. AddMnemonic(opRDPMC, "RDPMC");
  2367. AddMnemonic(opRDTSC, "RDTSC");
  2368. AddMnemonic(opRDTSCP, "RDTSCP");
  2369. AddMnemonic(opRET, "RET");
  2370. AddMnemonic(opRETF, "RETF");
  2371. AddMnemonic(opROL, "ROL");
  2372. AddMnemonic(opROR, "ROR");
  2373. AddMnemonic(opRSM, "RSM");
  2374. AddMnemonic(opRSQRTPS, "RSQRTPS");
  2375. AddMnemonic(opRSQRTSS, "RSQRTSS");
  2376. AddMnemonic(opSAHF, "SAHF");
  2377. AddMnemonic(opSAL, "SAL");
  2378. AddMnemonic(opSAR, "SAR");
  2379. AddMnemonic(opSBB, "SBB");
  2380. AddMnemonic(opSCAS, "SCAS");
  2381. AddMnemonic(opSCASB, "SCASB");
  2382. AddMnemonic(opSCASD, "SCASD");
  2383. AddMnemonic(opSCASQ, "SCASQ");
  2384. AddMnemonic(opSCASW, "SCASW");
  2385. AddMnemonic(opSETA, "SETA");
  2386. AddMnemonic(opSETAE, "SETAE");
  2387. AddMnemonic(opSETB, "SETB");
  2388. AddMnemonic(opSETBE, "SETBE");
  2389. AddMnemonic(opSETC, "SETC");
  2390. AddMnemonic(opSETE, "SETE");
  2391. AddMnemonic(opSETG, "SETG");
  2392. AddMnemonic(opSETGE, "SETGE");
  2393. AddMnemonic(opSETL, "SETL");
  2394. AddMnemonic(opSETLE, "SETLE");
  2395. AddMnemonic(opSETNA, "SETNA");
  2396. AddMnemonic(opSETNAE, "SETNAE");
  2397. AddMnemonic(opSETNB, "SETNB");
  2398. AddMnemonic(opSETNBE, "SETNBE");
  2399. AddMnemonic(opSETNC, "SETNC");
  2400. AddMnemonic(opSETNE, "SETNE");
  2401. AddMnemonic(opSETNG, "SETNG");
  2402. AddMnemonic(opSETNGE, "SETNGE");
  2403. AddMnemonic(opSETNL, "SETNL");
  2404. AddMnemonic(opSETNLE, "SETNLE");
  2405. AddMnemonic(opSETNO, "SETNO");
  2406. AddMnemonic(opSETNP, "SETNP");
  2407. AddMnemonic(opSETNS, "SETNS");
  2408. AddMnemonic(opSETNZ, "SETNZ");
  2409. AddMnemonic(opSETO, "SETO");
  2410. AddMnemonic(opSETP, "SETP");
  2411. AddMnemonic(opSETPE, "SETPE");
  2412. AddMnemonic(opSETPO, "SETPO");
  2413. AddMnemonic(opSETS, "SETS");
  2414. AddMnemonic(opSETZ, "SETZ");
  2415. AddMnemonic(opSFENCE, "SFENCE");
  2416. AddMnemonic(opSGDT, "SGDT");
  2417. AddMnemonic(opSHL, "SHL");
  2418. AddMnemonic(opSHLD, "SHLD");
  2419. AddMnemonic(opSHR, "SHR");
  2420. AddMnemonic(opSHRD, "SHRD");
  2421. AddMnemonic(opSHUFPD, "SHUFPD");
  2422. AddMnemonic(opSHUFPS, "SHUFPS");
  2423. AddMnemonic(opSIDT, "SIDT");
  2424. AddMnemonic(opSKINIT, "SKINIT");
  2425. AddMnemonic(opSLDT, "SLDT");
  2426. AddMnemonic(opSMSW, "SMSW");
  2427. AddMnemonic(opSQRTPD, "SQRTPD");
  2428. AddMnemonic(opSQRTPS, "SQRTPS");
  2429. AddMnemonic(opSQRTSD, "SQRTSD");
  2430. AddMnemonic(opSQRTSS, "SQRTSS");
  2431. AddMnemonic(opSTC, "STC");
  2432. AddMnemonic(opSTD, "STD");
  2433. AddMnemonic(opSTGI, "STGI");
  2434. AddMnemonic(opSTI, "STI");
  2435. AddMnemonic(opSTMXCSR, "STMXCSR");
  2436. AddMnemonic(opSTOS, "STOS");
  2437. AddMnemonic(opSTOSB, "STOSB");
  2438. AddMnemonic(opSTOSD, "STOSD");
  2439. AddMnemonic(opSTOSQ, "STOSQ");
  2440. AddMnemonic(opSTOSW, "STOSW");
  2441. AddMnemonic(opSTR, "STR");
  2442. AddMnemonic(opSUB, "SUB");
  2443. AddMnemonic(opSUBPD, "SUBPD");
  2444. AddMnemonic(opSUBPS, "SUBPS");
  2445. AddMnemonic(opSUBSD, "SUBSD");
  2446. AddMnemonic(opSUBSS, "SUBSS");
  2447. AddMnemonic(opSWAPGS, "SWAPGS");
  2448. AddMnemonic(opSYSCALL, "SYSCALL");
  2449. AddMnemonic(opSYSENTER, "SYSENTER");
  2450. AddMnemonic(opSYSEXIT, "SYSEXIT");
  2451. AddMnemonic(opSYSRET, "SYSRET");
  2452. AddMnemonic(opTEST, "TEST");
  2453. AddMnemonic(opUCOMISD, "UCOMISD");
  2454. AddMnemonic(opUCOMISS, "UCOMISS");
  2455. AddMnemonic(opUD2, "UD2");
  2456. AddMnemonic(opUNPCKHPD, "UNPCKHPD");
  2457. AddMnemonic(opUNPCKHPS, "UNPCKHPS");
  2458. AddMnemonic(opUNPCKLPD, "UNPCKLPD");
  2459. AddMnemonic(opUNPCKLPS, "UNPCKLPS");
  2460. AddMnemonic(opVADDPD, "VADDPD");
  2461. AddMnemonic(opVADDPS, "VADDPS");
  2462. AddMnemonic(opVADDSD, "VADDSD");
  2463. AddMnemonic(opVADDSS, "VADDSS");
  2464. AddMnemonic(opVADDSUBPD, "VADDSUBPD");
  2465. AddMnemonic(opVADDSUBPS, "VADDSUBPS");
  2466. AddMnemonic(opVAESDEC, "VAESDEC");
  2467. AddMnemonic(opVAESDECLAST, "VAESDECLAST");
  2468. AddMnemonic(opVAESENC, "VAESENC");
  2469. AddMnemonic(opVAESENCLAST, "VAESENCLAST");
  2470. AddMnemonic(opVAESIMC, "VAESIMC");
  2471. AddMnemonic(opVAESKEYGENASSIST, "VAESKEYGENASSIST");
  2472. AddMnemonic(opVANDNPD, "VANDNPD");
  2473. AddMnemonic(opVANDNPS, "VANDNPS");
  2474. AddMnemonic(opVANDPD, "VANDPD");
  2475. AddMnemonic(opVANDPS, "VANDPS");
  2476. AddMnemonic(opVBLENDPD, "VBLENDPD");
  2477. AddMnemonic(opVBLENDPS, "VBLENDPS");
  2478. AddMnemonic(opVBLENDVPD, "VBLENDVPD");
  2479. AddMnemonic(opVBLENDVPS, "VBLENDVPS");
  2480. AddMnemonic(opVBROADCASTF128, "VBROADCASTF128");
  2481. AddMnemonic(opVBROADCASTI128, "VBROADCASTI128");
  2482. AddMnemonic(opVBROADCASTSD, "VBROADCASTSD");
  2483. AddMnemonic(opVBROADCASTSS, "VBROADCASTSS");
  2484. AddMnemonic(opVCMPPD, "VCMPPD");
  2485. AddMnemonic(opVCMPPS, "VCMPPS");
  2486. AddMnemonic(opVCMPSD, "VCMPSD");
  2487. AddMnemonic(opVCMPSS, "VCMPSS");
  2488. AddMnemonic(opVCOMISD, "VCOMISD");
  2489. AddMnemonic(opVCOMISS, "VCOMISS");
  2490. AddMnemonic(opVCVTDQ2PD, "VCVTDQ2PD");
  2491. AddMnemonic(opVCVTDQ2PS, "VCVTDQ2PS");
  2492. AddMnemonic(opVCVTPD2DQ, "VCVTPD2DQ");
  2493. AddMnemonic(opVCVTPD2PS, "VCVTPD2PS");
  2494. AddMnemonic(opVCVTPH2PS, "VCVTPH2PS");
  2495. AddMnemonic(opVCVTPS2DQ, "VCVTPS2DQ");
  2496. AddMnemonic(opVCVTPS2PD, "VCVTPS2PD");
  2497. AddMnemonic(opVCVTPS2PH, "VCVTPS2PH");
  2498. AddMnemonic(opVCVTSD2SI, "VCVTSD2SI");
  2499. AddMnemonic(opVCVTSD2SS, "VCVTSD2SS");
  2500. AddMnemonic(opVCVTSI2SD, "VCVTSI2SD");
  2501. AddMnemonic(opVCVTSI2SS, "VCVTSI2SS");
  2502. AddMnemonic(opVCVTSS2SD, "VCVTSS2SD");
  2503. AddMnemonic(opVCVTSS2SI, "VCVTSS2SI");
  2504. AddMnemonic(opVCVTTPD2DQ, "VCVTTPD2DQ");
  2505. AddMnemonic(opVCVTTPS2DQ, "VCVTTPS2DQ");
  2506. AddMnemonic(opVCVTTSD2SI, "VCVTTSD2SI");
  2507. AddMnemonic(opVCVTTSS2SI, "VCVTTSS2SI");
  2508. AddMnemonic(opVDIVPD, "VDIVPD");
  2509. AddMnemonic(opVDIVPS, "VDIVPS");
  2510. AddMnemonic(opVDIVSD, "VDIVSD");
  2511. AddMnemonic(opVDIVSS, "VDIVSS");
  2512. AddMnemonic(opVDPPD, "VDPPD");
  2513. AddMnemonic(opVDPPS, "VDPPS");
  2514. AddMnemonic(opVERR, "VERR");
  2515. AddMnemonic(opVERW, "VERW");
  2516. AddMnemonic(opVEXTRACTF128, "VEXTRACTF128");
  2517. AddMnemonic(opVEXTRACTI128, "VEXTRACTI128");
  2518. AddMnemonic(opVEXTRACTPS, "VEXTRACTPS");
  2519. AddMnemonic(opVFMADD132PD, "VFMADD132PD");
  2520. AddMnemonic(opVFMADD132PS, "VFMADD132PS");
  2521. AddMnemonic(opVFMADD132SD, "VFMADD132SD");
  2522. AddMnemonic(opVFMADD132SS, "VFMADD132SS");
  2523. AddMnemonic(opVFMADD213PD, "VFMADD213PD");
  2524. AddMnemonic(opVFMADD213PS, "VFMADD213PS");
  2525. AddMnemonic(opVFMADD213SD, "VFMADD213SD");
  2526. AddMnemonic(opVFMADD213SS, "VFMADD213SS");
  2527. AddMnemonic(opVFMADD231PD, "VFMADD231PD");
  2528. AddMnemonic(opVFMADD231PS, "VFMADD231PS");
  2529. AddMnemonic(opVFMADD231SD, "VFMADD231SD");
  2530. AddMnemonic(opVFMADD231SS, "VFMADD231SS");
  2531. AddMnemonic(opVFMADDPD, "VFMADDPD");
  2532. AddMnemonic(opVFMADDPS, "VFMADDPS");
  2533. AddMnemonic(opVFMADDSD, "VFMADDSD");
  2534. AddMnemonic(opVFMADDSS, "VFMADDSS");
  2535. AddMnemonic(opVFMADDSUB132PD, "VFMADDSUB132PD");
  2536. AddMnemonic(opVFMADDSUB132PS, "VFMADDSUB132PS");
  2537. AddMnemonic(opVFMADDSUB213PD, "VFMADDSUB213PD");
  2538. AddMnemonic(opVFMADDSUB213PS, "VFMADDSUB213PS");
  2539. AddMnemonic(opVFMADDSUB231PD, "VFMADDSUB231PD");
  2540. AddMnemonic(opVFMADDSUB231PS, "VFMADDSUB231PS");
  2541. AddMnemonic(opVFMADDSUBPD, "VFMADDSUBPD");
  2542. AddMnemonic(opVFMADDSUBPS, "VFMADDSUBPS");
  2543. AddMnemonic(opVFMSUB132PD, "VFMSUB132PD");
  2544. AddMnemonic(opVFMSUB132PS, "VFMSUB132PS");
  2545. AddMnemonic(opVFMSUB132SD, "VFMSUB132SD");
  2546. AddMnemonic(opVFMSUB132SS, "VFMSUB132SS");
  2547. AddMnemonic(opVFMSUB213PD, "VFMSUB213PD");
  2548. AddMnemonic(opVFMSUB213PS, "VFMSUB213PS");
  2549. AddMnemonic(opVFMSUB213SD, "VFMSUB213SD");
  2550. AddMnemonic(opVFMSUB213SS, "VFMSUB213SS");
  2551. AddMnemonic(opVFMSUB231PD, "VFMSUB231PD");
  2552. AddMnemonic(opVFMSUB231PS, "VFMSUB231PS");
  2553. AddMnemonic(opVFMSUB231SD, "VFMSUB231SD");
  2554. AddMnemonic(opVFMSUB231SS, "VFMSUB231SS");
  2555. AddMnemonic(opVFMSUBADD132PD, "VFMSUBADD132PD");
  2556. AddMnemonic(opVFMSUBADD132PS, "VFMSUBADD132PS");
  2557. AddMnemonic(opVFMSUBADD213PD, "VFMSUBADD213PD");
  2558. AddMnemonic(opVFMSUBADD213PS, "VFMSUBADD213PS");
  2559. AddMnemonic(opVFMSUBADD231PD, "VFMSUBADD231PD");
  2560. AddMnemonic(opVFMSUBADD231PS, "VFMSUBADD231PS");
  2561. AddMnemonic(opVFMSUBADDPD, "VFMSUBADDPD");
  2562. AddMnemonic(opVFMSUBADDPS, "VFMSUBADDPS");
  2563. AddMnemonic(opVFMSUBPD, "VFMSUBPD");
  2564. AddMnemonic(opVFMSUBPS, "VFMSUBPS");
  2565. AddMnemonic(opVFMSUBSD, "VFMSUBSD");
  2566. AddMnemonic(opVFMSUBSS, "VFMSUBSS");
  2567. AddMnemonic(opVFNMADD132PD, "VFNMADD132PD");
  2568. AddMnemonic(opVFNMADD132PS, "VFNMADD132PS");
  2569. AddMnemonic(opVFNMADD132SD, "VFNMADD132SD");
  2570. AddMnemonic(opVFNMADD132SS, "VFNMADD132SS");
  2571. AddMnemonic(opVFNMADD213PD, "VFNMADD213PD");
  2572. AddMnemonic(opVFNMADD213PS, "VFNMADD213PS");
  2573. AddMnemonic(opVFNMADD213SD, "VFNMADD213SD");
  2574. AddMnemonic(opVFNMADD213SS, "VFNMADD213SS");
  2575. AddMnemonic(opVFNMADD231PD, "VFNMADD231PD");
  2576. AddMnemonic(opVFNMADD231PS, "VFNMADD231PS");
  2577. AddMnemonic(opVFNMADD231SD, "VFNMADD231SD");
  2578. AddMnemonic(opVFNMADD231SS, "VFNMADD231SS");
  2579. AddMnemonic(opVFNMADDPD, "VFNMADDPD");
  2580. AddMnemonic(opVFNMADDPS, "VFNMADDPS");
  2581. AddMnemonic(opVFNMADDSD, "VFNMADDSD");
  2582. AddMnemonic(opVFNMADDSS, "VFNMADDSS");
  2583. AddMnemonic(opVFNMSUB132PD, "VFNMSUB132PD");
  2584. AddMnemonic(opVFNMSUB132PS, "VFNMSUB132PS");
  2585. AddMnemonic(opVFNMSUB132SD, "VFNMSUB132SD");
  2586. AddMnemonic(opVFNMSUB132SS, "VFNMSUB132SS");
  2587. AddMnemonic(opVFNMSUB213PD, "VFNMSUB213PD");
  2588. AddMnemonic(opVFNMSUB213PS, "VFNMSUB213PS");
  2589. AddMnemonic(opVFNMSUB213SD, "VFNMSUB213SD");
  2590. AddMnemonic(opVFNMSUB213SS, "VFNMSUB213SS");
  2591. AddMnemonic(opVFNMSUB231PD, "VFNMSUB231PD");
  2592. AddMnemonic(opVFNMSUB231PS, "VFNMSUB231PS");
  2593. AddMnemonic(opVFNMSUB231SD, "VFNMSUB231SD");
  2594. AddMnemonic(opVFNMSUB231SS, "VFNMSUB231SS");
  2595. AddMnemonic(opVFNMSUBPD, "VFNMSUBPD");
  2596. AddMnemonic(opVFNMSUBPS, "VFNMSUBPS");
  2597. AddMnemonic(opVFNMSUBSD, "VFNMSUBSD");
  2598. AddMnemonic(opVFNMSUBSS, "VFNMSUBSS");
  2599. AddMnemonic(opVFRCZPD, "VFRCZPD");
  2600. AddMnemonic(opVFRCZPS, "VFRCZPS");
  2601. AddMnemonic(opVFRCZSD, "VFRCZSD");
  2602. AddMnemonic(opVFRCZSS, "VFRCZSS");
  2603. AddMnemonic(opVGATHERDPD, "VGATHERDPD");
  2604. AddMnemonic(opVGATHERDPS, "VGATHERDPS");
  2605. AddMnemonic(opVGATHERQPD, "VGATHERQPD");
  2606. AddMnemonic(opVGATHERQPS, "VGATHERQPS");
  2607. AddMnemonic(opVHADDPD, "VHADDPD");
  2608. AddMnemonic(opVHADDPS, "VHADDPS");
  2609. AddMnemonic(opVHSUBPD, "VHSUBPD");
  2610. AddMnemonic(opVHSUBPS, "VHSUBPS");
  2611. AddMnemonic(opVINSERTF128, "VINSERTF128");
  2612. AddMnemonic(opVINSERTI128, "VINSERTI128");
  2613. AddMnemonic(opVINSERTPS, "VINSERTPS");
  2614. AddMnemonic(opVLDDQU, "VLDDQU");
  2615. AddMnemonic(opVLDMXCSR, "VLDMXCSR");
  2616. AddMnemonic(opVMASKMOVDQU, "VMASKMOVDQU");
  2617. AddMnemonic(opVMASKMOVPD, "VMASKMOVPD");
  2618. AddMnemonic(opVMASKMOVPS, "VMASKMOVPS");
  2619. AddMnemonic(opVMAXPD, "VMAXPD");
  2620. AddMnemonic(opVMAXPS, "VMAXPS");
  2621. AddMnemonic(opVMAXSD, "VMAXSD");
  2622. AddMnemonic(opVMAXSS, "VMAXSS");
  2623. AddMnemonic(opVMINPD, "VMINPD");
  2624. AddMnemonic(opVMINPS, "VMINPS");
  2625. AddMnemonic(opVMINSD, "VMINSD");
  2626. AddMnemonic(opVMINSS, "VMINSS");
  2627. AddMnemonic(opVMLOAD, "VMLOAD");
  2628. AddMnemonic(opVMMCALL, "VMMCALL");
  2629. AddMnemonic(opVMOVAPD, "VMOVAPD");
  2630. AddMnemonic(opVMOVAPS, "VMOVAPS");
  2631. AddMnemonic(opVMOVD, "VMOVD");
  2632. AddMnemonic(opVMOVDDUP, "VMOVDDUP");
  2633. AddMnemonic(opVMOVDQA, "VMOVDQA");
  2634. AddMnemonic(opVMOVDQU, "VMOVDQU");
  2635. AddMnemonic(opVMOVHLPS, "VMOVHLPS");
  2636. AddMnemonic(opVMOVHPD, "VMOVHPD");
  2637. AddMnemonic(opVMOVHPS, "VMOVHPS");
  2638. AddMnemonic(opVMOVLHPS, "VMOVLHPS");
  2639. AddMnemonic(opVMOVLPD, "VMOVLPD");
  2640. AddMnemonic(opVMOVLPS, "VMOVLPS");
  2641. AddMnemonic(opVMOVMSKPD, "VMOVMSKPD");
  2642. AddMnemonic(opVMOVMSKPS, "VMOVMSKPS");
  2643. AddMnemonic(opVMOVNTDQ, "VMOVNTDQ");
  2644. AddMnemonic(opVMOVNTDQA, "VMOVNTDQA");
  2645. AddMnemonic(opVMOVNTPD, "VMOVNTPD");
  2646. AddMnemonic(opVMOVNTPS, "VMOVNTPS");
  2647. AddMnemonic(opVMOVQ, "VMOVQ");
  2648. AddMnemonic(opVMOVSD, "VMOVSD");
  2649. AddMnemonic(opVMOVSHDUP, "VMOVSHDUP");
  2650. AddMnemonic(opVMOVSLDUP, "VMOVSLDUP");
  2651. AddMnemonic(opVMOVSS, "VMOVSS");
  2652. AddMnemonic(opVMOVUPD, "VMOVUPD");
  2653. AddMnemonic(opVMOVUPS, "VMOVUPS");
  2654. AddMnemonic(opVMPSADBW, "VMPSADBW");
  2655. AddMnemonic(opVMRUN, "VMRUN");
  2656. AddMnemonic(opVMSAVE, "VMSAVE");
  2657. AddMnemonic(opVMULPD, "VMULPD");
  2658. AddMnemonic(opVMULPS, "VMULPS");
  2659. AddMnemonic(opVMULSD, "VMULSD");
  2660. AddMnemonic(opVMULSS, "VMULSS");
  2661. AddMnemonic(opVORPD, "VORPD");
  2662. AddMnemonic(opVORPS, "VORPS");
  2663. AddMnemonic(opVPABSB, "VPABSB");
  2664. AddMnemonic(opVPABSD, "VPABSD");
  2665. AddMnemonic(opVPABSW, "VPABSW");
  2666. AddMnemonic(opVPACKSSDW, "VPACKSSDW");
  2667. AddMnemonic(opVPACKSSWB, "VPACKSSWB");
  2668. AddMnemonic(opVPACKUSDW, "VPACKUSDW");
  2669. AddMnemonic(opVPACKUSWB, "VPACKUSWB");
  2670. AddMnemonic(opVPADDB, "VPADDB");
  2671. AddMnemonic(opVPADDD, "VPADDD");
  2672. AddMnemonic(opVPADDQ, "VPADDQ");
  2673. AddMnemonic(opVPADDSB, "VPADDSB");
  2674. AddMnemonic(opVPADDSW, "VPADDSW");
  2675. AddMnemonic(opVPADDUSB, "VPADDUSB");
  2676. AddMnemonic(opVPADDUSW, "VPADDUSW");
  2677. AddMnemonic(opVPADDW, "VPADDW");
  2678. AddMnemonic(opVPALIGNR, "VPALIGNR");
  2679. AddMnemonic(opVPAND, "VPAND");
  2680. AddMnemonic(opVPANDN, "VPANDN");
  2681. AddMnemonic(opVPAVGB, "VPAVGB");
  2682. AddMnemonic(opVPAVGW, "VPAVGW");
  2683. AddMnemonic(opVPBLENDD, "VPBLENDD");
  2684. AddMnemonic(opVPBLENDVB, "VPBLENDVB");
  2685. AddMnemonic(opVPBLENDW, "VPBLENDW");
  2686. AddMnemonic(opVPBROADCASTB, "VPBROADCASTB");
  2687. AddMnemonic(opVPBROADCASTD, "VPBROADCASTD");
  2688. AddMnemonic(opVPBROADCASTQ, "VPBROADCASTQ");
  2689. AddMnemonic(opVPBROADCASTW, "VPBROADCASTW");
  2690. AddMnemonic(opVPCLMULQDQ, "VPCLMULQDQ");
  2691. AddMnemonic(opVPCMOV, "VPCMOV");
  2692. AddMnemonic(opVPCMPEQB, "VPCMPEQB");
  2693. AddMnemonic(opVPCMPEQD, "VPCMPEQD");
  2694. AddMnemonic(opVPCMPEQQ, "VPCMPEQQ");
  2695. AddMnemonic(opVPCMPEQW, "VPCMPEQW");
  2696. AddMnemonic(opVPCMPESTRI, "VPCMPESTRI");
  2697. AddMnemonic(opVPCMPESTRM, "VPCMPESTRM");
  2698. AddMnemonic(opVPCMPGTB, "VPCMPGTB");
  2699. AddMnemonic(opVPCMPGTD, "VPCMPGTD");
  2700. AddMnemonic(opVPCMPGTQ, "VPCMPGTQ");
  2701. AddMnemonic(opVPCMPGTW, "VPCMPGTW");
  2702. AddMnemonic(opVPCMPISTRI, "VPCMPISTRI");
  2703. AddMnemonic(opVPCMPISTRM, "VPCMPISTRM");
  2704. AddMnemonic(opVPCOMB, "VPCOMB");
  2705. AddMnemonic(opVPCOMD, "VPCOMD");
  2706. AddMnemonic(opVPCOMQ, "VPCOMQ");
  2707. AddMnemonic(opVPCOMUB, "VPCOMUB");
  2708. AddMnemonic(opVPCOMUD, "VPCOMUD");
  2709. AddMnemonic(opVPCOMUQ, "VPCOMUQ");
  2710. AddMnemonic(opVPCOMUW, "VPCOMUW");
  2711. AddMnemonic(opVPCOMW, "VPCOMW");
  2712. AddMnemonic(opVPERM2F128, "VPERM2F128");
  2713. AddMnemonic(opVPERM2I128, "VPERM2I128");
  2714. AddMnemonic(opVPERMD, "VPERMD");
  2715. AddMnemonic(opVPERMIL2PD, "VPERMIL2PD");
  2716. AddMnemonic(opVPERMIL2PS, "VPERMIL2PS");
  2717. AddMnemonic(opVPERMILPD, "VPERMILPD");
  2718. AddMnemonic(opVPERMILPS, "VPERMILPS");
  2719. AddMnemonic(opVPERMPD, "VPERMPD");
  2720. AddMnemonic(opVPERMPS, "VPERMPS");
  2721. AddMnemonic(opVPERMQ, "VPERMQ");
  2722. AddMnemonic(opVPEXTRB, "VPEXTRB");
  2723. AddMnemonic(opVPEXTRD, "VPEXTRD");
  2724. AddMnemonic(opVPEXTRQ, "VPEXTRQ");
  2725. AddMnemonic(opVPEXTRW, "VPEXTRW");
  2726. AddMnemonic(opVPGATHERDD, "VPGATHERDD");
  2727. AddMnemonic(opVPGATHERDQ, "VPGATHERDQ");
  2728. AddMnemonic(opVPGATHERQD, "VPGATHERQD");
  2729. AddMnemonic(opVPGATHERQQ, "VPGATHERQQ");
  2730. AddMnemonic(opVPHADDBD, "VPHADDBD");
  2731. AddMnemonic(opVPHADDBQ, "VPHADDBQ");
  2732. AddMnemonic(opVPHADDBW, "VPHADDBW");
  2733. AddMnemonic(opVPHADDD, "VPHADDD");
  2734. AddMnemonic(opVPHADDDQ, "VPHADDDQ");
  2735. AddMnemonic(opVPHADDSW, "VPHADDSW");
  2736. AddMnemonic(opVPHADDUBD, "VPHADDUBD");
  2737. AddMnemonic(opVPHADDUBQ, "VPHADDUBQ");
  2738. AddMnemonic(opVPHADDUBW, "VPHADDUBW");
  2739. AddMnemonic(opVPHADDUDQ, "VPHADDUDQ");
  2740. AddMnemonic(opVPHADDUWD, "VPHADDUWD");
  2741. AddMnemonic(opVPHADDUWQ, "VPHADDUWQ");
  2742. AddMnemonic(opVPHADDW, "VPHADDW");
  2743. AddMnemonic(opVPHADDWD, "VPHADDWD");
  2744. AddMnemonic(opVPHADDWQ, "VPHADDWQ");
  2745. AddMnemonic(opVPHMINPOSUW, "VPHMINPOSUW");
  2746. AddMnemonic(opVPHSUBBW, "VPHSUBBW");
  2747. AddMnemonic(opVPHSUBD, "VPHSUBD");
  2748. AddMnemonic(opVPHSUBDQ, "VPHSUBDQ");
  2749. AddMnemonic(opVPHSUBSW, "VPHSUBSW");
  2750. AddMnemonic(opVPHSUBW, "VPHSUBW");
  2751. AddMnemonic(opVPHSUBWD, "VPHSUBWD");
  2752. AddMnemonic(opVPINSRB, "VPINSRB");
  2753. AddMnemonic(opVPINSRD, "VPINSRD");
  2754. AddMnemonic(opVPINSRQ, "VPINSRQ");
  2755. AddMnemonic(opVPINSRW, "VPINSRW");
  2756. AddMnemonic(opVPMACSDD, "VPMACSDD");
  2757. AddMnemonic(opVPMACSDQH, "VPMACSDQH");
  2758. AddMnemonic(opVPMACSDQL, "VPMACSDQL");
  2759. AddMnemonic(opVPMACSSDD, "VPMACSSDD");
  2760. AddMnemonic(opVPMACSSDQH, "VPMACSSDQH");
  2761. AddMnemonic(opVPMACSSDQL, "VPMACSSDQL");
  2762. AddMnemonic(opVPMACSSWD, "VPMACSSWD");
  2763. AddMnemonic(opVPMACSSWW, "VPMACSSWW");
  2764. AddMnemonic(opVPMACSWD, "VPMACSWD");
  2765. AddMnemonic(opVPMACSWW, "VPMACSWW");
  2766. AddMnemonic(opVPMADCSSWD, "VPMADCSSWD");
  2767. AddMnemonic(opVPMADCSWD, "VPMADCSWD");
  2768. AddMnemonic(opVPMADDUBSW, "VPMADDUBSW");
  2769. AddMnemonic(opVPMADDWD, "VPMADDWD");
  2770. AddMnemonic(opVPMASKMOVD, "VPMASKMOVD");
  2771. AddMnemonic(opVPMASKMOVQ, "VPMASKMOVQ");
  2772. AddMnemonic(opVPMAXSB, "VPMAXSB");
  2773. AddMnemonic(opVPMAXSD, "VPMAXSD");
  2774. AddMnemonic(opVPMAXSW, "VPMAXSW");
  2775. AddMnemonic(opVPMAXUB, "VPMAXUB");
  2776. AddMnemonic(opVPMAXUD, "VPMAXUD");
  2777. AddMnemonic(opVPMAXUW, "VPMAXUW");
  2778. AddMnemonic(opVPMINSB, "VPMINSB");
  2779. AddMnemonic(opVPMINSD, "VPMINSD");
  2780. AddMnemonic(opVPMINSW, "VPMINSW");
  2781. AddMnemonic(opVPMINUB, "VPMINUB");
  2782. AddMnemonic(opVPMINUD, "VPMINUD");
  2783. AddMnemonic(opVPMINUW, "VPMINUW");
  2784. AddMnemonic(opVPMOVMSKB, "VPMOVMSKB");
  2785. AddMnemonic(opVPMOVSXBD, "VPMOVSXBD");
  2786. AddMnemonic(opVPMOVSXBQ, "VPMOVSXBQ");
  2787. AddMnemonic(opVPMOVSXBW, "VPMOVSXBW");
  2788. AddMnemonic(opVPMOVSXDQ, "VPMOVSXDQ");
  2789. AddMnemonic(opVPMOVSXWD, "VPMOVSXWD");
  2790. AddMnemonic(opVPMOVSXWQ, "VPMOVSXWQ");
  2791. AddMnemonic(opVPMOVZXBD, "VPMOVZXBD");
  2792. AddMnemonic(opVPMOVZXBQ, "VPMOVZXBQ");
  2793. AddMnemonic(opVPMOVZXBW, "VPMOVZXBW");
  2794. AddMnemonic(opVPMOVZXDQ, "VPMOVZXDQ");
  2795. AddMnemonic(opVPMOVZXWD, "VPMOVZXWD");
  2796. AddMnemonic(opVPMOVZXWQ, "VPMOVZXWQ");
  2797. AddMnemonic(opVPMULDQ, "VPMULDQ");
  2798. AddMnemonic(opVPMULHRSW, "VPMULHRSW");
  2799. AddMnemonic(opVPMULHUW, "VPMULHUW");
  2800. AddMnemonic(opVPMULHW, "VPMULHW");
  2801. AddMnemonic(opVPMULLD, "VPMULLD");
  2802. AddMnemonic(opVPMULLW, "VPMULLW");
  2803. AddMnemonic(opVPMULUDQ, "VPMULUDQ");
  2804. AddMnemonic(opVPOR, "VPOR");
  2805. AddMnemonic(opVPPERM, "VPPERM");
  2806. AddMnemonic(opVPROTB, "VPROTB");
  2807. AddMnemonic(opVPROTD, "VPROTD");
  2808. AddMnemonic(opVPROTQ, "VPROTQ");
  2809. AddMnemonic(opVPROTW, "VPROTW");
  2810. AddMnemonic(opVPSADBW, "VPSADBW");
  2811. AddMnemonic(opVPSHAB, "VPSHAB");
  2812. AddMnemonic(opVPSHAD, "VPSHAD");
  2813. AddMnemonic(opVPSHAQ, "VPSHAQ");
  2814. AddMnemonic(opVPSHAW, "VPSHAW");
  2815. AddMnemonic(opVPSHLB, "VPSHLB");
  2816. AddMnemonic(opVPSHLD, "VPSHLD");
  2817. AddMnemonic(opVPSHLQ, "VPSHLQ");
  2818. AddMnemonic(opVPSHLW, "VPSHLW");
  2819. AddMnemonic(opVPSHUFB, "VPSHUFB");
  2820. AddMnemonic(opVPSHUFD, "VPSHUFD");
  2821. AddMnemonic(opVPSHUFHW, "VPSHUFHW");
  2822. AddMnemonic(opVPSHUFLW, "VPSHUFLW");
  2823. AddMnemonic(opVPSIGNB, "VPSIGNB");
  2824. AddMnemonic(opVPSIGND, "VPSIGND");
  2825. AddMnemonic(opVPSIGNW, "VPSIGNW");
  2826. AddMnemonic(opVPSLLD, "VPSLLD");
  2827. AddMnemonic(opVPSLLDQ, "VPSLLDQ");
  2828. AddMnemonic(opVPSLLQ, "VPSLLQ");
  2829. AddMnemonic(opVPSLLVD, "VPSLLVD");
  2830. AddMnemonic(opVPSLLVQ, "VPSLLVQ");
  2831. AddMnemonic(opVPSLLW, "VPSLLW");
  2832. AddMnemonic(opVPSRAD, "VPSRAD");
  2833. AddMnemonic(opVPSRAVD, "VPSRAVD");
  2834. AddMnemonic(opVPSRAW, "VPSRAW");
  2835. AddMnemonic(opVPSRLD, "VPSRLD");
  2836. AddMnemonic(opVPSRLDQ, "VPSRLDQ");
  2837. AddMnemonic(opVPSRLQ, "VPSRLQ");
  2838. AddMnemonic(opVPSRLVD, "VPSRLVD");
  2839. AddMnemonic(opVPSRLVQ, "VPSRLVQ");
  2840. AddMnemonic(opVPSRLW, "VPSRLW");
  2841. AddMnemonic(opVPSUBB, "VPSUBB");
  2842. AddMnemonic(opVPSUBD, "VPSUBD");
  2843. AddMnemonic(opVPSUBQ, "VPSUBQ");
  2844. AddMnemonic(opVPSUBSB, "VPSUBSB");
  2845. AddMnemonic(opVPSUBSW, "VPSUBSW");
  2846. AddMnemonic(opVPSUBUSB, "VPSUBUSB");
  2847. AddMnemonic(opVPSUBUSW, "VPSUBUSW");
  2848. AddMnemonic(opVPSUBW, "VPSUBW");
  2849. AddMnemonic(opVPTEST, "VPTEST");
  2850. AddMnemonic(opVPUNPCKHBW, "VPUNPCKHBW");
  2851. AddMnemonic(opVPUNPCKHDQ, "VPUNPCKHDQ");
  2852. AddMnemonic(opVPUNPCKHQDQ, "VPUNPCKHQDQ");
  2853. AddMnemonic(opVPUNPCKHWD, "VPUNPCKHWD");
  2854. AddMnemonic(opVPUNPCKLBW, "VPUNPCKLBW");
  2855. AddMnemonic(opVPUNPCKLDQ, "VPUNPCKLDQ");
  2856. AddMnemonic(opVPUNPCKLQDQ, "VPUNPCKLQDQ");
  2857. AddMnemonic(opVPUNPCKLWD, "VPUNPCKLWD");
  2858. AddMnemonic(opVPXOR, "VPXOR");
  2859. AddMnemonic(opVRCPPS, "VRCPPS");
  2860. AddMnemonic(opVRCPSS, "VRCPSS");
  2861. AddMnemonic(opVROUNDPD, "VROUNDPD");
  2862. AddMnemonic(opVROUNDPS, "VROUNDPS");
  2863. AddMnemonic(opVROUNDSD, "VROUNDSD");
  2864. AddMnemonic(opVROUNDSS, "VROUNDSS");
  2865. AddMnemonic(opVRSQRTPS, "VRSQRTPS");
  2866. AddMnemonic(opVRSQRTSS, "VRSQRTSS");
  2867. AddMnemonic(opVSHUFPD, "VSHUFPD");
  2868. AddMnemonic(opVSHUFPS, "VSHUFPS");
  2869. AddMnemonic(opVSQRTPD, "VSQRTPD");
  2870. AddMnemonic(opVSQRTPS, "VSQRTPS");
  2871. AddMnemonic(opVSQRTSD, "VSQRTSD");
  2872. AddMnemonic(opVSQRTSS, "VSQRTSS");
  2873. AddMnemonic(opVSTMXCSR, "VSTMXCSR");
  2874. AddMnemonic(opVSUBPD, "VSUBPD");
  2875. AddMnemonic(opVSUBPS, "VSUBPS");
  2876. AddMnemonic(opVSUBSD, "VSUBSD");
  2877. AddMnemonic(opVSUBSS, "VSUBSS");
  2878. AddMnemonic(opVTESTPD, "VTESTPD");
  2879. AddMnemonic(opVTESTPS, "VTESTPS");
  2880. AddMnemonic(opVUCOMISD, "VUCOMISD");
  2881. AddMnemonic(opVUCOMISS, "VUCOMISS");
  2882. AddMnemonic(opVUNPCKHPD, "VUNPCKHPD");
  2883. AddMnemonic(opVUNPCKHPS, "VUNPCKHPS");
  2884. AddMnemonic(opVUNPCKLPD, "VUNPCKLPD");
  2885. AddMnemonic(opVUNPCKLPS, "VUNPCKLPS");
  2886. AddMnemonic(opVXORPD, "VXORPD");
  2887. AddMnemonic(opVXORPS, "VXORPS");
  2888. AddMnemonic(opVZEROALL, "VZEROALL");
  2889. AddMnemonic(opVZEROUPPER, "VZEROUPPER");
  2890. AddMnemonic(opWBINVD, "WBINVD");
  2891. AddMnemonic(opWRMSR, "WRMSR");
  2892. AddMnemonic(opXADD, "XADD");
  2893. AddMnemonic(opXCHG, "XCHG");
  2894. AddMnemonic(opXLAT, "XLAT");
  2895. AddMnemonic(opXLATB, "XLATB");
  2896. AddMnemonic(opXOR, "XOR");
  2897. AddMnemonic(opXORPD, "XORPD");
  2898. AddMnemonic(opXORPS, "XORPS");
  2899. AddInstruction(opAAA, "", "37", {optNot64}, {cpu8086});
  2900. AddInstruction(opAAD, "", "D50A", {optNot64}, {cpu8086});
  2901. AddInstruction(opAAD, "", "D5ib", {optNot64}, {cpu8086});
  2902. AddInstruction(opAAM, "", "D40A", {optNot64}, {cpu8086});
  2903. AddInstruction(opAAM, "", "D4ib", {optNot64}, {cpu8086});
  2904. AddInstruction(opAAS, "", "3F", {optNot64}, {cpu8086});
  2905. AddInstruction(opADC, "reg/mem8,reg8", "10/r", {}, {cpu8086});
  2906. AddInstruction(opADC, "reg/mem16,reg16", "11/r", {optO16}, {cpu8086});
  2907. AddInstruction(opADC, "reg/mem32,reg32", "11/r", {optO32}, {cpu386});
  2908. AddInstruction(opADC, "reg/mem64,reg64", "11/r", {}, {cpuAMD64});
  2909. AddInstruction(opADC, "reg8,reg/mem8", "12/r", {}, {cpu8086});
  2910. AddInstruction(opADC, "reg16,reg/mem16", "13/r", {optO16}, {cpu8086});
  2911. AddInstruction(opADC, "reg32,reg/mem32", "13/r", {optO32}, {cpu386});
  2912. AddInstruction(opADC, "reg64,reg/mem64", "13/r", {}, {cpuAMD64});
  2913. AddInstruction(opADC, "AL,imm8", "14ib", {}, {cpu8086});
  2914. AddInstruction(opADC, "AX,imm16", "15iw", {optO16}, {cpu8086});
  2915. AddInstruction(opADC, "EAX,imm32", "15id", {optO32}, {cpu386});
  2916. AddInstruction(opADC, "RAX,simm32", "15id", {}, {cpuAMD64});
  2917. AddInstruction(opADC, "reg/mem8,imm8", "80/2ib", {}, {cpu8086});
  2918. AddInstruction(opADC, "reg/mem16,imm16", "81/2iw", {optO16}, {cpu8086});
  2919. AddInstruction(opADC, "reg/mem32,imm32", "81/2id", {optO32}, {cpu386});
  2920. AddInstruction(opADC, "reg/mem64,simm32", "81/2id", {}, {cpuAMD64});
  2921. AddInstruction(opADC, "reg/mem16,simm8", "83/2ib", {optO16}, {cpu8086});
  2922. AddInstruction(opADC, "reg/mem32,simm8", "83/2ib", {optO32}, {cpu386});
  2923. AddInstruction(opADC, "reg/mem64,simm8", "83/2ib", {}, {cpuAMD64});
  2924. AddInstruction(opADD, "reg/mem8,reg8", "00/r", {}, {cpu8086});
  2925. AddInstruction(opADD, "reg/mem16,reg16", "01/r", {optO16}, {cpu8086});
  2926. AddInstruction(opADD, "reg/mem32,reg32", "01/r", {optO32}, {cpu386});
  2927. AddInstruction(opADD, "reg/mem64,reg64", "01/r", {}, {cpuAMD64});
  2928. AddInstruction(opADD, "reg8,reg/mem8", "02/r", {}, {cpu8086});
  2929. AddInstruction(opADD, "reg16,reg/mem16", "03/r", {optO16}, {cpu8086});
  2930. AddInstruction(opADD, "reg32,reg/mem32", "03/r", {optO32}, {cpu386});
  2931. AddInstruction(opADD, "reg64,reg/mem64", "03/r", {}, {cpuAMD64});
  2932. AddInstruction(opADD, "AL,imm8", "04ib", {}, {cpu8086});
  2933. AddInstruction(opADD, "AX,imm16", "05iw", {optO16}, {cpu8086});
  2934. AddInstruction(opADD, "EAX,imm32", "05id", {optO32}, {cpu386});
  2935. AddInstruction(opADD, "RAX,simm32", "05id", {}, {cpuAMD64});
  2936. AddInstruction(opADD, "reg/mem8,imm8", "80/0ib", {}, {cpu8086});
  2937. AddInstruction(opADD, "reg/mem16,imm16", "81/0iw", {optO16}, {cpu8086});
  2938. AddInstruction(opADD, "reg/mem32,imm32", "81/0id", {optO32}, {cpu386});
  2939. AddInstruction(opADD, "reg/mem64,simm32", "81/0id", {}, {cpuAMD64});
  2940. AddInstruction(opADD, "reg/mem16,simm8", "83/0ib", {optO16}, {cpu8086});
  2941. AddInstruction(opADD, "reg/mem32,simm8", "83/0ib", {optO32}, {cpu386});
  2942. AddInstruction(opADD, "reg/mem64,simm8", "83/0ib", {}, {cpuAMD64});
  2943. AddInstruction(opADDPD, "xmm1,xmm2/mem128", "0F58/r", {optPOP}, {cpuSSE2});
  2944. AddInstruction(opADDPS, "xmm1,xmm2/mem128", "0F58/r", {}, {cpuSSE});
  2945. AddInstruction(opADDSD, "xmm1,xmm2/mem64", "F20F58/r", {}, {cpuSSE2});
  2946. AddInstruction(opADDSS, "xmm1,xmm2/mem32", "F30F58/r", {}, {cpuSSE});
  2947. AddInstruction(opADDSUBPD, "xmm1,xmm2/mem128", "0FD0/r", {optPOP}, {cpuSSE3});
  2948. AddInstruction(opADDSUBPS, "xmm1,xmm2/mem128", "F20FD0/r", {}, {cpuSSE3});
  2949. AddInstruction(opAND, "reg/mem8,reg8", "20/r", {}, {cpu8086});
  2950. AddInstruction(opAND, "reg/mem16,reg16", "21/r", {optO16}, {cpu8086});
  2951. AddInstruction(opAND, "reg/mem32,reg32", "21/r", {optO32}, {cpu386});
  2952. AddInstruction(opAND, "reg/mem64,reg64", "21/r", {}, {cpuAMD64});
  2953. AddInstruction(opAND, "reg8,reg/mem8", "22/r", {}, {cpu8086});
  2954. AddInstruction(opAND, "reg16,reg/mem16", "23/r", {optO16}, {cpu8086});
  2955. AddInstruction(opAND, "reg32,reg/mem32", "23/r", {optO32}, {cpu386});
  2956. AddInstruction(opAND, "reg64,reg/mem64", "23/r", {}, {cpuAMD64});
  2957. AddInstruction(opAND, "AL,imm8", "24ib", {}, {cpu8086});
  2958. AddInstruction(opAND, "AX,imm16", "25iw", {optO16}, {cpu8086});
  2959. AddInstruction(opAND, "EAX,imm32", "25id", {optO32}, {cpu386});
  2960. AddInstruction(opAND, "RAX,simm32", "25id", {}, {cpuAMD64});
  2961. AddInstruction(opAND, "reg/mem8,imm8", "80/4ib", {}, {cpu8086});
  2962. AddInstruction(opAND, "reg/mem16,imm16", "81/4iw", {optO16}, {cpu8086});
  2963. AddInstruction(opAND, "reg/mem32,imm32", "81/4id", {optO32}, {cpu386});
  2964. AddInstruction(opAND, "reg/mem64,simm32", "81/4id", {}, {cpuAMD64});
  2965. AddInstruction(opAND, "reg/mem16,simm8", "83/4ib", {optO16}, {cpu8086});
  2966. AddInstruction(opAND, "reg/mem32,simm8", "83/4ib", {optO32}, {cpu386});
  2967. AddInstruction(opAND, "reg/mem64,simm8", "83/4ib", {}, {cpuAMD64});
  2968. AddInstruction(opANDNPD, "xmm1,xmm2/mem128", "0F55/r", {optPOP}, {cpuSSE2});
  2969. AddInstruction(opANDNPS, "xmm1,xmm2/mem128", "0F55/r", {}, {cpuSSE});
  2970. AddInstruction(opANDPD, "xmm1,xmm2/mem128", "0F54/r", {optPOP}, {cpuSSE2});
  2971. AddInstruction(opANDPS, "xmm1,xmm2/mem128", "0F54/r", {}, {cpuSSE});
  2972. AddInstruction(opARPL, "reg/mem16,reg16", "63/r", {}, {cpu286,cpuPrivileged});
  2973. AddInstruction(opBOUND, "reg16,mem16&mem16", "62/r", {optO16,optNot64}, {cpu186});
  2974. AddInstruction(opBOUND, "reg32,mem32&mem32", "62/r", {optO32,optNot64}, {cpu386});
  2975. AddInstruction(opBSF, "reg16,reg/mem16", "0FBC/r", {optO16}, {cpu386});
  2976. AddInstruction(opBSF, "reg32,reg/mem32", "0FBC/r", {optO32}, {cpu386});
  2977. AddInstruction(opBSF, "reg64,reg/mem64", "0FBC/r", {}, {cpuAMD64});
  2978. AddInstruction(opBSR, "reg16,reg/mem16", "0FBD/r", {optO16}, {cpu386});
  2979. AddInstruction(opBSR, "reg32,reg/mem32", "0FBD/r", {optO32}, {cpu386});
  2980. AddInstruction(opBSR, "reg64,reg/mem64", "0FBD/r", {}, {cpuAMD64});
  2981. AddInstruction(opBSWAP, "reg32", "0FC8rd", {optO32}, {cpu486});
  2982. AddInstruction(opBSWAP, "reg64", "0FC8rq", {}, {cpuAMD64});
  2983. AddInstruction(opBT, "reg/mem16,reg16", "0FA3/r", {optO16}, {cpu386});
  2984. AddInstruction(opBT, "reg/mem32,reg32", "0FA3/r", {optO32}, {cpu386});
  2985. AddInstruction(opBT, "reg/mem64,reg64", "0FA3/r", {}, {cpuAMD64});
  2986. AddInstruction(opBT, "reg/mem16,uimm8", "0FBA/4ib", {optO16}, {cpu386});
  2987. AddInstruction(opBT, "reg/mem32,uimm8", "0FBA/4ib", {optO32}, {cpu386});
  2988. AddInstruction(opBT, "reg/mem64,uimm8", "0FBA/4ib", {}, {cpuAMD64});
  2989. AddInstruction(opBTC, "reg/mem16,reg16", "0FBB/r", {optO16}, {cpu386});
  2990. AddInstruction(opBTC, "reg/mem32,reg32", "0FBB/r", {optO32}, {cpu386});
  2991. AddInstruction(opBTC, "reg/mem64,reg64", "0FBB/r", {}, {cpuAMD64});
  2992. AddInstruction(opBTC, "reg/mem16,uimm8", "0FBA/7ib", {optO16}, {cpu386});
  2993. AddInstruction(opBTC, "reg/mem32,uimm8", "0FBA/7ib", {optO32}, {cpu386});
  2994. AddInstruction(opBTC, "reg/mem64,uimm8", "0FBA/7ib", {}, {cpuAMD64});
  2995. AddInstruction(opBTR, "reg/mem16,reg16", "0FB3/r", {optO16}, {cpu386});
  2996. AddInstruction(opBTR, "reg/mem32,reg32", "0FB3/r", {optO32}, {cpu386});
  2997. AddInstruction(opBTR, "reg/mem64,reg64", "0FB3/r", {}, {cpuAMD64});
  2998. AddInstruction(opBTR, "reg/mem16,uimm8", "0FBA/6ib", {optO16}, {cpu386});
  2999. AddInstruction(opBTR, "reg/mem32,uimm8", "0FBA/6ib", {optO32}, {cpu386});
  3000. AddInstruction(opBTR, "reg/mem64,uimm8", "0FBA/6ib", {}, {cpuAMD64});
  3001. AddInstruction(opBTS, "reg/mem16,reg16", "0FAB/r", {optO16}, {cpu386});
  3002. AddInstruction(opBTS, "reg/mem32,reg32", "0FAB/r", {optO32}, {cpu386});
  3003. AddInstruction(opBTS, "reg/mem64,reg64", "0FAB/r", {}, {cpuAMD64});
  3004. AddInstruction(opBTS, "reg/mem16,uimm8", "0FBA/5ib", {optO16}, {cpu386});
  3005. AddInstruction(opBTS, "reg/mem32,uimm8", "0FBA/5ib", {optO32}, {cpu386});
  3006. AddInstruction(opBTS, "reg/mem64,uimm8", "0FBA/5ib", {}, {cpuAMD64});
  3007. AddInstruction(opCALL, "rel16off", "E8iw", {optO16}, {cpu8086});
  3008. AddInstruction(opCALL, "rel32off", "E8id", {optO32}, {cpu8086});
  3009. AddInstruction(opCALL, "reg/mem16", "FF/2", {optO16}, {cpu8086});
  3010. AddInstruction(opCALL, "reg/mem32", "FF/2", {optO32}, {cpu386});
  3011. AddInstruction(opCALL, "reg/mem64", "FF/2", {optO64}, {cpuAMD64});
  3012. AddInstruction(opCALLFAR, "pntr16:16", "9Acd", {optNot64}, {cpu8086});
  3013. AddInstruction(opCALLFAR, "pntr16:32", "9Acp", {optNot64}, {cpu386});
  3014. AddInstruction(opCALLFAR, "mem16:16", "FF/3", {optO16,optNot64}, {cpu8086});
  3015. AddInstruction(opCALLFAR, "mem16:32", "FF/3", {optO32,optNot64}, {cpu386});
  3016. AddInstruction(opCBW, "", "98", {optO16}, {cpu8086});
  3017. AddInstruction(opCDQ, "", "99", {optO32}, {cpu386});
  3018. AddInstruction(opCDQE, "", "98", {}, {cpuAMD64});
  3019. AddInstruction(opCLC, "", "F8", {}, {cpu8086});
  3020. AddInstruction(opCLD, "", "FC", {}, {cpu8086});
  3021. AddInstruction(opCLFLUSH, "mem8", "0FAE/7", {}, {cpuSSE2});
  3022. AddInstruction(opCLGI, "", "0F01DD", {}, {cpuAMD64});
  3023. AddInstruction(opCLI, "", "FA", {}, {cpu8086});
  3024. AddInstruction(opCLTS, "", "0F06", {}, {cpu286,cpuPrivileged});
  3025. AddInstruction(opCMC, "", "F5", {}, {cpu8086});
  3026. AddInstruction(opCMOVA, "reg16,reg/mem16", "0F47/r", {optO16}, {cpuP6});
  3027. AddInstruction(opCMOVA, "reg32,reg/mem32", "0F47/r", {optO32}, {cpuP6});
  3028. AddInstruction(opCMOVA, "reg64,reg/mem64", "0F47/r", {}, {cpuAMD64});
  3029. AddInstruction(opCMOVAE, "reg16,reg/mem16", "0F43/r", {optO16}, {cpuP6});
  3030. AddInstruction(opCMOVAE, "reg32,reg/mem32", "0F43/r", {optO32}, {cpuP6});
  3031. AddInstruction(opCMOVAE, "reg64,reg/mem64", "0F43/r", {}, {cpuAMD64});
  3032. AddInstruction(opCMOVB, "reg16,reg/mem16", "0F42/r", {optO16}, {cpuP6});
  3033. AddInstruction(opCMOVB, "reg32,reg/mem32", "0F42/r", {optO32}, {cpuP6});
  3034. AddInstruction(opCMOVB, "reg64,reg/mem64", "0F42/r", {}, {cpuAMD64});
  3035. AddInstruction(opCMOVBE, "reg16,reg/mem16", "0F46/r", {optO16}, {cpuP6});
  3036. AddInstruction(opCMOVBE, "reg32,reg/mem32", "0F46/r", {optO32}, {cpuP6});
  3037. AddInstruction(opCMOVBE, "reg64,reg/mem64", "0F46/r", {}, {cpuAMD64});
  3038. AddInstruction(opCMOVC, "reg16,reg/mem16", "0F42/r", {optO16}, {cpuP6});
  3039. AddInstruction(opCMOVC, "reg32,reg/mem32", "0F42/r", {optO32}, {cpuP6});
  3040. AddInstruction(opCMOVC, "reg64,reg/mem64", "0F42/r", {}, {cpuAMD64});
  3041. AddInstruction(opCMOVE, "reg16,reg/mem16", "0F44/r", {optO16}, {cpuP6});
  3042. AddInstruction(opCMOVE, "reg32,reg/mem32", "0F44/r", {optO32}, {cpuP6});
  3043. AddInstruction(opCMOVE, "reg64,reg/mem64", "0F44/r", {}, {cpuAMD64});
  3044. AddInstruction(opCMOVG, "reg16,reg/mem16", "0F4F/r", {optO16}, {cpuP6});
  3045. AddInstruction(opCMOVG, "reg32,reg/mem32", "0F4F/r", {optO32}, {cpuP6});
  3046. AddInstruction(opCMOVG, "reg64,reg/mem64", "0F4F/r", {}, {cpuAMD64});
  3047. AddInstruction(opCMOVGE, "reg16,reg/mem16", "0F4D/r", {optO16}, {cpuP6});
  3048. AddInstruction(opCMOVGE, "reg32,reg/mem32", "0F4D/r", {optO32}, {cpuP6});
  3049. AddInstruction(opCMOVGE, "reg64,reg/mem64", "0F4D/r", {}, {cpuAMD64});
  3050. AddInstruction(opCMOVL, "reg16,reg/mem16", "0F4C/r", {optO16}, {cpuP6});
  3051. AddInstruction(opCMOVL, "reg32,reg/mem32", "0F4C/r", {optO32}, {cpuP6});
  3052. AddInstruction(opCMOVL, "reg64,reg/mem64", "0F4C/r", {}, {cpuAMD64});
  3053. AddInstruction(opCMOVLE, "reg16,reg/mem16", "0F4E/r", {optO16}, {cpuP6});
  3054. AddInstruction(opCMOVLE, "reg32,reg/mem32", "0F4E/r", {optO32}, {cpuP6});
  3055. AddInstruction(opCMOVLE, "reg64,reg/mem64", "0F4E/r", {}, {cpuAMD64});
  3056. AddInstruction(opCMOVNA, "reg16,reg/mem16", "0F46/r", {optO16}, {cpuP6});
  3057. AddInstruction(opCMOVNA, "reg32,reg/mem32", "0F46/r", {optO32}, {cpuP6});
  3058. AddInstruction(opCMOVNA, "reg64,reg/mem64", "0F46/r", {}, {cpuAMD64});
  3059. AddInstruction(opCMOVNAE, "reg16,reg/mem16", "0F42/r", {optO16}, {cpuP6});
  3060. AddInstruction(opCMOVNAE, "reg32,reg/mem32", "0F42/r", {optO32}, {cpuP6});
  3061. AddInstruction(opCMOVNAE, "reg64,reg/mem64", "0F42/r", {}, {cpuAMD64});
  3062. AddInstruction(opCMOVNB, "reg16,reg/mem16", "0F43/r", {optO16}, {cpuP6});
  3063. AddInstruction(opCMOVNB, "reg32,reg/mem32", "0F43/r", {optO32}, {cpuP6});
  3064. AddInstruction(opCMOVNB, "reg64,reg/mem64", "0F43/r", {}, {cpuAMD64});
  3065. AddInstruction(opCMOVNBE, "reg16,reg/mem16", "0F47/r", {optO16}, {cpuP6});
  3066. AddInstruction(opCMOVNBE, "reg32,reg/mem32", "0F47/r", {optO32}, {cpuP6});
  3067. AddInstruction(opCMOVNBE, "reg64,reg/mem64", "0F47/r", {}, {cpuAMD64});
  3068. AddInstruction(opCMOVNC, "reg16,reg/mem16", "0F43/r", {optO16}, {cpuP6});
  3069. AddInstruction(opCMOVNC, "reg32,reg/mem32", "0F43/r", {optO32}, {cpuP6});
  3070. AddInstruction(opCMOVNC, "reg64,reg/mem64", "0F43/r", {}, {cpuAMD64});
  3071. AddInstruction(opCMOVNE, "reg16,reg/mem16", "0F45/r", {optO16}, {cpuP6});
  3072. AddInstruction(opCMOVNE, "reg32,reg/mem32", "0F45/r", {optO32}, {cpuP6});
  3073. AddInstruction(opCMOVNE, "reg64,reg/mem64", "0F45/r", {}, {cpuAMD64});
  3074. AddInstruction(opCMOVNG, "reg16,reg/mem16", "0F4E/r", {optO16}, {cpuP6});
  3075. AddInstruction(opCMOVNG, "reg32,reg/mem32", "0F4E/r", {optO32}, {cpuP6});
  3076. AddInstruction(opCMOVNG, "reg64,reg/mem64", "0F4E/r", {}, {cpuAMD64});
  3077. AddInstruction(opCMOVNGE, "reg16,reg/mem16", "0F4C/r", {optO16}, {cpuP6});
  3078. AddInstruction(opCMOVNGE, "reg32,reg/mem32", "0F4C/r", {optO32}, {cpuP6});
  3079. AddInstruction(opCMOVNGE, "reg64,reg/mem64", "0F4C/r", {}, {cpuAMD64});
  3080. AddInstruction(opCMOVNL, "reg16,reg/mem16", "0F4D/r", {optO16}, {cpuP6});
  3081. AddInstruction(opCMOVNL, "reg32,reg/mem32", "0F4D/r", {optO32}, {cpuP6});
  3082. AddInstruction(opCMOVNL, "reg64,reg/mem64", "0F4D/r", {}, {cpuAMD64});
  3083. AddInstruction(opCMOVNLE, "reg16,reg/mem16", "0F4F/r", {optO16}, {cpuP6});
  3084. AddInstruction(opCMOVNLE, "reg32,reg/mem32", "0F4F/r", {optO32}, {cpuP6});
  3085. AddInstruction(opCMOVNLE, "reg64,reg/mem64", "0F4F/r", {}, {cpuAMD64});
  3086. AddInstruction(opCMOVNO, "reg16,reg/mem16", "0F41/r", {optO16}, {cpuP6});
  3087. AddInstruction(opCMOVNO, "reg32,reg/mem32", "0F41/r", {optO32}, {cpuP6});
  3088. AddInstruction(opCMOVNO, "reg64,reg/mem64", "0F41/r", {}, {cpuAMD64});
  3089. AddInstruction(opCMOVNP, "reg16,reg/mem16", "0F4B/r", {optO16}, {cpuP6});
  3090. AddInstruction(opCMOVNP, "reg32,reg/mem32", "0F4B/r", {optO32}, {cpuP6});
  3091. AddInstruction(opCMOVNP, "reg64,reg/mem64", "0F4B/r", {}, {cpuAMD64});
  3092. AddInstruction(opCMOVNS, "reg16,reg/mem16", "0F49/r", {optO16}, {cpuP6});
  3093. AddInstruction(opCMOVNS, "reg32,reg/mem32", "0F49/r", {optO32}, {cpuP6});
  3094. AddInstruction(opCMOVNS, "reg64,reg/mem64", "0F49/r", {}, {cpuAMD64});
  3095. AddInstruction(opCMOVNZ, "reg16,reg/mem16", "0F45/r", {optO16}, {cpuP6});
  3096. AddInstruction(opCMOVNZ, "reg32,reg/mem32", "0F45/r", {optO32}, {cpuP6});
  3097. AddInstruction(opCMOVNZ, "reg64,reg/mem64", "0F45/r", {}, {cpuAMD64});
  3098. AddInstruction(opCMOVO, "reg16,reg/mem16", "0F40/r", {optO16}, {cpuP6});
  3099. AddInstruction(opCMOVO, "reg32,reg/mem32", "0F40/r", {optO32}, {cpuP6});
  3100. AddInstruction(opCMOVO, "reg64,reg/mem64", "0F40/r", {}, {cpuAMD64});
  3101. AddInstruction(opCMOVP, "reg16,reg/mem16", "0F4A/r", {optO16}, {cpuP6});
  3102. AddInstruction(opCMOVP, "reg32,reg/mem32", "0F4A/r", {optO32}, {cpuP6});
  3103. AddInstruction(opCMOVP, "reg64,reg/mem64", "0F4A/r", {}, {cpuAMD64});
  3104. AddInstruction(opCMOVPE, "reg16,reg/mem16", "0F4A/r", {optO16}, {cpuP6});
  3105. AddInstruction(opCMOVPE, "reg32,reg/mem32", "0F4A/r", {optO32}, {cpuP6});
  3106. AddInstruction(opCMOVPE, "reg64,reg/mem64", "0F4A/r", {}, {cpuAMD64});
  3107. AddInstruction(opCMOVPO, "reg16,reg/mem16", "0F4B/r", {optO16}, {cpuP6});
  3108. AddInstruction(opCMOVPO, "reg32,reg/mem32", "0F4B/r", {optO32}, {cpuP6});
  3109. AddInstruction(opCMOVPO, "reg64,reg/mem64", "0F4B/r", {}, {cpuAMD64});
  3110. AddInstruction(opCMOVS, "reg16,reg/mem16", "0F48/r", {optO16}, {cpuP6});
  3111. AddInstruction(opCMOVS, "reg32,reg/mem32", "0F48/r", {optO32}, {cpuP6});
  3112. AddInstruction(opCMOVS, "reg64,reg/mem64", "0F48/r", {}, {cpuAMD64});
  3113. AddInstruction(opCMOVZ, "reg16,reg/mem16", "0F44/r", {optO16}, {cpuP6});
  3114. AddInstruction(opCMOVZ, "reg32,reg/mem32", "0F44/r", {optO32}, {cpuP6});
  3115. AddInstruction(opCMOVZ, "reg64,reg/mem64", "0F44/r", {}, {cpuAMD64});
  3116. AddInstruction(opCMP, "reg/mem8,reg8", "38/r", {}, {cpu8086});
  3117. AddInstruction(opCMP, "reg/mem16,reg16", "39/r", {optO16}, {cpu8086});
  3118. AddInstruction(opCMP, "reg/mem32,reg32", "39/r", {optO32}, {cpu386});
  3119. AddInstruction(opCMP, "reg/mem64,reg64", "39/r", {}, {cpuAMD64});
  3120. AddInstruction(opCMP, "reg8,reg/mem8", "3A/r", {}, {cpu8086});
  3121. AddInstruction(opCMP, "reg16,reg/mem16", "3B/r", {optO16}, {cpu8086});
  3122. AddInstruction(opCMP, "reg32,reg/mem32", "3B/r", {optO32}, {cpu386});
  3123. AddInstruction(opCMP, "reg64,reg/mem64", "3B/r", {}, {cpuAMD64});
  3124. AddInstruction(opCMP, "AL,imm8", "3Cib", {}, {cpu8086});
  3125. AddInstruction(opCMP, "AX,imm16", "3Diw", {optO16}, {cpu8086});
  3126. AddInstruction(opCMP, "EAX,imm32", "3Did", {optO32}, {cpu386});
  3127. AddInstruction(opCMP, "RAX,simm32", "3Did", {}, {cpuAMD64});
  3128. AddInstruction(opCMP, "reg/mem8,imm8", "80/7ib", {}, {cpu8086});
  3129. AddInstruction(opCMP, "reg/mem16,imm16", "81/7iw", {optO16}, {cpu8086});
  3130. AddInstruction(opCMP, "reg/mem32,imm32", "81/7id", {optO32}, {cpu386});
  3131. AddInstruction(opCMP, "reg/mem64,simm32", "81/7id", {}, {cpuAMD64});
  3132. AddInstruction(opCMP, "reg/mem16,simm8", "83/7ib", {optO16}, {cpu8086});
  3133. AddInstruction(opCMP, "reg/mem32,simm8", "83/7ib", {optO32}, {cpu386});
  3134. AddInstruction(opCMP, "reg/mem64,simm8", "83/7ib", {}, {cpuAMD64});
  3135. AddInstruction(opCMPPD, "xmm1,xmm2/mem128,uimm8", "0FC2/rib", {optPOP}, {cpuSSE2});
  3136. AddInstruction(opCMPPS, "xmm1,xmm2/mem128,uimm8", "0FC2/rib", {}, {cpuSSE});
  3137. AddInstruction(opCMPS, "mem8,mem8", "A6", {}, {cpu8086});
  3138. AddInstruction(opCMPS, "mem16,mem16", "A7", {optO16}, {cpu8086});
  3139. AddInstruction(opCMPS, "mem32,mem32", "A7", {optO32}, {cpu386});
  3140. AddInstruction(opCMPS, "mem64,mem64", "A7", {}, {cpuAMD64});
  3141. AddInstruction(opCMPSB, "", "A6", {}, {cpu8086});
  3142. AddInstruction(opCMPSD, "", "A7", {optO32}, {cpu386});
  3143. AddInstruction(opCMPSD, "xmm1,xmm2/mem64,uimm8", "F20FC2/rib", {}, {cpuSSE2});
  3144. AddInstruction(opCMPSQ, "", "A7", {}, {cpuAMD64});
  3145. AddInstruction(opCMPSS, "xmm1,xmm2/mem32,uimm8", "F30FC2/rib", {}, {cpuSSE});
  3146. AddInstruction(opCMPSW, "", "A7", {optO16}, {cpu8086});
  3147. AddInstruction(opCMPXCHG, "reg/mem8,reg8", "0FB0/r", {}, {cpuPentium});
  3148. AddInstruction(opCMPXCHG, "reg/mem16,reg16", "0FB1/r", {optO16}, {cpuPentium});
  3149. AddInstruction(opCMPXCHG, "reg/mem32,reg32", "0FB1/r", {optO32}, {cpuPentium});
  3150. AddInstruction(opCMPXCHG, "reg/mem64,reg64", "0FB1/r", {}, {cpuAMD64});
  3151. AddInstruction(opCMPXCHG16B, "mem128", "0FC7/1m1", {}, {cpuSSE2});
  3152. AddInstruction(opCMPXCHG8B, "mem64", "0FC7/1m6", {}, {cpuPentium});
  3153. AddInstruction(opCOMISD, "xmm1,xmm2/mem64", "0F2F/r", {optPOP}, {cpuSSE2});
  3154. AddInstruction(opCOMISS, "xmm1,xmm2/mem32", "0F2F/r", {}, {cpuSSE});
  3155. AddInstruction(opCPUID, "", "0FA2", {}, {cpuPentium});
  3156. AddInstruction(opCQO, "", "99", {optO64}, {cpuAMD64});
  3157. AddInstruction(opCVTDQ2PD, "xmm1,xmm2/mem64", "F30FE6/r", {}, {cpuSSE2});
  3158. AddInstruction(opCVTDQ2PS, "xmm1,xmm2/mem128", "0F5B/r", {}, {cpuSSE2});
  3159. AddInstruction(opCVTPD2DQ, "xmm1,xmm2/mem128", "F20FE6/r", {}, {cpuSSE2});
  3160. AddInstruction(opCVTPD2PI, "mmx,xmm2/mem128", "0F2D/r", {optPOP}, {cpuSSE2});
  3161. AddInstruction(opCVTPD2PI, "mmx,xmm2/mem128", "0F2D/r", {optPOP}, {cpuSSE2});
  3162. AddInstruction(opCVTPD2PI, "mmx,xmm/mem128", "0F2C/r", {optPOP}, {cpuSSE2});
  3163. AddInstruction(opCVTPD2PS, "xmm1,xmm2/mem128", "0F5A/r", {optPOP}, {cpuSSE2});
  3164. AddInstruction(opCVTPI2PD, "xmm,mmx/mem64", "0F2A/r", {optPOP}, {cpuSSE2});
  3165. AddInstruction(opCVTPI2PD, "xmm,mmx/mem64", "0F2A/r", {optPOP}, {cpuSSE2});
  3166. AddInstruction(opCVTPI2PS, "xmm,mmx/mem64", "0F2A/r", {}, {cpuSSE});
  3167. AddInstruction(opCVTPI2PS, "xmm,mmx/mem64", "0F2A/r", {}, {cpuSSE});
  3168. AddInstruction(opCVTPS2DQ, "xmm1,xmm2/mem128", "0F5B/r", {optPOP}, {cpuSSE2});
  3169. AddInstruction(opCVTPS2PD, "xmm1,xmm2/mem64", "0F5A/r", {}, {cpuSSE2});
  3170. AddInstruction(opCVTPS2PI, "mmx,xmm/mem64", "0F2D/r", {}, {cpuSSE});
  3171. AddInstruction(opCVTPS2PI, "mmx,xmm/mem64", "0F2D/r", {}, {cpuSSE});
  3172. AddInstruction(opCVTSD2SI, "reg32,xmm/mem64", "F20F2D/r", {}, {cpuSSE2});
  3173. AddInstruction(opCVTSD2SI, "reg64,xmm/mem64", "F20F2D/r", {}, {cpuAMD64,cpuSSE2});
  3174. AddInstruction(opCVTSD2SS, "xmm1,xmm2/mem64", "F20F5A/r", {}, {cpuSSE2});
  3175. AddInstruction(opCVTSI2SD, "xmm,reg/mem32", "F20F2A/r", {}, {cpuSSE2});
  3176. AddInstruction(opCVTSI2SD, "xmm,reg/mem64", "F20F2A/r", {}, {cpuAMD64,cpuSSE2});
  3177. AddInstruction(opCVTSI2SS, "xmm,reg/mem32", "F30F2A/r", {}, {cpuSSE});
  3178. AddInstruction(opCVTSI2SS, "xmm,reg/mem64", "F30F2A/r", {}, {cpuAMD64,cpuSSE});
  3179. AddInstruction(opCVTSS2SD, "xmm1,xmm2/mem32", "F30F5A/r", {}, {cpuSSE2});
  3180. AddInstruction(opCVTSS2SI, "reg32,xmm2/mem32", "F30F2D/r", {}, {cpuSSE});
  3181. AddInstruction(opCVTSS2SI, "reg64,xmm2/mem32", "F30F2D/r", {}, {cpuAMD64,cpuSSE});
  3182. AddInstruction(opCVTTPD2DQ, "xmm1,xmm2/mem128", "0FE6/r", {optPOP}, {cpuSSE2});
  3183. AddInstruction(opCVTTPD2PI, "mmx,xmm/mem128", "0F2C/r", {optPOP}, {cpuSSE2});
  3184. AddInstruction(opCVTTPS2DQ, "xmm1,xmm2/mem128", "F30F5B/r", {}, {cpuSSE2});
  3185. AddInstruction(opCVTTPS2PI, "mmx,xmm/mem64", "0F2C/r", {}, {cpuSSE});
  3186. AddInstruction(opCVTTPS2PI, "mmx,xmm/mem64", "0F2C/r", {}, {cpuSSE});
  3187. AddInstruction(opCVTTSD2SI, "reg32,xmm/mem64", "F20F2C/r", {}, {cpuSSE2});
  3188. AddInstruction(opCVTTSD2SI, "reg64,xmm/mem64", "F20F2C/r", {}, {cpuAMD64,cpuSSE2});
  3189. AddInstruction(opCVTTSS2SI, "reg32,xmm/mem32", "F30F2C/r", {}, {cpuSSE});
  3190. AddInstruction(opCVTTSS2SI, "reg64,xmm/mem32", "F30F2C/r", {}, {cpuAMD64,cpuSSE});
  3191. AddInstruction(opCWD, "", "99", {optO16}, {cpu8086});
  3192. AddInstruction(opCWDE, "", "98", {optO32}, {cpu386});
  3193. AddInstruction(opDAA, "", "27", {optNot64}, {cpu8086});
  3194. AddInstruction(opDAS, "", "2F", {optNot64}, {cpu8086});
  3195. AddInstruction(opDEC, "reg16", "48rw", {optO16,optNot64}, {cpu8086});
  3196. AddInstruction(opDEC, "reg32", "48rd", {optO32,optNot64}, {cpu386});
  3197. AddInstruction(opDEC, "reg/mem8", "FE/1", {}, {cpu8086});
  3198. AddInstruction(opDEC, "reg/mem16", "FF/1", {optO16}, {cpu8086});
  3199. AddInstruction(opDEC, "reg/mem32", "FF/1", {optO32}, {cpu386});
  3200. AddInstruction(opDEC, "reg/mem64", "FF/1", {}, {cpuAMD64});
  3201. AddInstruction(opDIV, "reg/mem8", "F6/6", {}, {cpu8086});
  3202. AddInstruction(opDIV, "reg/mem16", "F7/6", {optO16}, {cpu8086});
  3203. AddInstruction(opDIV, "reg/mem32", "F7/6", {optO32}, {cpu386});
  3204. AddInstruction(opDIV, "reg/mem64", "F7/6", {}, {cpuAMD64});
  3205. AddInstruction(opDIVPD, "xmm1,xmm2/mem128", "0F5E/r", {optPOP}, {cpuSSE2});
  3206. AddInstruction(opDIVPS, "xmm1,xmm2/mem128", "0F5E/r", {}, {cpuSSE});
  3207. AddInstruction(opDIVSD, "xmm1,xmm2/mem64", "F20F5E/r", {}, {cpuSSE2});
  3208. AddInstruction(opDIVSS, "xmm1,xmm2/mem32", "F30F5E/r", {}, {cpuSSE});
  3209. AddInstruction(opEMMS, "", "0F77", {}, {cpuMMX});
  3210. AddInstruction(opENTER, "uimm16,uimm8", "C8iwib", {}, {cpu186});
  3211. AddInstruction(opF2XM1, "", "D9F0", {}, {cpu8086,cpuFPU});
  3212. AddInstruction(opFABS, "", "D9E1", {}, {cpu8086,cpuFPU});
  3213. AddInstruction(opFADD, "mem32real", "D8/0", {}, {cpu8086,cpuFPU});
  3214. AddInstruction(opFADD, "mem64real", "DC/0", {}, {cpu8086,cpuFPU});
  3215. AddInstruction(opFADD, "ST(0),ST(i)", "D8C0+i", {}, {cpu8086,cpuFPU});
  3216. AddInstruction(opFADD, "ST(i),ST(0)", "DCC0+i", {}, {cpu8086,cpuFPU});
  3217. AddInstruction(opFADDP, "", "DEC1", {}, {cpu8086,cpuFPU});
  3218. AddInstruction(opFADDP, "ST(i),ST(0)", "DEC0+i", {}, {cpu8086,cpuFPU});
  3219. AddInstruction(opFBLD, "mem80dec", "DF/4", {}, {cpu8086,cpuFPU});
  3220. AddInstruction(opFBSTP, "mem80dec", "DF/6", {}, {cpu8086,cpuFPU});
  3221. AddInstruction(opFCHS, "", "D9E0", {}, {cpu8086,cpuFPU});
  3222. AddInstruction(opFCLEX, "", "9BDBE2", {}, {cpu8086,cpuFPU});
  3223. AddInstruction(opFCMOVB, "ST(0),ST(i)", "DAC0+i", {}, {cpuP6,cpuFPU});
  3224. AddInstruction(opFCMOVBE, "ST(0),ST(i)", "DAD0+i", {}, {cpuP6,cpuFPU});
  3225. AddInstruction(opFCMOVE, "ST(0),ST(i)", "DAC8+i", {}, {cpuP6,cpuFPU});
  3226. AddInstruction(opFCMOVNB, "ST(0),ST(i)", "DBC0+i", {}, {cpuP6,cpuFPU});
  3227. AddInstruction(opFCMOVNBE, "ST(0),ST(i)", "DBD0+i", {}, {cpuP6,cpuFPU});
  3228. AddInstruction(opFCMOVNE, "ST(0),ST(i)", "DBC8+i", {}, {cpuP6,cpuFPU});
  3229. AddInstruction(opFCMOVNU, "ST(0),ST(i)", "DBD8+i", {}, {cpuP6,cpuFPU});
  3230. AddInstruction(opFCMOVU, "ST(0),ST(i)", "DAD8+i", {}, {cpuP6,cpuFPU});
  3231. AddInstruction(opFCOM, "", "D8D1", {}, {cpu8086,cpuFPU});
  3232. AddInstruction(opFCOM, "ST(i)", "D8D0+i", {}, {cpu8086,cpuFPU});
  3233. AddInstruction(opFCOM, "mem32real", "D8/2", {}, {cpu8086,cpuFPU});
  3234. AddInstruction(opFCOM, "mem64real", "DC/2", {}, {cpu8086,cpuFPU});
  3235. AddInstruction(opFCOMI, "ST(0),ST(i)", "DBF0+i", {}, {cpuP6,cpuFPU});
  3236. AddInstruction(opFCOMIP, "ST(0),ST(i)", "DFF0+i", {}, {cpuP6,cpuFPU});
  3237. AddInstruction(opFCOMP, "", "D8D9", {}, {cpu8086,cpuFPU});
  3238. AddInstruction(opFCOMP, "ST(i)", "D8D8+i", {}, {cpu8086,cpuFPU});
  3239. AddInstruction(opFCOMP, "mem32real", "D8/3", {}, {cpu8086,cpuFPU});
  3240. AddInstruction(opFCOMP, "mem64real", "DC/3", {}, {cpu8086,cpuFPU});
  3241. AddInstruction(opFCOMPP, "", "DED9", {}, {cpu8086,cpuFPU});
  3242. AddInstruction(opFCOS, "", "D9FF", {}, {cpu386,cpuFPU});
  3243. AddInstruction(opFDECSTP, "", "D9F6", {}, {cpu8086,cpuFPU});
  3244. AddInstruction(opFDIV, "mem32real", "D8/6", {}, {cpu8086,cpuFPU});
  3245. AddInstruction(opFDIV, "mem64real", "DC/6", {}, {cpu8086,cpuFPU});
  3246. AddInstruction(opFDIV, "ST(0),ST(i)", "D8F0+i", {}, {cpu8086,cpuFPU});
  3247. AddInstruction(opFDIV, "ST(i),ST(0)", "DCF8+i", {}, {cpu8086,cpuFPU});
  3248. AddInstruction(opFDIVP, "", "DEF9", {}, {cpu8086,cpuFPU});
  3249. AddInstruction(opFDIVP, "ST(i),ST(0)", "DEF8+i", {}, {cpu8086,cpuFPU});
  3250. AddInstruction(opFDIVR, "mem32real", "D8/7", {}, {cpu8086,cpuFPU});
  3251. AddInstruction(opFDIVR, "mem64real", "DC/7", {}, {cpu8086,cpuFPU});
  3252. AddInstruction(opFDIVR, "ST(0),ST(i)", "D8F8+i", {}, {cpu8086,cpuFPU});
  3253. AddInstruction(opFDIVR, "ST(i),ST(0)", "DCF0+i", {}, {cpu8086,cpuFPU});
  3254. AddInstruction(opFDIVRP, "", "DEF1", {}, {cpu8086,cpuFPU});
  3255. AddInstruction(opFDIVRP, "ST(i),ST(0)", "DEF0+i", {}, {cpu8086,cpuFPU});
  3256. AddInstruction(opFEMMS, "", "0F0E", {}, {cpu3DNow});
  3257. AddInstruction(opFFREE, "ST(i)", "DDC0+i", {}, {cpu8086,cpuFPU});
  3258. AddInstruction(opFIADD, "mem16int", "DE/0", {}, {cpu8086,cpuFPU});
  3259. AddInstruction(opFIADD, "mem32int", "DA/0", {}, {cpu8086,cpuFPU});
  3260. AddInstruction(opFICOM, "mem16int", "DE/2", {}, {cpu8086,cpuFPU});
  3261. AddInstruction(opFICOM, "mem32int", "DA/2", {}, {cpu8086,cpuFPU});
  3262. AddInstruction(opFICOMP, "mem16int", "DE/3", {}, {cpu8086,cpuFPU});
  3263. AddInstruction(opFICOMP, "mem32int", "DA/3", {}, {cpu8086,cpuFPU});
  3264. AddInstruction(opFIDIV, "mem16int", "DE/6", {}, {cpu8086,cpuFPU});
  3265. AddInstruction(opFIDIV, "mem32int", "DA/6", {}, {cpu8086,cpuFPU});
  3266. AddInstruction(opFIDIVR, "mem16int", "DE/7", {}, {cpu8086,cpuFPU});
  3267. AddInstruction(opFIDIVR, "mem32int", "DA/7", {}, {cpu8086,cpuFPU});
  3268. AddInstruction(opFILD, "mem16int", "DF/0", {}, {cpu8086,cpuFPU});
  3269. AddInstruction(opFILD, "mem32int", "DB/0", {}, {cpu8086,cpuFPU});
  3270. AddInstruction(opFILD, "mem64int", "DF/5", {}, {cpu8086,cpuFPU});
  3271. AddInstruction(opFIMUL, "mem16int", "DE/1", {}, {cpu8086,cpuFPU});
  3272. AddInstruction(opFIMUL, "mem32int", "DA/1", {}, {cpu8086,cpuFPU});
  3273. AddInstruction(opFINCSTP, "", "D9F7", {}, {cpu8086,cpuFPU});
  3274. AddInstruction(opFINIT, "", "9BDBE3", {}, {cpu8086,cpuFPU});
  3275. AddInstruction(opFIST, "mem16int", "DF/2", {}, {cpu8086,cpuFPU});
  3276. AddInstruction(opFIST, "mem32int", "DB/2", {}, {cpu8086,cpuFPU});
  3277. AddInstruction(opFISTP, "mem16int", "DF/3", {}, {cpu8086,cpuFPU});
  3278. AddInstruction(opFISTP, "mem32int", "DB/3", {}, {cpu8086,cpuFPU});
  3279. AddInstruction(opFISTP, "mem64int", "DF/7", {}, {cpu8086,cpuFPU});
  3280. AddInstruction(opFISTTP, "mem16int", "DF/1", {}, {cpuFPU});
  3281. AddInstruction(opFISTTP, "mem32int", "DB/1", {}, {cpuFPU});
  3282. AddInstruction(opFISTTP, "mem64int", "DD/1", {}, {cpuFPU});
  3283. AddInstruction(opFISUB, "mem16int", "DE/4", {}, {cpu8086,cpuFPU});
  3284. AddInstruction(opFISUB, "mem32int", "DA/4", {}, {cpu8086,cpuFPU});
  3285. AddInstruction(opFISUBR, "mem16int", "DE/5", {}, {cpu8086,cpuFPU});
  3286. AddInstruction(opFISUBR, "mem32int", "DA/5", {}, {cpu8086,cpuFPU});
  3287. AddInstruction(opFLD, "ST(i)", "D9C0+i", {}, {cpu8086,cpuFPU});
  3288. AddInstruction(opFLD, "mem32real", "D9/0", {}, {cpu8086,cpuFPU});
  3289. AddInstruction(opFLD, "mem64real", "DD/0", {}, {cpu8086,cpuFPU});
  3290. AddInstruction(opFLD, "mem80real", "DB/5", {}, {cpu8086,cpuFPU});
  3291. AddInstruction(opFLD1, "", "D9E8", {}, {cpu8086,cpuFPU});
  3292. AddInstruction(opFLDCW, "mem2env", "D9/5", {}, {cpu8086,cpuFPU});
  3293. AddInstruction(opFLDENV, "mem14/28env", "D9/4", {}, {cpu8086,cpuFPU});
  3294. AddInstruction(opFLDL2E, "", "D9EA", {}, {cpu8086,cpuFPU});
  3295. AddInstruction(opFLDL2T, "", "D9E9", {}, {cpu8086,cpuFPU});
  3296. AddInstruction(opFLDLG2, "", "D9EC", {}, {cpu8086,cpuFPU});
  3297. AddInstruction(opFLDLN2, "", "D9ED", {}, {cpu8086,cpuFPU});
  3298. AddInstruction(opFLDPI, "", "D9EB", {}, {cpu8086,cpuFPU});
  3299. AddInstruction(opFLDZ, "", "D9EE", {}, {cpu8086,cpuFPU});
  3300. AddInstruction(opFMUL, "mem32real", "D8/1", {}, {cpu8086,cpuFPU});
  3301. AddInstruction(opFMUL, "mem64real", "DC/1", {}, {cpu8086,cpuFPU});
  3302. AddInstruction(opFMUL, "ST(0),ST(i)", "D8C8+i", {}, {cpu8086,cpuFPU});
  3303. AddInstruction(opFMUL, "ST(i),ST(0)", "DCC8+i", {}, {cpu8086,cpuFPU});
  3304. AddInstruction(opFMULP, "", "DEC9", {}, {cpu8086,cpuFPU});
  3305. AddInstruction(opFMULP, "ST(i),ST(0)", "DEC8+i", {}, {cpu8086,cpuFPU});
  3306. AddInstruction(opFNCLEX, "", "DBE2", {}, {cpu8086,cpuFPU});
  3307. AddInstruction(opFNINIT, "", "DBE3", {}, {cpu8086,cpuFPU});
  3308. AddInstruction(opFNOP, "", "D9D0", {}, {cpu8086,cpuFPU});
  3309. AddInstruction(opFNSAVE, "mem94/108env", "DD/6", {}, {cpu8086,cpuFPU});
  3310. AddInstruction(opFNSAVE, "mem94/108env", "DD/6", {}, {cpu8086,cpuFPU});
  3311. AddInstruction(opFNSTCW, "mem2env", "D9/7", {}, {cpu8086,cpuFPU});
  3312. AddInstruction(opFNSTENV, "mem14/28env", "D9/6", {}, {cpu8086,cpuFPU});
  3313. AddInstruction(opFNSTSW, "AX", "DFE0", {}, {cpu286,cpuFPU});
  3314. AddInstruction(opFNSTSW, "mem2env", "DD/7", {}, {cpu8086,cpuFPU});
  3315. AddInstruction(opFPATAN, "", "D9F3", {}, {cpu8086,cpuFPU});
  3316. AddInstruction(opFPREM, "", "D9F8", {}, {cpu8086,cpuFPU});
  3317. AddInstruction(opFPREM1, "", "D9F5", {}, {cpu386,cpuFPU});
  3318. AddInstruction(opFPTAN, "", "D9F2", {}, {cpu8086,cpuFPU});
  3319. AddInstruction(opFRNDINT, "", "D9FC", {}, {cpu8086,cpuFPU});
  3320. AddInstruction(opFRSTOR, "mem94/108env", "DD/4", {}, {cpu8086,cpuFPU});
  3321. AddInstruction(opFRSTOR, "mem94/108env", "DD/4", {}, {cpu8086,cpuFPU});
  3322. AddInstruction(opFSAVE, "mem94/108env", "9BDD/6", {}, {cpu8086,cpuFPU});
  3323. AddInstruction(opFSAVE, "mem94/108env", "9BDD/6", {}, {cpu8086,cpuFPU});
  3324. AddInstruction(opFSCALE, "", "D9FD", {}, {cpu8086,cpuFPU});
  3325. AddInstruction(opFSIN, "", "D9FE", {}, {cpu386,cpuFPU});
  3326. AddInstruction(opFSINCOS, "", "D9FB", {}, {cpu386,cpuFPU});
  3327. AddInstruction(opFSQRT, "", "D9FA", {}, {cpu8086,cpuFPU});
  3328. AddInstruction(opFST, "ST(i)", "DDD0+i", {}, {cpu8086,cpuFPU});
  3329. AddInstruction(opFST, "mem32real", "D9/2", {}, {cpu8086,cpuFPU});
  3330. AddInstruction(opFST, "mem64real", "DD/2", {}, {cpu8086,cpuFPU});
  3331. AddInstruction(opFSTCW, "mem2env", "9BD9/7", {}, {cpu8086,cpuFPU});
  3332. AddInstruction(opFSTENV, "mem14/28env", "9BD9/6", {}, {cpu8086,cpuFPU});
  3333. AddInstruction(opFSTP, "ST(i)", "DDD8+i", {}, {cpu8086,cpuFPU});
  3334. AddInstruction(opFSTP, "mem32real", "D9/3", {}, {cpu8086,cpuFPU});
  3335. AddInstruction(opFSTP, "mem64real", "DD/3", {}, {cpu8086,cpuFPU});
  3336. AddInstruction(opFSTP, "mem80real", "DB/7", {}, {cpu8086,cpuFPU});
  3337. AddInstruction(opFSTSW, "AX", "9BDFE0", {}, {cpu286,cpuFPU});
  3338. AddInstruction(opFSTSW, "mem2env", "9BDD/7", {}, {cpu8086,cpuFPU});
  3339. AddInstruction(opFSUB, "mem32real", "D8/4", {}, {cpu8086,cpuFPU});
  3340. AddInstruction(opFSUB, "mem64real", "DC/4", {}, {cpu8086,cpuFPU});
  3341. AddInstruction(opFSUB, "ST(0),ST(i)", "D8E0+i", {}, {cpu8086,cpuFPU});
  3342. AddInstruction(opFSUB, "ST(i),ST(0)", "DCE8+i", {}, {cpu8086,cpuFPU});
  3343. AddInstruction(opFSUBP, "", "DEE9", {}, {cpu8086,cpuFPU});
  3344. AddInstruction(opFSUBP, "ST(i),ST(0)", "DEE8+i", {}, {cpu8086,cpuFPU});
  3345. AddInstruction(opFSUBR, "mem32real", "D8/5", {}, {cpu8086,cpuFPU});
  3346. AddInstruction(opFSUBR, "mem64real", "DC/5", {}, {cpu8086,cpuFPU});
  3347. AddInstruction(opFSUBR, "ST(0),ST(i)", "D8E8+i", {}, {cpu8086,cpuFPU});
  3348. AddInstruction(opFSUBR, "ST(i),ST(0)", "DCE0+i", {}, {cpu8086,cpuFPU});
  3349. AddInstruction(opFSUBRP, "", "DEE1", {}, {cpu8086,cpuFPU});
  3350. AddInstruction(opFSUBRP, "ST(i),ST(0)", "DEE0+i", {}, {cpu8086,cpuFPU});
  3351. AddInstruction(opFTST, "", "D9E4", {}, {cpu8086,cpuFPU});
  3352. AddInstruction(opFUCOM, "", "DDE1", {}, {cpu386,cpuFPU});
  3353. AddInstruction(opFUCOM, "ST(i)", "DDE0+i", {}, {cpu386,cpuFPU});
  3354. AddInstruction(opFUCOMI, "ST(0),ST(i)", "DBE8+i", {}, {cpuP6,cpuFPU});
  3355. AddInstruction(opFUCOMIP, "ST(0),ST(i)", "DFE8+i", {}, {cpuP6,cpuFPU});
  3356. AddInstruction(opFUCOMP, "", "DDE9", {}, {cpu386,cpuFPU});
  3357. AddInstruction(opFUCOMP, "ST(i)", "DDE8+i", {}, {cpu386,cpuFPU});
  3358. AddInstruction(opFUCOMPP, "", "DAE9", {}, {cpu386,cpuFPU});
  3359. AddInstruction(opFWAIT, "", "9B", {}, {cpu8086});
  3360. AddInstruction(opFXAM, "", "D9E5", {}, {cpu8086,cpuFPU});
  3361. AddInstruction(opFXCH, "", "D9C9", {}, {cpu8086,cpuFPU});
  3362. AddInstruction(opFXCH, "ST(i)", "D9C8+i", {}, {cpu8086,cpuFPU});
  3363. AddInstruction(opFXRSTOR, "mem512env", "0FAE/1", {}, {cpuP6,cpuSSE,cpuFPU});
  3364. AddInstruction(opFXRSTOR, "mem512env", "0FAE/1", {}, {cpuP6,cpuSSE,cpuFPU});
  3365. AddInstruction(opFXRSTOR, "mem512env", "0FAE/1", {}, {cpuP6,cpuSSE,cpuFPU});
  3366. AddInstruction(opFXSAVE, "mem512env", "0FAE/0", {}, {cpuP6,cpuSSE,cpuFPU});
  3367. AddInstruction(opFXSAVE, "mem512env", "0FAE/0", {}, {cpuP6,cpuSSE,cpuFPU});
  3368. AddInstruction(opFXSAVE, "mem512env", "0FAE/0", {}, {cpuP6,cpuSSE,cpuFPU});
  3369. AddInstruction(opFXTRACT, "", "D9F4", {}, {cpu8086,cpuFPU});
  3370. AddInstruction(opFYL2X, "", "D9F1", {}, {cpu8086,cpuFPU});
  3371. AddInstruction(opFYL2XP1, "", "D9F9", {}, {cpu8086,cpuFPU});
  3372. AddInstruction(opHADDPD, "xmm1,xmm2/mem128", "0F7C/r", {optPOP}, {cpuSSE3});
  3373. AddInstruction(opHADDPS, "xmm1,xmm2/mem128", "F20F7C/r", {}, {cpuSSE3});
  3374. AddInstruction(opHLT, "", "F4", {}, {cpu8086,cpuPrivileged});
  3375. AddInstruction(opHSUBPD, "xmm1,xmm2/mem128", "0F7D/r", {optPOP}, {cpuSSE3});
  3376. AddInstruction(opHSUBPS, "xmm1,xmm2/mem128", "F20F7D/r", {}, {cpuSSE3});
  3377. AddInstruction(opIDIV, "reg/mem8", "F6/7", {}, {cpu8086});
  3378. AddInstruction(opIDIV, "reg/mem16", "F7/7", {optO16}, {cpu8086});
  3379. AddInstruction(opIDIV, "reg/mem32", "F7/7", {optO32}, {cpu386});
  3380. AddInstruction(opIDIV, "reg/mem64", "F7/7", {}, {cpuAMD64});
  3381. AddInstruction(opIMUL, "reg/mem8", "F6/5", {}, {cpu8086});
  3382. AddInstruction(opIMUL, "reg/mem16", "F7/5", {optO16}, {cpu8086});
  3383. AddInstruction(opIMUL, "reg/mem32", "F7/5", {optO32}, {cpu386});
  3384. AddInstruction(opIMUL, "reg/mem64", "F7/5", {}, {cpuAMD64});
  3385. AddInstruction(opIMUL, "reg16,reg/mem16", "0FAF/r", {optO16}, {cpu386});
  3386. AddInstruction(opIMUL, "reg32,reg/mem32", "0FAF/r", {optO32}, {cpu386});
  3387. AddInstruction(opIMUL, "reg64,reg/mem64", "0FAF/r", {}, {cpuAMD64});
  3388. AddInstruction(opIMUL, "reg16,reg/mem16,simm8", "6B/rib", {optO16}, {cpu186});
  3389. AddInstruction(opIMUL, "reg32,reg/mem32,simm8", "6B/rib", {optO32}, {cpu386});
  3390. AddInstruction(opIMUL, "reg64,reg/mem64,simm8", "6B/rib", {}, {cpuAMD64});
  3391. AddInstruction(opIMUL, "reg16,reg/mem16,simm16", "69/riw", {optO16}, {cpu186});
  3392. AddInstruction(opIMUL, "reg32,reg/mem32,simm32", "69/rid", {optO32}, {cpu386});
  3393. AddInstruction(opIMUL, "reg64,reg/mem64,simm32", "69/rid", {}, {cpuAMD64});
  3394. AddInstruction(opIN, "AL,uimm8", "E4ib", {}, {cpu8086});
  3395. AddInstruction(opIN, "AX,uimm8", "E5ib", {optO16}, {cpu8086});
  3396. AddInstruction(opIN, "EAX,uimm8", "E5ib", {optO32}, {cpu386});
  3397. AddInstruction(opIN, "AL,DX", "EC", {}, {cpu8086});
  3398. AddInstruction(opIN, "AX,DX", "ED", {optO16}, {cpu8086});
  3399. AddInstruction(opIN, "EAX,DX", "ED", {optO32}, {cpu386});
  3400. AddInstruction(opINC, "reg16", "40rw", {optO16,optNot64}, {cpu8086});
  3401. AddInstruction(opINC, "reg32", "40rd", {optO32,optNot64}, {cpu386});
  3402. AddInstruction(opINC, "reg/mem8", "FE/0", {}, {cpu8086});
  3403. AddInstruction(opINC, "reg/mem16", "FF/0", {optO16}, {cpu8086});
  3404. AddInstruction(opINC, "reg/mem32", "FF/0", {optO32}, {cpu386});
  3405. AddInstruction(opINC, "reg/mem64", "FF/0", {}, {cpuAMD64});
  3406. AddInstruction(opINS, "mem8,DX", "6C", {}, {cpu186});
  3407. AddInstruction(opINS, "mem16,DX", "6D", {optO16}, {cpu186});
  3408. AddInstruction(opINS, "mem32,DX", "6D", {optO32}, {cpu386});
  3409. AddInstruction(opINSB, "", "6C", {}, {cpu186});
  3410. AddInstruction(opINSD, "", "6D", {optO32}, {cpu386});
  3411. AddInstruction(opINSW, "", "6D", {optO16}, {cpu186});
  3412. AddInstruction(opINT, "uimm8", "CDib", {}, {cpu8086});
  3413. AddInstruction(opINT3, "", "CC", {}, {cpu8086});
  3414. AddInstruction(opINTO, "", "CE", {optNot64}, {cpu8086});
  3415. AddInstruction(opINVD, "", "0F08", {}, {cpu486,cpuPrivileged});
  3416. AddInstruction(opINVLPG, "mem8", "0F01/7", {}, {cpu486});
  3417. AddInstruction(opINVLPGA, "rAX,ECX", "0F01DF", {}, {cpu386});
  3418. AddInstruction(opIRET, "", "CF", {optO16}, {cpu8086});
  3419. AddInstruction(opIRETD, "", "CF", {optO32}, {cpu386});
  3420. AddInstruction(opIRETQ, "", "CF", {optO64}, {cpuAMD64});
  3421. AddInstruction(opJA, "rel8off", "77cb", {}, {cpu8086});
  3422. AddInstruction(opJA, "rel16off", "0F87cw", {optO16}, {cpu386});
  3423. AddInstruction(opJA, "rel32off", "0F87cd", {optO32}, {cpu386});
  3424. AddInstruction(opJAE, "rel8off", "73cb", {}, {cpu8086});
  3425. AddInstruction(opJAE, "rel16off", "0F83cw", {optO16}, {cpu386});
  3426. AddInstruction(opJAE, "rel32off", "0F83cd", {optO32}, {cpu386});
  3427. AddInstruction(opJB, "rel8off", "72cb", {}, {cpu8086});
  3428. AddInstruction(opJB, "rel16off", "0F82cw", {optO16}, {cpu386});
  3429. AddInstruction(opJB, "rel32off", "0F82cd", {optO32}, {cpu386});
  3430. AddInstruction(opJBE, "rel8off", "76cb", {}, {cpu8086});
  3431. AddInstruction(opJBE, "rel16off", "0F86cw", {optO16}, {cpu386});
  3432. AddInstruction(opJBE, "rel32off", "0F86cd", {optO32}, {cpu386});
  3433. AddInstruction(opJC, "rel8off", "72cb", {}, {cpu8086});
  3434. AddInstruction(opJC, "rel16off", "0F82cw", {optO16}, {cpu386});
  3435. AddInstruction(opJC, "rel32off", "0F82cd", {optO32}, {cpu386});
  3436. AddInstruction(opJCXZ, "rel8off", "E3cb", {optA16}, {cpu8086});
  3437. AddInstruction(opJE, "rel8off", "74cb", {}, {cpu8086});
  3438. AddInstruction(opJE, "rel16off", "0F84cw", {optO16}, {cpu386});
  3439. AddInstruction(opJE, "rel32off", "0F84cd", {optO32}, {cpu386});
  3440. AddInstruction(opJECXZ, "rel8off", "E3cb", {optA32}, {cpu386});
  3441. AddInstruction(opJG, "rel8off", "7Fcb", {}, {cpu8086});
  3442. AddInstruction(opJG, "rel16off", "0F8Fcw", {optO16}, {cpu386});
  3443. AddInstruction(opJG, "rel32off", "0F8Fcd", {optO32}, {cpu386});
  3444. AddInstruction(opJGE, "rel8off", "7Dcb", {}, {cpu8086});
  3445. AddInstruction(opJGE, "rel16off", "0F8Dcw", {optO16}, {cpu386});
  3446. AddInstruction(opJGE, "rel32off", "0F8Dcd", {optO32}, {cpu386});
  3447. AddInstruction(opJL, "rel8off", "7Ccb", {}, {cpu8086});
  3448. AddInstruction(opJL, "rel16off", "0F8Ccw", {optO16}, {cpu386});
  3449. AddInstruction(opJL, "rel32off", "0F8Ccd", {optO32}, {cpu386});
  3450. AddInstruction(opJLE, "rel8off", "7Ecb", {}, {cpu8086});
  3451. AddInstruction(opJLE, "rel16off", "0F8Ecw", {optO16}, {cpu386});
  3452. AddInstruction(opJLE, "rel32off", "0F8Ecd", {optO32}, {cpu386});
  3453. AddInstruction(opJMP, "rel8off", "EBcb", {}, {cpu8086});
  3454. AddInstruction(opJMP, "rel16off", "E9cw", {optO16}, {cpu8086});
  3455. AddInstruction(opJMP, "rel32off", "E9cd", {optO32}, {cpu8086});
  3456. AddInstruction(opJMP, "reg/mem16", "FF/4", {optO16}, {cpu8086});
  3457. AddInstruction(opJMP, "reg/mem32", "FF/4", {optO32}, {cpu386});
  3458. AddInstruction(opJMP, "reg/mem64", "FF/4", {}, {cpuAMD64});
  3459. AddInstruction(opJMPFAR, "pntr16:16", "EAcd", {optO16,optNot64}, {cpu8086});
  3460. AddInstruction(opJMPFAR, "pntr16:32", "EAcp", {optO32,optNot64}, {cpu386});
  3461. AddInstruction(opJMPFAR, "mem16:16", "FF/5", {optO16}, {cpu8086});
  3462. AddInstruction(opJMPFAR, "mem16:32", "FF/5", {optO32}, {cpu386});
  3463. AddInstruction(opJNA, "rel8off", "76cb", {}, {cpu8086});
  3464. AddInstruction(opJNA, "rel16off", "0F86cw", {optO16}, {cpu386});
  3465. AddInstruction(opJNA, "rel32off", "0F86cd", {optO32}, {cpu386});
  3466. AddInstruction(opJNAE, "rel8off", "72cb", {}, {cpu8086});
  3467. AddInstruction(opJNAE, "rel16off", "0F82cw", {optO16}, {cpu386});
  3468. AddInstruction(opJNAE, "rel32off", "0F82cd", {optO32}, {cpu386});
  3469. AddInstruction(opJNB, "rel8off", "73cb", {}, {cpu8086});
  3470. AddInstruction(opJNB, "rel16off", "0F83cw", {optO16}, {cpu386});
  3471. AddInstruction(opJNB, "rel32off", "0F83cd", {optO32}, {cpu386});
  3472. AddInstruction(opJNBE, "rel8off", "77cb", {}, {cpu8086});
  3473. AddInstruction(opJNBE, "rel16off", "0F87cw", {optO16}, {cpu386});
  3474. AddInstruction(opJNBE, "rel32off", "0F87cd", {optO32}, {cpu386});
  3475. AddInstruction(opJNC, "rel8off", "73cb", {}, {cpu8086});
  3476. AddInstruction(opJNC, "rel16off", "0F83cw", {optO16}, {cpu386});
  3477. AddInstruction(opJNC, "rel32off", "0F83cd", {optO32}, {cpu386});
  3478. AddInstruction(opJNE, "rel8off", "75cb", {}, {cpu8086});
  3479. AddInstruction(opJNE, "rel16off", "0F85cw", {optO16}, {cpu386});
  3480. AddInstruction(opJNE, "rel32off", "0F85cd", {optO32}, {cpu386});
  3481. AddInstruction(opJNG, "rel8off", "7Ecb", {}, {cpu8086});
  3482. AddInstruction(opJNG, "rel16off", "0F8Ecw", {optO16}, {cpu386});
  3483. AddInstruction(opJNG, "rel32off", "0F8Ecd", {optO32}, {cpu386});
  3484. AddInstruction(opJNGE, "rel8off", "7Ccb", {}, {cpu8086});
  3485. AddInstruction(opJNGE, "rel16off", "0F8Ccw", {optO16}, {cpu386});
  3486. AddInstruction(opJNGE, "rel32off", "0F8Ccd", {optO32}, {cpu386});
  3487. AddInstruction(opJNL, "rel8off", "7Dcb", {}, {cpu8086});
  3488. AddInstruction(opJNL, "rel16off", "0F8Dcw", {optO16}, {cpu386});
  3489. AddInstruction(opJNL, "rel32off", "0F8Dcd", {optO32}, {cpu386});
  3490. AddInstruction(opJNLE, "rel8off", "7Fcb", {}, {cpu8086});
  3491. AddInstruction(opJNLE, "rel16off", "0F8Fcw", {optO16}, {cpu386});
  3492. AddInstruction(opJNLE, "rel32off", "0F8Fcd", {optO32}, {cpu386});
  3493. AddInstruction(opJNO, "rel8off", "71cb", {}, {cpu8086});
  3494. AddInstruction(opJNO, "rel16off", "0F81cw", {optO16}, {cpu386});
  3495. AddInstruction(opJNO, "rel32off", "0F81cd", {optO32}, {cpu386});
  3496. AddInstruction(opJNP, "rel8off", "7Bcb", {}, {cpu8086});
  3497. AddInstruction(opJNP, "rel16off", "0F8Bcw", {optO16}, {cpu386});
  3498. AddInstruction(opJNP, "rel32off", "0F8Bcd", {optO32}, {cpu386});
  3499. AddInstruction(opJNS, "rel8off", "79cb", {}, {cpu8086});
  3500. AddInstruction(opJNS, "rel16off", "0F89cw", {optO16}, {cpu386});
  3501. AddInstruction(opJNS, "rel32off", "0F89cd", {optO32}, {cpu386});
  3502. AddInstruction(opJNZ, "rel8off", "75cb", {}, {cpu8086});
  3503. AddInstruction(opJNZ, "rel16off", "0F85cw", {optO16}, {cpu386});
  3504. AddInstruction(opJNZ, "rel32off", "0F85cd", {optO32}, {cpu386});
  3505. AddInstruction(opJO, "rel8off", "70cb", {}, {cpu8086});
  3506. AddInstruction(opJO, "rel16off", "0F80cw", {optO16}, {cpu386});
  3507. AddInstruction(opJO, "rel32off", "0F80cd", {optO32}, {cpu386});
  3508. AddInstruction(opJP, "rel8off", "7Acb", {}, {cpu8086});
  3509. AddInstruction(opJP, "rel16off", "0F8Acw", {optO16}, {cpu386});
  3510. AddInstruction(opJP, "rel32off", "0F8Acd", {optO32}, {cpu386});
  3511. AddInstruction(opJPE, "rel8off", "7Acb", {}, {cpu8086});
  3512. AddInstruction(opJPE, "rel16off", "0F8Acw", {optO16}, {cpu386});
  3513. AddInstruction(opJPE, "rel32off", "0F8Acd", {optO32}, {cpu386});
  3514. AddInstruction(opJPO, "rel8off", "7Bcb", {}, {cpu8086});
  3515. AddInstruction(opJPO, "rel16off", "0F8Bcw", {optO16}, {cpu386});
  3516. AddInstruction(opJPO, "rel32off", "0F8Bcd", {optO32}, {cpu386});
  3517. AddInstruction(opJRCXZ, "rel8off", "E3cb", {}, {cpuAMD64});
  3518. AddInstruction(opJS, "rel8off", "78cb", {}, {cpu8086});
  3519. AddInstruction(opJS, "rel16off", "0F88cw", {optO16}, {cpu386});
  3520. AddInstruction(opJS, "rel32off", "0F88cd", {optO32}, {cpu386});
  3521. AddInstruction(opJZ, "rel8off", "74cb", {}, {cpu8086});
  3522. AddInstruction(opJZ, "rel16off", "0F84cw", {optO16}, {cpu386});
  3523. AddInstruction(opJZ, "rel32off", "0F84cd", {optO32}, {cpu386});
  3524. AddInstruction(opLAHF, "", "9F", {}, {cpu8086});
  3525. AddInstruction(opLAR, "reg16,reg/mem16", "0F02/r", {optO16}, {cpu286,cpuPrivileged});
  3526. AddInstruction(opLAR, "reg32,reg/mem16", "0F02/r", {optO32}, {cpu286,cpuPrivileged});
  3527. AddInstruction(opLAR, "reg64,reg/mem16", "0F02/r", {}, {cpuAMD64,cpuPrivileged});
  3528. AddInstruction(opLDDQU, "xmm1,mem128", "F20FF0/r", {}, {cpuSSE3});
  3529. AddInstruction(opLDMXCSR, "mem32", "0FAE/2", {}, {cpuSSE});
  3530. AddInstruction(opLDS, "reg16,mem16:16", "C5/r", {optO16,optNot64}, {cpu8086});
  3531. AddInstruction(opLDS, "reg32,mem16:32", "C5/r", {optO32,optNot64}, {cpu386});
  3532. AddInstruction(opLEA, "reg16,mem", "8D/r", {optO16}, {cpu8086});
  3533. AddInstruction(opLEA, "reg32,mem", "8D/r", {optO32}, {cpu386});
  3534. AddInstruction(opLEA, "reg64,mem", "8D/r", {}, {cpuAMD64});
  3535. AddInstruction(opLEAVE, "", "C9", {}, {cpu186});
  3536. AddInstruction(opLES, "reg16,mem16:16", "C4/r", {optO16,optNot64}, {cpu8086});
  3537. AddInstruction(opLES, "reg32,mem16:32", "C4/r", {optO32,optNot64}, {cpu386});
  3538. AddInstruction(opLFENCE, "", "0FAEE8", {}, {cpuSSE2});
  3539. AddInstruction(opLFS, "reg16,mem16:16", "0FB4/r", {optO16}, {cpu386});
  3540. AddInstruction(opLFS, "reg32,mem16:32", "0FB4/r", {optO32}, {cpu386});
  3541. AddInstruction(opLGDT, "mem16:32", "0F01/2", {}, {cpu286,cpuPrivileged});
  3542. AddInstruction(opLGDT, "mem16:64", "0F01/2", {}, {cpuAMD64,cpuPrivileged});
  3543. AddInstruction(opLGS, "reg16,mem16:16", "0FB5/r", {optO16}, {cpu386});
  3544. AddInstruction(opLGS, "reg32,mem16:32", "0FB5/r", {optO32}, {cpu386});
  3545. AddInstruction(opLIDT, "mem16:32", "0F01/3", {}, {cpu286,cpuPrivileged});
  3546. AddInstruction(opLIDT, "mem16:64", "0F01/3", {}, {cpuAMD64,cpuPrivileged});
  3547. AddInstruction(opLLDT, "reg/mem16", "0F00/2", {}, {cpu286,cpuPrivileged});
  3548. AddInstruction(opLMSW, "reg/mem16", "0F01/6", {}, {cpu286,cpuPrivileged});
  3549. AddInstruction(opLODS, "mem8", "AC", {}, {cpu8086});
  3550. AddInstruction(opLODS, "mem16", "AD", {optO16}, {cpu8086});
  3551. AddInstruction(opLODS, "mem32", "AD", {optO32}, {cpu386});
  3552. AddInstruction(opLODS, "mem64", "AD", {}, {cpuAMD64});
  3553. AddInstruction(opLODSB, "", "AC", {}, {cpu8086});
  3554. AddInstruction(opLODSD, "", "AD", {optO32}, {cpu386});
  3555. AddInstruction(opLODSQ, "", "AD", {}, {cpuAMD64});
  3556. AddInstruction(opLODSW, "", "AD", {optO16}, {cpu8086});
  3557. AddInstruction(opLOOP, "rel8off", "E2cb", {}, {cpu8086});
  3558. AddInstruction(opLOOPE, "rel8off", "E1cb", {}, {cpu8086});
  3559. AddInstruction(opLOOPNE, "rel8off", "E0cb", {}, {cpu8086});
  3560. AddInstruction(opLOOPNZ, "rel8off", "E0cb", {}, {cpu8086});
  3561. AddInstruction(opLOOPZ, "rel8off", "E1cb", {}, {cpu8086});
  3562. AddInstruction(opLSL, "reg16,reg/mem16", "0F03/r", {}, {cpu286,cpuPrivileged});
  3563. AddInstruction(opLSL, "reg32,reg/mem16", "0F03/r", {}, {cpu286,cpuPrivileged});
  3564. AddInstruction(opLSL, "reg64,reg/mem16", "0F03/r", {}, {cpuAMD64,cpuPrivileged});
  3565. AddInstruction(opLSS, "reg16,mem16:16", "0FB2/r", {optO16}, {cpu386});
  3566. AddInstruction(opLSS, "reg32,mem16:32", "0FB2/r", {optO32}, {cpu386});
  3567. AddInstruction(opLTR, "reg/mem16", "0F00/3", {}, {cpu286,cpuPrivileged});
  3568. AddInstruction(opMASKMOVDQU, "xmm1,xmm2", "0FF7/r", {optPOP}, {cpuSSE2});
  3569. AddInstruction(opMASKMOVQ, "mmx1,mmx2", "0FF7/r", {}, {cpuMMX});
  3570. AddInstruction(opMAXPD, "xmm1,xmm2/mem128", "0F5F/r", {optPOP}, {cpuSSE2});
  3571. AddInstruction(opMAXPS, "xmm1,xmm2/mem128", "0F5F/r", {}, {cpuSSE});
  3572. AddInstruction(opMAXSD, "xmm1,xmm2/mem64", "F20F5F/r", {}, {cpuSSE2});
  3573. AddInstruction(opMAXSS, "xmm1,xmm2/mem32", "F30F5F/r", {}, {cpuSSE});
  3574. AddInstruction(opMFENCE, "", "0FAEF0", {}, {cpuSSE2});
  3575. AddInstruction(opMINPD, "xmm1,xmm2/mem128", "0F5D/r", {optPOP}, {cpuSSE2});
  3576. AddInstruction(opMINPS, "xmm1,xmm2/mem128", "0F5D/r", {}, {cpuSSE});
  3577. AddInstruction(opMINSD, "xmm1,xmm2/mem64", "F20F5D/r", {}, {cpuSSE2});
  3578. AddInstruction(opMINSS, "xmm1,xmm2/mem32", "F30F5D/r", {}, {cpuSSE});
  3579. AddInstruction(opMOV, "reg/mem8,reg8", "88/r", {}, {cpu8086});
  3580. AddInstruction(opMOV, "reg/mem16,reg16", "89/r", {optO16}, {cpu8086});
  3581. AddInstruction(opMOV, "reg/mem32,reg32", "89/r", {optO32}, {cpu386});
  3582. AddInstruction(opMOV, "reg/mem64,reg64", "89/r", {}, {cpuAMD64});
  3583. AddInstruction(opMOV, "reg8,reg/mem8", "8A/r", {}, {cpu8086});
  3584. AddInstruction(opMOV, "reg16,reg/mem16", "8B/r", {optO16}, {cpu8086});
  3585. AddInstruction(opMOV, "reg32,reg/mem32", "8B/r", {optO32}, {cpu386});
  3586. AddInstruction(opMOV, "reg64,reg/mem64", "8B/r", {}, {cpuAMD64});
  3587. AddInstruction(opMOV, "reg8,imm8", "B0rbib", {}, {cpu8086});
  3588. AddInstruction(opMOV, "reg16,imm16", "B8rwiw", {optO16}, {cpu8086});
  3589. AddInstruction(opMOV, "reg32,imm32", "B8rdid", {optO32}, {cpu386});
  3590. AddInstruction(opMOV, "reg64,imm64", "B8rqiq", {}, {cpuAMD64});
  3591. AddInstruction(opMOV, "CRn,reg32", "0F22/r", {}, {cpu386});
  3592. AddInstruction(opMOV, "CRn,reg64", "0F22/r", {}, {cpuAMD64});
  3593. AddInstruction(opMOV, "reg32,CRn", "0F20/r", {}, {cpu386});
  3594. AddInstruction(opMOV, "reg64,CRn", "0F20/r", {}, {cpuAMD64});
  3595. AddInstruction(opMOV, "CR8,reg32", "F00F22/r", {}, {cpu386});
  3596. AddInstruction(opMOV, "CR8,reg64", "F00F22/r", {}, {cpuAMD64});
  3597. AddInstruction(opMOV, "reg32,CR8", "F00F20/r", {}, {cpu386});
  3598. AddInstruction(opMOV, "reg64,CR8", "F00F20/r", {}, {cpuAMD64});
  3599. AddInstruction(opMOV, "reg32,DRn", "0F21/r", {}, {cpu386});
  3600. AddInstruction(opMOV, "reg64,DRn", "0F21/r", {}, {cpuAMD64});
  3601. AddInstruction(opMOV, "DRn,reg32", "0F23/r", {}, {cpu386});
  3602. AddInstruction(opMOV, "DRn,reg64", "0F23/r", {}, {cpuAMD64});
  3603. AddInstruction(opMOV, "reg/mem16,segReg", "8C/r", {optO16}, {cpu8086});
  3604. AddInstruction(opMOV, "reg/mem32,segReg", "8C/r", {optO32}, {cpu386});
  3605. AddInstruction(opMOV, "reg/mem64,segReg", "8C/r", {}, {cpuAMD64});
  3606. AddInstruction(opMOV, "segReg,reg/mem16", "8E/r", {optO16}, {cpu8086});
  3607. AddInstruction(opMOV, "segReg,reg/mem32", "8E/r", {optO32}, {cpu386});
  3608. AddInstruction(opMOV, "segReg,reg/mem64", "8E/r", {}, {cpuAMD64});
  3609. AddInstruction(opMOV, "AL,moffset8", "A0+o", {}, {cpu8086});
  3610. AddInstruction(opMOV, "AX,moffset16", "A1+o", {optO16}, {cpu8086});
  3611. AddInstruction(opMOV, "EAX,moffset32", "A1+o", {optO32}, {cpu386});
  3612. AddInstruction(opMOV, "RAX,moffset64", "A1+o", {}, {cpuAMD64});
  3613. AddInstruction(opMOV, "moffset8,AL", "A2+o", {}, {cpu8086});
  3614. AddInstruction(opMOV, "moffset16,AX", "A3+o", {optO16}, {cpu8086});
  3615. AddInstruction(opMOV, "moffset32,EAX", "A3+o", {optO32}, {cpu386});
  3616. AddInstruction(opMOV, "moffset64,RAX", "A3+o", {}, {cpuAMD64});
  3617. AddInstruction(opMOV, "reg/mem8,imm8", "C6/0ib", {}, {cpu8086});
  3618. AddInstruction(opMOV, "reg/mem16,imm16", "C7/0iw", {optO16}, {cpu8086});
  3619. AddInstruction(opMOV, "reg/mem32,imm32", "C7/0id", {optO32}, {cpu386});
  3620. AddInstruction(opMOV, "reg/mem64,simm32", "C7/0id", {}, {cpuAMD64});
  3621. AddInstruction(opMOVAPD, "xmm1,xmm2/mem128", "0F28/r", {optPOP}, {cpuSSE2});
  3622. AddInstruction(opMOVAPD, "xmm1/mem128,xmm2", "0F29/r", {optPOP}, {cpuSSE2});
  3623. AddInstruction(opMOVAPS, "xmm1,xmm2/mem128", "0F28/r", {}, {cpuSSE});
  3624. AddInstruction(opMOVAPS, "xmm1/mem128,xmm2", "0F29/r", {}, {cpuSSE});
  3625. AddInstruction(opMOVD, "xmm,reg/mem32", "0F6E/r", {optPOP}, {cpuSSE2});
  3626. AddInstruction(opMOVD, "xmm,reg/mem64", "0F6E/r", {optPOP}, {cpuAMD64,cpuSSE2});
  3627. AddInstruction(opMOVD, "reg/mem32,xmm", "0F7E/r", {optPOP}, {cpuSSE2});
  3628. AddInstruction(opMOVD, "reg/mem64,xmm", "0F7E/r", {optPOP}, {cpuAMD64,cpuSSE2});
  3629. AddInstruction(opMOVD, "mmx,reg/mem32", "0F6E/r", {}, {cpuMMX});
  3630. AddInstruction(opMOVD, "mmx,reg/mem64", "0F6E/r", {}, {cpuAMD64,cpuMMX});
  3631. AddInstruction(opMOVD, "reg/mem32,mmx", "0F7E/r", {}, {cpuMMX});
  3632. AddInstruction(opMOVD, "reg/mem64,mmx", "0F7E/r", {}, {cpuAMD64,cpuMMX});
  3633. AddInstruction(opMOVDDUP, "xmm1,xmm2/mem64", "F20F12/r", {}, {cpuSSE3});
  3634. AddInstructionV(opVMOVDDUP,"xmm1,xmm2/mem64","C4 RXB.00001 X.1111.0.11 12 /r");
  3635. AddInstructionV(opVMOVDDUP,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.11 12 /r");
  3636. AddInstruction(opMOVDQ2Q, "mmx,xmm", "F20FD6/r", {}, {cpuSSE2});
  3637. AddInstruction(opMOVDQ2Q, "mmx,xmm", "F20FD6/r", {}, {cpuSSE2});
  3638. AddInstruction(opMOVDQA, "xmm1,xmm2/mem128", "0F6F/r", {optPOP}, {cpuSSE2});
  3639. AddInstruction(opMOVDQA, "xmm1/mem128,xmm2", "0F7F/r", {optPOP}, {cpuSSE2});
  3640. AddInstruction(opMOVDQU, "xmm1,xmm2/mem128", "F30F6F/r", {}, {cpuSSE2});
  3641. AddInstruction(opMOVDQU, "xmm1/mem128,xmm2", "F30F7F/r", {}, {cpuSSE2});
  3642. AddInstruction(opMOVHLPS, "xmm1,xmm2", "0F12/r", {}, {cpuSSE});
  3643. AddInstruction(opMOVHPD, "xmm,mem64", "0F16/r", {optPOP}, {cpuSSE2});
  3644. AddInstruction(opMOVHPD, "mem64,xmm", "0F17/r", {optPOP}, {cpuSSE2});
  3645. AddInstruction(opMOVHPS, "xmm,mem64", "0F16/r", {}, {cpuSSE});
  3646. AddInstruction(opMOVHPS, "mem64,xmm", "0F17/r", {}, {cpuSSE});
  3647. AddInstruction(opMOVLHPS, "xmm1,xmm2", "0F16/r", {}, {cpuSSE});
  3648. AddInstruction(opMOVLPD, "xmm,mem64", "0F12/r", {optPOP}, {cpuSSE2});
  3649. AddInstruction(opMOVLPD, "mem64,xmm", "0F13/r", {optPOP}, {cpuSSE2});
  3650. AddInstruction(opMOVLPS, "xmm,mem64", "0F12/r", {}, {cpuSSE});
  3651. AddInstruction(opMOVLPS, "mem64,xmm", "0F13/r", {}, {cpuSSE});
  3652. AddInstruction(opMOVMSKPD, "reg32,xmm", "0F50/r", {optPOP}, {cpuSSE2});
  3653. AddInstruction(opMOVMSKPS, "reg32,xmm", "0F50/r", {}, {cpuSSE});
  3654. AddInstruction(opMOVMSKPS, "reg32,xmm", "0F50/r", {}, {cpuSSE});
  3655. AddInstruction(opMOVNTDQ, "mem128,xmm", "0FE7/r", {optPOP}, {cpuSSE2});
  3656. AddInstruction(opMOVNTI, "mem32,reg32", "0FC3/r", {}, {cpuSSE2});
  3657. AddInstruction(opMOVNTI, "mem64,reg64", "0FC3/r", {}, {cpuAMD64,cpuSSE2});
  3658. AddInstruction(opMOVNTPD, "mem128,xmm", "0F2B/r", {}, {cpuSSE2});
  3659. AddInstruction(opMOVNTPS, "mem128,xmm", "0F2B/r", {}, {cpuSSE});
  3660. AddInstruction(opMOVNTQ, "mem64,mmx", "0FE7/r", {}, {cpuMMX});
  3661. AddInstruction(opMOVQ, "xmm1,xmm2/mem64", "F30F7E/r", {}, {cpuSSE2});
  3662. AddInstruction(opMOVQ, "xmm1/mem64,xmm2", "0FD6/r", {optPOP}, {cpuSSE2});
  3663. AddInstruction(opMOVQ, "mmx1,mmx2/mem64", "0F6F/r", {}, {cpuMMX});
  3664. AddInstruction(opMOVQ, "mmx1/mem64,mmx2", "0F7F/r", {}, {cpuMMX});
  3665. AddInstruction(opMOVQ2DQ, "xmm,mmx", "F30FD6/r", {}, {cpuSSE2});
  3666. AddInstruction(opMOVQ2DQ, "xmm,mmx", "F30FD6/r", {}, {cpuSSE2});
  3667. AddInstruction(opMOVS, "mem8,mem8", "A4", {}, {cpu8086});
  3668. AddInstruction(opMOVS, "mem16,mem16", "A5", {optO16}, {cpu8086});
  3669. AddInstruction(opMOVS, "mem32,mem32", "A5", {optO32}, {cpu386});
  3670. AddInstruction(opMOVS, "mem64,mem64", "A5", {}, {cpuAMD64});
  3671. AddInstruction(opMOVSB, "", "A4", {}, {cpu8086});
  3672. AddInstruction(opMOVSD, "", "A5", {optO32}, {cpu386});
  3673. AddInstruction(opMOVSD, "xmm1,xmm2/mem64", "F20F10/r", {}, {cpuSSE2});
  3674. AddInstruction(opMOVSD, "xmm1/mem64,xmm2", "F20F11/r", {}, {cpuSSE2});
  3675. AddInstruction(opMOVSHDUP, "xmm1,xmm2/mem128", "F30F16/r", {}, {cpuSSE3});
  3676. AddInstruction(opMOVSLDUP, "xmm1,xmm2/mem128", "F30F12/r", {}, {cpuSSE3});
  3677. AddInstruction(opMOVSQ, "", "A5", {}, {cpuAMD64});
  3678. AddInstruction(opMOVSS, "xmm1,xmm2/mem32", "F30F10/r", {}, {cpuSSE});
  3679. AddInstruction(opMOVSS, "xmm1/mem32,xmm2", "F30F11/r", {}, {cpuSSE});
  3680. AddInstruction(opMOVSW, "", "A5", {optO16}, {cpu8086});
  3681. AddInstruction(opMOVSX, "reg16,reg/mem8", "0FBE/r", {optO16}, {cpu386});
  3682. AddInstruction(opMOVSX, "reg32,reg/mem8", "0FBE/r", {optO32}, {cpu386});
  3683. AddInstruction(opMOVSX, "reg64,reg/mem8", "0FBE/r", {}, {cpuAMD64});
  3684. AddInstruction(opMOVSX, "reg32,reg/mem16", "0FBF/r", {optO32}, {cpu386});
  3685. AddInstruction(opMOVSX, "reg64,reg/mem16", "0FBF/r", {}, {cpuAMD64});
  3686. AddInstruction(opMOVSXD, "reg64,reg/mem32", "63/r", {}, {cpuAMD64});
  3687. AddInstruction(opMOVUPD, "xmm1,xmm2/mem128", "0F10/r", {optPOP}, {cpuSSE2});
  3688. AddInstruction(opMOVUPD, "xmm1/mem128,xmm2", "0F11/r", {optPOP}, {cpuSSE2});
  3689. AddInstruction(opMOVUPS, "xmm1,xmm2/mem128", "0F10/r", {}, {cpuSSE});
  3690. AddInstruction(opMOVUPS, "xmm1/mem128,xmm2", "0F11/r", {}, {cpuSSE});
  3691. AddInstruction(opMOVZX, "reg16,reg/mem8", "0FB6/r", {optO16}, {cpu386});
  3692. AddInstruction(opMOVZX, "reg32,reg/mem8", "0FB6/r", {optO32}, {cpu386});
  3693. AddInstruction(opMOVZX, "reg64,reg/mem8", "0FB6/r", {}, {cpuAMD64});
  3694. AddInstruction(opMOVZX, "reg32,reg/mem16", "0FB7/r", {optO32}, {cpu386});
  3695. AddInstruction(opMOVZX, "reg64,reg/mem16", "0FB7/r", {}, {cpuAMD64});
  3696. AddInstruction(opMUL, "reg/mem8", "F6/4", {}, {cpu8086});
  3697. AddInstruction(opMUL, "reg/mem16", "F7/4", {optO16}, {cpu8086});
  3698. AddInstruction(opMUL, "reg/mem32", "F7/4", {optO32}, {cpu386});
  3699. AddInstruction(opMUL, "reg/mem64", "F7/4", {}, {cpuAMD64});
  3700. AddInstruction(opMUL, "AL,reg/mem8", "F6/4", {}, {cpu8086});
  3701. AddInstruction(opMUL, "AX,reg/mem16", "F7/4", {optO16}, {cpu8086});
  3702. AddInstruction(opMUL, "EAX,reg/mem32", "F7/4", {optO32}, {cpu386});
  3703. AddInstruction(opMUL, "RAX,reg/mem64", "F7/4", {}, {cpuAMD64});
  3704. AddInstruction(opMULPD, "xmm1,xmm2/mem128", "0F59/r", {optPOP}, {cpuSSE2});
  3705. AddInstruction(opMULPS, "xmm1,xmm2/mem128", "0F59/r", {}, {cpuSSE});
  3706. AddInstruction(opMULSD, "xmm1,xmm2/mem64", "F20F59/r", {}, {cpuSSE2});
  3707. AddInstruction(opMULSS, "xmm1,xmm2/mem32", "F30F59/r", {}, {cpuSSE});
  3708. AddInstruction(opNEG, "reg/mem8", "F6/3", {}, {cpu8086});
  3709. AddInstruction(opNEG, "reg/mem16", "F7/3", {optO16}, {cpu8086});
  3710. AddInstruction(opNEG, "reg/mem32", "F7/3", {optO32}, {cpu386});
  3711. AddInstruction(opNEG, "reg/mem64", "F7/3", {}, {cpuAMD64});
  3712. AddInstruction(opNOP, "", "90", {}, {cpu8086});
  3713. AddInstruction(opNOT, "reg/mem8", "F6/2", {}, {cpu8086});
  3714. AddInstruction(opNOT, "reg/mem16", "F7/2", {optO16}, {cpu8086});
  3715. AddInstruction(opNOT, "reg/mem32", "F7/2", {optO32}, {cpu386});
  3716. AddInstruction(opNOT, "reg/mem64", "F7/2", {}, {cpuAMD64});
  3717. AddInstruction(opOR, "reg/mem8,reg8", "08/r", {}, {cpu8086});
  3718. AddInstruction(opOR, "reg/mem16,reg16", "09/r", {optO16}, {cpu8086});
  3719. AddInstruction(opOR, "reg/mem32,reg32", "09/r", {optO32}, {cpu386});
  3720. AddInstruction(opOR, "reg/mem64,reg64", "09/r", {}, {cpuAMD64});
  3721. AddInstruction(opOR, "reg8,reg/mem8", "0A/r", {}, {cpu8086});
  3722. AddInstruction(opOR, "reg16,reg/mem16", "0B/r", {optO16}, {cpu8086});
  3723. AddInstruction(opOR, "reg32,reg/mem32", "0B/r", {optO32}, {cpu386});
  3724. AddInstruction(opOR, "reg64,reg/mem64", "0B/r", {}, {cpuAMD64});
  3725. AddInstruction(opOR, "AL,imm8", "0Cib", {}, {cpu8086});
  3726. AddInstruction(opOR, "AX,imm16", "0Diw", {optO16}, {cpu8086});
  3727. AddInstruction(opOR, "EAX,imm32", "0Did", {optO32}, {cpu386});
  3728. AddInstruction(opOR, "RAX,simm32", "0Did", {}, {cpuAMD64});
  3729. AddInstruction(opOR, "reg/mem8,imm8", "80/1ib", {}, {cpu8086});
  3730. AddInstruction(opOR, "reg/mem16,imm16", "81/1iw", {optO16}, {cpu8086});
  3731. AddInstruction(opOR, "reg/mem32,imm32", "81/1id", {optO32}, {cpu386});
  3732. AddInstruction(opOR, "reg/mem64,simm32", "81/1id", {}, {cpuAMD64});
  3733. AddInstruction(opOR, "reg/mem16,simm8", "83/1ib", {optO16}, {cpu8086});
  3734. AddInstruction(opOR, "reg/mem32,simm8", "83/1ib", {optO32}, {cpu386});
  3735. AddInstruction(opOR, "reg/mem64,simm8", "83/1ib", {}, {cpuAMD64});
  3736. AddInstruction(opORPD, "xmm1,xmm2/mem128", "0F56/r", {optPOP}, {cpuSSE2});
  3737. AddInstruction(opORPS, "xmm1,xmm2/mem128", "0F56/r", {}, {cpuSSE});
  3738. AddInstruction(opOUT, "uimm8,AL", "E6ib", {}, {cpu8086});
  3739. AddInstruction(opOUT, "uimm8,AX", "E7ib", {optO16}, {cpu8086});
  3740. AddInstruction(opOUT, "uimm8,EAX", "E7ib", {optO32}, {cpu386});
  3741. AddInstruction(opOUT, "DX,AL", "EE", {}, {cpu8086});
  3742. AddInstruction(opOUT, "DX,AX", "EF", {optO16}, {cpu8086});
  3743. AddInstruction(opOUT, "DX,EAX", "EF", {optO32}, {cpu386});
  3744. AddInstruction(opOUTS, "DX,mem8", "6E", {}, {cpu186});
  3745. AddInstruction(opOUTS, "DX,mem16", "6F", {optO16}, {cpu186});
  3746. AddInstruction(opOUTS, "DX,mem32", "6F", {optO32}, {cpu386});
  3747. AddInstruction(opOUTSB, "", "6E", {}, {cpu186});
  3748. AddInstruction(opOUTSD, "", "6F", {optO32}, {cpu386});
  3749. AddInstruction(opOUTSW, "", "6F", {optO16}, {cpu186});
  3750. AddInstruction(opPACKSSDW, "xmm1,xmm2/mem128", "0F6B/r", {optPOP}, {cpuSSE2});
  3751. AddInstruction(opPACKSSDW, "mmx1,mmx2/mem64", "0F6B/r", {}, {cpuMMX});
  3752. AddInstruction(opPACKSSWB, "xmm1,xmm2/mem128", "0F63/r", {optPOP}, {cpuSSE2});
  3753. AddInstruction(opPACKSSWB, "mmx1,mmx2/mem64", "0F63/r", {}, {cpuMMX});
  3754. AddInstruction(opPACKUSWB, "xmm1,xmm2/mem128", "0F67/r", {optPOP}, {cpuSSE2});
  3755. AddInstruction(opPACKUSWB, "mmx1,mmx2/mem64", "0F67/r", {}, {cpuMMX});
  3756. AddInstruction(opPADDB, "xmm1,xmm2/mem128", "0FFC/r", {optPOP}, {cpuSSE2});
  3757. AddInstruction(opPADDB, "mmx1,mmx2/mem64", "0FFC/r", {}, {cpuMMX});
  3758. AddInstruction(opPADDD, "xmm1,xmm2/mem128", "0FFE/r", {optPOP}, {cpuSSE2});
  3759. AddInstruction(opPADDD, "mmx1,mmx2/mem64", "0FFE/r", {}, {cpuMMX});
  3760. AddInstruction(opPADDQ, "xmm1,xmm2/mem128", "0FD4/r", {optPOP}, {cpuSSE2});
  3761. AddInstruction(opPADDQ, "mmx1,mmx2/mem64", "0FD4/r", {}, {cpuMMX});
  3762. AddInstruction(opPADDSB, "xmm1,xmm2/mem128", "0FEC/r", {optPOP}, {cpuSSE2});
  3763. AddInstruction(opPADDSB, "mmx1,mmx2/mem64", "0FEC/r", {}, {cpuMMX});
  3764. AddInstruction(opPADDSW, "xmm1,xmm2/mem128", "0FED/r", {optPOP}, {cpuSSE2});
  3765. AddInstruction(opPADDSW, "mmx1,mmx2/mem64", "0FED/r", {}, {cpuMMX});
  3766. AddInstruction(opPADDUSB, "xmm1,xmm2/mem128", "0FDC/r", {optPOP}, {cpuSSE2});
  3767. AddInstruction(opPADDUSB, "mmx1,mmx2/mem64", "0FDC/r", {}, {cpuMMX});
  3768. AddInstruction(opPADDUSW, "xmm1,xmm2/mem128", "0FDD/r", {optPOP}, {cpuSSE2});
  3769. AddInstruction(opPADDUSW, "mmx1,mmx2/mem64", "0FDD/r", {}, {cpuMMX});
  3770. AddInstruction(opPADDW, "xmm1,xmm2/mem128", "0FFD/r", {optPOP}, {cpuSSE2});
  3771. AddInstruction(opPADDW, "mmx1,mmx2/mem64", "0FFD/r", {}, {cpuMMX});
  3772. AddInstruction(opPAND, "xmm1,xmm2/mem128", "0FDB/r", {optPOP}, {cpuSSE2});
  3773. AddInstruction(opPAND, "mmx1,mmx2/mem64", "0FDB/r", {}, {cpuMMX});
  3774. AddInstruction(opPANDN, "xmm1,xmm2/mem128", "0FDF/r", {optPOP}, {cpuSSE2});
  3775. AddInstruction(opPANDN, "mmx1,mmx2/mem64", "0FDF/r", {}, {cpuMMX});
  3776. AddInstruction(opPAUSE, "", "F390", {}, {cpuSSE2});
  3777. AddInstruction(opPAVGB, "xmm1,xmm2/mem128", "0FE0/r", {optPOP}, {cpuSSE2});
  3778. AddInstruction(opPAVGB, "mmx1,mmx2/mem64", "0FE0/r", {}, {cpuMMX});
  3779. AddInstruction(opPAVGUSB, "mmx1,mmx2/mem64", "0F0F/rBF", {}, {cpu3DNow});
  3780. AddInstruction(opPAVGW, "xmm1,xmm2/mem128", "0FE3/r", {optPOP}, {cpuSSE2});
  3781. AddInstruction(opPAVGW, "mmx1,mmx2/mem64", "0FE3/r", {}, {cpuMMX});
  3782. AddInstruction(opPCMPEQB, "xmm1,xmm2/mem128", "0F74/r", {optPOP}, {cpuSSE2});
  3783. AddInstruction(opPCMPEQB, "mmx1,mmx2/mem64", "0F74/r", {}, {cpuMMX});
  3784. AddInstruction(opPCMPEQD, "xmm1,xmm2/mem128", "0F76/r", {optPOP}, {cpuSSE2});
  3785. AddInstruction(opPCMPEQD, "mmx1,mmx2/mem64", "0F76/r", {}, {cpuMMX});
  3786. AddInstruction(opPCMPEQW, "xmm1,xmm2/mem128", "0F75/r", {optPOP}, {cpuSSE2});
  3787. AddInstruction(opPCMPEQW, "mmx1,mmx2/mem64", "0F75/r", {}, {cpuMMX});
  3788. AddInstruction(opPCMPGTB, "xmm1,xmm2/mem128", "0F64/r", {optPOP}, {cpuSSE2});
  3789. AddInstruction(opPCMPGTB, "mmx1,mmx2/mem64", "0F64/r", {}, {cpuMMX});
  3790. AddInstruction(opPCMPGTD, "xmm1,xmm2/mem128", "0F66/r", {optPOP}, {cpuSSE2});
  3791. AddInstruction(opPCMPGTD, "mmx1,mmx2/mem64", "0F66/r", {}, {cpuMMX});
  3792. AddInstruction(opPCMPGTW, "xmm1,xmm2/mem128", "0F65/r", {optPOP}, {cpuSSE2});
  3793. AddInstruction(opPCMPGTW, "mmx1,mmx2/mem64", "0F65/r", {}, {cpuMMX});
  3794. AddInstruction(opPEXTRW, "reg32,xmm,uimm8", "0FC5/rib", {optPOP}, {cpuSSE2});
  3795. AddInstruction(opPEXTRW, "reg32,mmx,uimm8", "0FC5/rib", {}, {cpuMMX});
  3796. AddInstruction(opPF2ID, "mmx1,mmx2/mem64", "0F0F/r1D", {}, {cpu3DNow});
  3797. AddInstruction(opPF2IW, "mmx1,mmx2/mem64", "0F0F/r1C", {}, {cpu3DNow});
  3798. AddInstruction(opPFACC, "mmx1,mmx2/mem64", "0F0F/rAE", {}, {cpu3DNow});
  3799. AddInstruction(opPFADD, "mmx1,mmx2/mem64", "0F0F/r9E", {}, {cpu3DNow});
  3800. AddInstruction(opPFCMPEQ, "mmx1,mmx2/mem64", "0F0F/rB0", {}, {cpu3DNow});
  3801. AddInstruction(opPFCMPGE, "mmx1,mmx2/mem64", "0F0F/r90", {}, {cpu3DNow});
  3802. AddInstruction(opPFCMPGT, "mmx1,mmx2/mem64", "0F0F/rA0", {}, {cpu3DNow});
  3803. AddInstruction(opPFMAX, "mmx1,mmx2/mem64", "0F0F/rA4", {}, {cpu3DNow});
  3804. AddInstruction(opPFMIN, "mmx1,mmx2/mem64", "0F0F/r94", {}, {cpu3DNow});
  3805. AddInstruction(opPFMUL, "mmx1,mmx2/mem64", "0F0F/rB4", {}, {cpu3DNow});
  3806. AddInstruction(opPFNACC, "mmx1,mmx2/mem64", "0F0F/r8A", {}, {cpu3DNow});
  3807. AddInstruction(opPFPNACC, "mmx1,mmx2/mem64", "0F0F/r8E", {}, {cpu3DNow});
  3808. AddInstruction(opPFRCP, "mmx1,mmx2/mem64", "0F0F/r96", {}, {cpu3DNow});
  3809. AddInstruction(opPFRCPIT1, "mmx1,mmx2/mem64", "0F0F/rA6", {}, {cpu3DNow});
  3810. AddInstruction(opPFRCPIT2, "mmx1,mmx2/mem64", "0F0F/rB6", {}, {cpu3DNow});
  3811. AddInstruction(opPFRSQIT1, "mmx1,mmx2/mem64", "0F0F/rA7", {}, {cpu3DNow});
  3812. AddInstruction(opPFRSQRT, "mmx1,mmx2/mem64", "0F0F/r97", {}, {cpu3DNow});
  3813. AddInstruction(opPFSUB, "mmx1,mmx2/mem64", "0F0F/r9A", {}, {cpu3DNow});
  3814. AddInstruction(opPFSUBR, "mmx1,mmx2/mem64", "0F0F/rAA", {}, {cpu3DNow});
  3815. AddInstruction(opPI2FD, "mmx1,mmx2/mem64", "0F0F/r0D", {}, {cpu3DNow});
  3816. AddInstruction(opPI2FW, "mmx1,mmx2/mem64", "0F0F/r0C", {}, {cpu3DNow});
  3817. AddInstruction(opPINSRW, "xmm,reg/mem16,uimm8", "0FC4/rib", {optPOP}, {cpuSSE2});
  3818. AddInstruction(opPINSRW, "xmm,reg/mem32,uimm8", "0FC4/rib", {optPOP}, {cpuSSE2});
  3819. AddInstruction(opPINSRW, "mmx,reg/mem16,uimm8", "0FC4/rib", {}, {cpuMMX});
  3820. AddInstruction(opPINSRW, "mmx,reg/mem32,uimm8", "0FC4/rib", {}, {cpuMMX});
  3821. AddInstruction(opPMADDWD, "xmm1,xmm2/mem128", "0FF5/r", {optPOP}, {cpuSSE2});
  3822. AddInstruction(opPMADDWD, "mmx1,mmx2/mem64", "0FF5/r", {}, {cpuMMX});
  3823. AddInstruction(opPMAXSW, "xmm1,xmm2/mem128", "0FEE/r", {optPOP}, {cpuSSE2});
  3824. AddInstruction(opPMAXSW, "mmx1,mmx2/mem64", "0FEE/r", {}, {cpuMMX});
  3825. AddInstruction(opPMAXUB, "xmm1,xmm2/mem128", "0FDE/r", {optPOP}, {cpuSSE2});
  3826. AddInstruction(opPMAXUB, "mmx1,mmx2/mem64", "0FDE/r", {}, {cpuMMX});
  3827. AddInstruction(opPMINSW, "xmm1,xmm2/mem128", "0FEA/r", {optPOP}, {cpuSSE2});
  3828. AddInstruction(opPMINSW, "mmx1,mmx2/mem64", "0FEA/r", {}, {cpuMMX});
  3829. AddInstruction(opPMINUB, "xmm1,xmm2/mem128", "0FDA/r", {optPOP}, {cpuSSE2});
  3830. AddInstruction(opPMINUB, "mmx1,mmx2/mem64", "0FDA/r", {}, {cpuMMX});
  3831. AddInstruction(opPMOVMSKB, "reg32,xmm", "0FD7/r", {optPOP}, {cpuSSE2});
  3832. AddInstruction(opPMOVMSKB, "reg32,mmx", "0FD7/r", {}, {cpuMMX});
  3833. AddInstruction(opPMULHRW, "mmx1,mmx2/mem64", "0F0F/rB7", {}, {cpu3DNow});
  3834. AddInstruction(opPMULHUW, "xmm1,xmm2/mem128", "0FE4/r", {optPOP}, {cpuSSE2});
  3835. AddInstruction(opPMULHUW, "mmx1,mmx2/mem64", "0FE4/r", {}, {cpuMMX});
  3836. AddInstruction(opPMULHW, "xmm1,xmm2/mem128", "0FE5/r", {optPOP}, {cpuSSE2});
  3837. AddInstruction(opPMULHW, "mmx1,mmx2/mem64", "0FE5/r", {}, {cpuMMX});
  3838. AddInstruction(opPMULLW, "xmm1,xmm2/mem128", "0FD5/r", {optPOP}, {cpuSSE2});
  3839. AddInstruction(opPMULLW, "mmx1,mmx2/mem64", "0FD5/r", {}, {cpuMMX});
  3840. AddInstruction(opPMULUDQ, "xmm1,xmm2/mem128", "0FF4/r", {optPOP}, {cpuSSE2});
  3841. AddInstruction(opPMULUDQ, "mmx1,mmx2/mem64", "0FF4/r", {}, {cpuSSE2});
  3842. AddInstruction(opPOP, "reg16", "58rw", {optO16}, {cpu8086});
  3843. AddInstruction(opPOP, "reg32", "58rd", {optO32}, {cpu386});
  3844. AddInstruction(opPOP, "reg64", "58rq", {}, {cpuAMD64});
  3845. AddInstruction(opPOP, "reg/mem16", "8F/0", {optO16}, {cpu8086});
  3846. AddInstruction(opPOP, "reg/mem32", "8F/0", {optO32}, {cpu386});
  3847. AddInstruction(opPOP, "reg/mem64", "8F/0", {}, {cpuAMD64});
  3848. AddInstruction(opPOP, "DS", "1F", {optNot64}, {cpu8086});
  3849. AddInstruction(opPOP, "ES", "07", {optNot64}, {cpu8086});
  3850. AddInstruction(opPOP, "SS", "17", {optNot64}, {cpu8086});
  3851. AddInstruction(opPOP, "FS", "0FA1", {}, {cpu386});
  3852. AddInstruction(opPOP, "GS", "0FA9", {}, {cpu386});
  3853. AddInstruction(opPOPA, "", "61", {optNot64}, {cpu186});
  3854. AddInstruction(opPOPAD, "", "61", {optO32,optNot64}, {cpu386});
  3855. AddInstruction(opPOPAW, "", "61", {optO16,optNot64}, {cpu186});
  3856. AddInstruction(opPOPF, "", "9D", {}, {cpu8086});
  3857. AddInstruction(opPOPFD, "", "9D", {optO32}, {cpu386});
  3858. AddInstruction(opPOPFQ, "", "9D", {}, {cpuAMD64});
  3859. AddInstruction(opPOR, "xmm1,xmm2/mem128", "0FEB/r", {optPOP}, {cpuSSE2});
  3860. AddInstruction(opPOR, "mmx1,mmx2/mem64", "0FEB/r", {}, {cpuMMX});
  3861. AddInstruction(opPREFETCH, "mem8", "0F0D/0", {}, {cpu3DNow});
  3862. AddInstruction(opPREFETCHNTA, "mem8", "0F18/0", {}, {cpuSSE,cpuMMX});
  3863. AddInstruction(opPREFETCHT0, "mem8", "0F18/1", {}, {cpuSSE,cpuMMX});
  3864. AddInstruction(opPREFETCHT1, "mem8", "0F18/2", {}, {cpuSSE,cpuMMX});
  3865. AddInstruction(opPREFETCHT2, "mem8", "0F18/3", {}, {cpuSSE,cpuMMX});
  3866. AddInstruction(opPREFETCHW, "mem8", "0F0D/1", {}, {cpu3DNow});
  3867. AddInstruction(opPSADBW, "xmm1,xmm2/mem128", "0FF6/r", {optPOP}, {cpuSSE2});
  3868. AddInstruction(opPSADBW, "mmx1,mmx2/mem64", "0FF6/r", {}, {cpuMMX});
  3869. AddInstruction(opPSHUFD, "xmm1,xmm2/mem128,uimm8", "0F70/rib", {optPOP}, {cpuSSE2});
  3870. AddInstruction(opPSHUFHW, "xmm1,xmm2/mem128,uimm8", "F30F70/rib", {}, {cpuSSE2});
  3871. AddInstruction(opPSHUFLW, "xmm1,xmm2/mem128,uimm8", "F20F70/rib", {}, {cpuSSE2});
  3872. AddInstruction(opPSHUFW, "mmx1,mmx2/mem64,imm8", "0F70/rib", {}, {cpuSSE2});
  3873. AddInstruction(opPSLLD, "xmm1,xmm2/mem128", "0FF2/r", {optPOP}, {cpuSSE2});
  3874. AddInstruction(opPSLLD, "xmm,uimm8", "0F72/6ib", {optPOP}, {cpuSSE2});
  3875. AddInstruction(opPSLLD, "mmx1,mmx2/mem64", "0FF2/r", {}, {cpuMMX});
  3876. AddInstruction(opPSLLD, "mmx,imm8", "0F72/6ib", {}, {cpuMMX});
  3877. AddInstruction(opPSLLDQ, "xmm,uimm8", "0F73/7ib", {optPOP}, {cpuSSE2});
  3878. AddInstruction(opPSLLQ, "xmm1,xmm2/mem128", "0FF3/r", {optPOP}, {cpuSSE2});
  3879. AddInstruction(opPSLLQ, "xmm,uimm8", "0F73/6ib", {optPOP}, {cpuSSE2});
  3880. AddInstruction(opPSLLQ, "mmx1,mmx2/mem64", "0FF3/r", {}, {cpuMMX});
  3881. AddInstruction(opPSLLQ, "mmx,imm8", "0F73/6ib", {}, {cpuMMX});
  3882. AddInstruction(opPSLLW, "xmm1,xmm2/mem128", "0FF1/r", {optPOP}, {cpuSSE2});
  3883. AddInstruction(opPSLLW, "xmm,uimm8", "0F71/6ib", {optPOP}, {cpuSSE2});
  3884. AddInstruction(opPSLLW, "mmx1,mmx2/mem64", "0FF1/r", {}, {cpuMMX});
  3885. AddInstruction(opPSLLW, "mmx,imm8", "0F71/6ib", {}, {cpuMMX});
  3886. AddInstruction(opPSRAD, "xmm1,xmm2/mem128", "0FE2/r", {optPOP}, {cpuSSE2});
  3887. AddInstruction(opPSRAD, "xmm,uimm8", "0F72/4ib", {optPOP}, {cpuSSE2});
  3888. AddInstruction(opPSRAD, "mmx1,mmx2/mem64", "0FE2/r", {}, {cpuMMX});
  3889. AddInstruction(opPSRAD, "mmx,imm8", "0F72/4ib", {}, {cpuMMX});
  3890. AddInstruction(opPSRAW, "xmm1,xmm2/mem128", "0FE1/r", {optPOP}, {cpuSSE2});
  3891. AddInstruction(opPSRAW, "xmm,uimm8", "0F71/4ib", {optPOP}, {cpuSSE2});
  3892. AddInstruction(opPSRAW, "mmx1,mmx2/mem64", "0FE1/r", {}, {cpuMMX});
  3893. AddInstruction(opPSRAW, "mmx,imm8", "0F71/4ib", {}, {cpuMMX});
  3894. AddInstruction(opPSRLD, "xmm1,xmm2/mem128", "0FD2/r", {optPOP}, {cpuSSE2});
  3895. AddInstruction(opPSRLD, "xmm,uimm8", "0F72/2ib", {optPOP}, {cpuSSE2});
  3896. AddInstruction(opPSRLD, "mmx1,mmx2/mem64", "0FD2/r", {}, {cpuMMX});
  3897. AddInstruction(opPSRLD, "mmx,imm8", "0F72/2ib", {}, {cpuMMX});
  3898. AddInstruction(opPSRLDQ, "xmm,uimm8", "0F73/3ib", {optPOP}, {cpuSSE2});
  3899. AddInstruction(opPSRLQ, "xmm1,xmm2/mem128", "0FD3/r", {optPOP}, {cpuSSE2});
  3900. AddInstruction(opPSRLQ, "xmm,uimm8", "0F73/2ib", {optPOP}, {cpuSSE2});
  3901. AddInstruction(opPSRLQ, "mmx1,mmx2/mem64", "0FD3/r", {}, {cpuMMX});
  3902. AddInstruction(opPSRLQ, "mmx,imm8", "0F73/2ib", {}, {cpuMMX});
  3903. AddInstruction(opPSRLW, "xmm1,xmm2/mem128", "0FD1/r", {optPOP}, {cpuSSE2});
  3904. AddInstruction(opPSRLW, "xmm,uimm8", "0F71/2ib", {optPOP}, {cpuSSE2});
  3905. AddInstruction(opPSRLW, "mmx1,mmx2/mem64", "0FD1/r", {}, {cpuMMX});
  3906. AddInstruction(opPSRLW, "mmx,imm8", "0F71/2ib", {}, {cpuMMX});
  3907. AddInstruction(opPSUBB, "xmm1,xmm2/mem128", "0FF8/r", {optPOP}, {cpuSSE2});
  3908. AddInstruction(opPSUBB, "mmx1,mmx2/mem64", "0FF8/r", {}, {cpuMMX});
  3909. AddInstruction(opPSUBD, "xmm1,xmm2/mem128", "0FFA/r", {optPOP}, {cpuSSE2});
  3910. AddInstruction(opPSUBD, "mmx1,mmx2/mem64", "0FFA/r", {}, {cpuMMX});
  3911. AddInstruction(opPSUBQ, "xmm1,xmm2/mem128", "0FFB/r", {optPOP}, {cpuSSE2});
  3912. AddInstruction(opPSUBQ, "mmx1,mmx2/mem64", "0FFB/r", {}, {cpuMMX});
  3913. AddInstruction(opPSUBSB, "xmm1,xmm2/mem128", "0FE8/r", {optPOP}, {cpuSSE2});
  3914. AddInstruction(opPSUBSB, "mmx1,mmx2/mem64", "0FE8/r", {}, {cpuMMX});
  3915. AddInstruction(opPSUBSW, "xmm1,xmm2/mem128", "0FE9/r", {optPOP}, {cpuSSE2});
  3916. AddInstruction(opPSUBSW, "mmx1,mmx2/mem64", "0FE9/r", {}, {cpuMMX});
  3917. AddInstruction(opPSUBUSB, "xmm1,xmm2/mem128", "0FD8/r", {optPOP}, {cpuSSE2});
  3918. AddInstruction(opPSUBUSB, "mmx1,mmx2/mem64", "0FD8/r", {}, {cpuMMX});
  3919. AddInstruction(opPSUBUSW, "xmm1,xmm2/mem128", "0FD9/r", {optPOP}, {cpuSSE2});
  3920. AddInstruction(opPSUBUSW, "mmx1,mmx2/mem64", "0FD9/r", {}, {cpuMMX});
  3921. AddInstruction(opPSUBW, "xmm1,xmm2/mem128", "0FF9/r", {optPOP}, {cpuSSE2});
  3922. AddInstruction(opPSUBW, "mmx1,mmx2/mem64", "0FF9/r", {}, {cpuMMX});
  3923. AddInstruction(opPSWAPD, "mmx1,mmx2/mem64", "0F0F/rBB", {}, {cpu3DNow});
  3924. AddInstruction(opPUNPCKHBW, "xmm1,xmm2/mem128", "0F68/r", {optPOP}, {cpuSSE2});
  3925. AddInstruction(opPUNPCKHBW, "mmx1,mmx2/mem64", "0F68/r", {}, {cpuMMX});
  3926. AddInstruction(opPUNPCKHDQ, "xmm1,xmm2/mem128", "0F6A/r", {optPOP}, {cpuSSE2});
  3927. AddInstruction(opPUNPCKHDQ, "mmx1,mmx2/mem64", "0F6A/r", {}, {cpuMMX});
  3928. AddInstruction(opPUNPCKHQDQ, "xmm1,xmm2/mem128", "0F6D/r", {optPOP}, {cpuSSE2});
  3929. AddInstruction(opPUNPCKHWD, "xmm1,xmm2/mem128", "0F69/r", {optPOP}, {cpuSSE2});
  3930. AddInstruction(opPUNPCKHWD, "mmx1,mmx2/mem64", "0F69/r", {}, {cpuMMX});
  3931. AddInstruction(opPUNPCKLBW, "xmm1,xmm2/mem128", "0F60/r", {optPOP}, {cpuSSE2});
  3932. AddInstruction(opPUNPCKLBW, "mmx1,mmx2/mem32", "0F60/r", {}, {cpuMMX});
  3933. AddInstruction(opPUNPCKLDQ, "xmm1,xmm2/mem128", "0F62/r", {optPOP}, {cpuSSE2});
  3934. AddInstruction(opPUNPCKLDQ, "mmx1,mmx2/mem32", "0F62/r", {}, {cpuMMX});
  3935. AddInstruction(opPUNPCKLQDQ, "xmm1,xmm2/mem128", "0F6C/r", {optPOP}, {cpuSSE2});
  3936. AddInstruction(opPUNPCKLWD, "xmm1,xmm2/mem128", "0F61/r", {optPOP}, {cpuSSE2});
  3937. AddInstruction(opPUNPCKLWD, "mmx1,mmx2/mem32", "0F61/r", {}, {cpuMMX});
  3938. AddInstruction(opPUSH, "reg16", "50rw", {optO16}, {cpu8086});
  3939. AddInstruction(opPUSH, "reg32", "50rd", {optO32}, {cpu386});
  3940. AddInstruction(opPUSH, "reg64", "50rq", {}, {cpuAMD64});
  3941. AddInstruction(opPUSH, "reg/mem16", "FF/6", {optO16}, {cpu8086});
  3942. AddInstruction(opPUSH, "reg/mem32", "FF/6", {optO32}, {cpu386});
  3943. AddInstruction(opPUSH, "reg/mem64", "FF/6", {}, {cpuAMD64});
  3944. AddInstruction(opPUSH, "imm8", "6Aib", {}, {cpu186});
  3945. AddInstruction(opPUSH, "imm16", "68iw", {}, {cpu186});
  3946. AddInstruction(opPUSH, "imm32", "68id", {optNot64}, {cpu186});
  3947. AddInstruction(opPUSH, "simm32", "68id", {}, {cpuAMD64});
  3948. AddInstruction(opPUSH, "CS", "0E", {optNot64}, {cpu8086});
  3949. AddInstruction(opPUSH, "SS", "16", {optNot64}, {cpu8086});
  3950. AddInstruction(opPUSH, "DS", "1E", {optNot64}, {cpu8086});
  3951. AddInstruction(opPUSH, "ES", "06", {optNot64}, {cpu8086});
  3952. AddInstruction(opPUSH, "FS", "0FA0", {}, {cpu386});
  3953. AddInstruction(opPUSH, "GS", "0FA8", {}, {cpu386});
  3954. AddInstruction(opPUSHA, "", "60", {optNot64}, {cpu186});
  3955. AddInstruction(opPUSHAD, "", "60", {optO32,optNot64}, {cpu386});
  3956. AddInstruction(opPUSHF, "", "9C", {}, {cpu8086});
  3957. AddInstruction(opPUSHFD, "", "9C", {optO32}, {cpu386});
  3958. AddInstruction(opPUSHFQ, "", "9C", {}, {cpuAMD64});
  3959. AddInstruction(opPXOR, "xmm1,xmm2/mem128", "0FEF/r", {optPOP}, {cpuSSE2});
  3960. AddInstruction(opPXOR, "mmx1,mmx2/mem64", "0FEF/r", {}, {cpuMMX});
  3961. AddInstruction(opRCL, "reg/mem8,1", "D0/2", {}, {cpu8086});
  3962. AddInstruction(opRCL, "reg/mem8,CL", "D2/2", {}, {cpu8086});
  3963. AddInstruction(opRCL, "reg/mem8,uimm8", "C0/2ib", {}, {cpu186});
  3964. AddInstruction(opRCL, "reg/mem16,1", "D1/2", {optO16}, {cpu8086});
  3965. AddInstruction(opRCL, "reg/mem16,CL", "D3/2", {optO16}, {cpu8086});
  3966. AddInstruction(opRCL, "reg/mem16,uimm8", "C1/2ib", {optO16}, {cpu186});
  3967. AddInstruction(opRCL, "reg/mem32,1", "D1/2", {optO32}, {cpu386});
  3968. AddInstruction(opRCL, "reg/mem32,CL", "D3/2", {optO32}, {cpu386});
  3969. AddInstruction(opRCL, "reg/mem32,uimm8", "C1/2ib", {optO32}, {cpu386});
  3970. AddInstruction(opRCL, "reg/mem64,1", "D1/2", {}, {cpuAMD64});
  3971. AddInstruction(opRCL, "reg/mem64,CL", "D3/2", {}, {cpuAMD64});
  3972. AddInstruction(opRCL, "reg/mem64,uimm8", "C1/2ib", {}, {cpuAMD64});
  3973. AddInstruction(opRCPPS, "xmm1,xmm2/mem128", "0F53/r", {}, {cpuSSE});
  3974. AddInstruction(opRCPSS, "xmm1,xmm2/mem32", "F30F53/r", {}, {cpuSSE});
  3975. AddInstruction(opRCR, "reg/mem8,1", "D0/3", {}, {cpu8086});
  3976. AddInstruction(opRCR, "reg/mem8,CL", "D2/3", {}, {cpu8086});
  3977. AddInstruction(opRCR, "reg/mem8,uimm8", "C0/3ib", {}, {cpu186});
  3978. AddInstruction(opRCR, "reg/mem16,1", "D1/3", {optO16}, {cpu8086});
  3979. AddInstruction(opRCR, "reg/mem16,CL", "D3/3", {optO16}, {cpu8086});
  3980. AddInstruction(opRCR, "reg/mem16,uimm8", "C1/3ib", {optO16}, {cpu186});
  3981. AddInstruction(opRCR, "reg/mem32,1", "D1/3", {optO32}, {cpu386});
  3982. AddInstruction(opRCR, "reg/mem32,CL", "D3/3", {optO32}, {cpu386});
  3983. AddInstruction(opRCR, "reg/mem32,uimm8", "C1/3ib", {optO32}, {cpu386});
  3984. AddInstruction(opRCR, "reg/mem64,1", "D1/3", {}, {cpuAMD64});
  3985. AddInstruction(opRCR, "reg/mem64,CL", "D3/3", {}, {cpuAMD64});
  3986. AddInstruction(opRCR, "reg/mem64,uimm8", "C1/3ib", {}, {cpuAMD64});
  3987. AddInstruction(opRDMSR, "", "0F32", {}, {cpuPentium,cpuPrivileged});
  3988. AddInstruction(opRDPMC, "", "0F33", {}, {cpuP6});
  3989. AddInstruction(opRDTSC, "", "0F31", {}, {cpuPentium});
  3990. AddInstruction(opRDTSCP, "", "0F01F9", {}, {cpuPentium});
  3991. AddInstruction(opRET, "", "C3", {}, {cpu8086});
  3992. AddInstruction(opRET, "uimm16", "C2iw", {}, {cpu8086});
  3993. AddInstruction(opRETF, "", "CB", {}, {cpu8086});
  3994. AddInstruction(opRETF, "uimm16", "CAiw", {}, {cpu8086});
  3995. AddInstruction(opROL, "reg/mem8,1", "D0/0", {}, {cpu8086});
  3996. AddInstruction(opROL, "reg/mem8,CL", "D2/0", {}, {cpu8086});
  3997. AddInstruction(opROL, "reg/mem8,uimm8", "C0/0ib", {}, {cpu186});
  3998. AddInstruction(opROL, "reg/mem16,1", "D1/0", {optO16}, {cpu8086});
  3999. AddInstruction(opROL, "reg/mem16,CL", "D3/0", {optO16}, {cpu8086});
  4000. AddInstruction(opROL, "reg/mem16,uimm8", "C1/0ib", {optO16}, {cpu186});
  4001. AddInstruction(opROL, "reg/mem32,1", "D1/0", {optO32}, {cpu386});
  4002. AddInstruction(opROL, "reg/mem32,CL", "D3/0", {optO32}, {cpu386});
  4003. AddInstruction(opROL, "reg/mem32,uimm8", "C1/0ib", {optO32}, {cpu386});
  4004. AddInstruction(opROL, "reg/mem64,1", "D1/0", {}, {cpuAMD64});
  4005. AddInstruction(opROL, "reg/mem64,CL", "D3/0", {}, {cpuAMD64});
  4006. AddInstruction(opROL, "reg/mem64,uimm8", "C1/0ib", {}, {cpuAMD64});
  4007. AddInstruction(opROR, "reg/mem8,1", "D0/1", {}, {cpu8086});
  4008. AddInstruction(opROR, "reg/mem8,CL", "D2/1", {}, {cpu8086});
  4009. AddInstruction(opROR, "reg/mem8,uimm8", "C0/1ib", {}, {cpu186});
  4010. AddInstruction(opROR, "reg/mem16,1", "D1/1", {optO16}, {cpu8086});
  4011. AddInstruction(opROR, "reg/mem16,CL", "D3/1", {optO16}, {cpu8086});
  4012. AddInstruction(opROR, "reg/mem16,uimm8", "C1/1ib", {optO16}, {cpu186});
  4013. AddInstruction(opROR, "reg/mem32,1", "D1/1", {optO32}, {cpu386});
  4014. AddInstruction(opROR, "reg/mem32,CL", "D3/1", {optO32}, {cpu386});
  4015. AddInstruction(opROR, "reg/mem32,uimm8", "C1/1ib", {optO32}, {cpu386});
  4016. AddInstruction(opROR, "reg/mem64,1", "D1/1", {}, {cpuAMD64});
  4017. AddInstruction(opROR, "reg/mem64,CL", "D3/1", {}, {cpuAMD64});
  4018. AddInstruction(opROR, "reg/mem64,uimm8", "C1/1ib", {}, {cpuAMD64});
  4019. AddInstruction(opRSM, "", "0FAA", {}, {});
  4020. AddInstruction(opRSQRTPS, "xmm1,xmm2/mem128", "0F52/r", {}, {cpuSSE});
  4021. AddInstruction(opRSQRTSS, "xmm1,xmm2/mem32", "F30F52/r", {}, {cpuSSE});
  4022. AddInstruction(opSAHF, "", "9E", {}, {cpu8086});
  4023. AddInstruction(opSAL, "reg/mem8,1", "D0/4", {}, {cpu8086});
  4024. AddInstruction(opSAL, "reg/mem8,CL", "D2/4", {}, {cpu8086});
  4025. AddInstruction(opSAL, "reg/mem8,uimm8", "C0/4ib", {}, {cpu186});
  4026. AddInstruction(opSAL, "reg/mem16,1", "D1/4", {optO16}, {cpu8086});
  4027. AddInstruction(opSAL, "reg/mem16,CL", "D3/4", {optO16}, {cpu8086});
  4028. AddInstruction(opSAL, "reg/mem16,uimm8", "C1/4ib", {optO16}, {cpu186});
  4029. AddInstruction(opSAL, "reg/mem32,1", "D1/4", {optO32}, {cpu386});
  4030. AddInstruction(opSAL, "reg/mem32,CL", "D3/4", {optO32}, {cpu386});
  4031. AddInstruction(opSAL, "reg/mem32,uimm8", "C1/4ib", {optO32}, {cpu386});
  4032. AddInstruction(opSAL, "reg/mem64,1", "D1/4", {}, {cpuAMD64});
  4033. AddInstruction(opSAL, "reg/mem64,CL", "D3/4", {}, {cpuAMD64});
  4034. AddInstruction(opSAL, "reg/mem64,uimm8", "C1/4ib", {}, {cpuAMD64});
  4035. AddInstruction(opSAR, "reg/mem8,1", "D0/7", {}, {cpu8086});
  4036. AddInstruction(opSAR, "reg/mem8,CL", "D2/7", {}, {cpu8086});
  4037. AddInstruction(opSAR, "reg/mem8,uimm8", "C0/7ib", {}, {cpu186});
  4038. AddInstruction(opSAR, "reg/mem16,1", "D1/7", {optO16}, {cpu8086});
  4039. AddInstruction(opSAR, "reg/mem16,CL", "D3/7", {optO16}, {cpu8086});
  4040. AddInstruction(opSAR, "reg/mem16,uimm8", "C1/7ib", {optO16}, {cpu186});
  4041. AddInstruction(opSAR, "reg/mem32,1", "D1/7", {optO32}, {cpu386});
  4042. AddInstruction(opSAR, "reg/mem32,CL", "D3/7", {optO32}, {cpu386});
  4043. AddInstruction(opSAR, "reg/mem32,uimm8", "C1/7ib", {optO32}, {cpu386});
  4044. AddInstruction(opSAR, "reg/mem64,1", "D1/7", {}, {cpuAMD64});
  4045. AddInstruction(opSAR, "reg/mem64,CL", "D3/7", {}, {cpuAMD64});
  4046. AddInstruction(opSAR, "reg/mem64,uimm8", "C1/7ib", {}, {cpuAMD64});
  4047. AddInstruction(opSBB, "reg/mem8,reg8", "18/r", {}, {cpu8086});
  4048. AddInstruction(opSBB, "reg/mem16,reg16", "19/r", {optO16}, {cpu8086});
  4049. AddInstruction(opSBB, "reg/mem32,reg32", "19/r", {optO32}, {cpu386});
  4050. AddInstruction(opSBB, "reg/mem64,reg64", "19/r", {}, {cpuAMD64});
  4051. AddInstruction(opSBB, "reg8,reg/mem8", "1A/r", {}, {cpu8086});
  4052. AddInstruction(opSBB, "reg16,reg/mem16", "1B/r", {optO16}, {cpu8086});
  4053. AddInstruction(opSBB, "reg32,reg/mem32", "1B/r", {optO32}, {cpu386});
  4054. AddInstruction(opSBB, "reg64,reg/mem64", "1B/r", {}, {cpuAMD64});
  4055. AddInstruction(opSBB, "AL,imm8", "1Cib", {}, {cpu8086});
  4056. AddInstruction(opSBB, "AX,imm16", "1Diw", {optO16}, {cpu8086});
  4057. AddInstruction(opSBB, "EAX,imm32", "1Did", {optO32}, {cpu386});
  4058. AddInstruction(opSBB, "RAX,simm32", "1Did", {}, {cpuAMD64});
  4059. AddInstruction(opSBB, "reg/mem8,imm8", "80/3ib", {}, {cpu8086});
  4060. AddInstruction(opSBB, "reg/mem16,imm16", "81/3iw", {optO16}, {cpu8086});
  4061. AddInstruction(opSBB, "reg/mem32,imm32", "81/3id", {optO32}, {cpu386});
  4062. AddInstruction(opSBB, "reg/mem64,simm32", "81/3id", {}, {cpuAMD64});
  4063. AddInstruction(opSBB, "reg/mem16,simm8", "83/3ib", {optO16}, {cpu8086});
  4064. AddInstruction(opSBB, "reg/mem32,simm8", "83/3ib", {optO32}, {cpu386});
  4065. AddInstruction(opSBB, "reg/mem64,simm8", "83/3ib", {}, {cpuAMD64});
  4066. AddInstruction(opSCAS, "mem8", "AE", {}, {cpu8086});
  4067. AddInstruction(opSCAS, "mem16", "AF", {optO16}, {cpu8086});
  4068. AddInstruction(opSCAS, "mem32", "AF", {optO32}, {cpu386});
  4069. AddInstruction(opSCAS, "mem64", "AF", {}, {cpuAMD64});
  4070. AddInstruction(opSCASB, "", "AE", {}, {cpu8086});
  4071. AddInstruction(opSCASD, "", "AF", {optO32}, {cpu386});
  4072. AddInstruction(opSCASQ, "", "AF", {}, {cpuAMD64});
  4073. AddInstruction(opSCASW, "", "AF", {optO16}, {cpu8086});
  4074. AddInstruction(opSETA, "reg/mem8", "0F97/0", {}, {cpu386});
  4075. AddInstruction(opSETAE, "reg/mem8", "0F93/0", {}, {cpu386});
  4076. AddInstruction(opSETB, "reg/mem8", "0F92/0", {}, {cpu386});
  4077. AddInstruction(opSETBE, "reg/mem8", "0F96/0", {}, {cpu386});
  4078. AddInstruction(opSETC, "reg/mem8", "0F92/0", {}, {cpu386});
  4079. AddInstruction(opSETE, "reg/mem8", "0F94/0", {}, {cpu386});
  4080. AddInstruction(opSETG, "reg/mem8", "0F9F/0", {}, {cpu386});
  4081. AddInstruction(opSETGE, "reg/mem8", "0F9D/0", {}, {cpu386});
  4082. AddInstruction(opSETL, "reg/mem8", "0F9C/0", {}, {cpu386});
  4083. AddInstruction(opSETLE, "reg/mem8", "0F9E/0", {}, {cpu386});
  4084. AddInstruction(opSETNA, "reg/mem8", "0F96/0", {}, {cpu386});
  4085. AddInstruction(opSETNAE, "reg/mem8", "0F92/0", {}, {cpu386});
  4086. AddInstruction(opSETNB, "reg/mem8", "0F93/0", {}, {cpu386});
  4087. AddInstruction(opSETNBE, "reg/mem8", "0F97/0", {}, {cpu386});
  4088. AddInstruction(opSETNC, "reg/mem8", "0F93/0", {}, {cpu386});
  4089. AddInstruction(opSETNE, "reg/mem8", "0F95/0", {}, {cpu386});
  4090. AddInstruction(opSETNG, "reg/mem8", "0F9E/0", {}, {cpu386});
  4091. AddInstruction(opSETNGE, "reg/mem8", "0F9C/0", {}, {cpu386});
  4092. AddInstruction(opSETNL, "reg/mem8", "0F9D/0", {}, {cpu386});
  4093. AddInstruction(opSETNLE, "reg/mem8", "0F9F/0", {}, {cpu386});
  4094. AddInstruction(opSETNO, "reg/mem8", "0F91/0", {}, {cpu386});
  4095. AddInstruction(opSETNP, "reg/mem8", "0F9B/0", {}, {cpu386});
  4096. AddInstruction(opSETNS, "reg/mem8", "0F99/0", {}, {cpu386});
  4097. AddInstruction(opSETNZ, "reg/mem8", "0F95/0", {}, {cpu386});
  4098. AddInstruction(opSETO, "reg/mem8", "0F90/0", {}, {cpu386});
  4099. AddInstruction(opSETP, "reg/mem8", "0F9A/0", {}, {cpu386});
  4100. AddInstruction(opSETPE, "reg/mem8", "0F9A/0", {}, {cpu386});
  4101. AddInstruction(opSETPO, "reg/mem8", "0F9B/0", {}, {cpu386});
  4102. AddInstruction(opSETS, "reg/mem8", "0F98/0", {}, {cpu386});
  4103. AddInstruction(opSETZ, "reg/mem8", "0F94/0", {}, {cpu386});
  4104. AddInstruction(opSFENCE, "", "0FAEF8", {}, {cpuSSE,cpuMMX});
  4105. AddInstruction(opSGDT, "mem16:32", "0F01/0", {}, {cpu286,cpuPrivileged});
  4106. AddInstruction(opSGDT, "mem16:64", "0F01/0", {}, {cpuAMD64,cpuPrivileged});
  4107. AddInstruction(opSHL, "reg/mem8,1", "D0/4", {}, {cpu8086});
  4108. AddInstruction(opSHL, "reg/mem8,CL", "D2/4", {}, {cpu8086});
  4109. AddInstruction(opSHL, "reg/mem8,uimm8", "C0/4ib", {}, {cpu186});
  4110. AddInstruction(opSHL, "reg/mem16,1", "D1/4", {optO16}, {cpu8086});
  4111. AddInstruction(opSHL, "reg/mem16,CL", "D3/4", {optO16}, {cpu8086});
  4112. AddInstruction(opSHL, "reg/mem16,uimm8", "C1/4ib", {optO16}, {cpu186});
  4113. AddInstruction(opSHL, "reg/mem32,1", "D1/4", {optO32}, {cpu386});
  4114. AddInstruction(opSHL, "reg/mem32,CL", "D3/4", {optO32}, {cpu386});
  4115. AddInstruction(opSHL, "reg/mem32,uimm8", "C1/4ib", {optO32}, {cpu386});
  4116. AddInstruction(opSHL, "reg/mem64,1", "D1/4", {}, {cpuAMD64});
  4117. AddInstruction(opSHL, "reg/mem64,CL", "D3/4", {}, {cpuAMD64});
  4118. AddInstruction(opSHL, "reg/mem64,uimm8", "C1/4ib", {}, {cpuAMD64});
  4119. AddInstruction(opSHLD, "reg/mem16,reg16,uimm8", "0FA4/rib", {optO16}, {cpu386});
  4120. AddInstruction(opSHLD, "reg/mem16,reg16,CL", "0FA5/r", {optO16}, {cpu386});
  4121. AddInstruction(opSHLD, "reg/mem32,reg32,uimm8", "0FA4/rib", {optO32}, {cpu386});
  4122. AddInstruction(opSHLD, "reg/mem32,reg32,CL", "0FA5/r", {optO32}, {cpu386});
  4123. AddInstruction(opSHLD, "reg/mem64,reg64,uimm8", "0FA4/rib", {}, {cpuAMD64});
  4124. AddInstruction(opSHLD, "reg/mem64,reg64,CL", "0FA5/r", {}, {cpuAMD64});
  4125. AddInstruction(opSHR, "reg/mem8,1", "D0/5", {}, {cpu8086});
  4126. AddInstruction(opSHR, "reg/mem8,CL", "D2/5", {}, {cpu8086});
  4127. AddInstruction(opSHR, "reg/mem8,uimm8", "C0/5ib", {}, {cpu186});
  4128. AddInstruction(opSHR, "reg/mem16,1", "D1/5", {optO16}, {cpu8086});
  4129. AddInstruction(opSHR, "reg/mem16,CL", "D3/5", {optO16}, {cpu8086});
  4130. AddInstruction(opSHR, "reg/mem16,uimm8", "C1/5ib", {optO16}, {cpu186});
  4131. AddInstruction(opSHR, "reg/mem32,1", "D1/5", {optO32}, {cpu386});
  4132. AddInstruction(opSHR, "reg/mem32,CL", "D3/5", {optO32}, {cpu386});
  4133. AddInstruction(opSHR, "reg/mem32,uimm8", "C1/5ib", {optO32}, {cpu386});
  4134. AddInstruction(opSHR, "reg/mem64,1", "D1/5", {}, {cpuAMD64});
  4135. AddInstruction(opSHR, "reg/mem64,CL", "D3/5", {}, {cpuAMD64});
  4136. AddInstruction(opSHR, "reg/mem64,uimm8", "C1/5ib", {}, {cpuAMD64});
  4137. AddInstruction(opSHRD, "reg/mem16,reg16,uimm8", "0FAC/rib", {optO16}, {cpu386});
  4138. AddInstruction(opSHRD, "reg/mem16,reg16,CL", "0FAD/r", {optO16}, {cpu386});
  4139. AddInstruction(opSHRD, "reg/mem32,reg32,uimm8", "0FAC/rib", {optO32}, {cpu386});
  4140. AddInstruction(opSHRD, "reg/mem32,reg32,CL", "0FAD/r", {optO32}, {cpu386});
  4141. AddInstruction(opSHRD, "reg/mem64,reg64,uimm8", "0FAC/rib", {}, {cpuAMD64});
  4142. AddInstruction(opSHRD, "reg/mem64,reg64,CL", "0FAD/r", {}, {cpuAMD64});
  4143. AddInstruction(opSHUFPD, "xmm1,xmm2/mem128,uimm8", "0FC6/rib", {optPOP}, {cpuSSE2});
  4144. AddInstruction(opSHUFPS, "xmm1,xmm2/mem128,uimm8", "0FC6/rib", {}, {cpuSSE});
  4145. AddInstruction(opSIDT, "mem16:32", "0F01/1", {}, {cpu286,cpuPrivileged});
  4146. AddInstruction(opSIDT, "mem16:64", "0F01/1", {}, {cpuAMD64,cpuPrivileged});
  4147. AddInstruction(opSKINIT, "EAX", "0F01DE", {}, {cpuAMD64});
  4148. AddInstruction(opSLDT, "reg16", "0F00/0", {optO16}, {cpu286});
  4149. AddInstruction(opSLDT, "reg32", "0F00/0", {optO32}, {cpu386});
  4150. AddInstruction(opSLDT, "reg64", "0F00/0", {}, {cpuAMD64});
  4151. AddInstruction(opSLDT, "mem16", "0F00/0", {}, {cpu286});
  4152. AddInstruction(opSMSW, "reg16", "0F01/4", {optO16}, {cpu286});
  4153. AddInstruction(opSMSW, "reg32", "0F01/4", {optO32}, {cpu386});
  4154. AddInstruction(opSMSW, "reg64", "0F01/4", {}, {cpuAMD64});
  4155. AddInstruction(opSMSW, "mem16", "0F01/4", {}, {cpu286});
  4156. AddInstruction(opSQRTPD, "xmm1,xmm2/mem128", "0F51/r", {optPOP}, {cpuSSE2});
  4157. AddInstruction(opSQRTPS, "xmm1,xmm2/mem128", "0F51/r", {}, {cpuSSE});
  4158. AddInstruction(opSQRTSD, "xmm1,xmm2/mem64", "F20F51/r", {}, {cpuSSE2});
  4159. AddInstruction(opSQRTSS, "xmm1,xmm2/mem32", "F30F51/r", {}, {cpuSSE});
  4160. AddInstruction(opSTC, "", "F9", {}, {cpu8086});
  4161. AddInstruction(opSTD, "", "FD", {}, {cpu8086});
  4162. AddInstruction(opSTGI, "", "0F01DC", {}, {cpuPentium});
  4163. AddInstruction(opSTI, "", "FB", {}, {cpu8086});
  4164. AddInstruction(opSTMXCSR, "mem32", "0FAE/3", {}, {cpuSSE});
  4165. AddInstruction(opSTOS, "mem8", "AA", {}, {cpu8086});
  4166. AddInstruction(opSTOS, "mem16", "AB", {optO16}, {cpu8086});
  4167. AddInstruction(opSTOS, "mem32", "AB", {optO32}, {cpu386});
  4168. AddInstruction(opSTOS, "mem64", "AB", {}, {cpuAMD64});
  4169. AddInstruction(opSTOSB, "", "AA", {}, {cpu8086});
  4170. AddInstruction(opSTOSD, "", "AB", {optO32}, {cpu386});
  4171. AddInstruction(opSTOSQ, "", "AB", {}, {cpuAMD64});
  4172. AddInstruction(opSTOSW, "", "AB", {optO16}, {cpu8086});
  4173. AddInstruction(opSTR, "reg16", "0F00/1", {optO16}, {cpu286,cpuProtected});
  4174. AddInstruction(opSTR, "reg32", "0F00/1", {optO32}, {cpu386,cpuProtected});
  4175. AddInstruction(opSTR, "reg64", "0F00/1", {}, {cpuAMD64});
  4176. AddInstruction(opSTR, "mem16", "0F00/1", {}, {cpu286,cpuProtected});
  4177. AddInstruction(opSUB, "reg/mem8,reg8", "28/r", {}, {cpu8086});
  4178. AddInstruction(opSUB, "reg/mem16,reg16", "29/r", {optO16}, {cpu8086});
  4179. AddInstruction(opSUB, "reg/mem32,reg32", "29/r", {optO32}, {cpu386});
  4180. AddInstruction(opSUB, "reg/mem64,reg64", "29/r", {}, {cpuAMD64});
  4181. AddInstruction(opSUB, "reg8,reg/mem8", "2A/r", {}, {cpu8086});
  4182. AddInstruction(opSUB, "reg16,reg/mem16", "2B/r", {optO16}, {cpu8086});
  4183. AddInstruction(opSUB, "reg32,reg/mem32", "2B/r", {optO32}, {cpu386});
  4184. AddInstruction(opSUB, "reg64,reg/mem64", "2B/r", {}, {cpuAMD64});
  4185. AddInstruction(opSUB, "AL,imm8", "2Cib", {}, {cpu8086});
  4186. AddInstruction(opSUB, "AX,imm16", "2Diw", {optO16}, {cpu8086});
  4187. AddInstruction(opSUB, "EAX,imm32", "2Did", {optO32}, {cpu386});
  4188. AddInstruction(opSUB, "RAX,simm32", "2Did", {}, {cpuAMD64});
  4189. AddInstruction(opSUB, "reg/mem8,imm8", "80/5ib", {}, {cpu8086});
  4190. AddInstruction(opSUB, "reg/mem16,imm16", "81/5iw", {optO16}, {cpu8086});
  4191. AddInstruction(opSUB, "reg/mem32,imm32", "81/5id", {optO32}, {cpu386});
  4192. AddInstruction(opSUB, "reg/mem64,simm32", "81/5id", {}, {cpuAMD64});
  4193. AddInstruction(opSUB, "reg/mem16,simm8", "83/5ib", {optO16}, {cpu8086});
  4194. AddInstruction(opSUB, "reg/mem32,simm8", "83/5ib", {optO32}, {cpu386});
  4195. AddInstruction(opSUB, "reg/mem64,simm8", "83/5ib", {}, {cpuAMD64});
  4196. AddInstruction(opSUBPD, "xmm1,xmm2/mem128", "0F5C/r", {optPOP}, {cpuSSE2});
  4197. AddInstruction(opSUBPS, "xmm1,xmm2/mem128", "0F5C/r", {}, {cpuSSE});
  4198. AddInstruction(opSUBSD, "xmm1,xmm2/mem64", "F20F5C/r", {}, {cpuSSE2});
  4199. AddInstruction(opSUBSS, "xmm1,xmm2/mem32", "F30F5C/r", {}, {cpuSSE});
  4200. AddInstruction(opSWAPGS, "", "0F01F8", {}, {cpuAMD64});
  4201. AddInstruction(opSYSCALL, "", "0F05", {}, {cpuP6});
  4202. AddInstruction(opSYSENTER, "", "0F34", {optNot64}, {cpuP6});
  4203. AddInstruction(opSYSEXIT, "", "0F35", {optNot64}, {cpuP6,cpuPrivileged});
  4204. AddInstruction(opSYSRET, "", "0F07", {}, {cpuP6,cpuPrivileged});
  4205. AddInstruction(opTEST, "reg/mem8,reg8", "84/r", {}, {cpu8086});
  4206. AddInstruction(opTEST, "reg/mem16,reg16", "85/r", {optO16}, {cpu8086});
  4207. AddInstruction(opTEST, "reg/mem32,reg32", "85/r", {optO32}, {cpu386});
  4208. AddInstruction(opTEST, "reg/mem64,reg64", "85/r", {}, {cpuAMD64});
  4209. AddInstruction(opTEST, "AL,imm8", "A8ib", {}, {cpu8086});
  4210. AddInstruction(opTEST, "AX,imm16", "A9iw", {optO16}, {cpu8086});
  4211. AddInstruction(opTEST, "EAX,imm32", "A9id", {optO32}, {cpu386});
  4212. AddInstruction(opTEST, "RAX,simm32", "A9id", {}, {cpuAMD64});
  4213. AddInstruction(opTEST, "reg/mem8,imm8", "F6/0ib", {}, {cpu8086});
  4214. AddInstruction(opTEST, "reg/mem16,imm16", "F7/0iw", {optO16}, {cpu8086});
  4215. AddInstruction(opTEST, "reg/mem32,imm32", "F7/0id", {optO32}, {cpu386});
  4216. AddInstruction(opTEST, "reg/mem64,simm32", "F7/0id", {}, {cpuAMD64});
  4217. AddInstruction(opUCOMISD, "xmm1,xmm2/mem64", "0F2E/r", {optPOP}, {cpuSSE2});
  4218. AddInstruction(opUCOMISS, "xmm1,xmm2/mem32", "0F2E/r", {}, {cpuSSE});
  4219. AddInstruction(opUD2, "", "0F0B", {}, {cpu286});
  4220. AddInstruction(opUNPCKHPD, "xmm1,xmm2/mem128", "0F15/r", {optPOP}, {cpuSSE2});
  4221. AddInstruction(opUNPCKHPS, "xmm1,xmm2/mem128", "0F15/r", {}, {cpuSSE});
  4222. AddInstruction(opUNPCKLPD, "xmm1,xmm2/mem128", "0F14/r", {optPOP}, {cpuSSE2});
  4223. AddInstruction(opUNPCKLPS, "xmm1,xmm2/mem128", "0F14/r", {}, {cpuSSE});
  4224. AddInstruction(opVERR, "reg/mem16", "0F00/4", {}, {cpu286,cpuPrivileged});
  4225. AddInstruction(opVERW, "reg/mem16", "0F00/5", {}, {cpu286,cpuPrivileged});
  4226. AddInstruction(opVMLOAD, "rAX", "0F01DA", {}, {cpuAMD64});
  4227. AddInstruction(opVMMCALL, "", "0F01D9", {}, {cpuAMD64});
  4228. AddInstruction(opVMRUN, "rAX", "0F01D8", {}, {cpuAMD64});
  4229. AddInstruction(opVMSAVE, "rAX", "0F01DB", {}, {cpuAMD64});
  4230. AddInstruction(opWBINVD, "", "0F09", {}, {cpu486,cpuPrivileged});
  4231. AddInstruction(opWRMSR, "", "0F30", {}, {cpuPentium,cpuPrivileged});
  4232. AddInstruction(opXADD, "reg/mem8,reg8", "0FC0/r", {}, {cpu486});
  4233. AddInstruction(opXADD, "reg/mem16,reg16", "0FC1/r", {optO16}, {cpu486});
  4234. AddInstruction(opXADD, "reg/mem32,reg32", "0FC1/r", {optO32}, {cpu486});
  4235. AddInstruction(opXADD, "reg/mem64,reg64", "0FC1/r", {}, {cpuAMD64});
  4236. AddInstruction(opXCHG, "AX,reg16", "90rw", {optO16}, {cpu8086});
  4237. AddInstruction(opXCHG, "reg16,AX", "90rw", {optO16}, {cpu8086});
  4238. AddInstruction(opXCHG, "EAX,reg32", "90rd", {optO32}, {cpu386});
  4239. AddInstruction(opXCHG, "reg32,EAX", "90rd", {optO32}, {cpu386});
  4240. AddInstruction(opXCHG, "RAX,reg64", "90rq", {}, {cpuAMD64});
  4241. AddInstruction(opXCHG, "reg64,RAX", "90rq", {}, {cpuAMD64});
  4242. AddInstruction(opXCHG, "reg/mem8,reg8", "86/r", {}, {cpu8086});
  4243. AddInstruction(opXCHG, "reg8,reg/mem8", "86/r", {}, {cpu8086});
  4244. AddInstruction(opXCHG, "reg/mem16,reg16", "87/r", {optO16}, {cpu8086});
  4245. AddInstruction(opXCHG, "reg16,reg/mem16", "87/r", {optO16}, {cpu8086});
  4246. AddInstruction(opXCHG, "reg/mem32,reg32", "87/r", {optO32}, {cpu386});
  4247. AddInstruction(opXCHG, "reg32,reg/mem32", "87/r", {optO32}, {cpu386});
  4248. AddInstruction(opXCHG, "reg/mem64,reg64", "87/r", {}, {cpuAMD64});
  4249. AddInstruction(opXCHG, "reg64,reg/mem64", "87/r", {}, {cpuAMD64});
  4250. AddInstruction(opXLAT, "mem8", "D7", {}, {cpu8086});
  4251. AddInstruction(opXLATB, "", "D7", {}, {cpu8086});
  4252. AddInstruction(opXOR, "reg/mem8,reg8", "30/r", {}, {cpu8086});
  4253. AddInstruction(opXOR, "reg/mem16,reg16", "31/r", {optO16}, {cpu8086});
  4254. AddInstruction(opXOR, "reg/mem32,reg32", "31/r", {optO32}, {cpu386});
  4255. AddInstruction(opXOR, "reg/mem64,reg64", "31/r", {}, {cpuAMD64});
  4256. AddInstruction(opXOR, "reg8,reg/mem8", "32/r", {}, {cpu8086});
  4257. AddInstruction(opXOR, "reg16,reg/mem16", "33/r", {optO16}, {cpu8086});
  4258. AddInstruction(opXOR, "reg32,reg/mem32", "33/r", {optO32}, {cpu386});
  4259. AddInstruction(opXOR, "reg64,reg/mem64", "33/r", {}, {cpuAMD64});
  4260. AddInstruction(opXOR, "AL,imm8", "34ib", {}, {cpu8086});
  4261. AddInstruction(opXOR, "AX,imm16", "35iw", {optO16}, {cpu8086});
  4262. AddInstruction(opXOR, "EAX,imm32", "35id", {optO32}, {cpu386});
  4263. AddInstruction(opXOR, "RAX,simm32", "35id", {}, {cpuAMD64});
  4264. AddInstruction(opXOR, "reg/mem8,imm8", "80/6ib", {}, {cpu8086});
  4265. AddInstruction(opXOR, "reg/mem16,imm16", "81/6iw", {optO16}, {cpu8086});
  4266. AddInstruction(opXOR, "reg/mem32,imm32", "81/6id", {optO32}, {cpu386});
  4267. AddInstruction(opXOR, "reg/mem64,simm32", "81/6id", {}, {cpuAMD64});
  4268. AddInstruction(opXOR, "reg/mem16,simm8", "83/6ib", {optO16}, {cpu8086});
  4269. AddInstruction(opXOR, "reg/mem32,simm8", "83/6ib", {optO32}, {cpu386});
  4270. AddInstruction(opXOR, "reg/mem64,simm8", "83/6ib", {}, {cpuAMD64});
  4271. AddInstruction(opXORPD, "xmm1,xmm2/mem128", "0F57/r", {optPOP}, {cpuSSE2});
  4272. AddInstruction(opXORPS, "xmm1,xmm2/mem128", "0F57/r", {}, {cpuSSE});
  4273. AddInstructionV(opVAESKEYGENASSIST,"xmm1,xmm2/mem128,imm8","C4 RXB.00011 X.src.0.01 DF /r ib");
  4274. AddInstructionV(opVPMADCSWD,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 B6 /r ib");
  4275. AddInstructionV(opVADDPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 58 /r");
  4276. AddInstructionV(opVADDPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 58 /r");
  4277. AddInstructionV(opVADDPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 58 /r");
  4278. AddInstructionV(opVADDPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 58 /r");
  4279. AddInstructionV(opVADDSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.00001 X.src.X.11 58 /r");
  4280. AddInstructionV(opVADDSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.00001 X.src.X.10 58 /r");
  4281. AddInstructionV(opVADDSUBPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 D0 /r");
  4282. AddInstructionV(opVADDSUBPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 D0 /r");
  4283. AddInstructionV(opVADDSUBPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.11 D0 /r");
  4284. AddInstructionV(opVADDSUBPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.11 D0 /r");
  4285. AddInstructionV(opVAESDEC,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 X.src.0.01 DE /r");
  4286. AddInstructionV(opVAESDECLAST,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 X.src.0.01 DF /r");
  4287. AddInstructionV(opVAESENC,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 X.src.0.01 DC /r");
  4288. AddInstructionV(opVAESENCLAST,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 X.src.0.01 DD /r");
  4289. AddInstructionV(opVAESIMC,"xmm1,xmm2/mem128","C4 RXB.00010 X.src.0.01 DB /r");
  4290. AddInstructionV(opVANDNPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 55 /r");
  4291. AddInstructionV(opVANDNPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 55 /r");
  4292. AddInstructionV(opVANDNPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 55 /r");
  4293. AddInstructionV(opVANDNPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 55 /r");
  4294. AddInstructionV(opVANDPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 54 /r");
  4295. AddInstructionV(opVANDPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 54 /r");
  4296. AddInstructionV(opVANDPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 54 /r");
  4297. AddInstructionV(opVANDPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 54 /r");
  4298. AddInstructionV(opVBLENDPD,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00011 X.src.0.01 0D /r ib");
  4299. AddInstructionV(opVBLENDPD,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.00011 X.src.1.01 0D /r ib");
  4300. AddInstructionV(opVBLENDPS,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00011 X.src.0.01 0C /r ib");
  4301. AddInstructionV(opVBLENDPS,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.00011 X.src.1.01 0C /r ib");
  4302. AddInstructionV(opVBLENDVPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.00011 X.src.0.01 4B /r");
  4303. AddInstructionV(opVBLENDVPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.00011 X.src.1.01 4B /r");
  4304. AddInstructionV(opVBLENDVPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.00011 X.src.0.01 4A /r");
  4305. AddInstructionV(opVBLENDVPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.00011 X.src.1.01 4A /r");
  4306. AddInstructionV(opVBROADCASTF128,"ymm1,mem128","C4 RXB.02 0.1111.1.01 1A /r");
  4307. AddInstructionV(opVBROADCASTI128,"ymm1,mem128","C4 RXB.02 0.1111.1.01 5A /r");
  4308. AddInstructionV(opVBROADCASTSD,"ymm1,xmm2/mem64","C4 RXB.02 0.1111.1.01 19 /r");
  4309. AddInstructionV(opVBROADCASTSS,"xmm1,xmm2/mem32","C4 RXB.02 0.1111.0.01 18 /r");
  4310. AddInstructionV(opVBROADCASTSS,"ymm1,xmm2/mem32","C4 RXB.02 0.1111.1.01 18 /r");
  4311. AddInstructionV(opVCMPPD,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00001 X.src.0.01 C2 /r ib");
  4312. AddInstructionV(opVCMPPD,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.00001 X.src.1.01 C2 /r ib");
  4313. AddInstructionV(opVCMPPS,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00001 X.src.0.00 C2 /r ib");
  4314. AddInstructionV(opVCMPSD,"xmm1,xmm2,xmm3/mem64,imm8","C4 RXB.00001 X.src.X.11 C2 /r ib");
  4315. AddInstructionV(opVCMPSS,"xmm1,xmm2,xmm3/mem32,imm8","C4 RXB.00001 X.src.X.10 C2 /r ib");
  4316. AddInstructionV(opVCOMISD,"xmm1,xmm2/mem64","C4 RXB.00001 X.src.X.01 2F /r");
  4317. AddInstructionV(opVCOMISS,"xmm1,xmm2/mem32","C4 RXB.00001 X.src.X.00 2F /r");
  4318. AddInstructionV(opVCVTDQ2PD,"xmm1,xmm2/mem64","C4 RXB.00001 X.1111.0.10 E6 /r");
  4319. AddInstructionV(opVCVTDQ2PD,"ymm1,ymm2/mem128","C4 RXB.00001 X.1111.1.10 E6 /r");
  4320. AddInstructionV(opVCVTDQ2PS,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.00 5B /r");
  4321. AddInstructionV(opVCVTDQ2PS,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.00 5B /r");
  4322. AddInstructionV(opVCVTPD2DQ,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.11 E6 /r");
  4323. AddInstructionV(opVCVTPD2DQ,"xmm1,ymm2/mem256","C4 RXB.00001 X.1111.1.11 E6 /r");
  4324. AddInstructionV(opVCVTPD2PS,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.01 5A /r");
  4325. AddInstructionV(opVCVTPD2PS,"xmm1,ymm2/mem256","C4 RXB.00001 X.1111.1.01 5A /r");
  4326. AddInstructionV(opVCVTPH2PS,"xmm1,xmm2/mem64","C4 RXB.02 0.1111.0.01 13 /r");
  4327. AddInstructionV(opVCVTPH2PS,"ymm1,xmm2/mem128","C4 RXB.02 0.1111.1.01 13 /r");
  4328. AddInstructionV(opVCVTPS2DQ,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.01 5B /r");
  4329. AddInstructionV(opVCVTPS2DQ,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.01 5B /r");
  4330. AddInstructionV(opVCVTPS2PD,"xmm1,xmm2/mem64","C4 RXB.00001 X.1111.0.00 5A /r");
  4331. AddInstructionV(opVCVTPS2PD,"ymm1,ymm2/mem128","C4 RXB.00001 X.1111.1.00 5A /r");
  4332. AddInstructionV(opVCVTPS2PH,"xmm1/mem64,xmm2,imm8","C4 RXB.03 0.1111.0.01 1D /r /ib");
  4333. AddInstructionV(opVCVTPS2PH,"xmm1/mem128,ymm2,imm8","C4 RXB.03 0.1111.1.01 1D /r /ib");
  4334. AddInstructionV(opVCVTSD2SI,"reg32,xmm2/mem64","C4 RXB.00001 0.1111.X.11 2D /r");
  4335. AddInstructionV(opVCVTSD2SI,"reg64,xmm2/mem64","C4 RXB.00001 1.1111.X.11 2D /r");
  4336. AddInstructionV(opVCVTSD2SS,"xmm1,xmm2,xmm3/mem64","C4 RXB.00001 X.src.X.11 5A /r");
  4337. AddInstructionV(opVCVTSI2SD,"xmm1,xmm2,reg32/mem32","C4 RXB.00001 0.src.X.11 2A /r");
  4338. AddInstructionV(opVCVTSI2SD,"xmm1,xmm2,reg64/mem64","C4 RXB.00001 1.src.X.11 2A /r");
  4339. AddInstructionV(opVCVTSI2SS,"xmm1,xmm2,reg32/mem32","C4 RXB.00001 0.src.X.10 2A /r");
  4340. AddInstructionV(opVCVTSI2SS,"xmm1,xmm2,reg64/mem64","C4 RXB.00001 1.src.X.10 2A /r");
  4341. AddInstructionV(opVCVTSS2SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.00001 X.src.X.10 5A /r");
  4342. AddInstructionV(opVCVTSS2SI,"reg32,xmm1/mem32","C4 RXB.00001 0.1111.X.10 2D /r");
  4343. AddInstructionV(opVCVTSS2SI,"reg64,xmm1/mem32","C4 RXB.00001 1.1111.X.10 2D /r");
  4344. AddInstructionV(opVCVTTPD2DQ,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.01 E6 /r");
  4345. AddInstructionV(opVCVTTPD2DQ,"xmm1,ymm2/mem256","C4 RXB.00001 X.1111.1.01 E6 /r");
  4346. AddInstructionV(opVCVTTPS2DQ,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.10 5B /r");
  4347. AddInstructionV(opVCVTTPS2DQ,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.10 5B /r");
  4348. AddInstructionV(opVCVTTSD2SI,"reg32,xmm2/mem64","C4 RXB.00001 0.1111.X.11 2C /r");
  4349. AddInstructionV(opVCVTTSD2SI,"reg64,xmm2/mem64","C4 RXB.00001 1.1111.X.11 2C /r");
  4350. AddInstructionV(opVCVTTSS2SI,"reg32,xmm1/mem32","C4 RXB.00001 0.1111.X.10 2C /r");
  4351. AddInstructionV(opVCVTTSS2SI,"reg64,xmm1/mem32","C4 RXB.00001 1.1111.X.10 2C /r");
  4352. AddInstructionV(opVDIVPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 5E /r");
  4353. AddInstructionV(opVDIVPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 5E /r");
  4354. AddInstructionV(opVDIVPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 5E /r");
  4355. AddInstructionV(opVDIVPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 5E /r");
  4356. AddInstructionV(opVDIVSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.00001 X.src.X.11 5E /r");
  4357. AddInstructionV(opVDIVSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.00001 X.src.X.10 5E /r");
  4358. AddInstructionV(opVDPPD,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00011 X.src.0.01 41 /r ib");
  4359. AddInstructionV(opVDPPS,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00011 X.src.0.01 40 /r ib");
  4360. AddInstructionV(opVDPPS,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.00011 X.src.1.01 40 /r ib");
  4361. AddInstructionV(opVEXTRACTF128,"xmm1/mem128,ymm2,imm8","C4 RXB.03 0.1111.1.01 19 /r ib");
  4362. AddInstructionV(opVEXTRACTI128,"xmm1/mem128,ymm2,imm8","C4 RXB.03 0.1111.1.01 39 /r ib");
  4363. AddInstructionV(opVEXTRACTPS,"reg32/mem32,xmm1,imm8","C4 RXB.00011 X.1111.0.01 17 /r ib");
  4364. AddInstructionV(opVFMADD132PD,"xmm0,xmm1,xmm2/m128","C4 RXB.02 1.src2.0.01 98 /r");
  4365. AddInstructionV(opVFMADD132PD,"ymm0,ymm1,ymm2/m256","C4 RXB.02 1.src2.1.01 98 /r");
  4366. AddInstructionV(opVFMADD132PS,"xmm0,xmm1,xmm2/m128","C4 RXB.02 0.src2.0.01 98 /r");
  4367. AddInstructionV(opVFMADD132PS,"ymm0,ymm1,ymm2/m256","C4 RXB.02 0.src2.1.01 98 /r");
  4368. AddInstructionV(opVFMADD132SD,"xmm0,xmm1,xmm2/m64","C4 RXB.02 1.src2.X.01 99 /r");
  4369. AddInstructionV(opVFMADD132SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 99 /r");
  4370. AddInstructionV(opVFMADD213PD,"xmm0,xmm1,xmm2/m128","C4 RXB.02 1.src2.0.01 A8 /r");
  4371. AddInstructionV(opVFMADD213PD,"ymm0,ymm1,ymm2/m256","C4 RXB.02 1.src2.1.01 A8 /r");
  4372. AddInstructionV(opVFMADD213PS,"xmm0,xmm1,xmm2/m128","C4 RXB.02 0.src2.0.01 A8 /r");
  4373. AddInstructionV(opVFMADD213PS,"ymm0,ymm1,ymm2/m256","C4 RXB.02 0.src2.1.01 A8 /r");
  4374. AddInstructionV(opVFMADD213SD,"xmm0,xmm1,xmm2/m64","C4 RXB.02 1.src2.X.01 A9 /r");
  4375. AddInstructionV(opVFMADD213SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 A9 /r");
  4376. AddInstructionV(opVFMADD231PD,"xmm0,xmm1,xmm2/m128","C4 RXB.02 1.src2.0.01 B8 /r");
  4377. AddInstructionV(opVFMADD231PD,"ymm0,ymm1,ymm2/m256","C4 RXB.02 1.src2.1.01 B8 /r");
  4378. AddInstructionV(opVFMADD231PS,"xmm0,xmm1,xmm2/m128","C4 RXB.02 0.src2.0.01 B8 /r");
  4379. AddInstructionV(opVFMADD231PS,"ymm0,ymm1,ymm2/m256","C4 RXB.02 0.src2.1.01 B8 /r");
  4380. AddInstructionV(opVFMADD231SD,"xmm0,xmm1,xmm2/m64","C4 RXB.02 1.src2.X.01 B9 /r");
  4381. AddInstructionV(opVFMADD231SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 B9 /r");
  4382. AddInstructionV(opVFMADDPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 69 /r /is4");
  4383. AddInstructionV(opVFMADDPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 69 /r /is4");
  4384. AddInstructionV(opVFMADDPD,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 69 /r /is4");
  4385. AddInstructionV(opVFMADDPD,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 69 /r /is4");
  4386. AddInstructionV(opVFMADDPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 68 /r /is4");
  4387. AddInstructionV(opVFMADDPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 68 /r /is4");
  4388. AddInstructionV(opVFMADDPS,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 68 /r /is4");
  4389. AddInstructionV(opVFMADDPS,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 68 /r /is4");
  4390. AddInstructionV(opVFMADDSD,"xmm1,xmm2,xmm3/mem64,xmm4","C4 RXB.03 0.src1.X.01 6B /r /is4");
  4391. AddInstructionV(opVFMADDSD,"xmm1,xmm2,xmm3,xmm4/mem64","C4 RXB.03 1.src1.X.01 6B /r /is4");
  4392. AddInstructionV(opVFMADDSS,"xmm1,xmm2,xmm3/mem32,xmm4","C4 RXB.03 0.src1.X.01 6A /r /is4");
  4393. AddInstructionV(opVFMADDSS,"xmm1,xmm2,xmm3,xmm4/mem32","C4 RXB.03 1.src1.X.01 6A /r /is4");
  4394. AddInstructionV(opVFMADDSUB132PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 96 /r");
  4395. AddInstructionV(opVFMADDSUB132PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 96 /r");
  4396. AddInstructionV(opVFMADDSUB132PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 96 /r");
  4397. AddInstructionV(opVFMADDSUB132PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 96 /r");
  4398. AddInstructionV(opVFMADDSUB213PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 A6 /r");
  4399. AddInstructionV(opVFMADDSUB213PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 A6 /r");
  4400. AddInstructionV(opVFMADDSUB213PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 A6 /r");
  4401. AddInstructionV(opVFMADDSUB213PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 A6 /r");
  4402. AddInstructionV(opVFMADDSUB231PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 B6 /r");
  4403. AddInstructionV(opVFMADDSUB231PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 B6 /r");
  4404. AddInstructionV(opVFMADDSUB231PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 B6 /r");
  4405. AddInstructionV(opVFMADDSUB231PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 B6 /r");
  4406. AddInstructionV(opVFMADDSUBPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 5D /r /is4");
  4407. AddInstructionV(opVFMADDSUBPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 5D /r /is4");
  4408. AddInstructionV(opVFMADDSUBPD,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 5D /r /is4");
  4409. AddInstructionV(opVFMADDSUBPD,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 5D /r /is4");
  4410. AddInstructionV(opVFMADDSUBPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 5C /r /is4");
  4411. AddInstructionV(opVFMADDSUBPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 5C /r /is4");
  4412. AddInstructionV(opVFMADDSUBPS,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 5C /r /is4");
  4413. AddInstructionV(opVFMADDSUBPS,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 5C /r /is4");
  4414. AddInstructionV(opVFMSUB132PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 9A /r");
  4415. AddInstructionV(opVFMSUB132PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 9A /r");
  4416. AddInstructionV(opVFMSUB132PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 9A /r");
  4417. AddInstructionV(opVFMSUB132PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 9A /r");
  4418. AddInstructionV(opVFMSUB132SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 9B /r");
  4419. AddInstructionV(opVFMSUB132SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 9B /r");
  4420. AddInstructionV(opVFMSUB213PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 AA /r");
  4421. AddInstructionV(opVFMSUB213PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 AA /r");
  4422. AddInstructionV(opVFMSUB213PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 AA /r");
  4423. AddInstructionV(opVFMSUB213PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 AA /r");
  4424. AddInstructionV(opVFMSUB213SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 AB /r");
  4425. AddInstructionV(opVFMSUB213SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 AB /r");
  4426. AddInstructionV(opVFMSUB231PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 BA /r");
  4427. AddInstructionV(opVFMSUB231PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 BA /r");
  4428. AddInstructionV(opVFMSUB231PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 BA /r");
  4429. AddInstructionV(opVFMSUB231PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 BA /r");
  4430. AddInstructionV(opVFMSUB231SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 BB /r");
  4431. AddInstructionV(opVFMSUB231SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 BB /r");
  4432. AddInstructionV(opVFMSUBADD132PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 97 /r");
  4433. AddInstructionV(opVFMSUBADD132PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 97 /r");
  4434. AddInstructionV(opVFMSUBADD132PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 0.src2.0.01 97 /r");
  4435. AddInstructionV(opVFMSUBADD132PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00010 0.src2.1.01 97 /r");
  4436. AddInstructionV(opVFMSUBADD213PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 A7 /r");
  4437. AddInstructionV(opVFMSUBADD213PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 A7 /r");
  4438. AddInstructionV(opVFMSUBADD213PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 0.src2.0.01 A7 /r");
  4439. AddInstructionV(opVFMSUBADD213PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00010 0.src2.1.01 A7 /r");
  4440. AddInstructionV(opVFMSUBADD231PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 B7 /r");
  4441. AddInstructionV(opVFMSUBADD231PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 B7 /r");
  4442. AddInstructionV(opVFMSUBADD231PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00010 0.src2.0.01 B7 /r");
  4443. AddInstructionV(opVFMSUBADD231PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00010 0.src2.1.01 B7 /r");
  4444. AddInstructionV(opVFMSUBADDPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 5F /r /is4");
  4445. AddInstructionV(opVFMSUBADDPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 5F /r /is4");
  4446. AddInstructionV(opVFMSUBADDPD,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 5F /r /is4");
  4447. AddInstructionV(opVFMSUBADDPD,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 5F /r /is4");
  4448. AddInstructionV(opVFMSUBADDPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 5E /r /is4");
  4449. AddInstructionV(opVFMSUBADDPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 5E /r /is4");
  4450. AddInstructionV(opVFMSUBADDPS,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 5E /r /is4");
  4451. AddInstructionV(opVFMSUBADDPS,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 5E /r /is4");
  4452. AddInstructionV(opVFMSUBPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 6D /r /is4");
  4453. AddInstructionV(opVFMSUBPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 6D /r /is4");
  4454. AddInstructionV(opVFMSUBPD,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 6D /r /is4");
  4455. AddInstructionV(opVFMSUBPD,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 6D /r /is4");
  4456. AddInstructionV(opVFMSUBPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 6C /r /is4");
  4457. AddInstructionV(opVFMSUBPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 6C /r /is4");
  4458. AddInstructionV(opVFMSUBPS,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 6C /r /is4");
  4459. AddInstructionV(opVFMSUBPS,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 6C /r /is4");
  4460. AddInstructionV(opVFMSUBSD,"xmm1,xmm2,xmm3/mem64,xmm4","C4 RXB.03 0.src1.X.01 6F /r /is4");
  4461. AddInstructionV(opVFMSUBSD,"xmm1,xmm2,xmm3,xmm4/mem64","C4 RXB.03 1.src1.X.01 6F /r /is4");
  4462. AddInstructionV(opVFMSUBSS,"xmm1,xmm2,xmm3/mem32,xmm4","C4 RXB.03 0.src1.X.01 6E /r /is4");
  4463. AddInstructionV(opVFMSUBSS,"xmm1,xmm2,xmm3,xmm4/mem32","C4 RXB.03 1.src1.X.01 6E /r /is4");
  4464. AddInstructionV(opVFNMADD132PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 9C /r");
  4465. AddInstructionV(opVFNMADD132PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 9C /r");
  4466. AddInstructionV(opVFNMADD132PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 9C /r");
  4467. AddInstructionV(opVFNMADD132PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 9C /r");
  4468. AddInstructionV(opVFNMADD132SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 9D /r");
  4469. AddInstructionV(opVFNMADD132SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 9D /r");
  4470. AddInstructionV(opVFNMADD213PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 AC /r");
  4471. AddInstructionV(opVFNMADD213PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 AC /r");
  4472. AddInstructionV(opVFNMADD213PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 AC /r");
  4473. AddInstructionV(opVFNMADD213PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 AC /r");
  4474. AddInstructionV(opVFNMADD213SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 AD /r");
  4475. AddInstructionV(opVFNMADD213SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 AD /r");
  4476. AddInstructionV(opVFNMADD231PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 BC /r");
  4477. AddInstructionV(opVFNMADD231PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 BC /r");
  4478. AddInstructionV(opVFNMADD231PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 BC /r");
  4479. AddInstructionV(opVFNMADD231PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 BC /r");
  4480. AddInstructionV(opVFNMADD231SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 BD /r");
  4481. AddInstructionV(opVFNMADD231SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 BD /r");
  4482. AddInstructionV(opVFNMADDPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 79 /r /is4");
  4483. AddInstructionV(opVFNMADDPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 79 /r /is4");
  4484. AddInstructionV(opVFNMADDPD,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 79 /r /is4");
  4485. AddInstructionV(opVFNMADDPD,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 79 /r /is4");
  4486. AddInstructionV(opVFNMADDPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 78 /r /is4");
  4487. AddInstructionV(opVFNMADDPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 78 /r /is4");
  4488. AddInstructionV(opVFNMADDPS,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 78 /r /is4");
  4489. AddInstructionV(opVFNMADDPS,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 78 /r /is4");
  4490. AddInstructionV(opVFNMADDSD,"xmm1,xmm2,xmm3/mem64,xmm4","C4 RXB.03 0.src1.X.01 7B /r /is4");
  4491. AddInstructionV(opVFNMADDSD,"xmm1,xmm2,xmm3,xmm4/mem64","C4 RXB.03 1.src1.X.01 7B /r /is4");
  4492. AddInstructionV(opVFNMADDSS,"xmm1,xmm2,xmm3/mem32,xmm4","C4 RXB.03 0.src1.X.01 7A /r /is4");
  4493. AddInstructionV(opVFNMADDSS,"xmm1,xmm2,xmm3,xmm4/mem32","C4 RXB.03 1.src1.X.01 7A /r /is4");
  4494. AddInstructionV(opVFNMSUB132PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 9E /r");
  4495. AddInstructionV(opVFNMSUB132PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 9E /r");
  4496. AddInstructionV(opVFNMSUB132PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 9E /r");
  4497. AddInstructionV(opVFNMSUB132PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 9E /r");
  4498. AddInstructionV(opVFNMSUB132SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 9F /r");
  4499. AddInstructionV(opVFNMSUB132SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 9F /r");
  4500. AddInstructionV(opVFNMSUB213PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 AE /r");
  4501. AddInstructionV(opVFNMSUB213PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 AE /r");
  4502. AddInstructionV(opVFNMSUB213PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 AE /r");
  4503. AddInstructionV(opVFNMSUB213PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 AE /r");
  4504. AddInstructionV(opVFNMSUB213SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 AF /r");
  4505. AddInstructionV(opVFNMSUB213SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 AF /r");
  4506. AddInstructionV(opVFNMSUB231PD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src2.0.01 BE /r");
  4507. AddInstructionV(opVFNMSUB231PD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src2.1.01 BE /r");
  4508. AddInstructionV(opVFNMSUB231PS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src2.0.01 BE /r");
  4509. AddInstructionV(opVFNMSUB231PS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src2.1.01 BE /r");
  4510. AddInstructionV(opVFNMSUB231SD,"xmm1,xmm2,xmm3/mem64","C4 RXB.02 1.src2.X.01 BF /r");
  4511. AddInstructionV(opVFNMSUB231SS,"xmm1,xmm2,xmm3/mem32","C4 RXB.02 0.src2.X.01 BF /r");
  4512. AddInstructionV(opVFNMSUBPD,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 7D /r /is4");
  4513. AddInstructionV(opVFNMSUBPD,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 7D /r /is4");
  4514. AddInstructionV(opVFNMSUBPD,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 7D /r /is4");
  4515. AddInstructionV(opVFNMSUBPD,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 7D /r /is4");
  4516. AddInstructionV(opVFNMSUBPS,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 7C /r /is4");
  4517. AddInstructionV(opVFNMSUBPS,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 7C /r /is4");
  4518. AddInstructionV(opVFNMSUBPS,"xmm1,xmm2,xmm3,xmm4/mem128","C4 RXB.03 1.src1.0.01 7C /r /is4");
  4519. AddInstructionV(opVFNMSUBPS,"ymm1,ymm2,ymm3,ymm4/mem256","C4 RXB.03 1.src1.1.01 7C /r /is4");
  4520. AddInstructionV(opVFNMSUBSD,"xmm1,xmm2,xmm3/mem64,xmm4","C4 RXB.03 0.src1.X.01 7F /r /is4");
  4521. AddInstructionV(opVFNMSUBSD,"xmm1,xmm2,xmm3,xmm4/mem64","C4 RXB.03 1.src1.X.01 7F /r /is4");
  4522. AddInstructionV(opVFNMSUBSS,"xmm1,xmm2,xmm3/mem32,xmm4","C4 RXB.03 0.src1.X.01 7E /r /is4");
  4523. AddInstructionV(opVFNMSUBSS,"xmm1,xmm2,xmm3,xmm4/mem32","C4 RXB.03 1.src1.X.01 7E /r /is4");
  4524. AddInstructionV(opVFRCZPD,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 81 /r");
  4525. AddInstructionV(opVFRCZPD,"ymm1,ymm2/mem256","8F RXB.09 0.1111.1.00 81 /r");
  4526. AddInstructionV(opVFRCZPS,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 80 /r");
  4527. AddInstructionV(opVFRCZPS,"ymm1,ymm2/mem256","8F RXB.09 0.1111.1.00 80 /r");
  4528. AddInstructionV(opVFRCZSD,"xmm1,xmm2/mem64","8F RXB.09 0.1111.0.00 83 /r");
  4529. AddInstructionV(opVFRCZSS,"xmm1,xmm2/mem32","8F RXB.09 0.1111.0.00 82 /r");
  4530. AddInstructionV(opVGATHERDPD,"xmm1,vm32x,xmm2","C4 RXB.02 1.src2.0.01 92 /r");
  4531. AddInstructionV(opVGATHERDPD,"ymm1,vm32x,ymm2","C4 RXB.02 1.src2.1.01 92 /r");
  4532. AddInstructionV(opVGATHERDPS,"xmm1,vm32x,xmm2","C4 RXB.02 0.src2.0.01 92 /r");
  4533. AddInstructionV(opVGATHERDPS,"ymm1,vm32y,ymm2","C4 RXB.02 0.src2.1.01 92 /r");
  4534. AddInstructionV(opVGATHERQPD,"xmm1,vm64x,xmm2","C4 RXB.02 1.src2.0.01 93 /r");
  4535. AddInstructionV(opVGATHERQPD,"ymm1,vm64y,ymm2","C4 RXB.02 1.src2.1.01 93 /r");
  4536. AddInstructionV(opVGATHERQPS,"xmm1,vm64x,xmm2","C4 RXB.02 0.src2.0.01 93 /r");
  4537. AddInstructionV(opVGATHERQPS,"xmm1,vm64y,xmm2","C4 RXB.02 0.src2.1.01 93 /r");
  4538. AddInstructionV(opVHADDPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 7C /r");
  4539. AddInstructionV(opVHADDPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 7C /r");
  4540. AddInstructionV(opVHADDPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.11 7C /r");
  4541. AddInstructionV(opVHADDPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.11 7C /r");
  4542. AddInstructionV(opVHSUBPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 7D /r");
  4543. AddInstructionV(opVHSUBPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 7D /r");
  4544. AddInstructionV(opVHSUBPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.11 7D /r");
  4545. AddInstructionV(opVHSUBPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.11 7D /r");
  4546. AddInstructionV(opVINSERTF128,"ymm1,ymm2,xmm3/mem128,imm8","C4 RXB.03 0.src.1.01 18 /r ib");
  4547. AddInstructionV(opVINSERTI128,"ymm1,ymm2,xmm3/mem128,imm8","C4 RXB.03 0.src1.1.01 38 /r ib");
  4548. AddInstructionV(opVINSERTPS,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00011 X.src.0.01 21 /r ib");
  4549. AddInstructionV(opVLDDQU,"xmm1,mem128","C4 RXB.00001 X.1111.0.11 F0 /r");
  4550. AddInstructionV(opVLDDQU,"ymm1,mem256","C4 RXB.00001 X.1111.1.11 F0 /r");
  4551. AddInstructionV(opVLDMXCSR,"mem32","C4 RXB.00001 X.1111.0.00 AE /2");
  4552. AddInstructionV(opVMASKMOVDQU,"xmm1,xmm2","C4 RXB.00001 X.1111.0.01 F7 /r");
  4553. AddInstructionV(opVMASKMOVPD,"xmm1,xmm2,mem128","C4 RXB.02 0.src1.0.01 2D /r");
  4554. AddInstructionV(opVMASKMOVPD,"ymm1,ymm2,mem256","C4 RXB.02 0.src1.1.01 2D /r");
  4555. AddInstructionV(opVMASKMOVPD,"mem128,xmm1,xmm2","C4 RXB.02 0.src1.0.01 2F /r");
  4556. AddInstructionV(opVMASKMOVPD,"mem256,ymm1,ymm2","C4 RXB.02 0.src1.1.01 2F /r");
  4557. AddInstructionV(opVMASKMOVPS,"xmm1,xmm2,mem128","C4 RXB.02 0.src1.0.01 2C /r");
  4558. AddInstructionV(opVMASKMOVPS,"ymm1,ymm2,mem256","C4 RXB.02 0.src1.1.01 2C /r");
  4559. AddInstructionV(opVMASKMOVPS,"mem128,xmm1,xmm2","C4 RXB.02 0.src1.0.01 2E /r");
  4560. AddInstructionV(opVMASKMOVPS,"mem256,ymm1,ymm2","C4 RXB.02 0.src1.1.01 2E /r");
  4561. AddInstructionV(opVMAXPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 5F /r");
  4562. AddInstructionV(opVMAXPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 5F /r");
  4563. AddInstructionV(opVMAXPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 5F /r");
  4564. AddInstructionV(opVMAXPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 5F /r");
  4565. AddInstructionV(opVMAXSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.00001 X.src.X.11 5F /r");
  4566. AddInstructionV(opVMAXSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.00001 X.src.X.10 5F /r");
  4567. AddInstructionV(opVMINPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.01 5D /r");
  4568. AddInstructionV(opVMINPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.01 5D /r");
  4569. AddInstructionV(opVMINPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 5D /r");
  4570. AddInstructionV(opVMINPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 5D /r");
  4571. AddInstructionV(opVMINSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.00001 X.src.X.11 5D /r");
  4572. AddInstructionV(opVMINSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.00001 X.src.X.10 5D /r");
  4573. AddInstructionV(opVMOVAPD,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.01 28 /r");
  4574. AddInstructionV(opVMOVAPD,"xmm1/mem128,xmm2","C4 RXB.00001 X.1111.0.01 29 /r");
  4575. AddInstructionV(opVMOVAPD,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.01 28 /r");
  4576. AddInstructionV(opVMOVAPD,"ymm1/mem256,ymm2","C4 RXB.00001 X.1111.1.01 29 /r");
  4577. AddInstructionV(opVMOVAPS,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.00 28 /r");
  4578. AddInstructionV(opVMOVAPS,"xmm1/mem128,xmm2","C4 RXB.00001 X.1111.0.00 29 /r");
  4579. AddInstructionV(opVMOVAPS,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.00 28 /r");
  4580. AddInstructionV(opVMOVAPS,"ymm1/mem256,ymm2","C4 RXB.00001 X.1111.1.00 29 /r");
  4581. AddInstructionV(opVMOVD,"xmm,reg32/mem32","C4 RXB.00001 0.1111.0.01 6E /r");
  4582. AddInstructionV(opVMOVD,"reg32/mem32,xmm","C4 RXB.00001 0.1111.0.01 7E /r");
  4583. AddInstructionV(opVMOVDQA,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.01 6F /r");
  4584. AddInstructionV(opVMOVDQA,"xmm1/mem128,xmm2","C4 RXB.00001 X.1111.0.01 6F /r");
  4585. AddInstructionV(opVMOVDQA,"ymm1,xmm2/mem256","C4 RXB.00001 X.1111.1.01 7F /r");
  4586. AddInstructionV(opVMOVDQA,"ymm1/mem256,ymm2","C4 RXB.00001 X.1111.1.01 7F /r");
  4587. AddInstructionV(opVMOVDQU,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.10 6F /r");
  4588. AddInstructionV(opVMOVDQU,"xmm1/mem128,xmm2","C4 RXB.00001 X.1111.0.10 6F /r");
  4589. AddInstructionV(opVMOVDQU,"ymm1,xmm2/mem256","C4 RXB.00001 X.1111.1.10 7F /r");
  4590. AddInstructionV(opVMOVDQU,"ymm1/mem256,ymm2","C4 RXB.00001 X.1111.1.10 7F /r");
  4591. AddInstructionV(opVMOVHLPS,"xmm1,xmm2,xmm3","C4 RXB.00001 X.src.0.00 12 /r");
  4592. AddInstructionV(opVMOVHPD,"xmm1,xmm2,mem64","C4 RXB.00001 X.src.0.01 16 /r");
  4593. AddInstructionV(opVMOVHPD,"mem64,xmm1","C4 RXB.00001 X.1111.0.01 17 /r");
  4594. AddInstructionV(opVMOVHPS,"xmm1,xmm2,mem64","C4 RXB.00001 X.src.0.00 16 /r");
  4595. AddInstructionV(opVMOVHPS,"mem64,xmm1","C4 RXB.00001 X.1111.0.00 17 /r");
  4596. AddInstructionV(opVMOVLHPS,"xmm1,xmm2,xmm3","C4 RXB.00001 X.src.0.00 16 /r");
  4597. AddInstructionV(opVMOVLPD,"xmm1,xmm2,mem64","C4 RXB.00001 X.src.0.01 12 /r");
  4598. AddInstructionV(opVMOVLPD,"mem64,xmm1","C4 RXB.00001 X.1111.0.01 13 /r");
  4599. AddInstructionV(opVMOVLPS,"xmm1,xmm2,mem64","C4 RXB.00001 X.src.0.00 12 /r");
  4600. AddInstructionV(opVMOVLPS,"mem64,xmm1","C4 RXB.00001 X.1111.0.00 13 /r");
  4601. AddInstructionV(opVPMOVMSKB,"reg64,xmm1","C4 RXB.01 X.1111.0.01 D7 /r");
  4602. AddInstructionV(opVPMOVMSKB,"reg64,ymm1","C4 RXB.01 X.1111.1.01 D7 /r");
  4603. AddInstructionV(opVMOVMSKPD,"reg,xmm","C4 RXB.00001 X.1111.0.01 50 /r");
  4604. AddInstructionV(opVMOVMSKPD,"reg,ymm","C4 RXB.00001 X.1111.1.01 50 /r");
  4605. AddInstructionV(opVMOVMSKPS,"reg,xmm","C4 RXB.00001 X.1111.0.00 50 /r");
  4606. AddInstructionV(opVMOVMSKPS,"reg,ymm","C4 RXB.00001 X.1111.1.00 50 /r");
  4607. AddInstructionV(opVMOVNTDQ,"mem128,xmm","C4 RXB.00001 X.1111.0.01 E7 /r");
  4608. AddInstructionV(opVMOVNTDQ,"mem256,ymm","C4 RXB.00001 X.1111.1.01 E7 /r");
  4609. AddInstructionV(opVMOVNTDQA,"xmm,mem128","C4 RXB.02 X.1111.0.01 2A /r");
  4610. AddInstructionV(opVMOVNTDQA,"ymm,mem256","C4 RXB.02 X.1111.1.01 2A /r");
  4611. AddInstructionV(opVMOVNTPD,"mem128,xmm","C4 RXB.00001 X.1111.0.01 2B /r");
  4612. AddInstructionV(opVMOVNTPD,"mem256,ymm","C4 RXB.00001 X.1111.1.01 2B /r");
  4613. AddInstructionV(opVMOVNTPS,"mem128,xmm","C4 RXB.00001 X.1111.0.00 2B /r");
  4614. AddInstructionV(opVMOVNTPS,"mem256,ymm","C4 RXB.00001 X.1111.1.00 2B /r");
  4615. AddInstructionV(opVMOVQ,"xmm,reg64/mem64","C4 RXB.00001 1.1111.0.01 6E /r");
  4616. AddInstructionV(opVMOVQ,"reg64/mem64,xmm","C4 RXB.00001 1.1111.0.01 7E /r");
  4617. AddInstructionV(opVMOVQ,"xmm1,xmm2/mem64","C4 RXB.00001 X.1111.0.10 7E /r");
  4618. AddInstructionV(opVMOVQ,"xmm1/mem64,xmm2","C4 RXB.00001 X.1111.0.01 D6 /r");
  4619. AddInstructionV(opVMOVSD,"xmm1,mem64","C4 RXB.00001 X.1111.X.11 10 /r");
  4620. AddInstructionV(opVMOVSD,"mem64,xmm1","C4 RXB.00001 X.1111.X.11 11 /r");
  4621. AddInstructionV(opVMOVSD,"xmm1,xmm2,xmm3","C4 RXB.00001 X.src.X.11 10 /r");
  4622. AddInstructionV(opVMOVSD,"xmm1,xmm2,xmm3","C4 RXB.00001 X.src.X.11 11 /r");
  4623. AddInstructionV(opVMOVSHDUP,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.10 16 /r");
  4624. AddInstructionV(opVMOVSHDUP,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.10 16 /r");
  4625. AddInstructionV(opVMOVSLDUP,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.10 12 /r");
  4626. AddInstructionV(opVMOVSLDUP,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.10 12 /r");
  4627. AddInstructionV(opVMOVSS,"xmm1,mem32","C4 RXB.00001 X.1111.X.10 10 /r");
  4628. AddInstructionV(opVMOVSS,"mem32,xmm1","C4 RXB.00001 X.1111.X.10 11 /r");
  4629. AddInstructionV(opVMOVSS,"xmm1,xmm2,xmm3","C4 RXB.00001 X.src.X.10 10 /r");
  4630. AddInstructionV(opVMOVSS,"xmm1,xmm2,xmm3","C4 RXB.00001 X.src.X.10 11 /r");
  4631. AddInstructionV(opVMOVUPD,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.01 10 /r");
  4632. AddInstructionV(opVMOVUPD,"xmm1/mem128,xmm2","C4 RXB.00001 X.1111.0.01 11 /r");
  4633. AddInstructionV(opVMOVUPD,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.01 10 /r");
  4634. AddInstructionV(opVMOVUPD,"ymm1/mem256,ymm2","C4 RXB.00001 X.1111.1.01 11 /r");
  4635. AddInstructionV(opVMOVUPS,"xmm1,xmm2/mem128","C4 RXB.00001 X.1111.0.00 10 /r");
  4636. AddInstructionV(opVMOVUPS,"xmm1/mem128,xmm2","C4 RXB.00001 X.1111.0.00 11 /r");
  4637. AddInstructionV(opVMOVUPS,"ymm1,ymm2/mem256","C4 RXB.00001 X.1111.1.00 10 /r");
  4638. AddInstructionV(opVMOVUPS,"ymm1/mem256,ymm2","C4 RXB.00001 X.1111.1.00 11 /r");
  4639. AddInstructionV(opVMPSADBW,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.03 X.src1.0.01 42 /r ib");
  4640. AddInstructionV(opVMPSADBW,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.03 X.src1.1.01 42 /r ib");
  4641. AddInstructionV(opVMULPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src.0.01 59 /r");
  4642. AddInstructionV(opVMULPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src.1.01 59 /r");
  4643. AddInstructionV(opVMULPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.00 59 /r");
  4644. AddInstructionV(opVMULPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.00 59 /r");
  4645. AddInstructionV(opVMULSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.01 X.src1.X.11 59 /r");
  4646. AddInstructionV(opVMULSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.01 X.src1.X.10 59 /r");
  4647. AddInstructionV(opVORPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 56 /r");
  4648. AddInstructionV(opVORPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 56 /r");
  4649. AddInstructionV(opVORPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.00 56 /r");
  4650. AddInstructionV(opVORPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.00 56 /r");
  4651. AddInstructionV(opVPABSB,"xmm1,xmm2/mem128","C4 RXB.02 X.1111.0.01 1C /r");
  4652. AddInstructionV(opVPABSB,"ymm1,ymm2/mem256","C4 RXB.02 X.1111.1.01 1C /r");
  4653. AddInstructionV(opVPABSD,"xmm1,xmm2/mem128","C4 RXB.02 X.1111.0.01 1E /r");
  4654. AddInstructionV(opVPABSD,"ymm1,ymm2/mem256","C4 RXB.02 X.1111.1.01 1E /r");
  4655. AddInstructionV(opVPABSW,"xmm1,xmm2/mem128","C4 RXB.02 X.1111.0.01 1D /r");
  4656. AddInstructionV(opVPABSW,"ymm1,ymm2/mem256","C4 RXB.02 X.1111.1.01 1D /r");
  4657. AddInstructionV(opVPACKSSDW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 6B /r");
  4658. AddInstructionV(opVPACKSSDW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 6B /r");
  4659. AddInstructionV(opVPACKSSWB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 63 /r");
  4660. AddInstructionV(opVPACKSSWB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 63 /r");
  4661. AddInstructionV(opVPACKUSDW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 2B /r");
  4662. AddInstructionV(opVPACKUSDW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.0.01 2B /r");
  4663. AddInstructionV(opVPACKUSWB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 67 /r");
  4664. AddInstructionV(opVPACKUSWB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 67 /r");
  4665. AddInstructionV(opVPADDB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 FC /r");
  4666. AddInstructionV(opVPADDB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 FC /r");
  4667. AddInstructionV(opVPADDD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 FE /r");
  4668. AddInstructionV(opVPADDD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 FE /r");
  4669. AddInstructionV(opVPADDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src1.0.01 D4 /r");
  4670. AddInstructionV(opVPADDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src1.1.01 D4 /r");
  4671. AddInstructionV(opVPADDSB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 EC /r");
  4672. AddInstructionV(opVPADDSB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 EC /r");
  4673. AddInstructionV(opVPADDSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src1.0.01 ED /r");
  4674. AddInstructionV(opVPADDSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src1.1.01 ED /r");
  4675. AddInstructionV(opVPADDUSB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 DC /r");
  4676. AddInstructionV(opVPADDUSB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 DC /r");
  4677. AddInstructionV(opVPADDUSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 DD /r");
  4678. AddInstructionV(opVPADDUSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 DD /r");
  4679. AddInstructionV(opVPADDW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 FD /r");
  4680. AddInstructionV(opVPADDW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 FD /r");
  4681. AddInstructionV(opVPALIGNR,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.03 X.src1.0.01 0F /r ib");
  4682. AddInstructionV(opVPALIGNR,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.03 X.src1.1.01 0F /r ib");
  4683. AddInstructionV(opVPAND,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 DB /r");
  4684. AddInstructionV(opVPAND,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 DB /r");
  4685. AddInstructionV(opVPANDN,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src.0.01 DF /r");
  4686. AddInstructionV(opVPANDN,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src.1.01 DF /r");
  4687. AddInstructionV(opVPAVGB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E0 /r");
  4688. AddInstructionV(opVPAVGB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 E0 /r");
  4689. AddInstructionV(opVPAVGW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E3 /r");
  4690. AddInstructionV(opVPAVGW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 E3 /r");
  4691. AddInstructionV(opVPBLENDD,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.03 0.src1.0.01 02 /r /ib");
  4692. AddInstructionV(opVPBLENDD,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.03 0.src1.1.01 02 /r /ib");
  4693. AddInstructionV(opVPBLENDVB,"xmm1,xmm2,xmm3/mem128,xmm4","C4 RXB.03 0.src1.0.01 4C /r is4");
  4694. AddInstructionV(opVPBLENDVB,"ymm1,ymm2,ymm3/mem256,ymm4","C4 RXB.03 0.src1.1.01 4C /r is4");
  4695. AddInstructionV(opVPBLENDW,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.03 X.src1.0.01 0E /r /ib");
  4696. AddInstructionV(opVPBLENDW,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.03 X.src1.1.01 0E /r /ib");
  4697. AddInstructionV(opVPBROADCASTB,"xmm1,xmm2/mem8","C4 RXB.02 0.1111.0.01 78 /r");
  4698. AddInstructionV(opVPBROADCASTB,"ymm1,xmm2/mem8","C4 RXB.02 0.1111.1.01 78 /r");
  4699. AddInstructionV(opVPBROADCASTD,"xmm1,xmm2/mem32","C4 RXB.02 0.1111.0.01 58 /r");
  4700. AddInstructionV(opVPBROADCASTD,"ymm1,xmm2/mem32","C4 RXB.02 0.1111.1.01 58 /r");
  4701. AddInstructionV(opVPBROADCASTQ,"xmm1,xmm2/mem64","C4 RXB.02 0.1111.0.01 59 /r");
  4702. AddInstructionV(opVPBROADCASTQ,"ymm1,xmm2/mem64","C4 RXB.02 0.1111.1.01 59 /r");
  4703. AddInstructionV(opVPBROADCASTW,"xmm1,xmm2/mem16","C4 RXB.02 0.1111.0.01 79 /r");
  4704. AddInstructionV(opVPBROADCASTW,"ymm1,xmm2/mem16","C4 RXB.02 0.1111.1.01 79 /r");
  4705. AddInstructionV(opVPCLMULQDQ,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.00011 X.src.0.01 44 /r ib");
  4706. AddInstructionV(opVPCMOV,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 A2 /r ib");
  4707. AddInstructionV(opVPCMOV,"ymm1,ymm2,ymm3/mem256,ymm4","8F RXB.08 0.src1.1.00 A2 /r ib");
  4708. AddInstructionV(opVPCMOV,"xmm1,xmm2,xmm3,xmm4/mem128","8F RXB.08 1.src1.0.00 A2 /r ib");
  4709. AddInstructionV(opVPCMOV,"ymm1,ymm2,ymm3,ymm4/mem256","8F RXB.08 1.src1.1.00 A2 /r ib");
  4710. AddInstructionV(opVPCMPEQB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 74 /r");
  4711. AddInstructionV(opVPCMPEQB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 74 /r");
  4712. AddInstructionV(opVPCMPEQD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 76 /r");
  4713. AddInstructionV(opVPCMPEQD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 76 /r");
  4714. AddInstructionV(opVPCMPEQQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 29 /r");
  4715. AddInstructionV(opVPCMPEQQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 29 /r");
  4716. AddInstructionV(opVPCMPEQW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 75 /r");
  4717. AddInstructionV(opVPCMPEQW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 75 /r");
  4718. AddInstructionV(opVPCMPESTRI,"xmm1,xmm2/mem128,imm8","C4 RXB.00011 X.1111.0.01 61 /r ib");
  4719. AddInstructionV(opVPCMPESTRM,"xmm1,xmm2/mem128,imm8","C4 RXB.00011 X.1111.0.01 60 /r ib");
  4720. AddInstructionV(opVPCMPGTB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 64 /r");
  4721. AddInstructionV(opVPCMPGTB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 64 /r");
  4722. AddInstructionV(opVPCMPGTD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 66 /r");
  4723. AddInstructionV(opVPCMPGTD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 66 /r");
  4724. AddInstructionV(opVPCMPGTQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 37 /r");
  4725. AddInstructionV(opVPCMPGTQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 37 /r");
  4726. AddInstructionV(opVPCMPGTW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 65 /r");
  4727. AddInstructionV(opVPCMPGTW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 65 /r");
  4728. AddInstructionV(opVPCMPISTRI,"xmm1,xmm2/mem128,imm8","C4 RXB.03 X.1111.0.01 63 /r ib");
  4729. AddInstructionV(opVPCMPISTRM,"xmm1,xmm2/mem128,imm8","C4 RXB.03 X.1111.0.01 62 /r ib");
  4730. AddInstructionV(opVPCOMB,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 CC /r ib");
  4731. AddInstructionV(opVPCOMD,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 CE /r ib");
  4732. AddInstructionV(opVPCOMQ,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 CF /r ib");
  4733. AddInstructionV(opVPCOMUB,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 EC /r ib");
  4734. AddInstructionV(opVPCOMUD,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 EE /r ib");
  4735. AddInstructionV(opVPCOMUQ,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 EF /r ib");
  4736. AddInstructionV(opVPCOMUW,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 ED /r ib");
  4737. AddInstructionV(opVPCOMW,"xmm1,xmm2,xmm3/mem128,imm8","8F RXB.08 0.src1.0.00 CD /r ib");
  4738. AddInstructionV(opVPERM2F128,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.03 0.src1.1.01 06 /r ib");
  4739. AddInstructionV(opVPERM2I128,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.03 0.src1.1.01 46 /r ib");
  4740. AddInstructionV(opVPERMD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 36 /r");
  4741. AddInstructionV(opVPERMIL2PD,"xmm1,xmm2,xmm3/mem128,xmm4,m2z","C4 RXB.03 0.src1.0.01 49 /r is5");
  4742. AddInstructionV(opVPERMIL2PD,"xmm1,xmm2,xmm3,xmm4/mem128,m2z","C4 RXB.03 1.src1.0.01 49 /r is5");
  4743. AddInstructionV(opVPERMIL2PD,"ymm1,ymm2,ymm3/mem256,ymm4,m2z","C4 RXB.03 0.src1.1.01 49 /r is5");
  4744. AddInstructionV(opVPERMIL2PD,"ymm1,ymm2,ymm3,ymm4/mem256,m2z","C4 RXB.03 1.src1.1.01 49 /r is5");
  4745. AddInstructionV(opVPERMIL2PS,"xmm1,xmm2,xmm3/mem128,xmm4,m2z","C4 RXB.03 0.src1.0.01 48 /r is5");
  4746. AddInstructionV(opVPERMIL2PS,"xmm1,xmm2,xmm3,xmm4/mem128,m2z","C4 RXB.03 1.src1.0.01 48 /r is5");
  4747. AddInstructionV(opVPERMIL2PS,"ymm1,ymm2,ymm3/mem256,ymm4,m2z","C4 RXB.03 0.src1.1.01 48 /r is5");
  4748. AddInstructionV(opVPERMIL2PS,"ymm1,ymm2,ymm3,ymm4/mem256,m2z","C4 RXB.03 1.src1.1.01 48 /r is5");
  4749. AddInstructionV(opVPERMILPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src1.0.01 0D /r");
  4750. AddInstructionV(opVPERMILPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 0D /r");
  4751. AddInstructionV(opVPERMILPD,"xmm1,xmm2/mem128,imm8","C4 RXB.03 0.1111.0.01 05 /r ib");
  4752. AddInstructionV(opVPERMILPD,"ymm1,ymm2/mem256,imm8","C4 RXB.03 0.1111.1.01 05 /r ib");
  4753. AddInstructionV(opVPERMILPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src1.0.01 0C /r");
  4754. AddInstructionV(opVPERMILPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 0C /r");
  4755. AddInstructionV(opVPERMILPS,"xmm1,xmm2/mem128,imm8","C4 RXB.03 0.1111.0.01 04 /r ib");
  4756. AddInstructionV(opVPERMILPS,"ymm1,ymm2/mem256,imm8","C4 RXB.03 0.1111.1.01 04 /r ib");
  4757. AddInstructionV(opVPERMPD,"ymm1,ymm2/mem256,imm8","C4 RXB.03 1.1111.1.01 01 /r ib");
  4758. AddInstructionV(opVPERMPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 16 /r");
  4759. AddInstructionV(opVPERMQ,"ymm1,ymm2/mem256,imm8","C4 RXB.03 1.1111.1.01 00 /r ib");
  4760. AddInstructionV(opVPEXTRB,"reg/mem8,xmm,imm8","C4 RXB.03 X.1111.0.01 14 /r ib");
  4761. AddInstructionV(opVPEXTRD,"reg32/mem32,xmm,imm8","C4 RXB.03 0.1111.0.01 16 /r ib");
  4762. AddInstructionV(opVPEXTRQ,"reg64/mem64,xmm,imm8","C4 RXB.03 1.1111.0.01 16 /r ib");
  4763. AddInstructionV(opVPEXTRW,"reg,xmm,imm8","C4 RXB.01 X.1111.0.01 C5 /r ib");
  4764. AddInstructionV(opVPEXTRW,"reg/mem16,xmm,imm8","C4 RXB.03 X.1111.0.01 15 /r ib");
  4765. AddInstructionV(opVPGATHERDD,"xmm1,vm32x,xmm2","C4 RXB.02 0.src2.0.01 90 /r");
  4766. AddInstructionV(opVPGATHERDD,"ymm1,vm32y,ymm2","C4 RXB.02 0.src2.1.01 90 /r");
  4767. AddInstructionV(opVPGATHERDQ,"xmm1,vm32x,xmm2","C4 RXB.02 1.src2.0.01 90 /r");
  4768. AddInstructionV(opVPGATHERDQ,"ymm1,vm32x,ymm2","C4 RXB.02 1.src2.1.01 90 /r");
  4769. AddInstructionV(opVPGATHERQD,"xmm1,vm64x,xmm2","C4 RXB.02 0.src2.0.01 91 /r");
  4770. AddInstructionV(opVPGATHERQD,"xmm1,vm64y,xmm2","C4 RXB.02 0.src2.1.01 91 /r");
  4771. AddInstructionV(opVPGATHERQQ,"xmm1,vm64x,xmm2","C4 RXB.02 1.src2.0.01 91 /r");
  4772. AddInstructionV(opVPGATHERQQ,"ymm1,vm64y,ymm2","C4 RXB.02 1.src2.1.01 91 /r");
  4773. AddInstructionV(opVPHADDBD,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 C2 /r");
  4774. AddInstructionV(opVPHADDBQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 C3 /r");
  4775. AddInstructionV(opVPHADDBW,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 C1 /r");
  4776. AddInstructionV(opVPHADDD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 02 /r");
  4777. AddInstructionV(opVPHADDD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 02 /r");
  4778. AddInstructionV(opVPHADDDQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 CB /r");
  4779. AddInstructionV(opVPHADDSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 03 /r");
  4780. AddInstructionV(opVPHADDSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 03 /r");
  4781. AddInstructionV(opVPHADDUBD,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 D2 /r");
  4782. AddInstructionV(opVPHADDUBQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 D3 /r");
  4783. AddInstructionV(opVPHADDUBW,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 D1 /r");
  4784. AddInstructionV(opVPHADDUDQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 DB /r");
  4785. AddInstructionV(opVPHADDUWD,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 D6 /r");
  4786. AddInstructionV(opVPHADDUWQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 D7 /r");
  4787. AddInstructionV(opVPHADDW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 01 /r");
  4788. AddInstructionV(opVPHADDW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 01 /r");
  4789. AddInstructionV(opVPHADDWD,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 C6 /r");
  4790. AddInstructionV(opVPHADDWQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 C7 /r");
  4791. AddInstructionV(opVPHMINPOSUW,"xmm1,xmm2/mem128","C4 RXB.02 X.1111.0.01 41 /r");
  4792. AddInstructionV(opVPHSUBBW,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 E1 /r");
  4793. AddInstructionV(opVPHSUBD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 06 /r");
  4794. AddInstructionV(opVPHSUBD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 06 /r");
  4795. AddInstructionV(opVPHSUBDQ,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 E3 /r");
  4796. AddInstructionV(opVPHSUBSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 07 /r");
  4797. AddInstructionV(opVPHSUBSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 07 /r");
  4798. AddInstructionV(opVPHSUBW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 05 /r");
  4799. AddInstructionV(opVPHSUBW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 05 /r");
  4800. AddInstructionV(opVPHSUBWD,"xmm1,xmm2/mem128","8F RXB.09 0.1111.0.00 E2 /r");
  4801. AddInstructionV(opVPINSRB,"xmm,reg/mem8,xmm,imm8","C4 RXB.03 X.1111.0.01 20 /r ib");
  4802. AddInstructionV(opVPINSRD,"xmm,reg32/mem32,xmm,imm8","C4 RXB.03 0.1111.0.01 22 /r ib");
  4803. AddInstructionV(opVPINSRQ,"xmm,reg64/mem64,xmm,imm8","C4 RXB.03 1.1111.0.01 22 /r ib");
  4804. AddInstructionV(opVPINSRW,"xmm,reg32/mem16,xmm,imm8","C4 RXB.01 X.1111.0.01 C4 /r ib");
  4805. AddInstructionV(opVPMACSDD,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 9E /r ib");
  4806. AddInstructionV(opVPMACSDQH,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.01000 0.src1.0.00 9F /r ib");
  4807. AddInstructionV(opVPMACSDQL,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 97 /r ib");
  4808. AddInstructionV(opVPMACSSDD,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 X.src1.0.00 8E /r ib");
  4809. AddInstructionV(opVPMACSSDQH,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 8F /r ib");
  4810. AddInstructionV(opVPMACSSDQL,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 87 /r ib");
  4811. AddInstructionV(opVPMACSSWD,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 86 /r ib");
  4812. AddInstructionV(opVPMACSSWW,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 X.src1.0.00 85 /r ib");
  4813. AddInstructionV(opVPMACSWD,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 96 /r ib");
  4814. AddInstructionV(opVPMACSWW,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 95 /r ib");
  4815. AddInstructionV(opVPMADCSSWD,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 A6 /r ib");
  4816. AddInstructionV(opVPMADDUBSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 04 /r");
  4817. AddInstructionV(opVPMADDUBSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 04 /r");
  4818. AddInstructionV(opVPMADDWD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F5 /r");
  4819. AddInstructionV(opVPMADDWD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 F5 /r");
  4820. AddInstructionV(opVPMASKMOVD,"xmm1,xmm2,mem128","C4 RXB.02 0.src1.0.01 8C /r");
  4821. AddInstructionV(opVPMASKMOVD,"ymm1,ymm2,mem256","C4 RXB.02 0.src1.1.01 8C /r");
  4822. AddInstructionV(opVPMASKMOVD,"mem128,xmm1,xmm2","C4 RXB.02 0.src1.0.01 8E /r");
  4823. AddInstructionV(opVPMASKMOVD,"mem256,ymm1,ymm2","C4 RXB.02 0.src1.1.01 8E /r");
  4824. AddInstructionV(opVPMASKMOVQ,"xmm1,xmm2,mem128","C4 RXB.02 1.src1.0.01 8C /r");
  4825. AddInstructionV(opVPMASKMOVQ,"ymm1,ymm2,mem256","C4 RXB.02 1.src1.1.01 8C /r");
  4826. AddInstructionV(opVPMASKMOVQ,"mem128,xmm1,xmm2","C4 RXB.02 1.src1.0.01 8E /r");
  4827. AddInstructionV(opVPMASKMOVQ,"mem256,ymm1,ymm2","C4 RXB.02 1.src1.1.01 8E /r");
  4828. AddInstructionV(opVPMAXSB,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 3C /r");
  4829. AddInstructionV(opVPMAXSB,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 3C /r");
  4830. AddInstructionV(opVPMAXSD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 3D /r");
  4831. AddInstructionV(opVPMAXSD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 3D /r");
  4832. AddInstructionV(opVPMAXSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 EE /r");
  4833. AddInstructionV(opVPMAXSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 EE /r");
  4834. AddInstructionV(opVPMAXUB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 DE /r");
  4835. AddInstructionV(opVPMAXUB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 DE /r");
  4836. AddInstructionV(opVPMAXUD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 3F /r");
  4837. AddInstructionV(opVPMAXUD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 3F /r");
  4838. AddInstructionV(opVPMAXUW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 3E /r");
  4839. AddInstructionV(opVPMAXUW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 3E /r");
  4840. AddInstructionV(opVPMINSB,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 38 /r");
  4841. AddInstructionV(opVPMINSB,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 38 /r");
  4842. AddInstructionV(opVPMINSD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 39 /r");
  4843. AddInstructionV(opVPMINSD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 39 /r");
  4844. AddInstructionV(opVPMINSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 EA /r");
  4845. AddInstructionV(opVPMINSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 EA /r");
  4846. AddInstructionV(opVPMINUB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 DA /r");
  4847. AddInstructionV(opVPMINUB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 DA /r");
  4848. AddInstructionV(opVPMINUD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 3B /r");
  4849. AddInstructionV(opVPMINUD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 3B /r");
  4850. AddInstructionV(opVPMINUW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 3A /r");
  4851. AddInstructionV(opVPMINUW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 3A /r");
  4852. AddInstructionV(opVPMOVSXBD,"xmm1,xmm2/mem32","C4 RXB.02 X.1111.0.01 21 /r");
  4853. AddInstructionV(opVPMOVSXBD,"ymm1,xmm2/mem64","C4 RXB.02 X.1111.1.01 21 /r");
  4854. AddInstructionV(opVPMOVSXBQ,"xmm1,xmm2/mem16","C4 RXB.02 X.1111.0.01 22 /r");
  4855. AddInstructionV(opVPMOVSXBQ,"ymm1,xmm2/mem32","C4 RXB.02 X.1111.1.01 22 /r");
  4856. AddInstructionV(opVPMOVSXBW,"xmm1,xmm2/mem64","C4 RXB.02 X.1111.0.01 20 /r");
  4857. AddInstructionV(opVPMOVSXBW,"ymm1,xmm2/mem128","C4 RXB.02 X.1111.1.01 20 /r");
  4858. AddInstructionV(opVPMOVSXDQ,"xmm1,xmm2/mem64","C4 RXB.02 X.1111.0.01 25 /r");
  4859. AddInstructionV(opVPMOVSXDQ,"ymm1,xmm2/mem128","C4 RXB.02 X.1111.1.01 25 /r");
  4860. AddInstructionV(opVPMOVSXWD,"xmm1,xmm2/mem64","C4 RXB.02 X.1111.0.01 23 /r");
  4861. AddInstructionV(opVPMOVSXWD,"ymm1,xmm2/mem128","C4 RXB.02 X.1111.1.01 23 /r");
  4862. AddInstructionV(opVPMOVSXWQ,"xmm1,xmm2/mem32","C4 RXB.02 X.1111.0.01 24 /r");
  4863. AddInstructionV(opVPMOVSXWQ,"ymm1,xmm2/mem64","C4 RXB.02 X.1111.1.01 24 /r");
  4864. AddInstructionV(opVPMOVZXBD,"xmm1,xmm2/mem32","C4 RXB.02 X.1111.0.01 31 /r");
  4865. AddInstructionV(opVPMOVZXBD,"ymm1,xmm2/mem64","C4 RXB.02 X.1111.1.01 31 /r");
  4866. AddInstructionV(opVPMOVZXBQ,"xmm1,xmm2/mem16","C4 RXB.02 X.1111.0.01 32 /r");
  4867. AddInstructionV(opVPMOVZXBQ,"ymm1,xmm2/mem32","C4 RXB.02 X.1111.1.01 32 /r");
  4868. AddInstructionV(opVPMOVZXBW,"xmm1,xmm2/mem64","C4 RXB.02 X.1111.0.01 30 /r");
  4869. AddInstructionV(opVPMOVZXBW,"ymm1,xmm2/mem128","C4 RXB.02 X.1111.1.01 30 /r");
  4870. AddInstructionV(opVPMOVZXDQ,"xmm1,xmm2/mem64","C4 RXB.02 X.1111.0.01 35 /r");
  4871. AddInstructionV(opVPMOVZXDQ,"ymm1,xmm2/mem128","C4 RXB.02 X.1111.1.01 35 /r");
  4872. AddInstructionV(opVPMOVZXWD,"xmm1,xmm2/mem64","C4 RXB.02 X.1111.0.01 33 /r");
  4873. AddInstructionV(opVPMOVZXWD,"ymm1,xmm2/mem128","C4 RXB.02 X.1111.1.01 33 /r");
  4874. AddInstructionV(opVPMOVZXWQ,"xmm1,xmm2/mem32","C4 RXB.02 X.1111.0.01 34 /r");
  4875. AddInstructionV(opVPMOVZXWQ,"ymm1,xmm2/mem64","C4 RXB.02 X.1111.1.01 34 /r");
  4876. AddInstructionV(opVPMULDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 28 /r");
  4877. AddInstructionV(opVPMULDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 28 /r");
  4878. AddInstructionV(opVPMULHRSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.2 X.src1.0.01 0B /r");
  4879. AddInstructionV(opVPMULHRSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.2 X.src1.1.01 0B /r");
  4880. AddInstructionV(opVPMULHUW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E4 /r");
  4881. AddInstructionV(opVPMULHUW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 E4 /r");
  4882. AddInstructionV(opVPMULHW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E5 /r");
  4883. AddInstructionV(opVPMULHW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 E5 /r");
  4884. AddInstructionV(opVPMULLD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 40 /r");
  4885. AddInstructionV(opVPMULLD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 40 /r");
  4886. AddInstructionV(opVPMULLW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 D5 /r");
  4887. AddInstructionV(opVPMULLW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 D5 /r");
  4888. AddInstructionV(opVPMULUDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F4 /r");
  4889. AddInstructionV(opVPMULUDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 F4 /r");
  4890. AddInstructionV(opVPOR,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 EB /r");
  4891. AddInstructionV(opVPOR,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 EB /r");
  4892. AddInstructionV(opVPPERM,"xmm1,xmm2,xmm3/mem128,xmm4","8F RXB.08 0.src1.0.00 A3 /r ib");
  4893. AddInstructionV(opVPPERM,"xmm1,xmm2,xmm3,xmm4/mem128","8F RXB.08 1.src1.0.00 A3 /r ib");
  4894. AddInstructionV(opVPROTB,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 90 /r");
  4895. AddInstructionV(opVPROTB,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 90 /r");
  4896. AddInstructionV(opVPROTB,"xmm1,xmm2/mem128,imm8","8F RXB.08 0.1111.0.00 C0 /r ib");
  4897. AddInstructionV(opVPROTD,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 92 /r");
  4898. AddInstructionV(opVPROTD,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 92 /r");
  4899. AddInstructionV(opVPROTD,"xmm1,xmm2/mem128,imm8","8F RXB.08 0.1111.0.00 C2 /r ib");
  4900. AddInstructionV(opVPROTQ,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 93 /r");
  4901. AddInstructionV(opVPROTQ,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 93 /r");
  4902. AddInstructionV(opVPROTQ,"xmm1,xmm2/mem128,imm8","8F RXB.08 0.1111.0.00 C3 /r ib");
  4903. AddInstructionV(opVPROTW,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 91 /r");
  4904. AddInstructionV(opVPROTW,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 91 /r");
  4905. AddInstructionV(opVPROTW,"xmm1,xmm2/mem128,imm8","8F RXB.08 0.1111.0.00 C1 /r ib");
  4906. AddInstructionV(opVPSADBW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F6 /r");
  4907. AddInstructionV(opVPSADBW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 F6 /r");
  4908. AddInstructionV(opVPSHAB,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 98 /r");
  4909. AddInstructionV(opVPSHAB,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 98 /r");
  4910. AddInstructionV(opVPSHAD,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 9A /r");
  4911. AddInstructionV(opVPSHAD,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 9A /r");
  4912. AddInstructionV(opVPSHAQ,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 9B /r");
  4913. AddInstructionV(opVPSHAQ,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 9B /r");
  4914. AddInstructionV(opVPSHAW,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 99 /r");
  4915. AddInstructionV(opVPSHAW,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 99 /r");
  4916. AddInstructionV(opVPSHLB,"xmm1,xmm2/mem128,xmm3","8F RXB.09 0.count.0.00 94 /r");
  4917. AddInstructionV(opVPSHLB,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 94 /r");
  4918. AddInstructionV(opVPSHLD,"xmm1,xmm3/mem128,xmm2","8F RXB.09 0.count.0.00 96 /r");
  4919. AddInstructionV(opVPSHLD,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 96 /r");
  4920. AddInstructionV(opVPSHLQ,"xmm1,xmm3/mem128,xmm2","8F RXB.09 0.count.0.00 97 /r");
  4921. AddInstructionV(opVPSHLQ,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 97 /r");
  4922. AddInstructionV(opVPSHLW,"xmm1,xmm3/mem128,xmm2","8F RXB.09 0.count.0.00 95 /r");
  4923. AddInstructionV(opVPSHLW,"xmm1,xmm2,xmm3/mem128","8F RXB.09 1.src.0.00 95 /r");
  4924. AddInstructionV(opVPSHUFB,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 00 /r");
  4925. AddInstructionV(opVPSHUFB,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 00 /r");
  4926. AddInstructionV(opVPSHUFD,"xmm1,xmm2/mem128,imm8","C4 RXB.01 X.1111.0.01 70 /r ib");
  4927. AddInstructionV(opVPSHUFD,"ymm1,ymm2/mem256,imm8","C4 RXB.01 X.1111.1.01 70 /r ib");
  4928. AddInstructionV(opVPSHUFHW,"xmm1,xmm2/mem128,imm8","C4 RXB.01 X.1111.0.10 70 /r ib");
  4929. AddInstructionV(opVPSHUFHW,"ymm1,ymm2/mem256,imm8","C4 RXB.01 X.1111.1.10 70 /r ib");
  4930. AddInstructionV(opVPSHUFLW,"xmm1,xmm2/mem128,imm8","C4 RXB.01 X.1111.0.11 70 /r ib");
  4931. AddInstructionV(opVPSHUFLW,"ymm1,ymm2/mem256,imm8","C4 RXB.01 X.1111.1.11 70 /r ib");
  4932. AddInstructionV(opVPSIGNB,"xmm1,xmm2,xmm2/mem128","C4 RXB.02 X.src1.0.01 08 /r");
  4933. AddInstructionV(opVPSIGNB,"ymm1,ymm2,ymm2/mem256","C4 RXB.02 X.src1.1.01 08 /r");
  4934. AddInstructionV(opVPSIGND,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 0A /r");
  4935. AddInstructionV(opVPSIGND,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 0A /r");
  4936. AddInstructionV(opVPSIGNW,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 X.src1.0.01 09 /r");
  4937. AddInstructionV(opVPSIGNW,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 X.src1.1.01 09 /r");
  4938. AddInstructionV(opVPSLLD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F2 /r");
  4939. AddInstructionV(opVPSLLD,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 72 /6 ib");
  4940. AddInstructionV(opVPSLLD,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 F2 /r");
  4941. AddInstructionV(opVPSLLD,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 72 /6 ib");
  4942. AddInstructionV(opVPSLLDQ,"xmm1,xmm2,imm8","C4 RXB.01 0.dest.0.01 73 /7 ib");
  4943. AddInstructionV(opVPSLLDQ,"ymm1,ymm2,imm8","C4 RXB.01 0.dest.1.01 73 /7 ib");
  4944. AddInstructionV(opVPSLLQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F3 /r");
  4945. AddInstructionV(opVPSLLQ,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 73 /6 ib");
  4946. AddInstructionV(opVPSLLQ,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 F3 /r");
  4947. AddInstructionV(opVPSLLQ,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 73 /6 ib");
  4948. AddInstructionV(opVPSLLVD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src1.0.01 47 /r");
  4949. AddInstructionV(opVPSLLVD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 47 /r");
  4950. AddInstructionV(opVPSLLVQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src1.0.01 47 /r");
  4951. AddInstructionV(opVPSLLVQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src1.1.01 47 /r");
  4952. AddInstructionV(opVPSLLW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F1 /r");
  4953. AddInstructionV(opVPSLLW,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 71 /6 ib");
  4954. AddInstructionV(opVPSLLW,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 F1 /r");
  4955. AddInstructionV(opVPSLLW,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 71 /6 ib");
  4956. AddInstructionV(opVPSRAD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E2 /r");
  4957. AddInstructionV(opVPSRAD,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 72 /4 ib");
  4958. AddInstructionV(opVPSRAD,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 E2 /r");
  4959. AddInstructionV(opVPSRAD,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 72 /4 ib");
  4960. AddInstructionV(opVPSRAVD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src1.0.01 46 /r");
  4961. AddInstructionV(opVPSRAVD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 46 /r");
  4962. AddInstructionV(opVPSRAW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E1 /r");
  4963. AddInstructionV(opVPSRAW,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 71 /4 ib");
  4964. AddInstructionV(opVPSRAW,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 E1 /r");
  4965. AddInstructionV(opVPSRAW,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 71 /4 ib");
  4966. AddInstructionV(opVPSRLD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 D2 /r");
  4967. AddInstructionV(opVPSRLD,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 72 /2 ib");
  4968. AddInstructionV(opVPSRLD,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 D2 /r");
  4969. AddInstructionV(opVPSRLD,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 72 /2 ib");
  4970. AddInstructionV(opVPSRLDQ,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 73 /3 ib");
  4971. AddInstructionV(opVPSRLDQ,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 73 /3 ib");
  4972. AddInstructionV(opVPSRLQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 D3 /r");
  4973. AddInstructionV(opVPSRLQ,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 73 /2 ib");
  4974. AddInstructionV(opVPSRLQ,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 D3 /r");
  4975. AddInstructionV(opVPSRLQ,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 73 /2 ib");
  4976. AddInstructionV(opVPSRLVD,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 0.src1.0.01 45 /r");
  4977. AddInstructionV(opVPSRLVD,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 0.src1.1.01 45 /r");
  4978. AddInstructionV(opVPSRLVQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.02 1.src1.0.01 45 /r");
  4979. AddInstructionV(opVPSRLVQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.02 1.src1.1.01 45 /r");
  4980. AddInstructionV(opVPSRLW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 D1 /r");
  4981. AddInstructionV(opVPSRLW,"xmm1,xmm2,imm8","C4 RXB.01 X.dest.0.01 71 /2 ib");
  4982. AddInstructionV(opVPSRLW,"ymm1,ymm2,xmm3/mem128","C4 RXB.01 X.src1.1.01 D1 /r");
  4983. AddInstructionV(opVPSRLW,"ymm1,ymm2,imm8","C4 RXB.01 X.dest.1.01 71 /2 ib");
  4984. AddInstructionV(opVPSUBB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F8 /r");
  4985. AddInstructionV(opVPSUBB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 F8 /r");
  4986. AddInstructionV(opVPSUBD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 FA /r");
  4987. AddInstructionV(opVPSUBD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 FA /r");
  4988. AddInstructionV(opVPSUBQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 FB /r");
  4989. AddInstructionV(opVPSUBQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 FB /r");
  4990. AddInstructionV(opVPSUBSB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E8 /r");
  4991. AddInstructionV(opVPSUBSB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 E8 /r");
  4992. AddInstructionV(opVPSUBSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 E9 /r");
  4993. AddInstructionV(opVPSUBSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 E9 /r");
  4994. AddInstructionV(opVPSUBUSB,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 D8 /r");
  4995. AddInstructionV(opVPSUBUSB,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 D8 /r");
  4996. AddInstructionV(opVPSUBUSW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 D9 /r");
  4997. AddInstructionV(opVPSUBUSW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 D9 /r");
  4998. AddInstructionV(opVPSUBW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 F9 /r");
  4999. AddInstructionV(opVPSUBW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 F9 /r");
  5000. AddInstructionV(opVPTEST,"xmm1,xmm2/mem128","C4 RXB.00010 X.1111.0.01 17 /r");
  5001. AddInstructionV(opVPTEST,"ymm1,ymm2/mem256","C4 RXB.00010 X.1111.1.01 17 /r");
  5002. AddInstructionV(opVPUNPCKHBW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 68 /r");
  5003. AddInstructionV(opVPUNPCKHBW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 68 /r");
  5004. AddInstructionV(opVPUNPCKHDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 6A /r");
  5005. AddInstructionV(opVPUNPCKHDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 6A /r");
  5006. AddInstructionV(opVPUNPCKHQDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 6D /r");
  5007. AddInstructionV(opVPUNPCKHQDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 6D /r");
  5008. AddInstructionV(opVPUNPCKHWD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 69 /r");
  5009. AddInstructionV(opVPUNPCKHWD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 69 /r");
  5010. AddInstructionV(opVPUNPCKLBW,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 60 /r");
  5011. AddInstructionV(opVPUNPCKLBW,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 60 /r");
  5012. AddInstructionV(opVPUNPCKLDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 62 /r");
  5013. AddInstructionV(opVPUNPCKLDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 62 /r");
  5014. AddInstructionV(opVPUNPCKLQDQ,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 6C /r");
  5015. AddInstructionV(opVPUNPCKLQDQ,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 6C /r");
  5016. AddInstructionV(opVPUNPCKLWD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 61 /r");
  5017. AddInstructionV(opVPUNPCKLWD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 61 /r");
  5018. AddInstructionV(opVPXOR,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 EF /r");
  5019. AddInstructionV(opVPXOR,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 EF /r");
  5020. AddInstructionV(opVRCPPS,"xmm1,xmm2/mem128","C4 RXB.01 X.1111.0.00 53 /r");
  5021. AddInstructionV(opVRCPPS,"ymm1,ymm2/mem256","C4 RXB.01 X.1111.1.00 53 /r");
  5022. AddInstructionV(opVRCPSS,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.X.10 53 /r");
  5023. AddInstructionV(opVROUNDPD,"xmm1,xmm2/mem128,imm8","C4 RXB.03 X.1111.0.01 09 /r ib");
  5024. AddInstructionV(opVROUNDPD,"ymm1,ymm2/mem256,imm8","C4 RXB.03 X.1111.1.01 09 /r ib");
  5025. AddInstructionV(opVROUNDPS,"xmm1,xmm2/mem128,imm8","C4 RXB.03 X.1111.0.01 08 /r ib");
  5026. AddInstructionV(opVROUNDPS,"ymm1,ymm2/mem256,imm8","C4 RXB.03 X.1111.1.01 08 /r ib");
  5027. AddInstructionV(opVROUNDSD,"xmm1,xmm2,xmm3/mem64,imm8","C4 RXB.03 X.src1.X.01 0B /r ib");
  5028. AddInstructionV(opVROUNDSS,"xmm1,xmm2,xmm3/mem32,imm8","C4 RXB.03 X.src1.X.01 0A /r ib");
  5029. AddInstructionV(opVRSQRTPS,"xmm1,xmm2/mem128","C4 RXB.01 X.1111.0.00 52 /r");
  5030. AddInstructionV(opVRSQRTPS,"ymm1,ymm2/mem256","C4 RXB.01 X.1111.1.00 52 /r");
  5031. AddInstructionV(opVRSQRTSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.01 X.src1.X.10 52 /r");
  5032. AddInstructionV(opVSHUFPD,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.01 X.src1.0.01 C6 /r ib");
  5033. AddInstructionV(opVSHUFPD,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.01 X.src1.1.01 C6 /r ib");
  5034. AddInstructionV(opVSHUFPS,"xmm1,xmm2,xmm3/mem128,imm8","C4 RXB.01 X.src1.0.00 C6 /r ib");
  5035. AddInstructionV(opVSHUFPS,"ymm1,ymm2,ymm3/mem256,imm8","C4 RXB.01 X.src1.1.00 C6 /r ib");
  5036. AddInstructionV(opVSQRTPD,"xmm1,xmm2/mem128","C4 RXB.01 X.1111.0.01 51 /r");
  5037. AddInstructionV(opVSQRTPD,"ymm1,ymm2/mem256","C4 RXB.01 X.1111.1.01 51 /r");
  5038. AddInstructionV(opVSQRTPS,"xmm1,xmm2/mem128","C4 RXB.01 X.1111.0.00 51 /r");
  5039. AddInstructionV(opVSQRTPS,"ymm1,ymm2/mem256","C4 RXB.01 X.1111.1.00 51 /r");
  5040. AddInstructionV(opVSQRTSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.01 X.src1.X.11 51 /r");
  5041. AddInstructionV(opVSQRTSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.01 X.src1.X.10 51 /r");
  5042. AddInstructionV(opVSTMXCSR,"mem32","C4 RXB.01 X.1111.0.00 AE /3");
  5043. AddInstructionV(opVSUBPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 5C /r");
  5044. AddInstructionV(opVSUBPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 5C /r");
  5045. AddInstructionV(opVSUBPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.00001 X.src.0.00 5C /r");
  5046. AddInstructionV(opVSUBPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.00001 X.src.1.00 5C /r");
  5047. AddInstructionV(opVSUBSD,"xmm1,xmm2,xmm3/mem64","C4 RXB.01 X.src1.X.11 5C /r");
  5048. AddInstructionV(opVSUBSS,"xmm1,xmm2,xmm3/mem32","C4 RXB.01 X.src1.X.10 5C /r");
  5049. AddInstructionV(opVTESTPD,"xmm1,xmm2/mem128","C4 RXB.02 0.1111.0.01 0F /r");
  5050. AddInstructionV(opVTESTPD,"ymm1,ymm2/mem256","C4 RXB.02 0.1111.1.01 0F /r");
  5051. AddInstructionV(opVTESTPS,"xmm1,xmm2/mem128","C4 RXB.02 0.1111.0.01 0E /r");
  5052. AddInstructionV(opVTESTPS,"ymm1,ymm2/mem256","C4 RXB.02 0.1111.1.01 0E /r");
  5053. AddInstructionV(opVUCOMISD,"xmm1,xmm2/mem64","C4 RXB.00001 X.1111.X.01 2E /r");
  5054. AddInstructionV(opVUCOMISS,"xmm1,xmm2/mem32","C4 RXB.01 X.1111.X.00 2E /r");
  5055. AddInstructionV(opVUNPCKHPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 15 /r");
  5056. AddInstructionV(opVUNPCKHPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 15 /r");
  5057. AddInstructionV(opVUNPCKHPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.00 15 /r");
  5058. AddInstructionV(opVUNPCKHPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.00 15 /r");
  5059. AddInstructionV(opVUNPCKLPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 14 /r");
  5060. AddInstructionV(opVUNPCKLPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 14 /r");
  5061. AddInstructionV(opVUNPCKLPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.00 14 /r");
  5062. AddInstructionV(opVUNPCKLPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.00 14 /r");
  5063. AddInstructionV(opVXORPD,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.01 57 /r");
  5064. AddInstructionV(opVXORPD,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.01 57 /r");
  5065. AddInstructionV(opVXORPS,"xmm1,xmm2,xmm3/mem128","C4 RXB.01 X.src1.0.00 57 /r");
  5066. AddInstructionV(opVXORPS,"ymm1,ymm2,ymm3/mem256","C4 RXB.01 X.src1.1.00 57 /r");
  5067. AddInstructionV(opVZEROALL,"","C4 RXB.01 X.1111.1.00 77");
  5068. AddInstructionV(opVZEROUPPER,"","C4 RXB.01 X.1111.0.00 77");
  5069. END InitInstructions;
  5070. PROCEDURE IsImmediate8*(operandType: OperandType): BOOLEAN;
  5071. BEGIN RETURN (operandType = imm8) OR (operandType = simm8) OR (operandType = uimm8)
  5072. END IsImmediate8;
  5073. PROCEDURE IsImmediate16*(operandType: OperandType): BOOLEAN;
  5074. BEGIN RETURN (operandType = imm16) OR (operandType = simm16) OR (operandType = uimm16)
  5075. END IsImmediate16;
  5076. PROCEDURE IsImmediate32*(operandType: OperandType): BOOLEAN;
  5077. BEGIN RETURN (operandType = imm32) OR (operandType = simm32) OR (operandType = uimm32)
  5078. END IsImmediate32;
  5079. PROCEDURE IsImmediate64*(operandType: OperandType): BOOLEAN;
  5080. BEGIN RETURN (operandType = imm64)
  5081. END IsImmediate64;
  5082. (** setup register tables **)
  5083. PROCEDURE InitRegisters;
  5084. (* insert an new register *)
  5085. PROCEDURE AddRegister (number: LONGINT; CONST name: ARRAY OF CHAR; type: OperandType; sizeInBytes: SHORTINT; index: SHORTINT);
  5086. BEGIN
  5087. COPY (name, registers[number].name);
  5088. registers[number].type := type;
  5089. registers[number].index := index;
  5090. registers[number].sizeInBytes := sizeInBytes;
  5091. registersByClass[type,index] := number;
  5092. END AddRegister;
  5093. PROCEDURE InitRegisters;
  5094. VAR i,j: LONGINT;
  5095. BEGIN
  5096. FOR i := 0 TO LEN(registersByClass)-1 DO
  5097. FOR j := 0 TO LEN(registersByClass[i])-1 DO
  5098. registersByClass[i,j] := none;
  5099. END;
  5100. END;
  5101. END InitRegisters;
  5102. BEGIN
  5103. InitRegisters;
  5104. AddRegister (regAL,"AL", reg8, bits8, 0);
  5105. AddRegister (regCL,"CL", reg8, bits8,1);
  5106. AddRegister (regDL,"DL", reg8, bits8,2);
  5107. AddRegister (regBL,"BL", reg8, bits8,3);
  5108. AddRegister (regAH,"AH", reg8, bits8,4);
  5109. AddRegister (regCH,"CH", reg8, bits8,5);
  5110. AddRegister (regDH,"DH", reg8, bits8,6);
  5111. AddRegister (regBH,"BH", reg8, bits8,7);
  5112. AddRegister (regSPL,"SPL", reg8, bits8, 4);
  5113. AddRegister (regBPL,"BPL", reg8, bits8,5);
  5114. AddRegister (regSIL,"SIL", reg8, bits8,6);
  5115. AddRegister (regDIL,"DIL", reg8, bits8,7);
  5116. AddRegister (regR8B,"R8B", reg8, bits8,8);
  5117. AddRegister (regR9B,"R9B", reg8, bits8,9);
  5118. AddRegister (regR10B,"R10B", reg8, bits8,10);
  5119. AddRegister (regR11B,"R11B", reg8, bits8,11);
  5120. AddRegister (regR12B,"R12B", reg8, bits8,12);
  5121. AddRegister (regR13B,"R13B", reg8, bits8,13);
  5122. AddRegister (regR14B,"R14B", reg8, bits8,14);
  5123. AddRegister (regR15B,"R15B", reg8, bits8,15);
  5124. AddRegister (regAX,"AX", reg16, bits16, 0);
  5125. AddRegister (regCX,"CX", reg16, bits16, 1);
  5126. AddRegister (regDX,"DX", reg16, bits16, 2);
  5127. AddRegister (regBX,"BX", reg16, bits16, 3);
  5128. AddRegister (regSP,"SP", reg16, bits16, 4);
  5129. AddRegister (regBP,"BP", reg16, bits16, 5);
  5130. AddRegister (regSI,"SI", reg16, bits16, 6);
  5131. AddRegister (regDI,"DI", reg16, bits16, 7);
  5132. AddRegister (regR8W,"R8W", reg16, bits16, 8);
  5133. AddRegister (regR9W,"R9W", reg16, bits16, 9);
  5134. AddRegister (regR10W,"R10W", reg16, bits16, 10);
  5135. AddRegister (regR11W,"R11W", reg16, bits16, 11);
  5136. AddRegister (regR12W,"R12W", reg16, bits16, 12);
  5137. AddRegister (regR13W,"R13W", reg16, bits16, 13);
  5138. AddRegister (regR14W,"R14W", reg16, bits16, 14);
  5139. AddRegister (regR15W,"R15W", reg16, bits16, 15);
  5140. AddRegister (regEAX,"EAX", reg32, bits32, 0);
  5141. AddRegister (regECX,"ECX", reg32, bits32, 1);
  5142. AddRegister (regEDX,"EDX", reg32, bits32, 2);
  5143. AddRegister (regEBX,"EBX", reg32, bits32, 3);
  5144. AddRegister (regESP,"ESP", reg32, bits32, 4);
  5145. AddRegister (regEBP,"EBP", reg32, bits32, 5);
  5146. AddRegister (regESI,"ESI", reg32, bits32, 6);
  5147. AddRegister (regEDI,"EDI", reg32, bits32, 7);
  5148. AddRegister (regR8D,"R8D", reg32, bits32, 8);
  5149. AddRegister (regR9D,"R9D", reg32, bits32, 9);
  5150. AddRegister (regR10D,"R10D", reg32, bits32, 10);
  5151. AddRegister (regR11D,"R11D", reg32, bits32, 11);
  5152. AddRegister (regR12D,"R12D", reg32, bits32, 12);
  5153. AddRegister (regR13D,"R13D", reg32, bits32, 13);
  5154. AddRegister (regR14D,"R14D", reg32, bits32, 14);
  5155. AddRegister (regR15D,"R15D", reg32, bits32, 15);
  5156. AddRegister (regRAX,"RAX", reg64, bits64, 0);
  5157. AddRegister (regRCX,"RCX", reg64, bits64, 1);
  5158. AddRegister (regRDX,"RDX", reg64, bits64, 2);
  5159. AddRegister (regRBX,"RBX", reg64, bits64, 3);
  5160. AddRegister (regRSP,"RSP", reg64, bits64, 4);
  5161. AddRegister (regRBP,"RBP", reg64, bits64, 5);
  5162. AddRegister (regRSI, "RSI", reg64,bits64, 6);
  5163. AddRegister (regRDI,"RDI", reg64, bits64, 7);
  5164. AddRegister (regR8,"R8", reg64, bits64, 8);
  5165. AddRegister (regR9,"R9", reg64, bits64, 9);
  5166. AddRegister (regR10,"R10", reg64, bits64, 10);
  5167. AddRegister (regR11,"R11", reg64, bits64, 11);
  5168. AddRegister (regR12,"R12", reg64, bits64, 12);
  5169. AddRegister (regR13,"R13", reg64, bits64, 13);
  5170. AddRegister (regR14,"R14", reg64, bits64, 14);
  5171. AddRegister (regR15,"R15", reg64, bits64, 15);
  5172. AddRegister (regRIP,"RIP", reg64, bits64, 16);
  5173. AddRegister (regES,"ES", segReg, bitsDefault, 0);
  5174. AddRegister (regCS,"CS", segReg, bitsDefault, 1);
  5175. AddRegister (regSS,"SS", segReg, bitsDefault, 2);
  5176. AddRegister (regDS,"DS", segReg, bitsDefault, 3);
  5177. AddRegister (regFS,"FS", segReg, bitsDefault, 4);
  5178. AddRegister (regGS,"GS", segReg, bitsDefault, 5);
  5179. AddRegister (regCR0,"CR0", CRn, bitsDefault, 0);
  5180. AddRegister (regCR1,"CR1", CRn, bitsDefault, 1);
  5181. AddRegister (regCR2,"CR2", CRn, bitsDefault, 2);
  5182. AddRegister (regCR3,"CR3", CRn, bitsDefault, 3);
  5183. AddRegister (regCR4,"CR4", CRn, bitsDefault, 4);
  5184. AddRegister (regCR5,"CR5", CRn, bitsDefault, 5);
  5185. AddRegister (regCR6,"CR6", CRn, bitsDefault, 6);
  5186. AddRegister (regCR7,"CR7", CRn, bitsDefault, 7);
  5187. AddRegister (regCR8,"CR8", CRn, bitsDefault, 8);
  5188. AddRegister (regCR9,"CR9", CRn, bitsDefault, 9);
  5189. AddRegister (regCR10,"CR10", CRn, bitsDefault, 10);
  5190. AddRegister (regCR11,"CR11", CRn, bitsDefault, 11);
  5191. AddRegister (regCR12,"CR12", CRn, bitsDefault, 12);
  5192. AddRegister (regCR13,"CR13", CRn, bitsDefault, 13);
  5193. AddRegister (regCR14,"CR14", CRn, bitsDefault, 14);
  5194. AddRegister (regCR15,"CR15", CRn, bitsDefault, 15);
  5195. AddRegister (regDR0,"DR0", DRn, bitsDefault, 0);
  5196. AddRegister (regDR1,"DR1", DRn, bitsDefault, 1);
  5197. AddRegister (regDR2,"DR2", DRn, bitsDefault, 2);
  5198. AddRegister (regDR3,"DR3", DRn, bitsDefault, 3);
  5199. AddRegister (regDR4,"DR4", DRn, bitsDefault, 4);
  5200. AddRegister (regDR5,"DR5", DRn, bitsDefault, 5);
  5201. AddRegister (regDR6,"DR6", DRn, bitsDefault, 6);
  5202. AddRegister (regDR7,"DR7", DRn, bitsDefault, 7);
  5203. AddRegister (regDR8,"DR8", DRn, bitsDefault, 8);
  5204. AddRegister (regDR9,"DR9", DRn, bitsDefault, 9);
  5205. AddRegister (regDR10,"DR10", DRn, bitsDefault, 10);
  5206. AddRegister (regDR11,"DR11", DRn, bitsDefault, 11);
  5207. AddRegister (regDR12,"DR12", DRn, bitsDefault, 12);
  5208. AddRegister (regDR13,"DR13", DRn, bitsDefault, 13);
  5209. AddRegister (regDR14,"DR14", DRn, bitsDefault, 14);
  5210. AddRegister (regDR15,"DR15", DRn, bitsDefault, 15);
  5211. AddRegister (regST0,"ST0", sti, bitsDefault, 0);
  5212. AddRegister (regST1,"ST1", sti, bitsDefault, 1);
  5213. AddRegister (regST2,"ST2", sti, bitsDefault, 2);
  5214. AddRegister (regST3,"ST3", sti, bitsDefault, 3);
  5215. AddRegister (regST4,"ST4", sti, bitsDefault, 4);
  5216. AddRegister (regST5,"ST5", sti, bitsDefault, 5);
  5217. AddRegister (regST6,"ST6", sti, bitsDefault, 6);
  5218. AddRegister (regST7,"ST7", sti, bitsDefault, 7);
  5219. AddRegister (regXMM0,"XMM0", xmm, bits64, 0);
  5220. AddRegister (regXMM1,"XMM1", xmm, bits64, 1);
  5221. AddRegister (regXMM2,"XMM2", xmm, bits64, 2);
  5222. AddRegister (regXMM3,"XMM3", xmm, bits64, 3);
  5223. AddRegister (regXMM4,"XMM4", xmm, bits64, 4);
  5224. AddRegister (regXMM5,"XMM5", xmm, bits64, 5);
  5225. AddRegister (regXMM6,"XMM6", xmm, bits64, 6);
  5226. AddRegister (regXMM7,"XMM7", xmm, bits64, 7);
  5227. AddRegister (regXMM8,"XMM8", xmm, bits64, 8);
  5228. AddRegister (regXMM9,"XMM9", xmm, bits64, 9);
  5229. AddRegister (regXMM10,"XMM10", xmm, bits64, 10);
  5230. AddRegister (regXMM11,"XMM11", xmm, bits64, 11);
  5231. AddRegister (regXMM12,"XMM12", xmm, bits64, 12);
  5232. AddRegister (regXMM13,"XMM13", xmm, bits64, 13);
  5233. AddRegister (regXMM14,"XMM14", xmm, bits64, 14);
  5234. AddRegister (regXMM15,"XMM15", xmm, bits64, 15);
  5235. AddRegister (regYMM0,"YMM0", ymm, bits64, 0);
  5236. AddRegister (regYMM1,"YMM1", ymm, bits64, 1);
  5237. AddRegister (regYMM2,"YMM2", ymm, bits64, 2);
  5238. AddRegister (regYMM3,"YMM3", ymm, bits64, 3);
  5239. AddRegister (regYMM4,"YMM4", ymm, bits64, 4);
  5240. AddRegister (regYMM5,"YMM5", ymm, bits64, 5);
  5241. AddRegister (regYMM6,"YMM6", ymm, bits64, 6);
  5242. AddRegister (regYMM7,"YMM7", ymm, bits64, 7);
  5243. AddRegister (regYMM8,"YMM8", ymm, bits64, 8);
  5244. AddRegister (regYMM9,"YMM9", ymm, bits64, 9);
  5245. AddRegister (regYMM10,"YMM10", ymm, bits64, 10);
  5246. AddRegister (regYMM11,"YMM11", ymm, bits64, 11);
  5247. AddRegister (regYMM12,"YMM12", ymm, bits64, 12);
  5248. AddRegister (regYMM13,"YMM13", ymm, bits64, 13);
  5249. AddRegister (regYMM14,"YMM14", ymm, bits64, 14);
  5250. AddRegister (regYMM15,"YMM15", ymm, bits64, 15);
  5251. AddRegister (regMMX0,"MMX0", mmx, bits128, 0);
  5252. AddRegister (regMMX1,"MMX1", mmx, bits128, 1);
  5253. AddRegister (regMMX2,"MMX2", mmx, bits128, 2);
  5254. AddRegister (regMMX3,"MMX3", mmx, bits128, 3);
  5255. AddRegister (regMMX4,"MMX4", mmx, bits128, 4);
  5256. AddRegister (regMMX5,"MMX5", mmx, bits128, 5);
  5257. AddRegister (regMMX6,"MMX6", mmx, bits128, 6);
  5258. AddRegister (regMMX7,"MMX7", mmx, bits128, 7);
  5259. END InitRegisters;
  5260. (** setup CPU tables **)
  5261. PROCEDURE InitCPUs;
  5262. (* insert a new cpu type *)
  5263. PROCEDURE AddCpu (CONST name: ARRAY OF CHAR; cpuoptions: SET);
  5264. BEGIN
  5265. COPY (name, cpus[cpuCount].name);
  5266. cpus[cpuCount].cpuOptions := cpuoptions;
  5267. INC (cpuCount);
  5268. END AddCpu;
  5269. BEGIN
  5270. cpuCount := 0;
  5271. AddCpu ("8086", {cpu8086});
  5272. AddCpu ("186", {cpu8086, cpu186});
  5273. AddCpu ("286", {cpu8086 .. cpu286});
  5274. AddCpu ("386", {cpu8086 .. cpu386});
  5275. AddCpu ("I386", {cpu8086 .. cpu386});
  5276. AddCpu ("486", {cpu8086 .. cpu486});
  5277. AddCpu ("I486", {cpu8086 .. cpu486});
  5278. AddCpu ("586", {cpu8086 .. cpuPentium});
  5279. AddCpu ("PENTIUM", {cpu8086 .. cpuPentium});
  5280. AddCpu ("686", {cpu8086 .. cpuP6});
  5281. AddCpu ("PPRO", {cpu8086 .. cpuP6});
  5282. AddCpu ("PENTIUMPRO", {cpu8086 .. cpuP6});
  5283. AddCpu ("P2", {cpu8086 .. cpuP6});
  5284. AddCpu ("P3", {cpu8086 .. cpuKatmai});
  5285. AddCpu ("KATMAI", {cpu8086 .. cpuKatmai});
  5286. AddCpu ("P4", {cpu8086 .. cpuWillamette});
  5287. AddCpu ("WILLAMETTE", {cpu8086 .. cpuWillamette});
  5288. AddCpu ("PRESCOTT", {cpu8086 .. cpuPrescott});
  5289. AddCpu ("AMD64", {cpu8086 .. cpuAMD64, cpuSSE, cpuSSE2, cpuSSE3, cpu3DNow, cpuMMX});
  5290. AddCpu ("PRIVILEGED", {cpuPrivileged});
  5291. AddCpu ("PROTECTED", {cpuProtected});
  5292. AddCpu ("SSE", {cpuSSE});
  5293. AddCpu ("SSE2", {cpuSSE2,cpuSSE});
  5294. AddCpu ("SSE3", {cpuSSE3,cpuSSE2,cpuSSE});
  5295. AddCpu ("3DNOW", {cpu3DNow});
  5296. AddCpu ("MMX", {cpuMMX});
  5297. AddCpu ("FPU", {cpuFPU});
  5298. END InitCPUs;
  5299. PROCEDURE Trace*;
  5300. VAR instr,mnem: LONGINT; i: LONGINT;
  5301. BEGIN
  5302. FOR mnem := 0 TO numberMnemonics-1 DO
  5303. KernelLog.String(mnemonics[mnem].name); KernelLog.Ln;
  5304. FOR instr := mnemonics[mnem].firstInstruction TO mnemonics[mnem].lastInstruction DO
  5305. KernelLog.Int(instr,5);
  5306. KernelLog.String(" ");
  5307. FOR i := 0 TO maxCodeLength-1 DO
  5308. KernelLog.Hex(ORD(instructions[instr].code[i]),-2); KernelLog.String(" ");
  5309. END;
  5310. FOR i := 0 TO maxNumberOperands-1 DO
  5311. KernelLog.Int(instructions[instr].operands[i],1); KernelLog.String(" ");
  5312. END;
  5313. KernelLog.Ln;
  5314. END;
  5315. END;
  5316. END Trace;
  5317. BEGIN
  5318. InitInstructions;
  5319. InitRegisters;
  5320. InitCPUs;
  5321. END FoxAMD64InstructionSet.
  5322. FoxAMD64InstructionSet.Trace
  5323. System.Free FoxAMD64InstructionSet ~
  5324. (** Instruction Format, cf. [AMD:3], chapter 1
  5325. [LegacyPrefix] ; Operand-Size Override / modify opcode of media instructions
  5326. [LegacyPrefix] ; Address-Size Override
  5327. [LegacyPrefix] ; Segment Override
  5328. [LegacyPrefix] ; LOCK Prefix
  5329. [LegacyPrefix] ; Repeat Prefixes
  5330. [REXPrefix]; 7-4: 0100 3:W 2:R 1:X 0:B register modification (W) and extension bits (R-register X-index B-base)
  5331. Opcode
  5332. [Opcode]
  5333. [Opcode]
  5334. [ModRM]; 7:6:mod 5:3:reg 2:0:r/m (op code modifier, register, memory)
  5335. [SIB]; 7:6 scale 5:3:index 2:0:base (scale, index, base)
  5336. [Displacement]
  5337. [Displacement]
  5338. [Displacement]
  5339. [Displacement]
  5340. is a 64bit displacement possible ?
  5341. [Immediate]
  5342. [Immediate]
  5343. [Immediate]
  5344. [Immediate]
  5345. [Immediate]; only for MOV instruction
  5346. [Immediate]; only for MOV instruction
  5347. [Immediate]; only for MOV instruction
  5348. [Immediate]; only for MOV instruction
  5349. Instruction = RECORD
  5350. cpuoptions-: CnUOptions; (* necessary CPU options for the instruction to be available *)
  5351. prefixFlags-: SET;
  5352. numerLegacyPrefixes-: SHORTINT;
  5353. legacyPrefixes-: ARRAY MaxLegacyPrefixes OF CHAR; (* legacy prefixes *)
  5354. usedREXPrefix-:BOOLEAN;
  5355. REXPrefix-:CHAR; (* REX prefix *)
  5356. opcodeFlags-: SET;
  5357. numberOpcodes-: SHORTINT; (* 1..MaxOpCodes *)
  5358. opcode-: ARRAY MaxOpCodes OF CHAR;
  5359. usedModRM-: BOOLEAN;
  5360. ModRM: CHAR; (* mode-register-memory *)
  5361. usedSIB_: BOOLEAN;
  5362. SIB-: CHAR; (* scale-index-base *)
  5363. numberOperands-: SHORTINT; (* 0.. MaxOperands *)
  5364. operand-: ARRAY MaxOperands OF Operand;
  5365. END;
  5366. **)