i386-dis.c 371 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727
  1. /* Print i386 instructions for GDB, the GNU debugger.
  2. Copyright (C) 1988-2017 Free Software Foundation, Inc.
  3. This file is part of the GNU opcodes library.
  4. This library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 3, or (at your option)
  7. any later version.
  8. It is distributed in the hope that it will be useful, but WITHOUT
  9. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
  11. License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
  15. MA 02110-1301, USA. */
  16. /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
  17. July 1988
  18. modified by John Hassey (hassey@dg-rtp.dg.com)
  19. x86-64 support added by Jan Hubicka (jh@suse.cz)
  20. VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
  21. /* The main tables describing the instructions is essentially a copy
  22. of the "Opcode Map" chapter (Appendix A) of the Intel 80386
  23. Programmers Manual. Usually, there is a capital letter, followed
  24. by a small letter. The capital letter tell the addressing mode,
  25. and the small letter tells about the operand size. Refer to
  26. the Intel manual for details. */
  27. #include "sysdep.h"
  28. #include "disassemble.h"
  29. #include "opintl.h"
  30. #include "opcode/i386.h"
  31. #include "libiberty.h"
  32. #include <setjmp.h>
  33. static int print_insn (bfd_vma, disassemble_info *);
  34. static void dofloat (int);
  35. static void OP_ST (int, int);
  36. static void OP_STi (int, int);
  37. static int putop (const char *, int);
  38. static void oappend (const char *);
  39. static void append_seg (void);
  40. static void OP_indirE (int, int);
  41. static void print_operand_value (char *, int, bfd_vma);
  42. static void OP_E_register (int, int);
  43. static void OP_E_memory (int, int);
  44. static void print_displacement (char *, bfd_vma);
  45. static void OP_E (int, int);
  46. static void OP_G (int, int);
  47. static bfd_vma get64 (void);
  48. static bfd_signed_vma get32 (void);
  49. static bfd_signed_vma get32s (void);
  50. static int get16 (void);
  51. static void set_op (bfd_vma, int);
  52. static void OP_Skip_MODRM (int, int);
  53. static void OP_REG (int, int);
  54. static void OP_IMREG (int, int);
  55. static void OP_I (int, int);
  56. static void OP_I64 (int, int);
  57. static void OP_sI (int, int);
  58. static void OP_J (int, int);
  59. static void OP_SEG (int, int);
  60. static void OP_DIR (int, int);
  61. static void OP_OFF (int, int);
  62. static void OP_OFF64 (int, int);
  63. static void ptr_reg (int, int);
  64. static void OP_ESreg (int, int);
  65. static void OP_DSreg (int, int);
  66. static void OP_C (int, int);
  67. static void OP_D (int, int);
  68. static void OP_T (int, int);
  69. static void OP_R (int, int);
  70. static void OP_MMX (int, int);
  71. static void OP_XMM (int, int);
  72. static void OP_EM (int, int);
  73. static void OP_EX (int, int);
  74. static void OP_EMC (int,int);
  75. static void OP_MXC (int,int);
  76. static void OP_MS (int, int);
  77. static void OP_XS (int, int);
  78. static void OP_M (int, int);
  79. static void OP_VEX (int, int);
  80. static void OP_EX_Vex (int, int);
  81. static void OP_EX_VexW (int, int);
  82. static void OP_EX_VexImmW (int, int);
  83. static void OP_XMM_Vex (int, int);
  84. static void OP_XMM_VexW (int, int);
  85. static void OP_Rounding (int, int);
  86. static void OP_REG_VexI4 (int, int);
  87. static void PCLMUL_Fixup (int, int);
  88. static void VEXI4_Fixup (int, int);
  89. static void VZERO_Fixup (int, int);
  90. static void VCMP_Fixup (int, int);
  91. static void VPCMP_Fixup (int, int);
  92. static void OP_0f07 (int, int);
  93. static void OP_Monitor (int, int);
  94. static void OP_Mwait (int, int);
  95. static void OP_Mwaitx (int, int);
  96. static void NOP_Fixup1 (int, int);
  97. static void NOP_Fixup2 (int, int);
  98. static void OP_3DNowSuffix (int, int);
  99. static void CMP_Fixup (int, int);
  100. static void BadOp (void);
  101. static void REP_Fixup (int, int);
  102. static void BND_Fixup (int, int);
  103. static void NOTRACK_Fixup (int, int);
  104. static void HLE_Fixup1 (int, int);
  105. static void HLE_Fixup2 (int, int);
  106. static void HLE_Fixup3 (int, int);
  107. static void CMPXCHG8B_Fixup (int, int);
  108. static void XMM_Fixup (int, int);
  109. static void CRC32_Fixup (int, int);
  110. static void FXSAVE_Fixup (int, int);
  111. static void PCMPESTR_Fixup (int, int);
  112. static void OP_LWPCB_E (int, int);
  113. static void OP_LWP_E (int, int);
  114. static void OP_Vex_2src_1 (int, int);
  115. static void OP_Vex_2src_2 (int, int);
  116. static void MOVBE_Fixup (int, int);
  117. static void OP_Mask (int, int);
  118. struct dis_private {
  119. /* Points to first byte not fetched. */
  120. bfd_byte *max_fetched;
  121. bfd_byte the_buffer[MAX_MNEM_SIZE];
  122. bfd_vma insn_start;
  123. int orig_sizeflag;
  124. OPCODES_SIGJMP_BUF bailout;
  125. };
  126. enum address_mode
  127. {
  128. mode_16bit,
  129. mode_32bit,
  130. mode_64bit
  131. };
  132. enum address_mode address_mode;
  133. /* Flags for the prefixes for the current instruction. See below. */
  134. static int prefixes;
  135. /* REX prefix the current instruction. See below. */
  136. static int rex;
  137. /* Bits of REX we've already used. */
  138. static int rex_used;
  139. /* REX bits in original REX prefix ignored. */
  140. static int rex_ignored;
  141. /* Mark parts used in the REX prefix. When we are testing for
  142. empty prefix (for 8bit register REX extension), just mask it
  143. out. Otherwise test for REX bit is excuse for existence of REX
  144. only in case value is nonzero. */
  145. #define USED_REX(value) \
  146. { \
  147. if (value) \
  148. { \
  149. if ((rex & value)) \
  150. rex_used |= (value) | REX_OPCODE; \
  151. } \
  152. else \
  153. rex_used |= REX_OPCODE; \
  154. }
  155. /* Flags for prefixes which we somehow handled when printing the
  156. current instruction. */
  157. static int used_prefixes;
  158. /* Flags stored in PREFIXES. */
  159. #define PREFIX_REPZ 1
  160. #define PREFIX_REPNZ 2
  161. #define PREFIX_LOCK 4
  162. #define PREFIX_CS 8
  163. #define PREFIX_SS 0x10
  164. #define PREFIX_DS 0x20
  165. #define PREFIX_ES 0x40
  166. #define PREFIX_FS 0x80
  167. #define PREFIX_GS 0x100
  168. #define PREFIX_DATA 0x200
  169. #define PREFIX_ADDR 0x400
  170. #define PREFIX_FWAIT 0x800
  171. /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
  172. to ADDR (exclusive) are valid. Returns 1 for success, longjmps
  173. on error. */
  174. #define FETCH_DATA(info, addr) \
  175. ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
  176. ? 1 : fetch_data ((info), (addr)))
  177. static int
  178. fetch_data (struct disassemble_info *info, bfd_byte *addr)
  179. {
  180. int status;
  181. struct dis_private *priv = (struct dis_private *) info->private_data;
  182. bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
  183. if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
  184. status = (*info->read_memory_func) (start,
  185. priv->max_fetched,
  186. addr - priv->max_fetched,
  187. info);
  188. else
  189. status = -1;
  190. if (status != 0)
  191. {
  192. /* If we did manage to read at least one byte, then
  193. print_insn_i386 will do something sensible. Otherwise, print
  194. an error. We do that here because this is where we know
  195. STATUS. */
  196. if (priv->max_fetched == priv->the_buffer)
  197. (*info->memory_error_func) (status, start, info);
  198. OPCODES_SIGLONGJMP (priv->bailout, 1);
  199. }
  200. else
  201. priv->max_fetched = addr;
  202. return 1;
  203. }
  204. /* Possible values for prefix requirement. */
  205. #define PREFIX_IGNORED_SHIFT 16
  206. #define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
  207. #define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
  208. #define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
  209. #define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
  210. #define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
  211. /* Opcode prefixes. */
  212. #define PREFIX_OPCODE (PREFIX_REPZ \
  213. | PREFIX_REPNZ \
  214. | PREFIX_DATA)
  215. /* Prefixes ignored. */
  216. #define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
  217. | PREFIX_IGNORED_REPNZ \
  218. | PREFIX_IGNORED_DATA)
  219. #define XX { NULL, 0 }
  220. #define Bad_Opcode NULL, { { NULL, 0 } }, 0
  221. #define Eb { OP_E, b_mode }
  222. #define Ebnd { OP_E, bnd_mode }
  223. #define EbS { OP_E, b_swap_mode }
  224. #define Ev { OP_E, v_mode }
  225. #define Ev_bnd { OP_E, v_bnd_mode }
  226. #define EvS { OP_E, v_swap_mode }
  227. #define Ed { OP_E, d_mode }
  228. #define Edq { OP_E, dq_mode }
  229. #define Edqw { OP_E, dqw_mode }
  230. #define Edqb { OP_E, dqb_mode }
  231. #define Edb { OP_E, db_mode }
  232. #define Edw { OP_E, dw_mode }
  233. #define Edqd { OP_E, dqd_mode }
  234. #define Eq { OP_E, q_mode }
  235. #define indirEv { OP_indirE, indir_v_mode }
  236. #define indirEp { OP_indirE, f_mode }
  237. #define stackEv { OP_E, stack_v_mode }
  238. #define Em { OP_E, m_mode }
  239. #define Ew { OP_E, w_mode }
  240. #define M { OP_M, 0 } /* lea, lgdt, etc. */
  241. #define Ma { OP_M, a_mode }
  242. #define Mb { OP_M, b_mode }
  243. #define Md { OP_M, d_mode }
  244. #define Mo { OP_M, o_mode }
  245. #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
  246. #define Mq { OP_M, q_mode }
  247. #define Mx { OP_M, x_mode }
  248. #define Mxmm { OP_M, xmm_mode }
  249. #define Gb { OP_G, b_mode }
  250. #define Gbnd { OP_G, bnd_mode }
  251. #define Gv { OP_G, v_mode }
  252. #define Gd { OP_G, d_mode }
  253. #define Gdq { OP_G, dq_mode }
  254. #define Gm { OP_G, m_mode }
  255. #define Gw { OP_G, w_mode }
  256. #define Rd { OP_R, d_mode }
  257. #define Rdq { OP_R, dq_mode }
  258. #define Rm { OP_R, m_mode }
  259. #define Ib { OP_I, b_mode }
  260. #define sIb { OP_sI, b_mode } /* sign extened byte */
  261. #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
  262. #define Iv { OP_I, v_mode }
  263. #define sIv { OP_sI, v_mode }
  264. #define Iq { OP_I, q_mode }
  265. #define Iv64 { OP_I64, v_mode }
  266. #define Iw { OP_I, w_mode }
  267. #define I1 { OP_I, const_1_mode }
  268. #define Jb { OP_J, b_mode }
  269. #define Jv { OP_J, v_mode }
  270. #define Cm { OP_C, m_mode }
  271. #define Dm { OP_D, m_mode }
  272. #define Td { OP_T, d_mode }
  273. #define Skip_MODRM { OP_Skip_MODRM, 0 }
  274. #define RMeAX { OP_REG, eAX_reg }
  275. #define RMeBX { OP_REG, eBX_reg }
  276. #define RMeCX { OP_REG, eCX_reg }
  277. #define RMeDX { OP_REG, eDX_reg }
  278. #define RMeSP { OP_REG, eSP_reg }
  279. #define RMeBP { OP_REG, eBP_reg }
  280. #define RMeSI { OP_REG, eSI_reg }
  281. #define RMeDI { OP_REG, eDI_reg }
  282. #define RMrAX { OP_REG, rAX_reg }
  283. #define RMrBX { OP_REG, rBX_reg }
  284. #define RMrCX { OP_REG, rCX_reg }
  285. #define RMrDX { OP_REG, rDX_reg }
  286. #define RMrSP { OP_REG, rSP_reg }
  287. #define RMrBP { OP_REG, rBP_reg }
  288. #define RMrSI { OP_REG, rSI_reg }
  289. #define RMrDI { OP_REG, rDI_reg }
  290. #define RMAL { OP_REG, al_reg }
  291. #define RMCL { OP_REG, cl_reg }
  292. #define RMDL { OP_REG, dl_reg }
  293. #define RMBL { OP_REG, bl_reg }
  294. #define RMAH { OP_REG, ah_reg }
  295. #define RMCH { OP_REG, ch_reg }
  296. #define RMDH { OP_REG, dh_reg }
  297. #define RMBH { OP_REG, bh_reg }
  298. #define RMAX { OP_REG, ax_reg }
  299. #define RMDX { OP_REG, dx_reg }
  300. #define eAX { OP_IMREG, eAX_reg }
  301. #define eBX { OP_IMREG, eBX_reg }
  302. #define eCX { OP_IMREG, eCX_reg }
  303. #define eDX { OP_IMREG, eDX_reg }
  304. #define eSP { OP_IMREG, eSP_reg }
  305. #define eBP { OP_IMREG, eBP_reg }
  306. #define eSI { OP_IMREG, eSI_reg }
  307. #define eDI { OP_IMREG, eDI_reg }
  308. #define AL { OP_IMREG, al_reg }
  309. #define CL { OP_IMREG, cl_reg }
  310. #define DL { OP_IMREG, dl_reg }
  311. #define BL { OP_IMREG, bl_reg }
  312. #define AH { OP_IMREG, ah_reg }
  313. #define CH { OP_IMREG, ch_reg }
  314. #define DH { OP_IMREG, dh_reg }
  315. #define BH { OP_IMREG, bh_reg }
  316. #define AX { OP_IMREG, ax_reg }
  317. #define DX { OP_IMREG, dx_reg }
  318. #define zAX { OP_IMREG, z_mode_ax_reg }
  319. #define indirDX { OP_IMREG, indir_dx_reg }
  320. #define Sw { OP_SEG, w_mode }
  321. #define Sv { OP_SEG, v_mode }
  322. #define Ap { OP_DIR, 0 }
  323. #define Ob { OP_OFF64, b_mode }
  324. #define Ov { OP_OFF64, v_mode }
  325. #define Xb { OP_DSreg, eSI_reg }
  326. #define Xv { OP_DSreg, eSI_reg }
  327. #define Xz { OP_DSreg, eSI_reg }
  328. #define Yb { OP_ESreg, eDI_reg }
  329. #define Yv { OP_ESreg, eDI_reg }
  330. #define DSBX { OP_DSreg, eBX_reg }
  331. #define es { OP_REG, es_reg }
  332. #define ss { OP_REG, ss_reg }
  333. #define cs { OP_REG, cs_reg }
  334. #define ds { OP_REG, ds_reg }
  335. #define fs { OP_REG, fs_reg }
  336. #define gs { OP_REG, gs_reg }
  337. #define MX { OP_MMX, 0 }
  338. #define XM { OP_XMM, 0 }
  339. #define XMScalar { OP_XMM, scalar_mode }
  340. #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
  341. #define XMM { OP_XMM, xmm_mode }
  342. #define XMxmmq { OP_XMM, xmmq_mode }
  343. #define EM { OP_EM, v_mode }
  344. #define EMS { OP_EM, v_swap_mode }
  345. #define EMd { OP_EM, d_mode }
  346. #define EMx { OP_EM, x_mode }
  347. #define EXw { OP_EX, w_mode }
  348. #define EXd { OP_EX, d_mode }
  349. #define EXdScalar { OP_EX, d_scalar_mode }
  350. #define EXdS { OP_EX, d_swap_mode }
  351. #define EXdScalarS { OP_EX, d_scalar_swap_mode }
  352. #define EXq { OP_EX, q_mode }
  353. #define EXqScalar { OP_EX, q_scalar_mode }
  354. #define EXqScalarS { OP_EX, q_scalar_swap_mode }
  355. #define EXqS { OP_EX, q_swap_mode }
  356. #define EXx { OP_EX, x_mode }
  357. #define EXxS { OP_EX, x_swap_mode }
  358. #define EXxmm { OP_EX, xmm_mode }
  359. #define EXymm { OP_EX, ymm_mode }
  360. #define EXxmmq { OP_EX, xmmq_mode }
  361. #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
  362. #define EXxmm_mb { OP_EX, xmm_mb_mode }
  363. #define EXxmm_mw { OP_EX, xmm_mw_mode }
  364. #define EXxmm_md { OP_EX, xmm_md_mode }
  365. #define EXxmm_mq { OP_EX, xmm_mq_mode }
  366. #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
  367. #define EXxmmdw { OP_EX, xmmdw_mode }
  368. #define EXxmmqd { OP_EX, xmmqd_mode }
  369. #define EXymmq { OP_EX, ymmq_mode }
  370. #define EXVexWdq { OP_EX, vex_w_dq_mode }
  371. #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
  372. #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
  373. #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
  374. #define MS { OP_MS, v_mode }
  375. #define XS { OP_XS, v_mode }
  376. #define EMCq { OP_EMC, q_mode }
  377. #define MXC { OP_MXC, 0 }
  378. #define OPSUF { OP_3DNowSuffix, 0 }
  379. #define CMP { CMP_Fixup, 0 }
  380. #define XMM0 { XMM_Fixup, 0 }
  381. #define FXSAVE { FXSAVE_Fixup, 0 }
  382. #define Vex_2src_1 { OP_Vex_2src_1, 0 }
  383. #define Vex_2src_2 { OP_Vex_2src_2, 0 }
  384. #define Vex { OP_VEX, vex_mode }
  385. #define VexScalar { OP_VEX, vex_scalar_mode }
  386. #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
  387. #define Vex128 { OP_VEX, vex128_mode }
  388. #define Vex256 { OP_VEX, vex256_mode }
  389. #define VexGdq { OP_VEX, dq_mode }
  390. #define VexI4 { VEXI4_Fixup, 0}
  391. #define EXdVex { OP_EX_Vex, d_mode }
  392. #define EXdVexS { OP_EX_Vex, d_swap_mode }
  393. #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
  394. #define EXqVex { OP_EX_Vex, q_mode }
  395. #define EXqVexS { OP_EX_Vex, q_swap_mode }
  396. #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
  397. #define EXVexW { OP_EX_VexW, x_mode }
  398. #define EXdVexW { OP_EX_VexW, d_mode }
  399. #define EXqVexW { OP_EX_VexW, q_mode }
  400. #define EXVexImmW { OP_EX_VexImmW, x_mode }
  401. #define XMVex { OP_XMM_Vex, 0 }
  402. #define XMVexScalar { OP_XMM_Vex, scalar_mode }
  403. #define XMVexW { OP_XMM_VexW, 0 }
  404. #define XMVexI4 { OP_REG_VexI4, x_mode }
  405. #define PCLMUL { PCLMUL_Fixup, 0 }
  406. #define VZERO { VZERO_Fixup, 0 }
  407. #define VCMP { VCMP_Fixup, 0 }
  408. #define VPCMP { VPCMP_Fixup, 0 }
  409. #define EXxEVexR { OP_Rounding, evex_rounding_mode }
  410. #define EXxEVexS { OP_Rounding, evex_sae_mode }
  411. #define XMask { OP_Mask, mask_mode }
  412. #define MaskG { OP_G, mask_mode }
  413. #define MaskE { OP_E, mask_mode }
  414. #define MaskBDE { OP_E, mask_bd_mode }
  415. #define MaskR { OP_R, mask_mode }
  416. #define MaskVex { OP_VEX, mask_mode }
  417. #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
  418. #define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
  419. #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
  420. #define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
  421. /* Used handle "rep" prefix for string instructions. */
  422. #define Xbr { REP_Fixup, eSI_reg }
  423. #define Xvr { REP_Fixup, eSI_reg }
  424. #define Ybr { REP_Fixup, eDI_reg }
  425. #define Yvr { REP_Fixup, eDI_reg }
  426. #define Yzr { REP_Fixup, eDI_reg }
  427. #define indirDXr { REP_Fixup, indir_dx_reg }
  428. #define ALr { REP_Fixup, al_reg }
  429. #define eAXr { REP_Fixup, eAX_reg }
  430. /* Used handle HLE prefix for lockable instructions. */
  431. #define Ebh1 { HLE_Fixup1, b_mode }
  432. #define Evh1 { HLE_Fixup1, v_mode }
  433. #define Ebh2 { HLE_Fixup2, b_mode }
  434. #define Evh2 { HLE_Fixup2, v_mode }
  435. #define Ebh3 { HLE_Fixup3, b_mode }
  436. #define Evh3 { HLE_Fixup3, v_mode }
  437. #define BND { BND_Fixup, 0 }
  438. #define NOTRACK { NOTRACK_Fixup, 0 }
  439. #define cond_jump_flag { NULL, cond_jump_mode }
  440. #define loop_jcxz_flag { NULL, loop_jcxz_mode }
  441. /* bits in sizeflag */
  442. #define SUFFIX_ALWAYS 4
  443. #define AFLAG 2
  444. #define DFLAG 1
  445. enum
  446. {
  447. /* byte operand */
  448. b_mode = 1,
  449. /* byte operand with operand swapped */
  450. b_swap_mode,
  451. /* byte operand, sign extend like 'T' suffix */
  452. b_T_mode,
  453. /* operand size depends on prefixes */
  454. v_mode,
  455. /* operand size depends on prefixes with operand swapped */
  456. v_swap_mode,
  457. /* word operand */
  458. w_mode,
  459. /* double word operand */
  460. d_mode,
  461. /* double word operand with operand swapped */
  462. d_swap_mode,
  463. /* quad word operand */
  464. q_mode,
  465. /* quad word operand with operand swapped */
  466. q_swap_mode,
  467. /* ten-byte operand */
  468. t_mode,
  469. /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
  470. broadcast enabled. */
  471. x_mode,
  472. /* Similar to x_mode, but with different EVEX mem shifts. */
  473. evex_x_gscat_mode,
  474. /* Similar to x_mode, but with disabled broadcast. */
  475. evex_x_nobcst_mode,
  476. /* Similar to x_mode, but with operands swapped and disabled broadcast
  477. in EVEX. */
  478. x_swap_mode,
  479. /* 16-byte XMM operand */
  480. xmm_mode,
  481. /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
  482. memory operand (depending on vector length). Broadcast isn't
  483. allowed. */
  484. xmmq_mode,
  485. /* Same as xmmq_mode, but broadcast is allowed. */
  486. evex_half_bcst_xmmq_mode,
  487. /* XMM register or byte memory operand */
  488. xmm_mb_mode,
  489. /* XMM register or word memory operand */
  490. xmm_mw_mode,
  491. /* XMM register or double word memory operand */
  492. xmm_md_mode,
  493. /* XMM register or quad word memory operand */
  494. xmm_mq_mode,
  495. /* XMM register or double/quad word memory operand, depending on
  496. VEX.W. */
  497. xmm_mdq_mode,
  498. /* 16-byte XMM, word, double word or quad word operand. */
  499. xmmdw_mode,
  500. /* 16-byte XMM, double word, quad word operand or xmm word operand. */
  501. xmmqd_mode,
  502. /* 32-byte YMM operand */
  503. ymm_mode,
  504. /* quad word, ymmword or zmmword memory operand. */
  505. ymmq_mode,
  506. /* 32-byte YMM or 16-byte word operand */
  507. ymmxmm_mode,
  508. /* d_mode in 32bit, q_mode in 64bit mode. */
  509. m_mode,
  510. /* pair of v_mode operands */
  511. a_mode,
  512. cond_jump_mode,
  513. loop_jcxz_mode,
  514. v_bnd_mode,
  515. /* operand size depends on REX prefixes. */
  516. dq_mode,
  517. /* registers like dq_mode, memory like w_mode. */
  518. dqw_mode,
  519. bnd_mode,
  520. /* 4- or 6-byte pointer operand */
  521. f_mode,
  522. const_1_mode,
  523. /* v_mode for indirect branch opcodes. */
  524. indir_v_mode,
  525. /* v_mode for stack-related opcodes. */
  526. stack_v_mode,
  527. /* non-quad operand size depends on prefixes */
  528. z_mode,
  529. /* 16-byte operand */
  530. o_mode,
  531. /* registers like dq_mode, memory like b_mode. */
  532. dqb_mode,
  533. /* registers like d_mode, memory like b_mode. */
  534. db_mode,
  535. /* registers like d_mode, memory like w_mode. */
  536. dw_mode,
  537. /* registers like dq_mode, memory like d_mode. */
  538. dqd_mode,
  539. /* normal vex mode */
  540. vex_mode,
  541. /* 128bit vex mode */
  542. vex128_mode,
  543. /* 256bit vex mode */
  544. vex256_mode,
  545. /* operand size depends on the VEX.W bit. */
  546. vex_w_dq_mode,
  547. /* Similar to vex_w_dq_mode, with VSIB dword indices. */
  548. vex_vsib_d_w_dq_mode,
  549. /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
  550. vex_vsib_d_w_d_mode,
  551. /* Similar to vex_w_dq_mode, with VSIB qword indices. */
  552. vex_vsib_q_w_dq_mode,
  553. /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
  554. vex_vsib_q_w_d_mode,
  555. /* scalar, ignore vector length. */
  556. scalar_mode,
  557. /* like d_mode, ignore vector length. */
  558. d_scalar_mode,
  559. /* like d_swap_mode, ignore vector length. */
  560. d_scalar_swap_mode,
  561. /* like q_mode, ignore vector length. */
  562. q_scalar_mode,
  563. /* like q_swap_mode, ignore vector length. */
  564. q_scalar_swap_mode,
  565. /* like vex_mode, ignore vector length. */
  566. vex_scalar_mode,
  567. /* like vex_w_dq_mode, ignore vector length. */
  568. vex_scalar_w_dq_mode,
  569. /* Static rounding. */
  570. evex_rounding_mode,
  571. /* Supress all exceptions. */
  572. evex_sae_mode,
  573. /* Mask register operand. */
  574. mask_mode,
  575. /* Mask register operand. */
  576. mask_bd_mode,
  577. es_reg,
  578. cs_reg,
  579. ss_reg,
  580. ds_reg,
  581. fs_reg,
  582. gs_reg,
  583. eAX_reg,
  584. eCX_reg,
  585. eDX_reg,
  586. eBX_reg,
  587. eSP_reg,
  588. eBP_reg,
  589. eSI_reg,
  590. eDI_reg,
  591. al_reg,
  592. cl_reg,
  593. dl_reg,
  594. bl_reg,
  595. ah_reg,
  596. ch_reg,
  597. dh_reg,
  598. bh_reg,
  599. ax_reg,
  600. cx_reg,
  601. dx_reg,
  602. bx_reg,
  603. sp_reg,
  604. bp_reg,
  605. si_reg,
  606. di_reg,
  607. rAX_reg,
  608. rCX_reg,
  609. rDX_reg,
  610. rBX_reg,
  611. rSP_reg,
  612. rBP_reg,
  613. rSI_reg,
  614. rDI_reg,
  615. z_mode_ax_reg,
  616. indir_dx_reg
  617. };
  618. enum
  619. {
  620. FLOATCODE = 1,
  621. USE_REG_TABLE,
  622. USE_MOD_TABLE,
  623. USE_RM_TABLE,
  624. USE_PREFIX_TABLE,
  625. USE_X86_64_TABLE,
  626. USE_3BYTE_TABLE,
  627. USE_XOP_8F_TABLE,
  628. USE_VEX_C4_TABLE,
  629. USE_VEX_C5_TABLE,
  630. USE_VEX_LEN_TABLE,
  631. USE_VEX_W_TABLE,
  632. USE_EVEX_TABLE
  633. };
  634. #define FLOAT NULL, { { NULL, FLOATCODE } }, 0
  635. #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
  636. #define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
  637. #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
  638. #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
  639. #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
  640. #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
  641. #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
  642. #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
  643. #define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
  644. #define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
  645. #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
  646. #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
  647. #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
  648. #define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
  649. #define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
  650. enum
  651. {
  652. REG_80 = 0,
  653. REG_81,
  654. REG_83,
  655. REG_8F,
  656. REG_C0,
  657. REG_C1,
  658. REG_C6,
  659. REG_C7,
  660. REG_D0,
  661. REG_D1,
  662. REG_D2,
  663. REG_D3,
  664. REG_F6,
  665. REG_F7,
  666. REG_FE,
  667. REG_FF,
  668. REG_0F00,
  669. REG_0F01,
  670. REG_0F0D,
  671. REG_0F18,
  672. REG_0F1E_MOD_3,
  673. REG_0F71,
  674. REG_0F72,
  675. REG_0F73,
  676. REG_0FA6,
  677. REG_0FA7,
  678. REG_0FAE,
  679. REG_0FBA,
  680. REG_0FC7,
  681. REG_VEX_0F71,
  682. REG_VEX_0F72,
  683. REG_VEX_0F73,
  684. REG_VEX_0FAE,
  685. REG_VEX_0F38F3,
  686. REG_XOP_LWPCB,
  687. REG_XOP_LWP,
  688. REG_XOP_TBM_01,
  689. REG_XOP_TBM_02,
  690. REG_EVEX_0F71,
  691. REG_EVEX_0F72,
  692. REG_EVEX_0F73,
  693. REG_EVEX_0F38C6,
  694. REG_EVEX_0F38C7
  695. };
  696. enum
  697. {
  698. MOD_8D = 0,
  699. MOD_C6_REG_7,
  700. MOD_C7_REG_7,
  701. MOD_FF_REG_3,
  702. MOD_FF_REG_5,
  703. MOD_0F01_REG_0,
  704. MOD_0F01_REG_1,
  705. MOD_0F01_REG_2,
  706. MOD_0F01_REG_3,
  707. MOD_0F01_REG_5,
  708. MOD_0F01_REG_7,
  709. MOD_0F12_PREFIX_0,
  710. MOD_0F13,
  711. MOD_0F16_PREFIX_0,
  712. MOD_0F17,
  713. MOD_0F18_REG_0,
  714. MOD_0F18_REG_1,
  715. MOD_0F18_REG_2,
  716. MOD_0F18_REG_3,
  717. MOD_0F18_REG_4,
  718. MOD_0F18_REG_5,
  719. MOD_0F18_REG_6,
  720. MOD_0F18_REG_7,
  721. MOD_0F1A_PREFIX_0,
  722. MOD_0F1B_PREFIX_0,
  723. MOD_0F1B_PREFIX_1,
  724. MOD_0F1E_PREFIX_1,
  725. MOD_0F24,
  726. MOD_0F26,
  727. MOD_0F2B_PREFIX_0,
  728. MOD_0F2B_PREFIX_1,
  729. MOD_0F2B_PREFIX_2,
  730. MOD_0F2B_PREFIX_3,
  731. MOD_0F51,
  732. MOD_0F71_REG_2,
  733. MOD_0F71_REG_4,
  734. MOD_0F71_REG_6,
  735. MOD_0F72_REG_2,
  736. MOD_0F72_REG_4,
  737. MOD_0F72_REG_6,
  738. MOD_0F73_REG_2,
  739. MOD_0F73_REG_3,
  740. MOD_0F73_REG_6,
  741. MOD_0F73_REG_7,
  742. MOD_0FAE_REG_0,
  743. MOD_0FAE_REG_1,
  744. MOD_0FAE_REG_2,
  745. MOD_0FAE_REG_3,
  746. MOD_0FAE_REG_4,
  747. MOD_0FAE_REG_5,
  748. MOD_0FAE_REG_6,
  749. MOD_0FAE_REG_7,
  750. MOD_0FB2,
  751. MOD_0FB4,
  752. MOD_0FB5,
  753. MOD_0FC3,
  754. MOD_0FC7_REG_3,
  755. MOD_0FC7_REG_4,
  756. MOD_0FC7_REG_5,
  757. MOD_0FC7_REG_6,
  758. MOD_0FC7_REG_7,
  759. MOD_0FD7,
  760. MOD_0FE7_PREFIX_2,
  761. MOD_0FF0_PREFIX_3,
  762. MOD_0F382A_PREFIX_2,
  763. MOD_0F38F5_PREFIX_2,
  764. MOD_0F38F6_PREFIX_0,
  765. MOD_62_32BIT,
  766. MOD_C4_32BIT,
  767. MOD_C5_32BIT,
  768. MOD_VEX_0F12_PREFIX_0,
  769. MOD_VEX_0F13,
  770. MOD_VEX_0F16_PREFIX_0,
  771. MOD_VEX_0F17,
  772. MOD_VEX_0F2B,
  773. MOD_VEX_W_0_0F41_P_0_LEN_1,
  774. MOD_VEX_W_1_0F41_P_0_LEN_1,
  775. MOD_VEX_W_0_0F41_P_2_LEN_1,
  776. MOD_VEX_W_1_0F41_P_2_LEN_1,
  777. MOD_VEX_W_0_0F42_P_0_LEN_1,
  778. MOD_VEX_W_1_0F42_P_0_LEN_1,
  779. MOD_VEX_W_0_0F42_P_2_LEN_1,
  780. MOD_VEX_W_1_0F42_P_2_LEN_1,
  781. MOD_VEX_W_0_0F44_P_0_LEN_1,
  782. MOD_VEX_W_1_0F44_P_0_LEN_1,
  783. MOD_VEX_W_0_0F44_P_2_LEN_1,
  784. MOD_VEX_W_1_0F44_P_2_LEN_1,
  785. MOD_VEX_W_0_0F45_P_0_LEN_1,
  786. MOD_VEX_W_1_0F45_P_0_LEN_1,
  787. MOD_VEX_W_0_0F45_P_2_LEN_1,
  788. MOD_VEX_W_1_0F45_P_2_LEN_1,
  789. MOD_VEX_W_0_0F46_P_0_LEN_1,
  790. MOD_VEX_W_1_0F46_P_0_LEN_1,
  791. MOD_VEX_W_0_0F46_P_2_LEN_1,
  792. MOD_VEX_W_1_0F46_P_2_LEN_1,
  793. MOD_VEX_W_0_0F47_P_0_LEN_1,
  794. MOD_VEX_W_1_0F47_P_0_LEN_1,
  795. MOD_VEX_W_0_0F47_P_2_LEN_1,
  796. MOD_VEX_W_1_0F47_P_2_LEN_1,
  797. MOD_VEX_W_0_0F4A_P_0_LEN_1,
  798. MOD_VEX_W_1_0F4A_P_0_LEN_1,
  799. MOD_VEX_W_0_0F4A_P_2_LEN_1,
  800. MOD_VEX_W_1_0F4A_P_2_LEN_1,
  801. MOD_VEX_W_0_0F4B_P_0_LEN_1,
  802. MOD_VEX_W_1_0F4B_P_0_LEN_1,
  803. MOD_VEX_W_0_0F4B_P_2_LEN_1,
  804. MOD_VEX_0F50,
  805. MOD_VEX_0F71_REG_2,
  806. MOD_VEX_0F71_REG_4,
  807. MOD_VEX_0F71_REG_6,
  808. MOD_VEX_0F72_REG_2,
  809. MOD_VEX_0F72_REG_4,
  810. MOD_VEX_0F72_REG_6,
  811. MOD_VEX_0F73_REG_2,
  812. MOD_VEX_0F73_REG_3,
  813. MOD_VEX_0F73_REG_6,
  814. MOD_VEX_0F73_REG_7,
  815. MOD_VEX_W_0_0F91_P_0_LEN_0,
  816. MOD_VEX_W_1_0F91_P_0_LEN_0,
  817. MOD_VEX_W_0_0F91_P_2_LEN_0,
  818. MOD_VEX_W_1_0F91_P_2_LEN_0,
  819. MOD_VEX_W_0_0F92_P_0_LEN_0,
  820. MOD_VEX_W_0_0F92_P_2_LEN_0,
  821. MOD_VEX_W_0_0F92_P_3_LEN_0,
  822. MOD_VEX_W_1_0F92_P_3_LEN_0,
  823. MOD_VEX_W_0_0F93_P_0_LEN_0,
  824. MOD_VEX_W_0_0F93_P_2_LEN_0,
  825. MOD_VEX_W_0_0F93_P_3_LEN_0,
  826. MOD_VEX_W_1_0F93_P_3_LEN_0,
  827. MOD_VEX_W_0_0F98_P_0_LEN_0,
  828. MOD_VEX_W_1_0F98_P_0_LEN_0,
  829. MOD_VEX_W_0_0F98_P_2_LEN_0,
  830. MOD_VEX_W_1_0F98_P_2_LEN_0,
  831. MOD_VEX_W_0_0F99_P_0_LEN_0,
  832. MOD_VEX_W_1_0F99_P_0_LEN_0,
  833. MOD_VEX_W_0_0F99_P_2_LEN_0,
  834. MOD_VEX_W_1_0F99_P_2_LEN_0,
  835. MOD_VEX_0FAE_REG_2,
  836. MOD_VEX_0FAE_REG_3,
  837. MOD_VEX_0FD7_PREFIX_2,
  838. MOD_VEX_0FE7_PREFIX_2,
  839. MOD_VEX_0FF0_PREFIX_3,
  840. MOD_VEX_0F381A_PREFIX_2,
  841. MOD_VEX_0F382A_PREFIX_2,
  842. MOD_VEX_0F382C_PREFIX_2,
  843. MOD_VEX_0F382D_PREFIX_2,
  844. MOD_VEX_0F382E_PREFIX_2,
  845. MOD_VEX_0F382F_PREFIX_2,
  846. MOD_VEX_0F385A_PREFIX_2,
  847. MOD_VEX_0F388C_PREFIX_2,
  848. MOD_VEX_0F388E_PREFIX_2,
  849. MOD_VEX_W_0_0F3A30_P_2_LEN_0,
  850. MOD_VEX_W_1_0F3A30_P_2_LEN_0,
  851. MOD_VEX_W_0_0F3A31_P_2_LEN_0,
  852. MOD_VEX_W_1_0F3A31_P_2_LEN_0,
  853. MOD_VEX_W_0_0F3A32_P_2_LEN_0,
  854. MOD_VEX_W_1_0F3A32_P_2_LEN_0,
  855. MOD_VEX_W_0_0F3A33_P_2_LEN_0,
  856. MOD_VEX_W_1_0F3A33_P_2_LEN_0,
  857. MOD_EVEX_0F10_PREFIX_1,
  858. MOD_EVEX_0F10_PREFIX_3,
  859. MOD_EVEX_0F11_PREFIX_1,
  860. MOD_EVEX_0F11_PREFIX_3,
  861. MOD_EVEX_0F12_PREFIX_0,
  862. MOD_EVEX_0F16_PREFIX_0,
  863. MOD_EVEX_0F38C6_REG_1,
  864. MOD_EVEX_0F38C6_REG_2,
  865. MOD_EVEX_0F38C6_REG_5,
  866. MOD_EVEX_0F38C6_REG_6,
  867. MOD_EVEX_0F38C7_REG_1,
  868. MOD_EVEX_0F38C7_REG_2,
  869. MOD_EVEX_0F38C7_REG_5,
  870. MOD_EVEX_0F38C7_REG_6
  871. };
  872. enum
  873. {
  874. RM_C6_REG_7 = 0,
  875. RM_C7_REG_7,
  876. RM_0F01_REG_0,
  877. RM_0F01_REG_1,
  878. RM_0F01_REG_2,
  879. RM_0F01_REG_3,
  880. RM_0F01_REG_5,
  881. RM_0F01_REG_7,
  882. RM_0F1E_MOD_3_REG_7,
  883. RM_0FAE_REG_6,
  884. RM_0FAE_REG_7
  885. };
  886. enum
  887. {
  888. PREFIX_90 = 0,
  889. PREFIX_MOD_0_0F01_REG_5,
  890. PREFIX_MOD_3_0F01_REG_5_RM_0,
  891. PREFIX_MOD_3_0F01_REG_5_RM_2,
  892. PREFIX_0F10,
  893. PREFIX_0F11,
  894. PREFIX_0F12,
  895. PREFIX_0F16,
  896. PREFIX_0F1A,
  897. PREFIX_0F1B,
  898. PREFIX_0F1E,
  899. PREFIX_0F2A,
  900. PREFIX_0F2B,
  901. PREFIX_0F2C,
  902. PREFIX_0F2D,
  903. PREFIX_0F2E,
  904. PREFIX_0F2F,
  905. PREFIX_0F51,
  906. PREFIX_0F52,
  907. PREFIX_0F53,
  908. PREFIX_0F58,
  909. PREFIX_0F59,
  910. PREFIX_0F5A,
  911. PREFIX_0F5B,
  912. PREFIX_0F5C,
  913. PREFIX_0F5D,
  914. PREFIX_0F5E,
  915. PREFIX_0F5F,
  916. PREFIX_0F60,
  917. PREFIX_0F61,
  918. PREFIX_0F62,
  919. PREFIX_0F6C,
  920. PREFIX_0F6D,
  921. PREFIX_0F6F,
  922. PREFIX_0F70,
  923. PREFIX_0F73_REG_3,
  924. PREFIX_0F73_REG_7,
  925. PREFIX_0F78,
  926. PREFIX_0F79,
  927. PREFIX_0F7C,
  928. PREFIX_0F7D,
  929. PREFIX_0F7E,
  930. PREFIX_0F7F,
  931. PREFIX_0FAE_REG_0,
  932. PREFIX_0FAE_REG_1,
  933. PREFIX_0FAE_REG_2,
  934. PREFIX_0FAE_REG_3,
  935. PREFIX_MOD_0_0FAE_REG_4,
  936. PREFIX_MOD_3_0FAE_REG_4,
  937. PREFIX_MOD_0_0FAE_REG_5,
  938. PREFIX_MOD_3_0FAE_REG_5,
  939. PREFIX_0FAE_REG_6,
  940. PREFIX_0FAE_REG_7,
  941. PREFIX_0FB8,
  942. PREFIX_0FBC,
  943. PREFIX_0FBD,
  944. PREFIX_0FC2,
  945. PREFIX_MOD_0_0FC3,
  946. PREFIX_MOD_0_0FC7_REG_6,
  947. PREFIX_MOD_3_0FC7_REG_6,
  948. PREFIX_MOD_3_0FC7_REG_7,
  949. PREFIX_0FD0,
  950. PREFIX_0FD6,
  951. PREFIX_0FE6,
  952. PREFIX_0FE7,
  953. PREFIX_0FF0,
  954. PREFIX_0FF7,
  955. PREFIX_0F3810,
  956. PREFIX_0F3814,
  957. PREFIX_0F3815,
  958. PREFIX_0F3817,
  959. PREFIX_0F3820,
  960. PREFIX_0F3821,
  961. PREFIX_0F3822,
  962. PREFIX_0F3823,
  963. PREFIX_0F3824,
  964. PREFIX_0F3825,
  965. PREFIX_0F3828,
  966. PREFIX_0F3829,
  967. PREFIX_0F382A,
  968. PREFIX_0F382B,
  969. PREFIX_0F3830,
  970. PREFIX_0F3831,
  971. PREFIX_0F3832,
  972. PREFIX_0F3833,
  973. PREFIX_0F3834,
  974. PREFIX_0F3835,
  975. PREFIX_0F3837,
  976. PREFIX_0F3838,
  977. PREFIX_0F3839,
  978. PREFIX_0F383A,
  979. PREFIX_0F383B,
  980. PREFIX_0F383C,
  981. PREFIX_0F383D,
  982. PREFIX_0F383E,
  983. PREFIX_0F383F,
  984. PREFIX_0F3840,
  985. PREFIX_0F3841,
  986. PREFIX_0F3880,
  987. PREFIX_0F3881,
  988. PREFIX_0F3882,
  989. PREFIX_0F38C8,
  990. PREFIX_0F38C9,
  991. PREFIX_0F38CA,
  992. PREFIX_0F38CB,
  993. PREFIX_0F38CC,
  994. PREFIX_0F38CD,
  995. PREFIX_0F38DB,
  996. PREFIX_0F38DC,
  997. PREFIX_0F38DD,
  998. PREFIX_0F38DE,
  999. PREFIX_0F38DF,
  1000. PREFIX_0F38F0,
  1001. PREFIX_0F38F1,
  1002. PREFIX_0F38F5,
  1003. PREFIX_0F38F6,
  1004. PREFIX_0F3A08,
  1005. PREFIX_0F3A09,
  1006. PREFIX_0F3A0A,
  1007. PREFIX_0F3A0B,
  1008. PREFIX_0F3A0C,
  1009. PREFIX_0F3A0D,
  1010. PREFIX_0F3A0E,
  1011. PREFIX_0F3A14,
  1012. PREFIX_0F3A15,
  1013. PREFIX_0F3A16,
  1014. PREFIX_0F3A17,
  1015. PREFIX_0F3A20,
  1016. PREFIX_0F3A21,
  1017. PREFIX_0F3A22,
  1018. PREFIX_0F3A40,
  1019. PREFIX_0F3A41,
  1020. PREFIX_0F3A42,
  1021. PREFIX_0F3A44,
  1022. PREFIX_0F3A60,
  1023. PREFIX_0F3A61,
  1024. PREFIX_0F3A62,
  1025. PREFIX_0F3A63,
  1026. PREFIX_0F3ACC,
  1027. PREFIX_0F3ADF,
  1028. PREFIX_VEX_0F10,
  1029. PREFIX_VEX_0F11,
  1030. PREFIX_VEX_0F12,
  1031. PREFIX_VEX_0F16,
  1032. PREFIX_VEX_0F2A,
  1033. PREFIX_VEX_0F2C,
  1034. PREFIX_VEX_0F2D,
  1035. PREFIX_VEX_0F2E,
  1036. PREFIX_VEX_0F2F,
  1037. PREFIX_VEX_0F41,
  1038. PREFIX_VEX_0F42,
  1039. PREFIX_VEX_0F44,
  1040. PREFIX_VEX_0F45,
  1041. PREFIX_VEX_0F46,
  1042. PREFIX_VEX_0F47,
  1043. PREFIX_VEX_0F4A,
  1044. PREFIX_VEX_0F4B,
  1045. PREFIX_VEX_0F51,
  1046. PREFIX_VEX_0F52,
  1047. PREFIX_VEX_0F53,
  1048. PREFIX_VEX_0F58,
  1049. PREFIX_VEX_0F59,
  1050. PREFIX_VEX_0F5A,
  1051. PREFIX_VEX_0F5B,
  1052. PREFIX_VEX_0F5C,
  1053. PREFIX_VEX_0F5D,
  1054. PREFIX_VEX_0F5E,
  1055. PREFIX_VEX_0F5F,
  1056. PREFIX_VEX_0F60,
  1057. PREFIX_VEX_0F61,
  1058. PREFIX_VEX_0F62,
  1059. PREFIX_VEX_0F63,
  1060. PREFIX_VEX_0F64,
  1061. PREFIX_VEX_0F65,
  1062. PREFIX_VEX_0F66,
  1063. PREFIX_VEX_0F67,
  1064. PREFIX_VEX_0F68,
  1065. PREFIX_VEX_0F69,
  1066. PREFIX_VEX_0F6A,
  1067. PREFIX_VEX_0F6B,
  1068. PREFIX_VEX_0F6C,
  1069. PREFIX_VEX_0F6D,
  1070. PREFIX_VEX_0F6E,
  1071. PREFIX_VEX_0F6F,
  1072. PREFIX_VEX_0F70,
  1073. PREFIX_VEX_0F71_REG_2,
  1074. PREFIX_VEX_0F71_REG_4,
  1075. PREFIX_VEX_0F71_REG_6,
  1076. PREFIX_VEX_0F72_REG_2,
  1077. PREFIX_VEX_0F72_REG_4,
  1078. PREFIX_VEX_0F72_REG_6,
  1079. PREFIX_VEX_0F73_REG_2,
  1080. PREFIX_VEX_0F73_REG_3,
  1081. PREFIX_VEX_0F73_REG_6,
  1082. PREFIX_VEX_0F73_REG_7,
  1083. PREFIX_VEX_0F74,
  1084. PREFIX_VEX_0F75,
  1085. PREFIX_VEX_0F76,
  1086. PREFIX_VEX_0F77,
  1087. PREFIX_VEX_0F7C,
  1088. PREFIX_VEX_0F7D,
  1089. PREFIX_VEX_0F7E,
  1090. PREFIX_VEX_0F7F,
  1091. PREFIX_VEX_0F90,
  1092. PREFIX_VEX_0F91,
  1093. PREFIX_VEX_0F92,
  1094. PREFIX_VEX_0F93,
  1095. PREFIX_VEX_0F98,
  1096. PREFIX_VEX_0F99,
  1097. PREFIX_VEX_0FC2,
  1098. PREFIX_VEX_0FC4,
  1099. PREFIX_VEX_0FC5,
  1100. PREFIX_VEX_0FD0,
  1101. PREFIX_VEX_0FD1,
  1102. PREFIX_VEX_0FD2,
  1103. PREFIX_VEX_0FD3,
  1104. PREFIX_VEX_0FD4,
  1105. PREFIX_VEX_0FD5,
  1106. PREFIX_VEX_0FD6,
  1107. PREFIX_VEX_0FD7,
  1108. PREFIX_VEX_0FD8,
  1109. PREFIX_VEX_0FD9,
  1110. PREFIX_VEX_0FDA,
  1111. PREFIX_VEX_0FDB,
  1112. PREFIX_VEX_0FDC,
  1113. PREFIX_VEX_0FDD,
  1114. PREFIX_VEX_0FDE,
  1115. PREFIX_VEX_0FDF,
  1116. PREFIX_VEX_0FE0,
  1117. PREFIX_VEX_0FE1,
  1118. PREFIX_VEX_0FE2,
  1119. PREFIX_VEX_0FE3,
  1120. PREFIX_VEX_0FE4,
  1121. PREFIX_VEX_0FE5,
  1122. PREFIX_VEX_0FE6,
  1123. PREFIX_VEX_0FE7,
  1124. PREFIX_VEX_0FE8,
  1125. PREFIX_VEX_0FE9,
  1126. PREFIX_VEX_0FEA,
  1127. PREFIX_VEX_0FEB,
  1128. PREFIX_VEX_0FEC,
  1129. PREFIX_VEX_0FED,
  1130. PREFIX_VEX_0FEE,
  1131. PREFIX_VEX_0FEF,
  1132. PREFIX_VEX_0FF0,
  1133. PREFIX_VEX_0FF1,
  1134. PREFIX_VEX_0FF2,
  1135. PREFIX_VEX_0FF3,
  1136. PREFIX_VEX_0FF4,
  1137. PREFIX_VEX_0FF5,
  1138. PREFIX_VEX_0FF6,
  1139. PREFIX_VEX_0FF7,
  1140. PREFIX_VEX_0FF8,
  1141. PREFIX_VEX_0FF9,
  1142. PREFIX_VEX_0FFA,
  1143. PREFIX_VEX_0FFB,
  1144. PREFIX_VEX_0FFC,
  1145. PREFIX_VEX_0FFD,
  1146. PREFIX_VEX_0FFE,
  1147. PREFIX_VEX_0F3800,
  1148. PREFIX_VEX_0F3801,
  1149. PREFIX_VEX_0F3802,
  1150. PREFIX_VEX_0F3803,
  1151. PREFIX_VEX_0F3804,
  1152. PREFIX_VEX_0F3805,
  1153. PREFIX_VEX_0F3806,
  1154. PREFIX_VEX_0F3807,
  1155. PREFIX_VEX_0F3808,
  1156. PREFIX_VEX_0F3809,
  1157. PREFIX_VEX_0F380A,
  1158. PREFIX_VEX_0F380B,
  1159. PREFIX_VEX_0F380C,
  1160. PREFIX_VEX_0F380D,
  1161. PREFIX_VEX_0F380E,
  1162. PREFIX_VEX_0F380F,
  1163. PREFIX_VEX_0F3813,
  1164. PREFIX_VEX_0F3816,
  1165. PREFIX_VEX_0F3817,
  1166. PREFIX_VEX_0F3818,
  1167. PREFIX_VEX_0F3819,
  1168. PREFIX_VEX_0F381A,
  1169. PREFIX_VEX_0F381C,
  1170. PREFIX_VEX_0F381D,
  1171. PREFIX_VEX_0F381E,
  1172. PREFIX_VEX_0F3820,
  1173. PREFIX_VEX_0F3821,
  1174. PREFIX_VEX_0F3822,
  1175. PREFIX_VEX_0F3823,
  1176. PREFIX_VEX_0F3824,
  1177. PREFIX_VEX_0F3825,
  1178. PREFIX_VEX_0F3828,
  1179. PREFIX_VEX_0F3829,
  1180. PREFIX_VEX_0F382A,
  1181. PREFIX_VEX_0F382B,
  1182. PREFIX_VEX_0F382C,
  1183. PREFIX_VEX_0F382D,
  1184. PREFIX_VEX_0F382E,
  1185. PREFIX_VEX_0F382F,
  1186. PREFIX_VEX_0F3830,
  1187. PREFIX_VEX_0F3831,
  1188. PREFIX_VEX_0F3832,
  1189. PREFIX_VEX_0F3833,
  1190. PREFIX_VEX_0F3834,
  1191. PREFIX_VEX_0F3835,
  1192. PREFIX_VEX_0F3836,
  1193. PREFIX_VEX_0F3837,
  1194. PREFIX_VEX_0F3838,
  1195. PREFIX_VEX_0F3839,
  1196. PREFIX_VEX_0F383A,
  1197. PREFIX_VEX_0F383B,
  1198. PREFIX_VEX_0F383C,
  1199. PREFIX_VEX_0F383D,
  1200. PREFIX_VEX_0F383E,
  1201. PREFIX_VEX_0F383F,
  1202. PREFIX_VEX_0F3840,
  1203. PREFIX_VEX_0F3841,
  1204. PREFIX_VEX_0F3845,
  1205. PREFIX_VEX_0F3846,
  1206. PREFIX_VEX_0F3847,
  1207. PREFIX_VEX_0F3858,
  1208. PREFIX_VEX_0F3859,
  1209. PREFIX_VEX_0F385A,
  1210. PREFIX_VEX_0F3878,
  1211. PREFIX_VEX_0F3879,
  1212. PREFIX_VEX_0F388C,
  1213. PREFIX_VEX_0F388E,
  1214. PREFIX_VEX_0F3890,
  1215. PREFIX_VEX_0F3891,
  1216. PREFIX_VEX_0F3892,
  1217. PREFIX_VEX_0F3893,
  1218. PREFIX_VEX_0F3896,
  1219. PREFIX_VEX_0F3897,
  1220. PREFIX_VEX_0F3898,
  1221. PREFIX_VEX_0F3899,
  1222. PREFIX_VEX_0F389A,
  1223. PREFIX_VEX_0F389B,
  1224. PREFIX_VEX_0F389C,
  1225. PREFIX_VEX_0F389D,
  1226. PREFIX_VEX_0F389E,
  1227. PREFIX_VEX_0F389F,
  1228. PREFIX_VEX_0F38A6,
  1229. PREFIX_VEX_0F38A7,
  1230. PREFIX_VEX_0F38A8,
  1231. PREFIX_VEX_0F38A9,
  1232. PREFIX_VEX_0F38AA,
  1233. PREFIX_VEX_0F38AB,
  1234. PREFIX_VEX_0F38AC,
  1235. PREFIX_VEX_0F38AD,
  1236. PREFIX_VEX_0F38AE,
  1237. PREFIX_VEX_0F38AF,
  1238. PREFIX_VEX_0F38B6,
  1239. PREFIX_VEX_0F38B7,
  1240. PREFIX_VEX_0F38B8,
  1241. PREFIX_VEX_0F38B9,
  1242. PREFIX_VEX_0F38BA,
  1243. PREFIX_VEX_0F38BB,
  1244. PREFIX_VEX_0F38BC,
  1245. PREFIX_VEX_0F38BD,
  1246. PREFIX_VEX_0F38BE,
  1247. PREFIX_VEX_0F38BF,
  1248. PREFIX_VEX_0F38DB,
  1249. PREFIX_VEX_0F38DC,
  1250. PREFIX_VEX_0F38DD,
  1251. PREFIX_VEX_0F38DE,
  1252. PREFIX_VEX_0F38DF,
  1253. PREFIX_VEX_0F38F2,
  1254. PREFIX_VEX_0F38F3_REG_1,
  1255. PREFIX_VEX_0F38F3_REG_2,
  1256. PREFIX_VEX_0F38F3_REG_3,
  1257. PREFIX_VEX_0F38F5,
  1258. PREFIX_VEX_0F38F6,
  1259. PREFIX_VEX_0F38F7,
  1260. PREFIX_VEX_0F3A00,
  1261. PREFIX_VEX_0F3A01,
  1262. PREFIX_VEX_0F3A02,
  1263. PREFIX_VEX_0F3A04,
  1264. PREFIX_VEX_0F3A05,
  1265. PREFIX_VEX_0F3A06,
  1266. PREFIX_VEX_0F3A08,
  1267. PREFIX_VEX_0F3A09,
  1268. PREFIX_VEX_0F3A0A,
  1269. PREFIX_VEX_0F3A0B,
  1270. PREFIX_VEX_0F3A0C,
  1271. PREFIX_VEX_0F3A0D,
  1272. PREFIX_VEX_0F3A0E,
  1273. PREFIX_VEX_0F3A0F,
  1274. PREFIX_VEX_0F3A14,
  1275. PREFIX_VEX_0F3A15,
  1276. PREFIX_VEX_0F3A16,
  1277. PREFIX_VEX_0F3A17,
  1278. PREFIX_VEX_0F3A18,
  1279. PREFIX_VEX_0F3A19,
  1280. PREFIX_VEX_0F3A1D,
  1281. PREFIX_VEX_0F3A20,
  1282. PREFIX_VEX_0F3A21,
  1283. PREFIX_VEX_0F3A22,
  1284. PREFIX_VEX_0F3A30,
  1285. PREFIX_VEX_0F3A31,
  1286. PREFIX_VEX_0F3A32,
  1287. PREFIX_VEX_0F3A33,
  1288. PREFIX_VEX_0F3A38,
  1289. PREFIX_VEX_0F3A39,
  1290. PREFIX_VEX_0F3A40,
  1291. PREFIX_VEX_0F3A41,
  1292. PREFIX_VEX_0F3A42,
  1293. PREFIX_VEX_0F3A44,
  1294. PREFIX_VEX_0F3A46,
  1295. PREFIX_VEX_0F3A48,
  1296. PREFIX_VEX_0F3A49,
  1297. PREFIX_VEX_0F3A4A,
  1298. PREFIX_VEX_0F3A4B,
  1299. PREFIX_VEX_0F3A4C,
  1300. PREFIX_VEX_0F3A5C,
  1301. PREFIX_VEX_0F3A5D,
  1302. PREFIX_VEX_0F3A5E,
  1303. PREFIX_VEX_0F3A5F,
  1304. PREFIX_VEX_0F3A60,
  1305. PREFIX_VEX_0F3A61,
  1306. PREFIX_VEX_0F3A62,
  1307. PREFIX_VEX_0F3A63,
  1308. PREFIX_VEX_0F3A68,
  1309. PREFIX_VEX_0F3A69,
  1310. PREFIX_VEX_0F3A6A,
  1311. PREFIX_VEX_0F3A6B,
  1312. PREFIX_VEX_0F3A6C,
  1313. PREFIX_VEX_0F3A6D,
  1314. PREFIX_VEX_0F3A6E,
  1315. PREFIX_VEX_0F3A6F,
  1316. PREFIX_VEX_0F3A78,
  1317. PREFIX_VEX_0F3A79,
  1318. PREFIX_VEX_0F3A7A,
  1319. PREFIX_VEX_0F3A7B,
  1320. PREFIX_VEX_0F3A7C,
  1321. PREFIX_VEX_0F3A7D,
  1322. PREFIX_VEX_0F3A7E,
  1323. PREFIX_VEX_0F3A7F,
  1324. PREFIX_VEX_0F3ADF,
  1325. PREFIX_VEX_0F3AF0,
  1326. PREFIX_EVEX_0F10,
  1327. PREFIX_EVEX_0F11,
  1328. PREFIX_EVEX_0F12,
  1329. PREFIX_EVEX_0F13,
  1330. PREFIX_EVEX_0F14,
  1331. PREFIX_EVEX_0F15,
  1332. PREFIX_EVEX_0F16,
  1333. PREFIX_EVEX_0F17,
  1334. PREFIX_EVEX_0F28,
  1335. PREFIX_EVEX_0F29,
  1336. PREFIX_EVEX_0F2A,
  1337. PREFIX_EVEX_0F2B,
  1338. PREFIX_EVEX_0F2C,
  1339. PREFIX_EVEX_0F2D,
  1340. PREFIX_EVEX_0F2E,
  1341. PREFIX_EVEX_0F2F,
  1342. PREFIX_EVEX_0F51,
  1343. PREFIX_EVEX_0F54,
  1344. PREFIX_EVEX_0F55,
  1345. PREFIX_EVEX_0F56,
  1346. PREFIX_EVEX_0F57,
  1347. PREFIX_EVEX_0F58,
  1348. PREFIX_EVEX_0F59,
  1349. PREFIX_EVEX_0F5A,
  1350. PREFIX_EVEX_0F5B,
  1351. PREFIX_EVEX_0F5C,
  1352. PREFIX_EVEX_0F5D,
  1353. PREFIX_EVEX_0F5E,
  1354. PREFIX_EVEX_0F5F,
  1355. PREFIX_EVEX_0F60,
  1356. PREFIX_EVEX_0F61,
  1357. PREFIX_EVEX_0F62,
  1358. PREFIX_EVEX_0F63,
  1359. PREFIX_EVEX_0F64,
  1360. PREFIX_EVEX_0F65,
  1361. PREFIX_EVEX_0F66,
  1362. PREFIX_EVEX_0F67,
  1363. PREFIX_EVEX_0F68,
  1364. PREFIX_EVEX_0F69,
  1365. PREFIX_EVEX_0F6A,
  1366. PREFIX_EVEX_0F6B,
  1367. PREFIX_EVEX_0F6C,
  1368. PREFIX_EVEX_0F6D,
  1369. PREFIX_EVEX_0F6E,
  1370. PREFIX_EVEX_0F6F,
  1371. PREFIX_EVEX_0F70,
  1372. PREFIX_EVEX_0F71_REG_2,
  1373. PREFIX_EVEX_0F71_REG_4,
  1374. PREFIX_EVEX_0F71_REG_6,
  1375. PREFIX_EVEX_0F72_REG_0,
  1376. PREFIX_EVEX_0F72_REG_1,
  1377. PREFIX_EVEX_0F72_REG_2,
  1378. PREFIX_EVEX_0F72_REG_4,
  1379. PREFIX_EVEX_0F72_REG_6,
  1380. PREFIX_EVEX_0F73_REG_2,
  1381. PREFIX_EVEX_0F73_REG_3,
  1382. PREFIX_EVEX_0F73_REG_6,
  1383. PREFIX_EVEX_0F73_REG_7,
  1384. PREFIX_EVEX_0F74,
  1385. PREFIX_EVEX_0F75,
  1386. PREFIX_EVEX_0F76,
  1387. PREFIX_EVEX_0F78,
  1388. PREFIX_EVEX_0F79,
  1389. PREFIX_EVEX_0F7A,
  1390. PREFIX_EVEX_0F7B,
  1391. PREFIX_EVEX_0F7E,
  1392. PREFIX_EVEX_0F7F,
  1393. PREFIX_EVEX_0FC2,
  1394. PREFIX_EVEX_0FC4,
  1395. PREFIX_EVEX_0FC5,
  1396. PREFIX_EVEX_0FC6,
  1397. PREFIX_EVEX_0FD1,
  1398. PREFIX_EVEX_0FD2,
  1399. PREFIX_EVEX_0FD3,
  1400. PREFIX_EVEX_0FD4,
  1401. PREFIX_EVEX_0FD5,
  1402. PREFIX_EVEX_0FD6,
  1403. PREFIX_EVEX_0FD8,
  1404. PREFIX_EVEX_0FD9,
  1405. PREFIX_EVEX_0FDA,
  1406. PREFIX_EVEX_0FDB,
  1407. PREFIX_EVEX_0FDC,
  1408. PREFIX_EVEX_0FDD,
  1409. PREFIX_EVEX_0FDE,
  1410. PREFIX_EVEX_0FDF,
  1411. PREFIX_EVEX_0FE0,
  1412. PREFIX_EVEX_0FE1,
  1413. PREFIX_EVEX_0FE2,
  1414. PREFIX_EVEX_0FE3,
  1415. PREFIX_EVEX_0FE4,
  1416. PREFIX_EVEX_0FE5,
  1417. PREFIX_EVEX_0FE6,
  1418. PREFIX_EVEX_0FE7,
  1419. PREFIX_EVEX_0FE8,
  1420. PREFIX_EVEX_0FE9,
  1421. PREFIX_EVEX_0FEA,
  1422. PREFIX_EVEX_0FEB,
  1423. PREFIX_EVEX_0FEC,
  1424. PREFIX_EVEX_0FED,
  1425. PREFIX_EVEX_0FEE,
  1426. PREFIX_EVEX_0FEF,
  1427. PREFIX_EVEX_0FF1,
  1428. PREFIX_EVEX_0FF2,
  1429. PREFIX_EVEX_0FF3,
  1430. PREFIX_EVEX_0FF4,
  1431. PREFIX_EVEX_0FF5,
  1432. PREFIX_EVEX_0FF6,
  1433. PREFIX_EVEX_0FF8,
  1434. PREFIX_EVEX_0FF9,
  1435. PREFIX_EVEX_0FFA,
  1436. PREFIX_EVEX_0FFB,
  1437. PREFIX_EVEX_0FFC,
  1438. PREFIX_EVEX_0FFD,
  1439. PREFIX_EVEX_0FFE,
  1440. PREFIX_EVEX_0F3800,
  1441. PREFIX_EVEX_0F3804,
  1442. PREFIX_EVEX_0F380B,
  1443. PREFIX_EVEX_0F380C,
  1444. PREFIX_EVEX_0F380D,
  1445. PREFIX_EVEX_0F3810,
  1446. PREFIX_EVEX_0F3811,
  1447. PREFIX_EVEX_0F3812,
  1448. PREFIX_EVEX_0F3813,
  1449. PREFIX_EVEX_0F3814,
  1450. PREFIX_EVEX_0F3815,
  1451. PREFIX_EVEX_0F3816,
  1452. PREFIX_EVEX_0F3818,
  1453. PREFIX_EVEX_0F3819,
  1454. PREFIX_EVEX_0F381A,
  1455. PREFIX_EVEX_0F381B,
  1456. PREFIX_EVEX_0F381C,
  1457. PREFIX_EVEX_0F381D,
  1458. PREFIX_EVEX_0F381E,
  1459. PREFIX_EVEX_0F381F,
  1460. PREFIX_EVEX_0F3820,
  1461. PREFIX_EVEX_0F3821,
  1462. PREFIX_EVEX_0F3822,
  1463. PREFIX_EVEX_0F3823,
  1464. PREFIX_EVEX_0F3824,
  1465. PREFIX_EVEX_0F3825,
  1466. PREFIX_EVEX_0F3826,
  1467. PREFIX_EVEX_0F3827,
  1468. PREFIX_EVEX_0F3828,
  1469. PREFIX_EVEX_0F3829,
  1470. PREFIX_EVEX_0F382A,
  1471. PREFIX_EVEX_0F382B,
  1472. PREFIX_EVEX_0F382C,
  1473. PREFIX_EVEX_0F382D,
  1474. PREFIX_EVEX_0F3830,
  1475. PREFIX_EVEX_0F3831,
  1476. PREFIX_EVEX_0F3832,
  1477. PREFIX_EVEX_0F3833,
  1478. PREFIX_EVEX_0F3834,
  1479. PREFIX_EVEX_0F3835,
  1480. PREFIX_EVEX_0F3836,
  1481. PREFIX_EVEX_0F3837,
  1482. PREFIX_EVEX_0F3838,
  1483. PREFIX_EVEX_0F3839,
  1484. PREFIX_EVEX_0F383A,
  1485. PREFIX_EVEX_0F383B,
  1486. PREFIX_EVEX_0F383C,
  1487. PREFIX_EVEX_0F383D,
  1488. PREFIX_EVEX_0F383E,
  1489. PREFIX_EVEX_0F383F,
  1490. PREFIX_EVEX_0F3840,
  1491. PREFIX_EVEX_0F3842,
  1492. PREFIX_EVEX_0F3843,
  1493. PREFIX_EVEX_0F3844,
  1494. PREFIX_EVEX_0F3845,
  1495. PREFIX_EVEX_0F3846,
  1496. PREFIX_EVEX_0F3847,
  1497. PREFIX_EVEX_0F384C,
  1498. PREFIX_EVEX_0F384D,
  1499. PREFIX_EVEX_0F384E,
  1500. PREFIX_EVEX_0F384F,
  1501. PREFIX_EVEX_0F3852,
  1502. PREFIX_EVEX_0F3853,
  1503. PREFIX_EVEX_0F3855,
  1504. PREFIX_EVEX_0F3858,
  1505. PREFIX_EVEX_0F3859,
  1506. PREFIX_EVEX_0F385A,
  1507. PREFIX_EVEX_0F385B,
  1508. PREFIX_EVEX_0F3864,
  1509. PREFIX_EVEX_0F3865,
  1510. PREFIX_EVEX_0F3866,
  1511. PREFIX_EVEX_0F3875,
  1512. PREFIX_EVEX_0F3876,
  1513. PREFIX_EVEX_0F3877,
  1514. PREFIX_EVEX_0F3878,
  1515. PREFIX_EVEX_0F3879,
  1516. PREFIX_EVEX_0F387A,
  1517. PREFIX_EVEX_0F387B,
  1518. PREFIX_EVEX_0F387C,
  1519. PREFIX_EVEX_0F387D,
  1520. PREFIX_EVEX_0F387E,
  1521. PREFIX_EVEX_0F387F,
  1522. PREFIX_EVEX_0F3883,
  1523. PREFIX_EVEX_0F3888,
  1524. PREFIX_EVEX_0F3889,
  1525. PREFIX_EVEX_0F388A,
  1526. PREFIX_EVEX_0F388B,
  1527. PREFIX_EVEX_0F388D,
  1528. PREFIX_EVEX_0F3890,
  1529. PREFIX_EVEX_0F3891,
  1530. PREFIX_EVEX_0F3892,
  1531. PREFIX_EVEX_0F3893,
  1532. PREFIX_EVEX_0F3896,
  1533. PREFIX_EVEX_0F3897,
  1534. PREFIX_EVEX_0F3898,
  1535. PREFIX_EVEX_0F3899,
  1536. PREFIX_EVEX_0F389A,
  1537. PREFIX_EVEX_0F389B,
  1538. PREFIX_EVEX_0F389C,
  1539. PREFIX_EVEX_0F389D,
  1540. PREFIX_EVEX_0F389E,
  1541. PREFIX_EVEX_0F389F,
  1542. PREFIX_EVEX_0F38A0,
  1543. PREFIX_EVEX_0F38A1,
  1544. PREFIX_EVEX_0F38A2,
  1545. PREFIX_EVEX_0F38A3,
  1546. PREFIX_EVEX_0F38A6,
  1547. PREFIX_EVEX_0F38A7,
  1548. PREFIX_EVEX_0F38A8,
  1549. PREFIX_EVEX_0F38A9,
  1550. PREFIX_EVEX_0F38AA,
  1551. PREFIX_EVEX_0F38AB,
  1552. PREFIX_EVEX_0F38AC,
  1553. PREFIX_EVEX_0F38AD,
  1554. PREFIX_EVEX_0F38AE,
  1555. PREFIX_EVEX_0F38AF,
  1556. PREFIX_EVEX_0F38B4,
  1557. PREFIX_EVEX_0F38B5,
  1558. PREFIX_EVEX_0F38B6,
  1559. PREFIX_EVEX_0F38B7,
  1560. PREFIX_EVEX_0F38B8,
  1561. PREFIX_EVEX_0F38B9,
  1562. PREFIX_EVEX_0F38BA,
  1563. PREFIX_EVEX_0F38BB,
  1564. PREFIX_EVEX_0F38BC,
  1565. PREFIX_EVEX_0F38BD,
  1566. PREFIX_EVEX_0F38BE,
  1567. PREFIX_EVEX_0F38BF,
  1568. PREFIX_EVEX_0F38C4,
  1569. PREFIX_EVEX_0F38C6_REG_1,
  1570. PREFIX_EVEX_0F38C6_REG_2,
  1571. PREFIX_EVEX_0F38C6_REG_5,
  1572. PREFIX_EVEX_0F38C6_REG_6,
  1573. PREFIX_EVEX_0F38C7_REG_1,
  1574. PREFIX_EVEX_0F38C7_REG_2,
  1575. PREFIX_EVEX_0F38C7_REG_5,
  1576. PREFIX_EVEX_0F38C7_REG_6,
  1577. PREFIX_EVEX_0F38C8,
  1578. PREFIX_EVEX_0F38CA,
  1579. PREFIX_EVEX_0F38CB,
  1580. PREFIX_EVEX_0F38CC,
  1581. PREFIX_EVEX_0F38CD,
  1582. PREFIX_EVEX_0F3A00,
  1583. PREFIX_EVEX_0F3A01,
  1584. PREFIX_EVEX_0F3A03,
  1585. PREFIX_EVEX_0F3A04,
  1586. PREFIX_EVEX_0F3A05,
  1587. PREFIX_EVEX_0F3A08,
  1588. PREFIX_EVEX_0F3A09,
  1589. PREFIX_EVEX_0F3A0A,
  1590. PREFIX_EVEX_0F3A0B,
  1591. PREFIX_EVEX_0F3A0F,
  1592. PREFIX_EVEX_0F3A14,
  1593. PREFIX_EVEX_0F3A15,
  1594. PREFIX_EVEX_0F3A16,
  1595. PREFIX_EVEX_0F3A17,
  1596. PREFIX_EVEX_0F3A18,
  1597. PREFIX_EVEX_0F3A19,
  1598. PREFIX_EVEX_0F3A1A,
  1599. PREFIX_EVEX_0F3A1B,
  1600. PREFIX_EVEX_0F3A1D,
  1601. PREFIX_EVEX_0F3A1E,
  1602. PREFIX_EVEX_0F3A1F,
  1603. PREFIX_EVEX_0F3A20,
  1604. PREFIX_EVEX_0F3A21,
  1605. PREFIX_EVEX_0F3A22,
  1606. PREFIX_EVEX_0F3A23,
  1607. PREFIX_EVEX_0F3A25,
  1608. PREFIX_EVEX_0F3A26,
  1609. PREFIX_EVEX_0F3A27,
  1610. PREFIX_EVEX_0F3A38,
  1611. PREFIX_EVEX_0F3A39,
  1612. PREFIX_EVEX_0F3A3A,
  1613. PREFIX_EVEX_0F3A3B,
  1614. PREFIX_EVEX_0F3A3E,
  1615. PREFIX_EVEX_0F3A3F,
  1616. PREFIX_EVEX_0F3A42,
  1617. PREFIX_EVEX_0F3A43,
  1618. PREFIX_EVEX_0F3A50,
  1619. PREFIX_EVEX_0F3A51,
  1620. PREFIX_EVEX_0F3A54,
  1621. PREFIX_EVEX_0F3A55,
  1622. PREFIX_EVEX_0F3A56,
  1623. PREFIX_EVEX_0F3A57,
  1624. PREFIX_EVEX_0F3A66,
  1625. PREFIX_EVEX_0F3A67
  1626. };
  1627. enum
  1628. {
  1629. X86_64_06 = 0,
  1630. X86_64_07,
  1631. X86_64_0D,
  1632. X86_64_16,
  1633. X86_64_17,
  1634. X86_64_1E,
  1635. X86_64_1F,
  1636. X86_64_27,
  1637. X86_64_2F,
  1638. X86_64_37,
  1639. X86_64_3F,
  1640. X86_64_60,
  1641. X86_64_61,
  1642. X86_64_62,
  1643. X86_64_63,
  1644. X86_64_6D,
  1645. X86_64_6F,
  1646. X86_64_82,
  1647. X86_64_9A,
  1648. X86_64_C4,
  1649. X86_64_C5,
  1650. X86_64_CE,
  1651. X86_64_D4,
  1652. X86_64_D5,
  1653. X86_64_E8,
  1654. X86_64_E9,
  1655. X86_64_EA,
  1656. X86_64_0F01_REG_0,
  1657. X86_64_0F01_REG_1,
  1658. X86_64_0F01_REG_2,
  1659. X86_64_0F01_REG_3
  1660. };
  1661. enum
  1662. {
  1663. THREE_BYTE_0F38 = 0,
  1664. THREE_BYTE_0F3A
  1665. };
  1666. enum
  1667. {
  1668. XOP_08 = 0,
  1669. XOP_09,
  1670. XOP_0A
  1671. };
  1672. enum
  1673. {
  1674. VEX_0F = 0,
  1675. VEX_0F38,
  1676. VEX_0F3A
  1677. };
  1678. enum
  1679. {
  1680. EVEX_0F = 0,
  1681. EVEX_0F38,
  1682. EVEX_0F3A
  1683. };
  1684. enum
  1685. {
  1686. VEX_LEN_0F10_P_1 = 0,
  1687. VEX_LEN_0F10_P_3,
  1688. VEX_LEN_0F11_P_1,
  1689. VEX_LEN_0F11_P_3,
  1690. VEX_LEN_0F12_P_0_M_0,
  1691. VEX_LEN_0F12_P_0_M_1,
  1692. VEX_LEN_0F12_P_2,
  1693. VEX_LEN_0F13_M_0,
  1694. VEX_LEN_0F16_P_0_M_0,
  1695. VEX_LEN_0F16_P_0_M_1,
  1696. VEX_LEN_0F16_P_2,
  1697. VEX_LEN_0F17_M_0,
  1698. VEX_LEN_0F2A_P_1,
  1699. VEX_LEN_0F2A_P_3,
  1700. VEX_LEN_0F2C_P_1,
  1701. VEX_LEN_0F2C_P_3,
  1702. VEX_LEN_0F2D_P_1,
  1703. VEX_LEN_0F2D_P_3,
  1704. VEX_LEN_0F2E_P_0,
  1705. VEX_LEN_0F2E_P_2,
  1706. VEX_LEN_0F2F_P_0,
  1707. VEX_LEN_0F2F_P_2,
  1708. VEX_LEN_0F41_P_0,
  1709. VEX_LEN_0F41_P_2,
  1710. VEX_LEN_0F42_P_0,
  1711. VEX_LEN_0F42_P_2,
  1712. VEX_LEN_0F44_P_0,
  1713. VEX_LEN_0F44_P_2,
  1714. VEX_LEN_0F45_P_0,
  1715. VEX_LEN_0F45_P_2,
  1716. VEX_LEN_0F46_P_0,
  1717. VEX_LEN_0F46_P_2,
  1718. VEX_LEN_0F47_P_0,
  1719. VEX_LEN_0F47_P_2,
  1720. VEX_LEN_0F4A_P_0,
  1721. VEX_LEN_0F4A_P_2,
  1722. VEX_LEN_0F4B_P_0,
  1723. VEX_LEN_0F4B_P_2,
  1724. VEX_LEN_0F51_P_1,
  1725. VEX_LEN_0F51_P_3,
  1726. VEX_LEN_0F52_P_1,
  1727. VEX_LEN_0F53_P_1,
  1728. VEX_LEN_0F58_P_1,
  1729. VEX_LEN_0F58_P_3,
  1730. VEX_LEN_0F59_P_1,
  1731. VEX_LEN_0F59_P_3,
  1732. VEX_LEN_0F5A_P_1,
  1733. VEX_LEN_0F5A_P_3,
  1734. VEX_LEN_0F5C_P_1,
  1735. VEX_LEN_0F5C_P_3,
  1736. VEX_LEN_0F5D_P_1,
  1737. VEX_LEN_0F5D_P_3,
  1738. VEX_LEN_0F5E_P_1,
  1739. VEX_LEN_0F5E_P_3,
  1740. VEX_LEN_0F5F_P_1,
  1741. VEX_LEN_0F5F_P_3,
  1742. VEX_LEN_0F6E_P_2,
  1743. VEX_LEN_0F7E_P_1,
  1744. VEX_LEN_0F7E_P_2,
  1745. VEX_LEN_0F90_P_0,
  1746. VEX_LEN_0F90_P_2,
  1747. VEX_LEN_0F91_P_0,
  1748. VEX_LEN_0F91_P_2,
  1749. VEX_LEN_0F92_P_0,
  1750. VEX_LEN_0F92_P_2,
  1751. VEX_LEN_0F92_P_3,
  1752. VEX_LEN_0F93_P_0,
  1753. VEX_LEN_0F93_P_2,
  1754. VEX_LEN_0F93_P_3,
  1755. VEX_LEN_0F98_P_0,
  1756. VEX_LEN_0F98_P_2,
  1757. VEX_LEN_0F99_P_0,
  1758. VEX_LEN_0F99_P_2,
  1759. VEX_LEN_0FAE_R_2_M_0,
  1760. VEX_LEN_0FAE_R_3_M_0,
  1761. VEX_LEN_0FC2_P_1,
  1762. VEX_LEN_0FC2_P_3,
  1763. VEX_LEN_0FC4_P_2,
  1764. VEX_LEN_0FC5_P_2,
  1765. VEX_LEN_0FD6_P_2,
  1766. VEX_LEN_0FF7_P_2,
  1767. VEX_LEN_0F3816_P_2,
  1768. VEX_LEN_0F3819_P_2,
  1769. VEX_LEN_0F381A_P_2_M_0,
  1770. VEX_LEN_0F3836_P_2,
  1771. VEX_LEN_0F3841_P_2,
  1772. VEX_LEN_0F385A_P_2_M_0,
  1773. VEX_LEN_0F38DB_P_2,
  1774. VEX_LEN_0F38DC_P_2,
  1775. VEX_LEN_0F38DD_P_2,
  1776. VEX_LEN_0F38DE_P_2,
  1777. VEX_LEN_0F38DF_P_2,
  1778. VEX_LEN_0F38F2_P_0,
  1779. VEX_LEN_0F38F3_R_1_P_0,
  1780. VEX_LEN_0F38F3_R_2_P_0,
  1781. VEX_LEN_0F38F3_R_3_P_0,
  1782. VEX_LEN_0F38F5_P_0,
  1783. VEX_LEN_0F38F5_P_1,
  1784. VEX_LEN_0F38F5_P_3,
  1785. VEX_LEN_0F38F6_P_3,
  1786. VEX_LEN_0F38F7_P_0,
  1787. VEX_LEN_0F38F7_P_1,
  1788. VEX_LEN_0F38F7_P_2,
  1789. VEX_LEN_0F38F7_P_3,
  1790. VEX_LEN_0F3A00_P_2,
  1791. VEX_LEN_0F3A01_P_2,
  1792. VEX_LEN_0F3A06_P_2,
  1793. VEX_LEN_0F3A0A_P_2,
  1794. VEX_LEN_0F3A0B_P_2,
  1795. VEX_LEN_0F3A14_P_2,
  1796. VEX_LEN_0F3A15_P_2,
  1797. VEX_LEN_0F3A16_P_2,
  1798. VEX_LEN_0F3A17_P_2,
  1799. VEX_LEN_0F3A18_P_2,
  1800. VEX_LEN_0F3A19_P_2,
  1801. VEX_LEN_0F3A20_P_2,
  1802. VEX_LEN_0F3A21_P_2,
  1803. VEX_LEN_0F3A22_P_2,
  1804. VEX_LEN_0F3A30_P_2,
  1805. VEX_LEN_0F3A31_P_2,
  1806. VEX_LEN_0F3A32_P_2,
  1807. VEX_LEN_0F3A33_P_2,
  1808. VEX_LEN_0F3A38_P_2,
  1809. VEX_LEN_0F3A39_P_2,
  1810. VEX_LEN_0F3A41_P_2,
  1811. VEX_LEN_0F3A44_P_2,
  1812. VEX_LEN_0F3A46_P_2,
  1813. VEX_LEN_0F3A60_P_2,
  1814. VEX_LEN_0F3A61_P_2,
  1815. VEX_LEN_0F3A62_P_2,
  1816. VEX_LEN_0F3A63_P_2,
  1817. VEX_LEN_0F3A6A_P_2,
  1818. VEX_LEN_0F3A6B_P_2,
  1819. VEX_LEN_0F3A6E_P_2,
  1820. VEX_LEN_0F3A6F_P_2,
  1821. VEX_LEN_0F3A7A_P_2,
  1822. VEX_LEN_0F3A7B_P_2,
  1823. VEX_LEN_0F3A7E_P_2,
  1824. VEX_LEN_0F3A7F_P_2,
  1825. VEX_LEN_0F3ADF_P_2,
  1826. VEX_LEN_0F3AF0_P_3,
  1827. VEX_LEN_0FXOP_08_CC,
  1828. VEX_LEN_0FXOP_08_CD,
  1829. VEX_LEN_0FXOP_08_CE,
  1830. VEX_LEN_0FXOP_08_CF,
  1831. VEX_LEN_0FXOP_08_EC,
  1832. VEX_LEN_0FXOP_08_ED,
  1833. VEX_LEN_0FXOP_08_EE,
  1834. VEX_LEN_0FXOP_08_EF,
  1835. VEX_LEN_0FXOP_09_80,
  1836. VEX_LEN_0FXOP_09_81
  1837. };
  1838. enum
  1839. {
  1840. VEX_W_0F10_P_0 = 0,
  1841. VEX_W_0F10_P_1,
  1842. VEX_W_0F10_P_2,
  1843. VEX_W_0F10_P_3,
  1844. VEX_W_0F11_P_0,
  1845. VEX_W_0F11_P_1,
  1846. VEX_W_0F11_P_2,
  1847. VEX_W_0F11_P_3,
  1848. VEX_W_0F12_P_0_M_0,
  1849. VEX_W_0F12_P_0_M_1,
  1850. VEX_W_0F12_P_1,
  1851. VEX_W_0F12_P_2,
  1852. VEX_W_0F12_P_3,
  1853. VEX_W_0F13_M_0,
  1854. VEX_W_0F14,
  1855. VEX_W_0F15,
  1856. VEX_W_0F16_P_0_M_0,
  1857. VEX_W_0F16_P_0_M_1,
  1858. VEX_W_0F16_P_1,
  1859. VEX_W_0F16_P_2,
  1860. VEX_W_0F17_M_0,
  1861. VEX_W_0F28,
  1862. VEX_W_0F29,
  1863. VEX_W_0F2B_M_0,
  1864. VEX_W_0F2E_P_0,
  1865. VEX_W_0F2E_P_2,
  1866. VEX_W_0F2F_P_0,
  1867. VEX_W_0F2F_P_2,
  1868. VEX_W_0F41_P_0_LEN_1,
  1869. VEX_W_0F41_P_2_LEN_1,
  1870. VEX_W_0F42_P_0_LEN_1,
  1871. VEX_W_0F42_P_2_LEN_1,
  1872. VEX_W_0F44_P_0_LEN_0,
  1873. VEX_W_0F44_P_2_LEN_0,
  1874. VEX_W_0F45_P_0_LEN_1,
  1875. VEX_W_0F45_P_2_LEN_1,
  1876. VEX_W_0F46_P_0_LEN_1,
  1877. VEX_W_0F46_P_2_LEN_1,
  1878. VEX_W_0F47_P_0_LEN_1,
  1879. VEX_W_0F47_P_2_LEN_1,
  1880. VEX_W_0F4A_P_0_LEN_1,
  1881. VEX_W_0F4A_P_2_LEN_1,
  1882. VEX_W_0F4B_P_0_LEN_1,
  1883. VEX_W_0F4B_P_2_LEN_1,
  1884. VEX_W_0F50_M_0,
  1885. VEX_W_0F51_P_0,
  1886. VEX_W_0F51_P_1,
  1887. VEX_W_0F51_P_2,
  1888. VEX_W_0F51_P_3,
  1889. VEX_W_0F52_P_0,
  1890. VEX_W_0F52_P_1,
  1891. VEX_W_0F53_P_0,
  1892. VEX_W_0F53_P_1,
  1893. VEX_W_0F58_P_0,
  1894. VEX_W_0F58_P_1,
  1895. VEX_W_0F58_P_2,
  1896. VEX_W_0F58_P_3,
  1897. VEX_W_0F59_P_0,
  1898. VEX_W_0F59_P_1,
  1899. VEX_W_0F59_P_2,
  1900. VEX_W_0F59_P_3,
  1901. VEX_W_0F5A_P_0,
  1902. VEX_W_0F5A_P_1,
  1903. VEX_W_0F5A_P_3,
  1904. VEX_W_0F5B_P_0,
  1905. VEX_W_0F5B_P_1,
  1906. VEX_W_0F5B_P_2,
  1907. VEX_W_0F5C_P_0,
  1908. VEX_W_0F5C_P_1,
  1909. VEX_W_0F5C_P_2,
  1910. VEX_W_0F5C_P_3,
  1911. VEX_W_0F5D_P_0,
  1912. VEX_W_0F5D_P_1,
  1913. VEX_W_0F5D_P_2,
  1914. VEX_W_0F5D_P_3,
  1915. VEX_W_0F5E_P_0,
  1916. VEX_W_0F5E_P_1,
  1917. VEX_W_0F5E_P_2,
  1918. VEX_W_0F5E_P_3,
  1919. VEX_W_0F5F_P_0,
  1920. VEX_W_0F5F_P_1,
  1921. VEX_W_0F5F_P_2,
  1922. VEX_W_0F5F_P_3,
  1923. VEX_W_0F60_P_2,
  1924. VEX_W_0F61_P_2,
  1925. VEX_W_0F62_P_2,
  1926. VEX_W_0F63_P_2,
  1927. VEX_W_0F64_P_2,
  1928. VEX_W_0F65_P_2,
  1929. VEX_W_0F66_P_2,
  1930. VEX_W_0F67_P_2,
  1931. VEX_W_0F68_P_2,
  1932. VEX_W_0F69_P_2,
  1933. VEX_W_0F6A_P_2,
  1934. VEX_W_0F6B_P_2,
  1935. VEX_W_0F6C_P_2,
  1936. VEX_W_0F6D_P_2,
  1937. VEX_W_0F6F_P_1,
  1938. VEX_W_0F6F_P_2,
  1939. VEX_W_0F70_P_1,
  1940. VEX_W_0F70_P_2,
  1941. VEX_W_0F70_P_3,
  1942. VEX_W_0F71_R_2_P_2,
  1943. VEX_W_0F71_R_4_P_2,
  1944. VEX_W_0F71_R_6_P_2,
  1945. VEX_W_0F72_R_2_P_2,
  1946. VEX_W_0F72_R_4_P_2,
  1947. VEX_W_0F72_R_6_P_2,
  1948. VEX_W_0F73_R_2_P_2,
  1949. VEX_W_0F73_R_3_P_2,
  1950. VEX_W_0F73_R_6_P_2,
  1951. VEX_W_0F73_R_7_P_2,
  1952. VEX_W_0F74_P_2,
  1953. VEX_W_0F75_P_2,
  1954. VEX_W_0F76_P_2,
  1955. VEX_W_0F77_P_0,
  1956. VEX_W_0F7C_P_2,
  1957. VEX_W_0F7C_P_3,
  1958. VEX_W_0F7D_P_2,
  1959. VEX_W_0F7D_P_3,
  1960. VEX_W_0F7E_P_1,
  1961. VEX_W_0F7F_P_1,
  1962. VEX_W_0F7F_P_2,
  1963. VEX_W_0F90_P_0_LEN_0,
  1964. VEX_W_0F90_P_2_LEN_0,
  1965. VEX_W_0F91_P_0_LEN_0,
  1966. VEX_W_0F91_P_2_LEN_0,
  1967. VEX_W_0F92_P_0_LEN_0,
  1968. VEX_W_0F92_P_2_LEN_0,
  1969. VEX_W_0F92_P_3_LEN_0,
  1970. VEX_W_0F93_P_0_LEN_0,
  1971. VEX_W_0F93_P_2_LEN_0,
  1972. VEX_W_0F93_P_3_LEN_0,
  1973. VEX_W_0F98_P_0_LEN_0,
  1974. VEX_W_0F98_P_2_LEN_0,
  1975. VEX_W_0F99_P_0_LEN_0,
  1976. VEX_W_0F99_P_2_LEN_0,
  1977. VEX_W_0FAE_R_2_M_0,
  1978. VEX_W_0FAE_R_3_M_0,
  1979. VEX_W_0FC2_P_0,
  1980. VEX_W_0FC2_P_1,
  1981. VEX_W_0FC2_P_2,
  1982. VEX_W_0FC2_P_3,
  1983. VEX_W_0FC4_P_2,
  1984. VEX_W_0FC5_P_2,
  1985. VEX_W_0FD0_P_2,
  1986. VEX_W_0FD0_P_3,
  1987. VEX_W_0FD1_P_2,
  1988. VEX_W_0FD2_P_2,
  1989. VEX_W_0FD3_P_2,
  1990. VEX_W_0FD4_P_2,
  1991. VEX_W_0FD5_P_2,
  1992. VEX_W_0FD6_P_2,
  1993. VEX_W_0FD7_P_2_M_1,
  1994. VEX_W_0FD8_P_2,
  1995. VEX_W_0FD9_P_2,
  1996. VEX_W_0FDA_P_2,
  1997. VEX_W_0FDB_P_2,
  1998. VEX_W_0FDC_P_2,
  1999. VEX_W_0FDD_P_2,
  2000. VEX_W_0FDE_P_2,
  2001. VEX_W_0FDF_P_2,
  2002. VEX_W_0FE0_P_2,
  2003. VEX_W_0FE1_P_2,
  2004. VEX_W_0FE2_P_2,
  2005. VEX_W_0FE3_P_2,
  2006. VEX_W_0FE4_P_2,
  2007. VEX_W_0FE5_P_2,
  2008. VEX_W_0FE6_P_1,
  2009. VEX_W_0FE6_P_2,
  2010. VEX_W_0FE6_P_3,
  2011. VEX_W_0FE7_P_2_M_0,
  2012. VEX_W_0FE8_P_2,
  2013. VEX_W_0FE9_P_2,
  2014. VEX_W_0FEA_P_2,
  2015. VEX_W_0FEB_P_2,
  2016. VEX_W_0FEC_P_2,
  2017. VEX_W_0FED_P_2,
  2018. VEX_W_0FEE_P_2,
  2019. VEX_W_0FEF_P_2,
  2020. VEX_W_0FF0_P_3_M_0,
  2021. VEX_W_0FF1_P_2,
  2022. VEX_W_0FF2_P_2,
  2023. VEX_W_0FF3_P_2,
  2024. VEX_W_0FF4_P_2,
  2025. VEX_W_0FF5_P_2,
  2026. VEX_W_0FF6_P_2,
  2027. VEX_W_0FF7_P_2,
  2028. VEX_W_0FF8_P_2,
  2029. VEX_W_0FF9_P_2,
  2030. VEX_W_0FFA_P_2,
  2031. VEX_W_0FFB_P_2,
  2032. VEX_W_0FFC_P_2,
  2033. VEX_W_0FFD_P_2,
  2034. VEX_W_0FFE_P_2,
  2035. VEX_W_0F3800_P_2,
  2036. VEX_W_0F3801_P_2,
  2037. VEX_W_0F3802_P_2,
  2038. VEX_W_0F3803_P_2,
  2039. VEX_W_0F3804_P_2,
  2040. VEX_W_0F3805_P_2,
  2041. VEX_W_0F3806_P_2,
  2042. VEX_W_0F3807_P_2,
  2043. VEX_W_0F3808_P_2,
  2044. VEX_W_0F3809_P_2,
  2045. VEX_W_0F380A_P_2,
  2046. VEX_W_0F380B_P_2,
  2047. VEX_W_0F380C_P_2,
  2048. VEX_W_0F380D_P_2,
  2049. VEX_W_0F380E_P_2,
  2050. VEX_W_0F380F_P_2,
  2051. VEX_W_0F3816_P_2,
  2052. VEX_W_0F3817_P_2,
  2053. VEX_W_0F3818_P_2,
  2054. VEX_W_0F3819_P_2,
  2055. VEX_W_0F381A_P_2_M_0,
  2056. VEX_W_0F381C_P_2,
  2057. VEX_W_0F381D_P_2,
  2058. VEX_W_0F381E_P_2,
  2059. VEX_W_0F3820_P_2,
  2060. VEX_W_0F3821_P_2,
  2061. VEX_W_0F3822_P_2,
  2062. VEX_W_0F3823_P_2,
  2063. VEX_W_0F3824_P_2,
  2064. VEX_W_0F3825_P_2,
  2065. VEX_W_0F3828_P_2,
  2066. VEX_W_0F3829_P_2,
  2067. VEX_W_0F382A_P_2_M_0,
  2068. VEX_W_0F382B_P_2,
  2069. VEX_W_0F382C_P_2_M_0,
  2070. VEX_W_0F382D_P_2_M_0,
  2071. VEX_W_0F382E_P_2_M_0,
  2072. VEX_W_0F382F_P_2_M_0,
  2073. VEX_W_0F3830_P_2,
  2074. VEX_W_0F3831_P_2,
  2075. VEX_W_0F3832_P_2,
  2076. VEX_W_0F3833_P_2,
  2077. VEX_W_0F3834_P_2,
  2078. VEX_W_0F3835_P_2,
  2079. VEX_W_0F3836_P_2,
  2080. VEX_W_0F3837_P_2,
  2081. VEX_W_0F3838_P_2,
  2082. VEX_W_0F3839_P_2,
  2083. VEX_W_0F383A_P_2,
  2084. VEX_W_0F383B_P_2,
  2085. VEX_W_0F383C_P_2,
  2086. VEX_W_0F383D_P_2,
  2087. VEX_W_0F383E_P_2,
  2088. VEX_W_0F383F_P_2,
  2089. VEX_W_0F3840_P_2,
  2090. VEX_W_0F3841_P_2,
  2091. VEX_W_0F3846_P_2,
  2092. VEX_W_0F3858_P_2,
  2093. VEX_W_0F3859_P_2,
  2094. VEX_W_0F385A_P_2_M_0,
  2095. VEX_W_0F3878_P_2,
  2096. VEX_W_0F3879_P_2,
  2097. VEX_W_0F38DB_P_2,
  2098. VEX_W_0F38DC_P_2,
  2099. VEX_W_0F38DD_P_2,
  2100. VEX_W_0F38DE_P_2,
  2101. VEX_W_0F38DF_P_2,
  2102. VEX_W_0F3A00_P_2,
  2103. VEX_W_0F3A01_P_2,
  2104. VEX_W_0F3A02_P_2,
  2105. VEX_W_0F3A04_P_2,
  2106. VEX_W_0F3A05_P_2,
  2107. VEX_W_0F3A06_P_2,
  2108. VEX_W_0F3A08_P_2,
  2109. VEX_W_0F3A09_P_2,
  2110. VEX_W_0F3A0A_P_2,
  2111. VEX_W_0F3A0B_P_2,
  2112. VEX_W_0F3A0C_P_2,
  2113. VEX_W_0F3A0D_P_2,
  2114. VEX_W_0F3A0E_P_2,
  2115. VEX_W_0F3A0F_P_2,
  2116. VEX_W_0F3A14_P_2,
  2117. VEX_W_0F3A15_P_2,
  2118. VEX_W_0F3A18_P_2,
  2119. VEX_W_0F3A19_P_2,
  2120. VEX_W_0F3A20_P_2,
  2121. VEX_W_0F3A21_P_2,
  2122. VEX_W_0F3A30_P_2_LEN_0,
  2123. VEX_W_0F3A31_P_2_LEN_0,
  2124. VEX_W_0F3A32_P_2_LEN_0,
  2125. VEX_W_0F3A33_P_2_LEN_0,
  2126. VEX_W_0F3A38_P_2,
  2127. VEX_W_0F3A39_P_2,
  2128. VEX_W_0F3A40_P_2,
  2129. VEX_W_0F3A41_P_2,
  2130. VEX_W_0F3A42_P_2,
  2131. VEX_W_0F3A44_P_2,
  2132. VEX_W_0F3A46_P_2,
  2133. VEX_W_0F3A48_P_2,
  2134. VEX_W_0F3A49_P_2,
  2135. VEX_W_0F3A4A_P_2,
  2136. VEX_W_0F3A4B_P_2,
  2137. VEX_W_0F3A4C_P_2,
  2138. VEX_W_0F3A62_P_2,
  2139. VEX_W_0F3A63_P_2,
  2140. VEX_W_0F3ADF_P_2,
  2141. EVEX_W_0F10_P_0,
  2142. EVEX_W_0F10_P_1_M_0,
  2143. EVEX_W_0F10_P_1_M_1,
  2144. EVEX_W_0F10_P_2,
  2145. EVEX_W_0F10_P_3_M_0,
  2146. EVEX_W_0F10_P_3_M_1,
  2147. EVEX_W_0F11_P_0,
  2148. EVEX_W_0F11_P_1_M_0,
  2149. EVEX_W_0F11_P_1_M_1,
  2150. EVEX_W_0F11_P_2,
  2151. EVEX_W_0F11_P_3_M_0,
  2152. EVEX_W_0F11_P_3_M_1,
  2153. EVEX_W_0F12_P_0_M_0,
  2154. EVEX_W_0F12_P_0_M_1,
  2155. EVEX_W_0F12_P_1,
  2156. EVEX_W_0F12_P_2,
  2157. EVEX_W_0F12_P_3,
  2158. EVEX_W_0F13_P_0,
  2159. EVEX_W_0F13_P_2,
  2160. EVEX_W_0F14_P_0,
  2161. EVEX_W_0F14_P_2,
  2162. EVEX_W_0F15_P_0,
  2163. EVEX_W_0F15_P_2,
  2164. EVEX_W_0F16_P_0_M_0,
  2165. EVEX_W_0F16_P_0_M_1,
  2166. EVEX_W_0F16_P_1,
  2167. EVEX_W_0F16_P_2,
  2168. EVEX_W_0F17_P_0,
  2169. EVEX_W_0F17_P_2,
  2170. EVEX_W_0F28_P_0,
  2171. EVEX_W_0F28_P_2,
  2172. EVEX_W_0F29_P_0,
  2173. EVEX_W_0F29_P_2,
  2174. EVEX_W_0F2A_P_1,
  2175. EVEX_W_0F2A_P_3,
  2176. EVEX_W_0F2B_P_0,
  2177. EVEX_W_0F2B_P_2,
  2178. EVEX_W_0F2E_P_0,
  2179. EVEX_W_0F2E_P_2,
  2180. EVEX_W_0F2F_P_0,
  2181. EVEX_W_0F2F_P_2,
  2182. EVEX_W_0F51_P_0,
  2183. EVEX_W_0F51_P_1,
  2184. EVEX_W_0F51_P_2,
  2185. EVEX_W_0F51_P_3,
  2186. EVEX_W_0F54_P_0,
  2187. EVEX_W_0F54_P_2,
  2188. EVEX_W_0F55_P_0,
  2189. EVEX_W_0F55_P_2,
  2190. EVEX_W_0F56_P_0,
  2191. EVEX_W_0F56_P_2,
  2192. EVEX_W_0F57_P_0,
  2193. EVEX_W_0F57_P_2,
  2194. EVEX_W_0F58_P_0,
  2195. EVEX_W_0F58_P_1,
  2196. EVEX_W_0F58_P_2,
  2197. EVEX_W_0F58_P_3,
  2198. EVEX_W_0F59_P_0,
  2199. EVEX_W_0F59_P_1,
  2200. EVEX_W_0F59_P_2,
  2201. EVEX_W_0F59_P_3,
  2202. EVEX_W_0F5A_P_0,
  2203. EVEX_W_0F5A_P_1,
  2204. EVEX_W_0F5A_P_2,
  2205. EVEX_W_0F5A_P_3,
  2206. EVEX_W_0F5B_P_0,
  2207. EVEX_W_0F5B_P_1,
  2208. EVEX_W_0F5B_P_2,
  2209. EVEX_W_0F5C_P_0,
  2210. EVEX_W_0F5C_P_1,
  2211. EVEX_W_0F5C_P_2,
  2212. EVEX_W_0F5C_P_3,
  2213. EVEX_W_0F5D_P_0,
  2214. EVEX_W_0F5D_P_1,
  2215. EVEX_W_0F5D_P_2,
  2216. EVEX_W_0F5D_P_3,
  2217. EVEX_W_0F5E_P_0,
  2218. EVEX_W_0F5E_P_1,
  2219. EVEX_W_0F5E_P_2,
  2220. EVEX_W_0F5E_P_3,
  2221. EVEX_W_0F5F_P_0,
  2222. EVEX_W_0F5F_P_1,
  2223. EVEX_W_0F5F_P_2,
  2224. EVEX_W_0F5F_P_3,
  2225. EVEX_W_0F62_P_2,
  2226. EVEX_W_0F66_P_2,
  2227. EVEX_W_0F6A_P_2,
  2228. EVEX_W_0F6B_P_2,
  2229. EVEX_W_0F6C_P_2,
  2230. EVEX_W_0F6D_P_2,
  2231. EVEX_W_0F6E_P_2,
  2232. EVEX_W_0F6F_P_1,
  2233. EVEX_W_0F6F_P_2,
  2234. EVEX_W_0F6F_P_3,
  2235. EVEX_W_0F70_P_2,
  2236. EVEX_W_0F72_R_2_P_2,
  2237. EVEX_W_0F72_R_6_P_2,
  2238. EVEX_W_0F73_R_2_P_2,
  2239. EVEX_W_0F73_R_6_P_2,
  2240. EVEX_W_0F76_P_2,
  2241. EVEX_W_0F78_P_0,
  2242. EVEX_W_0F78_P_2,
  2243. EVEX_W_0F79_P_0,
  2244. EVEX_W_0F79_P_2,
  2245. EVEX_W_0F7A_P_1,
  2246. EVEX_W_0F7A_P_2,
  2247. EVEX_W_0F7A_P_3,
  2248. EVEX_W_0F7B_P_1,
  2249. EVEX_W_0F7B_P_2,
  2250. EVEX_W_0F7B_P_3,
  2251. EVEX_W_0F7E_P_1,
  2252. EVEX_W_0F7E_P_2,
  2253. EVEX_W_0F7F_P_1,
  2254. EVEX_W_0F7F_P_2,
  2255. EVEX_W_0F7F_P_3,
  2256. EVEX_W_0FC2_P_0,
  2257. EVEX_W_0FC2_P_1,
  2258. EVEX_W_0FC2_P_2,
  2259. EVEX_W_0FC2_P_3,
  2260. EVEX_W_0FC6_P_0,
  2261. EVEX_W_0FC6_P_2,
  2262. EVEX_W_0FD2_P_2,
  2263. EVEX_W_0FD3_P_2,
  2264. EVEX_W_0FD4_P_2,
  2265. EVEX_W_0FD6_P_2,
  2266. EVEX_W_0FE6_P_1,
  2267. EVEX_W_0FE6_P_2,
  2268. EVEX_W_0FE6_P_3,
  2269. EVEX_W_0FE7_P_2,
  2270. EVEX_W_0FF2_P_2,
  2271. EVEX_W_0FF3_P_2,
  2272. EVEX_W_0FF4_P_2,
  2273. EVEX_W_0FFA_P_2,
  2274. EVEX_W_0FFB_P_2,
  2275. EVEX_W_0FFE_P_2,
  2276. EVEX_W_0F380C_P_2,
  2277. EVEX_W_0F380D_P_2,
  2278. EVEX_W_0F3810_P_1,
  2279. EVEX_W_0F3810_P_2,
  2280. EVEX_W_0F3811_P_1,
  2281. EVEX_W_0F3811_P_2,
  2282. EVEX_W_0F3812_P_1,
  2283. EVEX_W_0F3812_P_2,
  2284. EVEX_W_0F3813_P_1,
  2285. EVEX_W_0F3813_P_2,
  2286. EVEX_W_0F3814_P_1,
  2287. EVEX_W_0F3815_P_1,
  2288. EVEX_W_0F3818_P_2,
  2289. EVEX_W_0F3819_P_2,
  2290. EVEX_W_0F381A_P_2,
  2291. EVEX_W_0F381B_P_2,
  2292. EVEX_W_0F381E_P_2,
  2293. EVEX_W_0F381F_P_2,
  2294. EVEX_W_0F3820_P_1,
  2295. EVEX_W_0F3821_P_1,
  2296. EVEX_W_0F3822_P_1,
  2297. EVEX_W_0F3823_P_1,
  2298. EVEX_W_0F3824_P_1,
  2299. EVEX_W_0F3825_P_1,
  2300. EVEX_W_0F3825_P_2,
  2301. EVEX_W_0F3826_P_1,
  2302. EVEX_W_0F3826_P_2,
  2303. EVEX_W_0F3828_P_1,
  2304. EVEX_W_0F3828_P_2,
  2305. EVEX_W_0F3829_P_1,
  2306. EVEX_W_0F3829_P_2,
  2307. EVEX_W_0F382A_P_1,
  2308. EVEX_W_0F382A_P_2,
  2309. EVEX_W_0F382B_P_2,
  2310. EVEX_W_0F3830_P_1,
  2311. EVEX_W_0F3831_P_1,
  2312. EVEX_W_0F3832_P_1,
  2313. EVEX_W_0F3833_P_1,
  2314. EVEX_W_0F3834_P_1,
  2315. EVEX_W_0F3835_P_1,
  2316. EVEX_W_0F3835_P_2,
  2317. EVEX_W_0F3837_P_2,
  2318. EVEX_W_0F3838_P_1,
  2319. EVEX_W_0F3839_P_1,
  2320. EVEX_W_0F383A_P_1,
  2321. EVEX_W_0F3840_P_2,
  2322. EVEX_W_0F3855_P_2,
  2323. EVEX_W_0F3858_P_2,
  2324. EVEX_W_0F3859_P_2,
  2325. EVEX_W_0F385A_P_2,
  2326. EVEX_W_0F385B_P_2,
  2327. EVEX_W_0F3866_P_2,
  2328. EVEX_W_0F3875_P_2,
  2329. EVEX_W_0F3878_P_2,
  2330. EVEX_W_0F3879_P_2,
  2331. EVEX_W_0F387A_P_2,
  2332. EVEX_W_0F387B_P_2,
  2333. EVEX_W_0F387D_P_2,
  2334. EVEX_W_0F3883_P_2,
  2335. EVEX_W_0F388D_P_2,
  2336. EVEX_W_0F3891_P_2,
  2337. EVEX_W_0F3893_P_2,
  2338. EVEX_W_0F38A1_P_2,
  2339. EVEX_W_0F38A3_P_2,
  2340. EVEX_W_0F38C7_R_1_P_2,
  2341. EVEX_W_0F38C7_R_2_P_2,
  2342. EVEX_W_0F38C7_R_5_P_2,
  2343. EVEX_W_0F38C7_R_6_P_2,
  2344. EVEX_W_0F3A00_P_2,
  2345. EVEX_W_0F3A01_P_2,
  2346. EVEX_W_0F3A04_P_2,
  2347. EVEX_W_0F3A05_P_2,
  2348. EVEX_W_0F3A08_P_2,
  2349. EVEX_W_0F3A09_P_2,
  2350. EVEX_W_0F3A0A_P_2,
  2351. EVEX_W_0F3A0B_P_2,
  2352. EVEX_W_0F3A16_P_2,
  2353. EVEX_W_0F3A18_P_2,
  2354. EVEX_W_0F3A19_P_2,
  2355. EVEX_W_0F3A1A_P_2,
  2356. EVEX_W_0F3A1B_P_2,
  2357. EVEX_W_0F3A1D_P_2,
  2358. EVEX_W_0F3A21_P_2,
  2359. EVEX_W_0F3A22_P_2,
  2360. EVEX_W_0F3A23_P_2,
  2361. EVEX_W_0F3A38_P_2,
  2362. EVEX_W_0F3A39_P_2,
  2363. EVEX_W_0F3A3A_P_2,
  2364. EVEX_W_0F3A3B_P_2,
  2365. EVEX_W_0F3A3E_P_2,
  2366. EVEX_W_0F3A3F_P_2,
  2367. EVEX_W_0F3A42_P_2,
  2368. EVEX_W_0F3A43_P_2,
  2369. EVEX_W_0F3A50_P_2,
  2370. EVEX_W_0F3A51_P_2,
  2371. EVEX_W_0F3A56_P_2,
  2372. EVEX_W_0F3A57_P_2,
  2373. EVEX_W_0F3A66_P_2,
  2374. EVEX_W_0F3A67_P_2
  2375. };
  2376. typedef void (*op_rtn) (int bytemode, int sizeflag);
  2377. struct dis386 {
  2378. const char *name;
  2379. struct
  2380. {
  2381. op_rtn rtn;
  2382. int bytemode;
  2383. } op[MAX_OPERANDS];
  2384. unsigned int prefix_requirement;
  2385. };
  2386. /* Upper case letters in the instruction names here are macros.
  2387. 'A' => print 'b' if no register operands or suffix_always is true
  2388. 'B' => print 'b' if suffix_always is true
  2389. 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
  2390. size prefix
  2391. 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
  2392. suffix_always is true
  2393. 'E' => print 'e' if 32-bit form of jcxz
  2394. 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
  2395. 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
  2396. 'H' => print ",pt" or ",pn" branch hint
  2397. 'I' => honor following macro letter even in Intel mode (implemented only
  2398. for some of the macro letters)
  2399. 'J' => print 'l'
  2400. 'K' => print 'd' or 'q' if rex prefix is present.
  2401. 'L' => print 'l' if suffix_always is true
  2402. 'M' => print 'r' if intel_mnemonic is false.
  2403. 'N' => print 'n' if instruction has no wait "prefix"
  2404. 'O' => print 'd' or 'o' (or 'q' in Intel mode)
  2405. 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
  2406. or suffix_always is true. print 'q' if rex prefix is present.
  2407. 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
  2408. is true
  2409. 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
  2410. 'S' => print 'w', 'l' or 'q' if suffix_always is true
  2411. 'T' => print 'q' in 64bit mode if instruction has no operand size
  2412. prefix and behave as 'P' otherwise
  2413. 'U' => print 'q' in 64bit mode if instruction has no operand size
  2414. prefix and behave as 'Q' otherwise
  2415. 'V' => print 'q' in 64bit mode if instruction has no operand size
  2416. prefix and behave as 'S' otherwise
  2417. 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
  2418. 'X' => print 's', 'd' depending on data16 prefix (for XMM)
  2419. 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
  2420. suffix_always is true.
  2421. 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
  2422. '!' => change condition from true to false or from false to true.
  2423. '%' => add 1 upper case letter to the macro.
  2424. '^' => print 'w' or 'l' depending on operand size prefix or
  2425. suffix_always is true (lcall/ljmp).
  2426. '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
  2427. on operand size prefix.
  2428. '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
  2429. has no operand size prefix for AMD64 ISA, behave as 'P'
  2430. otherwise
  2431. 2 upper case letter macros:
  2432. "XY" => print 'x' or 'y' if suffix_always is true or no register
  2433. operands and no broadcast.
  2434. "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
  2435. register operands and no broadcast.
  2436. "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
  2437. "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
  2438. or suffix_always is true
  2439. "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
  2440. "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
  2441. "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
  2442. "LW" => print 'd', 'q' depending on the VEX.W bit
  2443. "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
  2444. an operand size prefix, or suffix_always is true. print
  2445. 'q' if rex prefix is present.
  2446. Many of the above letters print nothing in Intel mode. See "putop"
  2447. for the details.
  2448. Braces '{' and '}', and vertical bars '|', indicate alternative
  2449. mnemonic strings for AT&T and Intel. */
  2450. static const struct dis386 dis386[] = {
  2451. /* 00 */
  2452. { "addB", { Ebh1, Gb }, 0 },
  2453. { "addS", { Evh1, Gv }, 0 },
  2454. { "addB", { Gb, EbS }, 0 },
  2455. { "addS", { Gv, EvS }, 0 },
  2456. { "addB", { AL, Ib }, 0 },
  2457. { "addS", { eAX, Iv }, 0 },
  2458. { X86_64_TABLE (X86_64_06) },
  2459. { X86_64_TABLE (X86_64_07) },
  2460. /* 08 */
  2461. { "orB", { Ebh1, Gb }, 0 },
  2462. { "orS", { Evh1, Gv }, 0 },
  2463. { "orB", { Gb, EbS }, 0 },
  2464. { "orS", { Gv, EvS }, 0 },
  2465. { "orB", { AL, Ib }, 0 },
  2466. { "orS", { eAX, Iv }, 0 },
  2467. { X86_64_TABLE (X86_64_0D) },
  2468. { Bad_Opcode }, /* 0x0f extended opcode escape */
  2469. /* 10 */
  2470. { "adcB", { Ebh1, Gb }, 0 },
  2471. { "adcS", { Evh1, Gv }, 0 },
  2472. { "adcB", { Gb, EbS }, 0 },
  2473. { "adcS", { Gv, EvS }, 0 },
  2474. { "adcB", { AL, Ib }, 0 },
  2475. { "adcS", { eAX, Iv }, 0 },
  2476. { X86_64_TABLE (X86_64_16) },
  2477. { X86_64_TABLE (X86_64_17) },
  2478. /* 18 */
  2479. { "sbbB", { Ebh1, Gb }, 0 },
  2480. { "sbbS", { Evh1, Gv }, 0 },
  2481. { "sbbB", { Gb, EbS }, 0 },
  2482. { "sbbS", { Gv, EvS }, 0 },
  2483. { "sbbB", { AL, Ib }, 0 },
  2484. { "sbbS", { eAX, Iv }, 0 },
  2485. { X86_64_TABLE (X86_64_1E) },
  2486. { X86_64_TABLE (X86_64_1F) },
  2487. /* 20 */
  2488. { "andB", { Ebh1, Gb }, 0 },
  2489. { "andS", { Evh1, Gv }, 0 },
  2490. { "andB", { Gb, EbS }, 0 },
  2491. { "andS", { Gv, EvS }, 0 },
  2492. { "andB", { AL, Ib }, 0 },
  2493. { "andS", { eAX, Iv }, 0 },
  2494. { Bad_Opcode }, /* SEG ES prefix */
  2495. { X86_64_TABLE (X86_64_27) },
  2496. /* 28 */
  2497. { "subB", { Ebh1, Gb }, 0 },
  2498. { "subS", { Evh1, Gv }, 0 },
  2499. { "subB", { Gb, EbS }, 0 },
  2500. { "subS", { Gv, EvS }, 0 },
  2501. { "subB", { AL, Ib }, 0 },
  2502. { "subS", { eAX, Iv }, 0 },
  2503. { Bad_Opcode }, /* SEG CS prefix */
  2504. { X86_64_TABLE (X86_64_2F) },
  2505. /* 30 */
  2506. { "xorB", { Ebh1, Gb }, 0 },
  2507. { "xorS", { Evh1, Gv }, 0 },
  2508. { "xorB", { Gb, EbS }, 0 },
  2509. { "xorS", { Gv, EvS }, 0 },
  2510. { "xorB", { AL, Ib }, 0 },
  2511. { "xorS", { eAX, Iv }, 0 },
  2512. { Bad_Opcode }, /* SEG SS prefix */
  2513. { X86_64_TABLE (X86_64_37) },
  2514. /* 38 */
  2515. { "cmpB", { Eb, Gb }, 0 },
  2516. { "cmpS", { Ev, Gv }, 0 },
  2517. { "cmpB", { Gb, EbS }, 0 },
  2518. { "cmpS", { Gv, EvS }, 0 },
  2519. { "cmpB", { AL, Ib }, 0 },
  2520. { "cmpS", { eAX, Iv }, 0 },
  2521. { Bad_Opcode }, /* SEG DS prefix */
  2522. { X86_64_TABLE (X86_64_3F) },
  2523. /* 40 */
  2524. { "inc{S|}", { RMeAX }, 0 },
  2525. { "inc{S|}", { RMeCX }, 0 },
  2526. { "inc{S|}", { RMeDX }, 0 },
  2527. { "inc{S|}", { RMeBX }, 0 },
  2528. { "inc{S|}", { RMeSP }, 0 },
  2529. { "inc{S|}", { RMeBP }, 0 },
  2530. { "inc{S|}", { RMeSI }, 0 },
  2531. { "inc{S|}", { RMeDI }, 0 },
  2532. /* 48 */
  2533. { "dec{S|}", { RMeAX }, 0 },
  2534. { "dec{S|}", { RMeCX }, 0 },
  2535. { "dec{S|}", { RMeDX }, 0 },
  2536. { "dec{S|}", { RMeBX }, 0 },
  2537. { "dec{S|}", { RMeSP }, 0 },
  2538. { "dec{S|}", { RMeBP }, 0 },
  2539. { "dec{S|}", { RMeSI }, 0 },
  2540. { "dec{S|}", { RMeDI }, 0 },
  2541. /* 50 */
  2542. { "pushV", { RMrAX }, 0 },
  2543. { "pushV", { RMrCX }, 0 },
  2544. { "pushV", { RMrDX }, 0 },
  2545. { "pushV", { RMrBX }, 0 },
  2546. { "pushV", { RMrSP }, 0 },
  2547. { "pushV", { RMrBP }, 0 },
  2548. { "pushV", { RMrSI }, 0 },
  2549. { "pushV", { RMrDI }, 0 },
  2550. /* 58 */
  2551. { "popV", { RMrAX }, 0 },
  2552. { "popV", { RMrCX }, 0 },
  2553. { "popV", { RMrDX }, 0 },
  2554. { "popV", { RMrBX }, 0 },
  2555. { "popV", { RMrSP }, 0 },
  2556. { "popV", { RMrBP }, 0 },
  2557. { "popV", { RMrSI }, 0 },
  2558. { "popV", { RMrDI }, 0 },
  2559. /* 60 */
  2560. { X86_64_TABLE (X86_64_60) },
  2561. { X86_64_TABLE (X86_64_61) },
  2562. { X86_64_TABLE (X86_64_62) },
  2563. { X86_64_TABLE (X86_64_63) },
  2564. { Bad_Opcode }, /* seg fs */
  2565. { Bad_Opcode }, /* seg gs */
  2566. { Bad_Opcode }, /* op size prefix */
  2567. { Bad_Opcode }, /* adr size prefix */
  2568. /* 68 */
  2569. { "pushT", { sIv }, 0 },
  2570. { "imulS", { Gv, Ev, Iv }, 0 },
  2571. { "pushT", { sIbT }, 0 },
  2572. { "imulS", { Gv, Ev, sIb }, 0 },
  2573. { "ins{b|}", { Ybr, indirDX }, 0 },
  2574. { X86_64_TABLE (X86_64_6D) },
  2575. { "outs{b|}", { indirDXr, Xb }, 0 },
  2576. { X86_64_TABLE (X86_64_6F) },
  2577. /* 70 */
  2578. { "joH", { Jb, BND, cond_jump_flag }, 0 },
  2579. { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
  2580. { "jbH", { Jb, BND, cond_jump_flag }, 0 },
  2581. { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
  2582. { "jeH", { Jb, BND, cond_jump_flag }, 0 },
  2583. { "jneH", { Jb, BND, cond_jump_flag }, 0 },
  2584. { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
  2585. { "jaH", { Jb, BND, cond_jump_flag }, 0 },
  2586. /* 78 */
  2587. { "jsH", { Jb, BND, cond_jump_flag }, 0 },
  2588. { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
  2589. { "jpH", { Jb, BND, cond_jump_flag }, 0 },
  2590. { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
  2591. { "jlH", { Jb, BND, cond_jump_flag }, 0 },
  2592. { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
  2593. { "jleH", { Jb, BND, cond_jump_flag }, 0 },
  2594. { "jgH", { Jb, BND, cond_jump_flag }, 0 },
  2595. /* 80 */
  2596. { REG_TABLE (REG_80) },
  2597. { REG_TABLE (REG_81) },
  2598. { X86_64_TABLE (X86_64_82) },
  2599. { REG_TABLE (REG_83) },
  2600. { "testB", { Eb, Gb }, 0 },
  2601. { "testS", { Ev, Gv }, 0 },
  2602. { "xchgB", { Ebh2, Gb }, 0 },
  2603. { "xchgS", { Evh2, Gv }, 0 },
  2604. /* 88 */
  2605. { "movB", { Ebh3, Gb }, 0 },
  2606. { "movS", { Evh3, Gv }, 0 },
  2607. { "movB", { Gb, EbS }, 0 },
  2608. { "movS", { Gv, EvS }, 0 },
  2609. { "movD", { Sv, Sw }, 0 },
  2610. { MOD_TABLE (MOD_8D) },
  2611. { "movD", { Sw, Sv }, 0 },
  2612. { REG_TABLE (REG_8F) },
  2613. /* 90 */
  2614. { PREFIX_TABLE (PREFIX_90) },
  2615. { "xchgS", { RMeCX, eAX }, 0 },
  2616. { "xchgS", { RMeDX, eAX }, 0 },
  2617. { "xchgS", { RMeBX, eAX }, 0 },
  2618. { "xchgS", { RMeSP, eAX }, 0 },
  2619. { "xchgS", { RMeBP, eAX }, 0 },
  2620. { "xchgS", { RMeSI, eAX }, 0 },
  2621. { "xchgS", { RMeDI, eAX }, 0 },
  2622. /* 98 */
  2623. { "cW{t|}R", { XX }, 0 },
  2624. { "cR{t|}O", { XX }, 0 },
  2625. { X86_64_TABLE (X86_64_9A) },
  2626. { Bad_Opcode }, /* fwait */
  2627. { "pushfT", { XX }, 0 },
  2628. { "popfT", { XX }, 0 },
  2629. { "sahf", { XX }, 0 },
  2630. { "lahf", { XX }, 0 },
  2631. /* a0 */
  2632. { "mov%LB", { AL, Ob }, 0 },
  2633. { "mov%LS", { eAX, Ov }, 0 },
  2634. { "mov%LB", { Ob, AL }, 0 },
  2635. { "mov%LS", { Ov, eAX }, 0 },
  2636. { "movs{b|}", { Ybr, Xb }, 0 },
  2637. { "movs{R|}", { Yvr, Xv }, 0 },
  2638. { "cmps{b|}", { Xb, Yb }, 0 },
  2639. { "cmps{R|}", { Xv, Yv }, 0 },
  2640. /* a8 */
  2641. { "testB", { AL, Ib }, 0 },
  2642. { "testS", { eAX, Iv }, 0 },
  2643. { "stosB", { Ybr, AL }, 0 },
  2644. { "stosS", { Yvr, eAX }, 0 },
  2645. { "lodsB", { ALr, Xb }, 0 },
  2646. { "lodsS", { eAXr, Xv }, 0 },
  2647. { "scasB", { AL, Yb }, 0 },
  2648. { "scasS", { eAX, Yv }, 0 },
  2649. /* b0 */
  2650. { "movB", { RMAL, Ib }, 0 },
  2651. { "movB", { RMCL, Ib }, 0 },
  2652. { "movB", { RMDL, Ib }, 0 },
  2653. { "movB", { RMBL, Ib }, 0 },
  2654. { "movB", { RMAH, Ib }, 0 },
  2655. { "movB", { RMCH, Ib }, 0 },
  2656. { "movB", { RMDH, Ib }, 0 },
  2657. { "movB", { RMBH, Ib }, 0 },
  2658. /* b8 */
  2659. { "mov%LV", { RMeAX, Iv64 }, 0 },
  2660. { "mov%LV", { RMeCX, Iv64 }, 0 },
  2661. { "mov%LV", { RMeDX, Iv64 }, 0 },
  2662. { "mov%LV", { RMeBX, Iv64 }, 0 },
  2663. { "mov%LV", { RMeSP, Iv64 }, 0 },
  2664. { "mov%LV", { RMeBP, Iv64 }, 0 },
  2665. { "mov%LV", { RMeSI, Iv64 }, 0 },
  2666. { "mov%LV", { RMeDI, Iv64 }, 0 },
  2667. /* c0 */
  2668. { REG_TABLE (REG_C0) },
  2669. { REG_TABLE (REG_C1) },
  2670. { "retT", { Iw, BND }, 0 },
  2671. { "retT", { BND }, 0 },
  2672. { X86_64_TABLE (X86_64_C4) },
  2673. { X86_64_TABLE (X86_64_C5) },
  2674. { REG_TABLE (REG_C6) },
  2675. { REG_TABLE (REG_C7) },
  2676. /* c8 */
  2677. { "enterT", { Iw, Ib }, 0 },
  2678. { "leaveT", { XX }, 0 },
  2679. { "Jret{|f}P", { Iw }, 0 },
  2680. { "Jret{|f}P", { XX }, 0 },
  2681. { "int3", { XX }, 0 },
  2682. { "int", { Ib }, 0 },
  2683. { X86_64_TABLE (X86_64_CE) },
  2684. { "iret%LP", { XX }, 0 },
  2685. /* d0 */
  2686. { REG_TABLE (REG_D0) },
  2687. { REG_TABLE (REG_D1) },
  2688. { REG_TABLE (REG_D2) },
  2689. { REG_TABLE (REG_D3) },
  2690. { X86_64_TABLE (X86_64_D4) },
  2691. { X86_64_TABLE (X86_64_D5) },
  2692. { Bad_Opcode },
  2693. { "xlat", { DSBX }, 0 },
  2694. /* d8 */
  2695. { FLOAT },
  2696. { FLOAT },
  2697. { FLOAT },
  2698. { FLOAT },
  2699. { FLOAT },
  2700. { FLOAT },
  2701. { FLOAT },
  2702. { FLOAT },
  2703. /* e0 */
  2704. { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
  2705. { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
  2706. { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
  2707. { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
  2708. { "inB", { AL, Ib }, 0 },
  2709. { "inG", { zAX, Ib }, 0 },
  2710. { "outB", { Ib, AL }, 0 },
  2711. { "outG", { Ib, zAX }, 0 },
  2712. /* e8 */
  2713. { X86_64_TABLE (X86_64_E8) },
  2714. { X86_64_TABLE (X86_64_E9) },
  2715. { X86_64_TABLE (X86_64_EA) },
  2716. { "jmp", { Jb, BND }, 0 },
  2717. { "inB", { AL, indirDX }, 0 },
  2718. { "inG", { zAX, indirDX }, 0 },
  2719. { "outB", { indirDX, AL }, 0 },
  2720. { "outG", { indirDX, zAX }, 0 },
  2721. /* f0 */
  2722. { Bad_Opcode }, /* lock prefix */
  2723. { "icebp", { XX }, 0 },
  2724. { Bad_Opcode }, /* repne */
  2725. { Bad_Opcode }, /* repz */
  2726. { "hlt", { XX }, 0 },
  2727. { "cmc", { XX }, 0 },
  2728. { REG_TABLE (REG_F6) },
  2729. { REG_TABLE (REG_F7) },
  2730. /* f8 */
  2731. { "clc", { XX }, 0 },
  2732. { "stc", { XX }, 0 },
  2733. { "cli", { XX }, 0 },
  2734. { "sti", { XX }, 0 },
  2735. { "cld", { XX }, 0 },
  2736. { "std", { XX }, 0 },
  2737. { REG_TABLE (REG_FE) },
  2738. { REG_TABLE (REG_FF) },
  2739. };
  2740. static const struct dis386 dis386_twobyte[] = {
  2741. /* 00 */
  2742. { REG_TABLE (REG_0F00 ) },
  2743. { REG_TABLE (REG_0F01 ) },
  2744. { "larS", { Gv, Ew }, 0 },
  2745. { "lslS", { Gv, Ew }, 0 },
  2746. { Bad_Opcode },
  2747. { "syscall", { XX }, 0 },
  2748. { "clts", { XX }, 0 },
  2749. { "sysret%LP", { XX }, 0 },
  2750. /* 08 */
  2751. { "invd", { XX }, 0 },
  2752. { "wbinvd", { XX }, 0 },
  2753. { Bad_Opcode },
  2754. { "ud2", { XX }, 0 },
  2755. { Bad_Opcode },
  2756. { REG_TABLE (REG_0F0D) },
  2757. { "femms", { XX }, 0 },
  2758. { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
  2759. /* 10 */
  2760. { PREFIX_TABLE (PREFIX_0F10) },
  2761. { PREFIX_TABLE (PREFIX_0F11) },
  2762. { PREFIX_TABLE (PREFIX_0F12) },
  2763. { MOD_TABLE (MOD_0F13) },
  2764. { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
  2765. { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
  2766. { PREFIX_TABLE (PREFIX_0F16) },
  2767. { MOD_TABLE (MOD_0F17) },
  2768. /* 18 */
  2769. { REG_TABLE (REG_0F18) },
  2770. { "nopQ", { Ev }, 0 },
  2771. { PREFIX_TABLE (PREFIX_0F1A) },
  2772. { PREFIX_TABLE (PREFIX_0F1B) },
  2773. { "nopQ", { Ev }, 0 },
  2774. { "nopQ", { Ev }, 0 },
  2775. { PREFIX_TABLE (PREFIX_0F1E) },
  2776. { "nopQ", { Ev }, 0 },
  2777. /* 20 */
  2778. { "movZ", { Rm, Cm }, 0 },
  2779. { "movZ", { Rm, Dm }, 0 },
  2780. { "movZ", { Cm, Rm }, 0 },
  2781. { "movZ", { Dm, Rm }, 0 },
  2782. { MOD_TABLE (MOD_0F24) },
  2783. { Bad_Opcode },
  2784. { MOD_TABLE (MOD_0F26) },
  2785. { Bad_Opcode },
  2786. /* 28 */
  2787. { "movapX", { XM, EXx }, PREFIX_OPCODE },
  2788. { "movapX", { EXxS, XM }, PREFIX_OPCODE },
  2789. { PREFIX_TABLE (PREFIX_0F2A) },
  2790. { PREFIX_TABLE (PREFIX_0F2B) },
  2791. { PREFIX_TABLE (PREFIX_0F2C) },
  2792. { PREFIX_TABLE (PREFIX_0F2D) },
  2793. { PREFIX_TABLE (PREFIX_0F2E) },
  2794. { PREFIX_TABLE (PREFIX_0F2F) },
  2795. /* 30 */
  2796. { "wrmsr", { XX }, 0 },
  2797. { "rdtsc", { XX }, 0 },
  2798. { "rdmsr", { XX }, 0 },
  2799. { "rdpmc", { XX }, 0 },
  2800. { "sysenter", { XX }, 0 },
  2801. { "sysexit", { XX }, 0 },
  2802. { Bad_Opcode },
  2803. { "getsec", { XX }, 0 },
  2804. /* 38 */
  2805. { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
  2806. { Bad_Opcode },
  2807. { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
  2808. { Bad_Opcode },
  2809. { Bad_Opcode },
  2810. { Bad_Opcode },
  2811. { Bad_Opcode },
  2812. { Bad_Opcode },
  2813. /* 40 */
  2814. { "cmovoS", { Gv, Ev }, 0 },
  2815. { "cmovnoS", { Gv, Ev }, 0 },
  2816. { "cmovbS", { Gv, Ev }, 0 },
  2817. { "cmovaeS", { Gv, Ev }, 0 },
  2818. { "cmoveS", { Gv, Ev }, 0 },
  2819. { "cmovneS", { Gv, Ev }, 0 },
  2820. { "cmovbeS", { Gv, Ev }, 0 },
  2821. { "cmovaS", { Gv, Ev }, 0 },
  2822. /* 48 */
  2823. { "cmovsS", { Gv, Ev }, 0 },
  2824. { "cmovnsS", { Gv, Ev }, 0 },
  2825. { "cmovpS", { Gv, Ev }, 0 },
  2826. { "cmovnpS", { Gv, Ev }, 0 },
  2827. { "cmovlS", { Gv, Ev }, 0 },
  2828. { "cmovgeS", { Gv, Ev }, 0 },
  2829. { "cmovleS", { Gv, Ev }, 0 },
  2830. { "cmovgS", { Gv, Ev }, 0 },
  2831. /* 50 */
  2832. { MOD_TABLE (MOD_0F51) },
  2833. { PREFIX_TABLE (PREFIX_0F51) },
  2834. { PREFIX_TABLE (PREFIX_0F52) },
  2835. { PREFIX_TABLE (PREFIX_0F53) },
  2836. { "andpX", { XM, EXx }, PREFIX_OPCODE },
  2837. { "andnpX", { XM, EXx }, PREFIX_OPCODE },
  2838. { "orpX", { XM, EXx }, PREFIX_OPCODE },
  2839. { "xorpX", { XM, EXx }, PREFIX_OPCODE },
  2840. /* 58 */
  2841. { PREFIX_TABLE (PREFIX_0F58) },
  2842. { PREFIX_TABLE (PREFIX_0F59) },
  2843. { PREFIX_TABLE (PREFIX_0F5A) },
  2844. { PREFIX_TABLE (PREFIX_0F5B) },
  2845. { PREFIX_TABLE (PREFIX_0F5C) },
  2846. { PREFIX_TABLE (PREFIX_0F5D) },
  2847. { PREFIX_TABLE (PREFIX_0F5E) },
  2848. { PREFIX_TABLE (PREFIX_0F5F) },
  2849. /* 60 */
  2850. { PREFIX_TABLE (PREFIX_0F60) },
  2851. { PREFIX_TABLE (PREFIX_0F61) },
  2852. { PREFIX_TABLE (PREFIX_0F62) },
  2853. { "packsswb", { MX, EM }, PREFIX_OPCODE },
  2854. { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
  2855. { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
  2856. { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
  2857. { "packuswb", { MX, EM }, PREFIX_OPCODE },
  2858. /* 68 */
  2859. { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
  2860. { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
  2861. { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
  2862. { "packssdw", { MX, EM }, PREFIX_OPCODE },
  2863. { PREFIX_TABLE (PREFIX_0F6C) },
  2864. { PREFIX_TABLE (PREFIX_0F6D) },
  2865. { "movK", { MX, Edq }, PREFIX_OPCODE },
  2866. { PREFIX_TABLE (PREFIX_0F6F) },
  2867. /* 70 */
  2868. { PREFIX_TABLE (PREFIX_0F70) },
  2869. { REG_TABLE (REG_0F71) },
  2870. { REG_TABLE (REG_0F72) },
  2871. { REG_TABLE (REG_0F73) },
  2872. { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
  2873. { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
  2874. { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
  2875. { "emms", { XX }, PREFIX_OPCODE },
  2876. /* 78 */
  2877. { PREFIX_TABLE (PREFIX_0F78) },
  2878. { PREFIX_TABLE (PREFIX_0F79) },
  2879. { Bad_Opcode },
  2880. { Bad_Opcode },
  2881. { PREFIX_TABLE (PREFIX_0F7C) },
  2882. { PREFIX_TABLE (PREFIX_0F7D) },
  2883. { PREFIX_TABLE (PREFIX_0F7E) },
  2884. { PREFIX_TABLE (PREFIX_0F7F) },
  2885. /* 80 */
  2886. { "joH", { Jv, BND, cond_jump_flag }, 0 },
  2887. { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
  2888. { "jbH", { Jv, BND, cond_jump_flag }, 0 },
  2889. { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
  2890. { "jeH", { Jv, BND, cond_jump_flag }, 0 },
  2891. { "jneH", { Jv, BND, cond_jump_flag }, 0 },
  2892. { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
  2893. { "jaH", { Jv, BND, cond_jump_flag }, 0 },
  2894. /* 88 */
  2895. { "jsH", { Jv, BND, cond_jump_flag }, 0 },
  2896. { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
  2897. { "jpH", { Jv, BND, cond_jump_flag }, 0 },
  2898. { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
  2899. { "jlH", { Jv, BND, cond_jump_flag }, 0 },
  2900. { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
  2901. { "jleH", { Jv, BND, cond_jump_flag }, 0 },
  2902. { "jgH", { Jv, BND, cond_jump_flag }, 0 },
  2903. /* 90 */
  2904. { "seto", { Eb }, 0 },
  2905. { "setno", { Eb }, 0 },
  2906. { "setb", { Eb }, 0 },
  2907. { "setae", { Eb }, 0 },
  2908. { "sete", { Eb }, 0 },
  2909. { "setne", { Eb }, 0 },
  2910. { "setbe", { Eb }, 0 },
  2911. { "seta", { Eb }, 0 },
  2912. /* 98 */
  2913. { "sets", { Eb }, 0 },
  2914. { "setns", { Eb }, 0 },
  2915. { "setp", { Eb }, 0 },
  2916. { "setnp", { Eb }, 0 },
  2917. { "setl", { Eb }, 0 },
  2918. { "setge", { Eb }, 0 },
  2919. { "setle", { Eb }, 0 },
  2920. { "setg", { Eb }, 0 },
  2921. /* a0 */
  2922. { "pushT", { fs }, 0 },
  2923. { "popT", { fs }, 0 },
  2924. { "cpuid", { XX }, 0 },
  2925. { "btS", { Ev, Gv }, 0 },
  2926. { "shldS", { Ev, Gv, Ib }, 0 },
  2927. { "shldS", { Ev, Gv, CL }, 0 },
  2928. { REG_TABLE (REG_0FA6) },
  2929. { REG_TABLE (REG_0FA7) },
  2930. /* a8 */
  2931. { "pushT", { gs }, 0 },
  2932. { "popT", { gs }, 0 },
  2933. { "rsm", { XX }, 0 },
  2934. { "btsS", { Evh1, Gv }, 0 },
  2935. { "shrdS", { Ev, Gv, Ib }, 0 },
  2936. { "shrdS", { Ev, Gv, CL }, 0 },
  2937. { REG_TABLE (REG_0FAE) },
  2938. { "imulS", { Gv, Ev }, 0 },
  2939. /* b0 */
  2940. { "cmpxchgB", { Ebh1, Gb }, 0 },
  2941. { "cmpxchgS", { Evh1, Gv }, 0 },
  2942. { MOD_TABLE (MOD_0FB2) },
  2943. { "btrS", { Evh1, Gv }, 0 },
  2944. { MOD_TABLE (MOD_0FB4) },
  2945. { MOD_TABLE (MOD_0FB5) },
  2946. { "movz{bR|x}", { Gv, Eb }, 0 },
  2947. { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
  2948. /* b8 */
  2949. { PREFIX_TABLE (PREFIX_0FB8) },
  2950. { "ud1", { XX }, 0 },
  2951. { REG_TABLE (REG_0FBA) },
  2952. { "btcS", { Evh1, Gv }, 0 },
  2953. { PREFIX_TABLE (PREFIX_0FBC) },
  2954. { PREFIX_TABLE (PREFIX_0FBD) },
  2955. { "movs{bR|x}", { Gv, Eb }, 0 },
  2956. { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
  2957. /* c0 */
  2958. { "xaddB", { Ebh1, Gb }, 0 },
  2959. { "xaddS", { Evh1, Gv }, 0 },
  2960. { PREFIX_TABLE (PREFIX_0FC2) },
  2961. { MOD_TABLE (MOD_0FC3) },
  2962. { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
  2963. { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
  2964. { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
  2965. { REG_TABLE (REG_0FC7) },
  2966. /* c8 */
  2967. { "bswap", { RMeAX }, 0 },
  2968. { "bswap", { RMeCX }, 0 },
  2969. { "bswap", { RMeDX }, 0 },
  2970. { "bswap", { RMeBX }, 0 },
  2971. { "bswap", { RMeSP }, 0 },
  2972. { "bswap", { RMeBP }, 0 },
  2973. { "bswap", { RMeSI }, 0 },
  2974. { "bswap", { RMeDI }, 0 },
  2975. /* d0 */
  2976. { PREFIX_TABLE (PREFIX_0FD0) },
  2977. { "psrlw", { MX, EM }, PREFIX_OPCODE },
  2978. { "psrld", { MX, EM }, PREFIX_OPCODE },
  2979. { "psrlq", { MX, EM }, PREFIX_OPCODE },
  2980. { "paddq", { MX, EM }, PREFIX_OPCODE },
  2981. { "pmullw", { MX, EM }, PREFIX_OPCODE },
  2982. { PREFIX_TABLE (PREFIX_0FD6) },
  2983. { MOD_TABLE (MOD_0FD7) },
  2984. /* d8 */
  2985. { "psubusb", { MX, EM }, PREFIX_OPCODE },
  2986. { "psubusw", { MX, EM }, PREFIX_OPCODE },
  2987. { "pminub", { MX, EM }, PREFIX_OPCODE },
  2988. { "pand", { MX, EM }, PREFIX_OPCODE },
  2989. { "paddusb", { MX, EM }, PREFIX_OPCODE },
  2990. { "paddusw", { MX, EM }, PREFIX_OPCODE },
  2991. { "pmaxub", { MX, EM }, PREFIX_OPCODE },
  2992. { "pandn", { MX, EM }, PREFIX_OPCODE },
  2993. /* e0 */
  2994. { "pavgb", { MX, EM }, PREFIX_OPCODE },
  2995. { "psraw", { MX, EM }, PREFIX_OPCODE },
  2996. { "psrad", { MX, EM }, PREFIX_OPCODE },
  2997. { "pavgw", { MX, EM }, PREFIX_OPCODE },
  2998. { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
  2999. { "pmulhw", { MX, EM }, PREFIX_OPCODE },
  3000. { PREFIX_TABLE (PREFIX_0FE6) },
  3001. { PREFIX_TABLE (PREFIX_0FE7) },
  3002. /* e8 */
  3003. { "psubsb", { MX, EM }, PREFIX_OPCODE },
  3004. { "psubsw", { MX, EM }, PREFIX_OPCODE },
  3005. { "pminsw", { MX, EM }, PREFIX_OPCODE },
  3006. { "por", { MX, EM }, PREFIX_OPCODE },
  3007. { "paddsb", { MX, EM }, PREFIX_OPCODE },
  3008. { "paddsw", { MX, EM }, PREFIX_OPCODE },
  3009. { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
  3010. { "pxor", { MX, EM }, PREFIX_OPCODE },
  3011. /* f0 */
  3012. { PREFIX_TABLE (PREFIX_0FF0) },
  3013. { "psllw", { MX, EM }, PREFIX_OPCODE },
  3014. { "pslld", { MX, EM }, PREFIX_OPCODE },
  3015. { "psllq", { MX, EM }, PREFIX_OPCODE },
  3016. { "pmuludq", { MX, EM }, PREFIX_OPCODE },
  3017. { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
  3018. { "psadbw", { MX, EM }, PREFIX_OPCODE },
  3019. { PREFIX_TABLE (PREFIX_0FF7) },
  3020. /* f8 */
  3021. { "psubb", { MX, EM }, PREFIX_OPCODE },
  3022. { "psubw", { MX, EM }, PREFIX_OPCODE },
  3023. { "psubd", { MX, EM }, PREFIX_OPCODE },
  3024. { "psubq", { MX, EM }, PREFIX_OPCODE },
  3025. { "paddb", { MX, EM }, PREFIX_OPCODE },
  3026. { "paddw", { MX, EM }, PREFIX_OPCODE },
  3027. { "paddd", { MX, EM }, PREFIX_OPCODE },
  3028. { Bad_Opcode },
  3029. };
  3030. static const unsigned char onebyte_has_modrm[256] = {
  3031. /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
  3032. /* ------------------------------- */
  3033. /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
  3034. /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
  3035. /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
  3036. /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
  3037. /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
  3038. /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
  3039. /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
  3040. /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
  3041. /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
  3042. /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
  3043. /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
  3044. /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
  3045. /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
  3046. /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
  3047. /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
  3048. /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
  3049. /* ------------------------------- */
  3050. /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
  3051. };
  3052. static const unsigned char twobyte_has_modrm[256] = {
  3053. /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
  3054. /* ------------------------------- */
  3055. /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
  3056. /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
  3057. /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
  3058. /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
  3059. /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
  3060. /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
  3061. /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
  3062. /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
  3063. /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
  3064. /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
  3065. /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
  3066. /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
  3067. /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
  3068. /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
  3069. /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
  3070. /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
  3071. /* ------------------------------- */
  3072. /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
  3073. };
  3074. static char obuf[100];
  3075. static char *obufp;
  3076. static char *mnemonicendp;
  3077. static char scratchbuf[100];
  3078. static unsigned char *start_codep;
  3079. static unsigned char *insn_codep;
  3080. static unsigned char *codep;
  3081. static unsigned char *end_codep;
  3082. static int last_lock_prefix;
  3083. static int last_repz_prefix;
  3084. static int last_repnz_prefix;
  3085. static int last_data_prefix;
  3086. static int last_addr_prefix;
  3087. static int last_rex_prefix;
  3088. static int last_seg_prefix;
  3089. static int fwait_prefix;
  3090. /* The active segment register prefix. */
  3091. static int active_seg_prefix;
  3092. #define MAX_CODE_LENGTH 15
  3093. /* We can up to 14 prefixes since the maximum instruction length is
  3094. 15bytes. */
  3095. static int all_prefixes[MAX_CODE_LENGTH - 1];
  3096. static disassemble_info *the_info;
  3097. static struct
  3098. {
  3099. int mod;
  3100. int reg;
  3101. int rm;
  3102. }
  3103. modrm;
  3104. static unsigned char need_modrm;
  3105. static struct
  3106. {
  3107. int scale;
  3108. int index;
  3109. int base;
  3110. }
  3111. sib;
  3112. static struct
  3113. {
  3114. int register_specifier;
  3115. int length;
  3116. int prefix;
  3117. int w;
  3118. int evex;
  3119. int r;
  3120. int v;
  3121. int mask_register_specifier;
  3122. int zeroing;
  3123. int ll;
  3124. int b;
  3125. }
  3126. vex;
  3127. static unsigned char need_vex;
  3128. static unsigned char need_vex_reg;
  3129. static unsigned char vex_w_done;
  3130. struct op
  3131. {
  3132. const char *name;
  3133. unsigned int len;
  3134. };
  3135. /* If we are accessing mod/rm/reg without need_modrm set, then the
  3136. values are stale. Hitting this abort likely indicates that you
  3137. need to update onebyte_has_modrm or twobyte_has_modrm. */
  3138. #define MODRM_CHECK if (!need_modrm) abort ()
  3139. static const char **names64;
  3140. static const char **names32;
  3141. static const char **names16;
  3142. static const char **names8;
  3143. static const char **names8rex;
  3144. static const char **names_seg;
  3145. static const char *index64;
  3146. static const char *index32;
  3147. static const char **index16;
  3148. static const char **names_bnd;
  3149. static const char *intel_names64[] = {
  3150. "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
  3151. "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
  3152. };
  3153. static const char *intel_names32[] = {
  3154. "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
  3155. "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
  3156. };
  3157. static const char *intel_names16[] = {
  3158. "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
  3159. "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
  3160. };
  3161. static const char *intel_names8[] = {
  3162. "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
  3163. };
  3164. static const char *intel_names8rex[] = {
  3165. "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
  3166. "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
  3167. };
  3168. static const char *intel_names_seg[] = {
  3169. "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
  3170. };
  3171. static const char *intel_index64 = "riz";
  3172. static const char *intel_index32 = "eiz";
  3173. static const char *intel_index16[] = {
  3174. "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
  3175. };
  3176. static const char *att_names64[] = {
  3177. "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
  3178. "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
  3179. };
  3180. static const char *att_names32[] = {
  3181. "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
  3182. "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
  3183. };
  3184. static const char *att_names16[] = {
  3185. "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
  3186. "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
  3187. };
  3188. static const char *att_names8[] = {
  3189. "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
  3190. };
  3191. static const char *att_names8rex[] = {
  3192. "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
  3193. "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
  3194. };
  3195. static const char *att_names_seg[] = {
  3196. "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
  3197. };
  3198. static const char *att_index64 = "%riz";
  3199. static const char *att_index32 = "%eiz";
  3200. static const char *att_index16[] = {
  3201. "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
  3202. };
  3203. static const char **names_mm;
  3204. static const char *intel_names_mm[] = {
  3205. "mm0", "mm1", "mm2", "mm3",
  3206. "mm4", "mm5", "mm6", "mm7"
  3207. };
  3208. static const char *att_names_mm[] = {
  3209. "%mm0", "%mm1", "%mm2", "%mm3",
  3210. "%mm4", "%mm5", "%mm6", "%mm7"
  3211. };
  3212. static const char *intel_names_bnd[] = {
  3213. "bnd0", "bnd1", "bnd2", "bnd3"
  3214. };
  3215. static const char *att_names_bnd[] = {
  3216. "%bnd0", "%bnd1", "%bnd2", "%bnd3"
  3217. };
  3218. static const char **names_xmm;
  3219. static const char *intel_names_xmm[] = {
  3220. "xmm0", "xmm1", "xmm2", "xmm3",
  3221. "xmm4", "xmm5", "xmm6", "xmm7",
  3222. "xmm8", "xmm9", "xmm10", "xmm11",
  3223. "xmm12", "xmm13", "xmm14", "xmm15",
  3224. "xmm16", "xmm17", "xmm18", "xmm19",
  3225. "xmm20", "xmm21", "xmm22", "xmm23",
  3226. "xmm24", "xmm25", "xmm26", "xmm27",
  3227. "xmm28", "xmm29", "xmm30", "xmm31"
  3228. };
  3229. static const char *att_names_xmm[] = {
  3230. "%xmm0", "%xmm1", "%xmm2", "%xmm3",
  3231. "%xmm4", "%xmm5", "%xmm6", "%xmm7",
  3232. "%xmm8", "%xmm9", "%xmm10", "%xmm11",
  3233. "%xmm12", "%xmm13", "%xmm14", "%xmm15",
  3234. "%xmm16", "%xmm17", "%xmm18", "%xmm19",
  3235. "%xmm20", "%xmm21", "%xmm22", "%xmm23",
  3236. "%xmm24", "%xmm25", "%xmm26", "%xmm27",
  3237. "%xmm28", "%xmm29", "%xmm30", "%xmm31"
  3238. };
  3239. static const char **names_ymm;
  3240. static const char *intel_names_ymm[] = {
  3241. "ymm0", "ymm1", "ymm2", "ymm3",
  3242. "ymm4", "ymm5", "ymm6", "ymm7",
  3243. "ymm8", "ymm9", "ymm10", "ymm11",
  3244. "ymm12", "ymm13", "ymm14", "ymm15",
  3245. "ymm16", "ymm17", "ymm18", "ymm19",
  3246. "ymm20", "ymm21", "ymm22", "ymm23",
  3247. "ymm24", "ymm25", "ymm26", "ymm27",
  3248. "ymm28", "ymm29", "ymm30", "ymm31"
  3249. };
  3250. static const char *att_names_ymm[] = {
  3251. "%ymm0", "%ymm1", "%ymm2", "%ymm3",
  3252. "%ymm4", "%ymm5", "%ymm6", "%ymm7",
  3253. "%ymm8", "%ymm9", "%ymm10", "%ymm11",
  3254. "%ymm12", "%ymm13", "%ymm14", "%ymm15",
  3255. "%ymm16", "%ymm17", "%ymm18", "%ymm19",
  3256. "%ymm20", "%ymm21", "%ymm22", "%ymm23",
  3257. "%ymm24", "%ymm25", "%ymm26", "%ymm27",
  3258. "%ymm28", "%ymm29", "%ymm30", "%ymm31"
  3259. };
  3260. static const char **names_zmm;
  3261. static const char *intel_names_zmm[] = {
  3262. "zmm0", "zmm1", "zmm2", "zmm3",
  3263. "zmm4", "zmm5", "zmm6", "zmm7",
  3264. "zmm8", "zmm9", "zmm10", "zmm11",
  3265. "zmm12", "zmm13", "zmm14", "zmm15",
  3266. "zmm16", "zmm17", "zmm18", "zmm19",
  3267. "zmm20", "zmm21", "zmm22", "zmm23",
  3268. "zmm24", "zmm25", "zmm26", "zmm27",
  3269. "zmm28", "zmm29", "zmm30", "zmm31"
  3270. };
  3271. static const char *att_names_zmm[] = {
  3272. "%zmm0", "%zmm1", "%zmm2", "%zmm3",
  3273. "%zmm4", "%zmm5", "%zmm6", "%zmm7",
  3274. "%zmm8", "%zmm9", "%zmm10", "%zmm11",
  3275. "%zmm12", "%zmm13", "%zmm14", "%zmm15",
  3276. "%zmm16", "%zmm17", "%zmm18", "%zmm19",
  3277. "%zmm20", "%zmm21", "%zmm22", "%zmm23",
  3278. "%zmm24", "%zmm25", "%zmm26", "%zmm27",
  3279. "%zmm28", "%zmm29", "%zmm30", "%zmm31"
  3280. };
  3281. static const char **names_mask;
  3282. static const char *intel_names_mask[] = {
  3283. "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
  3284. };
  3285. static const char *att_names_mask[] = {
  3286. "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
  3287. };
  3288. static const char *names_rounding[] =
  3289. {
  3290. "{rn-sae}",
  3291. "{rd-sae}",
  3292. "{ru-sae}",
  3293. "{rz-sae}"
  3294. };
  3295. static const struct dis386 reg_table[][8] = {
  3296. /* REG_80 */
  3297. {
  3298. { "addA", { Ebh1, Ib }, 0 },
  3299. { "orA", { Ebh1, Ib }, 0 },
  3300. { "adcA", { Ebh1, Ib }, 0 },
  3301. { "sbbA", { Ebh1, Ib }, 0 },
  3302. { "andA", { Ebh1, Ib }, 0 },
  3303. { "subA", { Ebh1, Ib }, 0 },
  3304. { "xorA", { Ebh1, Ib }, 0 },
  3305. { "cmpA", { Eb, Ib }, 0 },
  3306. },
  3307. /* REG_81 */
  3308. {
  3309. { "addQ", { Evh1, Iv }, 0 },
  3310. { "orQ", { Evh1, Iv }, 0 },
  3311. { "adcQ", { Evh1, Iv }, 0 },
  3312. { "sbbQ", { Evh1, Iv }, 0 },
  3313. { "andQ", { Evh1, Iv }, 0 },
  3314. { "subQ", { Evh1, Iv }, 0 },
  3315. { "xorQ", { Evh1, Iv }, 0 },
  3316. { "cmpQ", { Ev, Iv }, 0 },
  3317. },
  3318. /* REG_83 */
  3319. {
  3320. { "addQ", { Evh1, sIb }, 0 },
  3321. { "orQ", { Evh1, sIb }, 0 },
  3322. { "adcQ", { Evh1, sIb }, 0 },
  3323. { "sbbQ", { Evh1, sIb }, 0 },
  3324. { "andQ", { Evh1, sIb }, 0 },
  3325. { "subQ", { Evh1, sIb }, 0 },
  3326. { "xorQ", { Evh1, sIb }, 0 },
  3327. { "cmpQ", { Ev, sIb }, 0 },
  3328. },
  3329. /* REG_8F */
  3330. {
  3331. { "popU", { stackEv }, 0 },
  3332. { XOP_8F_TABLE (XOP_09) },
  3333. { Bad_Opcode },
  3334. { Bad_Opcode },
  3335. { Bad_Opcode },
  3336. { XOP_8F_TABLE (XOP_09) },
  3337. },
  3338. /* REG_C0 */
  3339. {
  3340. { "rolA", { Eb, Ib }, 0 },
  3341. { "rorA", { Eb, Ib }, 0 },
  3342. { "rclA", { Eb, Ib }, 0 },
  3343. { "rcrA", { Eb, Ib }, 0 },
  3344. { "shlA", { Eb, Ib }, 0 },
  3345. { "shrA", { Eb, Ib }, 0 },
  3346. { Bad_Opcode },
  3347. { "sarA", { Eb, Ib }, 0 },
  3348. },
  3349. /* REG_C1 */
  3350. {
  3351. { "rolQ", { Ev, Ib }, 0 },
  3352. { "rorQ", { Ev, Ib }, 0 },
  3353. { "rclQ", { Ev, Ib }, 0 },
  3354. { "rcrQ", { Ev, Ib }, 0 },
  3355. { "shlQ", { Ev, Ib }, 0 },
  3356. { "shrQ", { Ev, Ib }, 0 },
  3357. { Bad_Opcode },
  3358. { "sarQ", { Ev, Ib }, 0 },
  3359. },
  3360. /* REG_C6 */
  3361. {
  3362. { "movA", { Ebh3, Ib }, 0 },
  3363. { Bad_Opcode },
  3364. { Bad_Opcode },
  3365. { Bad_Opcode },
  3366. { Bad_Opcode },
  3367. { Bad_Opcode },
  3368. { Bad_Opcode },
  3369. { MOD_TABLE (MOD_C6_REG_7) },
  3370. },
  3371. /* REG_C7 */
  3372. {
  3373. { "movQ", { Evh3, Iv }, 0 },
  3374. { Bad_Opcode },
  3375. { Bad_Opcode },
  3376. { Bad_Opcode },
  3377. { Bad_Opcode },
  3378. { Bad_Opcode },
  3379. { Bad_Opcode },
  3380. { MOD_TABLE (MOD_C7_REG_7) },
  3381. },
  3382. /* REG_D0 */
  3383. {
  3384. { "rolA", { Eb, I1 }, 0 },
  3385. { "rorA", { Eb, I1 }, 0 },
  3386. { "rclA", { Eb, I1 }, 0 },
  3387. { "rcrA", { Eb, I1 }, 0 },
  3388. { "shlA", { Eb, I1 }, 0 },
  3389. { "shrA", { Eb, I1 }, 0 },
  3390. { Bad_Opcode },
  3391. { "sarA", { Eb, I1 }, 0 },
  3392. },
  3393. /* REG_D1 */
  3394. {
  3395. { "rolQ", { Ev, I1 }, 0 },
  3396. { "rorQ", { Ev, I1 }, 0 },
  3397. { "rclQ", { Ev, I1 }, 0 },
  3398. { "rcrQ", { Ev, I1 }, 0 },
  3399. { "shlQ", { Ev, I1 }, 0 },
  3400. { "shrQ", { Ev, I1 }, 0 },
  3401. { Bad_Opcode },
  3402. { "sarQ", { Ev, I1 }, 0 },
  3403. },
  3404. /* REG_D2 */
  3405. {
  3406. { "rolA", { Eb, CL }, 0 },
  3407. { "rorA", { Eb, CL }, 0 },
  3408. { "rclA", { Eb, CL }, 0 },
  3409. { "rcrA", { Eb, CL }, 0 },
  3410. { "shlA", { Eb, CL }, 0 },
  3411. { "shrA", { Eb, CL }, 0 },
  3412. { Bad_Opcode },
  3413. { "sarA", { Eb, CL }, 0 },
  3414. },
  3415. /* REG_D3 */
  3416. {
  3417. { "rolQ", { Ev, CL }, 0 },
  3418. { "rorQ", { Ev, CL }, 0 },
  3419. { "rclQ", { Ev, CL }, 0 },
  3420. { "rcrQ", { Ev, CL }, 0 },
  3421. { "shlQ", { Ev, CL }, 0 },
  3422. { "shrQ", { Ev, CL }, 0 },
  3423. { Bad_Opcode },
  3424. { "sarQ", { Ev, CL }, 0 },
  3425. },
  3426. /* REG_F6 */
  3427. {
  3428. { "testA", { Eb, Ib }, 0 },
  3429. { "testA", { Eb, Ib }, 0 },
  3430. { "notA", { Ebh1 }, 0 },
  3431. { "negA", { Ebh1 }, 0 },
  3432. { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
  3433. { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
  3434. { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
  3435. { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
  3436. },
  3437. /* REG_F7 */
  3438. {
  3439. { "testQ", { Ev, Iv }, 0 },
  3440. { "testQ", { Ev, Iv }, 0 },
  3441. { "notQ", { Evh1 }, 0 },
  3442. { "negQ", { Evh1 }, 0 },
  3443. { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
  3444. { "imulQ", { Ev }, 0 },
  3445. { "divQ", { Ev }, 0 },
  3446. { "idivQ", { Ev }, 0 },
  3447. },
  3448. /* REG_FE */
  3449. {
  3450. { "incA", { Ebh1 }, 0 },
  3451. { "decA", { Ebh1 }, 0 },
  3452. },
  3453. /* REG_FF */
  3454. {
  3455. { "incQ", { Evh1 }, 0 },
  3456. { "decQ", { Evh1 }, 0 },
  3457. { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
  3458. { MOD_TABLE (MOD_FF_REG_3) },
  3459. { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
  3460. { MOD_TABLE (MOD_FF_REG_5) },
  3461. { "pushU", { stackEv }, 0 },
  3462. { Bad_Opcode },
  3463. },
  3464. /* REG_0F00 */
  3465. {
  3466. { "sldtD", { Sv }, 0 },
  3467. { "strD", { Sv }, 0 },
  3468. { "lldt", { Ew }, 0 },
  3469. { "ltr", { Ew }, 0 },
  3470. { "verr", { Ew }, 0 },
  3471. { "verw", { Ew }, 0 },
  3472. { Bad_Opcode },
  3473. { Bad_Opcode },
  3474. },
  3475. /* REG_0F01 */
  3476. {
  3477. { MOD_TABLE (MOD_0F01_REG_0) },
  3478. { MOD_TABLE (MOD_0F01_REG_1) },
  3479. { MOD_TABLE (MOD_0F01_REG_2) },
  3480. { MOD_TABLE (MOD_0F01_REG_3) },
  3481. { "smswD", { Sv }, 0 },
  3482. { MOD_TABLE (MOD_0F01_REG_5) },
  3483. { "lmsw", { Ew }, 0 },
  3484. { MOD_TABLE (MOD_0F01_REG_7) },
  3485. },
  3486. /* REG_0F0D */
  3487. {
  3488. { "prefetch", { Mb }, 0 },
  3489. { "prefetchw", { Mb }, 0 },
  3490. { "prefetchwt1", { Mb }, 0 },
  3491. { "prefetch", { Mb }, 0 },
  3492. { "prefetch", { Mb }, 0 },
  3493. { "prefetch", { Mb }, 0 },
  3494. { "prefetch", { Mb }, 0 },
  3495. { "prefetch", { Mb }, 0 },
  3496. },
  3497. /* REG_0F18 */
  3498. {
  3499. { MOD_TABLE (MOD_0F18_REG_0) },
  3500. { MOD_TABLE (MOD_0F18_REG_1) },
  3501. { MOD_TABLE (MOD_0F18_REG_2) },
  3502. { MOD_TABLE (MOD_0F18_REG_3) },
  3503. { MOD_TABLE (MOD_0F18_REG_4) },
  3504. { MOD_TABLE (MOD_0F18_REG_5) },
  3505. { MOD_TABLE (MOD_0F18_REG_6) },
  3506. { MOD_TABLE (MOD_0F18_REG_7) },
  3507. },
  3508. /* REG_0F1E_MOD_3 */
  3509. {
  3510. { "nopQ", { Ev }, 0 },
  3511. { "rdsspK", { Rdq }, PREFIX_OPCODE },
  3512. { "nopQ", { Ev }, 0 },
  3513. { "nopQ", { Ev }, 0 },
  3514. { "nopQ", { Ev }, 0 },
  3515. { "nopQ", { Ev }, 0 },
  3516. { "nopQ", { Ev }, 0 },
  3517. { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
  3518. },
  3519. /* REG_0F71 */
  3520. {
  3521. { Bad_Opcode },
  3522. { Bad_Opcode },
  3523. { MOD_TABLE (MOD_0F71_REG_2) },
  3524. { Bad_Opcode },
  3525. { MOD_TABLE (MOD_0F71_REG_4) },
  3526. { Bad_Opcode },
  3527. { MOD_TABLE (MOD_0F71_REG_6) },
  3528. },
  3529. /* REG_0F72 */
  3530. {
  3531. { Bad_Opcode },
  3532. { Bad_Opcode },
  3533. { MOD_TABLE (MOD_0F72_REG_2) },
  3534. { Bad_Opcode },
  3535. { MOD_TABLE (MOD_0F72_REG_4) },
  3536. { Bad_Opcode },
  3537. { MOD_TABLE (MOD_0F72_REG_6) },
  3538. },
  3539. /* REG_0F73 */
  3540. {
  3541. { Bad_Opcode },
  3542. { Bad_Opcode },
  3543. { MOD_TABLE (MOD_0F73_REG_2) },
  3544. { MOD_TABLE (MOD_0F73_REG_3) },
  3545. { Bad_Opcode },
  3546. { Bad_Opcode },
  3547. { MOD_TABLE (MOD_0F73_REG_6) },
  3548. { MOD_TABLE (MOD_0F73_REG_7) },
  3549. },
  3550. /* REG_0FA6 */
  3551. {
  3552. { "montmul", { { OP_0f07, 0 } }, 0 },
  3553. { "xsha1", { { OP_0f07, 0 } }, 0 },
  3554. { "xsha256", { { OP_0f07, 0 } }, 0 },
  3555. },
  3556. /* REG_0FA7 */
  3557. {
  3558. { "xstore-rng", { { OP_0f07, 0 } }, 0 },
  3559. { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
  3560. { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
  3561. { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
  3562. { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
  3563. { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
  3564. },
  3565. /* REG_0FAE */
  3566. {
  3567. { MOD_TABLE (MOD_0FAE_REG_0) },
  3568. { MOD_TABLE (MOD_0FAE_REG_1) },
  3569. { MOD_TABLE (MOD_0FAE_REG_2) },
  3570. { MOD_TABLE (MOD_0FAE_REG_3) },
  3571. { MOD_TABLE (MOD_0FAE_REG_4) },
  3572. { MOD_TABLE (MOD_0FAE_REG_5) },
  3573. { MOD_TABLE (MOD_0FAE_REG_6) },
  3574. { MOD_TABLE (MOD_0FAE_REG_7) },
  3575. },
  3576. /* REG_0FBA */
  3577. {
  3578. { Bad_Opcode },
  3579. { Bad_Opcode },
  3580. { Bad_Opcode },
  3581. { Bad_Opcode },
  3582. { "btQ", { Ev, Ib }, 0 },
  3583. { "btsQ", { Evh1, Ib }, 0 },
  3584. { "btrQ", { Evh1, Ib }, 0 },
  3585. { "btcQ", { Evh1, Ib }, 0 },
  3586. },
  3587. /* REG_0FC7 */
  3588. {
  3589. { Bad_Opcode },
  3590. { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
  3591. { Bad_Opcode },
  3592. { MOD_TABLE (MOD_0FC7_REG_3) },
  3593. { MOD_TABLE (MOD_0FC7_REG_4) },
  3594. { MOD_TABLE (MOD_0FC7_REG_5) },
  3595. { MOD_TABLE (MOD_0FC7_REG_6) },
  3596. { MOD_TABLE (MOD_0FC7_REG_7) },
  3597. },
  3598. /* REG_VEX_0F71 */
  3599. {
  3600. { Bad_Opcode },
  3601. { Bad_Opcode },
  3602. { MOD_TABLE (MOD_VEX_0F71_REG_2) },
  3603. { Bad_Opcode },
  3604. { MOD_TABLE (MOD_VEX_0F71_REG_4) },
  3605. { Bad_Opcode },
  3606. { MOD_TABLE (MOD_VEX_0F71_REG_6) },
  3607. },
  3608. /* REG_VEX_0F72 */
  3609. {
  3610. { Bad_Opcode },
  3611. { Bad_Opcode },
  3612. { MOD_TABLE (MOD_VEX_0F72_REG_2) },
  3613. { Bad_Opcode },
  3614. { MOD_TABLE (MOD_VEX_0F72_REG_4) },
  3615. { Bad_Opcode },
  3616. { MOD_TABLE (MOD_VEX_0F72_REG_6) },
  3617. },
  3618. /* REG_VEX_0F73 */
  3619. {
  3620. { Bad_Opcode },
  3621. { Bad_Opcode },
  3622. { MOD_TABLE (MOD_VEX_0F73_REG_2) },
  3623. { MOD_TABLE (MOD_VEX_0F73_REG_3) },
  3624. { Bad_Opcode },
  3625. { Bad_Opcode },
  3626. { MOD_TABLE (MOD_VEX_0F73_REG_6) },
  3627. { MOD_TABLE (MOD_VEX_0F73_REG_7) },
  3628. },
  3629. /* REG_VEX_0FAE */
  3630. {
  3631. { Bad_Opcode },
  3632. { Bad_Opcode },
  3633. { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
  3634. { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
  3635. },
  3636. /* REG_VEX_0F38F3 */
  3637. {
  3638. { Bad_Opcode },
  3639. { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
  3640. { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
  3641. { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
  3642. },
  3643. /* REG_XOP_LWPCB */
  3644. {
  3645. { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
  3646. { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
  3647. },
  3648. /* REG_XOP_LWP */
  3649. {
  3650. { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
  3651. { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
  3652. },
  3653. /* REG_XOP_TBM_01 */
  3654. {
  3655. { Bad_Opcode },
  3656. { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
  3657. { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
  3658. { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
  3659. { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
  3660. { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
  3661. { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
  3662. { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
  3663. },
  3664. /* REG_XOP_TBM_02 */
  3665. {
  3666. { Bad_Opcode },
  3667. { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
  3668. { Bad_Opcode },
  3669. { Bad_Opcode },
  3670. { Bad_Opcode },
  3671. { Bad_Opcode },
  3672. { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
  3673. },
  3674. #define NEED_REG_TABLE
  3675. #include "i386-dis-evex.h"
  3676. #undef NEED_REG_TABLE
  3677. };
  3678. static const struct dis386 prefix_table[][4] = {
  3679. /* PREFIX_90 */
  3680. {
  3681. { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
  3682. { "pause", { XX }, 0 },
  3683. { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
  3684. { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
  3685. },
  3686. /* PREFIX_MOD_0_0F01_REG_5 */
  3687. {
  3688. { Bad_Opcode },
  3689. { "rstorssp", { Mq }, PREFIX_OPCODE },
  3690. },
  3691. /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
  3692. {
  3693. { Bad_Opcode },
  3694. { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
  3695. },
  3696. /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
  3697. {
  3698. { Bad_Opcode },
  3699. { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
  3700. },
  3701. /* PREFIX_0F10 */
  3702. {
  3703. { "movups", { XM, EXx }, PREFIX_OPCODE },
  3704. { "movss", { XM, EXd }, PREFIX_OPCODE },
  3705. { "movupd", { XM, EXx }, PREFIX_OPCODE },
  3706. { "movsd", { XM, EXq }, PREFIX_OPCODE },
  3707. },
  3708. /* PREFIX_0F11 */
  3709. {
  3710. { "movups", { EXxS, XM }, PREFIX_OPCODE },
  3711. { "movss", { EXdS, XM }, PREFIX_OPCODE },
  3712. { "movupd", { EXxS, XM }, PREFIX_OPCODE },
  3713. { "movsd", { EXqS, XM }, PREFIX_OPCODE },
  3714. },
  3715. /* PREFIX_0F12 */
  3716. {
  3717. { MOD_TABLE (MOD_0F12_PREFIX_0) },
  3718. { "movsldup", { XM, EXx }, PREFIX_OPCODE },
  3719. { "movlpd", { XM, EXq }, PREFIX_OPCODE },
  3720. { "movddup", { XM, EXq }, PREFIX_OPCODE },
  3721. },
  3722. /* PREFIX_0F16 */
  3723. {
  3724. { MOD_TABLE (MOD_0F16_PREFIX_0) },
  3725. { "movshdup", { XM, EXx }, PREFIX_OPCODE },
  3726. { "movhpd", { XM, EXq }, PREFIX_OPCODE },
  3727. },
  3728. /* PREFIX_0F1A */
  3729. {
  3730. { MOD_TABLE (MOD_0F1A_PREFIX_0) },
  3731. { "bndcl", { Gbnd, Ev_bnd }, 0 },
  3732. { "bndmov", { Gbnd, Ebnd }, 0 },
  3733. { "bndcu", { Gbnd, Ev_bnd }, 0 },
  3734. },
  3735. /* PREFIX_0F1B */
  3736. {
  3737. { MOD_TABLE (MOD_0F1B_PREFIX_0) },
  3738. { MOD_TABLE (MOD_0F1B_PREFIX_1) },
  3739. { "bndmov", { Ebnd, Gbnd }, 0 },
  3740. { "bndcn", { Gbnd, Ev_bnd }, 0 },
  3741. },
  3742. /* PREFIX_0F1E */
  3743. {
  3744. { "nopQ", { Ev }, PREFIX_OPCODE },
  3745. { MOD_TABLE (MOD_0F1E_PREFIX_1) },
  3746. { "nopQ", { Ev }, PREFIX_OPCODE },
  3747. { "nopQ", { Ev }, PREFIX_OPCODE },
  3748. },
  3749. /* PREFIX_0F2A */
  3750. {
  3751. { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
  3752. { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
  3753. { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
  3754. { "cvtsi2sd%LQ", { XM, Ev }, 0 },
  3755. },
  3756. /* PREFIX_0F2B */
  3757. {
  3758. { MOD_TABLE (MOD_0F2B_PREFIX_0) },
  3759. { MOD_TABLE (MOD_0F2B_PREFIX_1) },
  3760. { MOD_TABLE (MOD_0F2B_PREFIX_2) },
  3761. { MOD_TABLE (MOD_0F2B_PREFIX_3) },
  3762. },
  3763. /* PREFIX_0F2C */
  3764. {
  3765. { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
  3766. { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
  3767. { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
  3768. { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
  3769. },
  3770. /* PREFIX_0F2D */
  3771. {
  3772. { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
  3773. { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
  3774. { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
  3775. { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
  3776. },
  3777. /* PREFIX_0F2E */
  3778. {
  3779. { "ucomiss",{ XM, EXd }, 0 },
  3780. { Bad_Opcode },
  3781. { "ucomisd",{ XM, EXq }, 0 },
  3782. },
  3783. /* PREFIX_0F2F */
  3784. {
  3785. { "comiss", { XM, EXd }, 0 },
  3786. { Bad_Opcode },
  3787. { "comisd", { XM, EXq }, 0 },
  3788. },
  3789. /* PREFIX_0F51 */
  3790. {
  3791. { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
  3792. { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
  3793. { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
  3794. { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
  3795. },
  3796. /* PREFIX_0F52 */
  3797. {
  3798. { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
  3799. { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
  3800. },
  3801. /* PREFIX_0F53 */
  3802. {
  3803. { "rcpps", { XM, EXx }, PREFIX_OPCODE },
  3804. { "rcpss", { XM, EXd }, PREFIX_OPCODE },
  3805. },
  3806. /* PREFIX_0F58 */
  3807. {
  3808. { "addps", { XM, EXx }, PREFIX_OPCODE },
  3809. { "addss", { XM, EXd }, PREFIX_OPCODE },
  3810. { "addpd", { XM, EXx }, PREFIX_OPCODE },
  3811. { "addsd", { XM, EXq }, PREFIX_OPCODE },
  3812. },
  3813. /* PREFIX_0F59 */
  3814. {
  3815. { "mulps", { XM, EXx }, PREFIX_OPCODE },
  3816. { "mulss", { XM, EXd }, PREFIX_OPCODE },
  3817. { "mulpd", { XM, EXx }, PREFIX_OPCODE },
  3818. { "mulsd", { XM, EXq }, PREFIX_OPCODE },
  3819. },
  3820. /* PREFIX_0F5A */
  3821. {
  3822. { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
  3823. { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
  3824. { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
  3825. { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
  3826. },
  3827. /* PREFIX_0F5B */
  3828. {
  3829. { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
  3830. { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
  3831. { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
  3832. },
  3833. /* PREFIX_0F5C */
  3834. {
  3835. { "subps", { XM, EXx }, PREFIX_OPCODE },
  3836. { "subss", { XM, EXd }, PREFIX_OPCODE },
  3837. { "subpd", { XM, EXx }, PREFIX_OPCODE },
  3838. { "subsd", { XM, EXq }, PREFIX_OPCODE },
  3839. },
  3840. /* PREFIX_0F5D */
  3841. {
  3842. { "minps", { XM, EXx }, PREFIX_OPCODE },
  3843. { "minss", { XM, EXd }, PREFIX_OPCODE },
  3844. { "minpd", { XM, EXx }, PREFIX_OPCODE },
  3845. { "minsd", { XM, EXq }, PREFIX_OPCODE },
  3846. },
  3847. /* PREFIX_0F5E */
  3848. {
  3849. { "divps", { XM, EXx }, PREFIX_OPCODE },
  3850. { "divss", { XM, EXd }, PREFIX_OPCODE },
  3851. { "divpd", { XM, EXx }, PREFIX_OPCODE },
  3852. { "divsd", { XM, EXq }, PREFIX_OPCODE },
  3853. },
  3854. /* PREFIX_0F5F */
  3855. {
  3856. { "maxps", { XM, EXx }, PREFIX_OPCODE },
  3857. { "maxss", { XM, EXd }, PREFIX_OPCODE },
  3858. { "maxpd", { XM, EXx }, PREFIX_OPCODE },
  3859. { "maxsd", { XM, EXq }, PREFIX_OPCODE },
  3860. },
  3861. /* PREFIX_0F60 */
  3862. {
  3863. { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
  3864. { Bad_Opcode },
  3865. { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
  3866. },
  3867. /* PREFIX_0F61 */
  3868. {
  3869. { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
  3870. { Bad_Opcode },
  3871. { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
  3872. },
  3873. /* PREFIX_0F62 */
  3874. {
  3875. { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
  3876. { Bad_Opcode },
  3877. { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
  3878. },
  3879. /* PREFIX_0F6C */
  3880. {
  3881. { Bad_Opcode },
  3882. { Bad_Opcode },
  3883. { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
  3884. },
  3885. /* PREFIX_0F6D */
  3886. {
  3887. { Bad_Opcode },
  3888. { Bad_Opcode },
  3889. { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
  3890. },
  3891. /* PREFIX_0F6F */
  3892. {
  3893. { "movq", { MX, EM }, PREFIX_OPCODE },
  3894. { "movdqu", { XM, EXx }, PREFIX_OPCODE },
  3895. { "movdqa", { XM, EXx }, PREFIX_OPCODE },
  3896. },
  3897. /* PREFIX_0F70 */
  3898. {
  3899. { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
  3900. { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
  3901. { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
  3902. { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
  3903. },
  3904. /* PREFIX_0F73_REG_3 */
  3905. {
  3906. { Bad_Opcode },
  3907. { Bad_Opcode },
  3908. { "psrldq", { XS, Ib }, 0 },
  3909. },
  3910. /* PREFIX_0F73_REG_7 */
  3911. {
  3912. { Bad_Opcode },
  3913. { Bad_Opcode },
  3914. { "pslldq", { XS, Ib }, 0 },
  3915. },
  3916. /* PREFIX_0F78 */
  3917. {
  3918. {"vmread", { Em, Gm }, 0 },
  3919. { Bad_Opcode },
  3920. {"extrq", { XS, Ib, Ib }, 0 },
  3921. {"insertq", { XM, XS, Ib, Ib }, 0 },
  3922. },
  3923. /* PREFIX_0F79 */
  3924. {
  3925. {"vmwrite", { Gm, Em }, 0 },
  3926. { Bad_Opcode },
  3927. {"extrq", { XM, XS }, 0 },
  3928. {"insertq", { XM, XS }, 0 },
  3929. },
  3930. /* PREFIX_0F7C */
  3931. {
  3932. { Bad_Opcode },
  3933. { Bad_Opcode },
  3934. { "haddpd", { XM, EXx }, PREFIX_OPCODE },
  3935. { "haddps", { XM, EXx }, PREFIX_OPCODE },
  3936. },
  3937. /* PREFIX_0F7D */
  3938. {
  3939. { Bad_Opcode },
  3940. { Bad_Opcode },
  3941. { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
  3942. { "hsubps", { XM, EXx }, PREFIX_OPCODE },
  3943. },
  3944. /* PREFIX_0F7E */
  3945. {
  3946. { "movK", { Edq, MX }, PREFIX_OPCODE },
  3947. { "movq", { XM, EXq }, PREFIX_OPCODE },
  3948. { "movK", { Edq, XM }, PREFIX_OPCODE },
  3949. },
  3950. /* PREFIX_0F7F */
  3951. {
  3952. { "movq", { EMS, MX }, PREFIX_OPCODE },
  3953. { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
  3954. { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
  3955. },
  3956. /* PREFIX_0FAE_REG_0 */
  3957. {
  3958. { Bad_Opcode },
  3959. { "rdfsbase", { Ev }, 0 },
  3960. },
  3961. /* PREFIX_0FAE_REG_1 */
  3962. {
  3963. { Bad_Opcode },
  3964. { "rdgsbase", { Ev }, 0 },
  3965. },
  3966. /* PREFIX_0FAE_REG_2 */
  3967. {
  3968. { Bad_Opcode },
  3969. { "wrfsbase", { Ev }, 0 },
  3970. },
  3971. /* PREFIX_0FAE_REG_3 */
  3972. {
  3973. { Bad_Opcode },
  3974. { "wrgsbase", { Ev }, 0 },
  3975. },
  3976. /* PREFIX_MOD_0_0FAE_REG_4 */
  3977. {
  3978. { "xsave", { FXSAVE }, 0 },
  3979. { "ptwrite%LQ", { Edq }, 0 },
  3980. },
  3981. /* PREFIX_MOD_3_0FAE_REG_4 */
  3982. {
  3983. { Bad_Opcode },
  3984. { "ptwrite%LQ", { Edq }, 0 },
  3985. },
  3986. /* PREFIX_MOD_0_0FAE_REG_5 */
  3987. {
  3988. { "xrstor", { FXSAVE }, PREFIX_OPCODE },
  3989. },
  3990. /* PREFIX_MOD_3_0FAE_REG_5 */
  3991. {
  3992. { "lfence", { Skip_MODRM }, 0 },
  3993. { "incsspK", { Rdq }, PREFIX_OPCODE },
  3994. },
  3995. /* PREFIX_0FAE_REG_6 */
  3996. {
  3997. { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
  3998. { "clrssbsy", { Mq }, PREFIX_OPCODE },
  3999. { "clwb", { Mb }, PREFIX_OPCODE },
  4000. },
  4001. /* PREFIX_0FAE_REG_7 */
  4002. {
  4003. { "clflush", { Mb }, 0 },
  4004. { Bad_Opcode },
  4005. { "clflushopt", { Mb }, 0 },
  4006. },
  4007. /* PREFIX_0FB8 */
  4008. {
  4009. { Bad_Opcode },
  4010. { "popcntS", { Gv, Ev }, 0 },
  4011. },
  4012. /* PREFIX_0FBC */
  4013. {
  4014. { "bsfS", { Gv, Ev }, 0 },
  4015. { "tzcntS", { Gv, Ev }, 0 },
  4016. { "bsfS", { Gv, Ev }, 0 },
  4017. },
  4018. /* PREFIX_0FBD */
  4019. {
  4020. { "bsrS", { Gv, Ev }, 0 },
  4021. { "lzcntS", { Gv, Ev }, 0 },
  4022. { "bsrS", { Gv, Ev }, 0 },
  4023. },
  4024. /* PREFIX_0FC2 */
  4025. {
  4026. { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
  4027. { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
  4028. { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
  4029. { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
  4030. },
  4031. /* PREFIX_MOD_0_0FC3 */
  4032. {
  4033. { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
  4034. },
  4035. /* PREFIX_MOD_0_0FC7_REG_6 */
  4036. {
  4037. { "vmptrld",{ Mq }, 0 },
  4038. { "vmxon", { Mq }, 0 },
  4039. { "vmclear",{ Mq }, 0 },
  4040. },
  4041. /* PREFIX_MOD_3_0FC7_REG_6 */
  4042. {
  4043. { "rdrand", { Ev }, 0 },
  4044. { Bad_Opcode },
  4045. { "rdrand", { Ev }, 0 }
  4046. },
  4047. /* PREFIX_MOD_3_0FC7_REG_7 */
  4048. {
  4049. { "rdseed", { Ev }, 0 },
  4050. { "rdpid", { Em }, 0 },
  4051. { "rdseed", { Ev }, 0 },
  4052. },
  4053. /* PREFIX_0FD0 */
  4054. {
  4055. { Bad_Opcode },
  4056. { Bad_Opcode },
  4057. { "addsubpd", { XM, EXx }, 0 },
  4058. { "addsubps", { XM, EXx }, 0 },
  4059. },
  4060. /* PREFIX_0FD6 */
  4061. {
  4062. { Bad_Opcode },
  4063. { "movq2dq",{ XM, MS }, 0 },
  4064. { "movq", { EXqS, XM }, 0 },
  4065. { "movdq2q",{ MX, XS }, 0 },
  4066. },
  4067. /* PREFIX_0FE6 */
  4068. {
  4069. { Bad_Opcode },
  4070. { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
  4071. { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
  4072. { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
  4073. },
  4074. /* PREFIX_0FE7 */
  4075. {
  4076. { "movntq", { Mq, MX }, PREFIX_OPCODE },
  4077. { Bad_Opcode },
  4078. { MOD_TABLE (MOD_0FE7_PREFIX_2) },
  4079. },
  4080. /* PREFIX_0FF0 */
  4081. {
  4082. { Bad_Opcode },
  4083. { Bad_Opcode },
  4084. { Bad_Opcode },
  4085. { MOD_TABLE (MOD_0FF0_PREFIX_3) },
  4086. },
  4087. /* PREFIX_0FF7 */
  4088. {
  4089. { "maskmovq", { MX, MS }, PREFIX_OPCODE },
  4090. { Bad_Opcode },
  4091. { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
  4092. },
  4093. /* PREFIX_0F3810 */
  4094. {
  4095. { Bad_Opcode },
  4096. { Bad_Opcode },
  4097. { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
  4098. },
  4099. /* PREFIX_0F3814 */
  4100. {
  4101. { Bad_Opcode },
  4102. { Bad_Opcode },
  4103. { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
  4104. },
  4105. /* PREFIX_0F3815 */
  4106. {
  4107. { Bad_Opcode },
  4108. { Bad_Opcode },
  4109. { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
  4110. },
  4111. /* PREFIX_0F3817 */
  4112. {
  4113. { Bad_Opcode },
  4114. { Bad_Opcode },
  4115. { "ptest", { XM, EXx }, PREFIX_OPCODE },
  4116. },
  4117. /* PREFIX_0F3820 */
  4118. {
  4119. { Bad_Opcode },
  4120. { Bad_Opcode },
  4121. { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
  4122. },
  4123. /* PREFIX_0F3821 */
  4124. {
  4125. { Bad_Opcode },
  4126. { Bad_Opcode },
  4127. { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
  4128. },
  4129. /* PREFIX_0F3822 */
  4130. {
  4131. { Bad_Opcode },
  4132. { Bad_Opcode },
  4133. { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
  4134. },
  4135. /* PREFIX_0F3823 */
  4136. {
  4137. { Bad_Opcode },
  4138. { Bad_Opcode },
  4139. { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
  4140. },
  4141. /* PREFIX_0F3824 */
  4142. {
  4143. { Bad_Opcode },
  4144. { Bad_Opcode },
  4145. { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
  4146. },
  4147. /* PREFIX_0F3825 */
  4148. {
  4149. { Bad_Opcode },
  4150. { Bad_Opcode },
  4151. { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
  4152. },
  4153. /* PREFIX_0F3828 */
  4154. {
  4155. { Bad_Opcode },
  4156. { Bad_Opcode },
  4157. { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
  4158. },
  4159. /* PREFIX_0F3829 */
  4160. {
  4161. { Bad_Opcode },
  4162. { Bad_Opcode },
  4163. { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
  4164. },
  4165. /* PREFIX_0F382A */
  4166. {
  4167. { Bad_Opcode },
  4168. { Bad_Opcode },
  4169. { MOD_TABLE (MOD_0F382A_PREFIX_2) },
  4170. },
  4171. /* PREFIX_0F382B */
  4172. {
  4173. { Bad_Opcode },
  4174. { Bad_Opcode },
  4175. { "packusdw", { XM, EXx }, PREFIX_OPCODE },
  4176. },
  4177. /* PREFIX_0F3830 */
  4178. {
  4179. { Bad_Opcode },
  4180. { Bad_Opcode },
  4181. { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
  4182. },
  4183. /* PREFIX_0F3831 */
  4184. {
  4185. { Bad_Opcode },
  4186. { Bad_Opcode },
  4187. { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
  4188. },
  4189. /* PREFIX_0F3832 */
  4190. {
  4191. { Bad_Opcode },
  4192. { Bad_Opcode },
  4193. { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
  4194. },
  4195. /* PREFIX_0F3833 */
  4196. {
  4197. { Bad_Opcode },
  4198. { Bad_Opcode },
  4199. { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
  4200. },
  4201. /* PREFIX_0F3834 */
  4202. {
  4203. { Bad_Opcode },
  4204. { Bad_Opcode },
  4205. { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
  4206. },
  4207. /* PREFIX_0F3835 */
  4208. {
  4209. { Bad_Opcode },
  4210. { Bad_Opcode },
  4211. { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
  4212. },
  4213. /* PREFIX_0F3837 */
  4214. {
  4215. { Bad_Opcode },
  4216. { Bad_Opcode },
  4217. { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
  4218. },
  4219. /* PREFIX_0F3838 */
  4220. {
  4221. { Bad_Opcode },
  4222. { Bad_Opcode },
  4223. { "pminsb", { XM, EXx }, PREFIX_OPCODE },
  4224. },
  4225. /* PREFIX_0F3839 */
  4226. {
  4227. { Bad_Opcode },
  4228. { Bad_Opcode },
  4229. { "pminsd", { XM, EXx }, PREFIX_OPCODE },
  4230. },
  4231. /* PREFIX_0F383A */
  4232. {
  4233. { Bad_Opcode },
  4234. { Bad_Opcode },
  4235. { "pminuw", { XM, EXx }, PREFIX_OPCODE },
  4236. },
  4237. /* PREFIX_0F383B */
  4238. {
  4239. { Bad_Opcode },
  4240. { Bad_Opcode },
  4241. { "pminud", { XM, EXx }, PREFIX_OPCODE },
  4242. },
  4243. /* PREFIX_0F383C */
  4244. {
  4245. { Bad_Opcode },
  4246. { Bad_Opcode },
  4247. { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
  4248. },
  4249. /* PREFIX_0F383D */
  4250. {
  4251. { Bad_Opcode },
  4252. { Bad_Opcode },
  4253. { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
  4254. },
  4255. /* PREFIX_0F383E */
  4256. {
  4257. { Bad_Opcode },
  4258. { Bad_Opcode },
  4259. { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
  4260. },
  4261. /* PREFIX_0F383F */
  4262. {
  4263. { Bad_Opcode },
  4264. { Bad_Opcode },
  4265. { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
  4266. },
  4267. /* PREFIX_0F3840 */
  4268. {
  4269. { Bad_Opcode },
  4270. { Bad_Opcode },
  4271. { "pmulld", { XM, EXx }, PREFIX_OPCODE },
  4272. },
  4273. /* PREFIX_0F3841 */
  4274. {
  4275. { Bad_Opcode },
  4276. { Bad_Opcode },
  4277. { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
  4278. },
  4279. /* PREFIX_0F3880 */
  4280. {
  4281. { Bad_Opcode },
  4282. { Bad_Opcode },
  4283. { "invept", { Gm, Mo }, PREFIX_OPCODE },
  4284. },
  4285. /* PREFIX_0F3881 */
  4286. {
  4287. { Bad_Opcode },
  4288. { Bad_Opcode },
  4289. { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
  4290. },
  4291. /* PREFIX_0F3882 */
  4292. {
  4293. { Bad_Opcode },
  4294. { Bad_Opcode },
  4295. { "invpcid", { Gm, M }, PREFIX_OPCODE },
  4296. },
  4297. /* PREFIX_0F38C8 */
  4298. {
  4299. { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
  4300. },
  4301. /* PREFIX_0F38C9 */
  4302. {
  4303. { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
  4304. },
  4305. /* PREFIX_0F38CA */
  4306. {
  4307. { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
  4308. },
  4309. /* PREFIX_0F38CB */
  4310. {
  4311. { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
  4312. },
  4313. /* PREFIX_0F38CC */
  4314. {
  4315. { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
  4316. },
  4317. /* PREFIX_0F38CD */
  4318. {
  4319. { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
  4320. },
  4321. /* PREFIX_0F38DB */
  4322. {
  4323. { Bad_Opcode },
  4324. { Bad_Opcode },
  4325. { "aesimc", { XM, EXx }, PREFIX_OPCODE },
  4326. },
  4327. /* PREFIX_0F38DC */
  4328. {
  4329. { Bad_Opcode },
  4330. { Bad_Opcode },
  4331. { "aesenc", { XM, EXx }, PREFIX_OPCODE },
  4332. },
  4333. /* PREFIX_0F38DD */
  4334. {
  4335. { Bad_Opcode },
  4336. { Bad_Opcode },
  4337. { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
  4338. },
  4339. /* PREFIX_0F38DE */
  4340. {
  4341. { Bad_Opcode },
  4342. { Bad_Opcode },
  4343. { "aesdec", { XM, EXx }, PREFIX_OPCODE },
  4344. },
  4345. /* PREFIX_0F38DF */
  4346. {
  4347. { Bad_Opcode },
  4348. { Bad_Opcode },
  4349. { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
  4350. },
  4351. /* PREFIX_0F38F0 */
  4352. {
  4353. { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
  4354. { Bad_Opcode },
  4355. { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
  4356. { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
  4357. },
  4358. /* PREFIX_0F38F1 */
  4359. {
  4360. { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
  4361. { Bad_Opcode },
  4362. { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
  4363. { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
  4364. },
  4365. /* PREFIX_0F38F5 */
  4366. {
  4367. { Bad_Opcode },
  4368. { Bad_Opcode },
  4369. { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
  4370. },
  4371. /* PREFIX_0F38F6 */
  4372. {
  4373. { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
  4374. { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
  4375. { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
  4376. { Bad_Opcode },
  4377. },
  4378. /* PREFIX_0F3A08 */
  4379. {
  4380. { Bad_Opcode },
  4381. { Bad_Opcode },
  4382. { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
  4383. },
  4384. /* PREFIX_0F3A09 */
  4385. {
  4386. { Bad_Opcode },
  4387. { Bad_Opcode },
  4388. { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
  4389. },
  4390. /* PREFIX_0F3A0A */
  4391. {
  4392. { Bad_Opcode },
  4393. { Bad_Opcode },
  4394. { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
  4395. },
  4396. /* PREFIX_0F3A0B */
  4397. {
  4398. { Bad_Opcode },
  4399. { Bad_Opcode },
  4400. { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
  4401. },
  4402. /* PREFIX_0F3A0C */
  4403. {
  4404. { Bad_Opcode },
  4405. { Bad_Opcode },
  4406. { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
  4407. },
  4408. /* PREFIX_0F3A0D */
  4409. {
  4410. { Bad_Opcode },
  4411. { Bad_Opcode },
  4412. { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
  4413. },
  4414. /* PREFIX_0F3A0E */
  4415. {
  4416. { Bad_Opcode },
  4417. { Bad_Opcode },
  4418. { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
  4419. },
  4420. /* PREFIX_0F3A14 */
  4421. {
  4422. { Bad_Opcode },
  4423. { Bad_Opcode },
  4424. { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
  4425. },
  4426. /* PREFIX_0F3A15 */
  4427. {
  4428. { Bad_Opcode },
  4429. { Bad_Opcode },
  4430. { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
  4431. },
  4432. /* PREFIX_0F3A16 */
  4433. {
  4434. { Bad_Opcode },
  4435. { Bad_Opcode },
  4436. { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
  4437. },
  4438. /* PREFIX_0F3A17 */
  4439. {
  4440. { Bad_Opcode },
  4441. { Bad_Opcode },
  4442. { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
  4443. },
  4444. /* PREFIX_0F3A20 */
  4445. {
  4446. { Bad_Opcode },
  4447. { Bad_Opcode },
  4448. { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
  4449. },
  4450. /* PREFIX_0F3A21 */
  4451. {
  4452. { Bad_Opcode },
  4453. { Bad_Opcode },
  4454. { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
  4455. },
  4456. /* PREFIX_0F3A22 */
  4457. {
  4458. { Bad_Opcode },
  4459. { Bad_Opcode },
  4460. { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
  4461. },
  4462. /* PREFIX_0F3A40 */
  4463. {
  4464. { Bad_Opcode },
  4465. { Bad_Opcode },
  4466. { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
  4467. },
  4468. /* PREFIX_0F3A41 */
  4469. {
  4470. { Bad_Opcode },
  4471. { Bad_Opcode },
  4472. { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
  4473. },
  4474. /* PREFIX_0F3A42 */
  4475. {
  4476. { Bad_Opcode },
  4477. { Bad_Opcode },
  4478. { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
  4479. },
  4480. /* PREFIX_0F3A44 */
  4481. {
  4482. { Bad_Opcode },
  4483. { Bad_Opcode },
  4484. { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
  4485. },
  4486. /* PREFIX_0F3A60 */
  4487. {
  4488. { Bad_Opcode },
  4489. { Bad_Opcode },
  4490. { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
  4491. },
  4492. /* PREFIX_0F3A61 */
  4493. {
  4494. { Bad_Opcode },
  4495. { Bad_Opcode },
  4496. { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
  4497. },
  4498. /* PREFIX_0F3A62 */
  4499. {
  4500. { Bad_Opcode },
  4501. { Bad_Opcode },
  4502. { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
  4503. },
  4504. /* PREFIX_0F3A63 */
  4505. {
  4506. { Bad_Opcode },
  4507. { Bad_Opcode },
  4508. { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
  4509. },
  4510. /* PREFIX_0F3ACC */
  4511. {
  4512. { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
  4513. },
  4514. /* PREFIX_0F3ADF */
  4515. {
  4516. { Bad_Opcode },
  4517. { Bad_Opcode },
  4518. { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
  4519. },
  4520. /* PREFIX_VEX_0F10 */
  4521. {
  4522. { VEX_W_TABLE (VEX_W_0F10_P_0) },
  4523. { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
  4524. { VEX_W_TABLE (VEX_W_0F10_P_2) },
  4525. { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
  4526. },
  4527. /* PREFIX_VEX_0F11 */
  4528. {
  4529. { VEX_W_TABLE (VEX_W_0F11_P_0) },
  4530. { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
  4531. { VEX_W_TABLE (VEX_W_0F11_P_2) },
  4532. { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
  4533. },
  4534. /* PREFIX_VEX_0F12 */
  4535. {
  4536. { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
  4537. { VEX_W_TABLE (VEX_W_0F12_P_1) },
  4538. { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
  4539. { VEX_W_TABLE (VEX_W_0F12_P_3) },
  4540. },
  4541. /* PREFIX_VEX_0F16 */
  4542. {
  4543. { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
  4544. { VEX_W_TABLE (VEX_W_0F16_P_1) },
  4545. { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
  4546. },
  4547. /* PREFIX_VEX_0F2A */
  4548. {
  4549. { Bad_Opcode },
  4550. { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
  4551. { Bad_Opcode },
  4552. { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
  4553. },
  4554. /* PREFIX_VEX_0F2C */
  4555. {
  4556. { Bad_Opcode },
  4557. { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
  4558. { Bad_Opcode },
  4559. { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
  4560. },
  4561. /* PREFIX_VEX_0F2D */
  4562. {
  4563. { Bad_Opcode },
  4564. { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
  4565. { Bad_Opcode },
  4566. { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
  4567. },
  4568. /* PREFIX_VEX_0F2E */
  4569. {
  4570. { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
  4571. { Bad_Opcode },
  4572. { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
  4573. },
  4574. /* PREFIX_VEX_0F2F */
  4575. {
  4576. { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
  4577. { Bad_Opcode },
  4578. { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
  4579. },
  4580. /* PREFIX_VEX_0F41 */
  4581. {
  4582. { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
  4583. { Bad_Opcode },
  4584. { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
  4585. },
  4586. /* PREFIX_VEX_0F42 */
  4587. {
  4588. { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
  4589. { Bad_Opcode },
  4590. { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
  4591. },
  4592. /* PREFIX_VEX_0F44 */
  4593. {
  4594. { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
  4595. { Bad_Opcode },
  4596. { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
  4597. },
  4598. /* PREFIX_VEX_0F45 */
  4599. {
  4600. { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
  4601. { Bad_Opcode },
  4602. { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
  4603. },
  4604. /* PREFIX_VEX_0F46 */
  4605. {
  4606. { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
  4607. { Bad_Opcode },
  4608. { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
  4609. },
  4610. /* PREFIX_VEX_0F47 */
  4611. {
  4612. { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
  4613. { Bad_Opcode },
  4614. { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
  4615. },
  4616. /* PREFIX_VEX_0F4A */
  4617. {
  4618. { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
  4619. { Bad_Opcode },
  4620. { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
  4621. },
  4622. /* PREFIX_VEX_0F4B */
  4623. {
  4624. { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
  4625. { Bad_Opcode },
  4626. { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
  4627. },
  4628. /* PREFIX_VEX_0F51 */
  4629. {
  4630. { VEX_W_TABLE (VEX_W_0F51_P_0) },
  4631. { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
  4632. { VEX_W_TABLE (VEX_W_0F51_P_2) },
  4633. { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
  4634. },
  4635. /* PREFIX_VEX_0F52 */
  4636. {
  4637. { VEX_W_TABLE (VEX_W_0F52_P_0) },
  4638. { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
  4639. },
  4640. /* PREFIX_VEX_0F53 */
  4641. {
  4642. { VEX_W_TABLE (VEX_W_0F53_P_0) },
  4643. { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
  4644. },
  4645. /* PREFIX_VEX_0F58 */
  4646. {
  4647. { VEX_W_TABLE (VEX_W_0F58_P_0) },
  4648. { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
  4649. { VEX_W_TABLE (VEX_W_0F58_P_2) },
  4650. { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
  4651. },
  4652. /* PREFIX_VEX_0F59 */
  4653. {
  4654. { VEX_W_TABLE (VEX_W_0F59_P_0) },
  4655. { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
  4656. { VEX_W_TABLE (VEX_W_0F59_P_2) },
  4657. { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
  4658. },
  4659. /* PREFIX_VEX_0F5A */
  4660. {
  4661. { VEX_W_TABLE (VEX_W_0F5A_P_0) },
  4662. { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
  4663. { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
  4664. { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
  4665. },
  4666. /* PREFIX_VEX_0F5B */
  4667. {
  4668. { VEX_W_TABLE (VEX_W_0F5B_P_0) },
  4669. { VEX_W_TABLE (VEX_W_0F5B_P_1) },
  4670. { VEX_W_TABLE (VEX_W_0F5B_P_2) },
  4671. },
  4672. /* PREFIX_VEX_0F5C */
  4673. {
  4674. { VEX_W_TABLE (VEX_W_0F5C_P_0) },
  4675. { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
  4676. { VEX_W_TABLE (VEX_W_0F5C_P_2) },
  4677. { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
  4678. },
  4679. /* PREFIX_VEX_0F5D */
  4680. {
  4681. { VEX_W_TABLE (VEX_W_0F5D_P_0) },
  4682. { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
  4683. { VEX_W_TABLE (VEX_W_0F5D_P_2) },
  4684. { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
  4685. },
  4686. /* PREFIX_VEX_0F5E */
  4687. {
  4688. { VEX_W_TABLE (VEX_W_0F5E_P_0) },
  4689. { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
  4690. { VEX_W_TABLE (VEX_W_0F5E_P_2) },
  4691. { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
  4692. },
  4693. /* PREFIX_VEX_0F5F */
  4694. {
  4695. { VEX_W_TABLE (VEX_W_0F5F_P_0) },
  4696. { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
  4697. { VEX_W_TABLE (VEX_W_0F5F_P_2) },
  4698. { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
  4699. },
  4700. /* PREFIX_VEX_0F60 */
  4701. {
  4702. { Bad_Opcode },
  4703. { Bad_Opcode },
  4704. { VEX_W_TABLE (VEX_W_0F60_P_2) },
  4705. },
  4706. /* PREFIX_VEX_0F61 */
  4707. {
  4708. { Bad_Opcode },
  4709. { Bad_Opcode },
  4710. { VEX_W_TABLE (VEX_W_0F61_P_2) },
  4711. },
  4712. /* PREFIX_VEX_0F62 */
  4713. {
  4714. { Bad_Opcode },
  4715. { Bad_Opcode },
  4716. { VEX_W_TABLE (VEX_W_0F62_P_2) },
  4717. },
  4718. /* PREFIX_VEX_0F63 */
  4719. {
  4720. { Bad_Opcode },
  4721. { Bad_Opcode },
  4722. { VEX_W_TABLE (VEX_W_0F63_P_2) },
  4723. },
  4724. /* PREFIX_VEX_0F64 */
  4725. {
  4726. { Bad_Opcode },
  4727. { Bad_Opcode },
  4728. { VEX_W_TABLE (VEX_W_0F64_P_2) },
  4729. },
  4730. /* PREFIX_VEX_0F65 */
  4731. {
  4732. { Bad_Opcode },
  4733. { Bad_Opcode },
  4734. { VEX_W_TABLE (VEX_W_0F65_P_2) },
  4735. },
  4736. /* PREFIX_VEX_0F66 */
  4737. {
  4738. { Bad_Opcode },
  4739. { Bad_Opcode },
  4740. { VEX_W_TABLE (VEX_W_0F66_P_2) },
  4741. },
  4742. /* PREFIX_VEX_0F67 */
  4743. {
  4744. { Bad_Opcode },
  4745. { Bad_Opcode },
  4746. { VEX_W_TABLE (VEX_W_0F67_P_2) },
  4747. },
  4748. /* PREFIX_VEX_0F68 */
  4749. {
  4750. { Bad_Opcode },
  4751. { Bad_Opcode },
  4752. { VEX_W_TABLE (VEX_W_0F68_P_2) },
  4753. },
  4754. /* PREFIX_VEX_0F69 */
  4755. {
  4756. { Bad_Opcode },
  4757. { Bad_Opcode },
  4758. { VEX_W_TABLE (VEX_W_0F69_P_2) },
  4759. },
  4760. /* PREFIX_VEX_0F6A */
  4761. {
  4762. { Bad_Opcode },
  4763. { Bad_Opcode },
  4764. { VEX_W_TABLE (VEX_W_0F6A_P_2) },
  4765. },
  4766. /* PREFIX_VEX_0F6B */
  4767. {
  4768. { Bad_Opcode },
  4769. { Bad_Opcode },
  4770. { VEX_W_TABLE (VEX_W_0F6B_P_2) },
  4771. },
  4772. /* PREFIX_VEX_0F6C */
  4773. {
  4774. { Bad_Opcode },
  4775. { Bad_Opcode },
  4776. { VEX_W_TABLE (VEX_W_0F6C_P_2) },
  4777. },
  4778. /* PREFIX_VEX_0F6D */
  4779. {
  4780. { Bad_Opcode },
  4781. { Bad_Opcode },
  4782. { VEX_W_TABLE (VEX_W_0F6D_P_2) },
  4783. },
  4784. /* PREFIX_VEX_0F6E */
  4785. {
  4786. { Bad_Opcode },
  4787. { Bad_Opcode },
  4788. { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
  4789. },
  4790. /* PREFIX_VEX_0F6F */
  4791. {
  4792. { Bad_Opcode },
  4793. { VEX_W_TABLE (VEX_W_0F6F_P_1) },
  4794. { VEX_W_TABLE (VEX_W_0F6F_P_2) },
  4795. },
  4796. /* PREFIX_VEX_0F70 */
  4797. {
  4798. { Bad_Opcode },
  4799. { VEX_W_TABLE (VEX_W_0F70_P_1) },
  4800. { VEX_W_TABLE (VEX_W_0F70_P_2) },
  4801. { VEX_W_TABLE (VEX_W_0F70_P_3) },
  4802. },
  4803. /* PREFIX_VEX_0F71_REG_2 */
  4804. {
  4805. { Bad_Opcode },
  4806. { Bad_Opcode },
  4807. { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
  4808. },
  4809. /* PREFIX_VEX_0F71_REG_4 */
  4810. {
  4811. { Bad_Opcode },
  4812. { Bad_Opcode },
  4813. { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
  4814. },
  4815. /* PREFIX_VEX_0F71_REG_6 */
  4816. {
  4817. { Bad_Opcode },
  4818. { Bad_Opcode },
  4819. { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
  4820. },
  4821. /* PREFIX_VEX_0F72_REG_2 */
  4822. {
  4823. { Bad_Opcode },
  4824. { Bad_Opcode },
  4825. { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
  4826. },
  4827. /* PREFIX_VEX_0F72_REG_4 */
  4828. {
  4829. { Bad_Opcode },
  4830. { Bad_Opcode },
  4831. { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
  4832. },
  4833. /* PREFIX_VEX_0F72_REG_6 */
  4834. {
  4835. { Bad_Opcode },
  4836. { Bad_Opcode },
  4837. { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
  4838. },
  4839. /* PREFIX_VEX_0F73_REG_2 */
  4840. {
  4841. { Bad_Opcode },
  4842. { Bad_Opcode },
  4843. { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
  4844. },
  4845. /* PREFIX_VEX_0F73_REG_3 */
  4846. {
  4847. { Bad_Opcode },
  4848. { Bad_Opcode },
  4849. { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
  4850. },
  4851. /* PREFIX_VEX_0F73_REG_6 */
  4852. {
  4853. { Bad_Opcode },
  4854. { Bad_Opcode },
  4855. { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
  4856. },
  4857. /* PREFIX_VEX_0F73_REG_7 */
  4858. {
  4859. { Bad_Opcode },
  4860. { Bad_Opcode },
  4861. { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
  4862. },
  4863. /* PREFIX_VEX_0F74 */
  4864. {
  4865. { Bad_Opcode },
  4866. { Bad_Opcode },
  4867. { VEX_W_TABLE (VEX_W_0F74_P_2) },
  4868. },
  4869. /* PREFIX_VEX_0F75 */
  4870. {
  4871. { Bad_Opcode },
  4872. { Bad_Opcode },
  4873. { VEX_W_TABLE (VEX_W_0F75_P_2) },
  4874. },
  4875. /* PREFIX_VEX_0F76 */
  4876. {
  4877. { Bad_Opcode },
  4878. { Bad_Opcode },
  4879. { VEX_W_TABLE (VEX_W_0F76_P_2) },
  4880. },
  4881. /* PREFIX_VEX_0F77 */
  4882. {
  4883. { VEX_W_TABLE (VEX_W_0F77_P_0) },
  4884. },
  4885. /* PREFIX_VEX_0F7C */
  4886. {
  4887. { Bad_Opcode },
  4888. { Bad_Opcode },
  4889. { VEX_W_TABLE (VEX_W_0F7C_P_2) },
  4890. { VEX_W_TABLE (VEX_W_0F7C_P_3) },
  4891. },
  4892. /* PREFIX_VEX_0F7D */
  4893. {
  4894. { Bad_Opcode },
  4895. { Bad_Opcode },
  4896. { VEX_W_TABLE (VEX_W_0F7D_P_2) },
  4897. { VEX_W_TABLE (VEX_W_0F7D_P_3) },
  4898. },
  4899. /* PREFIX_VEX_0F7E */
  4900. {
  4901. { Bad_Opcode },
  4902. { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
  4903. { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
  4904. },
  4905. /* PREFIX_VEX_0F7F */
  4906. {
  4907. { Bad_Opcode },
  4908. { VEX_W_TABLE (VEX_W_0F7F_P_1) },
  4909. { VEX_W_TABLE (VEX_W_0F7F_P_2) },
  4910. },
  4911. /* PREFIX_VEX_0F90 */
  4912. {
  4913. { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
  4914. { Bad_Opcode },
  4915. { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
  4916. },
  4917. /* PREFIX_VEX_0F91 */
  4918. {
  4919. { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
  4920. { Bad_Opcode },
  4921. { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
  4922. },
  4923. /* PREFIX_VEX_0F92 */
  4924. {
  4925. { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
  4926. { Bad_Opcode },
  4927. { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
  4928. { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
  4929. },
  4930. /* PREFIX_VEX_0F93 */
  4931. {
  4932. { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
  4933. { Bad_Opcode },
  4934. { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
  4935. { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
  4936. },
  4937. /* PREFIX_VEX_0F98 */
  4938. {
  4939. { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
  4940. { Bad_Opcode },
  4941. { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
  4942. },
  4943. /* PREFIX_VEX_0F99 */
  4944. {
  4945. { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
  4946. { Bad_Opcode },
  4947. { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
  4948. },
  4949. /* PREFIX_VEX_0FC2 */
  4950. {
  4951. { VEX_W_TABLE (VEX_W_0FC2_P_0) },
  4952. { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
  4953. { VEX_W_TABLE (VEX_W_0FC2_P_2) },
  4954. { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
  4955. },
  4956. /* PREFIX_VEX_0FC4 */
  4957. {
  4958. { Bad_Opcode },
  4959. { Bad_Opcode },
  4960. { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
  4961. },
  4962. /* PREFIX_VEX_0FC5 */
  4963. {
  4964. { Bad_Opcode },
  4965. { Bad_Opcode },
  4966. { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
  4967. },
  4968. /* PREFIX_VEX_0FD0 */
  4969. {
  4970. { Bad_Opcode },
  4971. { Bad_Opcode },
  4972. { VEX_W_TABLE (VEX_W_0FD0_P_2) },
  4973. { VEX_W_TABLE (VEX_W_0FD0_P_3) },
  4974. },
  4975. /* PREFIX_VEX_0FD1 */
  4976. {
  4977. { Bad_Opcode },
  4978. { Bad_Opcode },
  4979. { VEX_W_TABLE (VEX_W_0FD1_P_2) },
  4980. },
  4981. /* PREFIX_VEX_0FD2 */
  4982. {
  4983. { Bad_Opcode },
  4984. { Bad_Opcode },
  4985. { VEX_W_TABLE (VEX_W_0FD2_P_2) },
  4986. },
  4987. /* PREFIX_VEX_0FD3 */
  4988. {
  4989. { Bad_Opcode },
  4990. { Bad_Opcode },
  4991. { VEX_W_TABLE (VEX_W_0FD3_P_2) },
  4992. },
  4993. /* PREFIX_VEX_0FD4 */
  4994. {
  4995. { Bad_Opcode },
  4996. { Bad_Opcode },
  4997. { VEX_W_TABLE (VEX_W_0FD4_P_2) },
  4998. },
  4999. /* PREFIX_VEX_0FD5 */
  5000. {
  5001. { Bad_Opcode },
  5002. { Bad_Opcode },
  5003. { VEX_W_TABLE (VEX_W_0FD5_P_2) },
  5004. },
  5005. /* PREFIX_VEX_0FD6 */
  5006. {
  5007. { Bad_Opcode },
  5008. { Bad_Opcode },
  5009. { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
  5010. },
  5011. /* PREFIX_VEX_0FD7 */
  5012. {
  5013. { Bad_Opcode },
  5014. { Bad_Opcode },
  5015. { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
  5016. },
  5017. /* PREFIX_VEX_0FD8 */
  5018. {
  5019. { Bad_Opcode },
  5020. { Bad_Opcode },
  5021. { VEX_W_TABLE (VEX_W_0FD8_P_2) },
  5022. },
  5023. /* PREFIX_VEX_0FD9 */
  5024. {
  5025. { Bad_Opcode },
  5026. { Bad_Opcode },
  5027. { VEX_W_TABLE (VEX_W_0FD9_P_2) },
  5028. },
  5029. /* PREFIX_VEX_0FDA */
  5030. {
  5031. { Bad_Opcode },
  5032. { Bad_Opcode },
  5033. { VEX_W_TABLE (VEX_W_0FDA_P_2) },
  5034. },
  5035. /* PREFIX_VEX_0FDB */
  5036. {
  5037. { Bad_Opcode },
  5038. { Bad_Opcode },
  5039. { VEX_W_TABLE (VEX_W_0FDB_P_2) },
  5040. },
  5041. /* PREFIX_VEX_0FDC */
  5042. {
  5043. { Bad_Opcode },
  5044. { Bad_Opcode },
  5045. { VEX_W_TABLE (VEX_W_0FDC_P_2) },
  5046. },
  5047. /* PREFIX_VEX_0FDD */
  5048. {
  5049. { Bad_Opcode },
  5050. { Bad_Opcode },
  5051. { VEX_W_TABLE (VEX_W_0FDD_P_2) },
  5052. },
  5053. /* PREFIX_VEX_0FDE */
  5054. {
  5055. { Bad_Opcode },
  5056. { Bad_Opcode },
  5057. { VEX_W_TABLE (VEX_W_0FDE_P_2) },
  5058. },
  5059. /* PREFIX_VEX_0FDF */
  5060. {
  5061. { Bad_Opcode },
  5062. { Bad_Opcode },
  5063. { VEX_W_TABLE (VEX_W_0FDF_P_2) },
  5064. },
  5065. /* PREFIX_VEX_0FE0 */
  5066. {
  5067. { Bad_Opcode },
  5068. { Bad_Opcode },
  5069. { VEX_W_TABLE (VEX_W_0FE0_P_2) },
  5070. },
  5071. /* PREFIX_VEX_0FE1 */
  5072. {
  5073. { Bad_Opcode },
  5074. { Bad_Opcode },
  5075. { VEX_W_TABLE (VEX_W_0FE1_P_2) },
  5076. },
  5077. /* PREFIX_VEX_0FE2 */
  5078. {
  5079. { Bad_Opcode },
  5080. { Bad_Opcode },
  5081. { VEX_W_TABLE (VEX_W_0FE2_P_2) },
  5082. },
  5083. /* PREFIX_VEX_0FE3 */
  5084. {
  5085. { Bad_Opcode },
  5086. { Bad_Opcode },
  5087. { VEX_W_TABLE (VEX_W_0FE3_P_2) },
  5088. },
  5089. /* PREFIX_VEX_0FE4 */
  5090. {
  5091. { Bad_Opcode },
  5092. { Bad_Opcode },
  5093. { VEX_W_TABLE (VEX_W_0FE4_P_2) },
  5094. },
  5095. /* PREFIX_VEX_0FE5 */
  5096. {
  5097. { Bad_Opcode },
  5098. { Bad_Opcode },
  5099. { VEX_W_TABLE (VEX_W_0FE5_P_2) },
  5100. },
  5101. /* PREFIX_VEX_0FE6 */
  5102. {
  5103. { Bad_Opcode },
  5104. { VEX_W_TABLE (VEX_W_0FE6_P_1) },
  5105. { VEX_W_TABLE (VEX_W_0FE6_P_2) },
  5106. { VEX_W_TABLE (VEX_W_0FE6_P_3) },
  5107. },
  5108. /* PREFIX_VEX_0FE7 */
  5109. {
  5110. { Bad_Opcode },
  5111. { Bad_Opcode },
  5112. { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
  5113. },
  5114. /* PREFIX_VEX_0FE8 */
  5115. {
  5116. { Bad_Opcode },
  5117. { Bad_Opcode },
  5118. { VEX_W_TABLE (VEX_W_0FE8_P_2) },
  5119. },
  5120. /* PREFIX_VEX_0FE9 */
  5121. {
  5122. { Bad_Opcode },
  5123. { Bad_Opcode },
  5124. { VEX_W_TABLE (VEX_W_0FE9_P_2) },
  5125. },
  5126. /* PREFIX_VEX_0FEA */
  5127. {
  5128. { Bad_Opcode },
  5129. { Bad_Opcode },
  5130. { VEX_W_TABLE (VEX_W_0FEA_P_2) },
  5131. },
  5132. /* PREFIX_VEX_0FEB */
  5133. {
  5134. { Bad_Opcode },
  5135. { Bad_Opcode },
  5136. { VEX_W_TABLE (VEX_W_0FEB_P_2) },
  5137. },
  5138. /* PREFIX_VEX_0FEC */
  5139. {
  5140. { Bad_Opcode },
  5141. { Bad_Opcode },
  5142. { VEX_W_TABLE (VEX_W_0FEC_P_2) },
  5143. },
  5144. /* PREFIX_VEX_0FED */
  5145. {
  5146. { Bad_Opcode },
  5147. { Bad_Opcode },
  5148. { VEX_W_TABLE (VEX_W_0FED_P_2) },
  5149. },
  5150. /* PREFIX_VEX_0FEE */
  5151. {
  5152. { Bad_Opcode },
  5153. { Bad_Opcode },
  5154. { VEX_W_TABLE (VEX_W_0FEE_P_2) },
  5155. },
  5156. /* PREFIX_VEX_0FEF */
  5157. {
  5158. { Bad_Opcode },
  5159. { Bad_Opcode },
  5160. { VEX_W_TABLE (VEX_W_0FEF_P_2) },
  5161. },
  5162. /* PREFIX_VEX_0FF0 */
  5163. {
  5164. { Bad_Opcode },
  5165. { Bad_Opcode },
  5166. { Bad_Opcode },
  5167. { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
  5168. },
  5169. /* PREFIX_VEX_0FF1 */
  5170. {
  5171. { Bad_Opcode },
  5172. { Bad_Opcode },
  5173. { VEX_W_TABLE (VEX_W_0FF1_P_2) },
  5174. },
  5175. /* PREFIX_VEX_0FF2 */
  5176. {
  5177. { Bad_Opcode },
  5178. { Bad_Opcode },
  5179. { VEX_W_TABLE (VEX_W_0FF2_P_2) },
  5180. },
  5181. /* PREFIX_VEX_0FF3 */
  5182. {
  5183. { Bad_Opcode },
  5184. { Bad_Opcode },
  5185. { VEX_W_TABLE (VEX_W_0FF3_P_2) },
  5186. },
  5187. /* PREFIX_VEX_0FF4 */
  5188. {
  5189. { Bad_Opcode },
  5190. { Bad_Opcode },
  5191. { VEX_W_TABLE (VEX_W_0FF4_P_2) },
  5192. },
  5193. /* PREFIX_VEX_0FF5 */
  5194. {
  5195. { Bad_Opcode },
  5196. { Bad_Opcode },
  5197. { VEX_W_TABLE (VEX_W_0FF5_P_2) },
  5198. },
  5199. /* PREFIX_VEX_0FF6 */
  5200. {
  5201. { Bad_Opcode },
  5202. { Bad_Opcode },
  5203. { VEX_W_TABLE (VEX_W_0FF6_P_2) },
  5204. },
  5205. /* PREFIX_VEX_0FF7 */
  5206. {
  5207. { Bad_Opcode },
  5208. { Bad_Opcode },
  5209. { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
  5210. },
  5211. /* PREFIX_VEX_0FF8 */
  5212. {
  5213. { Bad_Opcode },
  5214. { Bad_Opcode },
  5215. { VEX_W_TABLE (VEX_W_0FF8_P_2) },
  5216. },
  5217. /* PREFIX_VEX_0FF9 */
  5218. {
  5219. { Bad_Opcode },
  5220. { Bad_Opcode },
  5221. { VEX_W_TABLE (VEX_W_0FF9_P_2) },
  5222. },
  5223. /* PREFIX_VEX_0FFA */
  5224. {
  5225. { Bad_Opcode },
  5226. { Bad_Opcode },
  5227. { VEX_W_TABLE (VEX_W_0FFA_P_2) },
  5228. },
  5229. /* PREFIX_VEX_0FFB */
  5230. {
  5231. { Bad_Opcode },
  5232. { Bad_Opcode },
  5233. { VEX_W_TABLE (VEX_W_0FFB_P_2) },
  5234. },
  5235. /* PREFIX_VEX_0FFC */
  5236. {
  5237. { Bad_Opcode },
  5238. { Bad_Opcode },
  5239. { VEX_W_TABLE (VEX_W_0FFC_P_2) },
  5240. },
  5241. /* PREFIX_VEX_0FFD */
  5242. {
  5243. { Bad_Opcode },
  5244. { Bad_Opcode },
  5245. { VEX_W_TABLE (VEX_W_0FFD_P_2) },
  5246. },
  5247. /* PREFIX_VEX_0FFE */
  5248. {
  5249. { Bad_Opcode },
  5250. { Bad_Opcode },
  5251. { VEX_W_TABLE (VEX_W_0FFE_P_2) },
  5252. },
  5253. /* PREFIX_VEX_0F3800 */
  5254. {
  5255. { Bad_Opcode },
  5256. { Bad_Opcode },
  5257. { VEX_W_TABLE (VEX_W_0F3800_P_2) },
  5258. },
  5259. /* PREFIX_VEX_0F3801 */
  5260. {
  5261. { Bad_Opcode },
  5262. { Bad_Opcode },
  5263. { VEX_W_TABLE (VEX_W_0F3801_P_2) },
  5264. },
  5265. /* PREFIX_VEX_0F3802 */
  5266. {
  5267. { Bad_Opcode },
  5268. { Bad_Opcode },
  5269. { VEX_W_TABLE (VEX_W_0F3802_P_2) },
  5270. },
  5271. /* PREFIX_VEX_0F3803 */
  5272. {
  5273. { Bad_Opcode },
  5274. { Bad_Opcode },
  5275. { VEX_W_TABLE (VEX_W_0F3803_P_2) },
  5276. },
  5277. /* PREFIX_VEX_0F3804 */
  5278. {
  5279. { Bad_Opcode },
  5280. { Bad_Opcode },
  5281. { VEX_W_TABLE (VEX_W_0F3804_P_2) },
  5282. },
  5283. /* PREFIX_VEX_0F3805 */
  5284. {
  5285. { Bad_Opcode },
  5286. { Bad_Opcode },
  5287. { VEX_W_TABLE (VEX_W_0F3805_P_2) },
  5288. },
  5289. /* PREFIX_VEX_0F3806 */
  5290. {
  5291. { Bad_Opcode },
  5292. { Bad_Opcode },
  5293. { VEX_W_TABLE (VEX_W_0F3806_P_2) },
  5294. },
  5295. /* PREFIX_VEX_0F3807 */
  5296. {
  5297. { Bad_Opcode },
  5298. { Bad_Opcode },
  5299. { VEX_W_TABLE (VEX_W_0F3807_P_2) },
  5300. },
  5301. /* PREFIX_VEX_0F3808 */
  5302. {
  5303. { Bad_Opcode },
  5304. { Bad_Opcode },
  5305. { VEX_W_TABLE (VEX_W_0F3808_P_2) },
  5306. },
  5307. /* PREFIX_VEX_0F3809 */
  5308. {
  5309. { Bad_Opcode },
  5310. { Bad_Opcode },
  5311. { VEX_W_TABLE (VEX_W_0F3809_P_2) },
  5312. },
  5313. /* PREFIX_VEX_0F380A */
  5314. {
  5315. { Bad_Opcode },
  5316. { Bad_Opcode },
  5317. { VEX_W_TABLE (VEX_W_0F380A_P_2) },
  5318. },
  5319. /* PREFIX_VEX_0F380B */
  5320. {
  5321. { Bad_Opcode },
  5322. { Bad_Opcode },
  5323. { VEX_W_TABLE (VEX_W_0F380B_P_2) },
  5324. },
  5325. /* PREFIX_VEX_0F380C */
  5326. {
  5327. { Bad_Opcode },
  5328. { Bad_Opcode },
  5329. { VEX_W_TABLE (VEX_W_0F380C_P_2) },
  5330. },
  5331. /* PREFIX_VEX_0F380D */
  5332. {
  5333. { Bad_Opcode },
  5334. { Bad_Opcode },
  5335. { VEX_W_TABLE (VEX_W_0F380D_P_2) },
  5336. },
  5337. /* PREFIX_VEX_0F380E */
  5338. {
  5339. { Bad_Opcode },
  5340. { Bad_Opcode },
  5341. { VEX_W_TABLE (VEX_W_0F380E_P_2) },
  5342. },
  5343. /* PREFIX_VEX_0F380F */
  5344. {
  5345. { Bad_Opcode },
  5346. { Bad_Opcode },
  5347. { VEX_W_TABLE (VEX_W_0F380F_P_2) },
  5348. },
  5349. /* PREFIX_VEX_0F3813 */
  5350. {
  5351. { Bad_Opcode },
  5352. { Bad_Opcode },
  5353. { "vcvtph2ps", { XM, EXxmmq }, 0 },
  5354. },
  5355. /* PREFIX_VEX_0F3816 */
  5356. {
  5357. { Bad_Opcode },
  5358. { Bad_Opcode },
  5359. { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
  5360. },
  5361. /* PREFIX_VEX_0F3817 */
  5362. {
  5363. { Bad_Opcode },
  5364. { Bad_Opcode },
  5365. { VEX_W_TABLE (VEX_W_0F3817_P_2) },
  5366. },
  5367. /* PREFIX_VEX_0F3818 */
  5368. {
  5369. { Bad_Opcode },
  5370. { Bad_Opcode },
  5371. { VEX_W_TABLE (VEX_W_0F3818_P_2) },
  5372. },
  5373. /* PREFIX_VEX_0F3819 */
  5374. {
  5375. { Bad_Opcode },
  5376. { Bad_Opcode },
  5377. { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
  5378. },
  5379. /* PREFIX_VEX_0F381A */
  5380. {
  5381. { Bad_Opcode },
  5382. { Bad_Opcode },
  5383. { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
  5384. },
  5385. /* PREFIX_VEX_0F381C */
  5386. {
  5387. { Bad_Opcode },
  5388. { Bad_Opcode },
  5389. { VEX_W_TABLE (VEX_W_0F381C_P_2) },
  5390. },
  5391. /* PREFIX_VEX_0F381D */
  5392. {
  5393. { Bad_Opcode },
  5394. { Bad_Opcode },
  5395. { VEX_W_TABLE (VEX_W_0F381D_P_2) },
  5396. },
  5397. /* PREFIX_VEX_0F381E */
  5398. {
  5399. { Bad_Opcode },
  5400. { Bad_Opcode },
  5401. { VEX_W_TABLE (VEX_W_0F381E_P_2) },
  5402. },
  5403. /* PREFIX_VEX_0F3820 */
  5404. {
  5405. { Bad_Opcode },
  5406. { Bad_Opcode },
  5407. { VEX_W_TABLE (VEX_W_0F3820_P_2) },
  5408. },
  5409. /* PREFIX_VEX_0F3821 */
  5410. {
  5411. { Bad_Opcode },
  5412. { Bad_Opcode },
  5413. { VEX_W_TABLE (VEX_W_0F3821_P_2) },
  5414. },
  5415. /* PREFIX_VEX_0F3822 */
  5416. {
  5417. { Bad_Opcode },
  5418. { Bad_Opcode },
  5419. { VEX_W_TABLE (VEX_W_0F3822_P_2) },
  5420. },
  5421. /* PREFIX_VEX_0F3823 */
  5422. {
  5423. { Bad_Opcode },
  5424. { Bad_Opcode },
  5425. { VEX_W_TABLE (VEX_W_0F3823_P_2) },
  5426. },
  5427. /* PREFIX_VEX_0F3824 */
  5428. {
  5429. { Bad_Opcode },
  5430. { Bad_Opcode },
  5431. { VEX_W_TABLE (VEX_W_0F3824_P_2) },
  5432. },
  5433. /* PREFIX_VEX_0F3825 */
  5434. {
  5435. { Bad_Opcode },
  5436. { Bad_Opcode },
  5437. { VEX_W_TABLE (VEX_W_0F3825_P_2) },
  5438. },
  5439. /* PREFIX_VEX_0F3828 */
  5440. {
  5441. { Bad_Opcode },
  5442. { Bad_Opcode },
  5443. { VEX_W_TABLE (VEX_W_0F3828_P_2) },
  5444. },
  5445. /* PREFIX_VEX_0F3829 */
  5446. {
  5447. { Bad_Opcode },
  5448. { Bad_Opcode },
  5449. { VEX_W_TABLE (VEX_W_0F3829_P_2) },
  5450. },
  5451. /* PREFIX_VEX_0F382A */
  5452. {
  5453. { Bad_Opcode },
  5454. { Bad_Opcode },
  5455. { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
  5456. },
  5457. /* PREFIX_VEX_0F382B */
  5458. {
  5459. { Bad_Opcode },
  5460. { Bad_Opcode },
  5461. { VEX_W_TABLE (VEX_W_0F382B_P_2) },
  5462. },
  5463. /* PREFIX_VEX_0F382C */
  5464. {
  5465. { Bad_Opcode },
  5466. { Bad_Opcode },
  5467. { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
  5468. },
  5469. /* PREFIX_VEX_0F382D */
  5470. {
  5471. { Bad_Opcode },
  5472. { Bad_Opcode },
  5473. { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
  5474. },
  5475. /* PREFIX_VEX_0F382E */
  5476. {
  5477. { Bad_Opcode },
  5478. { Bad_Opcode },
  5479. { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
  5480. },
  5481. /* PREFIX_VEX_0F382F */
  5482. {
  5483. { Bad_Opcode },
  5484. { Bad_Opcode },
  5485. { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
  5486. },
  5487. /* PREFIX_VEX_0F3830 */
  5488. {
  5489. { Bad_Opcode },
  5490. { Bad_Opcode },
  5491. { VEX_W_TABLE (VEX_W_0F3830_P_2) },
  5492. },
  5493. /* PREFIX_VEX_0F3831 */
  5494. {
  5495. { Bad_Opcode },
  5496. { Bad_Opcode },
  5497. { VEX_W_TABLE (VEX_W_0F3831_P_2) },
  5498. },
  5499. /* PREFIX_VEX_0F3832 */
  5500. {
  5501. { Bad_Opcode },
  5502. { Bad_Opcode },
  5503. { VEX_W_TABLE (VEX_W_0F3832_P_2) },
  5504. },
  5505. /* PREFIX_VEX_0F3833 */
  5506. {
  5507. { Bad_Opcode },
  5508. { Bad_Opcode },
  5509. { VEX_W_TABLE (VEX_W_0F3833_P_2) },
  5510. },
  5511. /* PREFIX_VEX_0F3834 */
  5512. {
  5513. { Bad_Opcode },
  5514. { Bad_Opcode },
  5515. { VEX_W_TABLE (VEX_W_0F3834_P_2) },
  5516. },
  5517. /* PREFIX_VEX_0F3835 */
  5518. {
  5519. { Bad_Opcode },
  5520. { Bad_Opcode },
  5521. { VEX_W_TABLE (VEX_W_0F3835_P_2) },
  5522. },
  5523. /* PREFIX_VEX_0F3836 */
  5524. {
  5525. { Bad_Opcode },
  5526. { Bad_Opcode },
  5527. { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
  5528. },
  5529. /* PREFIX_VEX_0F3837 */
  5530. {
  5531. { Bad_Opcode },
  5532. { Bad_Opcode },
  5533. { VEX_W_TABLE (VEX_W_0F3837_P_2) },
  5534. },
  5535. /* PREFIX_VEX_0F3838 */
  5536. {
  5537. { Bad_Opcode },
  5538. { Bad_Opcode },
  5539. { VEX_W_TABLE (VEX_W_0F3838_P_2) },
  5540. },
  5541. /* PREFIX_VEX_0F3839 */
  5542. {
  5543. { Bad_Opcode },
  5544. { Bad_Opcode },
  5545. { VEX_W_TABLE (VEX_W_0F3839_P_2) },
  5546. },
  5547. /* PREFIX_VEX_0F383A */
  5548. {
  5549. { Bad_Opcode },
  5550. { Bad_Opcode },
  5551. { VEX_W_TABLE (VEX_W_0F383A_P_2) },
  5552. },
  5553. /* PREFIX_VEX_0F383B */
  5554. {
  5555. { Bad_Opcode },
  5556. { Bad_Opcode },
  5557. { VEX_W_TABLE (VEX_W_0F383B_P_2) },
  5558. },
  5559. /* PREFIX_VEX_0F383C */
  5560. {
  5561. { Bad_Opcode },
  5562. { Bad_Opcode },
  5563. { VEX_W_TABLE (VEX_W_0F383C_P_2) },
  5564. },
  5565. /* PREFIX_VEX_0F383D */
  5566. {
  5567. { Bad_Opcode },
  5568. { Bad_Opcode },
  5569. { VEX_W_TABLE (VEX_W_0F383D_P_2) },
  5570. },
  5571. /* PREFIX_VEX_0F383E */
  5572. {
  5573. { Bad_Opcode },
  5574. { Bad_Opcode },
  5575. { VEX_W_TABLE (VEX_W_0F383E_P_2) },
  5576. },
  5577. /* PREFIX_VEX_0F383F */
  5578. {
  5579. { Bad_Opcode },
  5580. { Bad_Opcode },
  5581. { VEX_W_TABLE (VEX_W_0F383F_P_2) },
  5582. },
  5583. /* PREFIX_VEX_0F3840 */
  5584. {
  5585. { Bad_Opcode },
  5586. { Bad_Opcode },
  5587. { VEX_W_TABLE (VEX_W_0F3840_P_2) },
  5588. },
  5589. /* PREFIX_VEX_0F3841 */
  5590. {
  5591. { Bad_Opcode },
  5592. { Bad_Opcode },
  5593. { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
  5594. },
  5595. /* PREFIX_VEX_0F3845 */
  5596. {
  5597. { Bad_Opcode },
  5598. { Bad_Opcode },
  5599. { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
  5600. },
  5601. /* PREFIX_VEX_0F3846 */
  5602. {
  5603. { Bad_Opcode },
  5604. { Bad_Opcode },
  5605. { VEX_W_TABLE (VEX_W_0F3846_P_2) },
  5606. },
  5607. /* PREFIX_VEX_0F3847 */
  5608. {
  5609. { Bad_Opcode },
  5610. { Bad_Opcode },
  5611. { "vpsllv%LW", { XM, Vex, EXx }, 0 },
  5612. },
  5613. /* PREFIX_VEX_0F3858 */
  5614. {
  5615. { Bad_Opcode },
  5616. { Bad_Opcode },
  5617. { VEX_W_TABLE (VEX_W_0F3858_P_2) },
  5618. },
  5619. /* PREFIX_VEX_0F3859 */
  5620. {
  5621. { Bad_Opcode },
  5622. { Bad_Opcode },
  5623. { VEX_W_TABLE (VEX_W_0F3859_P_2) },
  5624. },
  5625. /* PREFIX_VEX_0F385A */
  5626. {
  5627. { Bad_Opcode },
  5628. { Bad_Opcode },
  5629. { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
  5630. },
  5631. /* PREFIX_VEX_0F3878 */
  5632. {
  5633. { Bad_Opcode },
  5634. { Bad_Opcode },
  5635. { VEX_W_TABLE (VEX_W_0F3878_P_2) },
  5636. },
  5637. /* PREFIX_VEX_0F3879 */
  5638. {
  5639. { Bad_Opcode },
  5640. { Bad_Opcode },
  5641. { VEX_W_TABLE (VEX_W_0F3879_P_2) },
  5642. },
  5643. /* PREFIX_VEX_0F388C */
  5644. {
  5645. { Bad_Opcode },
  5646. { Bad_Opcode },
  5647. { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
  5648. },
  5649. /* PREFIX_VEX_0F388E */
  5650. {
  5651. { Bad_Opcode },
  5652. { Bad_Opcode },
  5653. { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
  5654. },
  5655. /* PREFIX_VEX_0F3890 */
  5656. {
  5657. { Bad_Opcode },
  5658. { Bad_Opcode },
  5659. { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
  5660. },
  5661. /* PREFIX_VEX_0F3891 */
  5662. {
  5663. { Bad_Opcode },
  5664. { Bad_Opcode },
  5665. { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
  5666. },
  5667. /* PREFIX_VEX_0F3892 */
  5668. {
  5669. { Bad_Opcode },
  5670. { Bad_Opcode },
  5671. { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
  5672. },
  5673. /* PREFIX_VEX_0F3893 */
  5674. {
  5675. { Bad_Opcode },
  5676. { Bad_Opcode },
  5677. { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
  5678. },
  5679. /* PREFIX_VEX_0F3896 */
  5680. {
  5681. { Bad_Opcode },
  5682. { Bad_Opcode },
  5683. { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
  5684. },
  5685. /* PREFIX_VEX_0F3897 */
  5686. {
  5687. { Bad_Opcode },
  5688. { Bad_Opcode },
  5689. { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
  5690. },
  5691. /* PREFIX_VEX_0F3898 */
  5692. {
  5693. { Bad_Opcode },
  5694. { Bad_Opcode },
  5695. { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
  5696. },
  5697. /* PREFIX_VEX_0F3899 */
  5698. {
  5699. { Bad_Opcode },
  5700. { Bad_Opcode },
  5701. { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5702. },
  5703. /* PREFIX_VEX_0F389A */
  5704. {
  5705. { Bad_Opcode },
  5706. { Bad_Opcode },
  5707. { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
  5708. },
  5709. /* PREFIX_VEX_0F389B */
  5710. {
  5711. { Bad_Opcode },
  5712. { Bad_Opcode },
  5713. { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5714. },
  5715. /* PREFIX_VEX_0F389C */
  5716. {
  5717. { Bad_Opcode },
  5718. { Bad_Opcode },
  5719. { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
  5720. },
  5721. /* PREFIX_VEX_0F389D */
  5722. {
  5723. { Bad_Opcode },
  5724. { Bad_Opcode },
  5725. { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5726. },
  5727. /* PREFIX_VEX_0F389E */
  5728. {
  5729. { Bad_Opcode },
  5730. { Bad_Opcode },
  5731. { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
  5732. },
  5733. /* PREFIX_VEX_0F389F */
  5734. {
  5735. { Bad_Opcode },
  5736. { Bad_Opcode },
  5737. { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5738. },
  5739. /* PREFIX_VEX_0F38A6 */
  5740. {
  5741. { Bad_Opcode },
  5742. { Bad_Opcode },
  5743. { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
  5744. { Bad_Opcode },
  5745. },
  5746. /* PREFIX_VEX_0F38A7 */
  5747. {
  5748. { Bad_Opcode },
  5749. { Bad_Opcode },
  5750. { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
  5751. },
  5752. /* PREFIX_VEX_0F38A8 */
  5753. {
  5754. { Bad_Opcode },
  5755. { Bad_Opcode },
  5756. { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
  5757. },
  5758. /* PREFIX_VEX_0F38A9 */
  5759. {
  5760. { Bad_Opcode },
  5761. { Bad_Opcode },
  5762. { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5763. },
  5764. /* PREFIX_VEX_0F38AA */
  5765. {
  5766. { Bad_Opcode },
  5767. { Bad_Opcode },
  5768. { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
  5769. },
  5770. /* PREFIX_VEX_0F38AB */
  5771. {
  5772. { Bad_Opcode },
  5773. { Bad_Opcode },
  5774. { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5775. },
  5776. /* PREFIX_VEX_0F38AC */
  5777. {
  5778. { Bad_Opcode },
  5779. { Bad_Opcode },
  5780. { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
  5781. },
  5782. /* PREFIX_VEX_0F38AD */
  5783. {
  5784. { Bad_Opcode },
  5785. { Bad_Opcode },
  5786. { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5787. },
  5788. /* PREFIX_VEX_0F38AE */
  5789. {
  5790. { Bad_Opcode },
  5791. { Bad_Opcode },
  5792. { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
  5793. },
  5794. /* PREFIX_VEX_0F38AF */
  5795. {
  5796. { Bad_Opcode },
  5797. { Bad_Opcode },
  5798. { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5799. },
  5800. /* PREFIX_VEX_0F38B6 */
  5801. {
  5802. { Bad_Opcode },
  5803. { Bad_Opcode },
  5804. { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
  5805. },
  5806. /* PREFIX_VEX_0F38B7 */
  5807. {
  5808. { Bad_Opcode },
  5809. { Bad_Opcode },
  5810. { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
  5811. },
  5812. /* PREFIX_VEX_0F38B8 */
  5813. {
  5814. { Bad_Opcode },
  5815. { Bad_Opcode },
  5816. { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
  5817. },
  5818. /* PREFIX_VEX_0F38B9 */
  5819. {
  5820. { Bad_Opcode },
  5821. { Bad_Opcode },
  5822. { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5823. },
  5824. /* PREFIX_VEX_0F38BA */
  5825. {
  5826. { Bad_Opcode },
  5827. { Bad_Opcode },
  5828. { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
  5829. },
  5830. /* PREFIX_VEX_0F38BB */
  5831. {
  5832. { Bad_Opcode },
  5833. { Bad_Opcode },
  5834. { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5835. },
  5836. /* PREFIX_VEX_0F38BC */
  5837. {
  5838. { Bad_Opcode },
  5839. { Bad_Opcode },
  5840. { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
  5841. },
  5842. /* PREFIX_VEX_0F38BD */
  5843. {
  5844. { Bad_Opcode },
  5845. { Bad_Opcode },
  5846. { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5847. },
  5848. /* PREFIX_VEX_0F38BE */
  5849. {
  5850. { Bad_Opcode },
  5851. { Bad_Opcode },
  5852. { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
  5853. },
  5854. /* PREFIX_VEX_0F38BF */
  5855. {
  5856. { Bad_Opcode },
  5857. { Bad_Opcode },
  5858. { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
  5859. },
  5860. /* PREFIX_VEX_0F38DB */
  5861. {
  5862. { Bad_Opcode },
  5863. { Bad_Opcode },
  5864. { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
  5865. },
  5866. /* PREFIX_VEX_0F38DC */
  5867. {
  5868. { Bad_Opcode },
  5869. { Bad_Opcode },
  5870. { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
  5871. },
  5872. /* PREFIX_VEX_0F38DD */
  5873. {
  5874. { Bad_Opcode },
  5875. { Bad_Opcode },
  5876. { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
  5877. },
  5878. /* PREFIX_VEX_0F38DE */
  5879. {
  5880. { Bad_Opcode },
  5881. { Bad_Opcode },
  5882. { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
  5883. },
  5884. /* PREFIX_VEX_0F38DF */
  5885. {
  5886. { Bad_Opcode },
  5887. { Bad_Opcode },
  5888. { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
  5889. },
  5890. /* PREFIX_VEX_0F38F2 */
  5891. {
  5892. { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
  5893. },
  5894. /* PREFIX_VEX_0F38F3_REG_1 */
  5895. {
  5896. { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
  5897. },
  5898. /* PREFIX_VEX_0F38F3_REG_2 */
  5899. {
  5900. { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
  5901. },
  5902. /* PREFIX_VEX_0F38F3_REG_3 */
  5903. {
  5904. { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
  5905. },
  5906. /* PREFIX_VEX_0F38F5 */
  5907. {
  5908. { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
  5909. { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
  5910. { Bad_Opcode },
  5911. { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
  5912. },
  5913. /* PREFIX_VEX_0F38F6 */
  5914. {
  5915. { Bad_Opcode },
  5916. { Bad_Opcode },
  5917. { Bad_Opcode },
  5918. { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
  5919. },
  5920. /* PREFIX_VEX_0F38F7 */
  5921. {
  5922. { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
  5923. { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
  5924. { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
  5925. { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
  5926. },
  5927. /* PREFIX_VEX_0F3A00 */
  5928. {
  5929. { Bad_Opcode },
  5930. { Bad_Opcode },
  5931. { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
  5932. },
  5933. /* PREFIX_VEX_0F3A01 */
  5934. {
  5935. { Bad_Opcode },
  5936. { Bad_Opcode },
  5937. { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
  5938. },
  5939. /* PREFIX_VEX_0F3A02 */
  5940. {
  5941. { Bad_Opcode },
  5942. { Bad_Opcode },
  5943. { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
  5944. },
  5945. /* PREFIX_VEX_0F3A04 */
  5946. {
  5947. { Bad_Opcode },
  5948. { Bad_Opcode },
  5949. { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
  5950. },
  5951. /* PREFIX_VEX_0F3A05 */
  5952. {
  5953. { Bad_Opcode },
  5954. { Bad_Opcode },
  5955. { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
  5956. },
  5957. /* PREFIX_VEX_0F3A06 */
  5958. {
  5959. { Bad_Opcode },
  5960. { Bad_Opcode },
  5961. { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
  5962. },
  5963. /* PREFIX_VEX_0F3A08 */
  5964. {
  5965. { Bad_Opcode },
  5966. { Bad_Opcode },
  5967. { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
  5968. },
  5969. /* PREFIX_VEX_0F3A09 */
  5970. {
  5971. { Bad_Opcode },
  5972. { Bad_Opcode },
  5973. { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
  5974. },
  5975. /* PREFIX_VEX_0F3A0A */
  5976. {
  5977. { Bad_Opcode },
  5978. { Bad_Opcode },
  5979. { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
  5980. },
  5981. /* PREFIX_VEX_0F3A0B */
  5982. {
  5983. { Bad_Opcode },
  5984. { Bad_Opcode },
  5985. { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
  5986. },
  5987. /* PREFIX_VEX_0F3A0C */
  5988. {
  5989. { Bad_Opcode },
  5990. { Bad_Opcode },
  5991. { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
  5992. },
  5993. /* PREFIX_VEX_0F3A0D */
  5994. {
  5995. { Bad_Opcode },
  5996. { Bad_Opcode },
  5997. { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
  5998. },
  5999. /* PREFIX_VEX_0F3A0E */
  6000. {
  6001. { Bad_Opcode },
  6002. { Bad_Opcode },
  6003. { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
  6004. },
  6005. /* PREFIX_VEX_0F3A0F */
  6006. {
  6007. { Bad_Opcode },
  6008. { Bad_Opcode },
  6009. { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
  6010. },
  6011. /* PREFIX_VEX_0F3A14 */
  6012. {
  6013. { Bad_Opcode },
  6014. { Bad_Opcode },
  6015. { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
  6016. },
  6017. /* PREFIX_VEX_0F3A15 */
  6018. {
  6019. { Bad_Opcode },
  6020. { Bad_Opcode },
  6021. { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
  6022. },
  6023. /* PREFIX_VEX_0F3A16 */
  6024. {
  6025. { Bad_Opcode },
  6026. { Bad_Opcode },
  6027. { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
  6028. },
  6029. /* PREFIX_VEX_0F3A17 */
  6030. {
  6031. { Bad_Opcode },
  6032. { Bad_Opcode },
  6033. { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
  6034. },
  6035. /* PREFIX_VEX_0F3A18 */
  6036. {
  6037. { Bad_Opcode },
  6038. { Bad_Opcode },
  6039. { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
  6040. },
  6041. /* PREFIX_VEX_0F3A19 */
  6042. {
  6043. { Bad_Opcode },
  6044. { Bad_Opcode },
  6045. { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
  6046. },
  6047. /* PREFIX_VEX_0F3A1D */
  6048. {
  6049. { Bad_Opcode },
  6050. { Bad_Opcode },
  6051. { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
  6052. },
  6053. /* PREFIX_VEX_0F3A20 */
  6054. {
  6055. { Bad_Opcode },
  6056. { Bad_Opcode },
  6057. { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
  6058. },
  6059. /* PREFIX_VEX_0F3A21 */
  6060. {
  6061. { Bad_Opcode },
  6062. { Bad_Opcode },
  6063. { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
  6064. },
  6065. /* PREFIX_VEX_0F3A22 */
  6066. {
  6067. { Bad_Opcode },
  6068. { Bad_Opcode },
  6069. { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
  6070. },
  6071. /* PREFIX_VEX_0F3A30 */
  6072. {
  6073. { Bad_Opcode },
  6074. { Bad_Opcode },
  6075. { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
  6076. },
  6077. /* PREFIX_VEX_0F3A31 */
  6078. {
  6079. { Bad_Opcode },
  6080. { Bad_Opcode },
  6081. { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
  6082. },
  6083. /* PREFIX_VEX_0F3A32 */
  6084. {
  6085. { Bad_Opcode },
  6086. { Bad_Opcode },
  6087. { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
  6088. },
  6089. /* PREFIX_VEX_0F3A33 */
  6090. {
  6091. { Bad_Opcode },
  6092. { Bad_Opcode },
  6093. { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
  6094. },
  6095. /* PREFIX_VEX_0F3A38 */
  6096. {
  6097. { Bad_Opcode },
  6098. { Bad_Opcode },
  6099. { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
  6100. },
  6101. /* PREFIX_VEX_0F3A39 */
  6102. {
  6103. { Bad_Opcode },
  6104. { Bad_Opcode },
  6105. { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
  6106. },
  6107. /* PREFIX_VEX_0F3A40 */
  6108. {
  6109. { Bad_Opcode },
  6110. { Bad_Opcode },
  6111. { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
  6112. },
  6113. /* PREFIX_VEX_0F3A41 */
  6114. {
  6115. { Bad_Opcode },
  6116. { Bad_Opcode },
  6117. { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
  6118. },
  6119. /* PREFIX_VEX_0F3A42 */
  6120. {
  6121. { Bad_Opcode },
  6122. { Bad_Opcode },
  6123. { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
  6124. },
  6125. /* PREFIX_VEX_0F3A44 */
  6126. {
  6127. { Bad_Opcode },
  6128. { Bad_Opcode },
  6129. { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
  6130. },
  6131. /* PREFIX_VEX_0F3A46 */
  6132. {
  6133. { Bad_Opcode },
  6134. { Bad_Opcode },
  6135. { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
  6136. },
  6137. /* PREFIX_VEX_0F3A48 */
  6138. {
  6139. { Bad_Opcode },
  6140. { Bad_Opcode },
  6141. { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
  6142. },
  6143. /* PREFIX_VEX_0F3A49 */
  6144. {
  6145. { Bad_Opcode },
  6146. { Bad_Opcode },
  6147. { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
  6148. },
  6149. /* PREFIX_VEX_0F3A4A */
  6150. {
  6151. { Bad_Opcode },
  6152. { Bad_Opcode },
  6153. { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
  6154. },
  6155. /* PREFIX_VEX_0F3A4B */
  6156. {
  6157. { Bad_Opcode },
  6158. { Bad_Opcode },
  6159. { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
  6160. },
  6161. /* PREFIX_VEX_0F3A4C */
  6162. {
  6163. { Bad_Opcode },
  6164. { Bad_Opcode },
  6165. { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
  6166. },
  6167. /* PREFIX_VEX_0F3A5C */
  6168. {
  6169. { Bad_Opcode },
  6170. { Bad_Opcode },
  6171. { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6172. },
  6173. /* PREFIX_VEX_0F3A5D */
  6174. {
  6175. { Bad_Opcode },
  6176. { Bad_Opcode },
  6177. { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6178. },
  6179. /* PREFIX_VEX_0F3A5E */
  6180. {
  6181. { Bad_Opcode },
  6182. { Bad_Opcode },
  6183. { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6184. },
  6185. /* PREFIX_VEX_0F3A5F */
  6186. {
  6187. { Bad_Opcode },
  6188. { Bad_Opcode },
  6189. { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6190. },
  6191. /* PREFIX_VEX_0F3A60 */
  6192. {
  6193. { Bad_Opcode },
  6194. { Bad_Opcode },
  6195. { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
  6196. { Bad_Opcode },
  6197. },
  6198. /* PREFIX_VEX_0F3A61 */
  6199. {
  6200. { Bad_Opcode },
  6201. { Bad_Opcode },
  6202. { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
  6203. },
  6204. /* PREFIX_VEX_0F3A62 */
  6205. {
  6206. { Bad_Opcode },
  6207. { Bad_Opcode },
  6208. { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
  6209. },
  6210. /* PREFIX_VEX_0F3A63 */
  6211. {
  6212. { Bad_Opcode },
  6213. { Bad_Opcode },
  6214. { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
  6215. },
  6216. /* PREFIX_VEX_0F3A68 */
  6217. {
  6218. { Bad_Opcode },
  6219. { Bad_Opcode },
  6220. { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6221. },
  6222. /* PREFIX_VEX_0F3A69 */
  6223. {
  6224. { Bad_Opcode },
  6225. { Bad_Opcode },
  6226. { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6227. },
  6228. /* PREFIX_VEX_0F3A6A */
  6229. {
  6230. { Bad_Opcode },
  6231. { Bad_Opcode },
  6232. { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
  6233. },
  6234. /* PREFIX_VEX_0F3A6B */
  6235. {
  6236. { Bad_Opcode },
  6237. { Bad_Opcode },
  6238. { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
  6239. },
  6240. /* PREFIX_VEX_0F3A6C */
  6241. {
  6242. { Bad_Opcode },
  6243. { Bad_Opcode },
  6244. { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6245. },
  6246. /* PREFIX_VEX_0F3A6D */
  6247. {
  6248. { Bad_Opcode },
  6249. { Bad_Opcode },
  6250. { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6251. },
  6252. /* PREFIX_VEX_0F3A6E */
  6253. {
  6254. { Bad_Opcode },
  6255. { Bad_Opcode },
  6256. { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
  6257. },
  6258. /* PREFIX_VEX_0F3A6F */
  6259. {
  6260. { Bad_Opcode },
  6261. { Bad_Opcode },
  6262. { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
  6263. },
  6264. /* PREFIX_VEX_0F3A78 */
  6265. {
  6266. { Bad_Opcode },
  6267. { Bad_Opcode },
  6268. { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6269. },
  6270. /* PREFIX_VEX_0F3A79 */
  6271. {
  6272. { Bad_Opcode },
  6273. { Bad_Opcode },
  6274. { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6275. },
  6276. /* PREFIX_VEX_0F3A7A */
  6277. {
  6278. { Bad_Opcode },
  6279. { Bad_Opcode },
  6280. { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
  6281. },
  6282. /* PREFIX_VEX_0F3A7B */
  6283. {
  6284. { Bad_Opcode },
  6285. { Bad_Opcode },
  6286. { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
  6287. },
  6288. /* PREFIX_VEX_0F3A7C */
  6289. {
  6290. { Bad_Opcode },
  6291. { Bad_Opcode },
  6292. { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6293. { Bad_Opcode },
  6294. },
  6295. /* PREFIX_VEX_0F3A7D */
  6296. {
  6297. { Bad_Opcode },
  6298. { Bad_Opcode },
  6299. { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  6300. },
  6301. /* PREFIX_VEX_0F3A7E */
  6302. {
  6303. { Bad_Opcode },
  6304. { Bad_Opcode },
  6305. { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
  6306. },
  6307. /* PREFIX_VEX_0F3A7F */
  6308. {
  6309. { Bad_Opcode },
  6310. { Bad_Opcode },
  6311. { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
  6312. },
  6313. /* PREFIX_VEX_0F3ADF */
  6314. {
  6315. { Bad_Opcode },
  6316. { Bad_Opcode },
  6317. { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
  6318. },
  6319. /* PREFIX_VEX_0F3AF0 */
  6320. {
  6321. { Bad_Opcode },
  6322. { Bad_Opcode },
  6323. { Bad_Opcode },
  6324. { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
  6325. },
  6326. #define NEED_PREFIX_TABLE
  6327. #include "i386-dis-evex.h"
  6328. #undef NEED_PREFIX_TABLE
  6329. };
  6330. static const struct dis386 x86_64_table[][2] = {
  6331. /* X86_64_06 */
  6332. {
  6333. { "pushP", { es }, 0 },
  6334. },
  6335. /* X86_64_07 */
  6336. {
  6337. { "popP", { es }, 0 },
  6338. },
  6339. /* X86_64_0D */
  6340. {
  6341. { "pushP", { cs }, 0 },
  6342. },
  6343. /* X86_64_16 */
  6344. {
  6345. { "pushP", { ss }, 0 },
  6346. },
  6347. /* X86_64_17 */
  6348. {
  6349. { "popP", { ss }, 0 },
  6350. },
  6351. /* X86_64_1E */
  6352. {
  6353. { "pushP", { ds }, 0 },
  6354. },
  6355. /* X86_64_1F */
  6356. {
  6357. { "popP", { ds }, 0 },
  6358. },
  6359. /* X86_64_27 */
  6360. {
  6361. { "daa", { XX }, 0 },
  6362. },
  6363. /* X86_64_2F */
  6364. {
  6365. { "das", { XX }, 0 },
  6366. },
  6367. /* X86_64_37 */
  6368. {
  6369. { "aaa", { XX }, 0 },
  6370. },
  6371. /* X86_64_3F */
  6372. {
  6373. { "aas", { XX }, 0 },
  6374. },
  6375. /* X86_64_60 */
  6376. {
  6377. { "pushaP", { XX }, 0 },
  6378. },
  6379. /* X86_64_61 */
  6380. {
  6381. { "popaP", { XX }, 0 },
  6382. },
  6383. /* X86_64_62 */
  6384. {
  6385. { MOD_TABLE (MOD_62_32BIT) },
  6386. { EVEX_TABLE (EVEX_0F) },
  6387. },
  6388. /* X86_64_63 */
  6389. {
  6390. { "arpl", { Ew, Gw }, 0 },
  6391. { "movs{lq|xd}", { Gv, Ed }, 0 },
  6392. },
  6393. /* X86_64_6D */
  6394. {
  6395. { "ins{R|}", { Yzr, indirDX }, 0 },
  6396. { "ins{G|}", { Yzr, indirDX }, 0 },
  6397. },
  6398. /* X86_64_6F */
  6399. {
  6400. { "outs{R|}", { indirDXr, Xz }, 0 },
  6401. { "outs{G|}", { indirDXr, Xz }, 0 },
  6402. },
  6403. /* X86_64_82 */
  6404. {
  6405. /* Opcode 0x82 is an alias of of opcode 0x80 in 32-bit mode. */
  6406. { REG_TABLE (REG_80) },
  6407. },
  6408. /* X86_64_9A */
  6409. {
  6410. { "Jcall{T|}", { Ap }, 0 },
  6411. },
  6412. /* X86_64_C4 */
  6413. {
  6414. { MOD_TABLE (MOD_C4_32BIT) },
  6415. { VEX_C4_TABLE (VEX_0F) },
  6416. },
  6417. /* X86_64_C5 */
  6418. {
  6419. { MOD_TABLE (MOD_C5_32BIT) },
  6420. { VEX_C5_TABLE (VEX_0F) },
  6421. },
  6422. /* X86_64_CE */
  6423. {
  6424. { "into", { XX }, 0 },
  6425. },
  6426. /* X86_64_D4 */
  6427. {
  6428. { "aam", { Ib }, 0 },
  6429. },
  6430. /* X86_64_D5 */
  6431. {
  6432. { "aad", { Ib }, 0 },
  6433. },
  6434. /* X86_64_E8 */
  6435. {
  6436. { "callP", { Jv, BND }, 0 },
  6437. { "call@", { Jv, BND }, 0 }
  6438. },
  6439. /* X86_64_E9 */
  6440. {
  6441. { "jmpP", { Jv, BND }, 0 },
  6442. { "jmp@", { Jv, BND }, 0 }
  6443. },
  6444. /* X86_64_EA */
  6445. {
  6446. { "Jjmp{T|}", { Ap }, 0 },
  6447. },
  6448. /* X86_64_0F01_REG_0 */
  6449. {
  6450. { "sgdt{Q|IQ}", { M }, 0 },
  6451. { "sgdt", { M }, 0 },
  6452. },
  6453. /* X86_64_0F01_REG_1 */
  6454. {
  6455. { "sidt{Q|IQ}", { M }, 0 },
  6456. { "sidt", { M }, 0 },
  6457. },
  6458. /* X86_64_0F01_REG_2 */
  6459. {
  6460. { "lgdt{Q|Q}", { M }, 0 },
  6461. { "lgdt", { M }, 0 },
  6462. },
  6463. /* X86_64_0F01_REG_3 */
  6464. {
  6465. { "lidt{Q|Q}", { M }, 0 },
  6466. { "lidt", { M }, 0 },
  6467. },
  6468. };
  6469. static const struct dis386 three_byte_table[][256] = {
  6470. /* THREE_BYTE_0F38 */
  6471. {
  6472. /* 00 */
  6473. { "pshufb", { MX, EM }, PREFIX_OPCODE },
  6474. { "phaddw", { MX, EM }, PREFIX_OPCODE },
  6475. { "phaddd", { MX, EM }, PREFIX_OPCODE },
  6476. { "phaddsw", { MX, EM }, PREFIX_OPCODE },
  6477. { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
  6478. { "phsubw", { MX, EM }, PREFIX_OPCODE },
  6479. { "phsubd", { MX, EM }, PREFIX_OPCODE },
  6480. { "phsubsw", { MX, EM }, PREFIX_OPCODE },
  6481. /* 08 */
  6482. { "psignb", { MX, EM }, PREFIX_OPCODE },
  6483. { "psignw", { MX, EM }, PREFIX_OPCODE },
  6484. { "psignd", { MX, EM }, PREFIX_OPCODE },
  6485. { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
  6486. { Bad_Opcode },
  6487. { Bad_Opcode },
  6488. { Bad_Opcode },
  6489. { Bad_Opcode },
  6490. /* 10 */
  6491. { PREFIX_TABLE (PREFIX_0F3810) },
  6492. { Bad_Opcode },
  6493. { Bad_Opcode },
  6494. { Bad_Opcode },
  6495. { PREFIX_TABLE (PREFIX_0F3814) },
  6496. { PREFIX_TABLE (PREFIX_0F3815) },
  6497. { Bad_Opcode },
  6498. { PREFIX_TABLE (PREFIX_0F3817) },
  6499. /* 18 */
  6500. { Bad_Opcode },
  6501. { Bad_Opcode },
  6502. { Bad_Opcode },
  6503. { Bad_Opcode },
  6504. { "pabsb", { MX, EM }, PREFIX_OPCODE },
  6505. { "pabsw", { MX, EM }, PREFIX_OPCODE },
  6506. { "pabsd", { MX, EM }, PREFIX_OPCODE },
  6507. { Bad_Opcode },
  6508. /* 20 */
  6509. { PREFIX_TABLE (PREFIX_0F3820) },
  6510. { PREFIX_TABLE (PREFIX_0F3821) },
  6511. { PREFIX_TABLE (PREFIX_0F3822) },
  6512. { PREFIX_TABLE (PREFIX_0F3823) },
  6513. { PREFIX_TABLE (PREFIX_0F3824) },
  6514. { PREFIX_TABLE (PREFIX_0F3825) },
  6515. { Bad_Opcode },
  6516. { Bad_Opcode },
  6517. /* 28 */
  6518. { PREFIX_TABLE (PREFIX_0F3828) },
  6519. { PREFIX_TABLE (PREFIX_0F3829) },
  6520. { PREFIX_TABLE (PREFIX_0F382A) },
  6521. { PREFIX_TABLE (PREFIX_0F382B) },
  6522. { Bad_Opcode },
  6523. { Bad_Opcode },
  6524. { Bad_Opcode },
  6525. { Bad_Opcode },
  6526. /* 30 */
  6527. { PREFIX_TABLE (PREFIX_0F3830) },
  6528. { PREFIX_TABLE (PREFIX_0F3831) },
  6529. { PREFIX_TABLE (PREFIX_0F3832) },
  6530. { PREFIX_TABLE (PREFIX_0F3833) },
  6531. { PREFIX_TABLE (PREFIX_0F3834) },
  6532. { PREFIX_TABLE (PREFIX_0F3835) },
  6533. { Bad_Opcode },
  6534. { PREFIX_TABLE (PREFIX_0F3837) },
  6535. /* 38 */
  6536. { PREFIX_TABLE (PREFIX_0F3838) },
  6537. { PREFIX_TABLE (PREFIX_0F3839) },
  6538. { PREFIX_TABLE (PREFIX_0F383A) },
  6539. { PREFIX_TABLE (PREFIX_0F383B) },
  6540. { PREFIX_TABLE (PREFIX_0F383C) },
  6541. { PREFIX_TABLE (PREFIX_0F383D) },
  6542. { PREFIX_TABLE (PREFIX_0F383E) },
  6543. { PREFIX_TABLE (PREFIX_0F383F) },
  6544. /* 40 */
  6545. { PREFIX_TABLE (PREFIX_0F3840) },
  6546. { PREFIX_TABLE (PREFIX_0F3841) },
  6547. { Bad_Opcode },
  6548. { Bad_Opcode },
  6549. { Bad_Opcode },
  6550. { Bad_Opcode },
  6551. { Bad_Opcode },
  6552. { Bad_Opcode },
  6553. /* 48 */
  6554. { Bad_Opcode },
  6555. { Bad_Opcode },
  6556. { Bad_Opcode },
  6557. { Bad_Opcode },
  6558. { Bad_Opcode },
  6559. { Bad_Opcode },
  6560. { Bad_Opcode },
  6561. { Bad_Opcode },
  6562. /* 50 */
  6563. { Bad_Opcode },
  6564. { Bad_Opcode },
  6565. { Bad_Opcode },
  6566. { Bad_Opcode },
  6567. { Bad_Opcode },
  6568. { Bad_Opcode },
  6569. { Bad_Opcode },
  6570. { Bad_Opcode },
  6571. /* 58 */
  6572. { Bad_Opcode },
  6573. { Bad_Opcode },
  6574. { Bad_Opcode },
  6575. { Bad_Opcode },
  6576. { Bad_Opcode },
  6577. { Bad_Opcode },
  6578. { Bad_Opcode },
  6579. { Bad_Opcode },
  6580. /* 60 */
  6581. { Bad_Opcode },
  6582. { Bad_Opcode },
  6583. { Bad_Opcode },
  6584. { Bad_Opcode },
  6585. { Bad_Opcode },
  6586. { Bad_Opcode },
  6587. { Bad_Opcode },
  6588. { Bad_Opcode },
  6589. /* 68 */
  6590. { Bad_Opcode },
  6591. { Bad_Opcode },
  6592. { Bad_Opcode },
  6593. { Bad_Opcode },
  6594. { Bad_Opcode },
  6595. { Bad_Opcode },
  6596. { Bad_Opcode },
  6597. { Bad_Opcode },
  6598. /* 70 */
  6599. { Bad_Opcode },
  6600. { Bad_Opcode },
  6601. { Bad_Opcode },
  6602. { Bad_Opcode },
  6603. { Bad_Opcode },
  6604. { Bad_Opcode },
  6605. { Bad_Opcode },
  6606. { Bad_Opcode },
  6607. /* 78 */
  6608. { Bad_Opcode },
  6609. { Bad_Opcode },
  6610. { Bad_Opcode },
  6611. { Bad_Opcode },
  6612. { Bad_Opcode },
  6613. { Bad_Opcode },
  6614. { Bad_Opcode },
  6615. { Bad_Opcode },
  6616. /* 80 */
  6617. { PREFIX_TABLE (PREFIX_0F3880) },
  6618. { PREFIX_TABLE (PREFIX_0F3881) },
  6619. { PREFIX_TABLE (PREFIX_0F3882) },
  6620. { Bad_Opcode },
  6621. { Bad_Opcode },
  6622. { Bad_Opcode },
  6623. { Bad_Opcode },
  6624. { Bad_Opcode },
  6625. /* 88 */
  6626. { Bad_Opcode },
  6627. { Bad_Opcode },
  6628. { Bad_Opcode },
  6629. { Bad_Opcode },
  6630. { Bad_Opcode },
  6631. { Bad_Opcode },
  6632. { Bad_Opcode },
  6633. { Bad_Opcode },
  6634. /* 90 */
  6635. { Bad_Opcode },
  6636. { Bad_Opcode },
  6637. { Bad_Opcode },
  6638. { Bad_Opcode },
  6639. { Bad_Opcode },
  6640. { Bad_Opcode },
  6641. { Bad_Opcode },
  6642. { Bad_Opcode },
  6643. /* 98 */
  6644. { Bad_Opcode },
  6645. { Bad_Opcode },
  6646. { Bad_Opcode },
  6647. { Bad_Opcode },
  6648. { Bad_Opcode },
  6649. { Bad_Opcode },
  6650. { Bad_Opcode },
  6651. { Bad_Opcode },
  6652. /* a0 */
  6653. { Bad_Opcode },
  6654. { Bad_Opcode },
  6655. { Bad_Opcode },
  6656. { Bad_Opcode },
  6657. { Bad_Opcode },
  6658. { Bad_Opcode },
  6659. { Bad_Opcode },
  6660. { Bad_Opcode },
  6661. /* a8 */
  6662. { Bad_Opcode },
  6663. { Bad_Opcode },
  6664. { Bad_Opcode },
  6665. { Bad_Opcode },
  6666. { Bad_Opcode },
  6667. { Bad_Opcode },
  6668. { Bad_Opcode },
  6669. { Bad_Opcode },
  6670. /* b0 */
  6671. { Bad_Opcode },
  6672. { Bad_Opcode },
  6673. { Bad_Opcode },
  6674. { Bad_Opcode },
  6675. { Bad_Opcode },
  6676. { Bad_Opcode },
  6677. { Bad_Opcode },
  6678. { Bad_Opcode },
  6679. /* b8 */
  6680. { Bad_Opcode },
  6681. { Bad_Opcode },
  6682. { Bad_Opcode },
  6683. { Bad_Opcode },
  6684. { Bad_Opcode },
  6685. { Bad_Opcode },
  6686. { Bad_Opcode },
  6687. { Bad_Opcode },
  6688. /* c0 */
  6689. { Bad_Opcode },
  6690. { Bad_Opcode },
  6691. { Bad_Opcode },
  6692. { Bad_Opcode },
  6693. { Bad_Opcode },
  6694. { Bad_Opcode },
  6695. { Bad_Opcode },
  6696. { Bad_Opcode },
  6697. /* c8 */
  6698. { PREFIX_TABLE (PREFIX_0F38C8) },
  6699. { PREFIX_TABLE (PREFIX_0F38C9) },
  6700. { PREFIX_TABLE (PREFIX_0F38CA) },
  6701. { PREFIX_TABLE (PREFIX_0F38CB) },
  6702. { PREFIX_TABLE (PREFIX_0F38CC) },
  6703. { PREFIX_TABLE (PREFIX_0F38CD) },
  6704. { Bad_Opcode },
  6705. { Bad_Opcode },
  6706. /* d0 */
  6707. { Bad_Opcode },
  6708. { Bad_Opcode },
  6709. { Bad_Opcode },
  6710. { Bad_Opcode },
  6711. { Bad_Opcode },
  6712. { Bad_Opcode },
  6713. { Bad_Opcode },
  6714. { Bad_Opcode },
  6715. /* d8 */
  6716. { Bad_Opcode },
  6717. { Bad_Opcode },
  6718. { Bad_Opcode },
  6719. { PREFIX_TABLE (PREFIX_0F38DB) },
  6720. { PREFIX_TABLE (PREFIX_0F38DC) },
  6721. { PREFIX_TABLE (PREFIX_0F38DD) },
  6722. { PREFIX_TABLE (PREFIX_0F38DE) },
  6723. { PREFIX_TABLE (PREFIX_0F38DF) },
  6724. /* e0 */
  6725. { Bad_Opcode },
  6726. { Bad_Opcode },
  6727. { Bad_Opcode },
  6728. { Bad_Opcode },
  6729. { Bad_Opcode },
  6730. { Bad_Opcode },
  6731. { Bad_Opcode },
  6732. { Bad_Opcode },
  6733. /* e8 */
  6734. { Bad_Opcode },
  6735. { Bad_Opcode },
  6736. { Bad_Opcode },
  6737. { Bad_Opcode },
  6738. { Bad_Opcode },
  6739. { Bad_Opcode },
  6740. { Bad_Opcode },
  6741. { Bad_Opcode },
  6742. /* f0 */
  6743. { PREFIX_TABLE (PREFIX_0F38F0) },
  6744. { PREFIX_TABLE (PREFIX_0F38F1) },
  6745. { Bad_Opcode },
  6746. { Bad_Opcode },
  6747. { Bad_Opcode },
  6748. { PREFIX_TABLE (PREFIX_0F38F5) },
  6749. { PREFIX_TABLE (PREFIX_0F38F6) },
  6750. { Bad_Opcode },
  6751. /* f8 */
  6752. { Bad_Opcode },
  6753. { Bad_Opcode },
  6754. { Bad_Opcode },
  6755. { Bad_Opcode },
  6756. { Bad_Opcode },
  6757. { Bad_Opcode },
  6758. { Bad_Opcode },
  6759. { Bad_Opcode },
  6760. },
  6761. /* THREE_BYTE_0F3A */
  6762. {
  6763. /* 00 */
  6764. { Bad_Opcode },
  6765. { Bad_Opcode },
  6766. { Bad_Opcode },
  6767. { Bad_Opcode },
  6768. { Bad_Opcode },
  6769. { Bad_Opcode },
  6770. { Bad_Opcode },
  6771. { Bad_Opcode },
  6772. /* 08 */
  6773. { PREFIX_TABLE (PREFIX_0F3A08) },
  6774. { PREFIX_TABLE (PREFIX_0F3A09) },
  6775. { PREFIX_TABLE (PREFIX_0F3A0A) },
  6776. { PREFIX_TABLE (PREFIX_0F3A0B) },
  6777. { PREFIX_TABLE (PREFIX_0F3A0C) },
  6778. { PREFIX_TABLE (PREFIX_0F3A0D) },
  6779. { PREFIX_TABLE (PREFIX_0F3A0E) },
  6780. { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
  6781. /* 10 */
  6782. { Bad_Opcode },
  6783. { Bad_Opcode },
  6784. { Bad_Opcode },
  6785. { Bad_Opcode },
  6786. { PREFIX_TABLE (PREFIX_0F3A14) },
  6787. { PREFIX_TABLE (PREFIX_0F3A15) },
  6788. { PREFIX_TABLE (PREFIX_0F3A16) },
  6789. { PREFIX_TABLE (PREFIX_0F3A17) },
  6790. /* 18 */
  6791. { Bad_Opcode },
  6792. { Bad_Opcode },
  6793. { Bad_Opcode },
  6794. { Bad_Opcode },
  6795. { Bad_Opcode },
  6796. { Bad_Opcode },
  6797. { Bad_Opcode },
  6798. { Bad_Opcode },
  6799. /* 20 */
  6800. { PREFIX_TABLE (PREFIX_0F3A20) },
  6801. { PREFIX_TABLE (PREFIX_0F3A21) },
  6802. { PREFIX_TABLE (PREFIX_0F3A22) },
  6803. { Bad_Opcode },
  6804. { Bad_Opcode },
  6805. { Bad_Opcode },
  6806. { Bad_Opcode },
  6807. { Bad_Opcode },
  6808. /* 28 */
  6809. { Bad_Opcode },
  6810. { Bad_Opcode },
  6811. { Bad_Opcode },
  6812. { Bad_Opcode },
  6813. { Bad_Opcode },
  6814. { Bad_Opcode },
  6815. { Bad_Opcode },
  6816. { Bad_Opcode },
  6817. /* 30 */
  6818. { Bad_Opcode },
  6819. { Bad_Opcode },
  6820. { Bad_Opcode },
  6821. { Bad_Opcode },
  6822. { Bad_Opcode },
  6823. { Bad_Opcode },
  6824. { Bad_Opcode },
  6825. { Bad_Opcode },
  6826. /* 38 */
  6827. { Bad_Opcode },
  6828. { Bad_Opcode },
  6829. { Bad_Opcode },
  6830. { Bad_Opcode },
  6831. { Bad_Opcode },
  6832. { Bad_Opcode },
  6833. { Bad_Opcode },
  6834. { Bad_Opcode },
  6835. /* 40 */
  6836. { PREFIX_TABLE (PREFIX_0F3A40) },
  6837. { PREFIX_TABLE (PREFIX_0F3A41) },
  6838. { PREFIX_TABLE (PREFIX_0F3A42) },
  6839. { Bad_Opcode },
  6840. { PREFIX_TABLE (PREFIX_0F3A44) },
  6841. { Bad_Opcode },
  6842. { Bad_Opcode },
  6843. { Bad_Opcode },
  6844. /* 48 */
  6845. { Bad_Opcode },
  6846. { Bad_Opcode },
  6847. { Bad_Opcode },
  6848. { Bad_Opcode },
  6849. { Bad_Opcode },
  6850. { Bad_Opcode },
  6851. { Bad_Opcode },
  6852. { Bad_Opcode },
  6853. /* 50 */
  6854. { Bad_Opcode },
  6855. { Bad_Opcode },
  6856. { Bad_Opcode },
  6857. { Bad_Opcode },
  6858. { Bad_Opcode },
  6859. { Bad_Opcode },
  6860. { Bad_Opcode },
  6861. { Bad_Opcode },
  6862. /* 58 */
  6863. { Bad_Opcode },
  6864. { Bad_Opcode },
  6865. { Bad_Opcode },
  6866. { Bad_Opcode },
  6867. { Bad_Opcode },
  6868. { Bad_Opcode },
  6869. { Bad_Opcode },
  6870. { Bad_Opcode },
  6871. /* 60 */
  6872. { PREFIX_TABLE (PREFIX_0F3A60) },
  6873. { PREFIX_TABLE (PREFIX_0F3A61) },
  6874. { PREFIX_TABLE (PREFIX_0F3A62) },
  6875. { PREFIX_TABLE (PREFIX_0F3A63) },
  6876. { Bad_Opcode },
  6877. { Bad_Opcode },
  6878. { Bad_Opcode },
  6879. { Bad_Opcode },
  6880. /* 68 */
  6881. { Bad_Opcode },
  6882. { Bad_Opcode },
  6883. { Bad_Opcode },
  6884. { Bad_Opcode },
  6885. { Bad_Opcode },
  6886. { Bad_Opcode },
  6887. { Bad_Opcode },
  6888. { Bad_Opcode },
  6889. /* 70 */
  6890. { Bad_Opcode },
  6891. { Bad_Opcode },
  6892. { Bad_Opcode },
  6893. { Bad_Opcode },
  6894. { Bad_Opcode },
  6895. { Bad_Opcode },
  6896. { Bad_Opcode },
  6897. { Bad_Opcode },
  6898. /* 78 */
  6899. { Bad_Opcode },
  6900. { Bad_Opcode },
  6901. { Bad_Opcode },
  6902. { Bad_Opcode },
  6903. { Bad_Opcode },
  6904. { Bad_Opcode },
  6905. { Bad_Opcode },
  6906. { Bad_Opcode },
  6907. /* 80 */
  6908. { Bad_Opcode },
  6909. { Bad_Opcode },
  6910. { Bad_Opcode },
  6911. { Bad_Opcode },
  6912. { Bad_Opcode },
  6913. { Bad_Opcode },
  6914. { Bad_Opcode },
  6915. { Bad_Opcode },
  6916. /* 88 */
  6917. { Bad_Opcode },
  6918. { Bad_Opcode },
  6919. { Bad_Opcode },
  6920. { Bad_Opcode },
  6921. { Bad_Opcode },
  6922. { Bad_Opcode },
  6923. { Bad_Opcode },
  6924. { Bad_Opcode },
  6925. /* 90 */
  6926. { Bad_Opcode },
  6927. { Bad_Opcode },
  6928. { Bad_Opcode },
  6929. { Bad_Opcode },
  6930. { Bad_Opcode },
  6931. { Bad_Opcode },
  6932. { Bad_Opcode },
  6933. { Bad_Opcode },
  6934. /* 98 */
  6935. { Bad_Opcode },
  6936. { Bad_Opcode },
  6937. { Bad_Opcode },
  6938. { Bad_Opcode },
  6939. { Bad_Opcode },
  6940. { Bad_Opcode },
  6941. { Bad_Opcode },
  6942. { Bad_Opcode },
  6943. /* a0 */
  6944. { Bad_Opcode },
  6945. { Bad_Opcode },
  6946. { Bad_Opcode },
  6947. { Bad_Opcode },
  6948. { Bad_Opcode },
  6949. { Bad_Opcode },
  6950. { Bad_Opcode },
  6951. { Bad_Opcode },
  6952. /* a8 */
  6953. { Bad_Opcode },
  6954. { Bad_Opcode },
  6955. { Bad_Opcode },
  6956. { Bad_Opcode },
  6957. { Bad_Opcode },
  6958. { Bad_Opcode },
  6959. { Bad_Opcode },
  6960. { Bad_Opcode },
  6961. /* b0 */
  6962. { Bad_Opcode },
  6963. { Bad_Opcode },
  6964. { Bad_Opcode },
  6965. { Bad_Opcode },
  6966. { Bad_Opcode },
  6967. { Bad_Opcode },
  6968. { Bad_Opcode },
  6969. { Bad_Opcode },
  6970. /* b8 */
  6971. { Bad_Opcode },
  6972. { Bad_Opcode },
  6973. { Bad_Opcode },
  6974. { Bad_Opcode },
  6975. { Bad_Opcode },
  6976. { Bad_Opcode },
  6977. { Bad_Opcode },
  6978. { Bad_Opcode },
  6979. /* c0 */
  6980. { Bad_Opcode },
  6981. { Bad_Opcode },
  6982. { Bad_Opcode },
  6983. { Bad_Opcode },
  6984. { Bad_Opcode },
  6985. { Bad_Opcode },
  6986. { Bad_Opcode },
  6987. { Bad_Opcode },
  6988. /* c8 */
  6989. { Bad_Opcode },
  6990. { Bad_Opcode },
  6991. { Bad_Opcode },
  6992. { Bad_Opcode },
  6993. { PREFIX_TABLE (PREFIX_0F3ACC) },
  6994. { Bad_Opcode },
  6995. { Bad_Opcode },
  6996. { Bad_Opcode },
  6997. /* d0 */
  6998. { Bad_Opcode },
  6999. { Bad_Opcode },
  7000. { Bad_Opcode },
  7001. { Bad_Opcode },
  7002. { Bad_Opcode },
  7003. { Bad_Opcode },
  7004. { Bad_Opcode },
  7005. { Bad_Opcode },
  7006. /* d8 */
  7007. { Bad_Opcode },
  7008. { Bad_Opcode },
  7009. { Bad_Opcode },
  7010. { Bad_Opcode },
  7011. { Bad_Opcode },
  7012. { Bad_Opcode },
  7013. { Bad_Opcode },
  7014. { PREFIX_TABLE (PREFIX_0F3ADF) },
  7015. /* e0 */
  7016. { Bad_Opcode },
  7017. { Bad_Opcode },
  7018. { Bad_Opcode },
  7019. { Bad_Opcode },
  7020. { Bad_Opcode },
  7021. { Bad_Opcode },
  7022. { Bad_Opcode },
  7023. { Bad_Opcode },
  7024. /* e8 */
  7025. { Bad_Opcode },
  7026. { Bad_Opcode },
  7027. { Bad_Opcode },
  7028. { Bad_Opcode },
  7029. { Bad_Opcode },
  7030. { Bad_Opcode },
  7031. { Bad_Opcode },
  7032. { Bad_Opcode },
  7033. /* f0 */
  7034. { Bad_Opcode },
  7035. { Bad_Opcode },
  7036. { Bad_Opcode },
  7037. { Bad_Opcode },
  7038. { Bad_Opcode },
  7039. { Bad_Opcode },
  7040. { Bad_Opcode },
  7041. { Bad_Opcode },
  7042. /* f8 */
  7043. { Bad_Opcode },
  7044. { Bad_Opcode },
  7045. { Bad_Opcode },
  7046. { Bad_Opcode },
  7047. { Bad_Opcode },
  7048. { Bad_Opcode },
  7049. { Bad_Opcode },
  7050. { Bad_Opcode },
  7051. },
  7052. };
  7053. static const struct dis386 xop_table[][256] = {
  7054. /* XOP_08 */
  7055. {
  7056. /* 00 */
  7057. { Bad_Opcode },
  7058. { Bad_Opcode },
  7059. { Bad_Opcode },
  7060. { Bad_Opcode },
  7061. { Bad_Opcode },
  7062. { Bad_Opcode },
  7063. { Bad_Opcode },
  7064. { Bad_Opcode },
  7065. /* 08 */
  7066. { Bad_Opcode },
  7067. { Bad_Opcode },
  7068. { Bad_Opcode },
  7069. { Bad_Opcode },
  7070. { Bad_Opcode },
  7071. { Bad_Opcode },
  7072. { Bad_Opcode },
  7073. { Bad_Opcode },
  7074. /* 10 */
  7075. { Bad_Opcode },
  7076. { Bad_Opcode },
  7077. { Bad_Opcode },
  7078. { Bad_Opcode },
  7079. { Bad_Opcode },
  7080. { Bad_Opcode },
  7081. { Bad_Opcode },
  7082. { Bad_Opcode },
  7083. /* 18 */
  7084. { Bad_Opcode },
  7085. { Bad_Opcode },
  7086. { Bad_Opcode },
  7087. { Bad_Opcode },
  7088. { Bad_Opcode },
  7089. { Bad_Opcode },
  7090. { Bad_Opcode },
  7091. { Bad_Opcode },
  7092. /* 20 */
  7093. { Bad_Opcode },
  7094. { Bad_Opcode },
  7095. { Bad_Opcode },
  7096. { Bad_Opcode },
  7097. { Bad_Opcode },
  7098. { Bad_Opcode },
  7099. { Bad_Opcode },
  7100. { Bad_Opcode },
  7101. /* 28 */
  7102. { Bad_Opcode },
  7103. { Bad_Opcode },
  7104. { Bad_Opcode },
  7105. { Bad_Opcode },
  7106. { Bad_Opcode },
  7107. { Bad_Opcode },
  7108. { Bad_Opcode },
  7109. { Bad_Opcode },
  7110. /* 30 */
  7111. { Bad_Opcode },
  7112. { Bad_Opcode },
  7113. { Bad_Opcode },
  7114. { Bad_Opcode },
  7115. { Bad_Opcode },
  7116. { Bad_Opcode },
  7117. { Bad_Opcode },
  7118. { Bad_Opcode },
  7119. /* 38 */
  7120. { Bad_Opcode },
  7121. { Bad_Opcode },
  7122. { Bad_Opcode },
  7123. { Bad_Opcode },
  7124. { Bad_Opcode },
  7125. { Bad_Opcode },
  7126. { Bad_Opcode },
  7127. { Bad_Opcode },
  7128. /* 40 */
  7129. { Bad_Opcode },
  7130. { Bad_Opcode },
  7131. { Bad_Opcode },
  7132. { Bad_Opcode },
  7133. { Bad_Opcode },
  7134. { Bad_Opcode },
  7135. { Bad_Opcode },
  7136. { Bad_Opcode },
  7137. /* 48 */
  7138. { Bad_Opcode },
  7139. { Bad_Opcode },
  7140. { Bad_Opcode },
  7141. { Bad_Opcode },
  7142. { Bad_Opcode },
  7143. { Bad_Opcode },
  7144. { Bad_Opcode },
  7145. { Bad_Opcode },
  7146. /* 50 */
  7147. { Bad_Opcode },
  7148. { Bad_Opcode },
  7149. { Bad_Opcode },
  7150. { Bad_Opcode },
  7151. { Bad_Opcode },
  7152. { Bad_Opcode },
  7153. { Bad_Opcode },
  7154. { Bad_Opcode },
  7155. /* 58 */
  7156. { Bad_Opcode },
  7157. { Bad_Opcode },
  7158. { Bad_Opcode },
  7159. { Bad_Opcode },
  7160. { Bad_Opcode },
  7161. { Bad_Opcode },
  7162. { Bad_Opcode },
  7163. { Bad_Opcode },
  7164. /* 60 */
  7165. { Bad_Opcode },
  7166. { Bad_Opcode },
  7167. { Bad_Opcode },
  7168. { Bad_Opcode },
  7169. { Bad_Opcode },
  7170. { Bad_Opcode },
  7171. { Bad_Opcode },
  7172. { Bad_Opcode },
  7173. /* 68 */
  7174. { Bad_Opcode },
  7175. { Bad_Opcode },
  7176. { Bad_Opcode },
  7177. { Bad_Opcode },
  7178. { Bad_Opcode },
  7179. { Bad_Opcode },
  7180. { Bad_Opcode },
  7181. { Bad_Opcode },
  7182. /* 70 */
  7183. { Bad_Opcode },
  7184. { Bad_Opcode },
  7185. { Bad_Opcode },
  7186. { Bad_Opcode },
  7187. { Bad_Opcode },
  7188. { Bad_Opcode },
  7189. { Bad_Opcode },
  7190. { Bad_Opcode },
  7191. /* 78 */
  7192. { Bad_Opcode },
  7193. { Bad_Opcode },
  7194. { Bad_Opcode },
  7195. { Bad_Opcode },
  7196. { Bad_Opcode },
  7197. { Bad_Opcode },
  7198. { Bad_Opcode },
  7199. { Bad_Opcode },
  7200. /* 80 */
  7201. { Bad_Opcode },
  7202. { Bad_Opcode },
  7203. { Bad_Opcode },
  7204. { Bad_Opcode },
  7205. { Bad_Opcode },
  7206. { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7207. { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7208. { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7209. /* 88 */
  7210. { Bad_Opcode },
  7211. { Bad_Opcode },
  7212. { Bad_Opcode },
  7213. { Bad_Opcode },
  7214. { Bad_Opcode },
  7215. { Bad_Opcode },
  7216. { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7217. { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7218. /* 90 */
  7219. { Bad_Opcode },
  7220. { Bad_Opcode },
  7221. { Bad_Opcode },
  7222. { Bad_Opcode },
  7223. { Bad_Opcode },
  7224. { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7225. { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7226. { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7227. /* 98 */
  7228. { Bad_Opcode },
  7229. { Bad_Opcode },
  7230. { Bad_Opcode },
  7231. { Bad_Opcode },
  7232. { Bad_Opcode },
  7233. { Bad_Opcode },
  7234. { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7235. { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7236. /* a0 */
  7237. { Bad_Opcode },
  7238. { Bad_Opcode },
  7239. { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7240. { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7241. { Bad_Opcode },
  7242. { Bad_Opcode },
  7243. { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7244. { Bad_Opcode },
  7245. /* a8 */
  7246. { Bad_Opcode },
  7247. { Bad_Opcode },
  7248. { Bad_Opcode },
  7249. { Bad_Opcode },
  7250. { Bad_Opcode },
  7251. { Bad_Opcode },
  7252. { Bad_Opcode },
  7253. { Bad_Opcode },
  7254. /* b0 */
  7255. { Bad_Opcode },
  7256. { Bad_Opcode },
  7257. { Bad_Opcode },
  7258. { Bad_Opcode },
  7259. { Bad_Opcode },
  7260. { Bad_Opcode },
  7261. { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
  7262. { Bad_Opcode },
  7263. /* b8 */
  7264. { Bad_Opcode },
  7265. { Bad_Opcode },
  7266. { Bad_Opcode },
  7267. { Bad_Opcode },
  7268. { Bad_Opcode },
  7269. { Bad_Opcode },
  7270. { Bad_Opcode },
  7271. { Bad_Opcode },
  7272. /* c0 */
  7273. { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
  7274. { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
  7275. { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
  7276. { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
  7277. { Bad_Opcode },
  7278. { Bad_Opcode },
  7279. { Bad_Opcode },
  7280. { Bad_Opcode },
  7281. /* c8 */
  7282. { Bad_Opcode },
  7283. { Bad_Opcode },
  7284. { Bad_Opcode },
  7285. { Bad_Opcode },
  7286. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
  7287. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
  7288. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
  7289. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
  7290. /* d0 */
  7291. { Bad_Opcode },
  7292. { Bad_Opcode },
  7293. { Bad_Opcode },
  7294. { Bad_Opcode },
  7295. { Bad_Opcode },
  7296. { Bad_Opcode },
  7297. { Bad_Opcode },
  7298. { Bad_Opcode },
  7299. /* d8 */
  7300. { Bad_Opcode },
  7301. { Bad_Opcode },
  7302. { Bad_Opcode },
  7303. { Bad_Opcode },
  7304. { Bad_Opcode },
  7305. { Bad_Opcode },
  7306. { Bad_Opcode },
  7307. { Bad_Opcode },
  7308. /* e0 */
  7309. { Bad_Opcode },
  7310. { Bad_Opcode },
  7311. { Bad_Opcode },
  7312. { Bad_Opcode },
  7313. { Bad_Opcode },
  7314. { Bad_Opcode },
  7315. { Bad_Opcode },
  7316. { Bad_Opcode },
  7317. /* e8 */
  7318. { Bad_Opcode },
  7319. { Bad_Opcode },
  7320. { Bad_Opcode },
  7321. { Bad_Opcode },
  7322. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
  7323. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
  7324. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
  7325. { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
  7326. /* f0 */
  7327. { Bad_Opcode },
  7328. { Bad_Opcode },
  7329. { Bad_Opcode },
  7330. { Bad_Opcode },
  7331. { Bad_Opcode },
  7332. { Bad_Opcode },
  7333. { Bad_Opcode },
  7334. { Bad_Opcode },
  7335. /* f8 */
  7336. { Bad_Opcode },
  7337. { Bad_Opcode },
  7338. { Bad_Opcode },
  7339. { Bad_Opcode },
  7340. { Bad_Opcode },
  7341. { Bad_Opcode },
  7342. { Bad_Opcode },
  7343. { Bad_Opcode },
  7344. },
  7345. /* XOP_09 */
  7346. {
  7347. /* 00 */
  7348. { Bad_Opcode },
  7349. { REG_TABLE (REG_XOP_TBM_01) },
  7350. { REG_TABLE (REG_XOP_TBM_02) },
  7351. { Bad_Opcode },
  7352. { Bad_Opcode },
  7353. { Bad_Opcode },
  7354. { Bad_Opcode },
  7355. { Bad_Opcode },
  7356. /* 08 */
  7357. { Bad_Opcode },
  7358. { Bad_Opcode },
  7359. { Bad_Opcode },
  7360. { Bad_Opcode },
  7361. { Bad_Opcode },
  7362. { Bad_Opcode },
  7363. { Bad_Opcode },
  7364. { Bad_Opcode },
  7365. /* 10 */
  7366. { Bad_Opcode },
  7367. { Bad_Opcode },
  7368. { REG_TABLE (REG_XOP_LWPCB) },
  7369. { Bad_Opcode },
  7370. { Bad_Opcode },
  7371. { Bad_Opcode },
  7372. { Bad_Opcode },
  7373. { Bad_Opcode },
  7374. /* 18 */
  7375. { Bad_Opcode },
  7376. { Bad_Opcode },
  7377. { Bad_Opcode },
  7378. { Bad_Opcode },
  7379. { Bad_Opcode },
  7380. { Bad_Opcode },
  7381. { Bad_Opcode },
  7382. { Bad_Opcode },
  7383. /* 20 */
  7384. { Bad_Opcode },
  7385. { Bad_Opcode },
  7386. { Bad_Opcode },
  7387. { Bad_Opcode },
  7388. { Bad_Opcode },
  7389. { Bad_Opcode },
  7390. { Bad_Opcode },
  7391. { Bad_Opcode },
  7392. /* 28 */
  7393. { Bad_Opcode },
  7394. { Bad_Opcode },
  7395. { Bad_Opcode },
  7396. { Bad_Opcode },
  7397. { Bad_Opcode },
  7398. { Bad_Opcode },
  7399. { Bad_Opcode },
  7400. { Bad_Opcode },
  7401. /* 30 */
  7402. { Bad_Opcode },
  7403. { Bad_Opcode },
  7404. { Bad_Opcode },
  7405. { Bad_Opcode },
  7406. { Bad_Opcode },
  7407. { Bad_Opcode },
  7408. { Bad_Opcode },
  7409. { Bad_Opcode },
  7410. /* 38 */
  7411. { Bad_Opcode },
  7412. { Bad_Opcode },
  7413. { Bad_Opcode },
  7414. { Bad_Opcode },
  7415. { Bad_Opcode },
  7416. { Bad_Opcode },
  7417. { Bad_Opcode },
  7418. { Bad_Opcode },
  7419. /* 40 */
  7420. { Bad_Opcode },
  7421. { Bad_Opcode },
  7422. { Bad_Opcode },
  7423. { Bad_Opcode },
  7424. { Bad_Opcode },
  7425. { Bad_Opcode },
  7426. { Bad_Opcode },
  7427. { Bad_Opcode },
  7428. /* 48 */
  7429. { Bad_Opcode },
  7430. { Bad_Opcode },
  7431. { Bad_Opcode },
  7432. { Bad_Opcode },
  7433. { Bad_Opcode },
  7434. { Bad_Opcode },
  7435. { Bad_Opcode },
  7436. { Bad_Opcode },
  7437. /* 50 */
  7438. { Bad_Opcode },
  7439. { Bad_Opcode },
  7440. { Bad_Opcode },
  7441. { Bad_Opcode },
  7442. { Bad_Opcode },
  7443. { Bad_Opcode },
  7444. { Bad_Opcode },
  7445. { Bad_Opcode },
  7446. /* 58 */
  7447. { Bad_Opcode },
  7448. { Bad_Opcode },
  7449. { Bad_Opcode },
  7450. { Bad_Opcode },
  7451. { Bad_Opcode },
  7452. { Bad_Opcode },
  7453. { Bad_Opcode },
  7454. { Bad_Opcode },
  7455. /* 60 */
  7456. { Bad_Opcode },
  7457. { Bad_Opcode },
  7458. { Bad_Opcode },
  7459. { Bad_Opcode },
  7460. { Bad_Opcode },
  7461. { Bad_Opcode },
  7462. { Bad_Opcode },
  7463. { Bad_Opcode },
  7464. /* 68 */
  7465. { Bad_Opcode },
  7466. { Bad_Opcode },
  7467. { Bad_Opcode },
  7468. { Bad_Opcode },
  7469. { Bad_Opcode },
  7470. { Bad_Opcode },
  7471. { Bad_Opcode },
  7472. { Bad_Opcode },
  7473. /* 70 */
  7474. { Bad_Opcode },
  7475. { Bad_Opcode },
  7476. { Bad_Opcode },
  7477. { Bad_Opcode },
  7478. { Bad_Opcode },
  7479. { Bad_Opcode },
  7480. { Bad_Opcode },
  7481. { Bad_Opcode },
  7482. /* 78 */
  7483. { Bad_Opcode },
  7484. { Bad_Opcode },
  7485. { Bad_Opcode },
  7486. { Bad_Opcode },
  7487. { Bad_Opcode },
  7488. { Bad_Opcode },
  7489. { Bad_Opcode },
  7490. { Bad_Opcode },
  7491. /* 80 */
  7492. { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
  7493. { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
  7494. { "vfrczss", { XM, EXd }, 0 },
  7495. { "vfrczsd", { XM, EXq }, 0 },
  7496. { Bad_Opcode },
  7497. { Bad_Opcode },
  7498. { Bad_Opcode },
  7499. { Bad_Opcode },
  7500. /* 88 */
  7501. { Bad_Opcode },
  7502. { Bad_Opcode },
  7503. { Bad_Opcode },
  7504. { Bad_Opcode },
  7505. { Bad_Opcode },
  7506. { Bad_Opcode },
  7507. { Bad_Opcode },
  7508. { Bad_Opcode },
  7509. /* 90 */
  7510. { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7511. { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7512. { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7513. { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7514. { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7515. { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7516. { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7517. { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7518. /* 98 */
  7519. { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7520. { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7521. { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7522. { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
  7523. { Bad_Opcode },
  7524. { Bad_Opcode },
  7525. { Bad_Opcode },
  7526. { Bad_Opcode },
  7527. /* a0 */
  7528. { Bad_Opcode },
  7529. { Bad_Opcode },
  7530. { Bad_Opcode },
  7531. { Bad_Opcode },
  7532. { Bad_Opcode },
  7533. { Bad_Opcode },
  7534. { Bad_Opcode },
  7535. { Bad_Opcode },
  7536. /* a8 */
  7537. { Bad_Opcode },
  7538. { Bad_Opcode },
  7539. { Bad_Opcode },
  7540. { Bad_Opcode },
  7541. { Bad_Opcode },
  7542. { Bad_Opcode },
  7543. { Bad_Opcode },
  7544. { Bad_Opcode },
  7545. /* b0 */
  7546. { Bad_Opcode },
  7547. { Bad_Opcode },
  7548. { Bad_Opcode },
  7549. { Bad_Opcode },
  7550. { Bad_Opcode },
  7551. { Bad_Opcode },
  7552. { Bad_Opcode },
  7553. { Bad_Opcode },
  7554. /* b8 */
  7555. { Bad_Opcode },
  7556. { Bad_Opcode },
  7557. { Bad_Opcode },
  7558. { Bad_Opcode },
  7559. { Bad_Opcode },
  7560. { Bad_Opcode },
  7561. { Bad_Opcode },
  7562. { Bad_Opcode },
  7563. /* c0 */
  7564. { Bad_Opcode },
  7565. { "vphaddbw", { XM, EXxmm }, 0 },
  7566. { "vphaddbd", { XM, EXxmm }, 0 },
  7567. { "vphaddbq", { XM, EXxmm }, 0 },
  7568. { Bad_Opcode },
  7569. { Bad_Opcode },
  7570. { "vphaddwd", { XM, EXxmm }, 0 },
  7571. { "vphaddwq", { XM, EXxmm }, 0 },
  7572. /* c8 */
  7573. { Bad_Opcode },
  7574. { Bad_Opcode },
  7575. { Bad_Opcode },
  7576. { "vphadddq", { XM, EXxmm }, 0 },
  7577. { Bad_Opcode },
  7578. { Bad_Opcode },
  7579. { Bad_Opcode },
  7580. { Bad_Opcode },
  7581. /* d0 */
  7582. { Bad_Opcode },
  7583. { "vphaddubw", { XM, EXxmm }, 0 },
  7584. { "vphaddubd", { XM, EXxmm }, 0 },
  7585. { "vphaddubq", { XM, EXxmm }, 0 },
  7586. { Bad_Opcode },
  7587. { Bad_Opcode },
  7588. { "vphadduwd", { XM, EXxmm }, 0 },
  7589. { "vphadduwq", { XM, EXxmm }, 0 },
  7590. /* d8 */
  7591. { Bad_Opcode },
  7592. { Bad_Opcode },
  7593. { Bad_Opcode },
  7594. { "vphaddudq", { XM, EXxmm }, 0 },
  7595. { Bad_Opcode },
  7596. { Bad_Opcode },
  7597. { Bad_Opcode },
  7598. { Bad_Opcode },
  7599. /* e0 */
  7600. { Bad_Opcode },
  7601. { "vphsubbw", { XM, EXxmm }, 0 },
  7602. { "vphsubwd", { XM, EXxmm }, 0 },
  7603. { "vphsubdq", { XM, EXxmm }, 0 },
  7604. { Bad_Opcode },
  7605. { Bad_Opcode },
  7606. { Bad_Opcode },
  7607. { Bad_Opcode },
  7608. /* e8 */
  7609. { Bad_Opcode },
  7610. { Bad_Opcode },
  7611. { Bad_Opcode },
  7612. { Bad_Opcode },
  7613. { Bad_Opcode },
  7614. { Bad_Opcode },
  7615. { Bad_Opcode },
  7616. { Bad_Opcode },
  7617. /* f0 */
  7618. { Bad_Opcode },
  7619. { Bad_Opcode },
  7620. { Bad_Opcode },
  7621. { Bad_Opcode },
  7622. { Bad_Opcode },
  7623. { Bad_Opcode },
  7624. { Bad_Opcode },
  7625. { Bad_Opcode },
  7626. /* f8 */
  7627. { Bad_Opcode },
  7628. { Bad_Opcode },
  7629. { Bad_Opcode },
  7630. { Bad_Opcode },
  7631. { Bad_Opcode },
  7632. { Bad_Opcode },
  7633. { Bad_Opcode },
  7634. { Bad_Opcode },
  7635. },
  7636. /* XOP_0A */
  7637. {
  7638. /* 00 */
  7639. { Bad_Opcode },
  7640. { Bad_Opcode },
  7641. { Bad_Opcode },
  7642. { Bad_Opcode },
  7643. { Bad_Opcode },
  7644. { Bad_Opcode },
  7645. { Bad_Opcode },
  7646. { Bad_Opcode },
  7647. /* 08 */
  7648. { Bad_Opcode },
  7649. { Bad_Opcode },
  7650. { Bad_Opcode },
  7651. { Bad_Opcode },
  7652. { Bad_Opcode },
  7653. { Bad_Opcode },
  7654. { Bad_Opcode },
  7655. { Bad_Opcode },
  7656. /* 10 */
  7657. { "bextr", { Gv, Ev, Iq }, 0 },
  7658. { Bad_Opcode },
  7659. { REG_TABLE (REG_XOP_LWP) },
  7660. { Bad_Opcode },
  7661. { Bad_Opcode },
  7662. { Bad_Opcode },
  7663. { Bad_Opcode },
  7664. { Bad_Opcode },
  7665. /* 18 */
  7666. { Bad_Opcode },
  7667. { Bad_Opcode },
  7668. { Bad_Opcode },
  7669. { Bad_Opcode },
  7670. { Bad_Opcode },
  7671. { Bad_Opcode },
  7672. { Bad_Opcode },
  7673. { Bad_Opcode },
  7674. /* 20 */
  7675. { Bad_Opcode },
  7676. { Bad_Opcode },
  7677. { Bad_Opcode },
  7678. { Bad_Opcode },
  7679. { Bad_Opcode },
  7680. { Bad_Opcode },
  7681. { Bad_Opcode },
  7682. { Bad_Opcode },
  7683. /* 28 */
  7684. { Bad_Opcode },
  7685. { Bad_Opcode },
  7686. { Bad_Opcode },
  7687. { Bad_Opcode },
  7688. { Bad_Opcode },
  7689. { Bad_Opcode },
  7690. { Bad_Opcode },
  7691. { Bad_Opcode },
  7692. /* 30 */
  7693. { Bad_Opcode },
  7694. { Bad_Opcode },
  7695. { Bad_Opcode },
  7696. { Bad_Opcode },
  7697. { Bad_Opcode },
  7698. { Bad_Opcode },
  7699. { Bad_Opcode },
  7700. { Bad_Opcode },
  7701. /* 38 */
  7702. { Bad_Opcode },
  7703. { Bad_Opcode },
  7704. { Bad_Opcode },
  7705. { Bad_Opcode },
  7706. { Bad_Opcode },
  7707. { Bad_Opcode },
  7708. { Bad_Opcode },
  7709. { Bad_Opcode },
  7710. /* 40 */
  7711. { Bad_Opcode },
  7712. { Bad_Opcode },
  7713. { Bad_Opcode },
  7714. { Bad_Opcode },
  7715. { Bad_Opcode },
  7716. { Bad_Opcode },
  7717. { Bad_Opcode },
  7718. { Bad_Opcode },
  7719. /* 48 */
  7720. { Bad_Opcode },
  7721. { Bad_Opcode },
  7722. { Bad_Opcode },
  7723. { Bad_Opcode },
  7724. { Bad_Opcode },
  7725. { Bad_Opcode },
  7726. { Bad_Opcode },
  7727. { Bad_Opcode },
  7728. /* 50 */
  7729. { Bad_Opcode },
  7730. { Bad_Opcode },
  7731. { Bad_Opcode },
  7732. { Bad_Opcode },
  7733. { Bad_Opcode },
  7734. { Bad_Opcode },
  7735. { Bad_Opcode },
  7736. { Bad_Opcode },
  7737. /* 58 */
  7738. { Bad_Opcode },
  7739. { Bad_Opcode },
  7740. { Bad_Opcode },
  7741. { Bad_Opcode },
  7742. { Bad_Opcode },
  7743. { Bad_Opcode },
  7744. { Bad_Opcode },
  7745. { Bad_Opcode },
  7746. /* 60 */
  7747. { Bad_Opcode },
  7748. { Bad_Opcode },
  7749. { Bad_Opcode },
  7750. { Bad_Opcode },
  7751. { Bad_Opcode },
  7752. { Bad_Opcode },
  7753. { Bad_Opcode },
  7754. { Bad_Opcode },
  7755. /* 68 */
  7756. { Bad_Opcode },
  7757. { Bad_Opcode },
  7758. { Bad_Opcode },
  7759. { Bad_Opcode },
  7760. { Bad_Opcode },
  7761. { Bad_Opcode },
  7762. { Bad_Opcode },
  7763. { Bad_Opcode },
  7764. /* 70 */
  7765. { Bad_Opcode },
  7766. { Bad_Opcode },
  7767. { Bad_Opcode },
  7768. { Bad_Opcode },
  7769. { Bad_Opcode },
  7770. { Bad_Opcode },
  7771. { Bad_Opcode },
  7772. { Bad_Opcode },
  7773. /* 78 */
  7774. { Bad_Opcode },
  7775. { Bad_Opcode },
  7776. { Bad_Opcode },
  7777. { Bad_Opcode },
  7778. { Bad_Opcode },
  7779. { Bad_Opcode },
  7780. { Bad_Opcode },
  7781. { Bad_Opcode },
  7782. /* 80 */
  7783. { Bad_Opcode },
  7784. { Bad_Opcode },
  7785. { Bad_Opcode },
  7786. { Bad_Opcode },
  7787. { Bad_Opcode },
  7788. { Bad_Opcode },
  7789. { Bad_Opcode },
  7790. { Bad_Opcode },
  7791. /* 88 */
  7792. { Bad_Opcode },
  7793. { Bad_Opcode },
  7794. { Bad_Opcode },
  7795. { Bad_Opcode },
  7796. { Bad_Opcode },
  7797. { Bad_Opcode },
  7798. { Bad_Opcode },
  7799. { Bad_Opcode },
  7800. /* 90 */
  7801. { Bad_Opcode },
  7802. { Bad_Opcode },
  7803. { Bad_Opcode },
  7804. { Bad_Opcode },
  7805. { Bad_Opcode },
  7806. { Bad_Opcode },
  7807. { Bad_Opcode },
  7808. { Bad_Opcode },
  7809. /* 98 */
  7810. { Bad_Opcode },
  7811. { Bad_Opcode },
  7812. { Bad_Opcode },
  7813. { Bad_Opcode },
  7814. { Bad_Opcode },
  7815. { Bad_Opcode },
  7816. { Bad_Opcode },
  7817. { Bad_Opcode },
  7818. /* a0 */
  7819. { Bad_Opcode },
  7820. { Bad_Opcode },
  7821. { Bad_Opcode },
  7822. { Bad_Opcode },
  7823. { Bad_Opcode },
  7824. { Bad_Opcode },
  7825. { Bad_Opcode },
  7826. { Bad_Opcode },
  7827. /* a8 */
  7828. { Bad_Opcode },
  7829. { Bad_Opcode },
  7830. { Bad_Opcode },
  7831. { Bad_Opcode },
  7832. { Bad_Opcode },
  7833. { Bad_Opcode },
  7834. { Bad_Opcode },
  7835. { Bad_Opcode },
  7836. /* b0 */
  7837. { Bad_Opcode },
  7838. { Bad_Opcode },
  7839. { Bad_Opcode },
  7840. { Bad_Opcode },
  7841. { Bad_Opcode },
  7842. { Bad_Opcode },
  7843. { Bad_Opcode },
  7844. { Bad_Opcode },
  7845. /* b8 */
  7846. { Bad_Opcode },
  7847. { Bad_Opcode },
  7848. { Bad_Opcode },
  7849. { Bad_Opcode },
  7850. { Bad_Opcode },
  7851. { Bad_Opcode },
  7852. { Bad_Opcode },
  7853. { Bad_Opcode },
  7854. /* c0 */
  7855. { Bad_Opcode },
  7856. { Bad_Opcode },
  7857. { Bad_Opcode },
  7858. { Bad_Opcode },
  7859. { Bad_Opcode },
  7860. { Bad_Opcode },
  7861. { Bad_Opcode },
  7862. { Bad_Opcode },
  7863. /* c8 */
  7864. { Bad_Opcode },
  7865. { Bad_Opcode },
  7866. { Bad_Opcode },
  7867. { Bad_Opcode },
  7868. { Bad_Opcode },
  7869. { Bad_Opcode },
  7870. { Bad_Opcode },
  7871. { Bad_Opcode },
  7872. /* d0 */
  7873. { Bad_Opcode },
  7874. { Bad_Opcode },
  7875. { Bad_Opcode },
  7876. { Bad_Opcode },
  7877. { Bad_Opcode },
  7878. { Bad_Opcode },
  7879. { Bad_Opcode },
  7880. { Bad_Opcode },
  7881. /* d8 */
  7882. { Bad_Opcode },
  7883. { Bad_Opcode },
  7884. { Bad_Opcode },
  7885. { Bad_Opcode },
  7886. { Bad_Opcode },
  7887. { Bad_Opcode },
  7888. { Bad_Opcode },
  7889. { Bad_Opcode },
  7890. /* e0 */
  7891. { Bad_Opcode },
  7892. { Bad_Opcode },
  7893. { Bad_Opcode },
  7894. { Bad_Opcode },
  7895. { Bad_Opcode },
  7896. { Bad_Opcode },
  7897. { Bad_Opcode },
  7898. { Bad_Opcode },
  7899. /* e8 */
  7900. { Bad_Opcode },
  7901. { Bad_Opcode },
  7902. { Bad_Opcode },
  7903. { Bad_Opcode },
  7904. { Bad_Opcode },
  7905. { Bad_Opcode },
  7906. { Bad_Opcode },
  7907. { Bad_Opcode },
  7908. /* f0 */
  7909. { Bad_Opcode },
  7910. { Bad_Opcode },
  7911. { Bad_Opcode },
  7912. { Bad_Opcode },
  7913. { Bad_Opcode },
  7914. { Bad_Opcode },
  7915. { Bad_Opcode },
  7916. { Bad_Opcode },
  7917. /* f8 */
  7918. { Bad_Opcode },
  7919. { Bad_Opcode },
  7920. { Bad_Opcode },
  7921. { Bad_Opcode },
  7922. { Bad_Opcode },
  7923. { Bad_Opcode },
  7924. { Bad_Opcode },
  7925. { Bad_Opcode },
  7926. },
  7927. };
  7928. static const struct dis386 vex_table[][256] = {
  7929. /* VEX_0F */
  7930. {
  7931. /* 00 */
  7932. { Bad_Opcode },
  7933. { Bad_Opcode },
  7934. { Bad_Opcode },
  7935. { Bad_Opcode },
  7936. { Bad_Opcode },
  7937. { Bad_Opcode },
  7938. { Bad_Opcode },
  7939. { Bad_Opcode },
  7940. /* 08 */
  7941. { Bad_Opcode },
  7942. { Bad_Opcode },
  7943. { Bad_Opcode },
  7944. { Bad_Opcode },
  7945. { Bad_Opcode },
  7946. { Bad_Opcode },
  7947. { Bad_Opcode },
  7948. { Bad_Opcode },
  7949. /* 10 */
  7950. { PREFIX_TABLE (PREFIX_VEX_0F10) },
  7951. { PREFIX_TABLE (PREFIX_VEX_0F11) },
  7952. { PREFIX_TABLE (PREFIX_VEX_0F12) },
  7953. { MOD_TABLE (MOD_VEX_0F13) },
  7954. { VEX_W_TABLE (VEX_W_0F14) },
  7955. { VEX_W_TABLE (VEX_W_0F15) },
  7956. { PREFIX_TABLE (PREFIX_VEX_0F16) },
  7957. { MOD_TABLE (MOD_VEX_0F17) },
  7958. /* 18 */
  7959. { Bad_Opcode },
  7960. { Bad_Opcode },
  7961. { Bad_Opcode },
  7962. { Bad_Opcode },
  7963. { Bad_Opcode },
  7964. { Bad_Opcode },
  7965. { Bad_Opcode },
  7966. { Bad_Opcode },
  7967. /* 20 */
  7968. { Bad_Opcode },
  7969. { Bad_Opcode },
  7970. { Bad_Opcode },
  7971. { Bad_Opcode },
  7972. { Bad_Opcode },
  7973. { Bad_Opcode },
  7974. { Bad_Opcode },
  7975. { Bad_Opcode },
  7976. /* 28 */
  7977. { VEX_W_TABLE (VEX_W_0F28) },
  7978. { VEX_W_TABLE (VEX_W_0F29) },
  7979. { PREFIX_TABLE (PREFIX_VEX_0F2A) },
  7980. { MOD_TABLE (MOD_VEX_0F2B) },
  7981. { PREFIX_TABLE (PREFIX_VEX_0F2C) },
  7982. { PREFIX_TABLE (PREFIX_VEX_0F2D) },
  7983. { PREFIX_TABLE (PREFIX_VEX_0F2E) },
  7984. { PREFIX_TABLE (PREFIX_VEX_0F2F) },
  7985. /* 30 */
  7986. { Bad_Opcode },
  7987. { Bad_Opcode },
  7988. { Bad_Opcode },
  7989. { Bad_Opcode },
  7990. { Bad_Opcode },
  7991. { Bad_Opcode },
  7992. { Bad_Opcode },
  7993. { Bad_Opcode },
  7994. /* 38 */
  7995. { Bad_Opcode },
  7996. { Bad_Opcode },
  7997. { Bad_Opcode },
  7998. { Bad_Opcode },
  7999. { Bad_Opcode },
  8000. { Bad_Opcode },
  8001. { Bad_Opcode },
  8002. { Bad_Opcode },
  8003. /* 40 */
  8004. { Bad_Opcode },
  8005. { PREFIX_TABLE (PREFIX_VEX_0F41) },
  8006. { PREFIX_TABLE (PREFIX_VEX_0F42) },
  8007. { Bad_Opcode },
  8008. { PREFIX_TABLE (PREFIX_VEX_0F44) },
  8009. { PREFIX_TABLE (PREFIX_VEX_0F45) },
  8010. { PREFIX_TABLE (PREFIX_VEX_0F46) },
  8011. { PREFIX_TABLE (PREFIX_VEX_0F47) },
  8012. /* 48 */
  8013. { Bad_Opcode },
  8014. { Bad_Opcode },
  8015. { PREFIX_TABLE (PREFIX_VEX_0F4A) },
  8016. { PREFIX_TABLE (PREFIX_VEX_0F4B) },
  8017. { Bad_Opcode },
  8018. { Bad_Opcode },
  8019. { Bad_Opcode },
  8020. { Bad_Opcode },
  8021. /* 50 */
  8022. { MOD_TABLE (MOD_VEX_0F50) },
  8023. { PREFIX_TABLE (PREFIX_VEX_0F51) },
  8024. { PREFIX_TABLE (PREFIX_VEX_0F52) },
  8025. { PREFIX_TABLE (PREFIX_VEX_0F53) },
  8026. { "vandpX", { XM, Vex, EXx }, 0 },
  8027. { "vandnpX", { XM, Vex, EXx }, 0 },
  8028. { "vorpX", { XM, Vex, EXx }, 0 },
  8029. { "vxorpX", { XM, Vex, EXx }, 0 },
  8030. /* 58 */
  8031. { PREFIX_TABLE (PREFIX_VEX_0F58) },
  8032. { PREFIX_TABLE (PREFIX_VEX_0F59) },
  8033. { PREFIX_TABLE (PREFIX_VEX_0F5A) },
  8034. { PREFIX_TABLE (PREFIX_VEX_0F5B) },
  8035. { PREFIX_TABLE (PREFIX_VEX_0F5C) },
  8036. { PREFIX_TABLE (PREFIX_VEX_0F5D) },
  8037. { PREFIX_TABLE (PREFIX_VEX_0F5E) },
  8038. { PREFIX_TABLE (PREFIX_VEX_0F5F) },
  8039. /* 60 */
  8040. { PREFIX_TABLE (PREFIX_VEX_0F60) },
  8041. { PREFIX_TABLE (PREFIX_VEX_0F61) },
  8042. { PREFIX_TABLE (PREFIX_VEX_0F62) },
  8043. { PREFIX_TABLE (PREFIX_VEX_0F63) },
  8044. { PREFIX_TABLE (PREFIX_VEX_0F64) },
  8045. { PREFIX_TABLE (PREFIX_VEX_0F65) },
  8046. { PREFIX_TABLE (PREFIX_VEX_0F66) },
  8047. { PREFIX_TABLE (PREFIX_VEX_0F67) },
  8048. /* 68 */
  8049. { PREFIX_TABLE (PREFIX_VEX_0F68) },
  8050. { PREFIX_TABLE (PREFIX_VEX_0F69) },
  8051. { PREFIX_TABLE (PREFIX_VEX_0F6A) },
  8052. { PREFIX_TABLE (PREFIX_VEX_0F6B) },
  8053. { PREFIX_TABLE (PREFIX_VEX_0F6C) },
  8054. { PREFIX_TABLE (PREFIX_VEX_0F6D) },
  8055. { PREFIX_TABLE (PREFIX_VEX_0F6E) },
  8056. { PREFIX_TABLE (PREFIX_VEX_0F6F) },
  8057. /* 70 */
  8058. { PREFIX_TABLE (PREFIX_VEX_0F70) },
  8059. { REG_TABLE (REG_VEX_0F71) },
  8060. { REG_TABLE (REG_VEX_0F72) },
  8061. { REG_TABLE (REG_VEX_0F73) },
  8062. { PREFIX_TABLE (PREFIX_VEX_0F74) },
  8063. { PREFIX_TABLE (PREFIX_VEX_0F75) },
  8064. { PREFIX_TABLE (PREFIX_VEX_0F76) },
  8065. { PREFIX_TABLE (PREFIX_VEX_0F77) },
  8066. /* 78 */
  8067. { Bad_Opcode },
  8068. { Bad_Opcode },
  8069. { Bad_Opcode },
  8070. { Bad_Opcode },
  8071. { PREFIX_TABLE (PREFIX_VEX_0F7C) },
  8072. { PREFIX_TABLE (PREFIX_VEX_0F7D) },
  8073. { PREFIX_TABLE (PREFIX_VEX_0F7E) },
  8074. { PREFIX_TABLE (PREFIX_VEX_0F7F) },
  8075. /* 80 */
  8076. { Bad_Opcode },
  8077. { Bad_Opcode },
  8078. { Bad_Opcode },
  8079. { Bad_Opcode },
  8080. { Bad_Opcode },
  8081. { Bad_Opcode },
  8082. { Bad_Opcode },
  8083. { Bad_Opcode },
  8084. /* 88 */
  8085. { Bad_Opcode },
  8086. { Bad_Opcode },
  8087. { Bad_Opcode },
  8088. { Bad_Opcode },
  8089. { Bad_Opcode },
  8090. { Bad_Opcode },
  8091. { Bad_Opcode },
  8092. { Bad_Opcode },
  8093. /* 90 */
  8094. { PREFIX_TABLE (PREFIX_VEX_0F90) },
  8095. { PREFIX_TABLE (PREFIX_VEX_0F91) },
  8096. { PREFIX_TABLE (PREFIX_VEX_0F92) },
  8097. { PREFIX_TABLE (PREFIX_VEX_0F93) },
  8098. { Bad_Opcode },
  8099. { Bad_Opcode },
  8100. { Bad_Opcode },
  8101. { Bad_Opcode },
  8102. /* 98 */
  8103. { PREFIX_TABLE (PREFIX_VEX_0F98) },
  8104. { PREFIX_TABLE (PREFIX_VEX_0F99) },
  8105. { Bad_Opcode },
  8106. { Bad_Opcode },
  8107. { Bad_Opcode },
  8108. { Bad_Opcode },
  8109. { Bad_Opcode },
  8110. { Bad_Opcode },
  8111. /* a0 */
  8112. { Bad_Opcode },
  8113. { Bad_Opcode },
  8114. { Bad_Opcode },
  8115. { Bad_Opcode },
  8116. { Bad_Opcode },
  8117. { Bad_Opcode },
  8118. { Bad_Opcode },
  8119. { Bad_Opcode },
  8120. /* a8 */
  8121. { Bad_Opcode },
  8122. { Bad_Opcode },
  8123. { Bad_Opcode },
  8124. { Bad_Opcode },
  8125. { Bad_Opcode },
  8126. { Bad_Opcode },
  8127. { REG_TABLE (REG_VEX_0FAE) },
  8128. { Bad_Opcode },
  8129. /* b0 */
  8130. { Bad_Opcode },
  8131. { Bad_Opcode },
  8132. { Bad_Opcode },
  8133. { Bad_Opcode },
  8134. { Bad_Opcode },
  8135. { Bad_Opcode },
  8136. { Bad_Opcode },
  8137. { Bad_Opcode },
  8138. /* b8 */
  8139. { Bad_Opcode },
  8140. { Bad_Opcode },
  8141. { Bad_Opcode },
  8142. { Bad_Opcode },
  8143. { Bad_Opcode },
  8144. { Bad_Opcode },
  8145. { Bad_Opcode },
  8146. { Bad_Opcode },
  8147. /* c0 */
  8148. { Bad_Opcode },
  8149. { Bad_Opcode },
  8150. { PREFIX_TABLE (PREFIX_VEX_0FC2) },
  8151. { Bad_Opcode },
  8152. { PREFIX_TABLE (PREFIX_VEX_0FC4) },
  8153. { PREFIX_TABLE (PREFIX_VEX_0FC5) },
  8154. { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
  8155. { Bad_Opcode },
  8156. /* c8 */
  8157. { Bad_Opcode },
  8158. { Bad_Opcode },
  8159. { Bad_Opcode },
  8160. { Bad_Opcode },
  8161. { Bad_Opcode },
  8162. { Bad_Opcode },
  8163. { Bad_Opcode },
  8164. { Bad_Opcode },
  8165. /* d0 */
  8166. { PREFIX_TABLE (PREFIX_VEX_0FD0) },
  8167. { PREFIX_TABLE (PREFIX_VEX_0FD1) },
  8168. { PREFIX_TABLE (PREFIX_VEX_0FD2) },
  8169. { PREFIX_TABLE (PREFIX_VEX_0FD3) },
  8170. { PREFIX_TABLE (PREFIX_VEX_0FD4) },
  8171. { PREFIX_TABLE (PREFIX_VEX_0FD5) },
  8172. { PREFIX_TABLE (PREFIX_VEX_0FD6) },
  8173. { PREFIX_TABLE (PREFIX_VEX_0FD7) },
  8174. /* d8 */
  8175. { PREFIX_TABLE (PREFIX_VEX_0FD8) },
  8176. { PREFIX_TABLE (PREFIX_VEX_0FD9) },
  8177. { PREFIX_TABLE (PREFIX_VEX_0FDA) },
  8178. { PREFIX_TABLE (PREFIX_VEX_0FDB) },
  8179. { PREFIX_TABLE (PREFIX_VEX_0FDC) },
  8180. { PREFIX_TABLE (PREFIX_VEX_0FDD) },
  8181. { PREFIX_TABLE (PREFIX_VEX_0FDE) },
  8182. { PREFIX_TABLE (PREFIX_VEX_0FDF) },
  8183. /* e0 */
  8184. { PREFIX_TABLE (PREFIX_VEX_0FE0) },
  8185. { PREFIX_TABLE (PREFIX_VEX_0FE1) },
  8186. { PREFIX_TABLE (PREFIX_VEX_0FE2) },
  8187. { PREFIX_TABLE (PREFIX_VEX_0FE3) },
  8188. { PREFIX_TABLE (PREFIX_VEX_0FE4) },
  8189. { PREFIX_TABLE (PREFIX_VEX_0FE5) },
  8190. { PREFIX_TABLE (PREFIX_VEX_0FE6) },
  8191. { PREFIX_TABLE (PREFIX_VEX_0FE7) },
  8192. /* e8 */
  8193. { PREFIX_TABLE (PREFIX_VEX_0FE8) },
  8194. { PREFIX_TABLE (PREFIX_VEX_0FE9) },
  8195. { PREFIX_TABLE (PREFIX_VEX_0FEA) },
  8196. { PREFIX_TABLE (PREFIX_VEX_0FEB) },
  8197. { PREFIX_TABLE (PREFIX_VEX_0FEC) },
  8198. { PREFIX_TABLE (PREFIX_VEX_0FED) },
  8199. { PREFIX_TABLE (PREFIX_VEX_0FEE) },
  8200. { PREFIX_TABLE (PREFIX_VEX_0FEF) },
  8201. /* f0 */
  8202. { PREFIX_TABLE (PREFIX_VEX_0FF0) },
  8203. { PREFIX_TABLE (PREFIX_VEX_0FF1) },
  8204. { PREFIX_TABLE (PREFIX_VEX_0FF2) },
  8205. { PREFIX_TABLE (PREFIX_VEX_0FF3) },
  8206. { PREFIX_TABLE (PREFIX_VEX_0FF4) },
  8207. { PREFIX_TABLE (PREFIX_VEX_0FF5) },
  8208. { PREFIX_TABLE (PREFIX_VEX_0FF6) },
  8209. { PREFIX_TABLE (PREFIX_VEX_0FF7) },
  8210. /* f8 */
  8211. { PREFIX_TABLE (PREFIX_VEX_0FF8) },
  8212. { PREFIX_TABLE (PREFIX_VEX_0FF9) },
  8213. { PREFIX_TABLE (PREFIX_VEX_0FFA) },
  8214. { PREFIX_TABLE (PREFIX_VEX_0FFB) },
  8215. { PREFIX_TABLE (PREFIX_VEX_0FFC) },
  8216. { PREFIX_TABLE (PREFIX_VEX_0FFD) },
  8217. { PREFIX_TABLE (PREFIX_VEX_0FFE) },
  8218. { Bad_Opcode },
  8219. },
  8220. /* VEX_0F38 */
  8221. {
  8222. /* 00 */
  8223. { PREFIX_TABLE (PREFIX_VEX_0F3800) },
  8224. { PREFIX_TABLE (PREFIX_VEX_0F3801) },
  8225. { PREFIX_TABLE (PREFIX_VEX_0F3802) },
  8226. { PREFIX_TABLE (PREFIX_VEX_0F3803) },
  8227. { PREFIX_TABLE (PREFIX_VEX_0F3804) },
  8228. { PREFIX_TABLE (PREFIX_VEX_0F3805) },
  8229. { PREFIX_TABLE (PREFIX_VEX_0F3806) },
  8230. { PREFIX_TABLE (PREFIX_VEX_0F3807) },
  8231. /* 08 */
  8232. { PREFIX_TABLE (PREFIX_VEX_0F3808) },
  8233. { PREFIX_TABLE (PREFIX_VEX_0F3809) },
  8234. { PREFIX_TABLE (PREFIX_VEX_0F380A) },
  8235. { PREFIX_TABLE (PREFIX_VEX_0F380B) },
  8236. { PREFIX_TABLE (PREFIX_VEX_0F380C) },
  8237. { PREFIX_TABLE (PREFIX_VEX_0F380D) },
  8238. { PREFIX_TABLE (PREFIX_VEX_0F380E) },
  8239. { PREFIX_TABLE (PREFIX_VEX_0F380F) },
  8240. /* 10 */
  8241. { Bad_Opcode },
  8242. { Bad_Opcode },
  8243. { Bad_Opcode },
  8244. { PREFIX_TABLE (PREFIX_VEX_0F3813) },
  8245. { Bad_Opcode },
  8246. { Bad_Opcode },
  8247. { PREFIX_TABLE (PREFIX_VEX_0F3816) },
  8248. { PREFIX_TABLE (PREFIX_VEX_0F3817) },
  8249. /* 18 */
  8250. { PREFIX_TABLE (PREFIX_VEX_0F3818) },
  8251. { PREFIX_TABLE (PREFIX_VEX_0F3819) },
  8252. { PREFIX_TABLE (PREFIX_VEX_0F381A) },
  8253. { Bad_Opcode },
  8254. { PREFIX_TABLE (PREFIX_VEX_0F381C) },
  8255. { PREFIX_TABLE (PREFIX_VEX_0F381D) },
  8256. { PREFIX_TABLE (PREFIX_VEX_0F381E) },
  8257. { Bad_Opcode },
  8258. /* 20 */
  8259. { PREFIX_TABLE (PREFIX_VEX_0F3820) },
  8260. { PREFIX_TABLE (PREFIX_VEX_0F3821) },
  8261. { PREFIX_TABLE (PREFIX_VEX_0F3822) },
  8262. { PREFIX_TABLE (PREFIX_VEX_0F3823) },
  8263. { PREFIX_TABLE (PREFIX_VEX_0F3824) },
  8264. { PREFIX_TABLE (PREFIX_VEX_0F3825) },
  8265. { Bad_Opcode },
  8266. { Bad_Opcode },
  8267. /* 28 */
  8268. { PREFIX_TABLE (PREFIX_VEX_0F3828) },
  8269. { PREFIX_TABLE (PREFIX_VEX_0F3829) },
  8270. { PREFIX_TABLE (PREFIX_VEX_0F382A) },
  8271. { PREFIX_TABLE (PREFIX_VEX_0F382B) },
  8272. { PREFIX_TABLE (PREFIX_VEX_0F382C) },
  8273. { PREFIX_TABLE (PREFIX_VEX_0F382D) },
  8274. { PREFIX_TABLE (PREFIX_VEX_0F382E) },
  8275. { PREFIX_TABLE (PREFIX_VEX_0F382F) },
  8276. /* 30 */
  8277. { PREFIX_TABLE (PREFIX_VEX_0F3830) },
  8278. { PREFIX_TABLE (PREFIX_VEX_0F3831) },
  8279. { PREFIX_TABLE (PREFIX_VEX_0F3832) },
  8280. { PREFIX_TABLE (PREFIX_VEX_0F3833) },
  8281. { PREFIX_TABLE (PREFIX_VEX_0F3834) },
  8282. { PREFIX_TABLE (PREFIX_VEX_0F3835) },
  8283. { PREFIX_TABLE (PREFIX_VEX_0F3836) },
  8284. { PREFIX_TABLE (PREFIX_VEX_0F3837) },
  8285. /* 38 */
  8286. { PREFIX_TABLE (PREFIX_VEX_0F3838) },
  8287. { PREFIX_TABLE (PREFIX_VEX_0F3839) },
  8288. { PREFIX_TABLE (PREFIX_VEX_0F383A) },
  8289. { PREFIX_TABLE (PREFIX_VEX_0F383B) },
  8290. { PREFIX_TABLE (PREFIX_VEX_0F383C) },
  8291. { PREFIX_TABLE (PREFIX_VEX_0F383D) },
  8292. { PREFIX_TABLE (PREFIX_VEX_0F383E) },
  8293. { PREFIX_TABLE (PREFIX_VEX_0F383F) },
  8294. /* 40 */
  8295. { PREFIX_TABLE (PREFIX_VEX_0F3840) },
  8296. { PREFIX_TABLE (PREFIX_VEX_0F3841) },
  8297. { Bad_Opcode },
  8298. { Bad_Opcode },
  8299. { Bad_Opcode },
  8300. { PREFIX_TABLE (PREFIX_VEX_0F3845) },
  8301. { PREFIX_TABLE (PREFIX_VEX_0F3846) },
  8302. { PREFIX_TABLE (PREFIX_VEX_0F3847) },
  8303. /* 48 */
  8304. { Bad_Opcode },
  8305. { Bad_Opcode },
  8306. { Bad_Opcode },
  8307. { Bad_Opcode },
  8308. { Bad_Opcode },
  8309. { Bad_Opcode },
  8310. { Bad_Opcode },
  8311. { Bad_Opcode },
  8312. /* 50 */
  8313. { Bad_Opcode },
  8314. { Bad_Opcode },
  8315. { Bad_Opcode },
  8316. { Bad_Opcode },
  8317. { Bad_Opcode },
  8318. { Bad_Opcode },
  8319. { Bad_Opcode },
  8320. { Bad_Opcode },
  8321. /* 58 */
  8322. { PREFIX_TABLE (PREFIX_VEX_0F3858) },
  8323. { PREFIX_TABLE (PREFIX_VEX_0F3859) },
  8324. { PREFIX_TABLE (PREFIX_VEX_0F385A) },
  8325. { Bad_Opcode },
  8326. { Bad_Opcode },
  8327. { Bad_Opcode },
  8328. { Bad_Opcode },
  8329. { Bad_Opcode },
  8330. /* 60 */
  8331. { Bad_Opcode },
  8332. { Bad_Opcode },
  8333. { Bad_Opcode },
  8334. { Bad_Opcode },
  8335. { Bad_Opcode },
  8336. { Bad_Opcode },
  8337. { Bad_Opcode },
  8338. { Bad_Opcode },
  8339. /* 68 */
  8340. { Bad_Opcode },
  8341. { Bad_Opcode },
  8342. { Bad_Opcode },
  8343. { Bad_Opcode },
  8344. { Bad_Opcode },
  8345. { Bad_Opcode },
  8346. { Bad_Opcode },
  8347. { Bad_Opcode },
  8348. /* 70 */
  8349. { Bad_Opcode },
  8350. { Bad_Opcode },
  8351. { Bad_Opcode },
  8352. { Bad_Opcode },
  8353. { Bad_Opcode },
  8354. { Bad_Opcode },
  8355. { Bad_Opcode },
  8356. { Bad_Opcode },
  8357. /* 78 */
  8358. { PREFIX_TABLE (PREFIX_VEX_0F3878) },
  8359. { PREFIX_TABLE (PREFIX_VEX_0F3879) },
  8360. { Bad_Opcode },
  8361. { Bad_Opcode },
  8362. { Bad_Opcode },
  8363. { Bad_Opcode },
  8364. { Bad_Opcode },
  8365. { Bad_Opcode },
  8366. /* 80 */
  8367. { Bad_Opcode },
  8368. { Bad_Opcode },
  8369. { Bad_Opcode },
  8370. { Bad_Opcode },
  8371. { Bad_Opcode },
  8372. { Bad_Opcode },
  8373. { Bad_Opcode },
  8374. { Bad_Opcode },
  8375. /* 88 */
  8376. { Bad_Opcode },
  8377. { Bad_Opcode },
  8378. { Bad_Opcode },
  8379. { Bad_Opcode },
  8380. { PREFIX_TABLE (PREFIX_VEX_0F388C) },
  8381. { Bad_Opcode },
  8382. { PREFIX_TABLE (PREFIX_VEX_0F388E) },
  8383. { Bad_Opcode },
  8384. /* 90 */
  8385. { PREFIX_TABLE (PREFIX_VEX_0F3890) },
  8386. { PREFIX_TABLE (PREFIX_VEX_0F3891) },
  8387. { PREFIX_TABLE (PREFIX_VEX_0F3892) },
  8388. { PREFIX_TABLE (PREFIX_VEX_0F3893) },
  8389. { Bad_Opcode },
  8390. { Bad_Opcode },
  8391. { PREFIX_TABLE (PREFIX_VEX_0F3896) },
  8392. { PREFIX_TABLE (PREFIX_VEX_0F3897) },
  8393. /* 98 */
  8394. { PREFIX_TABLE (PREFIX_VEX_0F3898) },
  8395. { PREFIX_TABLE (PREFIX_VEX_0F3899) },
  8396. { PREFIX_TABLE (PREFIX_VEX_0F389A) },
  8397. { PREFIX_TABLE (PREFIX_VEX_0F389B) },
  8398. { PREFIX_TABLE (PREFIX_VEX_0F389C) },
  8399. { PREFIX_TABLE (PREFIX_VEX_0F389D) },
  8400. { PREFIX_TABLE (PREFIX_VEX_0F389E) },
  8401. { PREFIX_TABLE (PREFIX_VEX_0F389F) },
  8402. /* a0 */
  8403. { Bad_Opcode },
  8404. { Bad_Opcode },
  8405. { Bad_Opcode },
  8406. { Bad_Opcode },
  8407. { Bad_Opcode },
  8408. { Bad_Opcode },
  8409. { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
  8410. { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
  8411. /* a8 */
  8412. { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
  8413. { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
  8414. { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
  8415. { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
  8416. { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
  8417. { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
  8418. { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
  8419. { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
  8420. /* b0 */
  8421. { Bad_Opcode },
  8422. { Bad_Opcode },
  8423. { Bad_Opcode },
  8424. { Bad_Opcode },
  8425. { Bad_Opcode },
  8426. { Bad_Opcode },
  8427. { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
  8428. { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
  8429. /* b8 */
  8430. { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
  8431. { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
  8432. { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
  8433. { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
  8434. { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
  8435. { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
  8436. { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
  8437. { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
  8438. /* c0 */
  8439. { Bad_Opcode },
  8440. { Bad_Opcode },
  8441. { Bad_Opcode },
  8442. { Bad_Opcode },
  8443. { Bad_Opcode },
  8444. { Bad_Opcode },
  8445. { Bad_Opcode },
  8446. { Bad_Opcode },
  8447. /* c8 */
  8448. { Bad_Opcode },
  8449. { Bad_Opcode },
  8450. { Bad_Opcode },
  8451. { Bad_Opcode },
  8452. { Bad_Opcode },
  8453. { Bad_Opcode },
  8454. { Bad_Opcode },
  8455. { Bad_Opcode },
  8456. /* d0 */
  8457. { Bad_Opcode },
  8458. { Bad_Opcode },
  8459. { Bad_Opcode },
  8460. { Bad_Opcode },
  8461. { Bad_Opcode },
  8462. { Bad_Opcode },
  8463. { Bad_Opcode },
  8464. { Bad_Opcode },
  8465. /* d8 */
  8466. { Bad_Opcode },
  8467. { Bad_Opcode },
  8468. { Bad_Opcode },
  8469. { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
  8470. { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
  8471. { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
  8472. { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
  8473. { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
  8474. /* e0 */
  8475. { Bad_Opcode },
  8476. { Bad_Opcode },
  8477. { Bad_Opcode },
  8478. { Bad_Opcode },
  8479. { Bad_Opcode },
  8480. { Bad_Opcode },
  8481. { Bad_Opcode },
  8482. { Bad_Opcode },
  8483. /* e8 */
  8484. { Bad_Opcode },
  8485. { Bad_Opcode },
  8486. { Bad_Opcode },
  8487. { Bad_Opcode },
  8488. { Bad_Opcode },
  8489. { Bad_Opcode },
  8490. { Bad_Opcode },
  8491. { Bad_Opcode },
  8492. /* f0 */
  8493. { Bad_Opcode },
  8494. { Bad_Opcode },
  8495. { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
  8496. { REG_TABLE (REG_VEX_0F38F3) },
  8497. { Bad_Opcode },
  8498. { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
  8499. { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
  8500. { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
  8501. /* f8 */
  8502. { Bad_Opcode },
  8503. { Bad_Opcode },
  8504. { Bad_Opcode },
  8505. { Bad_Opcode },
  8506. { Bad_Opcode },
  8507. { Bad_Opcode },
  8508. { Bad_Opcode },
  8509. { Bad_Opcode },
  8510. },
  8511. /* VEX_0F3A */
  8512. {
  8513. /* 00 */
  8514. { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
  8515. { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
  8516. { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
  8517. { Bad_Opcode },
  8518. { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
  8519. { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
  8520. { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
  8521. { Bad_Opcode },
  8522. /* 08 */
  8523. { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
  8524. { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
  8525. { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
  8526. { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
  8527. { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
  8528. { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
  8529. { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
  8530. { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
  8531. /* 10 */
  8532. { Bad_Opcode },
  8533. { Bad_Opcode },
  8534. { Bad_Opcode },
  8535. { Bad_Opcode },
  8536. { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
  8537. { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
  8538. { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
  8539. { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
  8540. /* 18 */
  8541. { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
  8542. { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
  8543. { Bad_Opcode },
  8544. { Bad_Opcode },
  8545. { Bad_Opcode },
  8546. { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
  8547. { Bad_Opcode },
  8548. { Bad_Opcode },
  8549. /* 20 */
  8550. { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
  8551. { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
  8552. { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
  8553. { Bad_Opcode },
  8554. { Bad_Opcode },
  8555. { Bad_Opcode },
  8556. { Bad_Opcode },
  8557. { Bad_Opcode },
  8558. /* 28 */
  8559. { Bad_Opcode },
  8560. { Bad_Opcode },
  8561. { Bad_Opcode },
  8562. { Bad_Opcode },
  8563. { Bad_Opcode },
  8564. { Bad_Opcode },
  8565. { Bad_Opcode },
  8566. { Bad_Opcode },
  8567. /* 30 */
  8568. { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
  8569. { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
  8570. { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
  8571. { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
  8572. { Bad_Opcode },
  8573. { Bad_Opcode },
  8574. { Bad_Opcode },
  8575. { Bad_Opcode },
  8576. /* 38 */
  8577. { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
  8578. { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
  8579. { Bad_Opcode },
  8580. { Bad_Opcode },
  8581. { Bad_Opcode },
  8582. { Bad_Opcode },
  8583. { Bad_Opcode },
  8584. { Bad_Opcode },
  8585. /* 40 */
  8586. { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
  8587. { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
  8588. { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
  8589. { Bad_Opcode },
  8590. { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
  8591. { Bad_Opcode },
  8592. { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
  8593. { Bad_Opcode },
  8594. /* 48 */
  8595. { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
  8596. { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
  8597. { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
  8598. { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
  8599. { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
  8600. { Bad_Opcode },
  8601. { Bad_Opcode },
  8602. { Bad_Opcode },
  8603. /* 50 */
  8604. { Bad_Opcode },
  8605. { Bad_Opcode },
  8606. { Bad_Opcode },
  8607. { Bad_Opcode },
  8608. { Bad_Opcode },
  8609. { Bad_Opcode },
  8610. { Bad_Opcode },
  8611. { Bad_Opcode },
  8612. /* 58 */
  8613. { Bad_Opcode },
  8614. { Bad_Opcode },
  8615. { Bad_Opcode },
  8616. { Bad_Opcode },
  8617. { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
  8618. { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
  8619. { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
  8620. { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
  8621. /* 60 */
  8622. { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
  8623. { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
  8624. { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
  8625. { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
  8626. { Bad_Opcode },
  8627. { Bad_Opcode },
  8628. { Bad_Opcode },
  8629. { Bad_Opcode },
  8630. /* 68 */
  8631. { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
  8632. { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
  8633. { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
  8634. { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
  8635. { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
  8636. { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
  8637. { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
  8638. { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
  8639. /* 70 */
  8640. { Bad_Opcode },
  8641. { Bad_Opcode },
  8642. { Bad_Opcode },
  8643. { Bad_Opcode },
  8644. { Bad_Opcode },
  8645. { Bad_Opcode },
  8646. { Bad_Opcode },
  8647. { Bad_Opcode },
  8648. /* 78 */
  8649. { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
  8650. { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
  8651. { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
  8652. { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
  8653. { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
  8654. { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
  8655. { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
  8656. { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
  8657. /* 80 */
  8658. { Bad_Opcode },
  8659. { Bad_Opcode },
  8660. { Bad_Opcode },
  8661. { Bad_Opcode },
  8662. { Bad_Opcode },
  8663. { Bad_Opcode },
  8664. { Bad_Opcode },
  8665. { Bad_Opcode },
  8666. /* 88 */
  8667. { Bad_Opcode },
  8668. { Bad_Opcode },
  8669. { Bad_Opcode },
  8670. { Bad_Opcode },
  8671. { Bad_Opcode },
  8672. { Bad_Opcode },
  8673. { Bad_Opcode },
  8674. { Bad_Opcode },
  8675. /* 90 */
  8676. { Bad_Opcode },
  8677. { Bad_Opcode },
  8678. { Bad_Opcode },
  8679. { Bad_Opcode },
  8680. { Bad_Opcode },
  8681. { Bad_Opcode },
  8682. { Bad_Opcode },
  8683. { Bad_Opcode },
  8684. /* 98 */
  8685. { Bad_Opcode },
  8686. { Bad_Opcode },
  8687. { Bad_Opcode },
  8688. { Bad_Opcode },
  8689. { Bad_Opcode },
  8690. { Bad_Opcode },
  8691. { Bad_Opcode },
  8692. { Bad_Opcode },
  8693. /* a0 */
  8694. { Bad_Opcode },
  8695. { Bad_Opcode },
  8696. { Bad_Opcode },
  8697. { Bad_Opcode },
  8698. { Bad_Opcode },
  8699. { Bad_Opcode },
  8700. { Bad_Opcode },
  8701. { Bad_Opcode },
  8702. /* a8 */
  8703. { Bad_Opcode },
  8704. { Bad_Opcode },
  8705. { Bad_Opcode },
  8706. { Bad_Opcode },
  8707. { Bad_Opcode },
  8708. { Bad_Opcode },
  8709. { Bad_Opcode },
  8710. { Bad_Opcode },
  8711. /* b0 */
  8712. { Bad_Opcode },
  8713. { Bad_Opcode },
  8714. { Bad_Opcode },
  8715. { Bad_Opcode },
  8716. { Bad_Opcode },
  8717. { Bad_Opcode },
  8718. { Bad_Opcode },
  8719. { Bad_Opcode },
  8720. /* b8 */
  8721. { Bad_Opcode },
  8722. { Bad_Opcode },
  8723. { Bad_Opcode },
  8724. { Bad_Opcode },
  8725. { Bad_Opcode },
  8726. { Bad_Opcode },
  8727. { Bad_Opcode },
  8728. { Bad_Opcode },
  8729. /* c0 */
  8730. { Bad_Opcode },
  8731. { Bad_Opcode },
  8732. { Bad_Opcode },
  8733. { Bad_Opcode },
  8734. { Bad_Opcode },
  8735. { Bad_Opcode },
  8736. { Bad_Opcode },
  8737. { Bad_Opcode },
  8738. /* c8 */
  8739. { Bad_Opcode },
  8740. { Bad_Opcode },
  8741. { Bad_Opcode },
  8742. { Bad_Opcode },
  8743. { Bad_Opcode },
  8744. { Bad_Opcode },
  8745. { Bad_Opcode },
  8746. { Bad_Opcode },
  8747. /* d0 */
  8748. { Bad_Opcode },
  8749. { Bad_Opcode },
  8750. { Bad_Opcode },
  8751. { Bad_Opcode },
  8752. { Bad_Opcode },
  8753. { Bad_Opcode },
  8754. { Bad_Opcode },
  8755. { Bad_Opcode },
  8756. /* d8 */
  8757. { Bad_Opcode },
  8758. { Bad_Opcode },
  8759. { Bad_Opcode },
  8760. { Bad_Opcode },
  8761. { Bad_Opcode },
  8762. { Bad_Opcode },
  8763. { Bad_Opcode },
  8764. { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
  8765. /* e0 */
  8766. { Bad_Opcode },
  8767. { Bad_Opcode },
  8768. { Bad_Opcode },
  8769. { Bad_Opcode },
  8770. { Bad_Opcode },
  8771. { Bad_Opcode },
  8772. { Bad_Opcode },
  8773. { Bad_Opcode },
  8774. /* e8 */
  8775. { Bad_Opcode },
  8776. { Bad_Opcode },
  8777. { Bad_Opcode },
  8778. { Bad_Opcode },
  8779. { Bad_Opcode },
  8780. { Bad_Opcode },
  8781. { Bad_Opcode },
  8782. { Bad_Opcode },
  8783. /* f0 */
  8784. { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
  8785. { Bad_Opcode },
  8786. { Bad_Opcode },
  8787. { Bad_Opcode },
  8788. { Bad_Opcode },
  8789. { Bad_Opcode },
  8790. { Bad_Opcode },
  8791. { Bad_Opcode },
  8792. /* f8 */
  8793. { Bad_Opcode },
  8794. { Bad_Opcode },
  8795. { Bad_Opcode },
  8796. { Bad_Opcode },
  8797. { Bad_Opcode },
  8798. { Bad_Opcode },
  8799. { Bad_Opcode },
  8800. { Bad_Opcode },
  8801. },
  8802. };
  8803. #define NEED_OPCODE_TABLE
  8804. #include "i386-dis-evex.h"
  8805. #undef NEED_OPCODE_TABLE
  8806. static const struct dis386 vex_len_table[][2] = {
  8807. /* VEX_LEN_0F10_P_1 */
  8808. {
  8809. { VEX_W_TABLE (VEX_W_0F10_P_1) },
  8810. { VEX_W_TABLE (VEX_W_0F10_P_1) },
  8811. },
  8812. /* VEX_LEN_0F10_P_3 */
  8813. {
  8814. { VEX_W_TABLE (VEX_W_0F10_P_3) },
  8815. { VEX_W_TABLE (VEX_W_0F10_P_3) },
  8816. },
  8817. /* VEX_LEN_0F11_P_1 */
  8818. {
  8819. { VEX_W_TABLE (VEX_W_0F11_P_1) },
  8820. { VEX_W_TABLE (VEX_W_0F11_P_1) },
  8821. },
  8822. /* VEX_LEN_0F11_P_3 */
  8823. {
  8824. { VEX_W_TABLE (VEX_W_0F11_P_3) },
  8825. { VEX_W_TABLE (VEX_W_0F11_P_3) },
  8826. },
  8827. /* VEX_LEN_0F12_P_0_M_0 */
  8828. {
  8829. { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
  8830. },
  8831. /* VEX_LEN_0F12_P_0_M_1 */
  8832. {
  8833. { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
  8834. },
  8835. /* VEX_LEN_0F12_P_2 */
  8836. {
  8837. { VEX_W_TABLE (VEX_W_0F12_P_2) },
  8838. },
  8839. /* VEX_LEN_0F13_M_0 */
  8840. {
  8841. { VEX_W_TABLE (VEX_W_0F13_M_0) },
  8842. },
  8843. /* VEX_LEN_0F16_P_0_M_0 */
  8844. {
  8845. { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
  8846. },
  8847. /* VEX_LEN_0F16_P_0_M_1 */
  8848. {
  8849. { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
  8850. },
  8851. /* VEX_LEN_0F16_P_2 */
  8852. {
  8853. { VEX_W_TABLE (VEX_W_0F16_P_2) },
  8854. },
  8855. /* VEX_LEN_0F17_M_0 */
  8856. {
  8857. { VEX_W_TABLE (VEX_W_0F17_M_0) },
  8858. },
  8859. /* VEX_LEN_0F2A_P_1 */
  8860. {
  8861. { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
  8862. { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
  8863. },
  8864. /* VEX_LEN_0F2A_P_3 */
  8865. {
  8866. { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
  8867. { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
  8868. },
  8869. /* VEX_LEN_0F2C_P_1 */
  8870. {
  8871. { "vcvttss2siY", { Gv, EXdScalar }, 0 },
  8872. { "vcvttss2siY", { Gv, EXdScalar }, 0 },
  8873. },
  8874. /* VEX_LEN_0F2C_P_3 */
  8875. {
  8876. { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
  8877. { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
  8878. },
  8879. /* VEX_LEN_0F2D_P_1 */
  8880. {
  8881. { "vcvtss2siY", { Gv, EXdScalar }, 0 },
  8882. { "vcvtss2siY", { Gv, EXdScalar }, 0 },
  8883. },
  8884. /* VEX_LEN_0F2D_P_3 */
  8885. {
  8886. { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
  8887. { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
  8888. },
  8889. /* VEX_LEN_0F2E_P_0 */
  8890. {
  8891. { VEX_W_TABLE (VEX_W_0F2E_P_0) },
  8892. { VEX_W_TABLE (VEX_W_0F2E_P_0) },
  8893. },
  8894. /* VEX_LEN_0F2E_P_2 */
  8895. {
  8896. { VEX_W_TABLE (VEX_W_0F2E_P_2) },
  8897. { VEX_W_TABLE (VEX_W_0F2E_P_2) },
  8898. },
  8899. /* VEX_LEN_0F2F_P_0 */
  8900. {
  8901. { VEX_W_TABLE (VEX_W_0F2F_P_0) },
  8902. { VEX_W_TABLE (VEX_W_0F2F_P_0) },
  8903. },
  8904. /* VEX_LEN_0F2F_P_2 */
  8905. {
  8906. { VEX_W_TABLE (VEX_W_0F2F_P_2) },
  8907. { VEX_W_TABLE (VEX_W_0F2F_P_2) },
  8908. },
  8909. /* VEX_LEN_0F41_P_0 */
  8910. {
  8911. { Bad_Opcode },
  8912. { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
  8913. },
  8914. /* VEX_LEN_0F41_P_2 */
  8915. {
  8916. { Bad_Opcode },
  8917. { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
  8918. },
  8919. /* VEX_LEN_0F42_P_0 */
  8920. {
  8921. { Bad_Opcode },
  8922. { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
  8923. },
  8924. /* VEX_LEN_0F42_P_2 */
  8925. {
  8926. { Bad_Opcode },
  8927. { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
  8928. },
  8929. /* VEX_LEN_0F44_P_0 */
  8930. {
  8931. { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
  8932. },
  8933. /* VEX_LEN_0F44_P_2 */
  8934. {
  8935. { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
  8936. },
  8937. /* VEX_LEN_0F45_P_0 */
  8938. {
  8939. { Bad_Opcode },
  8940. { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
  8941. },
  8942. /* VEX_LEN_0F45_P_2 */
  8943. {
  8944. { Bad_Opcode },
  8945. { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
  8946. },
  8947. /* VEX_LEN_0F46_P_0 */
  8948. {
  8949. { Bad_Opcode },
  8950. { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
  8951. },
  8952. /* VEX_LEN_0F46_P_2 */
  8953. {
  8954. { Bad_Opcode },
  8955. { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
  8956. },
  8957. /* VEX_LEN_0F47_P_0 */
  8958. {
  8959. { Bad_Opcode },
  8960. { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
  8961. },
  8962. /* VEX_LEN_0F47_P_2 */
  8963. {
  8964. { Bad_Opcode },
  8965. { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
  8966. },
  8967. /* VEX_LEN_0F4A_P_0 */
  8968. {
  8969. { Bad_Opcode },
  8970. { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
  8971. },
  8972. /* VEX_LEN_0F4A_P_2 */
  8973. {
  8974. { Bad_Opcode },
  8975. { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
  8976. },
  8977. /* VEX_LEN_0F4B_P_0 */
  8978. {
  8979. { Bad_Opcode },
  8980. { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
  8981. },
  8982. /* VEX_LEN_0F4B_P_2 */
  8983. {
  8984. { Bad_Opcode },
  8985. { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
  8986. },
  8987. /* VEX_LEN_0F51_P_1 */
  8988. {
  8989. { VEX_W_TABLE (VEX_W_0F51_P_1) },
  8990. { VEX_W_TABLE (VEX_W_0F51_P_1) },
  8991. },
  8992. /* VEX_LEN_0F51_P_3 */
  8993. {
  8994. { VEX_W_TABLE (VEX_W_0F51_P_3) },
  8995. { VEX_W_TABLE (VEX_W_0F51_P_3) },
  8996. },
  8997. /* VEX_LEN_0F52_P_1 */
  8998. {
  8999. { VEX_W_TABLE (VEX_W_0F52_P_1) },
  9000. { VEX_W_TABLE (VEX_W_0F52_P_1) },
  9001. },
  9002. /* VEX_LEN_0F53_P_1 */
  9003. {
  9004. { VEX_W_TABLE (VEX_W_0F53_P_1) },
  9005. { VEX_W_TABLE (VEX_W_0F53_P_1) },
  9006. },
  9007. /* VEX_LEN_0F58_P_1 */
  9008. {
  9009. { VEX_W_TABLE (VEX_W_0F58_P_1) },
  9010. { VEX_W_TABLE (VEX_W_0F58_P_1) },
  9011. },
  9012. /* VEX_LEN_0F58_P_3 */
  9013. {
  9014. { VEX_W_TABLE (VEX_W_0F58_P_3) },
  9015. { VEX_W_TABLE (VEX_W_0F58_P_3) },
  9016. },
  9017. /* VEX_LEN_0F59_P_1 */
  9018. {
  9019. { VEX_W_TABLE (VEX_W_0F59_P_1) },
  9020. { VEX_W_TABLE (VEX_W_0F59_P_1) },
  9021. },
  9022. /* VEX_LEN_0F59_P_3 */
  9023. {
  9024. { VEX_W_TABLE (VEX_W_0F59_P_3) },
  9025. { VEX_W_TABLE (VEX_W_0F59_P_3) },
  9026. },
  9027. /* VEX_LEN_0F5A_P_1 */
  9028. {
  9029. { VEX_W_TABLE (VEX_W_0F5A_P_1) },
  9030. { VEX_W_TABLE (VEX_W_0F5A_P_1) },
  9031. },
  9032. /* VEX_LEN_0F5A_P_3 */
  9033. {
  9034. { VEX_W_TABLE (VEX_W_0F5A_P_3) },
  9035. { VEX_W_TABLE (VEX_W_0F5A_P_3) },
  9036. },
  9037. /* VEX_LEN_0F5C_P_1 */
  9038. {
  9039. { VEX_W_TABLE (VEX_W_0F5C_P_1) },
  9040. { VEX_W_TABLE (VEX_W_0F5C_P_1) },
  9041. },
  9042. /* VEX_LEN_0F5C_P_3 */
  9043. {
  9044. { VEX_W_TABLE (VEX_W_0F5C_P_3) },
  9045. { VEX_W_TABLE (VEX_W_0F5C_P_3) },
  9046. },
  9047. /* VEX_LEN_0F5D_P_1 */
  9048. {
  9049. { VEX_W_TABLE (VEX_W_0F5D_P_1) },
  9050. { VEX_W_TABLE (VEX_W_0F5D_P_1) },
  9051. },
  9052. /* VEX_LEN_0F5D_P_3 */
  9053. {
  9054. { VEX_W_TABLE (VEX_W_0F5D_P_3) },
  9055. { VEX_W_TABLE (VEX_W_0F5D_P_3) },
  9056. },
  9057. /* VEX_LEN_0F5E_P_1 */
  9058. {
  9059. { VEX_W_TABLE (VEX_W_0F5E_P_1) },
  9060. { VEX_W_TABLE (VEX_W_0F5E_P_1) },
  9061. },
  9062. /* VEX_LEN_0F5E_P_3 */
  9063. {
  9064. { VEX_W_TABLE (VEX_W_0F5E_P_3) },
  9065. { VEX_W_TABLE (VEX_W_0F5E_P_3) },
  9066. },
  9067. /* VEX_LEN_0F5F_P_1 */
  9068. {
  9069. { VEX_W_TABLE (VEX_W_0F5F_P_1) },
  9070. { VEX_W_TABLE (VEX_W_0F5F_P_1) },
  9071. },
  9072. /* VEX_LEN_0F5F_P_3 */
  9073. {
  9074. { VEX_W_TABLE (VEX_W_0F5F_P_3) },
  9075. { VEX_W_TABLE (VEX_W_0F5F_P_3) },
  9076. },
  9077. /* VEX_LEN_0F6E_P_2 */
  9078. {
  9079. { "vmovK", { XMScalar, Edq }, 0 },
  9080. { "vmovK", { XMScalar, Edq }, 0 },
  9081. },
  9082. /* VEX_LEN_0F7E_P_1 */
  9083. {
  9084. { VEX_W_TABLE (VEX_W_0F7E_P_1) },
  9085. { VEX_W_TABLE (VEX_W_0F7E_P_1) },
  9086. },
  9087. /* VEX_LEN_0F7E_P_2 */
  9088. {
  9089. { "vmovK", { Edq, XMScalar }, 0 },
  9090. { "vmovK", { Edq, XMScalar }, 0 },
  9091. },
  9092. /* VEX_LEN_0F90_P_0 */
  9093. {
  9094. { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
  9095. },
  9096. /* VEX_LEN_0F90_P_2 */
  9097. {
  9098. { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
  9099. },
  9100. /* VEX_LEN_0F91_P_0 */
  9101. {
  9102. { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
  9103. },
  9104. /* VEX_LEN_0F91_P_2 */
  9105. {
  9106. { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
  9107. },
  9108. /* VEX_LEN_0F92_P_0 */
  9109. {
  9110. { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
  9111. },
  9112. /* VEX_LEN_0F92_P_2 */
  9113. {
  9114. { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
  9115. },
  9116. /* VEX_LEN_0F92_P_3 */
  9117. {
  9118. { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
  9119. },
  9120. /* VEX_LEN_0F93_P_0 */
  9121. {
  9122. { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
  9123. },
  9124. /* VEX_LEN_0F93_P_2 */
  9125. {
  9126. { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
  9127. },
  9128. /* VEX_LEN_0F93_P_3 */
  9129. {
  9130. { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
  9131. },
  9132. /* VEX_LEN_0F98_P_0 */
  9133. {
  9134. { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
  9135. },
  9136. /* VEX_LEN_0F98_P_2 */
  9137. {
  9138. { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
  9139. },
  9140. /* VEX_LEN_0F99_P_0 */
  9141. {
  9142. { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
  9143. },
  9144. /* VEX_LEN_0F99_P_2 */
  9145. {
  9146. { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
  9147. },
  9148. /* VEX_LEN_0FAE_R_2_M_0 */
  9149. {
  9150. { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
  9151. },
  9152. /* VEX_LEN_0FAE_R_3_M_0 */
  9153. {
  9154. { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
  9155. },
  9156. /* VEX_LEN_0FC2_P_1 */
  9157. {
  9158. { VEX_W_TABLE (VEX_W_0FC2_P_1) },
  9159. { VEX_W_TABLE (VEX_W_0FC2_P_1) },
  9160. },
  9161. /* VEX_LEN_0FC2_P_3 */
  9162. {
  9163. { VEX_W_TABLE (VEX_W_0FC2_P_3) },
  9164. { VEX_W_TABLE (VEX_W_0FC2_P_3) },
  9165. },
  9166. /* VEX_LEN_0FC4_P_2 */
  9167. {
  9168. { VEX_W_TABLE (VEX_W_0FC4_P_2) },
  9169. },
  9170. /* VEX_LEN_0FC5_P_2 */
  9171. {
  9172. { VEX_W_TABLE (VEX_W_0FC5_P_2) },
  9173. },
  9174. /* VEX_LEN_0FD6_P_2 */
  9175. {
  9176. { VEX_W_TABLE (VEX_W_0FD6_P_2) },
  9177. { VEX_W_TABLE (VEX_W_0FD6_P_2) },
  9178. },
  9179. /* VEX_LEN_0FF7_P_2 */
  9180. {
  9181. { VEX_W_TABLE (VEX_W_0FF7_P_2) },
  9182. },
  9183. /* VEX_LEN_0F3816_P_2 */
  9184. {
  9185. { Bad_Opcode },
  9186. { VEX_W_TABLE (VEX_W_0F3816_P_2) },
  9187. },
  9188. /* VEX_LEN_0F3819_P_2 */
  9189. {
  9190. { Bad_Opcode },
  9191. { VEX_W_TABLE (VEX_W_0F3819_P_2) },
  9192. },
  9193. /* VEX_LEN_0F381A_P_2_M_0 */
  9194. {
  9195. { Bad_Opcode },
  9196. { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
  9197. },
  9198. /* VEX_LEN_0F3836_P_2 */
  9199. {
  9200. { Bad_Opcode },
  9201. { VEX_W_TABLE (VEX_W_0F3836_P_2) },
  9202. },
  9203. /* VEX_LEN_0F3841_P_2 */
  9204. {
  9205. { VEX_W_TABLE (VEX_W_0F3841_P_2) },
  9206. },
  9207. /* VEX_LEN_0F385A_P_2_M_0 */
  9208. {
  9209. { Bad_Opcode },
  9210. { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
  9211. },
  9212. /* VEX_LEN_0F38DB_P_2 */
  9213. {
  9214. { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
  9215. },
  9216. /* VEX_LEN_0F38DC_P_2 */
  9217. {
  9218. { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
  9219. },
  9220. /* VEX_LEN_0F38DD_P_2 */
  9221. {
  9222. { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
  9223. },
  9224. /* VEX_LEN_0F38DE_P_2 */
  9225. {
  9226. { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
  9227. },
  9228. /* VEX_LEN_0F38DF_P_2 */
  9229. {
  9230. { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
  9231. },
  9232. /* VEX_LEN_0F38F2_P_0 */
  9233. {
  9234. { "andnS", { Gdq, VexGdq, Edq }, 0 },
  9235. },
  9236. /* VEX_LEN_0F38F3_R_1_P_0 */
  9237. {
  9238. { "blsrS", { VexGdq, Edq }, 0 },
  9239. },
  9240. /* VEX_LEN_0F38F3_R_2_P_0 */
  9241. {
  9242. { "blsmskS", { VexGdq, Edq }, 0 },
  9243. },
  9244. /* VEX_LEN_0F38F3_R_3_P_0 */
  9245. {
  9246. { "blsiS", { VexGdq, Edq }, 0 },
  9247. },
  9248. /* VEX_LEN_0F38F5_P_0 */
  9249. {
  9250. { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
  9251. },
  9252. /* VEX_LEN_0F38F5_P_1 */
  9253. {
  9254. { "pextS", { Gdq, VexGdq, Edq }, 0 },
  9255. },
  9256. /* VEX_LEN_0F38F5_P_3 */
  9257. {
  9258. { "pdepS", { Gdq, VexGdq, Edq }, 0 },
  9259. },
  9260. /* VEX_LEN_0F38F6_P_3 */
  9261. {
  9262. { "mulxS", { Gdq, VexGdq, Edq }, 0 },
  9263. },
  9264. /* VEX_LEN_0F38F7_P_0 */
  9265. {
  9266. { "bextrS", { Gdq, Edq, VexGdq }, 0 },
  9267. },
  9268. /* VEX_LEN_0F38F7_P_1 */
  9269. {
  9270. { "sarxS", { Gdq, Edq, VexGdq }, 0 },
  9271. },
  9272. /* VEX_LEN_0F38F7_P_2 */
  9273. {
  9274. { "shlxS", { Gdq, Edq, VexGdq }, 0 },
  9275. },
  9276. /* VEX_LEN_0F38F7_P_3 */
  9277. {
  9278. { "shrxS", { Gdq, Edq, VexGdq }, 0 },
  9279. },
  9280. /* VEX_LEN_0F3A00_P_2 */
  9281. {
  9282. { Bad_Opcode },
  9283. { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
  9284. },
  9285. /* VEX_LEN_0F3A01_P_2 */
  9286. {
  9287. { Bad_Opcode },
  9288. { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
  9289. },
  9290. /* VEX_LEN_0F3A06_P_2 */
  9291. {
  9292. { Bad_Opcode },
  9293. { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
  9294. },
  9295. /* VEX_LEN_0F3A0A_P_2 */
  9296. {
  9297. { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
  9298. { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
  9299. },
  9300. /* VEX_LEN_0F3A0B_P_2 */
  9301. {
  9302. { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
  9303. { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
  9304. },
  9305. /* VEX_LEN_0F3A14_P_2 */
  9306. {
  9307. { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
  9308. },
  9309. /* VEX_LEN_0F3A15_P_2 */
  9310. {
  9311. { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
  9312. },
  9313. /* VEX_LEN_0F3A16_P_2 */
  9314. {
  9315. { "vpextrK", { Edq, XM, Ib }, 0 },
  9316. },
  9317. /* VEX_LEN_0F3A17_P_2 */
  9318. {
  9319. { "vextractps", { Edqd, XM, Ib }, 0 },
  9320. },
  9321. /* VEX_LEN_0F3A18_P_2 */
  9322. {
  9323. { Bad_Opcode },
  9324. { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
  9325. },
  9326. /* VEX_LEN_0F3A19_P_2 */
  9327. {
  9328. { Bad_Opcode },
  9329. { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
  9330. },
  9331. /* VEX_LEN_0F3A20_P_2 */
  9332. {
  9333. { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
  9334. },
  9335. /* VEX_LEN_0F3A21_P_2 */
  9336. {
  9337. { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
  9338. },
  9339. /* VEX_LEN_0F3A22_P_2 */
  9340. {
  9341. { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
  9342. },
  9343. /* VEX_LEN_0F3A30_P_2 */
  9344. {
  9345. { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
  9346. },
  9347. /* VEX_LEN_0F3A31_P_2 */
  9348. {
  9349. { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
  9350. },
  9351. /* VEX_LEN_0F3A32_P_2 */
  9352. {
  9353. { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
  9354. },
  9355. /* VEX_LEN_0F3A33_P_2 */
  9356. {
  9357. { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
  9358. },
  9359. /* VEX_LEN_0F3A38_P_2 */
  9360. {
  9361. { Bad_Opcode },
  9362. { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
  9363. },
  9364. /* VEX_LEN_0F3A39_P_2 */
  9365. {
  9366. { Bad_Opcode },
  9367. { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
  9368. },
  9369. /* VEX_LEN_0F3A41_P_2 */
  9370. {
  9371. { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
  9372. },
  9373. /* VEX_LEN_0F3A44_P_2 */
  9374. {
  9375. { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
  9376. },
  9377. /* VEX_LEN_0F3A46_P_2 */
  9378. {
  9379. { Bad_Opcode },
  9380. { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
  9381. },
  9382. /* VEX_LEN_0F3A60_P_2 */
  9383. {
  9384. { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
  9385. },
  9386. /* VEX_LEN_0F3A61_P_2 */
  9387. {
  9388. { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
  9389. },
  9390. /* VEX_LEN_0F3A62_P_2 */
  9391. {
  9392. { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
  9393. },
  9394. /* VEX_LEN_0F3A63_P_2 */
  9395. {
  9396. { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
  9397. },
  9398. /* VEX_LEN_0F3A6A_P_2 */
  9399. {
  9400. { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
  9401. },
  9402. /* VEX_LEN_0F3A6B_P_2 */
  9403. {
  9404. { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
  9405. },
  9406. /* VEX_LEN_0F3A6E_P_2 */
  9407. {
  9408. { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
  9409. },
  9410. /* VEX_LEN_0F3A6F_P_2 */
  9411. {
  9412. { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
  9413. },
  9414. /* VEX_LEN_0F3A7A_P_2 */
  9415. {
  9416. { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
  9417. },
  9418. /* VEX_LEN_0F3A7B_P_2 */
  9419. {
  9420. { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
  9421. },
  9422. /* VEX_LEN_0F3A7E_P_2 */
  9423. {
  9424. { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
  9425. },
  9426. /* VEX_LEN_0F3A7F_P_2 */
  9427. {
  9428. { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
  9429. },
  9430. /* VEX_LEN_0F3ADF_P_2 */
  9431. {
  9432. { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
  9433. },
  9434. /* VEX_LEN_0F3AF0_P_3 */
  9435. {
  9436. { "rorxS", { Gdq, Edq, Ib }, 0 },
  9437. },
  9438. /* VEX_LEN_0FXOP_08_CC */
  9439. {
  9440. { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
  9441. },
  9442. /* VEX_LEN_0FXOP_08_CD */
  9443. {
  9444. { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
  9445. },
  9446. /* VEX_LEN_0FXOP_08_CE */
  9447. {
  9448. { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
  9449. },
  9450. /* VEX_LEN_0FXOP_08_CF */
  9451. {
  9452. { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
  9453. },
  9454. /* VEX_LEN_0FXOP_08_EC */
  9455. {
  9456. { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
  9457. },
  9458. /* VEX_LEN_0FXOP_08_ED */
  9459. {
  9460. { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
  9461. },
  9462. /* VEX_LEN_0FXOP_08_EE */
  9463. {
  9464. { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
  9465. },
  9466. /* VEX_LEN_0FXOP_08_EF */
  9467. {
  9468. { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
  9469. },
  9470. /* VEX_LEN_0FXOP_09_80 */
  9471. {
  9472. { "vfrczps", { XM, EXxmm }, 0 },
  9473. { "vfrczps", { XM, EXymmq }, 0 },
  9474. },
  9475. /* VEX_LEN_0FXOP_09_81 */
  9476. {
  9477. { "vfrczpd", { XM, EXxmm }, 0 },
  9478. { "vfrczpd", { XM, EXymmq }, 0 },
  9479. },
  9480. };
  9481. static const struct dis386 vex_w_table[][2] = {
  9482. {
  9483. /* VEX_W_0F10_P_0 */
  9484. { "vmovups", { XM, EXx }, 0 },
  9485. },
  9486. {
  9487. /* VEX_W_0F10_P_1 */
  9488. { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
  9489. },
  9490. {
  9491. /* VEX_W_0F10_P_2 */
  9492. { "vmovupd", { XM, EXx }, 0 },
  9493. },
  9494. {
  9495. /* VEX_W_0F10_P_3 */
  9496. { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
  9497. },
  9498. {
  9499. /* VEX_W_0F11_P_0 */
  9500. { "vmovups", { EXxS, XM }, 0 },
  9501. },
  9502. {
  9503. /* VEX_W_0F11_P_1 */
  9504. { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
  9505. },
  9506. {
  9507. /* VEX_W_0F11_P_2 */
  9508. { "vmovupd", { EXxS, XM }, 0 },
  9509. },
  9510. {
  9511. /* VEX_W_0F11_P_3 */
  9512. { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
  9513. },
  9514. {
  9515. /* VEX_W_0F12_P_0_M_0 */
  9516. { "vmovlps", { XM, Vex128, EXq }, 0 },
  9517. },
  9518. {
  9519. /* VEX_W_0F12_P_0_M_1 */
  9520. { "vmovhlps", { XM, Vex128, EXq }, 0 },
  9521. },
  9522. {
  9523. /* VEX_W_0F12_P_1 */
  9524. { "vmovsldup", { XM, EXx }, 0 },
  9525. },
  9526. {
  9527. /* VEX_W_0F12_P_2 */
  9528. { "vmovlpd", { XM, Vex128, EXq }, 0 },
  9529. },
  9530. {
  9531. /* VEX_W_0F12_P_3 */
  9532. { "vmovddup", { XM, EXymmq }, 0 },
  9533. },
  9534. {
  9535. /* VEX_W_0F13_M_0 */
  9536. { "vmovlpX", { EXq, XM }, 0 },
  9537. },
  9538. {
  9539. /* VEX_W_0F14 */
  9540. { "vunpcklpX", { XM, Vex, EXx }, 0 },
  9541. },
  9542. {
  9543. /* VEX_W_0F15 */
  9544. { "vunpckhpX", { XM, Vex, EXx }, 0 },
  9545. },
  9546. {
  9547. /* VEX_W_0F16_P_0_M_0 */
  9548. { "vmovhps", { XM, Vex128, EXq }, 0 },
  9549. },
  9550. {
  9551. /* VEX_W_0F16_P_0_M_1 */
  9552. { "vmovlhps", { XM, Vex128, EXq }, 0 },
  9553. },
  9554. {
  9555. /* VEX_W_0F16_P_1 */
  9556. { "vmovshdup", { XM, EXx }, 0 },
  9557. },
  9558. {
  9559. /* VEX_W_0F16_P_2 */
  9560. { "vmovhpd", { XM, Vex128, EXq }, 0 },
  9561. },
  9562. {
  9563. /* VEX_W_0F17_M_0 */
  9564. { "vmovhpX", { EXq, XM }, 0 },
  9565. },
  9566. {
  9567. /* VEX_W_0F28 */
  9568. { "vmovapX", { XM, EXx }, 0 },
  9569. },
  9570. {
  9571. /* VEX_W_0F29 */
  9572. { "vmovapX", { EXxS, XM }, 0 },
  9573. },
  9574. {
  9575. /* VEX_W_0F2B_M_0 */
  9576. { "vmovntpX", { Mx, XM }, 0 },
  9577. },
  9578. {
  9579. /* VEX_W_0F2E_P_0 */
  9580. { "vucomiss", { XMScalar, EXdScalar }, 0 },
  9581. },
  9582. {
  9583. /* VEX_W_0F2E_P_2 */
  9584. { "vucomisd", { XMScalar, EXqScalar }, 0 },
  9585. },
  9586. {
  9587. /* VEX_W_0F2F_P_0 */
  9588. { "vcomiss", { XMScalar, EXdScalar }, 0 },
  9589. },
  9590. {
  9591. /* VEX_W_0F2F_P_2 */
  9592. { "vcomisd", { XMScalar, EXqScalar }, 0 },
  9593. },
  9594. {
  9595. /* VEX_W_0F41_P_0_LEN_1 */
  9596. { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
  9597. { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
  9598. },
  9599. {
  9600. /* VEX_W_0F41_P_2_LEN_1 */
  9601. { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
  9602. { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
  9603. },
  9604. {
  9605. /* VEX_W_0F42_P_0_LEN_1 */
  9606. { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
  9607. { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
  9608. },
  9609. {
  9610. /* VEX_W_0F42_P_2_LEN_1 */
  9611. { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
  9612. { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
  9613. },
  9614. {
  9615. /* VEX_W_0F44_P_0_LEN_0 */
  9616. { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
  9617. { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
  9618. },
  9619. {
  9620. /* VEX_W_0F44_P_2_LEN_0 */
  9621. { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
  9622. { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
  9623. },
  9624. {
  9625. /* VEX_W_0F45_P_0_LEN_1 */
  9626. { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
  9627. { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
  9628. },
  9629. {
  9630. /* VEX_W_0F45_P_2_LEN_1 */
  9631. { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
  9632. { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
  9633. },
  9634. {
  9635. /* VEX_W_0F46_P_0_LEN_1 */
  9636. { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
  9637. { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
  9638. },
  9639. {
  9640. /* VEX_W_0F46_P_2_LEN_1 */
  9641. { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
  9642. { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
  9643. },
  9644. {
  9645. /* VEX_W_0F47_P_0_LEN_1 */
  9646. { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
  9647. { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
  9648. },
  9649. {
  9650. /* VEX_W_0F47_P_2_LEN_1 */
  9651. { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
  9652. { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
  9653. },
  9654. {
  9655. /* VEX_W_0F4A_P_0_LEN_1 */
  9656. { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
  9657. { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
  9658. },
  9659. {
  9660. /* VEX_W_0F4A_P_2_LEN_1 */
  9661. { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
  9662. { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
  9663. },
  9664. {
  9665. /* VEX_W_0F4B_P_0_LEN_1 */
  9666. { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
  9667. { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
  9668. },
  9669. {
  9670. /* VEX_W_0F4B_P_2_LEN_1 */
  9671. { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
  9672. },
  9673. {
  9674. /* VEX_W_0F50_M_0 */
  9675. { "vmovmskpX", { Gdq, XS }, 0 },
  9676. },
  9677. {
  9678. /* VEX_W_0F51_P_0 */
  9679. { "vsqrtps", { XM, EXx }, 0 },
  9680. },
  9681. {
  9682. /* VEX_W_0F51_P_1 */
  9683. { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9684. },
  9685. {
  9686. /* VEX_W_0F51_P_2 */
  9687. { "vsqrtpd", { XM, EXx }, 0 },
  9688. },
  9689. {
  9690. /* VEX_W_0F51_P_3 */
  9691. { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9692. },
  9693. {
  9694. /* VEX_W_0F52_P_0 */
  9695. { "vrsqrtps", { XM, EXx }, 0 },
  9696. },
  9697. {
  9698. /* VEX_W_0F52_P_1 */
  9699. { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9700. },
  9701. {
  9702. /* VEX_W_0F53_P_0 */
  9703. { "vrcpps", { XM, EXx }, 0 },
  9704. },
  9705. {
  9706. /* VEX_W_0F53_P_1 */
  9707. { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9708. },
  9709. {
  9710. /* VEX_W_0F58_P_0 */
  9711. { "vaddps", { XM, Vex, EXx }, 0 },
  9712. },
  9713. {
  9714. /* VEX_W_0F58_P_1 */
  9715. { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9716. },
  9717. {
  9718. /* VEX_W_0F58_P_2 */
  9719. { "vaddpd", { XM, Vex, EXx }, 0 },
  9720. },
  9721. {
  9722. /* VEX_W_0F58_P_3 */
  9723. { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9724. },
  9725. {
  9726. /* VEX_W_0F59_P_0 */
  9727. { "vmulps", { XM, Vex, EXx }, 0 },
  9728. },
  9729. {
  9730. /* VEX_W_0F59_P_1 */
  9731. { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9732. },
  9733. {
  9734. /* VEX_W_0F59_P_2 */
  9735. { "vmulpd", { XM, Vex, EXx }, 0 },
  9736. },
  9737. {
  9738. /* VEX_W_0F59_P_3 */
  9739. { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9740. },
  9741. {
  9742. /* VEX_W_0F5A_P_0 */
  9743. { "vcvtps2pd", { XM, EXxmmq }, 0 },
  9744. },
  9745. {
  9746. /* VEX_W_0F5A_P_1 */
  9747. { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
  9748. },
  9749. {
  9750. /* VEX_W_0F5A_P_3 */
  9751. { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
  9752. },
  9753. {
  9754. /* VEX_W_0F5B_P_0 */
  9755. { "vcvtdq2ps", { XM, EXx }, 0 },
  9756. },
  9757. {
  9758. /* VEX_W_0F5B_P_1 */
  9759. { "vcvttps2dq", { XM, EXx }, 0 },
  9760. },
  9761. {
  9762. /* VEX_W_0F5B_P_2 */
  9763. { "vcvtps2dq", { XM, EXx }, 0 },
  9764. },
  9765. {
  9766. /* VEX_W_0F5C_P_0 */
  9767. { "vsubps", { XM, Vex, EXx }, 0 },
  9768. },
  9769. {
  9770. /* VEX_W_0F5C_P_1 */
  9771. { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9772. },
  9773. {
  9774. /* VEX_W_0F5C_P_2 */
  9775. { "vsubpd", { XM, Vex, EXx }, 0 },
  9776. },
  9777. {
  9778. /* VEX_W_0F5C_P_3 */
  9779. { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9780. },
  9781. {
  9782. /* VEX_W_0F5D_P_0 */
  9783. { "vminps", { XM, Vex, EXx }, 0 },
  9784. },
  9785. {
  9786. /* VEX_W_0F5D_P_1 */
  9787. { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9788. },
  9789. {
  9790. /* VEX_W_0F5D_P_2 */
  9791. { "vminpd", { XM, Vex, EXx }, 0 },
  9792. },
  9793. {
  9794. /* VEX_W_0F5D_P_3 */
  9795. { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9796. },
  9797. {
  9798. /* VEX_W_0F5E_P_0 */
  9799. { "vdivps", { XM, Vex, EXx }, 0 },
  9800. },
  9801. {
  9802. /* VEX_W_0F5E_P_1 */
  9803. { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9804. },
  9805. {
  9806. /* VEX_W_0F5E_P_2 */
  9807. { "vdivpd", { XM, Vex, EXx }, 0 },
  9808. },
  9809. {
  9810. /* VEX_W_0F5E_P_3 */
  9811. { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9812. },
  9813. {
  9814. /* VEX_W_0F5F_P_0 */
  9815. { "vmaxps", { XM, Vex, EXx }, 0 },
  9816. },
  9817. {
  9818. /* VEX_W_0F5F_P_1 */
  9819. { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
  9820. },
  9821. {
  9822. /* VEX_W_0F5F_P_2 */
  9823. { "vmaxpd", { XM, Vex, EXx }, 0 },
  9824. },
  9825. {
  9826. /* VEX_W_0F5F_P_3 */
  9827. { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
  9828. },
  9829. {
  9830. /* VEX_W_0F60_P_2 */
  9831. { "vpunpcklbw", { XM, Vex, EXx }, 0 },
  9832. },
  9833. {
  9834. /* VEX_W_0F61_P_2 */
  9835. { "vpunpcklwd", { XM, Vex, EXx }, 0 },
  9836. },
  9837. {
  9838. /* VEX_W_0F62_P_2 */
  9839. { "vpunpckldq", { XM, Vex, EXx }, 0 },
  9840. },
  9841. {
  9842. /* VEX_W_0F63_P_2 */
  9843. { "vpacksswb", { XM, Vex, EXx }, 0 },
  9844. },
  9845. {
  9846. /* VEX_W_0F64_P_2 */
  9847. { "vpcmpgtb", { XM, Vex, EXx }, 0 },
  9848. },
  9849. {
  9850. /* VEX_W_0F65_P_2 */
  9851. { "vpcmpgtw", { XM, Vex, EXx }, 0 },
  9852. },
  9853. {
  9854. /* VEX_W_0F66_P_2 */
  9855. { "vpcmpgtd", { XM, Vex, EXx }, 0 },
  9856. },
  9857. {
  9858. /* VEX_W_0F67_P_2 */
  9859. { "vpackuswb", { XM, Vex, EXx }, 0 },
  9860. },
  9861. {
  9862. /* VEX_W_0F68_P_2 */
  9863. { "vpunpckhbw", { XM, Vex, EXx }, 0 },
  9864. },
  9865. {
  9866. /* VEX_W_0F69_P_2 */
  9867. { "vpunpckhwd", { XM, Vex, EXx }, 0 },
  9868. },
  9869. {
  9870. /* VEX_W_0F6A_P_2 */
  9871. { "vpunpckhdq", { XM, Vex, EXx }, 0 },
  9872. },
  9873. {
  9874. /* VEX_W_0F6B_P_2 */
  9875. { "vpackssdw", { XM, Vex, EXx }, 0 },
  9876. },
  9877. {
  9878. /* VEX_W_0F6C_P_2 */
  9879. { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
  9880. },
  9881. {
  9882. /* VEX_W_0F6D_P_2 */
  9883. { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
  9884. },
  9885. {
  9886. /* VEX_W_0F6F_P_1 */
  9887. { "vmovdqu", { XM, EXx }, 0 },
  9888. },
  9889. {
  9890. /* VEX_W_0F6F_P_2 */
  9891. { "vmovdqa", { XM, EXx }, 0 },
  9892. },
  9893. {
  9894. /* VEX_W_0F70_P_1 */
  9895. { "vpshufhw", { XM, EXx, Ib }, 0 },
  9896. },
  9897. {
  9898. /* VEX_W_0F70_P_2 */
  9899. { "vpshufd", { XM, EXx, Ib }, 0 },
  9900. },
  9901. {
  9902. /* VEX_W_0F70_P_3 */
  9903. { "vpshuflw", { XM, EXx, Ib }, 0 },
  9904. },
  9905. {
  9906. /* VEX_W_0F71_R_2_P_2 */
  9907. { "vpsrlw", { Vex, XS, Ib }, 0 },
  9908. },
  9909. {
  9910. /* VEX_W_0F71_R_4_P_2 */
  9911. { "vpsraw", { Vex, XS, Ib }, 0 },
  9912. },
  9913. {
  9914. /* VEX_W_0F71_R_6_P_2 */
  9915. { "vpsllw", { Vex, XS, Ib }, 0 },
  9916. },
  9917. {
  9918. /* VEX_W_0F72_R_2_P_2 */
  9919. { "vpsrld", { Vex, XS, Ib }, 0 },
  9920. },
  9921. {
  9922. /* VEX_W_0F72_R_4_P_2 */
  9923. { "vpsrad", { Vex, XS, Ib }, 0 },
  9924. },
  9925. {
  9926. /* VEX_W_0F72_R_6_P_2 */
  9927. { "vpslld", { Vex, XS, Ib }, 0 },
  9928. },
  9929. {
  9930. /* VEX_W_0F73_R_2_P_2 */
  9931. { "vpsrlq", { Vex, XS, Ib }, 0 },
  9932. },
  9933. {
  9934. /* VEX_W_0F73_R_3_P_2 */
  9935. { "vpsrldq", { Vex, XS, Ib }, 0 },
  9936. },
  9937. {
  9938. /* VEX_W_0F73_R_6_P_2 */
  9939. { "vpsllq", { Vex, XS, Ib }, 0 },
  9940. },
  9941. {
  9942. /* VEX_W_0F73_R_7_P_2 */
  9943. { "vpslldq", { Vex, XS, Ib }, 0 },
  9944. },
  9945. {
  9946. /* VEX_W_0F74_P_2 */
  9947. { "vpcmpeqb", { XM, Vex, EXx }, 0 },
  9948. },
  9949. {
  9950. /* VEX_W_0F75_P_2 */
  9951. { "vpcmpeqw", { XM, Vex, EXx }, 0 },
  9952. },
  9953. {
  9954. /* VEX_W_0F76_P_2 */
  9955. { "vpcmpeqd", { XM, Vex, EXx }, 0 },
  9956. },
  9957. {
  9958. /* VEX_W_0F77_P_0 */
  9959. { "", { VZERO }, 0 },
  9960. },
  9961. {
  9962. /* VEX_W_0F7C_P_2 */
  9963. { "vhaddpd", { XM, Vex, EXx }, 0 },
  9964. },
  9965. {
  9966. /* VEX_W_0F7C_P_3 */
  9967. { "vhaddps", { XM, Vex, EXx }, 0 },
  9968. },
  9969. {
  9970. /* VEX_W_0F7D_P_2 */
  9971. { "vhsubpd", { XM, Vex, EXx }, 0 },
  9972. },
  9973. {
  9974. /* VEX_W_0F7D_P_3 */
  9975. { "vhsubps", { XM, Vex, EXx }, 0 },
  9976. },
  9977. {
  9978. /* VEX_W_0F7E_P_1 */
  9979. { "vmovq", { XMScalar, EXqScalar }, 0 },
  9980. },
  9981. {
  9982. /* VEX_W_0F7F_P_1 */
  9983. { "vmovdqu", { EXxS, XM }, 0 },
  9984. },
  9985. {
  9986. /* VEX_W_0F7F_P_2 */
  9987. { "vmovdqa", { EXxS, XM }, 0 },
  9988. },
  9989. {
  9990. /* VEX_W_0F90_P_0_LEN_0 */
  9991. { "kmovw", { MaskG, MaskE }, 0 },
  9992. { "kmovq", { MaskG, MaskE }, 0 },
  9993. },
  9994. {
  9995. /* VEX_W_0F90_P_2_LEN_0 */
  9996. { "kmovb", { MaskG, MaskBDE }, 0 },
  9997. { "kmovd", { MaskG, MaskBDE }, 0 },
  9998. },
  9999. {
  10000. /* VEX_W_0F91_P_0_LEN_0 */
  10001. { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
  10002. { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
  10003. },
  10004. {
  10005. /* VEX_W_0F91_P_2_LEN_0 */
  10006. { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
  10007. { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
  10008. },
  10009. {
  10010. /* VEX_W_0F92_P_0_LEN_0 */
  10011. { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
  10012. },
  10013. {
  10014. /* VEX_W_0F92_P_2_LEN_0 */
  10015. { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
  10016. },
  10017. {
  10018. /* VEX_W_0F92_P_3_LEN_0 */
  10019. { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
  10020. { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
  10021. },
  10022. {
  10023. /* VEX_W_0F93_P_0_LEN_0 */
  10024. { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
  10025. },
  10026. {
  10027. /* VEX_W_0F93_P_2_LEN_0 */
  10028. { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
  10029. },
  10030. {
  10031. /* VEX_W_0F93_P_3_LEN_0 */
  10032. { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
  10033. { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
  10034. },
  10035. {
  10036. /* VEX_W_0F98_P_0_LEN_0 */
  10037. { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
  10038. { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
  10039. },
  10040. {
  10041. /* VEX_W_0F98_P_2_LEN_0 */
  10042. { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
  10043. { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
  10044. },
  10045. {
  10046. /* VEX_W_0F99_P_0_LEN_0 */
  10047. { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
  10048. { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
  10049. },
  10050. {
  10051. /* VEX_W_0F99_P_2_LEN_0 */
  10052. { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
  10053. { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
  10054. },
  10055. {
  10056. /* VEX_W_0FAE_R_2_M_0 */
  10057. { "vldmxcsr", { Md }, 0 },
  10058. },
  10059. {
  10060. /* VEX_W_0FAE_R_3_M_0 */
  10061. { "vstmxcsr", { Md }, 0 },
  10062. },
  10063. {
  10064. /* VEX_W_0FC2_P_0 */
  10065. { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
  10066. },
  10067. {
  10068. /* VEX_W_0FC2_P_1 */
  10069. { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
  10070. },
  10071. {
  10072. /* VEX_W_0FC2_P_2 */
  10073. { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
  10074. },
  10075. {
  10076. /* VEX_W_0FC2_P_3 */
  10077. { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
  10078. },
  10079. {
  10080. /* VEX_W_0FC4_P_2 */
  10081. { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
  10082. },
  10083. {
  10084. /* VEX_W_0FC5_P_2 */
  10085. { "vpextrw", { Gdq, XS, Ib }, 0 },
  10086. },
  10087. {
  10088. /* VEX_W_0FD0_P_2 */
  10089. { "vaddsubpd", { XM, Vex, EXx }, 0 },
  10090. },
  10091. {
  10092. /* VEX_W_0FD0_P_3 */
  10093. { "vaddsubps", { XM, Vex, EXx }, 0 },
  10094. },
  10095. {
  10096. /* VEX_W_0FD1_P_2 */
  10097. { "vpsrlw", { XM, Vex, EXxmm }, 0 },
  10098. },
  10099. {
  10100. /* VEX_W_0FD2_P_2 */
  10101. { "vpsrld", { XM, Vex, EXxmm }, 0 },
  10102. },
  10103. {
  10104. /* VEX_W_0FD3_P_2 */
  10105. { "vpsrlq", { XM, Vex, EXxmm }, 0 },
  10106. },
  10107. {
  10108. /* VEX_W_0FD4_P_2 */
  10109. { "vpaddq", { XM, Vex, EXx }, 0 },
  10110. },
  10111. {
  10112. /* VEX_W_0FD5_P_2 */
  10113. { "vpmullw", { XM, Vex, EXx }, 0 },
  10114. },
  10115. {
  10116. /* VEX_W_0FD6_P_2 */
  10117. { "vmovq", { EXqScalarS, XMScalar }, 0 },
  10118. },
  10119. {
  10120. /* VEX_W_0FD7_P_2_M_1 */
  10121. { "vpmovmskb", { Gdq, XS }, 0 },
  10122. },
  10123. {
  10124. /* VEX_W_0FD8_P_2 */
  10125. { "vpsubusb", { XM, Vex, EXx }, 0 },
  10126. },
  10127. {
  10128. /* VEX_W_0FD9_P_2 */
  10129. { "vpsubusw", { XM, Vex, EXx }, 0 },
  10130. },
  10131. {
  10132. /* VEX_W_0FDA_P_2 */
  10133. { "vpminub", { XM, Vex, EXx }, 0 },
  10134. },
  10135. {
  10136. /* VEX_W_0FDB_P_2 */
  10137. { "vpand", { XM, Vex, EXx }, 0 },
  10138. },
  10139. {
  10140. /* VEX_W_0FDC_P_2 */
  10141. { "vpaddusb", { XM, Vex, EXx }, 0 },
  10142. },
  10143. {
  10144. /* VEX_W_0FDD_P_2 */
  10145. { "vpaddusw", { XM, Vex, EXx }, 0 },
  10146. },
  10147. {
  10148. /* VEX_W_0FDE_P_2 */
  10149. { "vpmaxub", { XM, Vex, EXx }, 0 },
  10150. },
  10151. {
  10152. /* VEX_W_0FDF_P_2 */
  10153. { "vpandn", { XM, Vex, EXx }, 0 },
  10154. },
  10155. {
  10156. /* VEX_W_0FE0_P_2 */
  10157. { "vpavgb", { XM, Vex, EXx }, 0 },
  10158. },
  10159. {
  10160. /* VEX_W_0FE1_P_2 */
  10161. { "vpsraw", { XM, Vex, EXxmm }, 0 },
  10162. },
  10163. {
  10164. /* VEX_W_0FE2_P_2 */
  10165. { "vpsrad", { XM, Vex, EXxmm }, 0 },
  10166. },
  10167. {
  10168. /* VEX_W_0FE3_P_2 */
  10169. { "vpavgw", { XM, Vex, EXx }, 0 },
  10170. },
  10171. {
  10172. /* VEX_W_0FE4_P_2 */
  10173. { "vpmulhuw", { XM, Vex, EXx }, 0 },
  10174. },
  10175. {
  10176. /* VEX_W_0FE5_P_2 */
  10177. { "vpmulhw", { XM, Vex, EXx }, 0 },
  10178. },
  10179. {
  10180. /* VEX_W_0FE6_P_1 */
  10181. { "vcvtdq2pd", { XM, EXxmmq }, 0 },
  10182. },
  10183. {
  10184. /* VEX_W_0FE6_P_2 */
  10185. { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
  10186. },
  10187. {
  10188. /* VEX_W_0FE6_P_3 */
  10189. { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
  10190. },
  10191. {
  10192. /* VEX_W_0FE7_P_2_M_0 */
  10193. { "vmovntdq", { Mx, XM }, 0 },
  10194. },
  10195. {
  10196. /* VEX_W_0FE8_P_2 */
  10197. { "vpsubsb", { XM, Vex, EXx }, 0 },
  10198. },
  10199. {
  10200. /* VEX_W_0FE9_P_2 */
  10201. { "vpsubsw", { XM, Vex, EXx }, 0 },
  10202. },
  10203. {
  10204. /* VEX_W_0FEA_P_2 */
  10205. { "vpminsw", { XM, Vex, EXx }, 0 },
  10206. },
  10207. {
  10208. /* VEX_W_0FEB_P_2 */
  10209. { "vpor", { XM, Vex, EXx }, 0 },
  10210. },
  10211. {
  10212. /* VEX_W_0FEC_P_2 */
  10213. { "vpaddsb", { XM, Vex, EXx }, 0 },
  10214. },
  10215. {
  10216. /* VEX_W_0FED_P_2 */
  10217. { "vpaddsw", { XM, Vex, EXx }, 0 },
  10218. },
  10219. {
  10220. /* VEX_W_0FEE_P_2 */
  10221. { "vpmaxsw", { XM, Vex, EXx }, 0 },
  10222. },
  10223. {
  10224. /* VEX_W_0FEF_P_2 */
  10225. { "vpxor", { XM, Vex, EXx }, 0 },
  10226. },
  10227. {
  10228. /* VEX_W_0FF0_P_3_M_0 */
  10229. { "vlddqu", { XM, M }, 0 },
  10230. },
  10231. {
  10232. /* VEX_W_0FF1_P_2 */
  10233. { "vpsllw", { XM, Vex, EXxmm }, 0 },
  10234. },
  10235. {
  10236. /* VEX_W_0FF2_P_2 */
  10237. { "vpslld", { XM, Vex, EXxmm }, 0 },
  10238. },
  10239. {
  10240. /* VEX_W_0FF3_P_2 */
  10241. { "vpsllq", { XM, Vex, EXxmm }, 0 },
  10242. },
  10243. {
  10244. /* VEX_W_0FF4_P_2 */
  10245. { "vpmuludq", { XM, Vex, EXx }, 0 },
  10246. },
  10247. {
  10248. /* VEX_W_0FF5_P_2 */
  10249. { "vpmaddwd", { XM, Vex, EXx }, 0 },
  10250. },
  10251. {
  10252. /* VEX_W_0FF6_P_2 */
  10253. { "vpsadbw", { XM, Vex, EXx }, 0 },
  10254. },
  10255. {
  10256. /* VEX_W_0FF7_P_2 */
  10257. { "vmaskmovdqu", { XM, XS }, 0 },
  10258. },
  10259. {
  10260. /* VEX_W_0FF8_P_2 */
  10261. { "vpsubb", { XM, Vex, EXx }, 0 },
  10262. },
  10263. {
  10264. /* VEX_W_0FF9_P_2 */
  10265. { "vpsubw", { XM, Vex, EXx }, 0 },
  10266. },
  10267. {
  10268. /* VEX_W_0FFA_P_2 */
  10269. { "vpsubd", { XM, Vex, EXx }, 0 },
  10270. },
  10271. {
  10272. /* VEX_W_0FFB_P_2 */
  10273. { "vpsubq", { XM, Vex, EXx }, 0 },
  10274. },
  10275. {
  10276. /* VEX_W_0FFC_P_2 */
  10277. { "vpaddb", { XM, Vex, EXx }, 0 },
  10278. },
  10279. {
  10280. /* VEX_W_0FFD_P_2 */
  10281. { "vpaddw", { XM, Vex, EXx }, 0 },
  10282. },
  10283. {
  10284. /* VEX_W_0FFE_P_2 */
  10285. { "vpaddd", { XM, Vex, EXx }, 0 },
  10286. },
  10287. {
  10288. /* VEX_W_0F3800_P_2 */
  10289. { "vpshufb", { XM, Vex, EXx }, 0 },
  10290. },
  10291. {
  10292. /* VEX_W_0F3801_P_2 */
  10293. { "vphaddw", { XM, Vex, EXx }, 0 },
  10294. },
  10295. {
  10296. /* VEX_W_0F3802_P_2 */
  10297. { "vphaddd", { XM, Vex, EXx }, 0 },
  10298. },
  10299. {
  10300. /* VEX_W_0F3803_P_2 */
  10301. { "vphaddsw", { XM, Vex, EXx }, 0 },
  10302. },
  10303. {
  10304. /* VEX_W_0F3804_P_2 */
  10305. { "vpmaddubsw", { XM, Vex, EXx }, 0 },
  10306. },
  10307. {
  10308. /* VEX_W_0F3805_P_2 */
  10309. { "vphsubw", { XM, Vex, EXx }, 0 },
  10310. },
  10311. {
  10312. /* VEX_W_0F3806_P_2 */
  10313. { "vphsubd", { XM, Vex, EXx }, 0 },
  10314. },
  10315. {
  10316. /* VEX_W_0F3807_P_2 */
  10317. { "vphsubsw", { XM, Vex, EXx }, 0 },
  10318. },
  10319. {
  10320. /* VEX_W_0F3808_P_2 */
  10321. { "vpsignb", { XM, Vex, EXx }, 0 },
  10322. },
  10323. {
  10324. /* VEX_W_0F3809_P_2 */
  10325. { "vpsignw", { XM, Vex, EXx }, 0 },
  10326. },
  10327. {
  10328. /* VEX_W_0F380A_P_2 */
  10329. { "vpsignd", { XM, Vex, EXx }, 0 },
  10330. },
  10331. {
  10332. /* VEX_W_0F380B_P_2 */
  10333. { "vpmulhrsw", { XM, Vex, EXx }, 0 },
  10334. },
  10335. {
  10336. /* VEX_W_0F380C_P_2 */
  10337. { "vpermilps", { XM, Vex, EXx }, 0 },
  10338. },
  10339. {
  10340. /* VEX_W_0F380D_P_2 */
  10341. { "vpermilpd", { XM, Vex, EXx }, 0 },
  10342. },
  10343. {
  10344. /* VEX_W_0F380E_P_2 */
  10345. { "vtestps", { XM, EXx }, 0 },
  10346. },
  10347. {
  10348. /* VEX_W_0F380F_P_2 */
  10349. { "vtestpd", { XM, EXx }, 0 },
  10350. },
  10351. {
  10352. /* VEX_W_0F3816_P_2 */
  10353. { "vpermps", { XM, Vex, EXx }, 0 },
  10354. },
  10355. {
  10356. /* VEX_W_0F3817_P_2 */
  10357. { "vptest", { XM, EXx }, 0 },
  10358. },
  10359. {
  10360. /* VEX_W_0F3818_P_2 */
  10361. { "vbroadcastss", { XM, EXxmm_md }, 0 },
  10362. },
  10363. {
  10364. /* VEX_W_0F3819_P_2 */
  10365. { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
  10366. },
  10367. {
  10368. /* VEX_W_0F381A_P_2_M_0 */
  10369. { "vbroadcastf128", { XM, Mxmm }, 0 },
  10370. },
  10371. {
  10372. /* VEX_W_0F381C_P_2 */
  10373. { "vpabsb", { XM, EXx }, 0 },
  10374. },
  10375. {
  10376. /* VEX_W_0F381D_P_2 */
  10377. { "vpabsw", { XM, EXx }, 0 },
  10378. },
  10379. {
  10380. /* VEX_W_0F381E_P_2 */
  10381. { "vpabsd", { XM, EXx }, 0 },
  10382. },
  10383. {
  10384. /* VEX_W_0F3820_P_2 */
  10385. { "vpmovsxbw", { XM, EXxmmq }, 0 },
  10386. },
  10387. {
  10388. /* VEX_W_0F3821_P_2 */
  10389. { "vpmovsxbd", { XM, EXxmmqd }, 0 },
  10390. },
  10391. {
  10392. /* VEX_W_0F3822_P_2 */
  10393. { "vpmovsxbq", { XM, EXxmmdw }, 0 },
  10394. },
  10395. {
  10396. /* VEX_W_0F3823_P_2 */
  10397. { "vpmovsxwd", { XM, EXxmmq }, 0 },
  10398. },
  10399. {
  10400. /* VEX_W_0F3824_P_2 */
  10401. { "vpmovsxwq", { XM, EXxmmqd }, 0 },
  10402. },
  10403. {
  10404. /* VEX_W_0F3825_P_2 */
  10405. { "vpmovsxdq", { XM, EXxmmq }, 0 },
  10406. },
  10407. {
  10408. /* VEX_W_0F3828_P_2 */
  10409. { "vpmuldq", { XM, Vex, EXx }, 0 },
  10410. },
  10411. {
  10412. /* VEX_W_0F3829_P_2 */
  10413. { "vpcmpeqq", { XM, Vex, EXx }, 0 },
  10414. },
  10415. {
  10416. /* VEX_W_0F382A_P_2_M_0 */
  10417. { "vmovntdqa", { XM, Mx }, 0 },
  10418. },
  10419. {
  10420. /* VEX_W_0F382B_P_2 */
  10421. { "vpackusdw", { XM, Vex, EXx }, 0 },
  10422. },
  10423. {
  10424. /* VEX_W_0F382C_P_2_M_0 */
  10425. { "vmaskmovps", { XM, Vex, Mx }, 0 },
  10426. },
  10427. {
  10428. /* VEX_W_0F382D_P_2_M_0 */
  10429. { "vmaskmovpd", { XM, Vex, Mx }, 0 },
  10430. },
  10431. {
  10432. /* VEX_W_0F382E_P_2_M_0 */
  10433. { "vmaskmovps", { Mx, Vex, XM }, 0 },
  10434. },
  10435. {
  10436. /* VEX_W_0F382F_P_2_M_0 */
  10437. { "vmaskmovpd", { Mx, Vex, XM }, 0 },
  10438. },
  10439. {
  10440. /* VEX_W_0F3830_P_2 */
  10441. { "vpmovzxbw", { XM, EXxmmq }, 0 },
  10442. },
  10443. {
  10444. /* VEX_W_0F3831_P_2 */
  10445. { "vpmovzxbd", { XM, EXxmmqd }, 0 },
  10446. },
  10447. {
  10448. /* VEX_W_0F3832_P_2 */
  10449. { "vpmovzxbq", { XM, EXxmmdw }, 0 },
  10450. },
  10451. {
  10452. /* VEX_W_0F3833_P_2 */
  10453. { "vpmovzxwd", { XM, EXxmmq }, 0 },
  10454. },
  10455. {
  10456. /* VEX_W_0F3834_P_2 */
  10457. { "vpmovzxwq", { XM, EXxmmqd }, 0 },
  10458. },
  10459. {
  10460. /* VEX_W_0F3835_P_2 */
  10461. { "vpmovzxdq", { XM, EXxmmq }, 0 },
  10462. },
  10463. {
  10464. /* VEX_W_0F3836_P_2 */
  10465. { "vpermd", { XM, Vex, EXx }, 0 },
  10466. },
  10467. {
  10468. /* VEX_W_0F3837_P_2 */
  10469. { "vpcmpgtq", { XM, Vex, EXx }, 0 },
  10470. },
  10471. {
  10472. /* VEX_W_0F3838_P_2 */
  10473. { "vpminsb", { XM, Vex, EXx }, 0 },
  10474. },
  10475. {
  10476. /* VEX_W_0F3839_P_2 */
  10477. { "vpminsd", { XM, Vex, EXx }, 0 },
  10478. },
  10479. {
  10480. /* VEX_W_0F383A_P_2 */
  10481. { "vpminuw", { XM, Vex, EXx }, 0 },
  10482. },
  10483. {
  10484. /* VEX_W_0F383B_P_2 */
  10485. { "vpminud", { XM, Vex, EXx }, 0 },
  10486. },
  10487. {
  10488. /* VEX_W_0F383C_P_2 */
  10489. { "vpmaxsb", { XM, Vex, EXx }, 0 },
  10490. },
  10491. {
  10492. /* VEX_W_0F383D_P_2 */
  10493. { "vpmaxsd", { XM, Vex, EXx }, 0 },
  10494. },
  10495. {
  10496. /* VEX_W_0F383E_P_2 */
  10497. { "vpmaxuw", { XM, Vex, EXx }, 0 },
  10498. },
  10499. {
  10500. /* VEX_W_0F383F_P_2 */
  10501. { "vpmaxud", { XM, Vex, EXx }, 0 },
  10502. },
  10503. {
  10504. /* VEX_W_0F3840_P_2 */
  10505. { "vpmulld", { XM, Vex, EXx }, 0 },
  10506. },
  10507. {
  10508. /* VEX_W_0F3841_P_2 */
  10509. { "vphminposuw", { XM, EXx }, 0 },
  10510. },
  10511. {
  10512. /* VEX_W_0F3846_P_2 */
  10513. { "vpsravd", { XM, Vex, EXx }, 0 },
  10514. },
  10515. {
  10516. /* VEX_W_0F3858_P_2 */
  10517. { "vpbroadcastd", { XM, EXxmm_md }, 0 },
  10518. },
  10519. {
  10520. /* VEX_W_0F3859_P_2 */
  10521. { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
  10522. },
  10523. {
  10524. /* VEX_W_0F385A_P_2_M_0 */
  10525. { "vbroadcasti128", { XM, Mxmm }, 0 },
  10526. },
  10527. {
  10528. /* VEX_W_0F3878_P_2 */
  10529. { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
  10530. },
  10531. {
  10532. /* VEX_W_0F3879_P_2 */
  10533. { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
  10534. },
  10535. {
  10536. /* VEX_W_0F38DB_P_2 */
  10537. { "vaesimc", { XM, EXx }, 0 },
  10538. },
  10539. {
  10540. /* VEX_W_0F38DC_P_2 */
  10541. { "vaesenc", { XM, Vex128, EXx }, 0 },
  10542. },
  10543. {
  10544. /* VEX_W_0F38DD_P_2 */
  10545. { "vaesenclast", { XM, Vex128, EXx }, 0 },
  10546. },
  10547. {
  10548. /* VEX_W_0F38DE_P_2 */
  10549. { "vaesdec", { XM, Vex128, EXx }, 0 },
  10550. },
  10551. {
  10552. /* VEX_W_0F38DF_P_2 */
  10553. { "vaesdeclast", { XM, Vex128, EXx }, 0 },
  10554. },
  10555. {
  10556. /* VEX_W_0F3A00_P_2 */
  10557. { Bad_Opcode },
  10558. { "vpermq", { XM, EXx, Ib }, 0 },
  10559. },
  10560. {
  10561. /* VEX_W_0F3A01_P_2 */
  10562. { Bad_Opcode },
  10563. { "vpermpd", { XM, EXx, Ib }, 0 },
  10564. },
  10565. {
  10566. /* VEX_W_0F3A02_P_2 */
  10567. { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
  10568. },
  10569. {
  10570. /* VEX_W_0F3A04_P_2 */
  10571. { "vpermilps", { XM, EXx, Ib }, 0 },
  10572. },
  10573. {
  10574. /* VEX_W_0F3A05_P_2 */
  10575. { "vpermilpd", { XM, EXx, Ib }, 0 },
  10576. },
  10577. {
  10578. /* VEX_W_0F3A06_P_2 */
  10579. { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
  10580. },
  10581. {
  10582. /* VEX_W_0F3A08_P_2 */
  10583. { "vroundps", { XM, EXx, Ib }, 0 },
  10584. },
  10585. {
  10586. /* VEX_W_0F3A09_P_2 */
  10587. { "vroundpd", { XM, EXx, Ib }, 0 },
  10588. },
  10589. {
  10590. /* VEX_W_0F3A0A_P_2 */
  10591. { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
  10592. },
  10593. {
  10594. /* VEX_W_0F3A0B_P_2 */
  10595. { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
  10596. },
  10597. {
  10598. /* VEX_W_0F3A0C_P_2 */
  10599. { "vblendps", { XM, Vex, EXx, Ib }, 0 },
  10600. },
  10601. {
  10602. /* VEX_W_0F3A0D_P_2 */
  10603. { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
  10604. },
  10605. {
  10606. /* VEX_W_0F3A0E_P_2 */
  10607. { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
  10608. },
  10609. {
  10610. /* VEX_W_0F3A0F_P_2 */
  10611. { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
  10612. },
  10613. {
  10614. /* VEX_W_0F3A14_P_2 */
  10615. { "vpextrb", { Edqb, XM, Ib }, 0 },
  10616. },
  10617. {
  10618. /* VEX_W_0F3A15_P_2 */
  10619. { "vpextrw", { Edqw, XM, Ib }, 0 },
  10620. },
  10621. {
  10622. /* VEX_W_0F3A18_P_2 */
  10623. { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
  10624. },
  10625. {
  10626. /* VEX_W_0F3A19_P_2 */
  10627. { "vextractf128", { EXxmm, XM, Ib }, 0 },
  10628. },
  10629. {
  10630. /* VEX_W_0F3A20_P_2 */
  10631. { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
  10632. },
  10633. {
  10634. /* VEX_W_0F3A21_P_2 */
  10635. { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
  10636. },
  10637. {
  10638. /* VEX_W_0F3A30_P_2_LEN_0 */
  10639. { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
  10640. { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
  10641. },
  10642. {
  10643. /* VEX_W_0F3A31_P_2_LEN_0 */
  10644. { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
  10645. { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
  10646. },
  10647. {
  10648. /* VEX_W_0F3A32_P_2_LEN_0 */
  10649. { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
  10650. { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
  10651. },
  10652. {
  10653. /* VEX_W_0F3A33_P_2_LEN_0 */
  10654. { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
  10655. { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
  10656. },
  10657. {
  10658. /* VEX_W_0F3A38_P_2 */
  10659. { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
  10660. },
  10661. {
  10662. /* VEX_W_0F3A39_P_2 */
  10663. { "vextracti128", { EXxmm, XM, Ib }, 0 },
  10664. },
  10665. {
  10666. /* VEX_W_0F3A40_P_2 */
  10667. { "vdpps", { XM, Vex, EXx, Ib }, 0 },
  10668. },
  10669. {
  10670. /* VEX_W_0F3A41_P_2 */
  10671. { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
  10672. },
  10673. {
  10674. /* VEX_W_0F3A42_P_2 */
  10675. { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
  10676. },
  10677. {
  10678. /* VEX_W_0F3A44_P_2 */
  10679. { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
  10680. },
  10681. {
  10682. /* VEX_W_0F3A46_P_2 */
  10683. { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
  10684. },
  10685. {
  10686. /* VEX_W_0F3A48_P_2 */
  10687. { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
  10688. { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
  10689. },
  10690. {
  10691. /* VEX_W_0F3A49_P_2 */
  10692. { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
  10693. { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
  10694. },
  10695. {
  10696. /* VEX_W_0F3A4A_P_2 */
  10697. { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
  10698. },
  10699. {
  10700. /* VEX_W_0F3A4B_P_2 */
  10701. { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
  10702. },
  10703. {
  10704. /* VEX_W_0F3A4C_P_2 */
  10705. { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
  10706. },
  10707. {
  10708. /* VEX_W_0F3A62_P_2 */
  10709. { "vpcmpistrm", { XM, EXx, Ib }, 0 },
  10710. },
  10711. {
  10712. /* VEX_W_0F3A63_P_2 */
  10713. { "vpcmpistri", { XM, EXx, Ib }, 0 },
  10714. },
  10715. {
  10716. /* VEX_W_0F3ADF_P_2 */
  10717. { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
  10718. },
  10719. #define NEED_VEX_W_TABLE
  10720. #include "i386-dis-evex.h"
  10721. #undef NEED_VEX_W_TABLE
  10722. };
  10723. static const struct dis386 mod_table[][2] = {
  10724. {
  10725. /* MOD_8D */
  10726. { "leaS", { Gv, M }, 0 },
  10727. },
  10728. {
  10729. /* MOD_C6_REG_7 */
  10730. { Bad_Opcode },
  10731. { RM_TABLE (RM_C6_REG_7) },
  10732. },
  10733. {
  10734. /* MOD_C7_REG_7 */
  10735. { Bad_Opcode },
  10736. { RM_TABLE (RM_C7_REG_7) },
  10737. },
  10738. {
  10739. /* MOD_FF_REG_3 */
  10740. { "Jcall^", { indirEp }, 0 },
  10741. },
  10742. {
  10743. /* MOD_FF_REG_5 */
  10744. { "Jjmp^", { indirEp }, 0 },
  10745. },
  10746. {
  10747. /* MOD_0F01_REG_0 */
  10748. { X86_64_TABLE (X86_64_0F01_REG_0) },
  10749. { RM_TABLE (RM_0F01_REG_0) },
  10750. },
  10751. {
  10752. /* MOD_0F01_REG_1 */
  10753. { X86_64_TABLE (X86_64_0F01_REG_1) },
  10754. { RM_TABLE (RM_0F01_REG_1) },
  10755. },
  10756. {
  10757. /* MOD_0F01_REG_2 */
  10758. { X86_64_TABLE (X86_64_0F01_REG_2) },
  10759. { RM_TABLE (RM_0F01_REG_2) },
  10760. },
  10761. {
  10762. /* MOD_0F01_REG_3 */
  10763. { X86_64_TABLE (X86_64_0F01_REG_3) },
  10764. { RM_TABLE (RM_0F01_REG_3) },
  10765. },
  10766. {
  10767. /* MOD_0F01_REG_5 */
  10768. { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
  10769. { RM_TABLE (RM_0F01_REG_5) },
  10770. },
  10771. {
  10772. /* MOD_0F01_REG_7 */
  10773. { "invlpg", { Mb }, 0 },
  10774. { RM_TABLE (RM_0F01_REG_7) },
  10775. },
  10776. {
  10777. /* MOD_0F12_PREFIX_0 */
  10778. { "movlps", { XM, EXq }, PREFIX_OPCODE },
  10779. { "movhlps", { XM, EXq }, PREFIX_OPCODE },
  10780. },
  10781. {
  10782. /* MOD_0F13 */
  10783. { "movlpX", { EXq, XM }, PREFIX_OPCODE },
  10784. },
  10785. {
  10786. /* MOD_0F16_PREFIX_0 */
  10787. { "movhps", { XM, EXq }, 0 },
  10788. { "movlhps", { XM, EXq }, 0 },
  10789. },
  10790. {
  10791. /* MOD_0F17 */
  10792. { "movhpX", { EXq, XM }, PREFIX_OPCODE },
  10793. },
  10794. {
  10795. /* MOD_0F18_REG_0 */
  10796. { "prefetchnta", { Mb }, 0 },
  10797. },
  10798. {
  10799. /* MOD_0F18_REG_1 */
  10800. { "prefetcht0", { Mb }, 0 },
  10801. },
  10802. {
  10803. /* MOD_0F18_REG_2 */
  10804. { "prefetcht1", { Mb }, 0 },
  10805. },
  10806. {
  10807. /* MOD_0F18_REG_3 */
  10808. { "prefetcht2", { Mb }, 0 },
  10809. },
  10810. {
  10811. /* MOD_0F18_REG_4 */
  10812. { "nop/reserved", { Mb }, 0 },
  10813. },
  10814. {
  10815. /* MOD_0F18_REG_5 */
  10816. { "nop/reserved", { Mb }, 0 },
  10817. },
  10818. {
  10819. /* MOD_0F18_REG_6 */
  10820. { "nop/reserved", { Mb }, 0 },
  10821. },
  10822. {
  10823. /* MOD_0F18_REG_7 */
  10824. { "nop/reserved", { Mb }, 0 },
  10825. },
  10826. {
  10827. /* MOD_0F1A_PREFIX_0 */
  10828. { "bndldx", { Gbnd, Ev_bnd }, 0 },
  10829. { "nopQ", { Ev }, 0 },
  10830. },
  10831. {
  10832. /* MOD_0F1B_PREFIX_0 */
  10833. { "bndstx", { Ev_bnd, Gbnd }, 0 },
  10834. { "nopQ", { Ev }, 0 },
  10835. },
  10836. {
  10837. /* MOD_0F1B_PREFIX_1 */
  10838. { "bndmk", { Gbnd, Ev_bnd }, 0 },
  10839. { "nopQ", { Ev }, 0 },
  10840. },
  10841. {
  10842. /* MOD_0F1E_PREFIX_1 */
  10843. { "nopQ", { Ev }, 0 },
  10844. { REG_TABLE (REG_0F1E_MOD_3) },
  10845. },
  10846. {
  10847. /* MOD_0F24 */
  10848. { Bad_Opcode },
  10849. { "movL", { Rd, Td }, 0 },
  10850. },
  10851. {
  10852. /* MOD_0F26 */
  10853. { Bad_Opcode },
  10854. { "movL", { Td, Rd }, 0 },
  10855. },
  10856. {
  10857. /* MOD_0F2B_PREFIX_0 */
  10858. {"movntps", { Mx, XM }, PREFIX_OPCODE },
  10859. },
  10860. {
  10861. /* MOD_0F2B_PREFIX_1 */
  10862. {"movntss", { Md, XM }, PREFIX_OPCODE },
  10863. },
  10864. {
  10865. /* MOD_0F2B_PREFIX_2 */
  10866. {"movntpd", { Mx, XM }, PREFIX_OPCODE },
  10867. },
  10868. {
  10869. /* MOD_0F2B_PREFIX_3 */
  10870. {"movntsd", { Mq, XM }, PREFIX_OPCODE },
  10871. },
  10872. {
  10873. /* MOD_0F51 */
  10874. { Bad_Opcode },
  10875. { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
  10876. },
  10877. {
  10878. /* MOD_0F71_REG_2 */
  10879. { Bad_Opcode },
  10880. { "psrlw", { MS, Ib }, 0 },
  10881. },
  10882. {
  10883. /* MOD_0F71_REG_4 */
  10884. { Bad_Opcode },
  10885. { "psraw", { MS, Ib }, 0 },
  10886. },
  10887. {
  10888. /* MOD_0F71_REG_6 */
  10889. { Bad_Opcode },
  10890. { "psllw", { MS, Ib }, 0 },
  10891. },
  10892. {
  10893. /* MOD_0F72_REG_2 */
  10894. { Bad_Opcode },
  10895. { "psrld", { MS, Ib }, 0 },
  10896. },
  10897. {
  10898. /* MOD_0F72_REG_4 */
  10899. { Bad_Opcode },
  10900. { "psrad", { MS, Ib }, 0 },
  10901. },
  10902. {
  10903. /* MOD_0F72_REG_6 */
  10904. { Bad_Opcode },
  10905. { "pslld", { MS, Ib }, 0 },
  10906. },
  10907. {
  10908. /* MOD_0F73_REG_2 */
  10909. { Bad_Opcode },
  10910. { "psrlq", { MS, Ib }, 0 },
  10911. },
  10912. {
  10913. /* MOD_0F73_REG_3 */
  10914. { Bad_Opcode },
  10915. { PREFIX_TABLE (PREFIX_0F73_REG_3) },
  10916. },
  10917. {
  10918. /* MOD_0F73_REG_6 */
  10919. { Bad_Opcode },
  10920. { "psllq", { MS, Ib }, 0 },
  10921. },
  10922. {
  10923. /* MOD_0F73_REG_7 */
  10924. { Bad_Opcode },
  10925. { PREFIX_TABLE (PREFIX_0F73_REG_7) },
  10926. },
  10927. {
  10928. /* MOD_0FAE_REG_0 */
  10929. { "fxsave", { FXSAVE }, 0 },
  10930. { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
  10931. },
  10932. {
  10933. /* MOD_0FAE_REG_1 */
  10934. { "fxrstor", { FXSAVE }, 0 },
  10935. { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
  10936. },
  10937. {
  10938. /* MOD_0FAE_REG_2 */
  10939. { "ldmxcsr", { Md }, 0 },
  10940. { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
  10941. },
  10942. {
  10943. /* MOD_0FAE_REG_3 */
  10944. { "stmxcsr", { Md }, 0 },
  10945. { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
  10946. },
  10947. {
  10948. /* MOD_0FAE_REG_4 */
  10949. { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
  10950. { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
  10951. },
  10952. {
  10953. /* MOD_0FAE_REG_5 */
  10954. { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
  10955. { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
  10956. },
  10957. {
  10958. /* MOD_0FAE_REG_6 */
  10959. { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
  10960. { RM_TABLE (RM_0FAE_REG_6) },
  10961. },
  10962. {
  10963. /* MOD_0FAE_REG_7 */
  10964. { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
  10965. { RM_TABLE (RM_0FAE_REG_7) },
  10966. },
  10967. {
  10968. /* MOD_0FB2 */
  10969. { "lssS", { Gv, Mp }, 0 },
  10970. },
  10971. {
  10972. /* MOD_0FB4 */
  10973. { "lfsS", { Gv, Mp }, 0 },
  10974. },
  10975. {
  10976. /* MOD_0FB5 */
  10977. { "lgsS", { Gv, Mp }, 0 },
  10978. },
  10979. {
  10980. /* MOD_0FC3 */
  10981. { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
  10982. },
  10983. {
  10984. /* MOD_0FC7_REG_3 */
  10985. { "xrstors", { FXSAVE }, 0 },
  10986. },
  10987. {
  10988. /* MOD_0FC7_REG_4 */
  10989. { "xsavec", { FXSAVE }, 0 },
  10990. },
  10991. {
  10992. /* MOD_0FC7_REG_5 */
  10993. { "xsaves", { FXSAVE }, 0 },
  10994. },
  10995. {
  10996. /* MOD_0FC7_REG_6 */
  10997. { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
  10998. { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
  10999. },
  11000. {
  11001. /* MOD_0FC7_REG_7 */
  11002. { "vmptrst", { Mq }, 0 },
  11003. { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
  11004. },
  11005. {
  11006. /* MOD_0FD7 */
  11007. { Bad_Opcode },
  11008. { "pmovmskb", { Gdq, MS }, 0 },
  11009. },
  11010. {
  11011. /* MOD_0FE7_PREFIX_2 */
  11012. { "movntdq", { Mx, XM }, 0 },
  11013. },
  11014. {
  11015. /* MOD_0FF0_PREFIX_3 */
  11016. { "lddqu", { XM, M }, 0 },
  11017. },
  11018. {
  11019. /* MOD_0F382A_PREFIX_2 */
  11020. { "movntdqa", { XM, Mx }, 0 },
  11021. },
  11022. {
  11023. /* MOD_0F38F5_PREFIX_2 */
  11024. { "wrussK", { M, Gdq }, PREFIX_OPCODE },
  11025. },
  11026. {
  11027. /* MOD_0F38F6_PREFIX_0 */
  11028. { "wrssK", { M, Gdq }, PREFIX_OPCODE },
  11029. },
  11030. {
  11031. /* MOD_62_32BIT */
  11032. { "bound{S|}", { Gv, Ma }, 0 },
  11033. { EVEX_TABLE (EVEX_0F) },
  11034. },
  11035. {
  11036. /* MOD_C4_32BIT */
  11037. { "lesS", { Gv, Mp }, 0 },
  11038. { VEX_C4_TABLE (VEX_0F) },
  11039. },
  11040. {
  11041. /* MOD_C5_32BIT */
  11042. { "ldsS", { Gv, Mp }, 0 },
  11043. { VEX_C5_TABLE (VEX_0F) },
  11044. },
  11045. {
  11046. /* MOD_VEX_0F12_PREFIX_0 */
  11047. { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
  11048. { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
  11049. },
  11050. {
  11051. /* MOD_VEX_0F13 */
  11052. { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
  11053. },
  11054. {
  11055. /* MOD_VEX_0F16_PREFIX_0 */
  11056. { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
  11057. { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
  11058. },
  11059. {
  11060. /* MOD_VEX_0F17 */
  11061. { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
  11062. },
  11063. {
  11064. /* MOD_VEX_0F2B */
  11065. { VEX_W_TABLE (VEX_W_0F2B_M_0) },
  11066. },
  11067. {
  11068. /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
  11069. { Bad_Opcode },
  11070. { "kandw", { MaskG, MaskVex, MaskR }, 0 },
  11071. },
  11072. {
  11073. /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
  11074. { Bad_Opcode },
  11075. { "kandq", { MaskG, MaskVex, MaskR }, 0 },
  11076. },
  11077. {
  11078. /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
  11079. { Bad_Opcode },
  11080. { "kandb", { MaskG, MaskVex, MaskR }, 0 },
  11081. },
  11082. {
  11083. /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
  11084. { Bad_Opcode },
  11085. { "kandd", { MaskG, MaskVex, MaskR }, 0 },
  11086. },
  11087. {
  11088. /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
  11089. { Bad_Opcode },
  11090. { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
  11091. },
  11092. {
  11093. /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
  11094. { Bad_Opcode },
  11095. { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
  11096. },
  11097. {
  11098. /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
  11099. { Bad_Opcode },
  11100. { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
  11101. },
  11102. {
  11103. /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
  11104. { Bad_Opcode },
  11105. { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
  11106. },
  11107. {
  11108. /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
  11109. { Bad_Opcode },
  11110. { "knotw", { MaskG, MaskR }, 0 },
  11111. },
  11112. {
  11113. /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
  11114. { Bad_Opcode },
  11115. { "knotq", { MaskG, MaskR }, 0 },
  11116. },
  11117. {
  11118. /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
  11119. { Bad_Opcode },
  11120. { "knotb", { MaskG, MaskR }, 0 },
  11121. },
  11122. {
  11123. /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
  11124. { Bad_Opcode },
  11125. { "knotd", { MaskG, MaskR }, 0 },
  11126. },
  11127. {
  11128. /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
  11129. { Bad_Opcode },
  11130. { "korw", { MaskG, MaskVex, MaskR }, 0 },
  11131. },
  11132. {
  11133. /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
  11134. { Bad_Opcode },
  11135. { "korq", { MaskG, MaskVex, MaskR }, 0 },
  11136. },
  11137. {
  11138. /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
  11139. { Bad_Opcode },
  11140. { "korb", { MaskG, MaskVex, MaskR }, 0 },
  11141. },
  11142. {
  11143. /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
  11144. { Bad_Opcode },
  11145. { "kord", { MaskG, MaskVex, MaskR }, 0 },
  11146. },
  11147. {
  11148. /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
  11149. { Bad_Opcode },
  11150. { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
  11151. },
  11152. {
  11153. /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
  11154. { Bad_Opcode },
  11155. { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
  11156. },
  11157. {
  11158. /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
  11159. { Bad_Opcode },
  11160. { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
  11161. },
  11162. {
  11163. /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
  11164. { Bad_Opcode },
  11165. { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
  11166. },
  11167. {
  11168. /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
  11169. { Bad_Opcode },
  11170. { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
  11171. },
  11172. {
  11173. /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
  11174. { Bad_Opcode },
  11175. { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
  11176. },
  11177. {
  11178. /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
  11179. { Bad_Opcode },
  11180. { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
  11181. },
  11182. {
  11183. /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
  11184. { Bad_Opcode },
  11185. { "kxord", { MaskG, MaskVex, MaskR }, 0 },
  11186. },
  11187. {
  11188. /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
  11189. { Bad_Opcode },
  11190. { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
  11191. },
  11192. {
  11193. /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
  11194. { Bad_Opcode },
  11195. { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
  11196. },
  11197. {
  11198. /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
  11199. { Bad_Opcode },
  11200. { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
  11201. },
  11202. {
  11203. /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
  11204. { Bad_Opcode },
  11205. { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
  11206. },
  11207. {
  11208. /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
  11209. { Bad_Opcode },
  11210. { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
  11211. },
  11212. {
  11213. /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
  11214. { Bad_Opcode },
  11215. { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
  11216. },
  11217. {
  11218. /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
  11219. { Bad_Opcode },
  11220. { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
  11221. },
  11222. {
  11223. /* MOD_VEX_0F50 */
  11224. { Bad_Opcode },
  11225. { VEX_W_TABLE (VEX_W_0F50_M_0) },
  11226. },
  11227. {
  11228. /* MOD_VEX_0F71_REG_2 */
  11229. { Bad_Opcode },
  11230. { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
  11231. },
  11232. {
  11233. /* MOD_VEX_0F71_REG_4 */
  11234. { Bad_Opcode },
  11235. { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
  11236. },
  11237. {
  11238. /* MOD_VEX_0F71_REG_6 */
  11239. { Bad_Opcode },
  11240. { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
  11241. },
  11242. {
  11243. /* MOD_VEX_0F72_REG_2 */
  11244. { Bad_Opcode },
  11245. { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
  11246. },
  11247. {
  11248. /* MOD_VEX_0F72_REG_4 */
  11249. { Bad_Opcode },
  11250. { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
  11251. },
  11252. {
  11253. /* MOD_VEX_0F72_REG_6 */
  11254. { Bad_Opcode },
  11255. { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
  11256. },
  11257. {
  11258. /* MOD_VEX_0F73_REG_2 */
  11259. { Bad_Opcode },
  11260. { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
  11261. },
  11262. {
  11263. /* MOD_VEX_0F73_REG_3 */
  11264. { Bad_Opcode },
  11265. { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
  11266. },
  11267. {
  11268. /* MOD_VEX_0F73_REG_6 */
  11269. { Bad_Opcode },
  11270. { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
  11271. },
  11272. {
  11273. /* MOD_VEX_0F73_REG_7 */
  11274. { Bad_Opcode },
  11275. { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
  11276. },
  11277. {
  11278. /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
  11279. { "kmovw", { Ew, MaskG }, 0 },
  11280. { Bad_Opcode },
  11281. },
  11282. {
  11283. /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
  11284. { "kmovq", { Eq, MaskG }, 0 },
  11285. { Bad_Opcode },
  11286. },
  11287. {
  11288. /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
  11289. { "kmovb", { Eb, MaskG }, 0 },
  11290. { Bad_Opcode },
  11291. },
  11292. {
  11293. /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
  11294. { "kmovd", { Ed, MaskG }, 0 },
  11295. { Bad_Opcode },
  11296. },
  11297. {
  11298. /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
  11299. { Bad_Opcode },
  11300. { "kmovw", { MaskG, Rdq }, 0 },
  11301. },
  11302. {
  11303. /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
  11304. { Bad_Opcode },
  11305. { "kmovb", { MaskG, Rdq }, 0 },
  11306. },
  11307. {
  11308. /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
  11309. { Bad_Opcode },
  11310. { "kmovd", { MaskG, Rdq }, 0 },
  11311. },
  11312. {
  11313. /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
  11314. { Bad_Opcode },
  11315. { "kmovq", { MaskG, Rdq }, 0 },
  11316. },
  11317. {
  11318. /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
  11319. { Bad_Opcode },
  11320. { "kmovw", { Gdq, MaskR }, 0 },
  11321. },
  11322. {
  11323. /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
  11324. { Bad_Opcode },
  11325. { "kmovb", { Gdq, MaskR }, 0 },
  11326. },
  11327. {
  11328. /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
  11329. { Bad_Opcode },
  11330. { "kmovd", { Gdq, MaskR }, 0 },
  11331. },
  11332. {
  11333. /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
  11334. { Bad_Opcode },
  11335. { "kmovq", { Gdq, MaskR }, 0 },
  11336. },
  11337. {
  11338. /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
  11339. { Bad_Opcode },
  11340. { "kortestw", { MaskG, MaskR }, 0 },
  11341. },
  11342. {
  11343. /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
  11344. { Bad_Opcode },
  11345. { "kortestq", { MaskG, MaskR }, 0 },
  11346. },
  11347. {
  11348. /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
  11349. { Bad_Opcode },
  11350. { "kortestb", { MaskG, MaskR }, 0 },
  11351. },
  11352. {
  11353. /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
  11354. { Bad_Opcode },
  11355. { "kortestd", { MaskG, MaskR }, 0 },
  11356. },
  11357. {
  11358. /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
  11359. { Bad_Opcode },
  11360. { "ktestw", { MaskG, MaskR }, 0 },
  11361. },
  11362. {
  11363. /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
  11364. { Bad_Opcode },
  11365. { "ktestq", { MaskG, MaskR }, 0 },
  11366. },
  11367. {
  11368. /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
  11369. { Bad_Opcode },
  11370. { "ktestb", { MaskG, MaskR }, 0 },
  11371. },
  11372. {
  11373. /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
  11374. { Bad_Opcode },
  11375. { "ktestd", { MaskG, MaskR }, 0 },
  11376. },
  11377. {
  11378. /* MOD_VEX_0FAE_REG_2 */
  11379. { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
  11380. },
  11381. {
  11382. /* MOD_VEX_0FAE_REG_3 */
  11383. { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
  11384. },
  11385. {
  11386. /* MOD_VEX_0FD7_PREFIX_2 */
  11387. { Bad_Opcode },
  11388. { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
  11389. },
  11390. {
  11391. /* MOD_VEX_0FE7_PREFIX_2 */
  11392. { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
  11393. },
  11394. {
  11395. /* MOD_VEX_0FF0_PREFIX_3 */
  11396. { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
  11397. },
  11398. {
  11399. /* MOD_VEX_0F381A_PREFIX_2 */
  11400. { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
  11401. },
  11402. {
  11403. /* MOD_VEX_0F382A_PREFIX_2 */
  11404. { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
  11405. },
  11406. {
  11407. /* MOD_VEX_0F382C_PREFIX_2 */
  11408. { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
  11409. },
  11410. {
  11411. /* MOD_VEX_0F382D_PREFIX_2 */
  11412. { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
  11413. },
  11414. {
  11415. /* MOD_VEX_0F382E_PREFIX_2 */
  11416. { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
  11417. },
  11418. {
  11419. /* MOD_VEX_0F382F_PREFIX_2 */
  11420. { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
  11421. },
  11422. {
  11423. /* MOD_VEX_0F385A_PREFIX_2 */
  11424. { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
  11425. },
  11426. {
  11427. /* MOD_VEX_0F388C_PREFIX_2 */
  11428. { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
  11429. },
  11430. {
  11431. /* MOD_VEX_0F388E_PREFIX_2 */
  11432. { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
  11433. },
  11434. {
  11435. /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
  11436. { Bad_Opcode },
  11437. { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
  11438. },
  11439. {
  11440. /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
  11441. { Bad_Opcode },
  11442. { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
  11443. },
  11444. {
  11445. /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
  11446. { Bad_Opcode },
  11447. { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
  11448. },
  11449. {
  11450. /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
  11451. { Bad_Opcode },
  11452. { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
  11453. },
  11454. {
  11455. /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
  11456. { Bad_Opcode },
  11457. { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
  11458. },
  11459. {
  11460. /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
  11461. { Bad_Opcode },
  11462. { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
  11463. },
  11464. {
  11465. /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
  11466. { Bad_Opcode },
  11467. { "kshiftld", { MaskG, MaskR, Ib }, 0 },
  11468. },
  11469. {
  11470. /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
  11471. { Bad_Opcode },
  11472. { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
  11473. },
  11474. #define NEED_MOD_TABLE
  11475. #include "i386-dis-evex.h"
  11476. #undef NEED_MOD_TABLE
  11477. };
  11478. static const struct dis386 rm_table[][8] = {
  11479. {
  11480. /* RM_C6_REG_7 */
  11481. { "xabort", { Skip_MODRM, Ib }, 0 },
  11482. },
  11483. {
  11484. /* RM_C7_REG_7 */
  11485. { "xbeginT", { Skip_MODRM, Jv }, 0 },
  11486. },
  11487. {
  11488. /* RM_0F01_REG_0 */
  11489. { Bad_Opcode },
  11490. { "vmcall", { Skip_MODRM }, 0 },
  11491. { "vmlaunch", { Skip_MODRM }, 0 },
  11492. { "vmresume", { Skip_MODRM }, 0 },
  11493. { "vmxoff", { Skip_MODRM }, 0 },
  11494. },
  11495. {
  11496. /* RM_0F01_REG_1 */
  11497. { "monitor", { { OP_Monitor, 0 } }, 0 },
  11498. { "mwait", { { OP_Mwait, 0 } }, 0 },
  11499. { "clac", { Skip_MODRM }, 0 },
  11500. { "stac", { Skip_MODRM }, 0 },
  11501. { Bad_Opcode },
  11502. { Bad_Opcode },
  11503. { Bad_Opcode },
  11504. { "encls", { Skip_MODRM }, 0 },
  11505. },
  11506. {
  11507. /* RM_0F01_REG_2 */
  11508. { "xgetbv", { Skip_MODRM }, 0 },
  11509. { "xsetbv", { Skip_MODRM }, 0 },
  11510. { Bad_Opcode },
  11511. { Bad_Opcode },
  11512. { "vmfunc", { Skip_MODRM }, 0 },
  11513. { "xend", { Skip_MODRM }, 0 },
  11514. { "xtest", { Skip_MODRM }, 0 },
  11515. { "enclu", { Skip_MODRM }, 0 },
  11516. },
  11517. {
  11518. /* RM_0F01_REG_3 */
  11519. { "vmrun", { Skip_MODRM }, 0 },
  11520. { "vmmcall", { Skip_MODRM }, 0 },
  11521. { "vmload", { Skip_MODRM }, 0 },
  11522. { "vmsave", { Skip_MODRM }, 0 },
  11523. { "stgi", { Skip_MODRM }, 0 },
  11524. { "clgi", { Skip_MODRM }, 0 },
  11525. { "skinit", { Skip_MODRM }, 0 },
  11526. { "invlpga", { Skip_MODRM }, 0 },
  11527. },
  11528. {
  11529. /* RM_0F01_REG_5 */
  11530. { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
  11531. { Bad_Opcode },
  11532. { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
  11533. { Bad_Opcode },
  11534. { Bad_Opcode },
  11535. { Bad_Opcode },
  11536. { "rdpkru", { Skip_MODRM }, 0 },
  11537. { "wrpkru", { Skip_MODRM }, 0 },
  11538. },
  11539. {
  11540. /* RM_0F01_REG_7 */
  11541. { "swapgs", { Skip_MODRM }, 0 },
  11542. { "rdtscp", { Skip_MODRM }, 0 },
  11543. { "monitorx", { { OP_Monitor, 0 } }, 0 },
  11544. { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
  11545. { "clzero", { Skip_MODRM }, 0 },
  11546. },
  11547. {
  11548. /* RM_0F1E_MOD_3_REG_7 */
  11549. { "nopQ", { Ev }, 0 },
  11550. { "nopQ", { Ev }, 0 },
  11551. { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
  11552. { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
  11553. { "nopQ", { Ev }, 0 },
  11554. { "nopQ", { Ev }, 0 },
  11555. { "nopQ", { Ev }, 0 },
  11556. { "nopQ", { Ev }, 0 },
  11557. },
  11558. {
  11559. /* RM_0FAE_REG_6 */
  11560. { "mfence", { Skip_MODRM }, 0 },
  11561. },
  11562. {
  11563. /* RM_0FAE_REG_7 */
  11564. { "sfence", { Skip_MODRM }, 0 },
  11565. },
  11566. };
  11567. #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
  11568. /* We use the high bit to indicate different name for the same
  11569. prefix. */
  11570. #define REP_PREFIX (0xf3 | 0x100)
  11571. #define XACQUIRE_PREFIX (0xf2 | 0x200)
  11572. #define XRELEASE_PREFIX (0xf3 | 0x400)
  11573. #define BND_PREFIX (0xf2 | 0x400)
  11574. #define NOTRACK_PREFIX (0x3e | 0x100)
  11575. static int
  11576. ckprefix (void)
  11577. {
  11578. int newrex, i, length;
  11579. rex = 0;
  11580. rex_ignored = 0;
  11581. prefixes = 0;
  11582. used_prefixes = 0;
  11583. rex_used = 0;
  11584. last_lock_prefix = -1;
  11585. last_repz_prefix = -1;
  11586. last_repnz_prefix = -1;
  11587. last_data_prefix = -1;
  11588. last_addr_prefix = -1;
  11589. last_rex_prefix = -1;
  11590. last_seg_prefix = -1;
  11591. fwait_prefix = -1;
  11592. active_seg_prefix = 0;
  11593. for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
  11594. all_prefixes[i] = 0;
  11595. i = 0;
  11596. length = 0;
  11597. /* The maximum instruction length is 15bytes. */
  11598. while (length < MAX_CODE_LENGTH - 1)
  11599. {
  11600. FETCH_DATA (the_info, codep + 1);
  11601. newrex = 0;
  11602. switch (*codep)
  11603. {
  11604. /* REX prefixes family. */
  11605. case 0x40:
  11606. case 0x41:
  11607. case 0x42:
  11608. case 0x43:
  11609. case 0x44:
  11610. case 0x45:
  11611. case 0x46:
  11612. case 0x47:
  11613. case 0x48:
  11614. case 0x49:
  11615. case 0x4a:
  11616. case 0x4b:
  11617. case 0x4c:
  11618. case 0x4d:
  11619. case 0x4e:
  11620. case 0x4f:
  11621. if (address_mode == mode_64bit)
  11622. newrex = *codep;
  11623. else
  11624. return 1;
  11625. last_rex_prefix = i;
  11626. break;
  11627. case 0xf3:
  11628. prefixes |= PREFIX_REPZ;
  11629. last_repz_prefix = i;
  11630. break;
  11631. case 0xf2:
  11632. prefixes |= PREFIX_REPNZ;
  11633. last_repnz_prefix = i;
  11634. break;
  11635. case 0xf0:
  11636. prefixes |= PREFIX_LOCK;
  11637. last_lock_prefix = i;
  11638. break;
  11639. case 0x2e:
  11640. prefixes |= PREFIX_CS;
  11641. last_seg_prefix = i;
  11642. active_seg_prefix = PREFIX_CS;
  11643. break;
  11644. case 0x36:
  11645. prefixes |= PREFIX_SS;
  11646. last_seg_prefix = i;
  11647. active_seg_prefix = PREFIX_SS;
  11648. break;
  11649. case 0x3e:
  11650. prefixes |= PREFIX_DS;
  11651. last_seg_prefix = i;
  11652. active_seg_prefix = PREFIX_DS;
  11653. break;
  11654. case 0x26:
  11655. prefixes |= PREFIX_ES;
  11656. last_seg_prefix = i;
  11657. active_seg_prefix = PREFIX_ES;
  11658. break;
  11659. case 0x64:
  11660. prefixes |= PREFIX_FS;
  11661. last_seg_prefix = i;
  11662. active_seg_prefix = PREFIX_FS;
  11663. break;
  11664. case 0x65:
  11665. prefixes |= PREFIX_GS;
  11666. last_seg_prefix = i;
  11667. active_seg_prefix = PREFIX_GS;
  11668. break;
  11669. case 0x66:
  11670. prefixes |= PREFIX_DATA;
  11671. last_data_prefix = i;
  11672. break;
  11673. case 0x67:
  11674. prefixes |= PREFIX_ADDR;
  11675. last_addr_prefix = i;
  11676. break;
  11677. case FWAIT_OPCODE:
  11678. /* fwait is really an instruction. If there are prefixes
  11679. before the fwait, they belong to the fwait, *not* to the
  11680. following instruction. */
  11681. fwait_prefix = i;
  11682. if (prefixes || rex)
  11683. {
  11684. prefixes |= PREFIX_FWAIT;
  11685. codep++;
  11686. /* This ensures that the previous REX prefixes are noticed
  11687. as unused prefixes, as in the return case below. */
  11688. rex_used = rex;
  11689. return 1;
  11690. }
  11691. prefixes = PREFIX_FWAIT;
  11692. break;
  11693. default:
  11694. return 1;
  11695. }
  11696. /* Rex is ignored when followed by another prefix. */
  11697. if (rex)
  11698. {
  11699. rex_used = rex;
  11700. return 1;
  11701. }
  11702. if (*codep != FWAIT_OPCODE)
  11703. all_prefixes[i++] = *codep;
  11704. rex = newrex;
  11705. codep++;
  11706. length++;
  11707. }
  11708. return 0;
  11709. }
  11710. /* Return the name of the prefix byte PREF, or NULL if PREF is not a
  11711. prefix byte. */
  11712. static const char *
  11713. prefix_name (int pref, int sizeflag)
  11714. {
  11715. static const char *rexes [16] =
  11716. {
  11717. "rex", /* 0x40 */
  11718. "rex.B", /* 0x41 */
  11719. "rex.X", /* 0x42 */
  11720. "rex.XB", /* 0x43 */
  11721. "rex.R", /* 0x44 */
  11722. "rex.RB", /* 0x45 */
  11723. "rex.RX", /* 0x46 */
  11724. "rex.RXB", /* 0x47 */
  11725. "rex.W", /* 0x48 */
  11726. "rex.WB", /* 0x49 */
  11727. "rex.WX", /* 0x4a */
  11728. "rex.WXB", /* 0x4b */
  11729. "rex.WR", /* 0x4c */
  11730. "rex.WRB", /* 0x4d */
  11731. "rex.WRX", /* 0x4e */
  11732. "rex.WRXB", /* 0x4f */
  11733. };
  11734. switch (pref)
  11735. {
  11736. /* REX prefixes family. */
  11737. case 0x40:
  11738. case 0x41:
  11739. case 0x42:
  11740. case 0x43:
  11741. case 0x44:
  11742. case 0x45:
  11743. case 0x46:
  11744. case 0x47:
  11745. case 0x48:
  11746. case 0x49:
  11747. case 0x4a:
  11748. case 0x4b:
  11749. case 0x4c:
  11750. case 0x4d:
  11751. case 0x4e:
  11752. case 0x4f:
  11753. return rexes [pref - 0x40];
  11754. case 0xf3:
  11755. return "repz";
  11756. case 0xf2:
  11757. return "repnz";
  11758. case 0xf0:
  11759. return "lock";
  11760. case 0x2e:
  11761. return "cs";
  11762. case 0x36:
  11763. return "ss";
  11764. case 0x3e:
  11765. return "ds";
  11766. case 0x26:
  11767. return "es";
  11768. case 0x64:
  11769. return "fs";
  11770. case 0x65:
  11771. return "gs";
  11772. case 0x66:
  11773. return (sizeflag & DFLAG) ? "data16" : "data32";
  11774. case 0x67:
  11775. if (address_mode == mode_64bit)
  11776. return (sizeflag & AFLAG) ? "addr32" : "addr64";
  11777. else
  11778. return (sizeflag & AFLAG) ? "addr16" : "addr32";
  11779. case FWAIT_OPCODE:
  11780. return "fwait";
  11781. case REP_PREFIX:
  11782. return "rep";
  11783. case XACQUIRE_PREFIX:
  11784. return "xacquire";
  11785. case XRELEASE_PREFIX:
  11786. return "xrelease";
  11787. case BND_PREFIX:
  11788. return "bnd";
  11789. case NOTRACK_PREFIX:
  11790. return "notrack";
  11791. default:
  11792. return NULL;
  11793. }
  11794. }
  11795. static char op_out[MAX_OPERANDS][100];
  11796. static int op_ad, op_index[MAX_OPERANDS];
  11797. static int two_source_ops;
  11798. static bfd_vma op_address[MAX_OPERANDS];
  11799. static bfd_vma op_riprel[MAX_OPERANDS];
  11800. static bfd_vma start_pc;
  11801. /*
  11802. * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
  11803. * (see topic "Redundant prefixes" in the "Differences from 8086"
  11804. * section of the "Virtual 8086 Mode" chapter.)
  11805. * 'pc' should be the address of this instruction, it will
  11806. * be used to print the target address if this is a relative jump or call
  11807. * The function returns the length of this instruction in bytes.
  11808. */
  11809. static char intel_syntax;
  11810. static char intel_mnemonic = !SYSV386_COMPAT;
  11811. static char open_char;
  11812. static char close_char;
  11813. static char separator_char;
  11814. static char scale_char;
  11815. enum x86_64_isa
  11816. {
  11817. amd64 = 0,
  11818. intel64
  11819. };
  11820. static enum x86_64_isa isa64;
  11821. /* Here for backwards compatibility. When gdb stops using
  11822. print_insn_i386_att and print_insn_i386_intel these functions can
  11823. disappear, and print_insn_i386 be merged into print_insn. */
  11824. int
  11825. print_insn_i386_att (bfd_vma pc, disassemble_info *info)
  11826. {
  11827. intel_syntax = 0;
  11828. return print_insn (pc, info);
  11829. }
  11830. int
  11831. print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
  11832. {
  11833. intel_syntax = 1;
  11834. return print_insn (pc, info);
  11835. }
  11836. int
  11837. print_insn_i386 (bfd_vma pc, disassemble_info *info)
  11838. {
  11839. intel_syntax = -1;
  11840. return print_insn (pc, info);
  11841. }
  11842. void
  11843. print_i386_disassembler_options (FILE *stream)
  11844. {
  11845. fprintf (stream, _("\n\
  11846. The following i386/x86-64 specific disassembler options are supported for use\n\
  11847. with the -M switch (multiple options should be separated by commas):\n"));
  11848. fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
  11849. fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
  11850. fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
  11851. fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
  11852. fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
  11853. fprintf (stream, _(" att-mnemonic\n"
  11854. " Display instruction in AT&T mnemonic\n"));
  11855. fprintf (stream, _(" intel-mnemonic\n"
  11856. " Display instruction in Intel mnemonic\n"));
  11857. fprintf (stream, _(" addr64 Assume 64bit address size\n"));
  11858. fprintf (stream, _(" addr32 Assume 32bit address size\n"));
  11859. fprintf (stream, _(" addr16 Assume 16bit address size\n"));
  11860. fprintf (stream, _(" data32 Assume 32bit data size\n"));
  11861. fprintf (stream, _(" data16 Assume 16bit data size\n"));
  11862. fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
  11863. fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
  11864. fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
  11865. }
  11866. /* Bad opcode. */
  11867. static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
  11868. /* Get a pointer to struct dis386 with a valid name. */
  11869. static const struct dis386 *
  11870. get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
  11871. {
  11872. int vindex, vex_table_index;
  11873. if (dp->name != NULL)
  11874. return dp;
  11875. switch (dp->op[0].bytemode)
  11876. {
  11877. case USE_REG_TABLE:
  11878. dp = &reg_table[dp->op[1].bytemode][modrm.reg];
  11879. break;
  11880. case USE_MOD_TABLE:
  11881. vindex = modrm.mod == 0x3 ? 1 : 0;
  11882. dp = &mod_table[dp->op[1].bytemode][vindex];
  11883. break;
  11884. case USE_RM_TABLE:
  11885. dp = &rm_table[dp->op[1].bytemode][modrm.rm];
  11886. break;
  11887. case USE_PREFIX_TABLE:
  11888. if (need_vex)
  11889. {
  11890. /* The prefix in VEX is implicit. */
  11891. switch (vex.prefix)
  11892. {
  11893. case 0:
  11894. vindex = 0;
  11895. break;
  11896. case REPE_PREFIX_OPCODE:
  11897. vindex = 1;
  11898. break;
  11899. case DATA_PREFIX_OPCODE:
  11900. vindex = 2;
  11901. break;
  11902. case REPNE_PREFIX_OPCODE:
  11903. vindex = 3;
  11904. break;
  11905. default:
  11906. abort ();
  11907. break;
  11908. }
  11909. }
  11910. else
  11911. {
  11912. int last_prefix = -1;
  11913. int prefix = 0;
  11914. vindex = 0;
  11915. /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
  11916. When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
  11917. last one wins. */
  11918. if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
  11919. {
  11920. if (last_repz_prefix > last_repnz_prefix)
  11921. {
  11922. vindex = 1;
  11923. prefix = PREFIX_REPZ;
  11924. last_prefix = last_repz_prefix;
  11925. }
  11926. else
  11927. {
  11928. vindex = 3;
  11929. prefix = PREFIX_REPNZ;
  11930. last_prefix = last_repnz_prefix;
  11931. }
  11932. /* Check if prefix should be ignored. */
  11933. if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
  11934. & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
  11935. & prefix) != 0)
  11936. vindex = 0;
  11937. }
  11938. if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
  11939. {
  11940. vindex = 2;
  11941. prefix = PREFIX_DATA;
  11942. last_prefix = last_data_prefix;
  11943. }
  11944. if (vindex != 0)
  11945. {
  11946. used_prefixes |= prefix;
  11947. all_prefixes[last_prefix] = 0;
  11948. }
  11949. }
  11950. dp = &prefix_table[dp->op[1].bytemode][vindex];
  11951. break;
  11952. case USE_X86_64_TABLE:
  11953. vindex = address_mode == mode_64bit ? 1 : 0;
  11954. dp = &x86_64_table[dp->op[1].bytemode][vindex];
  11955. break;
  11956. case USE_3BYTE_TABLE:
  11957. FETCH_DATA (info, codep + 2);
  11958. vindex = *codep++;
  11959. dp = &three_byte_table[dp->op[1].bytemode][vindex];
  11960. end_codep = codep;
  11961. modrm.mod = (*codep >> 6) & 3;
  11962. modrm.reg = (*codep >> 3) & 7;
  11963. modrm.rm = *codep & 7;
  11964. break;
  11965. case USE_VEX_LEN_TABLE:
  11966. if (!need_vex)
  11967. abort ();
  11968. switch (vex.length)
  11969. {
  11970. case 128:
  11971. vindex = 0;
  11972. break;
  11973. case 256:
  11974. vindex = 1;
  11975. break;
  11976. default:
  11977. abort ();
  11978. break;
  11979. }
  11980. dp = &vex_len_table[dp->op[1].bytemode][vindex];
  11981. break;
  11982. case USE_XOP_8F_TABLE:
  11983. FETCH_DATA (info, codep + 3);
  11984. /* All bits in the REX prefix are ignored. */
  11985. rex_ignored = rex;
  11986. rex = ~(*codep >> 5) & 0x7;
  11987. /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
  11988. switch ((*codep & 0x1f))
  11989. {
  11990. default:
  11991. dp = &bad_opcode;
  11992. return dp;
  11993. case 0x8:
  11994. vex_table_index = XOP_08;
  11995. break;
  11996. case 0x9:
  11997. vex_table_index = XOP_09;
  11998. break;
  11999. case 0xa:
  12000. vex_table_index = XOP_0A;
  12001. break;
  12002. }
  12003. codep++;
  12004. vex.w = *codep & 0x80;
  12005. if (vex.w && address_mode == mode_64bit)
  12006. rex |= REX_W;
  12007. vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12008. if (address_mode != mode_64bit)
  12009. {
  12010. /* In 16/32-bit mode REX_B is silently ignored. */
  12011. rex &= ~REX_B;
  12012. if (vex.register_specifier > 0x7)
  12013. {
  12014. dp = &bad_opcode;
  12015. return dp;
  12016. }
  12017. }
  12018. vex.length = (*codep & 0x4) ? 256 : 128;
  12019. switch ((*codep & 0x3))
  12020. {
  12021. case 0:
  12022. vex.prefix = 0;
  12023. break;
  12024. case 1:
  12025. vex.prefix = DATA_PREFIX_OPCODE;
  12026. break;
  12027. case 2:
  12028. vex.prefix = REPE_PREFIX_OPCODE;
  12029. break;
  12030. case 3:
  12031. vex.prefix = REPNE_PREFIX_OPCODE;
  12032. break;
  12033. }
  12034. need_vex = 1;
  12035. need_vex_reg = 1;
  12036. codep++;
  12037. vindex = *codep++;
  12038. dp = &xop_table[vex_table_index][vindex];
  12039. end_codep = codep;
  12040. FETCH_DATA (info, codep + 1);
  12041. modrm.mod = (*codep >> 6) & 3;
  12042. modrm.reg = (*codep >> 3) & 7;
  12043. modrm.rm = *codep & 7;
  12044. break;
  12045. case USE_VEX_C4_TABLE:
  12046. /* VEX prefix. */
  12047. FETCH_DATA (info, codep + 3);
  12048. /* All bits in the REX prefix are ignored. */
  12049. rex_ignored = rex;
  12050. rex = ~(*codep >> 5) & 0x7;
  12051. switch ((*codep & 0x1f))
  12052. {
  12053. default:
  12054. dp = &bad_opcode;
  12055. return dp;
  12056. case 0x1:
  12057. vex_table_index = VEX_0F;
  12058. break;
  12059. case 0x2:
  12060. vex_table_index = VEX_0F38;
  12061. break;
  12062. case 0x3:
  12063. vex_table_index = VEX_0F3A;
  12064. break;
  12065. }
  12066. codep++;
  12067. vex.w = *codep & 0x80;
  12068. if (address_mode == mode_64bit)
  12069. {
  12070. if (vex.w)
  12071. rex |= REX_W;
  12072. vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12073. }
  12074. else
  12075. {
  12076. /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
  12077. is ignored, other REX bits are 0 and the highest bit in
  12078. VEX.vvvv is also ignored. */
  12079. rex = 0;
  12080. vex.register_specifier = (~(*codep >> 3)) & 0x7;
  12081. }
  12082. vex.length = (*codep & 0x4) ? 256 : 128;
  12083. switch ((*codep & 0x3))
  12084. {
  12085. case 0:
  12086. vex.prefix = 0;
  12087. break;
  12088. case 1:
  12089. vex.prefix = DATA_PREFIX_OPCODE;
  12090. break;
  12091. case 2:
  12092. vex.prefix = REPE_PREFIX_OPCODE;
  12093. break;
  12094. case 3:
  12095. vex.prefix = REPNE_PREFIX_OPCODE;
  12096. break;
  12097. }
  12098. need_vex = 1;
  12099. need_vex_reg = 1;
  12100. codep++;
  12101. vindex = *codep++;
  12102. dp = &vex_table[vex_table_index][vindex];
  12103. end_codep = codep;
  12104. /* There is no MODRM byte for VEX0F 77. */
  12105. if (vex_table_index != VEX_0F || vindex != 0x77)
  12106. {
  12107. FETCH_DATA (info, codep + 1);
  12108. modrm.mod = (*codep >> 6) & 3;
  12109. modrm.reg = (*codep >> 3) & 7;
  12110. modrm.rm = *codep & 7;
  12111. }
  12112. break;
  12113. case USE_VEX_C5_TABLE:
  12114. /* VEX prefix. */
  12115. FETCH_DATA (info, codep + 2);
  12116. /* All bits in the REX prefix are ignored. */
  12117. rex_ignored = rex;
  12118. rex = (*codep & 0x80) ? 0 : REX_R;
  12119. /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
  12120. VEX.vvvv is 1. */
  12121. vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12122. vex.w = 0;
  12123. vex.length = (*codep & 0x4) ? 256 : 128;
  12124. switch ((*codep & 0x3))
  12125. {
  12126. case 0:
  12127. vex.prefix = 0;
  12128. break;
  12129. case 1:
  12130. vex.prefix = DATA_PREFIX_OPCODE;
  12131. break;
  12132. case 2:
  12133. vex.prefix = REPE_PREFIX_OPCODE;
  12134. break;
  12135. case 3:
  12136. vex.prefix = REPNE_PREFIX_OPCODE;
  12137. break;
  12138. }
  12139. need_vex = 1;
  12140. need_vex_reg = 1;
  12141. codep++;
  12142. vindex = *codep++;
  12143. dp = &vex_table[dp->op[1].bytemode][vindex];
  12144. end_codep = codep;
  12145. /* There is no MODRM byte for VEX 77. */
  12146. if (vindex != 0x77)
  12147. {
  12148. FETCH_DATA (info, codep + 1);
  12149. modrm.mod = (*codep >> 6) & 3;
  12150. modrm.reg = (*codep >> 3) & 7;
  12151. modrm.rm = *codep & 7;
  12152. }
  12153. break;
  12154. case USE_VEX_W_TABLE:
  12155. if (!need_vex)
  12156. abort ();
  12157. dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
  12158. break;
  12159. case USE_EVEX_TABLE:
  12160. two_source_ops = 0;
  12161. /* EVEX prefix. */
  12162. vex.evex = 1;
  12163. FETCH_DATA (info, codep + 4);
  12164. /* All bits in the REX prefix are ignored. */
  12165. rex_ignored = rex;
  12166. /* The first byte after 0x62. */
  12167. rex = ~(*codep >> 5) & 0x7;
  12168. vex.r = *codep & 0x10;
  12169. switch ((*codep & 0xf))
  12170. {
  12171. default:
  12172. return &bad_opcode;
  12173. case 0x1:
  12174. vex_table_index = EVEX_0F;
  12175. break;
  12176. case 0x2:
  12177. vex_table_index = EVEX_0F38;
  12178. break;
  12179. case 0x3:
  12180. vex_table_index = EVEX_0F3A;
  12181. break;
  12182. }
  12183. /* The second byte after 0x62. */
  12184. codep++;
  12185. vex.w = *codep & 0x80;
  12186. if (vex.w && address_mode == mode_64bit)
  12187. rex |= REX_W;
  12188. vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12189. if (address_mode != mode_64bit)
  12190. {
  12191. /* In 16/32-bit mode silently ignore following bits. */
  12192. rex &= ~REX_B;
  12193. vex.r = 1;
  12194. vex.v = 1;
  12195. vex.register_specifier &= 0x7;
  12196. }
  12197. /* The U bit. */
  12198. if (!(*codep & 0x4))
  12199. return &bad_opcode;
  12200. switch ((*codep & 0x3))
  12201. {
  12202. case 0:
  12203. vex.prefix = 0;
  12204. break;
  12205. case 1:
  12206. vex.prefix = DATA_PREFIX_OPCODE;
  12207. break;
  12208. case 2:
  12209. vex.prefix = REPE_PREFIX_OPCODE;
  12210. break;
  12211. case 3:
  12212. vex.prefix = REPNE_PREFIX_OPCODE;
  12213. break;
  12214. }
  12215. /* The third byte after 0x62. */
  12216. codep++;
  12217. /* Remember the static rounding bits. */
  12218. vex.ll = (*codep >> 5) & 3;
  12219. vex.b = (*codep & 0x10) != 0;
  12220. vex.v = *codep & 0x8;
  12221. vex.mask_register_specifier = *codep & 0x7;
  12222. vex.zeroing = *codep & 0x80;
  12223. need_vex = 1;
  12224. need_vex_reg = 1;
  12225. codep++;
  12226. vindex = *codep++;
  12227. dp = &evex_table[vex_table_index][vindex];
  12228. end_codep = codep;
  12229. FETCH_DATA (info, codep + 1);
  12230. modrm.mod = (*codep >> 6) & 3;
  12231. modrm.reg = (*codep >> 3) & 7;
  12232. modrm.rm = *codep & 7;
  12233. /* Set vector length. */
  12234. if (modrm.mod == 3 && vex.b)
  12235. vex.length = 512;
  12236. else
  12237. {
  12238. switch (vex.ll)
  12239. {
  12240. case 0x0:
  12241. vex.length = 128;
  12242. break;
  12243. case 0x1:
  12244. vex.length = 256;
  12245. break;
  12246. case 0x2:
  12247. vex.length = 512;
  12248. break;
  12249. default:
  12250. return &bad_opcode;
  12251. }
  12252. }
  12253. break;
  12254. case 0:
  12255. dp = &bad_opcode;
  12256. break;
  12257. default:
  12258. abort ();
  12259. }
  12260. if (dp->name != NULL)
  12261. return dp;
  12262. else
  12263. return get_valid_dis386 (dp, info);
  12264. }
  12265. static void
  12266. get_sib (disassemble_info *info, int sizeflag)
  12267. {
  12268. /* If modrm.mod == 3, operand must be register. */
  12269. if (need_modrm
  12270. && ((sizeflag & AFLAG) || address_mode == mode_64bit)
  12271. && modrm.mod != 3
  12272. && modrm.rm == 4)
  12273. {
  12274. FETCH_DATA (info, codep + 2);
  12275. sib.index = (codep [1] >> 3) & 7;
  12276. sib.scale = (codep [1] >> 6) & 3;
  12277. sib.base = codep [1] & 7;
  12278. }
  12279. }
  12280. static int
  12281. print_insn (bfd_vma pc, disassemble_info *info)
  12282. {
  12283. const struct dis386 *dp;
  12284. int i;
  12285. char *op_txt[MAX_OPERANDS];
  12286. int needcomma;
  12287. int sizeflag, orig_sizeflag;
  12288. const char *p;
  12289. struct dis_private priv;
  12290. int prefix_length;
  12291. priv.orig_sizeflag = AFLAG | DFLAG;
  12292. if ((info->mach & bfd_mach_i386_i386) != 0)
  12293. address_mode = mode_32bit;
  12294. else if (info->mach == bfd_mach_i386_i8086)
  12295. {
  12296. address_mode = mode_16bit;
  12297. priv.orig_sizeflag = 0;
  12298. }
  12299. else
  12300. address_mode = mode_64bit;
  12301. if (intel_syntax == (char) -1)
  12302. intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
  12303. for (p = info->disassembler_options; p != NULL; )
  12304. {
  12305. if (CONST_STRNEQ (p, "amd64"))
  12306. isa64 = amd64;
  12307. else if (CONST_STRNEQ (p, "intel64"))
  12308. isa64 = intel64;
  12309. else if (CONST_STRNEQ (p, "x86-64"))
  12310. {
  12311. address_mode = mode_64bit;
  12312. priv.orig_sizeflag = AFLAG | DFLAG;
  12313. }
  12314. else if (CONST_STRNEQ (p, "i386"))
  12315. {
  12316. address_mode = mode_32bit;
  12317. priv.orig_sizeflag = AFLAG | DFLAG;
  12318. }
  12319. else if (CONST_STRNEQ (p, "i8086"))
  12320. {
  12321. address_mode = mode_16bit;
  12322. priv.orig_sizeflag = 0;
  12323. }
  12324. else if (CONST_STRNEQ (p, "intel"))
  12325. {
  12326. intel_syntax = 1;
  12327. if (CONST_STRNEQ (p + 5, "-mnemonic"))
  12328. intel_mnemonic = 1;
  12329. }
  12330. else if (CONST_STRNEQ (p, "att"))
  12331. {
  12332. intel_syntax = 0;
  12333. if (CONST_STRNEQ (p + 3, "-mnemonic"))
  12334. intel_mnemonic = 0;
  12335. }
  12336. else if (CONST_STRNEQ (p, "addr"))
  12337. {
  12338. if (address_mode == mode_64bit)
  12339. {
  12340. if (p[4] == '3' && p[5] == '2')
  12341. priv.orig_sizeflag &= ~AFLAG;
  12342. else if (p[4] == '6' && p[5] == '4')
  12343. priv.orig_sizeflag |= AFLAG;
  12344. }
  12345. else
  12346. {
  12347. if (p[4] == '1' && p[5] == '6')
  12348. priv.orig_sizeflag &= ~AFLAG;
  12349. else if (p[4] == '3' && p[5] == '2')
  12350. priv.orig_sizeflag |= AFLAG;
  12351. }
  12352. }
  12353. else if (CONST_STRNEQ (p, "data"))
  12354. {
  12355. if (p[4] == '1' && p[5] == '6')
  12356. priv.orig_sizeflag &= ~DFLAG;
  12357. else if (p[4] == '3' && p[5] == '2')
  12358. priv.orig_sizeflag |= DFLAG;
  12359. }
  12360. else if (CONST_STRNEQ (p, "suffix"))
  12361. priv.orig_sizeflag |= SUFFIX_ALWAYS;
  12362. p = strchr (p, ',');
  12363. if (p != NULL)
  12364. p++;
  12365. }
  12366. if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
  12367. {
  12368. (*info->fprintf_func) (info->stream,
  12369. _("64-bit address is disabled"));
  12370. return -1;
  12371. }
  12372. if (intel_syntax)
  12373. {
  12374. names64 = intel_names64;
  12375. names32 = intel_names32;
  12376. names16 = intel_names16;
  12377. names8 = intel_names8;
  12378. names8rex = intel_names8rex;
  12379. names_seg = intel_names_seg;
  12380. names_mm = intel_names_mm;
  12381. names_bnd = intel_names_bnd;
  12382. names_xmm = intel_names_xmm;
  12383. names_ymm = intel_names_ymm;
  12384. names_zmm = intel_names_zmm;
  12385. index64 = intel_index64;
  12386. index32 = intel_index32;
  12387. names_mask = intel_names_mask;
  12388. index16 = intel_index16;
  12389. open_char = '[';
  12390. close_char = ']';
  12391. separator_char = '+';
  12392. scale_char = '*';
  12393. }
  12394. else
  12395. {
  12396. names64 = att_names64;
  12397. names32 = att_names32;
  12398. names16 = att_names16;
  12399. names8 = att_names8;
  12400. names8rex = att_names8rex;
  12401. names_seg = att_names_seg;
  12402. names_mm = att_names_mm;
  12403. names_bnd = att_names_bnd;
  12404. names_xmm = att_names_xmm;
  12405. names_ymm = att_names_ymm;
  12406. names_zmm = att_names_zmm;
  12407. index64 = att_index64;
  12408. index32 = att_index32;
  12409. names_mask = att_names_mask;
  12410. index16 = att_index16;
  12411. open_char = '(';
  12412. close_char = ')';
  12413. separator_char = ',';
  12414. scale_char = ',';
  12415. }
  12416. /* The output looks better if we put 7 bytes on a line, since that
  12417. puts most long word instructions on a single line. Use 8 bytes
  12418. for Intel L1OM. */
  12419. if ((info->mach & bfd_mach_l1om) != 0)
  12420. info->bytes_per_line = 8;
  12421. else
  12422. info->bytes_per_line = 7;
  12423. info->private_data = &priv;
  12424. priv.max_fetched = priv.the_buffer;
  12425. priv.insn_start = pc;
  12426. obuf[0] = 0;
  12427. for (i = 0; i < MAX_OPERANDS; ++i)
  12428. {
  12429. op_out[i][0] = 0;
  12430. op_index[i] = -1;
  12431. }
  12432. the_info = info;
  12433. start_pc = pc;
  12434. start_codep = priv.the_buffer;
  12435. codep = priv.the_buffer;
  12436. if (OPCODES_SIGSETJMP (priv.bailout) != 0)
  12437. {
  12438. const char *name;
  12439. /* Getting here means we tried for data but didn't get it. That
  12440. means we have an incomplete instruction of some sort. Just
  12441. print the first byte as a prefix or a .byte pseudo-op. */
  12442. if (codep > priv.the_buffer)
  12443. {
  12444. name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
  12445. if (name != NULL)
  12446. (*info->fprintf_func) (info->stream, "%s", name);
  12447. else
  12448. {
  12449. /* Just print the first byte as a .byte instruction. */
  12450. (*info->fprintf_func) (info->stream, ".byte 0x%x",
  12451. (unsigned int) priv.the_buffer[0]);
  12452. }
  12453. return 1;
  12454. }
  12455. return -1;
  12456. }
  12457. obufp = obuf;
  12458. sizeflag = priv.orig_sizeflag;
  12459. if (!ckprefix () || rex_used)
  12460. {
  12461. /* Too many prefixes or unused REX prefixes. */
  12462. for (i = 0;
  12463. i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
  12464. i++)
  12465. (*info->fprintf_func) (info->stream, "%s%s",
  12466. i == 0 ? "" : " ",
  12467. prefix_name (all_prefixes[i], sizeflag));
  12468. return i;
  12469. }
  12470. insn_codep = codep;
  12471. FETCH_DATA (info, codep + 1);
  12472. two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
  12473. if (((prefixes & PREFIX_FWAIT)
  12474. && ((*codep < 0xd8) || (*codep > 0xdf))))
  12475. {
  12476. /* Handle prefixes before fwait. */
  12477. for (i = 0; i < fwait_prefix && all_prefixes[i];
  12478. i++)
  12479. (*info->fprintf_func) (info->stream, "%s ",
  12480. prefix_name (all_prefixes[i], sizeflag));
  12481. (*info->fprintf_func) (info->stream, "fwait");
  12482. return i + 1;
  12483. }
  12484. if (*codep == 0x0f)
  12485. {
  12486. unsigned char threebyte;
  12487. codep++;
  12488. FETCH_DATA (info, codep + 1);
  12489. threebyte = *codep;
  12490. dp = &dis386_twobyte[threebyte];
  12491. need_modrm = twobyte_has_modrm[*codep];
  12492. codep++;
  12493. }
  12494. else
  12495. {
  12496. dp = &dis386[*codep];
  12497. need_modrm = onebyte_has_modrm[*codep];
  12498. codep++;
  12499. }
  12500. /* Save sizeflag for printing the extra prefixes later before updating
  12501. it for mnemonic and operand processing. The prefix names depend
  12502. only on the address mode. */
  12503. orig_sizeflag = sizeflag;
  12504. if (prefixes & PREFIX_ADDR)
  12505. sizeflag ^= AFLAG;
  12506. if ((prefixes & PREFIX_DATA))
  12507. sizeflag ^= DFLAG;
  12508. end_codep = codep;
  12509. if (need_modrm)
  12510. {
  12511. FETCH_DATA (info, codep + 1);
  12512. modrm.mod = (*codep >> 6) & 3;
  12513. modrm.reg = (*codep >> 3) & 7;
  12514. modrm.rm = *codep & 7;
  12515. }
  12516. need_vex = 0;
  12517. need_vex_reg = 0;
  12518. vex_w_done = 0;
  12519. vex.evex = 0;
  12520. if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
  12521. {
  12522. get_sib (info, sizeflag);
  12523. dofloat (sizeflag);
  12524. }
  12525. else
  12526. {
  12527. dp = get_valid_dis386 (dp, info);
  12528. if (dp != NULL && putop (dp->name, sizeflag) == 0)
  12529. {
  12530. get_sib (info, sizeflag);
  12531. for (i = 0; i < MAX_OPERANDS; ++i)
  12532. {
  12533. obufp = op_out[i];
  12534. op_ad = MAX_OPERANDS - 1 - i;
  12535. if (dp->op[i].rtn)
  12536. (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
  12537. /* For EVEX instruction after the last operand masking
  12538. should be printed. */
  12539. if (i == 0 && vex.evex)
  12540. {
  12541. /* Don't print {%k0}. */
  12542. if (vex.mask_register_specifier)
  12543. {
  12544. oappend ("{");
  12545. oappend (names_mask[vex.mask_register_specifier]);
  12546. oappend ("}");
  12547. }
  12548. if (vex.zeroing)
  12549. oappend ("{z}");
  12550. }
  12551. }
  12552. }
  12553. }
  12554. /* Check if the REX prefix is used. */
  12555. if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
  12556. all_prefixes[last_rex_prefix] = 0;
  12557. /* Check if the SEG prefix is used. */
  12558. if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
  12559. | PREFIX_FS | PREFIX_GS)) != 0
  12560. && (used_prefixes & active_seg_prefix) != 0)
  12561. all_prefixes[last_seg_prefix] = 0;
  12562. /* Check if the ADDR prefix is used. */
  12563. if ((prefixes & PREFIX_ADDR) != 0
  12564. && (used_prefixes & PREFIX_ADDR) != 0)
  12565. all_prefixes[last_addr_prefix] = 0;
  12566. /* Check if the DATA prefix is used. */
  12567. if ((prefixes & PREFIX_DATA) != 0
  12568. && (used_prefixes & PREFIX_DATA) != 0)
  12569. all_prefixes[last_data_prefix] = 0;
  12570. /* Print the extra prefixes. */
  12571. prefix_length = 0;
  12572. for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
  12573. if (all_prefixes[i])
  12574. {
  12575. const char *name;
  12576. name = prefix_name (all_prefixes[i], orig_sizeflag);
  12577. if (name == NULL)
  12578. abort ();
  12579. prefix_length += strlen (name) + 1;
  12580. (*info->fprintf_func) (info->stream, "%s ", name);
  12581. }
  12582. /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
  12583. unused, opcode is invalid. Since the PREFIX_DATA prefix may be
  12584. used by putop and MMX/SSE operand and may be overriden by the
  12585. PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
  12586. separately. */
  12587. if (dp->prefix_requirement == PREFIX_OPCODE
  12588. && dp != &bad_opcode
  12589. && (((prefixes
  12590. & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
  12591. && (used_prefixes
  12592. & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
  12593. || ((((prefixes
  12594. & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
  12595. == PREFIX_DATA)
  12596. && (used_prefixes & PREFIX_DATA) == 0))))
  12597. {
  12598. (*info->fprintf_func) (info->stream, "(bad)");
  12599. return end_codep - priv.the_buffer;
  12600. }
  12601. /* Check maximum code length. */
  12602. if ((codep - start_codep) > MAX_CODE_LENGTH)
  12603. {
  12604. (*info->fprintf_func) (info->stream, "(bad)");
  12605. return MAX_CODE_LENGTH;
  12606. }
  12607. obufp = mnemonicendp;
  12608. for (i = strlen (obuf) + prefix_length; i < 6; i++)
  12609. oappend (" ");
  12610. oappend (" ");
  12611. (*info->fprintf_func) (info->stream, "%s", obuf);
  12612. /* The enter and bound instructions are printed with operands in the same
  12613. order as the intel book; everything else is printed in reverse order. */
  12614. if (intel_syntax || two_source_ops)
  12615. {
  12616. bfd_vma riprel;
  12617. for (i = 0; i < MAX_OPERANDS; ++i)
  12618. op_txt[i] = op_out[i];
  12619. if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
  12620. && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
  12621. {
  12622. op_txt[2] = op_out[3];
  12623. op_txt[3] = op_out[2];
  12624. }
  12625. for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
  12626. {
  12627. op_ad = op_index[i];
  12628. op_index[i] = op_index[MAX_OPERANDS - 1 - i];
  12629. op_index[MAX_OPERANDS - 1 - i] = op_ad;
  12630. riprel = op_riprel[i];
  12631. op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
  12632. op_riprel[MAX_OPERANDS - 1 - i] = riprel;
  12633. }
  12634. }
  12635. else
  12636. {
  12637. for (i = 0; i < MAX_OPERANDS; ++i)
  12638. op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
  12639. }
  12640. needcomma = 0;
  12641. for (i = 0; i < MAX_OPERANDS; ++i)
  12642. if (*op_txt[i])
  12643. {
  12644. if (needcomma)
  12645. (*info->fprintf_func) (info->stream, ",");
  12646. if (op_index[i] != -1 && !op_riprel[i])
  12647. (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
  12648. else
  12649. (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
  12650. needcomma = 1;
  12651. }
  12652. for (i = 0; i < MAX_OPERANDS; i++)
  12653. if (op_index[i] != -1 && op_riprel[i])
  12654. {
  12655. (*info->fprintf_func) (info->stream, " # ");
  12656. (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
  12657. + op_address[op_index[i]]), info);
  12658. break;
  12659. }
  12660. return codep - priv.the_buffer;
  12661. }
  12662. static const char *float_mem[] = {
  12663. /* d8 */
  12664. "fadd{s|}",
  12665. "fmul{s|}",
  12666. "fcom{s|}",
  12667. "fcomp{s|}",
  12668. "fsub{s|}",
  12669. "fsubr{s|}",
  12670. "fdiv{s|}",
  12671. "fdivr{s|}",
  12672. /* d9 */
  12673. "fld{s|}",
  12674. "(bad)",
  12675. "fst{s|}",
  12676. "fstp{s|}",
  12677. "fldenvIC",
  12678. "fldcw",
  12679. "fNstenvIC",
  12680. "fNstcw",
  12681. /* da */
  12682. "fiadd{l|}",
  12683. "fimul{l|}",
  12684. "ficom{l|}",
  12685. "ficomp{l|}",
  12686. "fisub{l|}",
  12687. "fisubr{l|}",
  12688. "fidiv{l|}",
  12689. "fidivr{l|}",
  12690. /* db */
  12691. "fild{l|}",
  12692. "fisttp{l|}",
  12693. "fist{l|}",
  12694. "fistp{l|}",
  12695. "(bad)",
  12696. "fld{t||t|}",
  12697. "(bad)",
  12698. "fstp{t||t|}",
  12699. /* dc */
  12700. "fadd{l|}",
  12701. "fmul{l|}",
  12702. "fcom{l|}",
  12703. "fcomp{l|}",
  12704. "fsub{l|}",
  12705. "fsubr{l|}",
  12706. "fdiv{l|}",
  12707. "fdivr{l|}",
  12708. /* dd */
  12709. "fld{l|}",
  12710. "fisttp{ll|}",
  12711. "fst{l||}",
  12712. "fstp{l|}",
  12713. "frstorIC",
  12714. "(bad)",
  12715. "fNsaveIC",
  12716. "fNstsw",
  12717. /* de */
  12718. "fiadd",
  12719. "fimul",
  12720. "ficom",
  12721. "ficomp",
  12722. "fisub",
  12723. "fisubr",
  12724. "fidiv",
  12725. "fidivr",
  12726. /* df */
  12727. "fild",
  12728. "fisttp",
  12729. "fist",
  12730. "fistp",
  12731. "fbld",
  12732. "fild{ll|}",
  12733. "fbstp",
  12734. "fistp{ll|}",
  12735. };
  12736. static const unsigned char float_mem_mode[] = {
  12737. /* d8 */
  12738. d_mode,
  12739. d_mode,
  12740. d_mode,
  12741. d_mode,
  12742. d_mode,
  12743. d_mode,
  12744. d_mode,
  12745. d_mode,
  12746. /* d9 */
  12747. d_mode,
  12748. 0,
  12749. d_mode,
  12750. d_mode,
  12751. 0,
  12752. w_mode,
  12753. 0,
  12754. w_mode,
  12755. /* da */
  12756. d_mode,
  12757. d_mode,
  12758. d_mode,
  12759. d_mode,
  12760. d_mode,
  12761. d_mode,
  12762. d_mode,
  12763. d_mode,
  12764. /* db */
  12765. d_mode,
  12766. d_mode,
  12767. d_mode,
  12768. d_mode,
  12769. 0,
  12770. t_mode,
  12771. 0,
  12772. t_mode,
  12773. /* dc */
  12774. q_mode,
  12775. q_mode,
  12776. q_mode,
  12777. q_mode,
  12778. q_mode,
  12779. q_mode,
  12780. q_mode,
  12781. q_mode,
  12782. /* dd */
  12783. q_mode,
  12784. q_mode,
  12785. q_mode,
  12786. q_mode,
  12787. 0,
  12788. 0,
  12789. 0,
  12790. w_mode,
  12791. /* de */
  12792. w_mode,
  12793. w_mode,
  12794. w_mode,
  12795. w_mode,
  12796. w_mode,
  12797. w_mode,
  12798. w_mode,
  12799. w_mode,
  12800. /* df */
  12801. w_mode,
  12802. w_mode,
  12803. w_mode,
  12804. w_mode,
  12805. t_mode,
  12806. q_mode,
  12807. t_mode,
  12808. q_mode
  12809. };
  12810. #define ST { OP_ST, 0 }
  12811. #define STi { OP_STi, 0 }
  12812. #define FGRPd9_2 NULL, { { NULL, 1 } }, 0
  12813. #define FGRPd9_4 NULL, { { NULL, 2 } }, 0
  12814. #define FGRPd9_5 NULL, { { NULL, 3 } }, 0
  12815. #define FGRPd9_6 NULL, { { NULL, 4 } }, 0
  12816. #define FGRPd9_7 NULL, { { NULL, 5 } }, 0
  12817. #define FGRPda_5 NULL, { { NULL, 6 } }, 0
  12818. #define FGRPdb_4 NULL, { { NULL, 7 } }, 0
  12819. #define FGRPde_3 NULL, { { NULL, 8 } }, 0
  12820. #define FGRPdf_4 NULL, { { NULL, 9 } }, 0
  12821. static const struct dis386 float_reg[][8] = {
  12822. /* d8 */
  12823. {
  12824. { "fadd", { ST, STi }, 0 },
  12825. { "fmul", { ST, STi }, 0 },
  12826. { "fcom", { STi }, 0 },
  12827. { "fcomp", { STi }, 0 },
  12828. { "fsub", { ST, STi }, 0 },
  12829. { "fsubr", { ST, STi }, 0 },
  12830. { "fdiv", { ST, STi }, 0 },
  12831. { "fdivr", { ST, STi }, 0 },
  12832. },
  12833. /* d9 */
  12834. {
  12835. { "fld", { STi }, 0 },
  12836. { "fxch", { STi }, 0 },
  12837. { FGRPd9_2 },
  12838. { Bad_Opcode },
  12839. { FGRPd9_4 },
  12840. { FGRPd9_5 },
  12841. { FGRPd9_6 },
  12842. { FGRPd9_7 },
  12843. },
  12844. /* da */
  12845. {
  12846. { "fcmovb", { ST, STi }, 0 },
  12847. { "fcmove", { ST, STi }, 0 },
  12848. { "fcmovbe",{ ST, STi }, 0 },
  12849. { "fcmovu", { ST, STi }, 0 },
  12850. { Bad_Opcode },
  12851. { FGRPda_5 },
  12852. { Bad_Opcode },
  12853. { Bad_Opcode },
  12854. },
  12855. /* db */
  12856. {
  12857. { "fcmovnb",{ ST, STi }, 0 },
  12858. { "fcmovne",{ ST, STi }, 0 },
  12859. { "fcmovnbe",{ ST, STi }, 0 },
  12860. { "fcmovnu",{ ST, STi }, 0 },
  12861. { FGRPdb_4 },
  12862. { "fucomi", { ST, STi }, 0 },
  12863. { "fcomi", { ST, STi }, 0 },
  12864. { Bad_Opcode },
  12865. },
  12866. /* dc */
  12867. {
  12868. { "fadd", { STi, ST }, 0 },
  12869. { "fmul", { STi, ST }, 0 },
  12870. { Bad_Opcode },
  12871. { Bad_Opcode },
  12872. { "fsub!M", { STi, ST }, 0 },
  12873. { "fsubM", { STi, ST }, 0 },
  12874. { "fdiv!M", { STi, ST }, 0 },
  12875. { "fdivM", { STi, ST }, 0 },
  12876. },
  12877. /* dd */
  12878. {
  12879. { "ffree", { STi }, 0 },
  12880. { Bad_Opcode },
  12881. { "fst", { STi }, 0 },
  12882. { "fstp", { STi }, 0 },
  12883. { "fucom", { STi }, 0 },
  12884. { "fucomp", { STi }, 0 },
  12885. { Bad_Opcode },
  12886. { Bad_Opcode },
  12887. },
  12888. /* de */
  12889. {
  12890. { "faddp", { STi, ST }, 0 },
  12891. { "fmulp", { STi, ST }, 0 },
  12892. { Bad_Opcode },
  12893. { FGRPde_3 },
  12894. { "fsub!Mp", { STi, ST }, 0 },
  12895. { "fsubMp", { STi, ST }, 0 },
  12896. { "fdiv!Mp", { STi, ST }, 0 },
  12897. { "fdivMp", { STi, ST }, 0 },
  12898. },
  12899. /* df */
  12900. {
  12901. { "ffreep", { STi }, 0 },
  12902. { Bad_Opcode },
  12903. { Bad_Opcode },
  12904. { Bad_Opcode },
  12905. { FGRPdf_4 },
  12906. { "fucomip", { ST, STi }, 0 },
  12907. { "fcomip", { ST, STi }, 0 },
  12908. { Bad_Opcode },
  12909. },
  12910. };
  12911. static char *fgrps[][8] = {
  12912. /* Bad opcode 0 */
  12913. {
  12914. "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  12915. },
  12916. /* d9_2 1 */
  12917. {
  12918. "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  12919. },
  12920. /* d9_4 2 */
  12921. {
  12922. "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
  12923. },
  12924. /* d9_5 3 */
  12925. {
  12926. "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
  12927. },
  12928. /* d9_6 4 */
  12929. {
  12930. "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
  12931. },
  12932. /* d9_7 5 */
  12933. {
  12934. "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
  12935. },
  12936. /* da_5 6 */
  12937. {
  12938. "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  12939. },
  12940. /* db_4 7 */
  12941. {
  12942. "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
  12943. "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
  12944. },
  12945. /* de_3 8 */
  12946. {
  12947. "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  12948. },
  12949. /* df_4 9 */
  12950. {
  12951. "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  12952. },
  12953. };
  12954. static void
  12955. swap_operand (void)
  12956. {
  12957. mnemonicendp[0] = '.';
  12958. mnemonicendp[1] = 's';
  12959. mnemonicendp += 2;
  12960. }
  12961. static void
  12962. OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
  12963. int sizeflag ATTRIBUTE_UNUSED)
  12964. {
  12965. /* Skip mod/rm byte. */
  12966. MODRM_CHECK;
  12967. codep++;
  12968. }
  12969. static void
  12970. dofloat (int sizeflag)
  12971. {
  12972. const struct dis386 *dp;
  12973. unsigned char floatop;
  12974. floatop = codep[-1];
  12975. if (modrm.mod != 3)
  12976. {
  12977. int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
  12978. putop (float_mem[fp_indx], sizeflag);
  12979. obufp = op_out[0];
  12980. op_ad = 2;
  12981. OP_E (float_mem_mode[fp_indx], sizeflag);
  12982. return;
  12983. }
  12984. /* Skip mod/rm byte. */
  12985. MODRM_CHECK;
  12986. codep++;
  12987. dp = &float_reg[floatop - 0xd8][modrm.reg];
  12988. if (dp->name == NULL)
  12989. {
  12990. putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
  12991. /* Instruction fnstsw is only one with strange arg. */
  12992. if (floatop == 0xdf && codep[-1] == 0xe0)
  12993. strcpy (op_out[0], names16[0]);
  12994. }
  12995. else
  12996. {
  12997. putop (dp->name, sizeflag);
  12998. obufp = op_out[0];
  12999. op_ad = 2;
  13000. if (dp->op[0].rtn)
  13001. (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
  13002. obufp = op_out[1];
  13003. op_ad = 1;
  13004. if (dp->op[1].rtn)
  13005. (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
  13006. }
  13007. }
  13008. /* Like oappend (below), but S is a string starting with '%'.
  13009. In Intel syntax, the '%' is elided. */
  13010. static void
  13011. oappend_maybe_intel (const char *s)
  13012. {
  13013. oappend (s + intel_syntax);
  13014. }
  13015. static void
  13016. OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  13017. {
  13018. oappend_maybe_intel ("%st");
  13019. }
  13020. static void
  13021. OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  13022. {
  13023. sprintf (scratchbuf, "%%st(%d)", modrm.rm);
  13024. oappend_maybe_intel (scratchbuf);
  13025. }
  13026. /* Capital letters in template are macros. */
  13027. static int
  13028. putop (const char *in_template, int sizeflag)
  13029. {
  13030. const char *p;
  13031. int alt = 0;
  13032. int cond = 1;
  13033. unsigned int l = 0, len = 1;
  13034. char last[4];
  13035. #define SAVE_LAST(c) \
  13036. if (l < len && l < sizeof (last)) \
  13037. last[l++] = c; \
  13038. else \
  13039. abort ();
  13040. for (p = in_template; *p; p++)
  13041. {
  13042. switch (*p)
  13043. {
  13044. default:
  13045. *obufp++ = *p;
  13046. break;
  13047. case '%':
  13048. len++;
  13049. break;
  13050. case '!':
  13051. cond = 0;
  13052. break;
  13053. case '{':
  13054. if (intel_syntax)
  13055. {
  13056. while (*++p != '|')
  13057. if (*p == '}' || *p == '\0')
  13058. abort ();
  13059. }
  13060. /* Fall through. */
  13061. case 'I':
  13062. alt = 1;
  13063. continue;
  13064. case '|':
  13065. while (*++p != '}')
  13066. {
  13067. if (*p == '\0')
  13068. abort ();
  13069. }
  13070. break;
  13071. case '}':
  13072. break;
  13073. case 'A':
  13074. if (intel_syntax)
  13075. break;
  13076. if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
  13077. *obufp++ = 'b';
  13078. break;
  13079. case 'B':
  13080. if (l == 0 && len == 1)
  13081. {
  13082. case_B:
  13083. if (intel_syntax)
  13084. break;
  13085. if (sizeflag & SUFFIX_ALWAYS)
  13086. *obufp++ = 'b';
  13087. }
  13088. else
  13089. {
  13090. if (l != 1
  13091. || len != 2
  13092. || last[0] != 'L')
  13093. {
  13094. SAVE_LAST (*p);
  13095. break;
  13096. }
  13097. if (address_mode == mode_64bit
  13098. && !(prefixes & PREFIX_ADDR))
  13099. {
  13100. *obufp++ = 'a';
  13101. *obufp++ = 'b';
  13102. *obufp++ = 's';
  13103. }
  13104. goto case_B;
  13105. }
  13106. break;
  13107. case 'C':
  13108. if (intel_syntax && !alt)
  13109. break;
  13110. if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
  13111. {
  13112. if (sizeflag & DFLAG)
  13113. *obufp++ = intel_syntax ? 'd' : 'l';
  13114. else
  13115. *obufp++ = intel_syntax ? 'w' : 's';
  13116. used_prefixes |= (prefixes & PREFIX_DATA);
  13117. }
  13118. break;
  13119. case 'D':
  13120. if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
  13121. break;
  13122. USED_REX (REX_W);
  13123. if (modrm.mod == 3)
  13124. {
  13125. if (rex & REX_W)
  13126. *obufp++ = 'q';
  13127. else
  13128. {
  13129. if (sizeflag & DFLAG)
  13130. *obufp++ = intel_syntax ? 'd' : 'l';
  13131. else
  13132. *obufp++ = 'w';
  13133. used_prefixes |= (prefixes & PREFIX_DATA);
  13134. }
  13135. }
  13136. else
  13137. *obufp++ = 'w';
  13138. break;
  13139. case 'E': /* For jcxz/jecxz */
  13140. if (address_mode == mode_64bit)
  13141. {
  13142. if (sizeflag & AFLAG)
  13143. *obufp++ = 'r';
  13144. else
  13145. *obufp++ = 'e';
  13146. }
  13147. else
  13148. if (sizeflag & AFLAG)
  13149. *obufp++ = 'e';
  13150. used_prefixes |= (prefixes & PREFIX_ADDR);
  13151. break;
  13152. case 'F':
  13153. if (intel_syntax)
  13154. break;
  13155. if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
  13156. {
  13157. if (sizeflag & AFLAG)
  13158. *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
  13159. else
  13160. *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
  13161. used_prefixes |= (prefixes & PREFIX_ADDR);
  13162. }
  13163. break;
  13164. case 'G':
  13165. if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
  13166. break;
  13167. if ((rex & REX_W) || (sizeflag & DFLAG))
  13168. *obufp++ = 'l';
  13169. else
  13170. *obufp++ = 'w';
  13171. if (!(rex & REX_W))
  13172. used_prefixes |= (prefixes & PREFIX_DATA);
  13173. break;
  13174. case 'H':
  13175. if (intel_syntax)
  13176. break;
  13177. if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
  13178. || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
  13179. {
  13180. used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
  13181. *obufp++ = ',';
  13182. *obufp++ = 'p';
  13183. if (prefixes & PREFIX_DS)
  13184. *obufp++ = 't';
  13185. else
  13186. *obufp++ = 'n';
  13187. }
  13188. break;
  13189. case 'J':
  13190. if (intel_syntax)
  13191. break;
  13192. *obufp++ = 'l';
  13193. break;
  13194. case 'K':
  13195. USED_REX (REX_W);
  13196. if (rex & REX_W)
  13197. *obufp++ = 'q';
  13198. else
  13199. *obufp++ = 'd';
  13200. break;
  13201. case 'Z':
  13202. if (l != 0 || len != 1)
  13203. {
  13204. if (l != 1 || len != 2 || last[0] != 'X')
  13205. {
  13206. SAVE_LAST (*p);
  13207. break;
  13208. }
  13209. if (!need_vex || !vex.evex)
  13210. abort ();
  13211. if (intel_syntax
  13212. || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
  13213. break;
  13214. switch (vex.length)
  13215. {
  13216. case 128:
  13217. *obufp++ = 'x';
  13218. break;
  13219. case 256:
  13220. *obufp++ = 'y';
  13221. break;
  13222. case 512:
  13223. *obufp++ = 'z';
  13224. break;
  13225. default:
  13226. abort ();
  13227. }
  13228. break;
  13229. }
  13230. if (intel_syntax)
  13231. break;
  13232. if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
  13233. {
  13234. *obufp++ = 'q';
  13235. break;
  13236. }
  13237. /* Fall through. */
  13238. goto case_L;
  13239. case 'L':
  13240. if (l != 0 || len != 1)
  13241. {
  13242. SAVE_LAST (*p);
  13243. break;
  13244. }
  13245. case_L:
  13246. if (intel_syntax)
  13247. break;
  13248. if (sizeflag & SUFFIX_ALWAYS)
  13249. *obufp++ = 'l';
  13250. break;
  13251. case 'M':
  13252. if (intel_mnemonic != cond)
  13253. *obufp++ = 'r';
  13254. break;
  13255. case 'N':
  13256. if ((prefixes & PREFIX_FWAIT) == 0)
  13257. *obufp++ = 'n';
  13258. else
  13259. used_prefixes |= PREFIX_FWAIT;
  13260. break;
  13261. case 'O':
  13262. USED_REX (REX_W);
  13263. if (rex & REX_W)
  13264. *obufp++ = 'o';
  13265. else if (intel_syntax && (sizeflag & DFLAG))
  13266. *obufp++ = 'q';
  13267. else
  13268. *obufp++ = 'd';
  13269. if (!(rex & REX_W))
  13270. used_prefixes |= (prefixes & PREFIX_DATA);
  13271. break;
  13272. case '&':
  13273. if (!intel_syntax
  13274. && address_mode == mode_64bit
  13275. && isa64 == intel64)
  13276. {
  13277. *obufp++ = 'q';
  13278. break;
  13279. }
  13280. /* Fall through. */
  13281. case 'T':
  13282. if (!intel_syntax
  13283. && address_mode == mode_64bit
  13284. && ((sizeflag & DFLAG) || (rex & REX_W)))
  13285. {
  13286. *obufp++ = 'q';
  13287. break;
  13288. }
  13289. /* Fall through. */
  13290. goto case_P;
  13291. case 'P':
  13292. if (l == 0 && len == 1)
  13293. {
  13294. case_P:
  13295. if (intel_syntax)
  13296. {
  13297. if ((rex & REX_W) == 0
  13298. && (prefixes & PREFIX_DATA))
  13299. {
  13300. if ((sizeflag & DFLAG) == 0)
  13301. *obufp++ = 'w';
  13302. used_prefixes |= (prefixes & PREFIX_DATA);
  13303. }
  13304. break;
  13305. }
  13306. if ((prefixes & PREFIX_DATA)
  13307. || (rex & REX_W)
  13308. || (sizeflag & SUFFIX_ALWAYS))
  13309. {
  13310. USED_REX (REX_W);
  13311. if (rex & REX_W)
  13312. *obufp++ = 'q';
  13313. else
  13314. {
  13315. if (sizeflag & DFLAG)
  13316. *obufp++ = 'l';
  13317. else
  13318. *obufp++ = 'w';
  13319. used_prefixes |= (prefixes & PREFIX_DATA);
  13320. }
  13321. }
  13322. }
  13323. else
  13324. {
  13325. if (l != 1 || len != 2 || last[0] != 'L')
  13326. {
  13327. SAVE_LAST (*p);
  13328. break;
  13329. }
  13330. if ((prefixes & PREFIX_DATA)
  13331. || (rex & REX_W)
  13332. || (sizeflag & SUFFIX_ALWAYS))
  13333. {
  13334. USED_REX (REX_W);
  13335. if (rex & REX_W)
  13336. *obufp++ = 'q';
  13337. else
  13338. {
  13339. if (sizeflag & DFLAG)
  13340. *obufp++ = intel_syntax ? 'd' : 'l';
  13341. else
  13342. *obufp++ = 'w';
  13343. used_prefixes |= (prefixes & PREFIX_DATA);
  13344. }
  13345. }
  13346. }
  13347. break;
  13348. case 'U':
  13349. if (intel_syntax)
  13350. break;
  13351. if (address_mode == mode_64bit
  13352. && ((sizeflag & DFLAG) || (rex & REX_W)))
  13353. {
  13354. if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
  13355. *obufp++ = 'q';
  13356. break;
  13357. }
  13358. /* Fall through. */
  13359. goto case_Q;
  13360. case 'Q':
  13361. if (l == 0 && len == 1)
  13362. {
  13363. case_Q:
  13364. if (intel_syntax && !alt)
  13365. break;
  13366. USED_REX (REX_W);
  13367. if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
  13368. {
  13369. if (rex & REX_W)
  13370. *obufp++ = 'q';
  13371. else
  13372. {
  13373. if (sizeflag & DFLAG)
  13374. *obufp++ = intel_syntax ? 'd' : 'l';
  13375. else
  13376. *obufp++ = 'w';
  13377. used_prefixes |= (prefixes & PREFIX_DATA);
  13378. }
  13379. }
  13380. }
  13381. else
  13382. {
  13383. if (l != 1 || len != 2 || last[0] != 'L')
  13384. {
  13385. SAVE_LAST (*p);
  13386. break;
  13387. }
  13388. if (intel_syntax
  13389. || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
  13390. break;
  13391. if ((rex & REX_W))
  13392. {
  13393. USED_REX (REX_W);
  13394. *obufp++ = 'q';
  13395. }
  13396. else
  13397. *obufp++ = 'l';
  13398. }
  13399. break;
  13400. case 'R':
  13401. USED_REX (REX_W);
  13402. if (rex & REX_W)
  13403. *obufp++ = 'q';
  13404. else if (sizeflag & DFLAG)
  13405. {
  13406. if (intel_syntax)
  13407. *obufp++ = 'd';
  13408. else
  13409. *obufp++ = 'l';
  13410. }
  13411. else
  13412. *obufp++ = 'w';
  13413. if (intel_syntax && !p[1]
  13414. && ((rex & REX_W) || (sizeflag & DFLAG)))
  13415. *obufp++ = 'e';
  13416. if (!(rex & REX_W))
  13417. used_prefixes |= (prefixes & PREFIX_DATA);
  13418. break;
  13419. case 'V':
  13420. if (l == 0 && len == 1)
  13421. {
  13422. if (intel_syntax)
  13423. break;
  13424. if (address_mode == mode_64bit
  13425. && ((sizeflag & DFLAG) || (rex & REX_W)))
  13426. {
  13427. if (sizeflag & SUFFIX_ALWAYS)
  13428. *obufp++ = 'q';
  13429. break;
  13430. }
  13431. }
  13432. else
  13433. {
  13434. if (l != 1
  13435. || len != 2
  13436. || last[0] != 'L')
  13437. {
  13438. SAVE_LAST (*p);
  13439. break;
  13440. }
  13441. if (rex & REX_W)
  13442. {
  13443. *obufp++ = 'a';
  13444. *obufp++ = 'b';
  13445. *obufp++ = 's';
  13446. }
  13447. }
  13448. /* Fall through. */
  13449. goto case_S;
  13450. case 'S':
  13451. if (l == 0 && len == 1)
  13452. {
  13453. case_S:
  13454. if (intel_syntax)
  13455. break;
  13456. if (sizeflag & SUFFIX_ALWAYS)
  13457. {
  13458. if (rex & REX_W)
  13459. *obufp++ = 'q';
  13460. else
  13461. {
  13462. if (sizeflag & DFLAG)
  13463. *obufp++ = 'l';
  13464. else
  13465. *obufp++ = 'w';
  13466. used_prefixes |= (prefixes & PREFIX_DATA);
  13467. }
  13468. }
  13469. }
  13470. else
  13471. {
  13472. if (l != 1
  13473. || len != 2
  13474. || last[0] != 'L')
  13475. {
  13476. SAVE_LAST (*p);
  13477. break;
  13478. }
  13479. if (address_mode == mode_64bit
  13480. && !(prefixes & PREFIX_ADDR))
  13481. {
  13482. *obufp++ = 'a';
  13483. *obufp++ = 'b';
  13484. *obufp++ = 's';
  13485. }
  13486. goto case_S;
  13487. }
  13488. break;
  13489. case 'X':
  13490. if (l != 0 || len != 1)
  13491. {
  13492. SAVE_LAST (*p);
  13493. break;
  13494. }
  13495. if (need_vex && vex.prefix)
  13496. {
  13497. if (vex.prefix == DATA_PREFIX_OPCODE)
  13498. *obufp++ = 'd';
  13499. else
  13500. *obufp++ = 's';
  13501. }
  13502. else
  13503. {
  13504. if (prefixes & PREFIX_DATA)
  13505. *obufp++ = 'd';
  13506. else
  13507. *obufp++ = 's';
  13508. used_prefixes |= (prefixes & PREFIX_DATA);
  13509. }
  13510. break;
  13511. case 'Y':
  13512. if (l == 0 && len == 1)
  13513. {
  13514. if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
  13515. break;
  13516. if (rex & REX_W)
  13517. {
  13518. USED_REX (REX_W);
  13519. *obufp++ = 'q';
  13520. }
  13521. break;
  13522. }
  13523. else
  13524. {
  13525. if (l != 1 || len != 2 || last[0] != 'X')
  13526. {
  13527. SAVE_LAST (*p);
  13528. break;
  13529. }
  13530. if (!need_vex)
  13531. abort ();
  13532. if (intel_syntax
  13533. || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
  13534. break;
  13535. switch (vex.length)
  13536. {
  13537. case 128:
  13538. *obufp++ = 'x';
  13539. break;
  13540. case 256:
  13541. *obufp++ = 'y';
  13542. break;
  13543. case 512:
  13544. if (!vex.evex)
  13545. default:
  13546. abort ();
  13547. }
  13548. }
  13549. break;
  13550. case 'W':
  13551. if (l == 0 && len == 1)
  13552. {
  13553. /* operand size flag for cwtl, cbtw */
  13554. USED_REX (REX_W);
  13555. if (rex & REX_W)
  13556. {
  13557. if (intel_syntax)
  13558. *obufp++ = 'd';
  13559. else
  13560. *obufp++ = 'l';
  13561. }
  13562. else if (sizeflag & DFLAG)
  13563. *obufp++ = 'w';
  13564. else
  13565. *obufp++ = 'b';
  13566. if (!(rex & REX_W))
  13567. used_prefixes |= (prefixes & PREFIX_DATA);
  13568. }
  13569. else
  13570. {
  13571. if (l != 1
  13572. || len != 2
  13573. || (last[0] != 'X'
  13574. && last[0] != 'L'))
  13575. {
  13576. SAVE_LAST (*p);
  13577. break;
  13578. }
  13579. if (!need_vex)
  13580. abort ();
  13581. if (last[0] == 'X')
  13582. *obufp++ = vex.w ? 'd': 's';
  13583. else
  13584. *obufp++ = vex.w ? 'q': 'd';
  13585. }
  13586. break;
  13587. case '^':
  13588. if (intel_syntax)
  13589. break;
  13590. if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
  13591. {
  13592. if (sizeflag & DFLAG)
  13593. *obufp++ = 'l';
  13594. else
  13595. *obufp++ = 'w';
  13596. used_prefixes |= (prefixes & PREFIX_DATA);
  13597. }
  13598. break;
  13599. case '@':
  13600. if (intel_syntax)
  13601. break;
  13602. if (address_mode == mode_64bit
  13603. && (isa64 == intel64
  13604. || ((sizeflag & DFLAG) || (rex & REX_W))))
  13605. *obufp++ = 'q';
  13606. else if ((prefixes & PREFIX_DATA))
  13607. {
  13608. if (!(sizeflag & DFLAG))
  13609. *obufp++ = 'w';
  13610. used_prefixes |= (prefixes & PREFIX_DATA);
  13611. }
  13612. break;
  13613. }
  13614. alt = 0;
  13615. }
  13616. *obufp = 0;
  13617. mnemonicendp = obufp;
  13618. return 0;
  13619. }
  13620. static void
  13621. oappend (const char *s)
  13622. {
  13623. obufp = stpcpy (obufp, s);
  13624. }
  13625. static void
  13626. append_seg (void)
  13627. {
  13628. /* Only print the active segment register. */
  13629. if (!active_seg_prefix)
  13630. return;
  13631. used_prefixes |= active_seg_prefix;
  13632. switch (active_seg_prefix)
  13633. {
  13634. case PREFIX_CS:
  13635. oappend_maybe_intel ("%cs:");
  13636. break;
  13637. case PREFIX_DS:
  13638. oappend_maybe_intel ("%ds:");
  13639. break;
  13640. case PREFIX_SS:
  13641. oappend_maybe_intel ("%ss:");
  13642. break;
  13643. case PREFIX_ES:
  13644. oappend_maybe_intel ("%es:");
  13645. break;
  13646. case PREFIX_FS:
  13647. oappend_maybe_intel ("%fs:");
  13648. break;
  13649. case PREFIX_GS:
  13650. oappend_maybe_intel ("%gs:");
  13651. break;
  13652. default:
  13653. break;
  13654. }
  13655. }
  13656. static void
  13657. OP_indirE (int bytemode, int sizeflag)
  13658. {
  13659. if (!intel_syntax)
  13660. oappend ("*");
  13661. OP_E (bytemode, sizeflag);
  13662. }
  13663. static void
  13664. print_operand_value (char *buf, int hex, bfd_vma disp)
  13665. {
  13666. if (address_mode == mode_64bit)
  13667. {
  13668. if (hex)
  13669. {
  13670. char tmp[30];
  13671. int i;
  13672. buf[0] = '0';
  13673. buf[1] = 'x';
  13674. sprintf_vma (tmp, disp);
  13675. for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
  13676. strcpy (buf + 2, tmp + i);
  13677. }
  13678. else
  13679. {
  13680. bfd_signed_vma v = disp;
  13681. char tmp[30];
  13682. int i;
  13683. if (v < 0)
  13684. {
  13685. *(buf++) = '-';
  13686. v = -disp;
  13687. /* Check for possible overflow on 0x8000000000000000. */
  13688. if (v < 0)
  13689. {
  13690. strcpy (buf, "9223372036854775808");
  13691. return;
  13692. }
  13693. }
  13694. if (!v)
  13695. {
  13696. strcpy (buf, "0");
  13697. return;
  13698. }
  13699. i = 0;
  13700. tmp[29] = 0;
  13701. while (v)
  13702. {
  13703. tmp[28 - i] = (v % 10) + '0';
  13704. v /= 10;
  13705. i++;
  13706. }
  13707. strcpy (buf, tmp + 29 - i);
  13708. }
  13709. }
  13710. else
  13711. {
  13712. if (hex)
  13713. sprintf (buf, "0x%x", (unsigned int) disp);
  13714. else
  13715. sprintf (buf, "%d", (int) disp);
  13716. }
  13717. }
  13718. /* Put DISP in BUF as signed hex number. */
  13719. static void
  13720. print_displacement (char *buf, bfd_vma disp)
  13721. {
  13722. bfd_signed_vma val = disp;
  13723. char tmp[30];
  13724. int i, j = 0;
  13725. if (val < 0)
  13726. {
  13727. buf[j++] = '-';
  13728. val = -disp;
  13729. /* Check for possible overflow. */
  13730. if (val < 0)
  13731. {
  13732. switch (address_mode)
  13733. {
  13734. case mode_64bit:
  13735. strcpy (buf + j, "0x8000000000000000");
  13736. break;
  13737. case mode_32bit:
  13738. strcpy (buf + j, "0x80000000");
  13739. break;
  13740. case mode_16bit:
  13741. strcpy (buf + j, "0x8000");
  13742. break;
  13743. }
  13744. return;
  13745. }
  13746. }
  13747. buf[j++] = '0';
  13748. buf[j++] = 'x';
  13749. sprintf_vma (tmp, (bfd_vma) val);
  13750. for (i = 0; tmp[i] == '0'; i++)
  13751. continue;
  13752. if (tmp[i] == '\0')
  13753. i--;
  13754. strcpy (buf + j, tmp + i);
  13755. }
  13756. static void
  13757. intel_operand_size (int bytemode, int sizeflag)
  13758. {
  13759. if (vex.evex
  13760. && vex.b
  13761. && (bytemode == x_mode
  13762. || bytemode == evex_half_bcst_xmmq_mode))
  13763. {
  13764. if (vex.w)
  13765. oappend ("QWORD PTR ");
  13766. else
  13767. oappend ("DWORD PTR ");
  13768. return;
  13769. }
  13770. switch (bytemode)
  13771. {
  13772. case b_mode:
  13773. case b_swap_mode:
  13774. case dqb_mode:
  13775. case db_mode:
  13776. oappend ("BYTE PTR ");
  13777. break;
  13778. case w_mode:
  13779. case dw_mode:
  13780. case dqw_mode:
  13781. oappend ("WORD PTR ");
  13782. break;
  13783. case indir_v_mode:
  13784. if (address_mode == mode_64bit && isa64 == intel64)
  13785. {
  13786. oappend ("QWORD PTR ");
  13787. break;
  13788. }
  13789. /* Fall through. */
  13790. case stack_v_mode:
  13791. if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
  13792. {
  13793. oappend ("QWORD PTR ");
  13794. break;
  13795. }
  13796. /* Fall through. */
  13797. case v_mode:
  13798. case v_swap_mode:
  13799. case dq_mode:
  13800. USED_REX (REX_W);
  13801. if (rex & REX_W)
  13802. oappend ("QWORD PTR ");
  13803. else
  13804. {
  13805. if ((sizeflag & DFLAG) || bytemode == dq_mode)
  13806. oappend ("DWORD PTR ");
  13807. else
  13808. oappend ("WORD PTR ");
  13809. used_prefixes |= (prefixes & PREFIX_DATA);
  13810. }
  13811. break;
  13812. case z_mode:
  13813. if ((rex & REX_W) || (sizeflag & DFLAG))
  13814. *obufp++ = 'D';
  13815. oappend ("WORD PTR ");
  13816. if (!(rex & REX_W))
  13817. used_prefixes |= (prefixes & PREFIX_DATA);
  13818. break;
  13819. case a_mode:
  13820. if (sizeflag & DFLAG)
  13821. oappend ("QWORD PTR ");
  13822. else
  13823. oappend ("DWORD PTR ");
  13824. used_prefixes |= (prefixes & PREFIX_DATA);
  13825. break;
  13826. case d_mode:
  13827. case d_scalar_mode:
  13828. case d_scalar_swap_mode:
  13829. case d_swap_mode:
  13830. case dqd_mode:
  13831. oappend ("DWORD PTR ");
  13832. break;
  13833. case q_mode:
  13834. case q_scalar_mode:
  13835. case q_scalar_swap_mode:
  13836. case q_swap_mode:
  13837. oappend ("QWORD PTR ");
  13838. break;
  13839. case m_mode:
  13840. if (address_mode == mode_64bit)
  13841. oappend ("QWORD PTR ");
  13842. else
  13843. oappend ("DWORD PTR ");
  13844. break;
  13845. case f_mode:
  13846. if (sizeflag & DFLAG)
  13847. oappend ("FWORD PTR ");
  13848. else
  13849. oappend ("DWORD PTR ");
  13850. used_prefixes |= (prefixes & PREFIX_DATA);
  13851. break;
  13852. case t_mode:
  13853. oappend ("TBYTE PTR ");
  13854. break;
  13855. case x_mode:
  13856. case x_swap_mode:
  13857. case evex_x_gscat_mode:
  13858. case evex_x_nobcst_mode:
  13859. if (need_vex)
  13860. {
  13861. switch (vex.length)
  13862. {
  13863. case 128:
  13864. oappend ("XMMWORD PTR ");
  13865. break;
  13866. case 256:
  13867. oappend ("YMMWORD PTR ");
  13868. break;
  13869. case 512:
  13870. oappend ("ZMMWORD PTR ");
  13871. break;
  13872. default:
  13873. abort ();
  13874. }
  13875. }
  13876. else
  13877. oappend ("XMMWORD PTR ");
  13878. break;
  13879. case xmm_mode:
  13880. oappend ("XMMWORD PTR ");
  13881. break;
  13882. case ymm_mode:
  13883. oappend ("YMMWORD PTR ");
  13884. break;
  13885. case xmmq_mode:
  13886. case evex_half_bcst_xmmq_mode:
  13887. if (!need_vex)
  13888. abort ();
  13889. switch (vex.length)
  13890. {
  13891. case 128:
  13892. oappend ("QWORD PTR ");
  13893. break;
  13894. case 256:
  13895. oappend ("XMMWORD PTR ");
  13896. break;
  13897. case 512:
  13898. oappend ("YMMWORD PTR ");
  13899. break;
  13900. default:
  13901. abort ();
  13902. }
  13903. break;
  13904. case xmm_mb_mode:
  13905. if (!need_vex)
  13906. abort ();
  13907. switch (vex.length)
  13908. {
  13909. case 128:
  13910. case 256:
  13911. case 512:
  13912. oappend ("BYTE PTR ");
  13913. break;
  13914. default:
  13915. abort ();
  13916. }
  13917. break;
  13918. case xmm_mw_mode:
  13919. if (!need_vex)
  13920. abort ();
  13921. switch (vex.length)
  13922. {
  13923. case 128:
  13924. case 256:
  13925. case 512:
  13926. oappend ("WORD PTR ");
  13927. break;
  13928. default:
  13929. abort ();
  13930. }
  13931. break;
  13932. case xmm_md_mode:
  13933. if (!need_vex)
  13934. abort ();
  13935. switch (vex.length)
  13936. {
  13937. case 128:
  13938. case 256:
  13939. case 512:
  13940. oappend ("DWORD PTR ");
  13941. break;
  13942. default:
  13943. abort ();
  13944. }
  13945. break;
  13946. case xmm_mq_mode:
  13947. if (!need_vex)
  13948. abort ();
  13949. switch (vex.length)
  13950. {
  13951. case 128:
  13952. case 256:
  13953. case 512:
  13954. oappend ("QWORD PTR ");
  13955. break;
  13956. default:
  13957. abort ();
  13958. }
  13959. break;
  13960. case xmmdw_mode:
  13961. if (!need_vex)
  13962. abort ();
  13963. switch (vex.length)
  13964. {
  13965. case 128:
  13966. oappend ("WORD PTR ");
  13967. break;
  13968. case 256:
  13969. oappend ("DWORD PTR ");
  13970. break;
  13971. case 512:
  13972. oappend ("QWORD PTR ");
  13973. break;
  13974. default:
  13975. abort ();
  13976. }
  13977. break;
  13978. case xmmqd_mode:
  13979. if (!need_vex)
  13980. abort ();
  13981. switch (vex.length)
  13982. {
  13983. case 128:
  13984. oappend ("DWORD PTR ");
  13985. break;
  13986. case 256:
  13987. oappend ("QWORD PTR ");
  13988. break;
  13989. case 512:
  13990. oappend ("XMMWORD PTR ");
  13991. break;
  13992. default:
  13993. abort ();
  13994. }
  13995. break;
  13996. case ymmq_mode:
  13997. if (!need_vex)
  13998. abort ();
  13999. switch (vex.length)
  14000. {
  14001. case 128:
  14002. oappend ("QWORD PTR ");
  14003. break;
  14004. case 256:
  14005. oappend ("YMMWORD PTR ");
  14006. break;
  14007. case 512:
  14008. oappend ("ZMMWORD PTR ");
  14009. break;
  14010. default:
  14011. abort ();
  14012. }
  14013. break;
  14014. case ymmxmm_mode:
  14015. if (!need_vex)
  14016. abort ();
  14017. switch (vex.length)
  14018. {
  14019. case 128:
  14020. case 256:
  14021. oappend ("XMMWORD PTR ");
  14022. break;
  14023. default:
  14024. abort ();
  14025. }
  14026. break;
  14027. case o_mode:
  14028. oappend ("OWORD PTR ");
  14029. break;
  14030. case xmm_mdq_mode:
  14031. case vex_w_dq_mode:
  14032. case vex_scalar_w_dq_mode:
  14033. if (!need_vex)
  14034. abort ();
  14035. if (vex.w)
  14036. oappend ("QWORD PTR ");
  14037. else
  14038. oappend ("DWORD PTR ");
  14039. break;
  14040. case vex_vsib_d_w_dq_mode:
  14041. case vex_vsib_q_w_dq_mode:
  14042. if (!need_vex)
  14043. abort ();
  14044. if (!vex.evex)
  14045. {
  14046. if (vex.w)
  14047. oappend ("QWORD PTR ");
  14048. else
  14049. oappend ("DWORD PTR ");
  14050. }
  14051. else
  14052. {
  14053. switch (vex.length)
  14054. {
  14055. case 128:
  14056. oappend ("XMMWORD PTR ");
  14057. break;
  14058. case 256:
  14059. oappend ("YMMWORD PTR ");
  14060. break;
  14061. case 512:
  14062. oappend ("ZMMWORD PTR ");
  14063. break;
  14064. default:
  14065. abort ();
  14066. }
  14067. }
  14068. break;
  14069. case vex_vsib_q_w_d_mode:
  14070. case vex_vsib_d_w_d_mode:
  14071. if (!need_vex || !vex.evex)
  14072. abort ();
  14073. switch (vex.length)
  14074. {
  14075. case 128:
  14076. oappend ("QWORD PTR ");
  14077. break;
  14078. case 256:
  14079. oappend ("XMMWORD PTR ");
  14080. break;
  14081. case 512:
  14082. oappend ("YMMWORD PTR ");
  14083. break;
  14084. default:
  14085. abort ();
  14086. }
  14087. break;
  14088. case mask_bd_mode:
  14089. if (!need_vex || vex.length != 128)
  14090. abort ();
  14091. if (vex.w)
  14092. oappend ("DWORD PTR ");
  14093. else
  14094. oappend ("BYTE PTR ");
  14095. break;
  14096. case mask_mode:
  14097. if (!need_vex)
  14098. abort ();
  14099. if (vex.w)
  14100. oappend ("QWORD PTR ");
  14101. else
  14102. oappend ("WORD PTR ");
  14103. break;
  14104. case v_bnd_mode:
  14105. default:
  14106. break;
  14107. }
  14108. }
  14109. static void
  14110. OP_E_register (int bytemode, int sizeflag)
  14111. {
  14112. int reg = modrm.rm;
  14113. const char **names;
  14114. USED_REX (REX_B);
  14115. if ((rex & REX_B))
  14116. reg += 8;
  14117. if ((sizeflag & SUFFIX_ALWAYS)
  14118. && (bytemode == b_swap_mode
  14119. || bytemode == v_swap_mode))
  14120. swap_operand ();
  14121. switch (bytemode)
  14122. {
  14123. case b_mode:
  14124. case b_swap_mode:
  14125. USED_REX (0);
  14126. if (rex)
  14127. names = names8rex;
  14128. else
  14129. names = names8;
  14130. break;
  14131. case w_mode:
  14132. names = names16;
  14133. break;
  14134. case d_mode:
  14135. case dw_mode:
  14136. case db_mode:
  14137. names = names32;
  14138. break;
  14139. case q_mode:
  14140. names = names64;
  14141. break;
  14142. case m_mode:
  14143. case v_bnd_mode:
  14144. names = address_mode == mode_64bit ? names64 : names32;
  14145. break;
  14146. case bnd_mode:
  14147. if (reg > 0x3)
  14148. {
  14149. oappend ("(bad)");
  14150. return;
  14151. }
  14152. names = names_bnd;
  14153. break;
  14154. case indir_v_mode:
  14155. if (address_mode == mode_64bit && isa64 == intel64)
  14156. {
  14157. names = names64;
  14158. break;
  14159. }
  14160. /* Fall through. */
  14161. case stack_v_mode:
  14162. if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
  14163. {
  14164. names = names64;
  14165. break;
  14166. }
  14167. bytemode = v_mode;
  14168. /* Fall through. */
  14169. case v_mode:
  14170. case v_swap_mode:
  14171. case dq_mode:
  14172. case dqb_mode:
  14173. case dqd_mode:
  14174. case dqw_mode:
  14175. USED_REX (REX_W);
  14176. if (rex & REX_W)
  14177. names = names64;
  14178. else
  14179. {
  14180. if ((sizeflag & DFLAG)
  14181. || (bytemode != v_mode
  14182. && bytemode != v_swap_mode))
  14183. names = names32;
  14184. else
  14185. names = names16;
  14186. used_prefixes |= (prefixes & PREFIX_DATA);
  14187. }
  14188. break;
  14189. case mask_bd_mode:
  14190. case mask_mode:
  14191. if (reg > 0x7)
  14192. {
  14193. oappend ("(bad)");
  14194. return;
  14195. }
  14196. names = names_mask;
  14197. break;
  14198. case 0:
  14199. return;
  14200. default:
  14201. oappend (INTERNAL_DISASSEMBLER_ERROR);
  14202. return;
  14203. }
  14204. oappend (names[reg]);
  14205. }
  14206. static void
  14207. OP_E_memory (int bytemode, int sizeflag)
  14208. {
  14209. bfd_vma disp = 0;
  14210. int add = (rex & REX_B) ? 8 : 0;
  14211. int riprel = 0;
  14212. int shift;
  14213. if (vex.evex)
  14214. {
  14215. /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
  14216. if (vex.b
  14217. && bytemode != x_mode
  14218. && bytemode != xmmq_mode
  14219. && bytemode != evex_half_bcst_xmmq_mode)
  14220. {
  14221. BadOp ();
  14222. return;
  14223. }
  14224. switch (bytemode)
  14225. {
  14226. case dqw_mode:
  14227. case dw_mode:
  14228. shift = 1;
  14229. break;
  14230. case dqb_mode:
  14231. case db_mode:
  14232. shift = 0;
  14233. break;
  14234. case vex_vsib_d_w_dq_mode:
  14235. case vex_vsib_d_w_d_mode:
  14236. case vex_vsib_q_w_dq_mode:
  14237. case vex_vsib_q_w_d_mode:
  14238. case evex_x_gscat_mode:
  14239. case xmm_mdq_mode:
  14240. shift = vex.w ? 3 : 2;
  14241. break;
  14242. case x_mode:
  14243. case evex_half_bcst_xmmq_mode:
  14244. case xmmq_mode:
  14245. if (vex.b)
  14246. {
  14247. shift = vex.w ? 3 : 2;
  14248. break;
  14249. }
  14250. /* Fall through. */
  14251. case xmmqd_mode:
  14252. case xmmdw_mode:
  14253. case ymmq_mode:
  14254. case evex_x_nobcst_mode:
  14255. case x_swap_mode:
  14256. switch (vex.length)
  14257. {
  14258. case 128:
  14259. shift = 4;
  14260. break;
  14261. case 256:
  14262. shift = 5;
  14263. break;
  14264. case 512:
  14265. shift = 6;
  14266. break;
  14267. default:
  14268. abort ();
  14269. }
  14270. break;
  14271. case ymm_mode:
  14272. shift = 5;
  14273. break;
  14274. case xmm_mode:
  14275. shift = 4;
  14276. break;
  14277. case xmm_mq_mode:
  14278. case q_mode:
  14279. case q_scalar_mode:
  14280. case q_swap_mode:
  14281. case q_scalar_swap_mode:
  14282. shift = 3;
  14283. break;
  14284. case dqd_mode:
  14285. case xmm_md_mode:
  14286. case d_mode:
  14287. case d_scalar_mode:
  14288. case d_swap_mode:
  14289. case d_scalar_swap_mode:
  14290. shift = 2;
  14291. break;
  14292. case xmm_mw_mode:
  14293. shift = 1;
  14294. break;
  14295. case xmm_mb_mode:
  14296. shift = 0;
  14297. break;
  14298. default:
  14299. abort ();
  14300. }
  14301. /* Make necessary corrections to shift for modes that need it.
  14302. For these modes we currently have shift 4, 5 or 6 depending on
  14303. vex.length (it corresponds to xmmword, ymmword or zmmword
  14304. operand). We might want to make it 3, 4 or 5 (e.g. for
  14305. xmmq_mode). In case of broadcast enabled the corrections
  14306. aren't needed, as element size is always 32 or 64 bits. */
  14307. if (!vex.b
  14308. && (bytemode == xmmq_mode
  14309. || bytemode == evex_half_bcst_xmmq_mode))
  14310. shift -= 1;
  14311. else if (bytemode == xmmqd_mode)
  14312. shift -= 2;
  14313. else if (bytemode == xmmdw_mode)
  14314. shift -= 3;
  14315. else if (bytemode == ymmq_mode && vex.length == 128)
  14316. shift -= 1;
  14317. }
  14318. else
  14319. shift = 0;
  14320. USED_REX (REX_B);
  14321. if (intel_syntax)
  14322. intel_operand_size (bytemode, sizeflag);
  14323. append_seg ();
  14324. if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  14325. {
  14326. /* 32/64 bit address mode */
  14327. int havedisp;
  14328. int havesib;
  14329. int havebase;
  14330. int haveindex;
  14331. int needindex;
  14332. int base, rbase;
  14333. int vindex = 0;
  14334. int scale = 0;
  14335. int addr32flag = !((sizeflag & AFLAG)
  14336. || bytemode == v_bnd_mode
  14337. || bytemode == bnd_mode);
  14338. const char **indexes64 = names64;
  14339. const char **indexes32 = names32;
  14340. havesib = 0;
  14341. havebase = 1;
  14342. haveindex = 0;
  14343. base = modrm.rm;
  14344. if (base == 4)
  14345. {
  14346. havesib = 1;
  14347. vindex = sib.index;
  14348. USED_REX (REX_X);
  14349. if (rex & REX_X)
  14350. vindex += 8;
  14351. switch (bytemode)
  14352. {
  14353. case vex_vsib_d_w_dq_mode:
  14354. case vex_vsib_d_w_d_mode:
  14355. case vex_vsib_q_w_dq_mode:
  14356. case vex_vsib_q_w_d_mode:
  14357. if (!need_vex)
  14358. abort ();
  14359. if (vex.evex)
  14360. {
  14361. if (!vex.v)
  14362. vindex += 16;
  14363. }
  14364. haveindex = 1;
  14365. switch (vex.length)
  14366. {
  14367. case 128:
  14368. indexes64 = indexes32 = names_xmm;
  14369. break;
  14370. case 256:
  14371. if (!vex.w
  14372. || bytemode == vex_vsib_q_w_dq_mode
  14373. || bytemode == vex_vsib_q_w_d_mode)
  14374. indexes64 = indexes32 = names_ymm;
  14375. else
  14376. indexes64 = indexes32 = names_xmm;
  14377. break;
  14378. case 512:
  14379. if (!vex.w
  14380. || bytemode == vex_vsib_q_w_dq_mode
  14381. || bytemode == vex_vsib_q_w_d_mode)
  14382. indexes64 = indexes32 = names_zmm;
  14383. else
  14384. indexes64 = indexes32 = names_ymm;
  14385. break;
  14386. default:
  14387. abort ();
  14388. }
  14389. break;
  14390. default:
  14391. haveindex = vindex != 4;
  14392. break;
  14393. }
  14394. scale = sib.scale;
  14395. base = sib.base;
  14396. codep++;
  14397. }
  14398. rbase = base + add;
  14399. switch (modrm.mod)
  14400. {
  14401. case 0:
  14402. if (base == 5)
  14403. {
  14404. havebase = 0;
  14405. if (address_mode == mode_64bit && !havesib)
  14406. riprel = 1;
  14407. disp = get32s ();
  14408. }
  14409. break;
  14410. case 1:
  14411. FETCH_DATA (the_info, codep + 1);
  14412. disp = *codep++;
  14413. if ((disp & 0x80) != 0)
  14414. disp -= 0x100;
  14415. if (vex.evex && shift > 0)
  14416. disp <<= shift;
  14417. break;
  14418. case 2:
  14419. disp = get32s ();
  14420. break;
  14421. }
  14422. /* In 32bit mode, we need index register to tell [offset] from
  14423. [eiz*1 + offset]. */
  14424. needindex = (havesib
  14425. && !havebase
  14426. && !haveindex
  14427. && address_mode == mode_32bit);
  14428. havedisp = (havebase
  14429. || needindex
  14430. || (havesib && (haveindex || scale != 0)));
  14431. if (!intel_syntax)
  14432. if (modrm.mod != 0 || base == 5)
  14433. {
  14434. if (havedisp || riprel)
  14435. print_displacement (scratchbuf, disp);
  14436. else
  14437. print_operand_value (scratchbuf, 1, disp);
  14438. oappend (scratchbuf);
  14439. if (riprel)
  14440. {
  14441. set_op (disp, 1);
  14442. oappend (!addr32flag ? "(%rip)" : "(%eip)");
  14443. }
  14444. }
  14445. if ((havebase || haveindex || riprel)
  14446. && (bytemode != v_bnd_mode)
  14447. && (bytemode != bnd_mode))
  14448. used_prefixes |= PREFIX_ADDR;
  14449. if (havedisp || (intel_syntax && riprel))
  14450. {
  14451. *obufp++ = open_char;
  14452. if (intel_syntax && riprel)
  14453. {
  14454. set_op (disp, 1);
  14455. oappend (!addr32flag ? "rip" : "eip");
  14456. }
  14457. *obufp = '\0';
  14458. if (havebase)
  14459. oappend (address_mode == mode_64bit && !addr32flag
  14460. ? names64[rbase] : names32[rbase]);
  14461. if (havesib)
  14462. {
  14463. /* ESP/RSP won't allow index. If base isn't ESP/RSP,
  14464. print index to tell base + index from base. */
  14465. if (scale != 0
  14466. || needindex
  14467. || haveindex
  14468. || (havebase && base != ESP_REG_NUM))
  14469. {
  14470. if (!intel_syntax || havebase)
  14471. {
  14472. *obufp++ = separator_char;
  14473. *obufp = '\0';
  14474. }
  14475. if (haveindex)
  14476. oappend (address_mode == mode_64bit && !addr32flag
  14477. ? indexes64[vindex] : indexes32[vindex]);
  14478. else
  14479. oappend (address_mode == mode_64bit && !addr32flag
  14480. ? index64 : index32);
  14481. *obufp++ = scale_char;
  14482. *obufp = '\0';
  14483. sprintf (scratchbuf, "%d", 1 << scale);
  14484. oappend (scratchbuf);
  14485. }
  14486. }
  14487. if (intel_syntax
  14488. && (disp || modrm.mod != 0 || base == 5))
  14489. {
  14490. if (!havedisp || (bfd_signed_vma) disp >= 0)
  14491. {
  14492. *obufp++ = '+';
  14493. *obufp = '\0';
  14494. }
  14495. else if (modrm.mod != 1 && disp != -disp)
  14496. {
  14497. *obufp++ = '-';
  14498. *obufp = '\0';
  14499. disp = - (bfd_signed_vma) disp;
  14500. }
  14501. if (havedisp)
  14502. print_displacement (scratchbuf, disp);
  14503. else
  14504. print_operand_value (scratchbuf, 1, disp);
  14505. oappend (scratchbuf);
  14506. }
  14507. *obufp++ = close_char;
  14508. *obufp = '\0';
  14509. }
  14510. else if (intel_syntax)
  14511. {
  14512. if (modrm.mod != 0 || base == 5)
  14513. {
  14514. if (!active_seg_prefix)
  14515. {
  14516. oappend (names_seg[ds_reg - es_reg]);
  14517. oappend (":");
  14518. }
  14519. print_operand_value (scratchbuf, 1, disp);
  14520. oappend (scratchbuf);
  14521. }
  14522. }
  14523. }
  14524. else
  14525. {
  14526. /* 16 bit address mode */
  14527. used_prefixes |= prefixes & PREFIX_ADDR;
  14528. switch (modrm.mod)
  14529. {
  14530. case 0:
  14531. if (modrm.rm == 6)
  14532. {
  14533. disp = get16 ();
  14534. if ((disp & 0x8000) != 0)
  14535. disp -= 0x10000;
  14536. }
  14537. break;
  14538. case 1:
  14539. FETCH_DATA (the_info, codep + 1);
  14540. disp = *codep++;
  14541. if ((disp & 0x80) != 0)
  14542. disp -= 0x100;
  14543. break;
  14544. case 2:
  14545. disp = get16 ();
  14546. if ((disp & 0x8000) != 0)
  14547. disp -= 0x10000;
  14548. break;
  14549. }
  14550. if (!intel_syntax)
  14551. if (modrm.mod != 0 || modrm.rm == 6)
  14552. {
  14553. print_displacement (scratchbuf, disp);
  14554. oappend (scratchbuf);
  14555. }
  14556. if (modrm.mod != 0 || modrm.rm != 6)
  14557. {
  14558. *obufp++ = open_char;
  14559. *obufp = '\0';
  14560. oappend (index16[modrm.rm]);
  14561. if (intel_syntax
  14562. && (disp || modrm.mod != 0 || modrm.rm == 6))
  14563. {
  14564. if ((bfd_signed_vma) disp >= 0)
  14565. {
  14566. *obufp++ = '+';
  14567. *obufp = '\0';
  14568. }
  14569. else if (modrm.mod != 1)
  14570. {
  14571. *obufp++ = '-';
  14572. *obufp = '\0';
  14573. disp = - (bfd_signed_vma) disp;
  14574. }
  14575. print_displacement (scratchbuf, disp);
  14576. oappend (scratchbuf);
  14577. }
  14578. *obufp++ = close_char;
  14579. *obufp = '\0';
  14580. }
  14581. else if (intel_syntax)
  14582. {
  14583. if (!active_seg_prefix)
  14584. {
  14585. oappend (names_seg[ds_reg - es_reg]);
  14586. oappend (":");
  14587. }
  14588. print_operand_value (scratchbuf, 1, disp & 0xffff);
  14589. oappend (scratchbuf);
  14590. }
  14591. }
  14592. if (vex.evex && vex.b
  14593. && (bytemode == x_mode
  14594. || bytemode == xmmq_mode
  14595. || bytemode == evex_half_bcst_xmmq_mode))
  14596. {
  14597. if (vex.w
  14598. || bytemode == xmmq_mode
  14599. || bytemode == evex_half_bcst_xmmq_mode)
  14600. {
  14601. switch (vex.length)
  14602. {
  14603. case 128:
  14604. oappend ("{1to2}");
  14605. break;
  14606. case 256:
  14607. oappend ("{1to4}");
  14608. break;
  14609. case 512:
  14610. oappend ("{1to8}");
  14611. break;
  14612. default:
  14613. abort ();
  14614. }
  14615. }
  14616. else
  14617. {
  14618. switch (vex.length)
  14619. {
  14620. case 128:
  14621. oappend ("{1to4}");
  14622. break;
  14623. case 256:
  14624. oappend ("{1to8}");
  14625. break;
  14626. case 512:
  14627. oappend ("{1to16}");
  14628. break;
  14629. default:
  14630. abort ();
  14631. }
  14632. }
  14633. }
  14634. }
  14635. static void
  14636. OP_E (int bytemode, int sizeflag)
  14637. {
  14638. /* Skip mod/rm byte. */
  14639. MODRM_CHECK;
  14640. codep++;
  14641. if (modrm.mod == 3)
  14642. OP_E_register (bytemode, sizeflag);
  14643. else
  14644. OP_E_memory (bytemode, sizeflag);
  14645. }
  14646. static void
  14647. OP_G (int bytemode, int sizeflag)
  14648. {
  14649. int add = 0;
  14650. USED_REX (REX_R);
  14651. if (rex & REX_R)
  14652. add += 8;
  14653. switch (bytemode)
  14654. {
  14655. case b_mode:
  14656. USED_REX (0);
  14657. if (rex)
  14658. oappend (names8rex[modrm.reg + add]);
  14659. else
  14660. oappend (names8[modrm.reg + add]);
  14661. break;
  14662. case w_mode:
  14663. oappend (names16[modrm.reg + add]);
  14664. break;
  14665. case d_mode:
  14666. case db_mode:
  14667. case dw_mode:
  14668. oappend (names32[modrm.reg + add]);
  14669. break;
  14670. case q_mode:
  14671. oappend (names64[modrm.reg + add]);
  14672. break;
  14673. case bnd_mode:
  14674. if (modrm.reg > 0x3)
  14675. {
  14676. oappend ("(bad)");
  14677. return;
  14678. }
  14679. oappend (names_bnd[modrm.reg]);
  14680. break;
  14681. case v_mode:
  14682. case dq_mode:
  14683. case dqb_mode:
  14684. case dqd_mode:
  14685. case dqw_mode:
  14686. USED_REX (REX_W);
  14687. if (rex & REX_W)
  14688. oappend (names64[modrm.reg + add]);
  14689. else
  14690. {
  14691. if ((sizeflag & DFLAG) || bytemode != v_mode)
  14692. oappend (names32[modrm.reg + add]);
  14693. else
  14694. oappend (names16[modrm.reg + add]);
  14695. used_prefixes |= (prefixes & PREFIX_DATA);
  14696. }
  14697. break;
  14698. case m_mode:
  14699. if (address_mode == mode_64bit)
  14700. oappend (names64[modrm.reg + add]);
  14701. else
  14702. oappend (names32[modrm.reg + add]);
  14703. break;
  14704. case mask_bd_mode:
  14705. case mask_mode:
  14706. if ((modrm.reg + add) > 0x7)
  14707. {
  14708. oappend ("(bad)");
  14709. return;
  14710. }
  14711. oappend (names_mask[modrm.reg + add]);
  14712. break;
  14713. default:
  14714. oappend (INTERNAL_DISASSEMBLER_ERROR);
  14715. break;
  14716. }
  14717. }
  14718. static bfd_vma
  14719. get64 (void)
  14720. {
  14721. bfd_vma x;
  14722. #ifdef BFD64
  14723. unsigned int a;
  14724. unsigned int b;
  14725. FETCH_DATA (the_info, codep + 8);
  14726. a = *codep++ & 0xff;
  14727. a |= (*codep++ & 0xff) << 8;
  14728. a |= (*codep++ & 0xff) << 16;
  14729. a |= (*codep++ & 0xffu) << 24;
  14730. b = *codep++ & 0xff;
  14731. b |= (*codep++ & 0xff) << 8;
  14732. b |= (*codep++ & 0xff) << 16;
  14733. b |= (*codep++ & 0xffu) << 24;
  14734. x = a + ((bfd_vma) b << 32);
  14735. #else
  14736. abort ();
  14737. x = 0;
  14738. #endif
  14739. return x;
  14740. }
  14741. static bfd_signed_vma
  14742. get32 (void)
  14743. {
  14744. bfd_signed_vma x = 0;
  14745. FETCH_DATA (the_info, codep + 4);
  14746. x = *codep++ & (bfd_signed_vma) 0xff;
  14747. x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
  14748. x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
  14749. x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
  14750. return x;
  14751. }
  14752. static bfd_signed_vma
  14753. get32s (void)
  14754. {
  14755. bfd_signed_vma x = 0;
  14756. FETCH_DATA (the_info, codep + 4);
  14757. x = *codep++ & (bfd_signed_vma) 0xff;
  14758. x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
  14759. x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
  14760. x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
  14761. x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
  14762. return x;
  14763. }
  14764. static int
  14765. get16 (void)
  14766. {
  14767. int x = 0;
  14768. FETCH_DATA (the_info, codep + 2);
  14769. x = *codep++ & 0xff;
  14770. x |= (*codep++ & 0xff) << 8;
  14771. return x;
  14772. }
  14773. static void
  14774. set_op (bfd_vma op, int riprel)
  14775. {
  14776. op_index[op_ad] = op_ad;
  14777. if (address_mode == mode_64bit)
  14778. {
  14779. op_address[op_ad] = op;
  14780. op_riprel[op_ad] = riprel;
  14781. }
  14782. else
  14783. {
  14784. /* Mask to get a 32-bit address. */
  14785. op_address[op_ad] = op & 0xffffffff;
  14786. op_riprel[op_ad] = riprel & 0xffffffff;
  14787. }
  14788. }
  14789. static void
  14790. OP_REG (int code, int sizeflag)
  14791. {
  14792. const char *s;
  14793. int add;
  14794. switch (code)
  14795. {
  14796. case es_reg: case ss_reg: case cs_reg:
  14797. case ds_reg: case fs_reg: case gs_reg:
  14798. oappend (names_seg[code - es_reg]);
  14799. return;
  14800. }
  14801. USED_REX (REX_B);
  14802. if (rex & REX_B)
  14803. add = 8;
  14804. else
  14805. add = 0;
  14806. switch (code)
  14807. {
  14808. case ax_reg: case cx_reg: case dx_reg: case bx_reg:
  14809. case sp_reg: case bp_reg: case si_reg: case di_reg:
  14810. s = names16[code - ax_reg + add];
  14811. break;
  14812. case al_reg: case ah_reg: case cl_reg: case ch_reg:
  14813. case dl_reg: case dh_reg: case bl_reg: case bh_reg:
  14814. USED_REX (0);
  14815. if (rex)
  14816. s = names8rex[code - al_reg + add];
  14817. else
  14818. s = names8[code - al_reg];
  14819. break;
  14820. case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
  14821. case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
  14822. if (address_mode == mode_64bit
  14823. && ((sizeflag & DFLAG) || (rex & REX_W)))
  14824. {
  14825. s = names64[code - rAX_reg + add];
  14826. break;
  14827. }
  14828. code += eAX_reg - rAX_reg;
  14829. /* Fall through. */
  14830. case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
  14831. case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
  14832. USED_REX (REX_W);
  14833. if (rex & REX_W)
  14834. s = names64[code - eAX_reg + add];
  14835. else
  14836. {
  14837. if (sizeflag & DFLAG)
  14838. s = names32[code - eAX_reg + add];
  14839. else
  14840. s = names16[code - eAX_reg + add];
  14841. used_prefixes |= (prefixes & PREFIX_DATA);
  14842. }
  14843. break;
  14844. default:
  14845. s = INTERNAL_DISASSEMBLER_ERROR;
  14846. break;
  14847. }
  14848. oappend (s);
  14849. }
  14850. static void
  14851. OP_IMREG (int code, int sizeflag)
  14852. {
  14853. const char *s;
  14854. switch (code)
  14855. {
  14856. case indir_dx_reg:
  14857. if (intel_syntax)
  14858. s = "dx";
  14859. else
  14860. s = "(%dx)";
  14861. break;
  14862. case ax_reg: case cx_reg: case dx_reg: case bx_reg:
  14863. case sp_reg: case bp_reg: case si_reg: case di_reg:
  14864. s = names16[code - ax_reg];
  14865. break;
  14866. case es_reg: case ss_reg: case cs_reg:
  14867. case ds_reg: case fs_reg: case gs_reg:
  14868. s = names_seg[code - es_reg];
  14869. break;
  14870. case al_reg: case ah_reg: case cl_reg: case ch_reg:
  14871. case dl_reg: case dh_reg: case bl_reg: case bh_reg:
  14872. USED_REX (0);
  14873. if (rex)
  14874. s = names8rex[code - al_reg];
  14875. else
  14876. s = names8[code - al_reg];
  14877. break;
  14878. case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
  14879. case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
  14880. USED_REX (REX_W);
  14881. if (rex & REX_W)
  14882. s = names64[code - eAX_reg];
  14883. else
  14884. {
  14885. if (sizeflag & DFLAG)
  14886. s = names32[code - eAX_reg];
  14887. else
  14888. s = names16[code - eAX_reg];
  14889. used_prefixes |= (prefixes & PREFIX_DATA);
  14890. }
  14891. break;
  14892. case z_mode_ax_reg:
  14893. if ((rex & REX_W) || (sizeflag & DFLAG))
  14894. s = *names32;
  14895. else
  14896. s = *names16;
  14897. if (!(rex & REX_W))
  14898. used_prefixes |= (prefixes & PREFIX_DATA);
  14899. break;
  14900. default:
  14901. s = INTERNAL_DISASSEMBLER_ERROR;
  14902. break;
  14903. }
  14904. oappend (s);
  14905. }
  14906. static void
  14907. OP_I (int bytemode, int sizeflag)
  14908. {
  14909. bfd_signed_vma op;
  14910. bfd_signed_vma mask = -1;
  14911. switch (bytemode)
  14912. {
  14913. case b_mode:
  14914. FETCH_DATA (the_info, codep + 1);
  14915. op = *codep++;
  14916. mask = 0xff;
  14917. break;
  14918. case q_mode:
  14919. if (address_mode == mode_64bit)
  14920. {
  14921. op = get32s ();
  14922. break;
  14923. }
  14924. /* Fall through. */
  14925. case v_mode:
  14926. USED_REX (REX_W);
  14927. if (rex & REX_W)
  14928. op = get32s ();
  14929. else
  14930. {
  14931. if (sizeflag & DFLAG)
  14932. {
  14933. op = get32 ();
  14934. mask = 0xffffffff;
  14935. }
  14936. else
  14937. {
  14938. op = get16 ();
  14939. mask = 0xfffff;
  14940. }
  14941. used_prefixes |= (prefixes & PREFIX_DATA);
  14942. }
  14943. break;
  14944. case w_mode:
  14945. mask = 0xfffff;
  14946. op = get16 ();
  14947. break;
  14948. case const_1_mode:
  14949. if (intel_syntax)
  14950. oappend ("1");
  14951. return;
  14952. default:
  14953. oappend (INTERNAL_DISASSEMBLER_ERROR);
  14954. return;
  14955. }
  14956. op &= mask;
  14957. scratchbuf[0] = '$';
  14958. print_operand_value (scratchbuf + 1, 1, op);
  14959. oappend_maybe_intel (scratchbuf);
  14960. scratchbuf[0] = '\0';
  14961. }
  14962. static void
  14963. OP_I64 (int bytemode, int sizeflag)
  14964. {
  14965. bfd_signed_vma op;
  14966. bfd_signed_vma mask = -1;
  14967. if (address_mode != mode_64bit)
  14968. {
  14969. OP_I (bytemode, sizeflag);
  14970. return;
  14971. }
  14972. switch (bytemode)
  14973. {
  14974. case b_mode:
  14975. FETCH_DATA (the_info, codep + 1);
  14976. op = *codep++;
  14977. mask = 0xff;
  14978. break;
  14979. case v_mode:
  14980. USED_REX (REX_W);
  14981. if (rex & REX_W)
  14982. op = get64 ();
  14983. else
  14984. {
  14985. if (sizeflag & DFLAG)
  14986. {
  14987. op = get32 ();
  14988. mask = 0xffffffff;
  14989. }
  14990. else
  14991. {
  14992. op = get16 ();
  14993. mask = 0xfffff;
  14994. }
  14995. used_prefixes |= (prefixes & PREFIX_DATA);
  14996. }
  14997. break;
  14998. case w_mode:
  14999. mask = 0xfffff;
  15000. op = get16 ();
  15001. break;
  15002. default:
  15003. oappend (INTERNAL_DISASSEMBLER_ERROR);
  15004. return;
  15005. }
  15006. op &= mask;
  15007. scratchbuf[0] = '$';
  15008. print_operand_value (scratchbuf + 1, 1, op);
  15009. oappend_maybe_intel (scratchbuf);
  15010. scratchbuf[0] = '\0';
  15011. }
  15012. static void
  15013. OP_sI (int bytemode, int sizeflag)
  15014. {
  15015. bfd_signed_vma op;
  15016. switch (bytemode)
  15017. {
  15018. case b_mode:
  15019. case b_T_mode:
  15020. FETCH_DATA (the_info, codep + 1);
  15021. op = *codep++;
  15022. if ((op & 0x80) != 0)
  15023. op -= 0x100;
  15024. if (bytemode == b_T_mode)
  15025. {
  15026. if (address_mode != mode_64bit
  15027. || !((sizeflag & DFLAG) || (rex & REX_W)))
  15028. {
  15029. /* The operand-size prefix is overridden by a REX prefix. */
  15030. if ((sizeflag & DFLAG) || (rex & REX_W))
  15031. op &= 0xffffffff;
  15032. else
  15033. op &= 0xffff;
  15034. }
  15035. }
  15036. else
  15037. {
  15038. if (!(rex & REX_W))
  15039. {
  15040. if (sizeflag & DFLAG)
  15041. op &= 0xffffffff;
  15042. else
  15043. op &= 0xffff;
  15044. }
  15045. }
  15046. break;
  15047. case v_mode:
  15048. /* The operand-size prefix is overridden by a REX prefix. */
  15049. if ((sizeflag & DFLAG) || (rex & REX_W))
  15050. op = get32s ();
  15051. else
  15052. op = get16 ();
  15053. break;
  15054. default:
  15055. oappend (INTERNAL_DISASSEMBLER_ERROR);
  15056. return;
  15057. }
  15058. scratchbuf[0] = '$';
  15059. print_operand_value (scratchbuf + 1, 1, op);
  15060. oappend_maybe_intel (scratchbuf);
  15061. }
  15062. static void
  15063. OP_J (int bytemode, int sizeflag)
  15064. {
  15065. bfd_vma disp;
  15066. bfd_vma mask = -1;
  15067. bfd_vma segment = 0;
  15068. switch (bytemode)
  15069. {
  15070. case b_mode:
  15071. FETCH_DATA (the_info, codep + 1);
  15072. disp = *codep++;
  15073. if ((disp & 0x80) != 0)
  15074. disp -= 0x100;
  15075. break;
  15076. case v_mode:
  15077. if (isa64 == amd64)
  15078. USED_REX (REX_W);
  15079. if ((sizeflag & DFLAG)
  15080. || (address_mode == mode_64bit
  15081. && (isa64 != amd64 || (rex & REX_W))))
  15082. disp = get32s ();
  15083. else
  15084. {
  15085. disp = get16 ();
  15086. if ((disp & 0x8000) != 0)
  15087. disp -= 0x10000;
  15088. /* In 16bit mode, address is wrapped around at 64k within
  15089. the same segment. Otherwise, a data16 prefix on a jump
  15090. instruction means that the pc is masked to 16 bits after
  15091. the displacement is added! */
  15092. mask = 0xffff;
  15093. if ((prefixes & PREFIX_DATA) == 0)
  15094. segment = ((start_pc + (codep - start_codep))
  15095. & ~((bfd_vma) 0xffff));
  15096. }
  15097. if (address_mode != mode_64bit
  15098. || (isa64 == amd64 && !(rex & REX_W)))
  15099. used_prefixes |= (prefixes & PREFIX_DATA);
  15100. break;
  15101. default:
  15102. oappend (INTERNAL_DISASSEMBLER_ERROR);
  15103. return;
  15104. }
  15105. disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
  15106. set_op (disp, 0);
  15107. print_operand_value (scratchbuf, 1, disp);
  15108. oappend (scratchbuf);
  15109. }
  15110. static void
  15111. OP_SEG (int bytemode, int sizeflag)
  15112. {
  15113. if (bytemode == w_mode)
  15114. oappend (names_seg[modrm.reg]);
  15115. else
  15116. OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
  15117. }
  15118. static void
  15119. OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
  15120. {
  15121. int seg, offset;
  15122. if (sizeflag & DFLAG)
  15123. {
  15124. offset = get32 ();
  15125. seg = get16 ();
  15126. }
  15127. else
  15128. {
  15129. offset = get16 ();
  15130. seg = get16 ();
  15131. }
  15132. used_prefixes |= (prefixes & PREFIX_DATA);
  15133. if (intel_syntax)
  15134. sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
  15135. else
  15136. sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
  15137. oappend (scratchbuf);
  15138. }
  15139. static void
  15140. OP_OFF (int bytemode, int sizeflag)
  15141. {
  15142. bfd_vma off;
  15143. if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
  15144. intel_operand_size (bytemode, sizeflag);
  15145. append_seg ();
  15146. if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  15147. off = get32 ();
  15148. else
  15149. off = get16 ();
  15150. if (intel_syntax)
  15151. {
  15152. if (!active_seg_prefix)
  15153. {
  15154. oappend (names_seg[ds_reg - es_reg]);
  15155. oappend (":");
  15156. }
  15157. }
  15158. print_operand_value (scratchbuf, 1, off);
  15159. oappend (scratchbuf);
  15160. }
  15161. static void
  15162. OP_OFF64 (int bytemode, int sizeflag)
  15163. {
  15164. bfd_vma off;
  15165. if (address_mode != mode_64bit
  15166. || (prefixes & PREFIX_ADDR))
  15167. {
  15168. OP_OFF (bytemode, sizeflag);
  15169. return;
  15170. }
  15171. if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
  15172. intel_operand_size (bytemode, sizeflag);
  15173. append_seg ();
  15174. off = get64 ();
  15175. if (intel_syntax)
  15176. {
  15177. if (!active_seg_prefix)
  15178. {
  15179. oappend (names_seg[ds_reg - es_reg]);
  15180. oappend (":");
  15181. }
  15182. }
  15183. print_operand_value (scratchbuf, 1, off);
  15184. oappend (scratchbuf);
  15185. }
  15186. static void
  15187. ptr_reg (int code, int sizeflag)
  15188. {
  15189. const char *s;
  15190. *obufp++ = open_char;
  15191. used_prefixes |= (prefixes & PREFIX_ADDR);
  15192. if (address_mode == mode_64bit)
  15193. {
  15194. if (!(sizeflag & AFLAG))
  15195. s = names32[code - eAX_reg];
  15196. else
  15197. s = names64[code - eAX_reg];
  15198. }
  15199. else if (sizeflag & AFLAG)
  15200. s = names32[code - eAX_reg];
  15201. else
  15202. s = names16[code - eAX_reg];
  15203. oappend (s);
  15204. *obufp++ = close_char;
  15205. *obufp = 0;
  15206. }
  15207. static void
  15208. OP_ESreg (int code, int sizeflag)
  15209. {
  15210. if (intel_syntax)
  15211. {
  15212. switch (codep[-1])
  15213. {
  15214. case 0x6d: /* insw/insl */
  15215. intel_operand_size (z_mode, sizeflag);
  15216. break;
  15217. case 0xa5: /* movsw/movsl/movsq */
  15218. case 0xa7: /* cmpsw/cmpsl/cmpsq */
  15219. case 0xab: /* stosw/stosl */
  15220. case 0xaf: /* scasw/scasl */
  15221. intel_operand_size (v_mode, sizeflag);
  15222. break;
  15223. default:
  15224. intel_operand_size (b_mode, sizeflag);
  15225. }
  15226. }
  15227. oappend_maybe_intel ("%es:");
  15228. ptr_reg (code, sizeflag);
  15229. }
  15230. static void
  15231. OP_DSreg (int code, int sizeflag)
  15232. {
  15233. if (intel_syntax)
  15234. {
  15235. switch (codep[-1])
  15236. {
  15237. case 0x6f: /* outsw/outsl */
  15238. intel_operand_size (z_mode, sizeflag);
  15239. break;
  15240. case 0xa5: /* movsw/movsl/movsq */
  15241. case 0xa7: /* cmpsw/cmpsl/cmpsq */
  15242. case 0xad: /* lodsw/lodsl/lodsq */
  15243. intel_operand_size (v_mode, sizeflag);
  15244. break;
  15245. default:
  15246. intel_operand_size (b_mode, sizeflag);
  15247. }
  15248. }
  15249. /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
  15250. default segment register DS is printed. */
  15251. if (!active_seg_prefix)
  15252. active_seg_prefix = PREFIX_DS;
  15253. append_seg ();
  15254. ptr_reg (code, sizeflag);
  15255. }
  15256. static void
  15257. OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15258. {
  15259. int add;
  15260. if (rex & REX_R)
  15261. {
  15262. USED_REX (REX_R);
  15263. add = 8;
  15264. }
  15265. else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
  15266. {
  15267. all_prefixes[last_lock_prefix] = 0;
  15268. used_prefixes |= PREFIX_LOCK;
  15269. add = 8;
  15270. }
  15271. else
  15272. add = 0;
  15273. sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
  15274. oappend_maybe_intel (scratchbuf);
  15275. }
  15276. static void
  15277. OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15278. {
  15279. int add;
  15280. USED_REX (REX_R);
  15281. if (rex & REX_R)
  15282. add = 8;
  15283. else
  15284. add = 0;
  15285. if (intel_syntax)
  15286. sprintf (scratchbuf, "db%d", modrm.reg + add);
  15287. else
  15288. sprintf (scratchbuf, "%%db%d", modrm.reg + add);
  15289. oappend (scratchbuf);
  15290. }
  15291. static void
  15292. OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15293. {
  15294. sprintf (scratchbuf, "%%tr%d", modrm.reg);
  15295. oappend_maybe_intel (scratchbuf);
  15296. }
  15297. static void
  15298. OP_R (int bytemode, int sizeflag)
  15299. {
  15300. /* Skip mod/rm byte. */
  15301. MODRM_CHECK;
  15302. codep++;
  15303. OP_E_register (bytemode, sizeflag);
  15304. }
  15305. static void
  15306. OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15307. {
  15308. int reg = modrm.reg;
  15309. const char **names;
  15310. used_prefixes |= (prefixes & PREFIX_DATA);
  15311. if (prefixes & PREFIX_DATA)
  15312. {
  15313. names = names_xmm;
  15314. USED_REX (REX_R);
  15315. if (rex & REX_R)
  15316. reg += 8;
  15317. }
  15318. else
  15319. names = names_mm;
  15320. oappend (names[reg]);
  15321. }
  15322. static void
  15323. OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  15324. {
  15325. int reg = modrm.reg;
  15326. const char **names;
  15327. USED_REX (REX_R);
  15328. if (rex & REX_R)
  15329. reg += 8;
  15330. if (vex.evex)
  15331. {
  15332. if (!vex.r)
  15333. reg += 16;
  15334. }
  15335. if (need_vex
  15336. && bytemode != xmm_mode
  15337. && bytemode != xmmq_mode
  15338. && bytemode != evex_half_bcst_xmmq_mode
  15339. && bytemode != ymm_mode
  15340. && bytemode != scalar_mode)
  15341. {
  15342. switch (vex.length)
  15343. {
  15344. case 128:
  15345. names = names_xmm;
  15346. break;
  15347. case 256:
  15348. if (vex.w
  15349. || (bytemode != vex_vsib_q_w_dq_mode
  15350. && bytemode != vex_vsib_q_w_d_mode))
  15351. names = names_ymm;
  15352. else
  15353. names = names_xmm;
  15354. break;
  15355. case 512:
  15356. names = names_zmm;
  15357. break;
  15358. default:
  15359. abort ();
  15360. }
  15361. }
  15362. else if (bytemode == xmmq_mode
  15363. || bytemode == evex_half_bcst_xmmq_mode)
  15364. {
  15365. switch (vex.length)
  15366. {
  15367. case 128:
  15368. case 256:
  15369. names = names_xmm;
  15370. break;
  15371. case 512:
  15372. names = names_ymm;
  15373. break;
  15374. default:
  15375. abort ();
  15376. }
  15377. }
  15378. else if (bytemode == ymm_mode)
  15379. names = names_ymm;
  15380. else
  15381. names = names_xmm;
  15382. oappend (names[reg]);
  15383. }
  15384. static void
  15385. OP_EM (int bytemode, int sizeflag)
  15386. {
  15387. int reg;
  15388. const char **names;
  15389. if (modrm.mod != 3)
  15390. {
  15391. if (intel_syntax
  15392. && (bytemode == v_mode || bytemode == v_swap_mode))
  15393. {
  15394. bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
  15395. used_prefixes |= (prefixes & PREFIX_DATA);
  15396. }
  15397. OP_E (bytemode, sizeflag);
  15398. return;
  15399. }
  15400. if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
  15401. swap_operand ();
  15402. /* Skip mod/rm byte. */
  15403. MODRM_CHECK;
  15404. codep++;
  15405. used_prefixes |= (prefixes & PREFIX_DATA);
  15406. reg = modrm.rm;
  15407. if (prefixes & PREFIX_DATA)
  15408. {
  15409. names = names_xmm;
  15410. USED_REX (REX_B);
  15411. if (rex & REX_B)
  15412. reg += 8;
  15413. }
  15414. else
  15415. names = names_mm;
  15416. oappend (names[reg]);
  15417. }
  15418. /* cvt* are the only instructions in sse2 which have
  15419. both SSE and MMX operands and also have 0x66 prefix
  15420. in their opcode. 0x66 was originally used to differentiate
  15421. between SSE and MMX instruction(operands). So we have to handle the
  15422. cvt* separately using OP_EMC and OP_MXC */
  15423. static void
  15424. OP_EMC (int bytemode, int sizeflag)
  15425. {
  15426. if (modrm.mod != 3)
  15427. {
  15428. if (intel_syntax && bytemode == v_mode)
  15429. {
  15430. bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
  15431. used_prefixes |= (prefixes & PREFIX_DATA);
  15432. }
  15433. OP_E (bytemode, sizeflag);
  15434. return;
  15435. }
  15436. /* Skip mod/rm byte. */
  15437. MODRM_CHECK;
  15438. codep++;
  15439. used_prefixes |= (prefixes & PREFIX_DATA);
  15440. oappend (names_mm[modrm.rm]);
  15441. }
  15442. static void
  15443. OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15444. {
  15445. used_prefixes |= (prefixes & PREFIX_DATA);
  15446. oappend (names_mm[modrm.reg]);
  15447. }
  15448. static void
  15449. OP_EX (int bytemode, int sizeflag)
  15450. {
  15451. int reg;
  15452. const char **names;
  15453. /* Skip mod/rm byte. */
  15454. MODRM_CHECK;
  15455. codep++;
  15456. if (modrm.mod != 3)
  15457. {
  15458. OP_E_memory (bytemode, sizeflag);
  15459. return;
  15460. }
  15461. reg = modrm.rm;
  15462. USED_REX (REX_B);
  15463. if (rex & REX_B)
  15464. reg += 8;
  15465. if (vex.evex)
  15466. {
  15467. USED_REX (REX_X);
  15468. if ((rex & REX_X))
  15469. reg += 16;
  15470. }
  15471. if ((sizeflag & SUFFIX_ALWAYS)
  15472. && (bytemode == x_swap_mode
  15473. || bytemode == d_swap_mode
  15474. || bytemode == d_scalar_swap_mode
  15475. || bytemode == q_swap_mode
  15476. || bytemode == q_scalar_swap_mode))
  15477. swap_operand ();
  15478. if (need_vex
  15479. && bytemode != xmm_mode
  15480. && bytemode != xmmdw_mode
  15481. && bytemode != xmmqd_mode
  15482. && bytemode != xmm_mb_mode
  15483. && bytemode != xmm_mw_mode
  15484. && bytemode != xmm_md_mode
  15485. && bytemode != xmm_mq_mode
  15486. && bytemode != xmm_mdq_mode
  15487. && bytemode != xmmq_mode
  15488. && bytemode != evex_half_bcst_xmmq_mode
  15489. && bytemode != ymm_mode
  15490. && bytemode != d_scalar_mode
  15491. && bytemode != d_scalar_swap_mode
  15492. && bytemode != q_scalar_mode
  15493. && bytemode != q_scalar_swap_mode
  15494. && bytemode != vex_scalar_w_dq_mode)
  15495. {
  15496. switch (vex.length)
  15497. {
  15498. case 128:
  15499. names = names_xmm;
  15500. break;
  15501. case 256:
  15502. names = names_ymm;
  15503. break;
  15504. case 512:
  15505. names = names_zmm;
  15506. break;
  15507. default:
  15508. abort ();
  15509. }
  15510. }
  15511. else if (bytemode == xmmq_mode
  15512. || bytemode == evex_half_bcst_xmmq_mode)
  15513. {
  15514. switch (vex.length)
  15515. {
  15516. case 128:
  15517. case 256:
  15518. names = names_xmm;
  15519. break;
  15520. case 512:
  15521. names = names_ymm;
  15522. break;
  15523. default:
  15524. abort ();
  15525. }
  15526. }
  15527. else if (bytemode == ymm_mode)
  15528. names = names_ymm;
  15529. else
  15530. names = names_xmm;
  15531. oappend (names[reg]);
  15532. }
  15533. static void
  15534. OP_MS (int bytemode, int sizeflag)
  15535. {
  15536. if (modrm.mod == 3)
  15537. OP_EM (bytemode, sizeflag);
  15538. else
  15539. BadOp ();
  15540. }
  15541. static void
  15542. OP_XS (int bytemode, int sizeflag)
  15543. {
  15544. if (modrm.mod == 3)
  15545. OP_EX (bytemode, sizeflag);
  15546. else
  15547. BadOp ();
  15548. }
  15549. static void
  15550. OP_M (int bytemode, int sizeflag)
  15551. {
  15552. if (modrm.mod == 3)
  15553. /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
  15554. BadOp ();
  15555. else
  15556. OP_E (bytemode, sizeflag);
  15557. }
  15558. static void
  15559. OP_0f07 (int bytemode, int sizeflag)
  15560. {
  15561. if (modrm.mod != 3 || modrm.rm != 0)
  15562. BadOp ();
  15563. else
  15564. OP_E (bytemode, sizeflag);
  15565. }
  15566. /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
  15567. 32bit mode and "xchg %rax,%rax" in 64bit mode. */
  15568. static void
  15569. NOP_Fixup1 (int bytemode, int sizeflag)
  15570. {
  15571. if ((prefixes & PREFIX_DATA) != 0
  15572. || (rex != 0
  15573. && rex != 0x48
  15574. && address_mode == mode_64bit))
  15575. OP_REG (bytemode, sizeflag);
  15576. else
  15577. strcpy (obuf, "nop");
  15578. }
  15579. static void
  15580. NOP_Fixup2 (int bytemode, int sizeflag)
  15581. {
  15582. if ((prefixes & PREFIX_DATA) != 0
  15583. || (rex != 0
  15584. && rex != 0x48
  15585. && address_mode == mode_64bit))
  15586. OP_IMREG (bytemode, sizeflag);
  15587. }
  15588. static const char *const Suffix3DNow[] = {
  15589. /* 00 */ NULL, NULL, NULL, NULL,
  15590. /* 04 */ NULL, NULL, NULL, NULL,
  15591. /* 08 */ NULL, NULL, NULL, NULL,
  15592. /* 0C */ "pi2fw", "pi2fd", NULL, NULL,
  15593. /* 10 */ NULL, NULL, NULL, NULL,
  15594. /* 14 */ NULL, NULL, NULL, NULL,
  15595. /* 18 */ NULL, NULL, NULL, NULL,
  15596. /* 1C */ "pf2iw", "pf2id", NULL, NULL,
  15597. /* 20 */ NULL, NULL, NULL, NULL,
  15598. /* 24 */ NULL, NULL, NULL, NULL,
  15599. /* 28 */ NULL, NULL, NULL, NULL,
  15600. /* 2C */ NULL, NULL, NULL, NULL,
  15601. /* 30 */ NULL, NULL, NULL, NULL,
  15602. /* 34 */ NULL, NULL, NULL, NULL,
  15603. /* 38 */ NULL, NULL, NULL, NULL,
  15604. /* 3C */ NULL, NULL, NULL, NULL,
  15605. /* 40 */ NULL, NULL, NULL, NULL,
  15606. /* 44 */ NULL, NULL, NULL, NULL,
  15607. /* 48 */ NULL, NULL, NULL, NULL,
  15608. /* 4C */ NULL, NULL, NULL, NULL,
  15609. /* 50 */ NULL, NULL, NULL, NULL,
  15610. /* 54 */ NULL, NULL, NULL, NULL,
  15611. /* 58 */ NULL, NULL, NULL, NULL,
  15612. /* 5C */ NULL, NULL, NULL, NULL,
  15613. /* 60 */ NULL, NULL, NULL, NULL,
  15614. /* 64 */ NULL, NULL, NULL, NULL,
  15615. /* 68 */ NULL, NULL, NULL, NULL,
  15616. /* 6C */ NULL, NULL, NULL, NULL,
  15617. /* 70 */ NULL, NULL, NULL, NULL,
  15618. /* 74 */ NULL, NULL, NULL, NULL,
  15619. /* 78 */ NULL, NULL, NULL, NULL,
  15620. /* 7C */ NULL, NULL, NULL, NULL,
  15621. /* 80 */ NULL, NULL, NULL, NULL,
  15622. /* 84 */ NULL, NULL, NULL, NULL,
  15623. /* 88 */ NULL, NULL, "pfnacc", NULL,
  15624. /* 8C */ NULL, NULL, "pfpnacc", NULL,
  15625. /* 90 */ "pfcmpge", NULL, NULL, NULL,
  15626. /* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
  15627. /* 98 */ NULL, NULL, "pfsub", NULL,
  15628. /* 9C */ NULL, NULL, "pfadd", NULL,
  15629. /* A0 */ "pfcmpgt", NULL, NULL, NULL,
  15630. /* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
  15631. /* A8 */ NULL, NULL, "pfsubr", NULL,
  15632. /* AC */ NULL, NULL, "pfacc", NULL,
  15633. /* B0 */ "pfcmpeq", NULL, NULL, NULL,
  15634. /* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
  15635. /* B8 */ NULL, NULL, NULL, "pswapd",
  15636. /* BC */ NULL, NULL, NULL, "pavgusb",
  15637. /* C0 */ NULL, NULL, NULL, NULL,
  15638. /* C4 */ NULL, NULL, NULL, NULL,
  15639. /* C8 */ NULL, NULL, NULL, NULL,
  15640. /* CC */ NULL, NULL, NULL, NULL,
  15641. /* D0 */ NULL, NULL, NULL, NULL,
  15642. /* D4 */ NULL, NULL, NULL, NULL,
  15643. /* D8 */ NULL, NULL, NULL, NULL,
  15644. /* DC */ NULL, NULL, NULL, NULL,
  15645. /* E0 */ NULL, NULL, NULL, NULL,
  15646. /* E4 */ NULL, NULL, NULL, NULL,
  15647. /* E8 */ NULL, NULL, NULL, NULL,
  15648. /* EC */ NULL, NULL, NULL, NULL,
  15649. /* F0 */ NULL, NULL, NULL, NULL,
  15650. /* F4 */ NULL, NULL, NULL, NULL,
  15651. /* F8 */ NULL, NULL, NULL, NULL,
  15652. /* FC */ NULL, NULL, NULL, NULL,
  15653. };
  15654. static void
  15655. OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15656. {
  15657. const char *mnemonic;
  15658. FETCH_DATA (the_info, codep + 1);
  15659. /* AMD 3DNow! instructions are specified by an opcode suffix in the
  15660. place where an 8-bit immediate would normally go. ie. the last
  15661. byte of the instruction. */
  15662. obufp = mnemonicendp;
  15663. mnemonic = Suffix3DNow[*codep++ & 0xff];
  15664. if (mnemonic)
  15665. oappend (mnemonic);
  15666. else
  15667. {
  15668. /* Since a variable sized modrm/sib chunk is between the start
  15669. of the opcode (0x0f0f) and the opcode suffix, we need to do
  15670. all the modrm processing first, and don't know until now that
  15671. we have a bad opcode. This necessitates some cleaning up. */
  15672. op_out[0][0] = '\0';
  15673. op_out[1][0] = '\0';
  15674. BadOp ();
  15675. }
  15676. mnemonicendp = obufp;
  15677. }
  15678. static struct op simd_cmp_op[] =
  15679. {
  15680. { STRING_COMMA_LEN ("eq") },
  15681. { STRING_COMMA_LEN ("lt") },
  15682. { STRING_COMMA_LEN ("le") },
  15683. { STRING_COMMA_LEN ("unord") },
  15684. { STRING_COMMA_LEN ("neq") },
  15685. { STRING_COMMA_LEN ("nlt") },
  15686. { STRING_COMMA_LEN ("nle") },
  15687. { STRING_COMMA_LEN ("ord") }
  15688. };
  15689. static void
  15690. CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15691. {
  15692. unsigned int cmp_type;
  15693. FETCH_DATA (the_info, codep + 1);
  15694. cmp_type = *codep++ & 0xff;
  15695. if (cmp_type < ARRAY_SIZE (simd_cmp_op))
  15696. {
  15697. char suffix [3];
  15698. char *p = mnemonicendp - 2;
  15699. suffix[0] = p[0];
  15700. suffix[1] = p[1];
  15701. suffix[2] = '\0';
  15702. sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
  15703. mnemonicendp += simd_cmp_op[cmp_type].len;
  15704. }
  15705. else
  15706. {
  15707. /* We have a reserved extension byte. Output it directly. */
  15708. scratchbuf[0] = '$';
  15709. print_operand_value (scratchbuf + 1, 1, cmp_type);
  15710. oappend_maybe_intel (scratchbuf);
  15711. scratchbuf[0] = '\0';
  15712. }
  15713. }
  15714. static void
  15715. OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
  15716. int sizeflag ATTRIBUTE_UNUSED)
  15717. {
  15718. /* mwaitx %eax,%ecx,%ebx */
  15719. if (!intel_syntax)
  15720. {
  15721. const char **names = (address_mode == mode_64bit
  15722. ? names64 : names32);
  15723. strcpy (op_out[0], names[0]);
  15724. strcpy (op_out[1], names[1]);
  15725. strcpy (op_out[2], names[3]);
  15726. two_source_ops = 1;
  15727. }
  15728. /* Skip mod/rm byte. */
  15729. MODRM_CHECK;
  15730. codep++;
  15731. }
  15732. static void
  15733. OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
  15734. int sizeflag ATTRIBUTE_UNUSED)
  15735. {
  15736. /* mwait %eax,%ecx */
  15737. if (!intel_syntax)
  15738. {
  15739. const char **names = (address_mode == mode_64bit
  15740. ? names64 : names32);
  15741. strcpy (op_out[0], names[0]);
  15742. strcpy (op_out[1], names[1]);
  15743. two_source_ops = 1;
  15744. }
  15745. /* Skip mod/rm byte. */
  15746. MODRM_CHECK;
  15747. codep++;
  15748. }
  15749. static void
  15750. OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
  15751. int sizeflag ATTRIBUTE_UNUSED)
  15752. {
  15753. /* monitor %eax,%ecx,%edx" */
  15754. if (!intel_syntax)
  15755. {
  15756. const char **op1_names;
  15757. const char **names = (address_mode == mode_64bit
  15758. ? names64 : names32);
  15759. if (!(prefixes & PREFIX_ADDR))
  15760. op1_names = (address_mode == mode_16bit
  15761. ? names16 : names);
  15762. else
  15763. {
  15764. /* Remove "addr16/addr32". */
  15765. all_prefixes[last_addr_prefix] = 0;
  15766. op1_names = (address_mode != mode_32bit
  15767. ? names32 : names16);
  15768. used_prefixes |= PREFIX_ADDR;
  15769. }
  15770. strcpy (op_out[0], op1_names[0]);
  15771. strcpy (op_out[1], names[1]);
  15772. strcpy (op_out[2], names[2]);
  15773. two_source_ops = 1;
  15774. }
  15775. /* Skip mod/rm byte. */
  15776. MODRM_CHECK;
  15777. codep++;
  15778. }
  15779. static void
  15780. BadOp (void)
  15781. {
  15782. /* Throw away prefixes and 1st. opcode byte. */
  15783. codep = insn_codep + 1;
  15784. oappend ("(bad)");
  15785. }
  15786. static void
  15787. REP_Fixup (int bytemode, int sizeflag)
  15788. {
  15789. /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
  15790. lods and stos. */
  15791. if (prefixes & PREFIX_REPZ)
  15792. all_prefixes[last_repz_prefix] = REP_PREFIX;
  15793. switch (bytemode)
  15794. {
  15795. case al_reg:
  15796. case eAX_reg:
  15797. case indir_dx_reg:
  15798. OP_IMREG (bytemode, sizeflag);
  15799. break;
  15800. case eDI_reg:
  15801. OP_ESreg (bytemode, sizeflag);
  15802. break;
  15803. case eSI_reg:
  15804. OP_DSreg (bytemode, sizeflag);
  15805. break;
  15806. default:
  15807. abort ();
  15808. break;
  15809. }
  15810. }
  15811. /* For BND-prefixed instructions 0xF2 prefix should be displayed as
  15812. "bnd". */
  15813. static void
  15814. BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15815. {
  15816. if (prefixes & PREFIX_REPNZ)
  15817. all_prefixes[last_repnz_prefix] = BND_PREFIX;
  15818. }
  15819. /* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
  15820. "notrack". */
  15821. static void
  15822. NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
  15823. int sizeflag ATTRIBUTE_UNUSED)
  15824. {
  15825. if (active_seg_prefix == PREFIX_DS
  15826. && (address_mode != mode_64bit || last_data_prefix < 0))
  15827. {
  15828. /* NOTRACK prefix is only valid on indirect branch instructions.
  15829. NB: DATA prefix is unsupported for Intel64. */
  15830. active_seg_prefix = 0;
  15831. all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
  15832. }
  15833. }
  15834. /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
  15835. "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
  15836. */
  15837. static void
  15838. HLE_Fixup1 (int bytemode, int sizeflag)
  15839. {
  15840. if (modrm.mod != 3
  15841. && (prefixes & PREFIX_LOCK) != 0)
  15842. {
  15843. if (prefixes & PREFIX_REPZ)
  15844. all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15845. if (prefixes & PREFIX_REPNZ)
  15846. all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
  15847. }
  15848. OP_E (bytemode, sizeflag);
  15849. }
  15850. /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
  15851. "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
  15852. */
  15853. static void
  15854. HLE_Fixup2 (int bytemode, int sizeflag)
  15855. {
  15856. if (modrm.mod != 3)
  15857. {
  15858. if (prefixes & PREFIX_REPZ)
  15859. all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15860. if (prefixes & PREFIX_REPNZ)
  15861. all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
  15862. }
  15863. OP_E (bytemode, sizeflag);
  15864. }
  15865. /* Similar to OP_E. But the 0xf3 prefixes should be displayed as
  15866. "xrelease" for memory operand. No check for LOCK prefix. */
  15867. static void
  15868. HLE_Fixup3 (int bytemode, int sizeflag)
  15869. {
  15870. if (modrm.mod != 3
  15871. && last_repz_prefix > last_repnz_prefix
  15872. && (prefixes & PREFIX_REPZ) != 0)
  15873. all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15874. OP_E (bytemode, sizeflag);
  15875. }
  15876. static void
  15877. CMPXCHG8B_Fixup (int bytemode, int sizeflag)
  15878. {
  15879. USED_REX (REX_W);
  15880. if (rex & REX_W)
  15881. {
  15882. /* Change cmpxchg8b to cmpxchg16b. */
  15883. char *p = mnemonicendp - 2;
  15884. mnemonicendp = stpcpy (p, "16b");
  15885. bytemode = o_mode;
  15886. }
  15887. else if ((prefixes & PREFIX_LOCK) != 0)
  15888. {
  15889. if (prefixes & PREFIX_REPZ)
  15890. all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15891. if (prefixes & PREFIX_REPNZ)
  15892. all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
  15893. }
  15894. OP_M (bytemode, sizeflag);
  15895. }
  15896. static void
  15897. XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
  15898. {
  15899. const char **names;
  15900. if (need_vex)
  15901. {
  15902. switch (vex.length)
  15903. {
  15904. case 128:
  15905. names = names_xmm;
  15906. break;
  15907. case 256:
  15908. names = names_ymm;
  15909. break;
  15910. default:
  15911. abort ();
  15912. }
  15913. }
  15914. else
  15915. names = names_xmm;
  15916. oappend (names[reg]);
  15917. }
  15918. static void
  15919. CRC32_Fixup (int bytemode, int sizeflag)
  15920. {
  15921. /* Add proper suffix to "crc32". */
  15922. char *p = mnemonicendp;
  15923. switch (bytemode)
  15924. {
  15925. case b_mode:
  15926. if (intel_syntax)
  15927. goto skip;
  15928. *p++ = 'b';
  15929. break;
  15930. case v_mode:
  15931. if (intel_syntax)
  15932. goto skip;
  15933. USED_REX (REX_W);
  15934. if (rex & REX_W)
  15935. *p++ = 'q';
  15936. else
  15937. {
  15938. if (sizeflag & DFLAG)
  15939. *p++ = 'l';
  15940. else
  15941. *p++ = 'w';
  15942. used_prefixes |= (prefixes & PREFIX_DATA);
  15943. }
  15944. break;
  15945. default:
  15946. oappend (INTERNAL_DISASSEMBLER_ERROR);
  15947. break;
  15948. }
  15949. mnemonicendp = p;
  15950. *p = '\0';
  15951. skip:
  15952. if (modrm.mod == 3)
  15953. {
  15954. int add;
  15955. /* Skip mod/rm byte. */
  15956. MODRM_CHECK;
  15957. codep++;
  15958. USED_REX (REX_B);
  15959. add = (rex & REX_B) ? 8 : 0;
  15960. if (bytemode == b_mode)
  15961. {
  15962. USED_REX (0);
  15963. if (rex)
  15964. oappend (names8rex[modrm.rm + add]);
  15965. else
  15966. oappend (names8[modrm.rm + add]);
  15967. }
  15968. else
  15969. {
  15970. USED_REX (REX_W);
  15971. if (rex & REX_W)
  15972. oappend (names64[modrm.rm + add]);
  15973. else if ((prefixes & PREFIX_DATA))
  15974. oappend (names16[modrm.rm + add]);
  15975. else
  15976. oappend (names32[modrm.rm + add]);
  15977. }
  15978. }
  15979. else
  15980. OP_E (bytemode, sizeflag);
  15981. }
  15982. static void
  15983. FXSAVE_Fixup (int bytemode, int sizeflag)
  15984. {
  15985. /* Add proper suffix to "fxsave" and "fxrstor". */
  15986. USED_REX (REX_W);
  15987. if (rex & REX_W)
  15988. {
  15989. char *p = mnemonicendp;
  15990. *p++ = '6';
  15991. *p++ = '4';
  15992. *p = '\0';
  15993. mnemonicendp = p;
  15994. }
  15995. OP_M (bytemode, sizeflag);
  15996. }
  15997. static void
  15998. PCMPESTR_Fixup (int bytemode, int sizeflag)
  15999. {
  16000. /* Add proper suffix to "{,v}pcmpestr{i,m}". */
  16001. if (!intel_syntax)
  16002. {
  16003. char *p = mnemonicendp;
  16004. USED_REX (REX_W);
  16005. if (rex & REX_W)
  16006. *p++ = 'q';
  16007. else if (sizeflag & SUFFIX_ALWAYS)
  16008. *p++ = 'l';
  16009. *p = '\0';
  16010. mnemonicendp = p;
  16011. }
  16012. OP_EX (bytemode, sizeflag);
  16013. }
  16014. /* Display the destination register operand for instructions with
  16015. VEX. */
  16016. static void
  16017. OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16018. {
  16019. int reg;
  16020. const char **names;
  16021. if (!need_vex)
  16022. abort ();
  16023. if (!need_vex_reg)
  16024. return;
  16025. reg = vex.register_specifier;
  16026. if (vex.evex)
  16027. {
  16028. if (!vex.v)
  16029. reg += 16;
  16030. }
  16031. if (bytemode == vex_scalar_mode)
  16032. {
  16033. oappend (names_xmm[reg]);
  16034. return;
  16035. }
  16036. switch (vex.length)
  16037. {
  16038. case 128:
  16039. switch (bytemode)
  16040. {
  16041. case vex_mode:
  16042. case vex128_mode:
  16043. case vex_vsib_q_w_dq_mode:
  16044. case vex_vsib_q_w_d_mode:
  16045. names = names_xmm;
  16046. break;
  16047. case dq_mode:
  16048. if (vex.w)
  16049. names = names64;
  16050. else
  16051. names = names32;
  16052. break;
  16053. case mask_bd_mode:
  16054. case mask_mode:
  16055. if (reg > 0x7)
  16056. {
  16057. oappend ("(bad)");
  16058. return;
  16059. }
  16060. names = names_mask;
  16061. break;
  16062. default:
  16063. abort ();
  16064. return;
  16065. }
  16066. break;
  16067. case 256:
  16068. switch (bytemode)
  16069. {
  16070. case vex_mode:
  16071. case vex256_mode:
  16072. names = names_ymm;
  16073. break;
  16074. case vex_vsib_q_w_dq_mode:
  16075. case vex_vsib_q_w_d_mode:
  16076. names = vex.w ? names_ymm : names_xmm;
  16077. break;
  16078. case mask_bd_mode:
  16079. case mask_mode:
  16080. if (reg > 0x7)
  16081. {
  16082. oappend ("(bad)");
  16083. return;
  16084. }
  16085. names = names_mask;
  16086. break;
  16087. default:
  16088. /* See PR binutils/20893 for a reproducer. */
  16089. oappend ("(bad)");
  16090. return;
  16091. }
  16092. break;
  16093. case 512:
  16094. names = names_zmm;
  16095. break;
  16096. default:
  16097. abort ();
  16098. break;
  16099. }
  16100. oappend (names[reg]);
  16101. }
  16102. /* Get the VEX immediate byte without moving codep. */
  16103. static unsigned char
  16104. get_vex_imm8 (int sizeflag, int opnum)
  16105. {
  16106. int bytes_before_imm = 0;
  16107. if (modrm.mod != 3)
  16108. {
  16109. /* There are SIB/displacement bytes. */
  16110. if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  16111. {
  16112. /* 32/64 bit address mode */
  16113. int base = modrm.rm;
  16114. /* Check SIB byte. */
  16115. if (base == 4)
  16116. {
  16117. FETCH_DATA (the_info, codep + 1);
  16118. base = *codep & 7;
  16119. /* When decoding the third source, don't increase
  16120. bytes_before_imm as this has already been incremented
  16121. by one in OP_E_memory while decoding the second
  16122. source operand. */
  16123. if (opnum == 0)
  16124. bytes_before_imm++;
  16125. }
  16126. /* Don't increase bytes_before_imm when decoding the third source,
  16127. it has already been incremented by OP_E_memory while decoding
  16128. the second source operand. */
  16129. if (opnum == 0)
  16130. {
  16131. switch (modrm.mod)
  16132. {
  16133. case 0:
  16134. /* When modrm.rm == 5 or modrm.rm == 4 and base in
  16135. SIB == 5, there is a 4 byte displacement. */
  16136. if (base != 5)
  16137. /* No displacement. */
  16138. break;
  16139. /* Fall through. */
  16140. case 2:
  16141. /* 4 byte displacement. */
  16142. bytes_before_imm += 4;
  16143. break;
  16144. case 1:
  16145. /* 1 byte displacement. */
  16146. bytes_before_imm++;
  16147. break;
  16148. }
  16149. }
  16150. }
  16151. else
  16152. {
  16153. /* 16 bit address mode */
  16154. /* Don't increase bytes_before_imm when decoding the third source,
  16155. it has already been incremented by OP_E_memory while decoding
  16156. the second source operand. */
  16157. if (opnum == 0)
  16158. {
  16159. switch (modrm.mod)
  16160. {
  16161. case 0:
  16162. /* When modrm.rm == 6, there is a 2 byte displacement. */
  16163. if (modrm.rm != 6)
  16164. /* No displacement. */
  16165. break;
  16166. /* Fall through. */
  16167. case 2:
  16168. /* 2 byte displacement. */
  16169. bytes_before_imm += 2;
  16170. break;
  16171. case 1:
  16172. /* 1 byte displacement: when decoding the third source,
  16173. don't increase bytes_before_imm as this has already
  16174. been incremented by one in OP_E_memory while decoding
  16175. the second source operand. */
  16176. if (opnum == 0)
  16177. bytes_before_imm++;
  16178. break;
  16179. }
  16180. }
  16181. }
  16182. }
  16183. FETCH_DATA (the_info, codep + bytes_before_imm + 1);
  16184. return codep [bytes_before_imm];
  16185. }
  16186. static void
  16187. OP_EX_VexReg (int bytemode, int sizeflag, int reg)
  16188. {
  16189. const char **names;
  16190. if (reg == -1 && modrm.mod != 3)
  16191. {
  16192. OP_E_memory (bytemode, sizeflag);
  16193. return;
  16194. }
  16195. else
  16196. {
  16197. if (reg == -1)
  16198. {
  16199. reg = modrm.rm;
  16200. USED_REX (REX_B);
  16201. if (rex & REX_B)
  16202. reg += 8;
  16203. }
  16204. else if (reg > 7 && address_mode != mode_64bit)
  16205. BadOp ();
  16206. }
  16207. switch (vex.length)
  16208. {
  16209. case 128:
  16210. names = names_xmm;
  16211. break;
  16212. case 256:
  16213. names = names_ymm;
  16214. break;
  16215. default:
  16216. abort ();
  16217. }
  16218. oappend (names[reg]);
  16219. }
  16220. static void
  16221. OP_EX_VexImmW (int bytemode, int sizeflag)
  16222. {
  16223. int reg = -1;
  16224. static unsigned char vex_imm8;
  16225. if (vex_w_done == 0)
  16226. {
  16227. vex_w_done = 1;
  16228. /* Skip mod/rm byte. */
  16229. MODRM_CHECK;
  16230. codep++;
  16231. vex_imm8 = get_vex_imm8 (sizeflag, 0);
  16232. if (vex.w)
  16233. reg = vex_imm8 >> 4;
  16234. OP_EX_VexReg (bytemode, sizeflag, reg);
  16235. }
  16236. else if (vex_w_done == 1)
  16237. {
  16238. vex_w_done = 2;
  16239. if (!vex.w)
  16240. reg = vex_imm8 >> 4;
  16241. OP_EX_VexReg (bytemode, sizeflag, reg);
  16242. }
  16243. else
  16244. {
  16245. /* Output the imm8 directly. */
  16246. scratchbuf[0] = '$';
  16247. print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
  16248. oappend_maybe_intel (scratchbuf);
  16249. scratchbuf[0] = '\0';
  16250. codep++;
  16251. }
  16252. }
  16253. static void
  16254. OP_Vex_2src (int bytemode, int sizeflag)
  16255. {
  16256. if (modrm.mod == 3)
  16257. {
  16258. int reg = modrm.rm;
  16259. USED_REX (REX_B);
  16260. if (rex & REX_B)
  16261. reg += 8;
  16262. oappend (names_xmm[reg]);
  16263. }
  16264. else
  16265. {
  16266. if (intel_syntax
  16267. && (bytemode == v_mode || bytemode == v_swap_mode))
  16268. {
  16269. bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
  16270. used_prefixes |= (prefixes & PREFIX_DATA);
  16271. }
  16272. OP_E (bytemode, sizeflag);
  16273. }
  16274. }
  16275. static void
  16276. OP_Vex_2src_1 (int bytemode, int sizeflag)
  16277. {
  16278. if (modrm.mod == 3)
  16279. {
  16280. /* Skip mod/rm byte. */
  16281. MODRM_CHECK;
  16282. codep++;
  16283. }
  16284. if (vex.w)
  16285. oappend (names_xmm[vex.register_specifier]);
  16286. else
  16287. OP_Vex_2src (bytemode, sizeflag);
  16288. }
  16289. static void
  16290. OP_Vex_2src_2 (int bytemode, int sizeflag)
  16291. {
  16292. if (vex.w)
  16293. OP_Vex_2src (bytemode, sizeflag);
  16294. else
  16295. oappend (names_xmm[vex.register_specifier]);
  16296. }
  16297. static void
  16298. OP_EX_VexW (int bytemode, int sizeflag)
  16299. {
  16300. int reg = -1;
  16301. if (!vex_w_done)
  16302. {
  16303. vex_w_done = 1;
  16304. /* Skip mod/rm byte. */
  16305. MODRM_CHECK;
  16306. codep++;
  16307. if (vex.w)
  16308. reg = get_vex_imm8 (sizeflag, 0) >> 4;
  16309. }
  16310. else
  16311. {
  16312. if (!vex.w)
  16313. reg = get_vex_imm8 (sizeflag, 1) >> 4;
  16314. }
  16315. OP_EX_VexReg (bytemode, sizeflag, reg);
  16316. }
  16317. static void
  16318. VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
  16319. int sizeflag ATTRIBUTE_UNUSED)
  16320. {
  16321. /* Skip the immediate byte and check for invalid bits. */
  16322. FETCH_DATA (the_info, codep + 1);
  16323. if (*codep++ & 0xf)
  16324. BadOp ();
  16325. }
  16326. static void
  16327. OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16328. {
  16329. int reg;
  16330. const char **names;
  16331. FETCH_DATA (the_info, codep + 1);
  16332. reg = *codep++;
  16333. if (bytemode != x_mode)
  16334. abort ();
  16335. if (reg & 0xf)
  16336. BadOp ();
  16337. reg >>= 4;
  16338. if (reg > 7 && address_mode != mode_64bit)
  16339. BadOp ();
  16340. switch (vex.length)
  16341. {
  16342. case 128:
  16343. names = names_xmm;
  16344. break;
  16345. case 256:
  16346. names = names_ymm;
  16347. break;
  16348. default:
  16349. abort ();
  16350. }
  16351. oappend (names[reg]);
  16352. }
  16353. static void
  16354. OP_XMM_VexW (int bytemode, int sizeflag)
  16355. {
  16356. /* Turn off the REX.W bit since it is used for swapping operands
  16357. now. */
  16358. rex &= ~REX_W;
  16359. OP_XMM (bytemode, sizeflag);
  16360. }
  16361. static void
  16362. OP_EX_Vex (int bytemode, int sizeflag)
  16363. {
  16364. if (modrm.mod != 3)
  16365. {
  16366. if (vex.register_specifier != 0)
  16367. BadOp ();
  16368. need_vex_reg = 0;
  16369. }
  16370. OP_EX (bytemode, sizeflag);
  16371. }
  16372. static void
  16373. OP_XMM_Vex (int bytemode, int sizeflag)
  16374. {
  16375. if (modrm.mod != 3)
  16376. {
  16377. if (vex.register_specifier != 0)
  16378. BadOp ();
  16379. need_vex_reg = 0;
  16380. }
  16381. OP_XMM (bytemode, sizeflag);
  16382. }
  16383. static void
  16384. VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16385. {
  16386. switch (vex.length)
  16387. {
  16388. case 128:
  16389. mnemonicendp = stpcpy (obuf, "vzeroupper");
  16390. break;
  16391. case 256:
  16392. mnemonicendp = stpcpy (obuf, "vzeroall");
  16393. break;
  16394. default:
  16395. abort ();
  16396. }
  16397. }
  16398. static struct op vex_cmp_op[] =
  16399. {
  16400. { STRING_COMMA_LEN ("eq") },
  16401. { STRING_COMMA_LEN ("lt") },
  16402. { STRING_COMMA_LEN ("le") },
  16403. { STRING_COMMA_LEN ("unord") },
  16404. { STRING_COMMA_LEN ("neq") },
  16405. { STRING_COMMA_LEN ("nlt") },
  16406. { STRING_COMMA_LEN ("nle") },
  16407. { STRING_COMMA_LEN ("ord") },
  16408. { STRING_COMMA_LEN ("eq_uq") },
  16409. { STRING_COMMA_LEN ("nge") },
  16410. { STRING_COMMA_LEN ("ngt") },
  16411. { STRING_COMMA_LEN ("false") },
  16412. { STRING_COMMA_LEN ("neq_oq") },
  16413. { STRING_COMMA_LEN ("ge") },
  16414. { STRING_COMMA_LEN ("gt") },
  16415. { STRING_COMMA_LEN ("true") },
  16416. { STRING_COMMA_LEN ("eq_os") },
  16417. { STRING_COMMA_LEN ("lt_oq") },
  16418. { STRING_COMMA_LEN ("le_oq") },
  16419. { STRING_COMMA_LEN ("unord_s") },
  16420. { STRING_COMMA_LEN ("neq_us") },
  16421. { STRING_COMMA_LEN ("nlt_uq") },
  16422. { STRING_COMMA_LEN ("nle_uq") },
  16423. { STRING_COMMA_LEN ("ord_s") },
  16424. { STRING_COMMA_LEN ("eq_us") },
  16425. { STRING_COMMA_LEN ("nge_uq") },
  16426. { STRING_COMMA_LEN ("ngt_uq") },
  16427. { STRING_COMMA_LEN ("false_os") },
  16428. { STRING_COMMA_LEN ("neq_os") },
  16429. { STRING_COMMA_LEN ("ge_oq") },
  16430. { STRING_COMMA_LEN ("gt_oq") },
  16431. { STRING_COMMA_LEN ("true_us") },
  16432. };
  16433. static void
  16434. VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16435. {
  16436. unsigned int cmp_type;
  16437. FETCH_DATA (the_info, codep + 1);
  16438. cmp_type = *codep++ & 0xff;
  16439. if (cmp_type < ARRAY_SIZE (vex_cmp_op))
  16440. {
  16441. char suffix [3];
  16442. char *p = mnemonicendp - 2;
  16443. suffix[0] = p[0];
  16444. suffix[1] = p[1];
  16445. suffix[2] = '\0';
  16446. sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
  16447. mnemonicendp += vex_cmp_op[cmp_type].len;
  16448. }
  16449. else
  16450. {
  16451. /* We have a reserved extension byte. Output it directly. */
  16452. scratchbuf[0] = '$';
  16453. print_operand_value (scratchbuf + 1, 1, cmp_type);
  16454. oappend_maybe_intel (scratchbuf);
  16455. scratchbuf[0] = '\0';
  16456. }
  16457. }
  16458. static void
  16459. VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
  16460. int sizeflag ATTRIBUTE_UNUSED)
  16461. {
  16462. unsigned int cmp_type;
  16463. if (!vex.evex)
  16464. abort ();
  16465. FETCH_DATA (the_info, codep + 1);
  16466. cmp_type = *codep++ & 0xff;
  16467. /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
  16468. If it's the case, print suffix, otherwise - print the immediate. */
  16469. if (cmp_type < ARRAY_SIZE (simd_cmp_op)
  16470. && cmp_type != 3
  16471. && cmp_type != 7)
  16472. {
  16473. char suffix [3];
  16474. char *p = mnemonicendp - 2;
  16475. /* vpcmp* can have both one- and two-lettered suffix. */
  16476. if (p[0] == 'p')
  16477. {
  16478. p++;
  16479. suffix[0] = p[0];
  16480. suffix[1] = '\0';
  16481. }
  16482. else
  16483. {
  16484. suffix[0] = p[0];
  16485. suffix[1] = p[1];
  16486. suffix[2] = '\0';
  16487. }
  16488. sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
  16489. mnemonicendp += simd_cmp_op[cmp_type].len;
  16490. }
  16491. else
  16492. {
  16493. /* We have a reserved extension byte. Output it directly. */
  16494. scratchbuf[0] = '$';
  16495. print_operand_value (scratchbuf + 1, 1, cmp_type);
  16496. oappend_maybe_intel (scratchbuf);
  16497. scratchbuf[0] = '\0';
  16498. }
  16499. }
  16500. static const struct op pclmul_op[] =
  16501. {
  16502. { STRING_COMMA_LEN ("lql") },
  16503. { STRING_COMMA_LEN ("hql") },
  16504. { STRING_COMMA_LEN ("lqh") },
  16505. { STRING_COMMA_LEN ("hqh") }
  16506. };
  16507. static void
  16508. PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
  16509. int sizeflag ATTRIBUTE_UNUSED)
  16510. {
  16511. unsigned int pclmul_type;
  16512. FETCH_DATA (the_info, codep + 1);
  16513. pclmul_type = *codep++ & 0xff;
  16514. switch (pclmul_type)
  16515. {
  16516. case 0x10:
  16517. pclmul_type = 2;
  16518. break;
  16519. case 0x11:
  16520. pclmul_type = 3;
  16521. break;
  16522. default:
  16523. break;
  16524. }
  16525. if (pclmul_type < ARRAY_SIZE (pclmul_op))
  16526. {
  16527. char suffix [4];
  16528. char *p = mnemonicendp - 3;
  16529. suffix[0] = p[0];
  16530. suffix[1] = p[1];
  16531. suffix[2] = p[2];
  16532. suffix[3] = '\0';
  16533. sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
  16534. mnemonicendp += pclmul_op[pclmul_type].len;
  16535. }
  16536. else
  16537. {
  16538. /* We have a reserved extension byte. Output it directly. */
  16539. scratchbuf[0] = '$';
  16540. print_operand_value (scratchbuf + 1, 1, pclmul_type);
  16541. oappend_maybe_intel (scratchbuf);
  16542. scratchbuf[0] = '\0';
  16543. }
  16544. }
  16545. static void
  16546. MOVBE_Fixup (int bytemode, int sizeflag)
  16547. {
  16548. /* Add proper suffix to "movbe". */
  16549. char *p = mnemonicendp;
  16550. switch (bytemode)
  16551. {
  16552. case v_mode:
  16553. if (intel_syntax)
  16554. goto skip;
  16555. USED_REX (REX_W);
  16556. if (sizeflag & SUFFIX_ALWAYS)
  16557. {
  16558. if (rex & REX_W)
  16559. *p++ = 'q';
  16560. else
  16561. {
  16562. if (sizeflag & DFLAG)
  16563. *p++ = 'l';
  16564. else
  16565. *p++ = 'w';
  16566. used_prefixes |= (prefixes & PREFIX_DATA);
  16567. }
  16568. }
  16569. break;
  16570. default:
  16571. oappend (INTERNAL_DISASSEMBLER_ERROR);
  16572. break;
  16573. }
  16574. mnemonicendp = p;
  16575. *p = '\0';
  16576. skip:
  16577. OP_M (bytemode, sizeflag);
  16578. }
  16579. static void
  16580. OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16581. {
  16582. int reg;
  16583. const char **names;
  16584. /* Skip mod/rm byte. */
  16585. MODRM_CHECK;
  16586. codep++;
  16587. if (vex.w)
  16588. names = names64;
  16589. else
  16590. names = names32;
  16591. reg = modrm.rm;
  16592. USED_REX (REX_B);
  16593. if (rex & REX_B)
  16594. reg += 8;
  16595. oappend (names[reg]);
  16596. }
  16597. static void
  16598. OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16599. {
  16600. const char **names;
  16601. if (vex.w)
  16602. names = names64;
  16603. else
  16604. names = names32;
  16605. oappend (names[vex.register_specifier]);
  16606. }
  16607. static void
  16608. OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16609. {
  16610. if (!vex.evex
  16611. || (bytemode != mask_mode && bytemode != mask_bd_mode))
  16612. abort ();
  16613. USED_REX (REX_R);
  16614. if ((rex & REX_R) != 0 || !vex.r)
  16615. {
  16616. BadOp ();
  16617. return;
  16618. }
  16619. oappend (names_mask [modrm.reg]);
  16620. }
  16621. static void
  16622. OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16623. {
  16624. if (!vex.evex
  16625. || (bytemode != evex_rounding_mode
  16626. && bytemode != evex_sae_mode))
  16627. abort ();
  16628. if (modrm.mod == 3 && vex.b)
  16629. switch (bytemode)
  16630. {
  16631. case evex_rounding_mode:
  16632. oappend (names_rounding[vex.ll]);
  16633. break;
  16634. case evex_sae_mode:
  16635. oappend ("{sae}");
  16636. break;
  16637. default:
  16638. break;
  16639. }
  16640. }