FoxAMD64InstructionSet.Mod 251 KB

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