Nav apraksta
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

BurstDisassembler.Core.x86.info.cs 499KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095
  1. namespace Unity.Burst.Editor
  2. {
  3. internal partial class BurstDisassembler
  4. {
  5. /// <summary>
  6. /// Instruction information provider for x86-64.
  7. /// </summary>
  8. internal class X86AsmInstructionInfo
  9. {
  10. internal static bool GetX86InstructionInfo(string instructionName, out string instructionInfo)
  11. {
  12. var returnValue = true;
  13. switch (instructionName)
  14. {
  15. case "aaa":
  16. instructionInfo = "Adjusts the sum of two unpacked BCD (Binary-Coded Decimal) values to create an unpacked BCD result." +
  17. " The AL register is the implied source and destination operand for this instruction. " +
  18. "The AAA instruction is only useful when it follows an ADD instruction that adds " +
  19. "(binary addition) two unpacked BCD values and stores a byte result in the AL register. " +
  20. "The AAA instruction then adjusts the contents of the AL register to contain " +
  21. "the correct 1-digit unpacked BCD result.";
  22. break;
  23. case "aad":
  24. instructionInfo = "Adjusts two unpacked BCD (Binary-Coded Decimal) digits (the least-significant digit in the AL register " +
  25. "and the most-significant digit in the AH register) so that a division operation " +
  26. "performed on the result will yield a correct unpacked BCD value. The AAD instruction " +
  27. "is only useful when it precedes a DIV instruction that divides (binary division) " +
  28. "the adjusted value in the AX register by an unpacked BCD value.";
  29. break;
  30. case "aam":
  31. instructionInfo = "Adjusts the result of the multiplication of two unpacked BCD (Binary-Coded Decimal) values to create " +
  32. "a pair of unpacked (base 10) BCD values. The AX register is the implied source " +
  33. "and destination operand for this instruction. The AAM instruction is only useful " +
  34. "when it follows an MUL instruction that multiplies (binary multiplication) " +
  35. "two unpacked BCD values and stores a word result in the AX register. " +
  36. "The AAM instruction then adjusts the contents of the AX register to contain " +
  37. "the correct 2-digit unpacked (base 10) BCD result.";
  38. break;
  39. case "aas":
  40. instructionInfo = "Adjusts the result of the subtraction of two unpacked BCD (Binary-Coded Decimal) values to create a " +
  41. "unpacked BCD result. The AL register is the implied source and destination " +
  42. "operand for this instruction. The AAS instruction is only useful when it " +
  43. "follows a SUB instruction that subtracts (binary subtraction) one unpacked " +
  44. "BCD value from another and stores a byte result in the AL register. " +
  45. "The AAA instruction then adjusts the contents of the AL register to contain " +
  46. "the correct 1-digit unpacked BCD result.";
  47. break;
  48. case "adc":
  49. instructionInfo = "Adds the destination operand (first operand), the source operand (second operand), " +
  50. "and the carry (CF) flag and stores the result in the destination operand. " +
  51. "The destination operand can be a register or a memory location; the source " +
  52. "operand can be an immediate, a register, or a memory location. " +
  53. "(However, two memory operands cannot be used in one instruction.) " +
  54. "The state of the CF flag represents a carry from a previous addition. " +
  55. "When an immediate value is used as an operand, it is sign-extended to the " +
  56. "length of the destination operand format.";
  57. break;
  58. case "adcx":
  59. instructionInfo = "Performs an unsigned addition of the destination operand (first operand), " +
  60. "the source operand (second operand) and the carry-flag (CF) and stores the " +
  61. "result in the destination operand. The destination operand is a " +
  62. "general-purpose register, whereas the source operand can be a general-purpose " +
  63. "register or memory location. The state of CF can represent a carry from a " +
  64. "previous addition. The instruction sets the CF flag with the carry generated " +
  65. "by the unsigned addition of the operands.";
  66. break;
  67. case "add":
  68. instructionInfo = "Adds the destination operand (first operand) and the source operand " +
  69. "(second operand) and then stores the result in the destination operand. " +
  70. "The destination operand can be a register or a memory location; the source " +
  71. "operand can be an immediate, a register, or a memory location. " +
  72. "(However, two memory operands cannot be used in one instruction.) When an " +
  73. "immediate value is used as an operand, it is sign-extended to the length of " +
  74. "the destination operand format.";
  75. break;
  76. case "addpd":
  77. case "vaddpd":
  78. instructionInfo = "Add two, four or eight packed double-precision floating-point values from the " +
  79. "first source operand to the second source operand, and stores the " +
  80. "packed double-precision floating-point results in the destination operand.";
  81. break;
  82. case "addps":
  83. case "vaddps":
  84. instructionInfo = "Add four, eight or sixteen packed single-precision floating-point values " +
  85. "from the first source operand with the second source operand, and stores the " +
  86. "packed single-precision floating-point results in the destination operand.";
  87. break;
  88. case "addsd":
  89. case "vaddsd":
  90. instructionInfo = "Adds the low double-precision floating-point values from the second source " +
  91. "operand and the first source operand and stores the double-precision " +
  92. "floating-point result in the destination operand.";
  93. break;
  94. case "addss":
  95. case "vaddss":
  96. instructionInfo = "Adds the low single-precision floating-point values from the second source " +
  97. "operand and the first source operand, and stores the double-precision " +
  98. "floating-point result in the destination operand.";
  99. break;
  100. case "addsubpd":
  101. case "vaddsubpd":
  102. instructionInfo = "Adds odd-numbered double-precision floating-point values of the first source " +
  103. "operand (second operand) with the corresponding double-precision floating-point " +
  104. "values from the second source operand (third operand); stores the result in " +
  105. "the odd-numbered values of the destination operand (first operand). " +
  106. "Subtracts the even-numbered double-precision floating-point values from the " +
  107. "second source operand from the corresponding double-precision floating values " +
  108. "in the first source operand; stores the result into the even-numbered values " +
  109. "of the destination operand.";
  110. break;
  111. case "addsubps":
  112. case "vaddsubps":
  113. instructionInfo = "Adds odd-numbered single-precision floating-point values of the first source " +
  114. "operand (second operand) with the corresponding single-precision floating-point " +
  115. "values from the second source operand (third operand); stores the result in " +
  116. "the odd-numbered values of the destination operand (first operand). " +
  117. "Subtracts the even-numbered single-precision floating-point values from the " +
  118. "second source operand from the corresponding single-precision floating " +
  119. "values in the first source operand; stores the result into the even-numbered " +
  120. "values of the destination operand.";
  121. break;
  122. case "adox":
  123. instructionInfo = "Performs an unsigned addition of the destination operand (first operand), " +
  124. "the source operand (second operand) and the overflow-flag (OF) and stores " +
  125. "the result in the destination operand. The destination operand is a " +
  126. "general-purpose register, whereas the source operand can be a " +
  127. "general-purpose register or memory location. The state of OF represents " +
  128. "a carry from a previous addition. The instruction sets the OF flag with " +
  129. "the carry generated by the unsigned addition of the operands.";
  130. break;
  131. case "aesdec":
  132. case "vaesdec":
  133. instructionInfo = "This instruction performs a single round of the AES decryption flow using " +
  134. "the Equivalent Inverse Cipher, with the round key from the second source " +
  135. "operand, operating on a 128-bit data (state) from the first source operand, " +
  136. "and store the result in the destination operand.";
  137. break;
  138. case "aesdeclast":
  139. case "vaesdeclast":
  140. instructionInfo = "This instruction performs the last round of the AES decryption flow using " +
  141. "the Equivalent Inverse Cipher, with the round key from the second source " +
  142. "operand, operating on a 128-bit data (state) from the first source operand, " +
  143. "and store the result in the destination operand.";
  144. break;
  145. case "aesenc":
  146. case "vaesenc":
  147. instructionInfo = "This instruction performs a single round of an AES encryption flow using a " +
  148. "round key from the second source operand, operating on 128-bit data (state) " +
  149. "from the first source operand, and store the result in the destination operand.";
  150. break;
  151. case "aesenclast":
  152. case "vaesenclast":
  153. instructionInfo = "This instruction performs the last round of an AES encryption flow using a " +
  154. "round key from the second source operand, operating on 128-bit data (state) " +
  155. "from the first source operand, and store the result in the destination operand.";
  156. break;
  157. case "aesimc":
  158. case "vaesimc":
  159. instructionInfo = "Perform the InvMixColumns transformation on the source operand and store " +
  160. "the result in the destination operand. The destination operand is an XMM register. " +
  161. "The source operand can be an XMM register or a 128-bit memory location.";
  162. break;
  163. case "aeskeygenassist":
  164. case "vaeskeygenassist":
  165. instructionInfo = "Assist in expanding the AES cipher key, by computing steps towards generating " +
  166. "a round key for encryption, using 128-bit data specified in the source operand " +
  167. "and an 8-bit round constant specified as an immediate, store the result in the " +
  168. "destination operand.";
  169. break;
  170. case "and":
  171. instructionInfo = "Performs a bitwise AND operation on the destination (first) and source " +
  172. "(second) operands and stores the result in the destination operand location. " +
  173. "The source operand can be an immediate, a register, or a memory location; " +
  174. "the destination operand can be a register or a memory location. " +
  175. "(However, two memory operands cannot be used in one instruction.) " +
  176. "Each bit of the result is set to 1 if both corresponding bits of the first and " +
  177. "second operands are 1; otherwise, it is set to 0.";
  178. break;
  179. case "andn":
  180. instructionInfo = "Performs a bitwise logical AND of inverted second operand " +
  181. "(the first source operand) with the third operand (the";
  182. break;
  183. case "andnpd":
  184. case "vandnpd":
  185. instructionInfo = "Performs a bitwise logical AND NOT of the two, four or eight packed " +
  186. "double-precision floating-point values from the first source operand and " +
  187. "the second source operand, and stores the result in the destination operand.";
  188. break;
  189. case "andnps":
  190. case "vandnps":
  191. instructionInfo = "Performs a bitwise logical AND NOT of the four, eight or sixteen packed " +
  192. "single-precision floating-point values from the first source operand and " +
  193. "the second source operand, and stores the result in the destination operand.";
  194. break;
  195. case "andpd":
  196. case "vandpd":
  197. instructionInfo = "Performs a bitwise logical AND of the two, four or eight packed double-precision " +
  198. "floating-point values from the first source operand and the second source " +
  199. "operand, and stores the result in the destination operand.";
  200. break;
  201. case "andps":
  202. case "vandps":
  203. instructionInfo = "Performs a bitwise logical AND of the four, eight or sixteen packed " +
  204. "single-precision floating-point values from the first source operand and " +
  205. "the second source operand, and stores the result in the destination operand.";
  206. break;
  207. case "arpl":
  208. instructionInfo = "Compares the RPL (Requester Privilege Level) fields of two segment selectors. The first operand " +
  209. "(the destination operand) contains one segment selector and the second operand " +
  210. "(source operand) contains the other. If the RPL field of the destination operand is less than the " +
  211. "RPL field of the source operand, the ZF flag is set and the RPL field of the " +
  212. "destination operand is increased to match that of the source operand. " +
  213. "Otherwise, the ZF flag is cleared and no change is made to the destination " +
  214. "operand. (The destination operand can be a word register or a memory location; " +
  215. "the source operand must be a word register.)";
  216. break;
  217. case "bextr":
  218. instructionInfo = "Extracts contiguous bits from the first source operand (the second operand) " +
  219. "using an index value and length value specified in the second source operand " +
  220. "(the third operand). Bit 7:0 of the second source operand specifies the " +
  221. "starting bit position of bit extraction. Bit 15:8 of " +
  222. "the second source operand specifies the maximum number of bits (LENGTH) " +
  223. "beginning at the START position to extract. Only bit positions up to " +
  224. "(OperandSize -1) of the first source operand are extracted. The extracted " +
  225. "bits are written to the destination register, starting from the least " +
  226. "significant bit. All higher order bits in the destination operand " +
  227. "(starting at bit position LENGTH) are zeroed. The destination register is " +
  228. "cleared if no bits are extracted.";
  229. break;
  230. case "blendpd":
  231. case "vblendpd":
  232. instructionInfo = "Double-precision floating-point values from the second source operand " +
  233. "(third operand) are conditionally merged with values from the first source " +
  234. "operand (second operand) and written to the destination operand (first operand). " +
  235. "The immediate bits [3:0] determine whether the corresponding double-precision " +
  236. "floating-point value in the destination is copied from the second source or " +
  237. "first source. If a bit in the mask, corresponding to a word, is " +
  238. "\"1\", then the double-precision floating-point value in " +
  239. "the second source operand is copied, else the value in the first source operand is copied.";
  240. break;
  241. case "blendps":
  242. case "vblendps":
  243. instructionInfo = "Packed single-precision floating-point values from the second source operand " +
  244. "(third operand) are conditionally merged with values from the first source " +
  245. "operand (second operand) and written to the destination operand (first operand). " +
  246. "The immediate bits [7:0] determine whether the corresponding single precision " +
  247. "floating-point value in the destination is copied from the second source or " +
  248. "first source. If a bit in the mask, corresponding to a word, is \"1\", " +
  249. "then the single-precision floating-point value in the second source operand " +
  250. "is copied, else the value in the first source operand is copied.";
  251. break;
  252. case "blendvpd":
  253. case "vblendvpd":
  254. instructionInfo = "Conditionally copy each quadword data element of double-precision " +
  255. "floating-point value from the second source operand and the first source " +
  256. "operand depending on mask bits defined in the mask register operand. " +
  257. "The mask bits are the most significant bit in each quadword element of the mask register.";
  258. break;
  259. case "blendvps":
  260. case "vblendvps":
  261. instructionInfo = "Conditionally copy each dword data element of single-precision floating-point " +
  262. "value from the second source operand and the first source operand depending " +
  263. "on mask bits defined in the mask register operand. The mask bits are the most " +
  264. "significant bit in each dword element of the mask register.";
  265. break;
  266. case "blsi":
  267. instructionInfo = "Extracts the lowest set bit from the source operand and set the corresponding " +
  268. "bit in the destination register. All other bits in the destination operand " +
  269. "are zeroed. If no bits are set in the source operand, BLSI sets all the bits " +
  270. "in the destination to 0 and sets ZF and CF.";
  271. break;
  272. case "blsmsk":
  273. instructionInfo = "Sets all the lower bits of the destination operand to \"1\" up to " +
  274. "and including lowest set bit (=1) in the source operand. If source operand is " +
  275. "zero, BLSMSK sets all bits of the destination operand to 1 and also sets CF to 1.";
  276. break;
  277. case "blsr":
  278. instructionInfo = "Copies all bits from the source operand to the destination operand and resets " +
  279. "(=0) the bit position in the destination operand that corresponds to the lowest " +
  280. "set bit of the source operand. If the source operand is zero BLSR sets CF.";
  281. break;
  282. case "bndcl":
  283. instructionInfo = "Compare the address in the second operand with the lower bound in bnd. " +
  284. "The second operand can be either a register or memory operand. If the address " +
  285. "is lower than the lower bound in bnd.LB, it will set BNDSTATUS to 01H and " +
  286. "signal a #BR exception.";
  287. break;
  288. case "bndcu":
  289. case "bndcn":
  290. instructionInfo = "Compare the address in the second operand with the upper bound in bnd. " +
  291. "The second operand can be either a register or a memory operand. If the " +
  292. "address is higher than the upper bound in bnd.UB, it will set BNDSTATUS to " +
  293. "01H and signal a #BR exception.";
  294. break;
  295. case "bndldx":
  296. instructionInfo = "BNDLDX uses the linear address constructed from the base register and " +
  297. "displacement of the SIB-addressing form of the memory operand (mib) to " +
  298. "perform address translation to access a bound table entry and conditionally " +
  299. "load the bounds in the BTE to the destination. The destination register is " +
  300. "updated with the bounds in the BTE, if the content of the index register of " +
  301. "mib matches the pointer value stored in the BTE.";
  302. break;
  303. case "bndmk":
  304. instructionInfo = "Makes bounds from the second operand and stores the lower and upper bounds in " +
  305. "the bound register bnd. The second operand must be a memory operand. " +
  306. "The content of the base register from the memory operand is stored in the " +
  307. "lower bound bnd.LB. The 1\'s complement of the effective address of m32/m64 " +
  308. "is stored in the upper bound b.UB. Computation of m32/m64 has identical behavior to LEA.";
  309. break;
  310. case "bndmov":
  311. instructionInfo = "BNDMOV moves a pair of lower and upper bound values from the source operand " +
  312. "(the second operand) to the destination (the first operand). " +
  313. "Each operation is 128-bit move. The exceptions are same as the MOV instruction.";
  314. break;
  315. case "bndstx":
  316. instructionInfo = "BNDSTX uses the linear address constructed from the displacement and base " +
  317. "register of the SIB-addressing form of the memory operand (mib) to perform " +
  318. "address translation to store to a bound table entry. The bounds in the source " +
  319. "operand bnd are written to the lower and upper bounds in the BTE. " +
  320. "The content of the index register of mib is written to the pointer value field in the BTE.";
  321. break;
  322. case "bound":
  323. instructionInfo = "BOUND determines if the first operand (array index) is within the bounds of " +
  324. "an array specified the second operand (bounds operand). The array index is " +
  325. "a signed integer located in a register. The bounds operand is a memory " +
  326. "location that contains a pair of signed doubleword-integers " +
  327. "(when the operand-size attribute is 32) or a pair of signed word-integers " +
  328. "(when the operand-size attribute is 16). If the index is not within bounds, " +
  329. "a BOUND range exceeded exception " +
  330. "(#BR) is signaled. When this exception is generated, the saved return " +
  331. "instruction pointer points to the BOUND instruction.";
  332. break;
  333. case "bsf":
  334. instructionInfo = "Searches the source operand (second operand) for the least significant set bit " +
  335. "(1 bit). If a least significant 1 bit is found, its bit index is stored in " +
  336. "the destination operand (first operand). The source operand can be a register " +
  337. "or a memory location; the destination operand is a register. The bit index " +
  338. "is an unsigned offset from bit 0 of the source operand. If the content of the " +
  339. "source operand is 0, the content of the destination operand is undefined.";
  340. break;
  341. case "bsr":
  342. instructionInfo = "Searches the source operand (second operand) for the most significant set " +
  343. "bit (1 bit). If a most significant 1 bit is found, its bit index is stored " +
  344. "in the destination operand (first operand). The source operand can be a " +
  345. "register or a memory location; the destination operand is a register. The " +
  346. "bit index is an unsigned offset from bit 0 of the source operand. If the " +
  347. "content source operand is 0, the content of the destination operand is undefined.";
  348. break;
  349. case "bswap":
  350. instructionInfo = "Reverses the byte order of a 32-bit or 64-bit (destination) register. " +
  351. "This instruction is provided for converting little-endian values to big-endian " +
  352. "format and vice versa. To swap bytes in a word value (16-bit register), " +
  353. "use the XCHG instruction. When the BSWAP instruction references a 16-bit " +
  354. "register, the result is undefined.";
  355. break;
  356. case "bt":
  357. instructionInfo = "Selects the bit in a bit string (specified with the first operand, " +
  358. "called the bit base) at the bit-position designated by the bit offset " +
  359. "(specified by the second operand) and stores the value of the bit in the " +
  360. "CF flag. The bit base operand can be a register or a memory location; " +
  361. "the bit offset operand can be a register or an immediate value:";
  362. break;
  363. case "btc":
  364. instructionInfo = "Selects the bit in a bit string (specified with the first operand, called " +
  365. "the bit base) at the bit-position designated by the bit offset operand " +
  366. "(second operand), stores the value of the bit in the CF flag, and complements " +
  367. "the selected bit in the bit string. The bit base operand can be a register " +
  368. "or a memory location; the bit offset operand can be a register or an immediate value:";
  369. break;
  370. case "btr":
  371. instructionInfo = "Selects the bit in a bit string (specified with the first operand, " +
  372. "called the bit base) at the bit-position designated by the bit offset operand " +
  373. "(second operand), stores the value of the bit in the CF flag, and clears the " +
  374. "selected bit in the bit string to 0. The bit base operand can be a register " +
  375. "or a memory location; the bit offset operand can be a register or an immediate value:";
  376. break;
  377. case "bts":
  378. instructionInfo = "Selects the bit in a bit string (specified with the first operand, " +
  379. "called the bit base) at the bit-position designated by the bit offset " +
  380. "operand (second operand), stores the value of the bit in the CF flag, and " +
  381. "sets the selected bit in the bit string to 1. The bit base operand can be " +
  382. "a register or a memory location; the bit offset operand can be a register " +
  383. "or an immediate value:";
  384. break;
  385. case "bzhi":
  386. instructionInfo = "BZHI copies the bits of the first source operand (the second operand) into " +
  387. "the destination operand (the first operand) and clears the higher bits in " +
  388. "the destination according to the INDEX value specified by the second source " +
  389. "operand (the third operand). The INDEX is specified by bits 7:0 of the " +
  390. "second source operand. The INDEX value is saturated at the value of " +
  391. "OperandSize -1. CF is set, if the number contained in the 8 low bits of " +
  392. "the third operand is greater than OperandSize -1.";
  393. break;
  394. case "call":
  395. instructionInfo = "Saves procedure linking information on the stack and branches to the called " +
  396. "procedure specified using the target operand. The target operand specifies " +
  397. "the address of the first instruction in the called procedure. The operand can " +
  398. "be an immediate value, a general-purpose register, or a memory location.";
  399. break;
  400. case "cbw":
  401. case "cwde":
  402. case "cdqe":
  403. instructionInfo = "Double the size of the source operand by means of sign extension. The CBW " +
  404. "(convert byte to word) instruction copies the sign (bit 7) in the source " +
  405. "operand into every bit in the AH register. The CWDE (convert word to " +
  406. "double-word) instruction copies the sign (bit 15) of the word in the AX " +
  407. "register into the high 16 bits of the EAX register.";
  408. break;
  409. case "cwd":
  410. case "cdq":
  411. case "cqo":
  412. instructionInfo = "Doubles the size of the operand in register AX, EAX, or RAX " +
  413. "(depending on the operand size) by means of sign extension and stores " +
  414. "the result in registers DX:AX, EDX:EAX, or RDX:RAX, respectively. " +
  415. "The CWD instruction copies the sign (bit 15) of the value in the AX " +
  416. "register into every bit position in the DX register. The CDQ instruction " +
  417. "copies the sign (bit 31) of the value in the EAX register into every bit " +
  418. "position in the EDX register.";
  419. break;
  420. case "clac":
  421. instructionInfo = "Clears the AC flag bit in EFLAGS register. This disables any alignment " +
  422. "checking of user-mode data accesses. If the SMAP bit is set in the CR4 " +
  423. "register, this disallows explicit supervisor-mode data accesses to user-mode pages.";
  424. break;
  425. case "clc":
  426. instructionInfo = "Clears the CF flag in the EFLAGS register. Operation is the same in all modes.";
  427. break;
  428. case "cld":
  429. instructionInfo = "Clears the DF flag in the EFLAGS register. When the DF flag is set to 0, " +
  430. "string operations increment the index registers (ESI and/or EDI). " +
  431. "Operation is the same in all modes.";
  432. break;
  433. case "cldemote":
  434. instructionInfo = "Hints to hardware that the cache line that contains the linear address " +
  435. "specified with the memory operand should be moved (\"demoted\") " +
  436. "from the cache(s) closest to the processor core to a level more distant " +
  437. "from the processor core. This may accelerate subsequent accesses to the " +
  438. "line by other cores in the same coherence domain, especially if the line " +
  439. "was written by the core that demotes the line. Moving the line in such a " +
  440. "manner is a performance optimization, i.e., it is a hint which does not " +
  441. "modify architectural state. Hardware may choose which level in the cache " +
  442. "hierarchy to retain the line (e.g., L3 in typical server designs). " +
  443. "The source operand is a byte memory location.";
  444. break;
  445. case "clflush":
  446. instructionInfo = "Invalidates from every level of the cache hierarchy in the cache " +
  447. "coherence domain the cache line that contains the linear address " +
  448. "specified with the memory operand. If that cache line contains " +
  449. "modified data at any level of the cache hierarchy, that data is " +
  450. "written back to memory. The source operand is a byte memory location.";
  451. break;
  452. case "clflushopt":
  453. instructionInfo = "Invalidates from every level of the cache hierarchy in the cache " +
  454. "coherence domain the cache line that contains the linear address " +
  455. "specified with the memory operand. If that cache line contains " +
  456. "modified data at any level of the cache hierarchy, that data is " +
  457. "written back to memory. The source operand is a byte memory location.";
  458. break;
  459. case "cli":
  460. instructionInfo = "In most cases, CLI clears the IF flag in the EFLAGS register and no other " +
  461. "flags are affected. Clearing the IF flag causes the processor to ignore " +
  462. "maskable external interrupts. The IF flag and the CLI and STI instruction " +
  463. "have no effect on the generation of exceptions and NMI interrupts.";
  464. break;
  465. case "clts":
  466. instructionInfo = "Clears the task-switched (TS) flag in the CR0 register. This instruction " +
  467. "is intended for use in operating-system procedures. It is a privileged " +
  468. "instruction that can only be executed at a CPL of 0. It is allowed to be " +
  469. "executed in real-address mode to allow initialization for protected mode.";
  470. break;
  471. case "clwb":
  472. instructionInfo = "Writes back to memory the cache line (if modified) that contains the " +
  473. "linear address specified with the memory operand from any level of the " +
  474. "cache hierarchy in the cache coherence domain. The line may be retained " +
  475. "in the cache hierarchy in non-modified state.";
  476. break;
  477. case "cmc":
  478. instructionInfo = "Complements the CF flag in the EFLAGS register. CMC operation is the same " +
  479. "in non-64-bit modes and 64-bit mode.";
  480. break;
  481. case "cmova":
  482. case "cmovae":
  483. case "cmovb":
  484. case "cmovbe":
  485. case "cmovc":
  486. case "cmove":
  487. case "cmovg":
  488. case "cmovge":
  489. case "cmovl":
  490. case "cmovle":
  491. case "cmovna":
  492. case "cmovnae":
  493. case "cmovnb":
  494. case "cmovnbe":
  495. case "cmovnc":
  496. case "cmovne":
  497. case "cmovng":
  498. case "cmovnge":
  499. case "cmovnl":
  500. case "cmovnle":
  501. case "cmovno":
  502. case "cmovnp":
  503. case "cmovns":
  504. case "cmovnz":
  505. case "cmovo":
  506. case "cmovp":
  507. case "cmovpe":
  508. case "cmovpo":
  509. case "cmovs":
  510. case "cmovz":
  511. instructionInfo = "The CMOVcc instructions check the state of one or more of the " +
  512. "status flags in the EFLAGS register (CF, OF, PF, SF, and ZF) and perform " +
  513. "a move operation if the flags are in a specified state (or condition). " +
  514. "A condition code (cc) is associated with each instruction to " +
  515. "indicate the condition being tested for. If the condition is not satisfied, " +
  516. "a move is not performed and execution continues with the instruction " +
  517. "following the CMOVcc instruction.";
  518. break;
  519. case "cmp":
  520. instructionInfo = "Compares the first source operand with the second source operand and " +
  521. "sets the status flags in the EFLAGS register according to the results. " +
  522. "The comparison is performed by subtracting the second operand from the " +
  523. "first operand and then setting the status flags in the same manner as " +
  524. "the SUB instruction. When an immediate value is used as an operand, it " +
  525. "is sign-extended to the length of the first operand.";
  526. break;
  527. case "cmppd":
  528. instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point " +
  529. "values in the second source operand and the first source operand and " +
  530. "returns the results of the comparison to the destination operand. " +
  531. "The comparison predicate operand (immediate byte) specifies the type " +
  532. "of comparison performed on each pair of packed values in the two source " +
  533. "operands. Uses 3 bits for comparison predicate.";
  534. break;
  535. case "cmpeqpd":
  536. instructionInfo = "Performs a SIMD compare equal of the packed double-precision floating-point " +
  537. "values in the second source operand and the first source operand and " +
  538. "returns the results of the comparison to the destination operand.";
  539. break;
  540. case "cmpltpd":
  541. instructionInfo = "Performs a SIMD compare less than of the packed double-precision " +
  542. "floating-point values in the second source operand and the first source " +
  543. "operand and returns the results of the comparison to the destination operand.";
  544. break;
  545. case "cmplepd":
  546. instructionInfo = "Performs a SIMD compare less or equal of the packed double-precision " +
  547. "floating-point values in the second source operand and the first source " +
  548. "operand and returns the results of the comparison to the destination operand.";
  549. break;
  550. case "cmpunordpd":
  551. instructionInfo = "Performs a SIMD compare unordered of the packed double-precision " +
  552. "floating-point values in the second source operand and the first source " +
  553. "operand and returns the results of the comparison to the destination operand.";
  554. break;
  555. case "cmpneqpd":
  556. instructionInfo = "Performs a SIMD compare not equal of the packed double-precision " +
  557. "floating-point values in the second source operand and the first source " +
  558. "operand and returns the results of the comparison to the destination operand.";
  559. break;
  560. case "cmpnltpd":
  561. instructionInfo = "Performs a SIMD compare not less than of the packed double-precision " +
  562. "floating-point values in the second source operand and the first source " +
  563. "operand and returns the results of the comparison to the destination operand.";
  564. break;
  565. case "cmpnlepd":
  566. instructionInfo = "Performs a SIMD compare not less than or equal of the packed " +
  567. "double-precision floating-point values in the second source operand and " +
  568. "the first source operand and returns the results of the comparison to the " +
  569. "destination operand.";
  570. break;
  571. case "cmpordpd":
  572. instructionInfo = "Performs a SIMD compare orderd of the packed double-precision " +
  573. "floating-point values in the second source operand and the first source " +
  574. "operand and returns the results of the comparison to the destination operand.";
  575. break;
  576. case "vcmppd":
  577. instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point " +
  578. "values in the second source operand and the first source operand and " +
  579. "returns the results of the comparison to the destination operand. " +
  580. "The comparison predicate operand (immediate byte) specifies the type of " +
  581. "comparison performed on each pair of packed values in the two source operands. " +
  582. "Using 5 bits for comparison predicate.";
  583. break;
  584. case "vcmpeqpd":
  585. instructionInfo = "Performs a SIMD equal (ordered, non-signaling) compare of the packed " +
  586. "double-precision floating-point values in the second source operand and " +
  587. "the first source operand and returns the results of the comparison to the " +
  588. "destination operand.";
  589. break;
  590. case "vcmpltpd":
  591. instructionInfo = "Performs a SIMD less-than (ordered, signaling) compare of the packed " +
  592. "double-precision floating-point values in the second source operand and " +
  593. "the first source operand and returns the results of the comparison to the " +
  594. "destination operand.";
  595. break;
  596. case "vcmplepd":
  597. instructionInfo = "Performs a SIMD less-than-or-equal (ordered, signaling) compare of the " +
  598. "packed double-precision floating-point values in the second source " +
  599. "operand and the first source operand and returns the results of the " +
  600. "comparison to the destination operand.";
  601. break;
  602. case "vcmpunordpd":
  603. instructionInfo = "Performs a SIMD unordered (non-signaling) compare of the packed " +
  604. "double-precision floating-point values in the second source operand " +
  605. "and the first source operand and returns the results of the comparison " +
  606. "to the destination operand.";
  607. break;
  608. case "vcmpneqpd":
  609. instructionInfo = "Performs a SIMD not-equal (unordered, non-signaling) compare of the " +
  610. "packed double-precision floating-point values in the second source " +
  611. "operand and the first source operand and returns the results of the " +
  612. "comparison to the destination operand.";
  613. break;
  614. case "vcmpnltpd":
  615. instructionInfo = "Performs a SIMD not-less-than (unordered, signaling) compare of the " +
  616. "packed double-precision floating-point values in the second source " +
  617. "operand and the first source operand and returns the results of the " +
  618. "comparison to the destination operand.";
  619. break;
  620. case "vcmpnlepd":
  621. instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, signaling) compare of " +
  622. "the packed double-precision floating-point values in the second source " +
  623. "operand and the first source operand and returns the results of the " +
  624. "comparison to the destination operand.";
  625. break;
  626. case "vcmpordpd":
  627. instructionInfo = "Performs a SIMD ordered (non-signaling) compare of the packed " +
  628. "double-precision floating-point values in the second source operand " +
  629. "and the first source operand and returns the results of the comparison " +
  630. "to the destination operand.";
  631. break;
  632. case "vcmpeq_uqpd":
  633. instructionInfo = "Performs a SIMD equal (unordered, non-signaling) compare of the packed " +
  634. "double-precision floating-point values in the second source operand and " +
  635. "the first source operand and returns the results of the comparison to the " +
  636. "destination operand.";
  637. break;
  638. case "vcmpngepd":
  639. instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, signaling) compare " +
  640. "of the packed double-precision floating-point values in the second source " +
  641. "operand and the first source operand and returns the results of the " +
  642. "comparison to the destination operand.";
  643. break;
  644. case "vcmpngtpd":
  645. instructionInfo = "Performs a SIMD not-greater-than (unordered, signaling) compare of the " +
  646. "packed double-precision floating-point values in the second source operand " +
  647. "and the first source operand and returns the results of the comparison to " +
  648. "the destination operand.";
  649. break;
  650. case "vcmpfalsepd":
  651. instructionInfo = "Performs a SIMD false (ordered, non-signaling) compare of the packed " +
  652. "double-precision floating-point values in the second source operand and " +
  653. "the first source operand and returns the results of the comparison to " +
  654. "the destination operand.";
  655. break;
  656. case "vcmpneq_oqpd":
  657. instructionInfo = "Performs a SIMD not-equal (ordered, non-signaling) compare of the packed " +
  658. "double-precision floating-point values in the second source operand and " +
  659. "the first source operand and returns the results of the comparison to the " +
  660. "destination operand.";
  661. break;
  662. case "vcmpgepd":
  663. instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, signaling) compare of the " +
  664. "packed double-precision floating-point values in the second source operand " +
  665. "and the first source operand and returns the results of the comparison to " +
  666. "the destination operand.";
  667. break;
  668. case "vcmpgtpd":
  669. instructionInfo = "Performs a SIMD greater-than (ordered, signaling) compare of the packed " +
  670. "double-precision floating-point values in the second source operand and " +
  671. "the first source operand and returns the results of the comparison to the " +
  672. "destination operand.";
  673. break;
  674. case "vcmptruepd":
  675. instructionInfo = "Performs a SIMD true (unordered, non-signaling) compare of the packed " +
  676. "double-precision floating-point values in the second source operand and " +
  677. "the first source operand and returns the results of the comparison to the " +
  678. "destination operand.";
  679. break;
  680. case "vcmpeq_ospd":
  681. instructionInfo = "Performs a SIMD equal (ordered, signaling) compare of the packed " +
  682. "double-precision floating-point values in the second source operand and " +
  683. "the first source operand and returns the results of the comparison to the " +
  684. "destination operand.";
  685. break;
  686. case "vcmplt_oqpd":
  687. instructionInfo = "Performs a SIMD less-than (ordered, nonsignaling) compare of the packed " +
  688. "double-precision floating-point values in the second source operand and " +
  689. "the first source operand and returns the results of the comparison to the " +
  690. "destination operand.";
  691. break;
  692. case "vcmple_oqpd":
  693. instructionInfo = "Performs a SIMD less-than-or-equal (ordered, nonsignaling) compare of the " +
  694. "packed double-precision floating-point values in the second source operand " +
  695. "and the first source operand and returns the results of the comparison to " +
  696. "the destination operand.";
  697. break;
  698. case "vcmpunord_spd":
  699. instructionInfo = "Performs a SIMD unordered (signaling) compare of the packed double-precision " +
  700. "floating-point values in the second source operand and the first source " +
  701. "operand and returns the results of the comparison to the destination operand.";
  702. break;
  703. case "vcmpneq_uspd":
  704. instructionInfo = "Performs a SIMD not-equal (unordered, signaling) compare of the packed " +
  705. "double-precision floating-point values in the second source operand and " +
  706. "the first source operand and returns the results of the comparison to the " +
  707. "destination operand.";
  708. break;
  709. case "vcmpnlt_uqpd":
  710. instructionInfo = "Performs a SIMD not-less-than (unordered, nonsignaling) compare of the " +
  711. "packed double-precision floating-point values in the second source operand " +
  712. "and the first source operand and returns the results of the comparison to " +
  713. "the destination operand.";
  714. break;
  715. case "vcmpnle_uqpd":
  716. instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, nonsignaling) compare " +
  717. "of the packed double-precision floating-point values in the second source " +
  718. "operand and the first source operand and returns the results of the " +
  719. "comparison to the destination operand.";
  720. break;
  721. case "vcmpord_spd":
  722. instructionInfo = "Performs a SIMD ordered (signaling) compare of the packed double-precision " +
  723. "floating-point values in the second source operand and the first source " +
  724. "operand and returns the results of the comparison to the destination operand.";
  725. break;
  726. case "vcmpeq_uspd":
  727. instructionInfo = "Performs a SIMD equal (unordered, signaling) compare of the packed " +
  728. "double-precision floating-point values in the second source operand and " +
  729. "the first source operand and returns the results of the comparison to " +
  730. "the destination operand.";
  731. break;
  732. case "vcmpnge_uqpd":
  733. instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, non-signaling) " +
  734. "compare of the packed double-precision floating-point values in the second " +
  735. "source operand and the first source operand and returns the results of " +
  736. "the comparison to the destination operand.";
  737. break;
  738. case "vcmpngt_uqpd":
  739. instructionInfo = "Performs a SIMD not-greater-than (unordered, nonsignaling) compare of the " +
  740. "packed double-precision floating-point values in the second source operand " +
  741. "and the first source operand and returns the results of the comparison to " +
  742. "the destination operand.";
  743. break;
  744. case "vcmpfalse_ospd":
  745. instructionInfo = "Performs a SIMD false (ordered, signaling) compare of the packed " +
  746. "double-precision floating-point values in the second source operand " +
  747. "and the first source operand and returns the results of the comparison " +
  748. "to the destination operand.";
  749. break;
  750. case "vcmpneq_ospd":
  751. instructionInfo = "Performs a SIMD not-equal (ordered, signaling) compare of the packed " +
  752. "double-precision floating-point values in the second source operand and " +
  753. "the first source operand and returns the results of the comparison to " +
  754. "the destination operand.";
  755. break;
  756. case "vcmpge_oqpd":
  757. instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, nonsignaling) compare of " +
  758. "the packed double-precision floating-point values in the second source " +
  759. "operand and the first source operand and returns the results of the " +
  760. "comparison to the destination operand.";
  761. break;
  762. case "vcmpgt_oqpd":
  763. instructionInfo = "Performs a SIMD greater-than (ordered, nonsignaling) compare of the " +
  764. "packed double-precision floating-point values in the second source operand " +
  765. "and the first source operand and returns the results of the comparison " +
  766. "to the destination operand.";
  767. break;
  768. case "vcmptrue_usp":
  769. instructionInfo = "Performs a SIMD true (unordered, signaling) compare of the packed " +
  770. "double-precision floating-point values in the second source operand " +
  771. "and the first source operand and returns the results of the comparison " +
  772. "to the destination operand.";
  773. break;
  774. case "cmpps":
  775. instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point " +
  776. "values in the second source operand and the first source operand and " +
  777. "returns the results of the comparison to the destination operand. " +
  778. "The comparison predicate operand (immediate byte) specifies the type " +
  779. "of comparison performed on each of the pairs of packed values. Uses 3 " +
  780. "bit for comparison predicate.";
  781. break;
  782. case "cmpeqps":
  783. instructionInfo = "Performs a SIMD equal (ordered, non-signaling) compare of the packed " +
  784. "single-precision floating-point values in the second source operand and " +
  785. "the first source operand and returns the results of the comparison to " +
  786. "the destination operand.";
  787. break;
  788. case "cmpltps":
  789. instructionInfo = "Performs a SIMD less-than (ordered, signaling) compare of the packed " +
  790. "single-precision floating-point values in the second source operand " +
  791. "and the first source operand and returns the results of the comparison " +
  792. "to the destination operand.";
  793. break;
  794. case "cmpleps":
  795. instructionInfo = "Performs a SIMD less-than-or-equal (ordered, signaling) compare of the " +
  796. "packed single-precision floating-point values in the second source " +
  797. "operand and the first source operand and returns the results of the " +
  798. "comparison to the destination operand.";
  799. break;
  800. case "cmpunordps":
  801. instructionInfo = "Performs a SIMD unordered (non-signaling) compare of the packed " +
  802. "single-precision floating-point values in the second source operand " +
  803. "and the first source operand and returns the results of the comparison " +
  804. "to the destination operand.";
  805. break;
  806. case "cmpneqps":
  807. instructionInfo = "Performs a SIMD not-equal (unordered, non-signaling) compare of the " +
  808. "packed single-precision floating-point values in the second source " +
  809. "operand and the first source operand and returns the results of the " +
  810. "comparison to the destination operand.";
  811. break;
  812. case "cmpnltps":
  813. instructionInfo = "Performs a SIMD not-less-than (unordered, signaling) compare of the " +
  814. "packed single-precision floating-point values in the second source " +
  815. "operand and the first source operand and returns the results of the " +
  816. "comparison to the destination operand.";
  817. break;
  818. case "cmpnleps":
  819. instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, signaling) compare " +
  820. "of the packed single-precision floating-point values in the second " +
  821. "source operand and the first source operand and returns the results of " +
  822. "the comparison to the destination operand.";
  823. break;
  824. case "cmpordps":
  825. instructionInfo = "Performs a SIMD ordered (non-signaling) compare of the packed " +
  826. "single-precision floating-point values in the second source operand " +
  827. "and the first source operand and returns the results of the comparison " +
  828. "to the destination operand.";
  829. break;
  830. case "vcmpps":
  831. instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point " +
  832. "values in the second source operand and the first source operand and " +
  833. "returns the results of the comparison to the destination operand. The " +
  834. "comparison predicate operand (immediate byte) specifies the type of " +
  835. "comparison performed on each of the pairs of packed values. Uses 5 bits " +
  836. "for comparison predicate.";
  837. break;
  838. case "vcmpeqps":
  839. instructionInfo = "Performs a SIMD equal (ordered, non-signaling) compare of the packed " +
  840. "single-precision floating-point values in the second source operand and " +
  841. "the first source operand and returns the results of the comparison to " +
  842. "the destination operand.";
  843. break;
  844. case "vcmpltps":
  845. instructionInfo = "Performs a SIMD less-than (ordered, signaling) compare of the packed " +
  846. "single-precision floating-point values in the second source operand " +
  847. "and the first source operand and returns the results of the comparison " +
  848. "to the destination operand.";
  849. break;
  850. case "vcmpleps":
  851. instructionInfo = "Performs a SIMD less-than-or-equal (ordered, signaling) compare of the " +
  852. "packed single-precision floating-point values in the second source " +
  853. "operand and the first source operand and returns the results of the " +
  854. "comparison to the destination operand.";
  855. break;
  856. case "vcmpunordps":
  857. instructionInfo = "Performs a SIMD unordered (non-signaling) compare of the packed " +
  858. "single-precision floating-point values in the second source operand " +
  859. "and the first source operand and returns the results of the comparison " +
  860. "to the destination operand.";
  861. break;
  862. case "vcmpneqps":
  863. instructionInfo = "Performs a SIMD not-equal (unordered, non-signaling) compare of the " +
  864. "packed single-precision floating-point values in the second source " +
  865. "operand and the first source operand and returns the results of the " +
  866. "comparison to the destination operand.";
  867. break;
  868. case "vcmpnltps":
  869. instructionInfo = "Performs a SIMD not-less-than (unordered, signaling) compare of the " +
  870. "packed single-precision floating-point values in the second source " +
  871. "operand and the first source operand and returns the results of the " +
  872. "comparison to the destination operand.";
  873. break;
  874. case "vcmpnleps":
  875. instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, signaling) compare " +
  876. "of the packed single-precision floating-point values in the second " +
  877. "source operand and the first source operand and returns the results of " +
  878. "the comparison to the destination operand.";
  879. break;
  880. case "vcmpordps":
  881. instructionInfo = "Performs a SIMD ordered (non-signaling) compare of the packed " +
  882. "single-precision floating-point values in the second source operand " +
  883. "and the first source operand and returns the results of the comparison " +
  884. "to the destination operand.";
  885. break;
  886. case "vcmpeq_uqps":
  887. instructionInfo = "Performs a SIMD equal (unordered, non-signaling) compare of the packed " +
  888. "single-precision floating-point values in the second source operand and " +
  889. "the first source operand and returns the results of the comparison to " +
  890. "the destination operand.";
  891. break;
  892. case "vcmpngeps":
  893. instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, signaling) compare " +
  894. "of the packed single-precision floating-point values in the second source " +
  895. "operand and the first source operand and returns the results of the " +
  896. "comparison to the destination operand.";
  897. break;
  898. case "vcmpngtps":
  899. instructionInfo = "Performs a SIMD not-greater-than (unordered, signaling) compare of the " +
  900. "packed single-precision floating-point values in the second source " +
  901. "operand and the first source operand and returns the results of the " +
  902. "comparison to the destination operand.";
  903. break;
  904. case "vcmpfalseps":
  905. instructionInfo = "Performs a SIMD false (ordered, non-signaling) compare of the packed " +
  906. "single-precision floating-point values in the second source operand " +
  907. "and the first source operand and returns the results of the comparison " +
  908. "to the destination operand.";
  909. break;
  910. case "vcmpneq_oqps":
  911. instructionInfo = "Performs a SIMD not-equal (ordered, non-signaling) compare of the packed " +
  912. "single-precision floating-point values in the second source operand and " +
  913. "the first source operand and returns the results of the comparison to the " +
  914. "destination operand.";
  915. break;
  916. case "vcmpgeps":
  917. instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, signaling) compare of " +
  918. "the packed single-precision floating-point values in the second source " +
  919. "operand and the first source operand and returns the results of the " +
  920. "comparison to the destination operand.";
  921. break;
  922. case "vcmpgtps":
  923. instructionInfo = "Performs a SIMD greater-than (ordered, signaling) compare of the packed " +
  924. "single-precision floating-point values in the second source operand and " +
  925. "the first source operand and returns the results of the comparison to " +
  926. "the destination operand.";
  927. break;
  928. case "vcmptrueps":
  929. instructionInfo = "Performs a SIMD true (unordered, non-signaling) compare of the packed " +
  930. "single-precision floating-point values in the second source operand and " +
  931. "the first source operand and returns the results of the comparison to " +
  932. "the destination operand.";
  933. break;
  934. case "vcmpeq_osps":
  935. instructionInfo = "Performs a SIMD equal (ordered, signaling) compare of the packed " +
  936. "single-precision floating-point values in the second source operand " +
  937. "and the first source operand and returns the results of the comparison " +
  938. "to the destination operand.";
  939. break;
  940. case "vcmplt_oqps":
  941. instructionInfo = "Performs a SIMD less-than (ordered, nonsignaling) compare of the packed " +
  942. "single-precision floating-point values in the second source operand and " +
  943. "the first source operand and returns the results of the comparison to " +
  944. "the destination operand.";
  945. break;
  946. case "vcmple_oqps":
  947. instructionInfo = "Performs a SIMD less-than-or-equal (ordered, nonsignaling) compare of " +
  948. "the packed single-precision floating-point values in the second source " +
  949. "operand and the first source operand and returns the results of the " +
  950. "comparison to the destination operand.";
  951. break;
  952. case "vcmpunord_sps":
  953. instructionInfo = "Performs a SIMD unordered (signaling) compare of the packed " +
  954. "single-precision floating-point values in the second source operand and " +
  955. "the first source operand and returns the results of the comparison to " +
  956. "the destination operand.";
  957. break;
  958. case "vcmpneq_usps":
  959. instructionInfo = "Performs a SIMD not-equal (unordered, signaling) compare of the packed " +
  960. "single-precision floating-point values in the second source operand and " +
  961. "the first source operand and returns the results of the comparison to " +
  962. "the destination operand.";
  963. break;
  964. case "vcmpnlt_uqps":
  965. instructionInfo = "Performs a SIMD not-less-than (unordered, nonsignaling) compare of the " +
  966. "packed single-precision floating-point values in the second source " +
  967. "operand and the first source operand and returns the results of the " +
  968. "comparison to the destination operand.";
  969. break;
  970. case "vcmpnle_uqps":
  971. instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, nonsignaling) compare " +
  972. "of the packed single-precision floating-point values in the second source " +
  973. "operand and the first source operand and returns the results of the " +
  974. "comparison to the destination operand.";
  975. break;
  976. case "vcmpord_sps":
  977. instructionInfo = "Performs a SIMD ordered (signaling) compare of the packed single-precision " +
  978. "floating-point values in the second source operand and the first source " +
  979. "operand and returns the results of the comparison to the destination operand.";
  980. break;
  981. case "vcmpeq_usps":
  982. instructionInfo = "Performs a SIMD equal (unordered, signaling) compare of the packed " +
  983. "single-precision floating-point values in the second source operand and " +
  984. "the first source operand and returns the results of the comparison to the " +
  985. "destination operand.";
  986. break;
  987. case "vcmpnge_uqps":
  988. instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, non-signaling) " +
  989. "compare of the packed single-precision floating-point values in the " +
  990. "second source operand and the first source operand and returns the " +
  991. "results of the comparison to the destination operand.";
  992. break;
  993. case "vcmpngt_uqps":
  994. instructionInfo = "Performs a SIMD not-greater-than (unordered, nonsignaling) compare of the " +
  995. "packed single-precision floating-point values in the second source operand " +
  996. "and the first source operand and returns the results of the comparison to " +
  997. "the destination operand.";
  998. break;
  999. case "vcmpfalse_osps":
  1000. instructionInfo = "Performs a SIMD false (ordered, signaling) compare of the packed " +
  1001. "single-precision floating-point values in the second source operand and " +
  1002. "the first source operand and returns the results of the comparison to " +
  1003. "the destination operand.";
  1004. break;
  1005. case "vcmpneq_osps":
  1006. instructionInfo = "Performs a SIMD not-equal (ordered, signaling) compare of the packed " +
  1007. "single-precision floating-point values in the second source operand " +
  1008. "and the first source operand and returns the results of the comparison " +
  1009. "to the destination operand.";
  1010. break;
  1011. case "vcmpge_oqps":
  1012. instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, nonsignaling) compare of " +
  1013. "the packed single-precision floating-point values in the second source " +
  1014. "operand and the first source operand and returns the results of the " +
  1015. "comparison to the destination operand.";
  1016. break;
  1017. case "vcmpgt_oqps":
  1018. instructionInfo = "Performs a SIMD greater-than (ordered, nonsignaling) compare of the packed " +
  1019. "single-precision floating-point values in the second source operand and " +
  1020. "the first source operand and returns the results of the comparison to the " +
  1021. "destination operand.";
  1022. break;
  1023. case "vcmptrue_uss":
  1024. instructionInfo = "Performs a SIMD true (unordered, signaling) compare of the packed " +
  1025. "single-precision floating-point values in the second source operand and " +
  1026. "the first source operand and returns the results of the comparison to the " +
  1027. "destination operand.";
  1028. break;
  1029. case "cmps":
  1030. case "cmpsb":
  1031. case "cmpsw":
  1032. case "cmpsd":
  1033. case "vcmpsd":
  1034. case "cmpsq":
  1035. instructionInfo = "Compares the byte, word, doubleword, or quadword specified with the first " +
  1036. "source operand with the byte, word, doubleword, or quadword specified with " +
  1037. "the second source operand and sets the status flags in the EFLAGS register " +
  1038. "according to the results.";
  1039. break;
  1040. case "vcmpngesd":
  1041. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1042. "source operand and the first source operand, using not greater than or " +
  1043. "equal, and returns the results in of the comparison to the destination " +
  1044. "operand. The comparison predicate operand (immediate operand) specifies " +
  1045. "the type of comparison performed.";
  1046. break;
  1047. case "vcmpngtsd":
  1048. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1049. "source operand and the first source operand, using not greater than, and " +
  1050. "returns the results in of the comparison to the destination operand. " +
  1051. "The comparison predicate operand (immediate operand) specifies the type of " +
  1052. "comparison performed.";
  1053. break;
  1054. case "vcmpfalsesd":
  1055. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1056. "source operand and the first source operand, using false, and returns " +
  1057. "the results in of the comparison to the destination operand. The comparison " +
  1058. "predicate operand (immediate operand) specifies the type of comparison performed.";
  1059. break;
  1060. case "vcmptruesd":
  1061. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1062. "source operand and the first source operand, using true, and returns the " +
  1063. "results in of the comparison to the destination operand. The comparison " +
  1064. "predicate operand (immediate operand) specifies the type of comparison performed.";
  1065. break;
  1066. case "vcmpgtsd":
  1067. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1068. "source operand and the first source operand, using greater than, and returns " +
  1069. "the results in of the comparison to the destination operand. The comparison " +
  1070. "predicate operand (immediate operand) specifies the type of comparison performed.";
  1071. break;
  1072. case "vcmpgesd":
  1073. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1074. "source operand and the first source operand, using greater than or equal, " +
  1075. "and returns the results in of the comparison to the destination operand. " +
  1076. "The comparison predicate operand (immediate operand) specifies the type of " +
  1077. "comparison performed.";
  1078. break;
  1079. case "cmpss":
  1080. case "vcmpss":
  1081. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1082. "source operand and the first source operand and returns the results of the " +
  1083. "comparison to the destination operand. The comparison predicate operand " +
  1084. "(immediate operand) specifies the type of comparison performed.";
  1085. break;
  1086. case "cmpeqsd":
  1087. case "vcmpeqsd":
  1088. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1089. "source operand and the first source operand with , and returns the results " +
  1090. "of the comparison to the destination operand.";
  1091. break;
  1092. case "cmpeqss":
  1093. case "vcmpeqss":
  1094. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1095. "source operand and the first source operand with equal, and returns the " +
  1096. "results of the comparison to the destination operand.";
  1097. break;
  1098. case "cmplesd":
  1099. case "vcmplesd":
  1100. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1101. "source operand and the first source operand with less than or equal, and " +
  1102. "returns the results of the comparison to the destination operand.";
  1103. break;
  1104. case "cmpless":
  1105. case "vcmpless":
  1106. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1107. "source operand and the first source operand with less than or equal, and " +
  1108. "returns the results of the comparison to the destination operand.";
  1109. break;
  1110. case "cmpltsd":
  1111. case "vcmpltsd":
  1112. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1113. "source operand and the first source operand with less than, and returns " +
  1114. "the results of the comparison to the destination operand.";
  1115. break;
  1116. case "cmpltss":
  1117. case "vcmpltss":
  1118. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1119. "source operand and the first source operand with kess than, and returns " +
  1120. "the results of the comparison to the destination operand.";
  1121. break;
  1122. case "cmpneqsd":
  1123. case "vcmpneqsd":
  1124. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1125. "source operand and the first source operand with not equal, and returns " +
  1126. "the results of the comparison to the destination operand.";
  1127. break;
  1128. case "cmpneqss":
  1129. case "vcmpneqss":
  1130. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1131. "source operand and the first source operand with not equal, and returns " +
  1132. "the results of the comparison to the destination operand.";
  1133. break;
  1134. case "cmpnlesd":
  1135. case "vcmpnlesd":
  1136. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1137. "source operand and the first source operand with not less than or equal, " +
  1138. "and returns the results of the comparison to the destination operand.";
  1139. break;
  1140. case "cmpnless":
  1141. case "vcmpnless":
  1142. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1143. "source operand and the first source operand with not less than or equal, " +
  1144. "and returns the results of the comparison to the destination operand.";
  1145. break;
  1146. case "cmpnltsd":
  1147. case "vcmpnltsd":
  1148. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1149. "source operand and the first source operand with not less than, and " +
  1150. "returns the results of the comparison to the destination operand.";
  1151. break;
  1152. case "cmpnltss":
  1153. case "vcmpnltss":
  1154. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1155. "source operand and the first source operand with not less than, and returns " +
  1156. "the results of the comparison to the destination operand.";
  1157. break;
  1158. case "cmpordsd":
  1159. case "vcmpordsd":
  1160. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1161. "source operand and the first source operand with ordered, and returns the " +
  1162. "results of the comparison to the destination operand.";
  1163. break;
  1164. case "cmpordss":
  1165. case "vcmpordss":
  1166. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1167. "source operand and the first source operand with ordered, and returns the " +
  1168. "results of the comparison to the destination operand.";
  1169. break;
  1170. case "vcmpngess":
  1171. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1172. "source operand and the first source operand with not greater than or equal, " +
  1173. "and returns the results of the comparison to the destination operand.";
  1174. break;
  1175. case "vcmpngtss":
  1176. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1177. "source operand and the first source operand with not greater than, and " +
  1178. "returns the results of the comparison to the destination operand.";
  1179. break;
  1180. case "vcmpfalsess":
  1181. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1182. "source operand and the first source operand with false, and returns the " +
  1183. "results of the comparison to the destination operand.";
  1184. break;
  1185. case "vcmpgess":
  1186. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1187. "source operand and the first source operand with greater than or equal, " +
  1188. "and returns the results of the comparison to the destination operand.";
  1189. break;
  1190. case "vcmpgtss":
  1191. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1192. "source operand and the first source operand with greater than, and " +
  1193. "returns the results of the comparison to the destination operand.";
  1194. break;
  1195. case "vcmptruess":
  1196. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1197. "source operand and the first source operand with true, and returns the " +
  1198. "results of the comparison to the destination operand.";
  1199. break;
  1200. case "cmpunordsd":
  1201. case "vcmpunordsd":
  1202. instructionInfo = "Compares the low double-precision floating-point values in the second " +
  1203. "source operand and the first source operand with unordered, and returns " +
  1204. "the results of the comparison to the destination operand.";
  1205. break;
  1206. case "cmpunordss":
  1207. case "vcmpunordss":
  1208. instructionInfo = "Compares the low single-precision floating-point values in the second " +
  1209. "source operand and the first source operand with unordered, and returns " +
  1210. "the results of the comparison to the destination operand.";
  1211. break;
  1212. case "cmpxchg":
  1213. instructionInfo = "Compares the value in the AL, AX, EAX, or RAX register with the first " +
  1214. "operand (destination operand). If the two values are equal, the second " +
  1215. "operand (source operand) is loaded into the destination operand. " +
  1216. "Otherwise, the destination operand is loaded into the AL, AX, EAX or RAX " +
  1217. "register. RAX register is available only in 64-bit mode.";
  1218. break;
  1219. case "cmpxchg8b":
  1220. case "cmpxchg16b":
  1221. instructionInfo = "Compares the 64-bit value in EDX:EAX (or 128-bit value in RDX:RAX if " +
  1222. "operand size is 128 bits) with the operand (destination operand). " +
  1223. "If the values are equal, the 64-bit value in ECX:EBX (or 128-bit value in " +
  1224. "RCX:RBX) is stored in the destination operand. Otherwise, the value in the " +
  1225. "destination operand is loaded into EDX:EAX (or RDX:RAX). The destination " +
  1226. "operand is an 8-byte memory location (or 16-byte memory location if " +
  1227. "operand size is 128 bits). For the EDX:EAX and ECX:EBX register pairs, EDX " +
  1228. "and ECX contain the high-order 32 bits and EAX and EBX contain the " +
  1229. "low-order 32 bits of a 64-bit value. For the RDX:RAX and RCX:RBX register " +
  1230. "pairs, RDX and RCX contain the high-order 64 bits and RAX and RBX contain " +
  1231. "the low-order 64bits of a 128-bit value.";
  1232. break;
  1233. case "comisd":
  1234. case "vcomisd":
  1235. instructionInfo = "Compares the double-precision floating-point values in the low quadwords " +
  1236. "of operand 1 (first operand) and operand 2 (second operand), and sets the " +
  1237. "ZF, PF, and CF flags in the EFLAGS register according to the result " +
  1238. "(unordered, greater than, less than, or equal). The OF, SF and AF flags in " +
  1239. "the EFLAGS register are set to 0. The unordered result is returned if " +
  1240. "either source operand is a NaN (QNaN or SNaN).";
  1241. break;
  1242. case "comiss":
  1243. case "vcomiss":
  1244. instructionInfo = "Compares the single-precision floating-point values in the low quadwords " +
  1245. "of operand 1 (first operand) and operand 2 (second operand), and sets the " +
  1246. "ZF, PF, and CF flags in the EFLAGS register according to the result " +
  1247. "(unordered, greater than, less than, or equal). The OF, SF and AF flags in " +
  1248. "the EFLAGS register are set to 0. The unordered result is returned if " +
  1249. "either source operand is a NaN (QNaN or SNaN).";
  1250. break;
  1251. case "cpuid":
  1252. instructionInfo = "The ID flag (bit 21) in the EFLAGS register indicates support for the " +
  1253. "CPUID instruction. If a software procedure can set and clear this flag, " +
  1254. "the processor executing the procedure supports the CPUID instruction. " +
  1255. "This instruction operates the same in non-64-bit modes and 64-bit mode.";
  1256. break;
  1257. case "crc32":
  1258. instructionInfo = "Starting with an initial value in the first operand (destination operand), " +
  1259. "accumulates a CRC32 (polynomial 11EDC6F41H) value for the second operand " +
  1260. "(source operand) and stores the result in the destination operand. " +
  1261. "The source operand can be a register or a memory location. The destination " +
  1262. "operand must be an r32 or r64 register. If the destination is an r64 " +
  1263. "register, then the 32-bit result is stored in the least significant double " +
  1264. "word and 00000000H is stored in the most significant double word of the r64 register.";
  1265. break;
  1266. case "cvtdq2pd":
  1267. case "vcvtdq2pd":
  1268. instructionInfo = "Converts two, four or eight packed signed doubleword integers in the source " +
  1269. "operand (the second operand) to two, four or eight packed double-precision " +
  1270. "floating-point values in the destination operand (the first operand).";
  1271. break;
  1272. case "cvtdq2ps":
  1273. case "vcvtdq2ps":
  1274. instructionInfo = "Converts four, eight or sixteen packed signed doubleword integers in the " +
  1275. "source operand to four, eight or sixteen packed single-precision " +
  1276. "floating-point values in the destination operand.";
  1277. break;
  1278. case "cvtpd2dq":
  1279. case "vcvtpd2dq":
  1280. instructionInfo = "Converts packed double-precision floating-point values in the source " +
  1281. "operand (second operand) to packed signed doubleword integers in the " +
  1282. "destination operand (first operand).";
  1283. break;
  1284. case "cvtpd2pi":
  1285. instructionInfo = "Converts two packed double-precision floating-point values in the source " +
  1286. "operand (second operand) to two packed signed doubleword integers in the " +
  1287. "destination operand (first operand).";
  1288. break;
  1289. case "cvtpd2ps":
  1290. case "vcvtpd2ps":
  1291. instructionInfo = "Converts two, four or eight packed double-precision floating-point values " +
  1292. "in the source operand (second operand) to two, four or eight packed " +
  1293. "single-precision floating-point values in the destination operand (first operand).";
  1294. break;
  1295. case "cvtpi2pd":
  1296. case "vcvtpi2pd":
  1297. instructionInfo = "Converts two packed signed doubleword integers in the source operand " +
  1298. "(second operand) to two packed double-precision floating-point values in " +
  1299. "the destination operand (first operand).";
  1300. break;
  1301. case "cvtpi2ps":
  1302. case "vcvtpi2ps":
  1303. instructionInfo = "Converts two packed signed doubleword integers in the source operand " +
  1304. "(second operand) to two packed single-precision floating-point values in " +
  1305. "the destination operand (first operand).";
  1306. break;
  1307. case "cvtps2dq":
  1308. case "vcvtps2dq":
  1309. instructionInfo = "Converts four, eight or sixteen packed single-precision floating-point " +
  1310. "values in the source operand to four, eight or sixteen signed doubleword " +
  1311. "integers in the destination operand.";
  1312. break;
  1313. case "cvtps2pd":
  1314. case "vcvtps2pd":
  1315. instructionInfo = "Converts two, four or eight packed single-precision floating-point values " +
  1316. "in the source operand (second operand) to two, four or eight packed " +
  1317. "double-precision floating-point values in the destination operand (first operand).";
  1318. break;
  1319. case "cvtps2pi":
  1320. case "vcvtps2pi":
  1321. instructionInfo = "Converts two packed single-precision floating-point values in the source " +
  1322. "operand (second operand) to two packed signed doubleword integers in the " +
  1323. "destination operand (first operand).";
  1324. break;
  1325. case "cvtsd2si":
  1326. case "vcvtsd2si":
  1327. instructionInfo = "Converts a double-precision floating-point value in the source operand " +
  1328. "(the second operand) to a signed double-word integer in the destination " +
  1329. "operand (first operand). The source operand can be an XMM register or a " +
  1330. "64-bit memory location. The destination operand is a general-purpose " +
  1331. "register. When the source operand is an XMM register, the double-precision " +
  1332. "floating-point value is contained in the low quadword of the register.";
  1333. break;
  1334. case "cvtsd2ss":
  1335. case "vcvtsd2ss":
  1336. instructionInfo = "Converts a double-precision floating-point value in the \"convert-from\" " +
  1337. "source operand (the second operand in SSE2 version, otherwise the third " +
  1338. "operand) to a single-precision floating-point value in the destination operand.";
  1339. break;
  1340. case "cvtsi2sd":
  1341. case "vcvtsi2sd":
  1342. instructionInfo = "Converts a signed doubleword integer (or signed quadword integer if " +
  1343. "operand size is 64 bits) in the \"convert-from\" source " +
  1344. "operand to a double-precision floating-point value in the destination " +
  1345. "operand. The result is stored in the low quadword of the destination " +
  1346. "operand, and the high quadword left unchanged. When conversion is inexact, " +
  1347. "the value returned is rounded according to the rounding control bits in the " +
  1348. "MXCSR register.";
  1349. break;
  1350. case "cvtsi2ss":
  1351. case "vcvtsi2ss":
  1352. instructionInfo = "Converts a signed doubleword integer (or signed quadword integer if " +
  1353. "operand size is 64 bits) in the \"convert-from\" source " +
  1354. "operand to a single-precision floating-point value in the destination " +
  1355. "operand (first operand). The \"convert-from\" source " +
  1356. "operand can be a general-purpose register or a memory location. The " +
  1357. "destination operand is an XMM register. The result is stored in the low " +
  1358. "doubleword of the destination operand, and the upper three doublewords are " +
  1359. "left unchanged. When a conversion is inexact, the value returned is rounded " +
  1360. "according to the rounding control bits in the MXCSR register or the " +
  1361. "embedded rounding control bits.";
  1362. break;
  1363. case "cvtss2sd":
  1364. case "vcvtss2sd":
  1365. instructionInfo = "Converts a single-precision floating-point value in the \"convert-from\" " +
  1366. "source operand to a double-precision floating-point value in the " +
  1367. "destination operand. When the \"convert-from\" source " +
  1368. "operand is an XMM register, the single-precision floating-point value is " +
  1369. "contained in the low doubleword of the register. The result is stored in " +
  1370. "the low quadword of the destination operand.";
  1371. break;
  1372. case "cvtss2si":
  1373. case "vcvtss2si":
  1374. instructionInfo = "Converts a single-precision floating-point value in the source operand (the " +
  1375. "second operand) to a signed doubleword integer (or signed quadword integer " +
  1376. "if operand size is 64 bits) in the destination operand (the first operand). " +
  1377. "The source operand can be an XMM register or a memory location. The " +
  1378. "destination operand is a general-purpose register. When the source operand " +
  1379. "is an XMM register, the single-precision floating-point value is contained " +
  1380. "in the low doubleword of the register.";
  1381. break;
  1382. case "cvttpd2dq":
  1383. case "vcvttpd2dq":
  1384. instructionInfo = "Converts two, four or eight packed double-precision floating-point values " +
  1385. "in the source operand (second operand) to two, four or eight packed signed " +
  1386. "doubleword integers in the destination operand (first operand).";
  1387. break;
  1388. case "cvttpd2pi":
  1389. case "vcvttpd2pi":
  1390. instructionInfo = "Converts two packed double-precision floating-point values in the source " +
  1391. "operand (second operand) to two packed signed doubleword integers in the " +
  1392. "destination operand (first operand). The source operand can be an XMM " +
  1393. "register or a 128-bit memory location. The destination operand is an MMX " +
  1394. "technology register.";
  1395. break;
  1396. case "cvttps2dq":
  1397. case "vcvttps2dq":
  1398. instructionInfo = "Converts four, eight or sixteen packed single-precision floating-point " +
  1399. "values in the source operand to four, eight or sixteen signed doubleword " +
  1400. "integers in the destination operand.";
  1401. break;
  1402. case "cvttps2pi":
  1403. case "vcvttps2pi":
  1404. instructionInfo = "Converts two packed single-precision floating-point values in the source " +
  1405. "operand (second operand) to two packed signed doubleword integers in the " +
  1406. "destination operand (first operand). The source operand can be an XMM " +
  1407. "register or a 64-bit memory location. The destination operand is an MMX " +
  1408. "technology register. When the source operand is an XMM register, the two " +
  1409. "single-precision floating-point values are contained in the low quadword " +
  1410. "of the register.";
  1411. break;
  1412. case "cvttsd2si":
  1413. case "vcvttsd2si":
  1414. instructionInfo = "Converts a double-precision floating-point value in the source operand " +
  1415. "(the second operand) to a signed double-word integer (or signed quadword " +
  1416. "integer if operand size is 64 bits) in the destination operand (the first " +
  1417. "operand). The source operand can be an XMM register or a 64-bit memory " +
  1418. "location. The destination operand is a general purpose register. When the " +
  1419. "source operand is an XMM register, the double-precision floating-point " +
  1420. "value is contained in the low quadword of the register.";
  1421. break;
  1422. case "cvttss2si":
  1423. case "vcvttss2si":
  1424. instructionInfo = "Converts a single-precision floating-point value in the source operand " +
  1425. "(the second operand) to a signed double-word integer (or signed quadword " +
  1426. "integer if operand size is 64 bits) in the destination operand (the first " +
  1427. "operand). The source operand can be an XMM register or a 32-bit memory " +
  1428. "location. The destination operand is a general purpose register. When the " +
  1429. "source operand is an XMM register, the single-precision floating-point " +
  1430. "value is contained in the low doubleword of the register.";
  1431. break;
  1432. case "daa":
  1433. instructionInfo = "Adjusts the sum of two packed BCD values to create a packed BCD result. " +
  1434. "The AL register is the implied source and destination operand. The DAA " +
  1435. "instruction is only useful when it follows an ADD instruction that adds " +
  1436. "(binary addition) two 2-digit, packed BCD values and stores a byte result " +
  1437. "in the AL register. The DAA instruction then adjusts the contents of the " +
  1438. "AL register to contain the correct 2-digit, packed BCD result. If a decimal " +
  1439. "carry is detected, the CF and AF flags are set accordingly.";
  1440. break;
  1441. case "das":
  1442. instructionInfo = "Adjusts the result of the subtraction of two packed BCD values to create " +
  1443. "a packed BCD result. The AL register is the implied source and destination " +
  1444. "operand. The DAS instruction is only useful when it follows a SUB " +
  1445. "instruction that subtracts (binary subtraction) one 2-digit, packed BCD " +
  1446. "value from another and stores a byte result in the AL register. The DAS " +
  1447. "instruction then adjusts the contents of the AL register to contain the " +
  1448. "correct 2-digit, packed BCD result. If a decimal borrow is detected, the CF " +
  1449. "and AF flags are set accordingly.";
  1450. break;
  1451. case "dec":
  1452. instructionInfo = "Subtracts 1 from the destination operand, while preserving the state of " +
  1453. "the CF flag. The destination operand can be a register or a memory location. " +
  1454. "This instruction allows a loop counter to be updated without disturbing the " +
  1455. "CF flag. (To perform a decrement operation that updates the CF flag, use a " +
  1456. "SUB instruction with an immediate operand of 1.)";
  1457. break;
  1458. case "div":
  1459. instructionInfo = "Divides unsigned the value in the AX, DX:AX, EDX:EAX, or RDX:RAX registers " +
  1460. "(dividend) by the source operand (divisor) and stores the result in the AX " +
  1461. "(AH:AL), DX:AX, EDX:EAX, or RDX:RAX registers. The source operand can be a " +
  1462. "general-purpose register or a memory location. The action of this " +
  1463. "instruction depends on the operand size (dividend/divisor). Division using " +
  1464. "64-bit operand is available only in 64-bit mode.";
  1465. break;
  1466. case "divpd":
  1467. case "vdivpd":
  1468. instructionInfo = "Performs a SIMD divide of the double-precision floating-point values in the " +
  1469. "first source operand by the floating-point values in the second source " +
  1470. "operand (the third operand). Results are written to the destination operand " +
  1471. "(the first operand).";
  1472. break;
  1473. case "divps":
  1474. case "vdivps":
  1475. instructionInfo = "Performs a SIMD divide of the four, eight or sixteen packed single-precision " +
  1476. "floating-point values in the first source operand (the second operand) by " +
  1477. "the four, eight or sixteen packed single-precision floating-point values in " +
  1478. "the second source operand (the third operand). Results are written to the " +
  1479. "destination operand (the first operand).";
  1480. break;
  1481. case "divsd":
  1482. case "vdivsd":
  1483. instructionInfo = "Divides the low double-precision floating-point value in the first source " +
  1484. "operand by the low double-precision floating-point value in the second " +
  1485. "source operand, and stores the double-precision floating-point result in " +
  1486. "the destination operand. The second source operand can be an XMM register " +
  1487. "or a 64-bit memory location. The first source and destination are XMM registers.";
  1488. break;
  1489. case "divss":
  1490. case "vdivss":
  1491. instructionInfo = "Divides the low single-precision floating-point value in the first source " +
  1492. "operand by the low single-precision floating-point value in the second " +
  1493. "source operand, and stores the single-precision floating-point result in " +
  1494. "the destination operand. The second source operand can be an XMM register " +
  1495. "or a 32-bit memory location.";
  1496. break;
  1497. case "dppd":
  1498. case "vdppd":
  1499. instructionInfo = "Conditionally multiplies the packed double-precision floating-point values " +
  1500. "in the destination operand (first operand) with the packed double-precision " +
  1501. "floating-point values in the source (second operand) depending on a mask " +
  1502. "extracted from bits [5:4] of the immediate operand (third operand). If a " +
  1503. "condition mask bit is zero, the corresponding multiplication is replaced by " +
  1504. "a value of 0.0 in the manner described by Section 12.8.4 of Intel " +
  1505. "64 and IA-32 Architectures Software Developers Manual, Volume 1.";
  1506. break;
  1507. case "dpps":
  1508. case "vdpps":
  1509. instructionInfo = "Conditionally multiplies the packed single precision floating-point values " +
  1510. "in the destination operand (first operand) with the packed single-precision " +
  1511. "floats in the source (second operand) depending on a mask extracted from " +
  1512. "the high 4 bits of the immediate byte (third operand). If a condition mask " +
  1513. "bit in Imm8[7:4] is zero, the corresponding multiplication is replaced by a " +
  1514. "value of 0.0 in the manner described by Section 12.8.4 of Intel " +
  1515. "64 and IA-32 Architectures Software Developers Manual, Volume 1.";
  1516. break;
  1517. case "emms":
  1518. instructionInfo = "Sets the values of all the tags in the x87 FPU tag word to empty (all 1s). " +
  1519. "This operation marks the x87 FPU data registers (which are aliased to the " +
  1520. "MMX technology registers) as available for use by x87 FPU floating-point " +
  1521. "instructions. All other MMX instructions (other than the EMMS instruction) " +
  1522. "set all the tags in x87 FPU tag word to valid (all 0s).";
  1523. break;
  1524. case "enter":
  1525. instructionInfo = "Creates a stack frame (comprising of space for dynamic storage and 1-32 " +
  1526. "frame pointer storage) for a procedure. The first operand (imm16) specifies " +
  1527. "the size of the dynamic storage in the stack frame (that is, the number of " +
  1528. "bytes of dynamically allocated on the stack for the procedure). The second " +
  1529. "operand (imm8) gives the lexical nesting level (0 to 31) of the procedure. " +
  1530. "The nesting level (imm8 mod 32) and the OperandSize attribute determine the " +
  1531. "size in bytes of the storage space for frame pointers.";
  1532. break;
  1533. case "extractps":
  1534. case "vextractps":
  1535. instructionInfo = "Extracts a single-precision floating-point value from the source operand " +
  1536. "(second operand) at the 32-bit offset specified from imm8. Immediate bits " +
  1537. "higher than the most significant offset for the vector length are ignored.";
  1538. break;
  1539. case "f2xm1":
  1540. instructionInfo = "Computes the exponential value of 2 to the power of the source operand " +
  1541. "minus 1. The source operand is located in register ST(0) and the result is " +
  1542. "also stored in ST(0). The value of the source operand must lie in the range " +
  1543. "-1.0 to +1.0. If the source value is outside this range, the " +
  1544. "result is undefined.";
  1545. break;
  1546. case "fabs":
  1547. instructionInfo = "Clears the sign bit of ST(0) to create the absolute value of the operand. " +
  1548. "The following table shows the results obtained when creating the absolute " +
  1549. "value of various classes of numbers.";
  1550. break;
  1551. case "fadd":
  1552. case "faddp":
  1553. case "fiadd":
  1554. instructionInfo = "Adds the destination and source operands and stores the sum in the " +
  1555. "destination location. The destination operand is always an FPU register; " +
  1556. "the source operand can be a register or a memory location. Source operands " +
  1557. "in memory can be in single-precision or double-precision floating-point " +
  1558. "format or in word or doubleword integer format.";
  1559. break;
  1560. case "fbld":
  1561. instructionInfo = "Converts the BCD source operand into double extended-precision " +
  1562. "floating-point format and pushes the value onto the FPU stack. The " +
  1563. "source operand is loaded without rounding errors. The sign of the source " +
  1564. "operand is preserved, including that of \xe2\x88\x920.";
  1565. break;
  1566. case "fbstp":
  1567. instructionInfo = "Converts the value in the ST(0) register to an 18-digit packed BCD integer, " +
  1568. "stores the result in the destination operand, and pops the register stack. " +
  1569. "If the source value is a non-integral value, it is rounded to an integer " +
  1570. "value, according to rounding mode specified by the RC field of the FPU " +
  1571. "control word. To pop the register stack, the processor marks the ST(0) " +
  1572. "register as empty and increments the stack pointer (TOP) by 1.";
  1573. break;
  1574. case "fchs":
  1575. instructionInfo = "Complements the sign bit of ST(0). This operation changes a positive value " +
  1576. "into a negative value of equal magnitude or vice versa. The following table " +
  1577. "shows the results obtained when changing the sign of various classes of numbers.";
  1578. break;
  1579. case "fclex":
  1580. case "fnclex":
  1581. instructionInfo = "Clears the floating-point exception flags (PE, UE, OE, ZE, DE, and IE), " +
  1582. "the exception summary status flag (ES), the stack fault flag (SF), and the " +
  1583. "busy flag (B) in the FPU status word. The FCLEX instruction checks for and " +
  1584. "handles any pending unmasked floating-point exceptions before clearing the " +
  1585. "exception flags; the FNCLEX instruction does not.";
  1586. break;
  1587. case "fcmovb":
  1588. case "fcmove":
  1589. case "fcmovbe":
  1590. case "fcmovu":
  1591. case "fcmovnb":
  1592. case "fcmovne":
  1593. case "fcmovnbe":
  1594. case "fcmovnu":
  1595. instructionInfo = "Tests the status flags in the EFLAGS register and moves the source operand " +
  1596. "(second operand) to the destination operand (first operand) if the given " +
  1597. "test condition is true. The condition for each mnemonic os given in the " +
  1598. "Description column above and in Chapter 8 in the Intel 64 and " +
  1599. "IA-32 Architectures Software Developers Manual, Volume 1. " +
  1600. "The source operand is always in the ST(i) register and the destination " +
  1601. "operand is always ST(0).";
  1602. break;
  1603. case "fcom":
  1604. case "fcomp":
  1605. case "fcompp":
  1606. instructionInfo = "Compares the contents of register ST(0) and source value and sets condition " +
  1607. "code flags C0, C2, and C3 in the FPU status word according to the results. " +
  1608. "The source operand can be a data register or a memory location. " +
  1609. "If no source operand is given, the value in ST(0) is compared with the " +
  1610. "value in ST(1). The sign of zero is ignored, so that -0.0 is " +
  1611. "equal to +0.0.";
  1612. break;
  1613. case "fcomi":
  1614. case "fcomip":
  1615. case "fucomi":
  1616. case "fucomip":
  1617. instructionInfo = "Performs an unordered comparison of the contents of registers ST(0) and " +
  1618. "ST(i) and sets the status flags ZF, PF, and CF in the EFLAGS register " +
  1619. "according to the results. The sign of zero is ignored " +
  1620. "for comparisons, so that -0.0 is equal to +0.0.";
  1621. break;
  1622. case "fcos":
  1623. instructionInfo = "Computes the approximate cosine of the source operand in register ST(0) " +
  1624. "and stores the result in ST(0). The source operand must be given in " +
  1625. "radians and must be within the range -2^63 to " +
  1626. "+2^63.";
  1627. break;
  1628. case "fdecstp":
  1629. instructionInfo = "Subtracts one from the TOP field of the FPU status word (decrements the " +
  1630. "top-of-stack pointer). If the TOP field contains a 0, it is set to 7. The " +
  1631. "effect of this instruction is to rotate the stack by one position. " +
  1632. "The contents of the FPU data registers and tag register are not affected.";
  1633. break;
  1634. case "fdiv":
  1635. case "fdivp":
  1636. case "fidiv":
  1637. instructionInfo = "Divides the destination operand by the source operand and stores the result " +
  1638. "in the destination location. The destination operand (dividend) is always " +
  1639. "in an FPU register; the source operand (divisor) can be a register or a " +
  1640. "memory location. Source operands in memory can be in single-precision or " +
  1641. "double-precision floating-point format, word or doubleword integer format.";
  1642. break;
  1643. case "fdivr":
  1644. case "fdivrp":
  1645. case "fidivr":
  1646. instructionInfo = "Divides the source operand by the destination operand and stores the " +
  1647. "result in the destination location. The destination operand (divisor) is " +
  1648. "always in an FPU register; the source operand (dividend) can be a register " +
  1649. "or a memory location. Source operands in memory can be in single-precision " +
  1650. "or double-precision floating-point format, word or doubleword integer format.";
  1651. break;
  1652. case "ffree":
  1653. instructionInfo = "Sets the tag in the FPU tag register associated with register ST(i) to " +
  1654. "empty (11B). The contents of ST(i) and the FPU stack-top pointer (TOP) are " +
  1655. "not affected.";
  1656. break;
  1657. case "ficom":
  1658. case "ficomp":
  1659. instructionInfo = "Compares the value in ST(0) with an integer source operand and sets the " +
  1660. "condition code flags C0, C2, and C3 in the FPU status word according to " +
  1661. "the results. The integer value is converted to double " +
  1662. "extended-precision floating-point format before the comparison is made.";
  1663. break;
  1664. case "fild":
  1665. instructionInfo = "Converts the signed-integer source operand into double extended-precision " +
  1666. "floating-point format and pushes the value onto the FPU register stack. " +
  1667. "The source operand can be a word, doubleword, or quadword integer. It is " +
  1668. "loaded without rounding errors. The sign of the source operand is preserved.";
  1669. break;
  1670. case "fmul":
  1671. case "fmulp":
  1672. case "fimul":
  1673. instructionInfo = "Multiplies the destination and source operands and stores the product in " +
  1674. "the destination location. The destination operand is always an FPU data " +
  1675. "register; the source operand can be an FPU data register or a memory " +
  1676. "location. Source operands in memory can be in single-precision or " +
  1677. "double-precision floating-point format or in word or doubleword integer format.";
  1678. break;
  1679. case "fincstp":
  1680. instructionInfo = "Adds one to the TOP field of the FPU status word (increments the " +
  1681. "top-of-stack pointer). If the TOP field contains a 7, it is set to 0. " +
  1682. "The effect of this instruction is to rotate the stack by one position. " +
  1683. "The contents of the FPU data registers and tag register are not affected. " +
  1684. "This operation is not equivalent to popping the stack, because the tag for " +
  1685. "the previous top-of-stack register is not marked empty.";
  1686. break;
  1687. case "finit":
  1688. case "fninit":
  1689. instructionInfo = "Sets the FPU control, status, tag, instruction pointer, and data pointer " +
  1690. "registers to their default states. The FPU control word is set to 037FH " +
  1691. "(round to nearest, all exceptions masked, 64-bit precision). The status word " +
  1692. "is cleared (no exception flags set, TOP is set to 0). The data registers " +
  1693. "in the register stack are left unchanged, but they are all tagged as empty " +
  1694. "(11B). Both the instruction and data pointers are cleared.";
  1695. break;
  1696. case "fist":
  1697. case "fistp":
  1698. instructionInfo = "The FIST instruction converts the value in the ST(0) register to a signed " +
  1699. "integer and stores the result in the destination operand. Values can be " +
  1700. "stored in word or doubleword integer format. The destination operand " +
  1701. "specifies the address where the first byte of the destination value is to " +
  1702. "be stored.";
  1703. break;
  1704. case "fisttp":
  1705. instructionInfo = "FISTTP converts the value in ST into a signed integer using truncation " +
  1706. "(chop) as rounding mode, transfers the result to the destination, and pop ST. " +
  1707. "FISTTP accepts word, short integer, and long integer destinations.";
  1708. break;
  1709. case "fsub":
  1710. case "fsubp":
  1711. case "fisub":
  1712. instructionInfo = "Subtracts the source operand from the destination operand and stores the " +
  1713. "difference in the destination location. The destination operand is always " +
  1714. "an FPU data register; the source operand can be a register or a memory " +
  1715. "location. Source operands in memory can be in single-precision or " +
  1716. "double-precision floating-point format or in word or doubleword integer format.";
  1717. break;
  1718. case "fsubr":
  1719. case "fsubrp":
  1720. case "fisubr":
  1721. instructionInfo = "Subtracts the destination operand from the source operand and stores the " +
  1722. "difference in the destination location. The destination operand is always " +
  1723. "an FPU register; the source operand can be a register or a memory location. " +
  1724. "Source operands in memory can be in single-precision or double-precision " +
  1725. "floating-point format or in word or doubleword integer format.";
  1726. break;
  1727. case "fld":
  1728. instructionInfo = "Pushes the source operand onto the FPU register stack. The source operand " +
  1729. "can be in single-precision, double-precision, or double extended-precision " +
  1730. "floating-point format. If the source operand is in single-precision or " +
  1731. "double-precision floating-point format, it is automatically converted to " +
  1732. "the double extended-precision floating-point format before being pushed on " +
  1733. "the stack.";
  1734. break;
  1735. case "fld1":
  1736. case "fldl2t":
  1737. case "fldl2e":
  1738. case "fldpi":
  1739. case "fldlg2":
  1740. case "fldln2":
  1741. case "fldz":
  1742. instructionInfo = "Push one of seven commonly used constants (in double extended-precision " +
  1743. "floating-point format) onto the FPU register stack. The constants that can " +
  1744. "be loaded with these instructions include +1.0, +0.0, log10^2, " +
  1745. "loge^2, pi, log2^10, and log2^e. For " +
  1746. "each constant, an internal 66-bit constant is rounded (as specified by the " +
  1747. "RC field in the FPU control word) to double extended-precision " +
  1748. "floating-point format. The inexact-result exception (#P) is not generated " +
  1749. "as a result of the rounding, nor is the C1 flag set in the x87 FPU status " +
  1750. "word if the value is rounded up.";
  1751. break;
  1752. case "fldcw":
  1753. instructionInfo = "Loads the 16-bit source operand into the FPU control word. The source " +
  1754. "operand is a memory location. This instruction is typically used to " +
  1755. "establish or change the FPUs mode of operation.";
  1756. break;
  1757. case "fldenv":
  1758. instructionInfo = "Loads the complete x87 FPU operating environment from memory into the " +
  1759. "FPU registers. The source operand specifies the first byte of the " +
  1760. "operating-environment data in memory. This data is typically written to " +
  1761. "the specified memory location by a FSTENV or FNSTENV instruction.";
  1762. break;
  1763. case "fnop":
  1764. instructionInfo = "Performs no FPU operation. This instruction takes up space in the " +
  1765. "instruction stream but does not affect the FPU or machine context, except " +
  1766. "the EIP register and the FPU Instruction Pointer.";
  1767. break;
  1768. case "fsave":
  1769. case "fnsave":
  1770. instructionInfo = "Stores the current FPU state (operating environment and register stack) " +
  1771. "at the specified destination in memory, and then re-initializes the FPU. " +
  1772. "The FSAVE instruction checks for and handles pending unmasked floating-point " +
  1773. "exceptions before storing the FPU state; the FNSAVE instruction does not.";
  1774. break;
  1775. case "fstcw":
  1776. case "fnstcw":
  1777. instructionInfo = "Stores the current value of the FPU control word at the specified " +
  1778. "destination in memory. The FSTCW instruction checks for and handles " +
  1779. "pending unmasked floating-point exceptions before storing the control " +
  1780. "word; the FNSTCW instruction does not.";
  1781. break;
  1782. case "fstenv":
  1783. case "fnstenv":
  1784. instructionInfo = "Saves the current FPU operating environment at the memory location specified " +
  1785. "with the destination operand, and then masks all floating-point exceptions. " +
  1786. "The FPU operating environment consists of the FPU control word, status word, " +
  1787. "tag word, instruction pointer, data pointer, and last opcode.";
  1788. break;
  1789. case "fstsw":
  1790. case "fnstsw":
  1791. instructionInfo = "Stores the current value of the x87 FPU status word in the destination " +
  1792. "location. The destination operand can be either a two-byte memory location " +
  1793. "or the AX register. The FSTSW instruction checks for and handles pending " +
  1794. "unmasked floating-point exceptions before storing the status word; the " +
  1795. "FNSTSW instruction does not.";
  1796. break;
  1797. case "fpatan":
  1798. instructionInfo = "Computes the arctangent of the source operand in register ST(1) divided by " +
  1799. "the source operand in register ST(0), stores the result in ST(1), and pops " +
  1800. "the FPU register stack. The result in register ST(0) has the same sign as " +
  1801. "the source operand ST(1) and a magnitude less than +\xcf\x80.";
  1802. break;
  1803. case "fprem":
  1804. instructionInfo = "Computes the remainder obtained from dividing the value in the ST(0) " +
  1805. "register (the dividend) by the value in the ST(1) register (the divisor or " +
  1806. "modulus), and stores the result in ST(0). The remainder " +
  1807. "represents the following value:";
  1808. break;
  1809. case "fprem1":
  1810. instructionInfo = "Computes the IEEE remainder obtained from dividing the value in the ST(0) " +
  1811. "register (the dividend) by the value in the ST(1) register (the divisor or " +
  1812. "modulus), and stores the result in ST(0). The remainder " +
  1813. "represents the following value:";
  1814. break;
  1815. case "fptan":
  1816. instructionInfo = "Computes the approximate tangent of the source operand in register ST(0), " +
  1817. "stores the result in ST(0), and pushes a 1.0 onto the FPU register stack. " +
  1818. "The source operand must be given in radians and must be less than " +
  1819. "+-2^63. The following table shows the unmasked results " +
  1820. "obtained when computing the partial tangent of various classes of numbers, " +
  1821. "assuming that underflow does not occur.";
  1822. break;
  1823. case "frndint":
  1824. instructionInfo = "Rounds the source value in the ST(0) register to the nearest integral value, " +
  1825. "depending on the current rounding mode (setting of the RC field of the FPU " +
  1826. "control word), and stores the result in ST(0).";
  1827. break;
  1828. case "frstor":
  1829. instructionInfo = "Loads the FPU state (operating environment and register stack) from the " +
  1830. "memory area specified with the source operand. This state data is typically " +
  1831. "written to the specified memory location by a previous FSAVE/FNSAVE instruction.";
  1832. break;
  1833. case "fscale":
  1834. instructionInfo = "Truncates the value in the source operand (toward 0) to an integral value " +
  1835. "and adds that value to the exponent of the destination operand. The " +
  1836. "destination and source operands are floating-point values located in " +
  1837. "registers ST(0) and ST(1), respectively. This instruction provides rapid " +
  1838. "multiplication or division by integral powers of 2.";
  1839. break;
  1840. case "fsin":
  1841. instructionInfo = "Computes an approximation of the sine of the source operand in register " +
  1842. "ST(0) and stores the result in ST(0). The source operand must be given in " +
  1843. "radians and must be within the range -2^63 to " +
  1844. "+2^63.";
  1845. break;
  1846. case "fsincos":
  1847. instructionInfo = "Computes both the approximate sine and the cosine of the source operand in " +
  1848. "register ST(0), stores the sine in ST(0), and pushes the cosine onto the " +
  1849. "top of the FPU register stack. (This instruction is faster than executing " +
  1850. "the FSIN and FCOS instructions in succession.)";
  1851. break;
  1852. case "fsqrt":
  1853. instructionInfo = "Computes the square root of the source value in the ST(0) register and " +
  1854. "stores the result in ST(0).";
  1855. break;
  1856. case "fst":
  1857. case "fstp":
  1858. instructionInfo = "The FST instruction copies the value in the ST(0) register to the " +
  1859. "destination operand, which can be a memory location or another register in " +
  1860. "the FPU register stack. When storing the value in memory, the value is " +
  1861. "converted to single-precision or double-precision floating-point format.";
  1862. break;
  1863. case "ftst":
  1864. instructionInfo = "Compares the value in the ST(0) register with 0.0 and sets the condition " +
  1865. "code flags C0, C2, and C3 in the FPU status word according to the results.";
  1866. break;
  1867. case "fucom":
  1868. case "fucomp":
  1869. case "fucompp":
  1870. instructionInfo = "Performs an unordered comparison of the contents of register ST(0) and " +
  1871. "ST(i) and sets condition code flags C0, C2, and C3 in the FPU status word " +
  1872. "according to the results (see the table below). If no operand is specified, " +
  1873. "the contents of registers ST(0) and ST(1) are compared. The sign of zero " +
  1874. "is ignored, so that -0.0 is equal to +0.0.";
  1875. break;
  1876. case "wait":
  1877. case "fwait":
  1878. instructionInfo = "Causes the processor to check for and handle pending, unmasked, " +
  1879. "floating-point exceptions before proceeding. (FWAIT is an alternate " +
  1880. "mnemonic for WAIT.)";
  1881. break;
  1882. case "fxam":
  1883. instructionInfo = "Examines the contents of the ST(0) register and sets the condition code " +
  1884. "flags C0, C2, and C3 in the FPU status word to indicate the class of value " +
  1885. "or number in the register (see the table below).";
  1886. break;
  1887. case "fxch":
  1888. instructionInfo = "Exchanges the contents of registers ST(0) and ST(i). If no source operand " +
  1889. "is specified, the contents of ST(0) and ST(1) are exchanged.";
  1890. break;
  1891. case "fxrstor":
  1892. case "fxrstor64":
  1893. instructionInfo = "Reloads the x87 FPU, MMX technology, XMM, and MXCSR registers from the " +
  1894. "512-byte memory image specified in the source operand. This data should " +
  1895. "have been written to memory previously using the FXSAVE instruction, and in " +
  1896. "the same format as required by the operating modes. The first byte of the " +
  1897. "data should be located on a 16-byte boundary. There are three distinct " +
  1898. "layouts of the FXSAVE state map: one for legacy and compatibility mode, a " +
  1899. "second format for 64-bit mode FXSAVE/FXRSTOR with REX.W=0, and the third " +
  1900. "format is for 64-bit mode with FXSAVE64/FXRSTOR64.";
  1901. break;
  1902. case "fxsave":
  1903. case "fxsave64":
  1904. instructionInfo = "Saves the current state of the x87 FPU, MMX technology, XMM, and MXCSR " +
  1905. "registers to a 512-byte memory location specified in the destination " +
  1906. "operand. The content layout of the 512 byte region depends on whether the " +
  1907. "processor is operating in non-64-bit operating modes or 64-bit sub-mode of " +
  1908. "IA-32e mode.";
  1909. break;
  1910. case "fxtract":
  1911. instructionInfo = "Separates the source value in the ST(0) register into its exponent and " +
  1912. "significand, stores the exponent in ST(0), and pushes the significand onto " +
  1913. "the register stack. Following this operation, the new top-of-stack register " +
  1914. "ST(0) contains the value of the original significand expressed as a " +
  1915. "floating-point value. The sign and significand of this value are the same " +
  1916. "as those found in the source operand, and the exponent is 3FFFH (biased " +
  1917. "value for a true exponent of zero). The ST(1) register contains the value " +
  1918. "of the original operands true (unbiased) exponent expressed as " +
  1919. "a floating-point value. (The operation performed by this instruction is a " +
  1920. "superset of the IEEE-recommended logb x) function.)";
  1921. break;
  1922. case "fyl2x":
  1923. instructionInfo = "Computes (ST(1) \xe2\x88\x97 log<sub>2</sub> (ST(0))), stores the result " +
  1924. "in register ST(1), and pops the FPU register stack. The source operand in " +
  1925. "ST(0) must be a non-zero positive number.";
  1926. break;
  1927. case "fyl2xp1":
  1928. instructionInfo = "Computes (ST(1) * log(ST(0) + 1.0))^2, stores the " +
  1929. "result in register ST(1), and pops the FPU register stack. The source " +
  1930. "operand in ST(0) must be in the range:";
  1931. break;
  1932. case "gf2p8affineinvqb":
  1933. instructionInfo = "The AFFINEINVB instruction computes an affine transformation in the Galois " +
  1934. "Field 2^8. For this instruction, an affine transformation is " +
  1935. "defined by A * inv(x) + b where \"A\" is an 8 by 8 bit " +
  1936. "matrix, and \"x\" and \"b\" are " +
  1937. "8-bit vectors. The inverse of the bytes in x is defined with respect to the " +
  1938. "reduction polynomial x^8 + x^4 + x^3 + x + 1.";
  1939. break;
  1940. case "gf2p8affineqb":
  1941. instructionInfo = "The AFFINEB instruction computes an affine transformation in the Galois " +
  1942. "Field 2^8. For this instruction, an affine transformation is " +
  1943. "defined by A * x + b where \"A\" is an 8 by 8 bit " +
  1944. "matrix, and \"x\" and \"b\" are " +
  1945. "8-bit vectors. One SIMD register (operand 1) holds \"x\" " +
  1946. "as either 16, 32 or 64 8-bit vectors. A second SIMD (operand 2) register or " +
  1947. "memory operand contains 2, 4, or 8 \"A\" values, which " +
  1948. "are operated upon by the correspondingly aligned 8 \"x\" " +
  1949. "values in the first register. The \"b\" vector is " +
  1950. "constant for all calculations and contained in the immediate byte.";
  1951. break;
  1952. case "gf2p8mulb":
  1953. instructionInfo = "The instruction multiplies elements in the finite field GF(2^8), " +
  1954. "operating on a byte (field element) in the first source operand and the " +
  1955. "corresponding byte in a second source operand. The field GF(2^8) " +
  1956. "is represented in polynomial representation with the reduction polynomial " +
  1957. "x^8 + x^4 + x^3 + x + 1.";
  1958. break;
  1959. case "haddpd":
  1960. case "vhaddpd":
  1961. instructionInfo = "Adds the double-precision floating-point values in the high and low " +
  1962. "quadwords of the destination operand and stores the result in the low " +
  1963. "quadword of the destination operand.";
  1964. break;
  1965. case "haddps":
  1966. case "vhaddps":
  1967. instructionInfo = "Adds the single-precision floating-point values in the first and second " +
  1968. "dwords of the destination operand and stores the result in the first dword " +
  1969. "of the destination operand.";
  1970. break;
  1971. case "hlt":
  1972. instructionInfo = "Stops instruction execution and places the processor in a HALT state. " +
  1973. "An enabled interrupt (including NMI and SMI), a debug exception, the " +
  1974. "BINIT# signal, the INIT# signal, or the RESET# signal will resume execution. " +
  1975. "If an interrupt (including NMI) is used to resume execution after a HLT " +
  1976. "instruction, the saved instruction pointer (CS:EIP) points to the " +
  1977. "instruction following the HLT instruction.";
  1978. break;
  1979. case "hsubpd":
  1980. case "vhsubpd":
  1981. instructionInfo = "The HSUBPD instruction subtracts horizontally the packed DP FP numbers " +
  1982. "of both operands.";
  1983. break;
  1984. case "hsubps":
  1985. case "vhsubps":
  1986. instructionInfo = "Subtracts the single-precision floating-point value in the second dword of " +
  1987. "the destination operand from the first dword of the destination operand and " +
  1988. "stores the result in the first dword of the destination operand.";
  1989. break;
  1990. case "idiv":
  1991. instructionInfo = "Divides the (signed) value in the AX, DX:AX, or EDX:EAX (dividend) by the " +
  1992. "source operand (divisor) and stores the result in the AX (AH:AL), DX:AX, " +
  1993. "or EDX:EAX registers. The source operand can be a general-purpose register " +
  1994. "or a memory location. The action of this instruction depends on the operand " +
  1995. "size (dividend/divisor).";
  1996. break;
  1997. case "imul":
  1998. instructionInfo = "Performs a signed multiplication of two operands. This instruction has " +
  1999. "three forms, depending on the number of operands.";
  2000. break;
  2001. case "in":
  2002. instructionInfo = "Copies the value from the I/O port specified with the second operand " +
  2003. "(source operand) to the destination operand (first operand). The source " +
  2004. "operand can be a byte-immediate or the DX register; the destination operand " +
  2005. "can be register AL, AX, or EAX, depending on the size of the port being " +
  2006. "accessed (8, 16, or 32 bits, respectively). Using the DX register as a " +
  2007. "source operand allows I/O port addresses from 0 to 65,535 to be accessed; " +
  2008. "using a byte immediate allows I/O port addresses 0 to 255 to be accessed.";
  2009. break;
  2010. case "inc":
  2011. instructionInfo = "Adds 1 to the destination operand, while preserving the state of the CF " +
  2012. "flag. The destination operand can be a register or a memory location. " +
  2013. "This instruction allows a loop counter to be updated without disturbing " +
  2014. "the CF flag. (Use a ADD instruction with an immediate operand of 1 to " +
  2015. "perform an increment operation that does updates the CF flag.)";
  2016. break;
  2017. case "ins":
  2018. case "insb":
  2019. case "insw":
  2020. case "insd":
  2021. case "vinsd":
  2022. instructionInfo = "Copies the data from the I/O port specified with the source operand " +
  2023. "(second operand) to the destination operand (first operand). The source " +
  2024. "operand is an I/O port address (from 0 to 65,535) that is read from the DX " +
  2025. "register. The destination operand is a memory location, the address of " +
  2026. "which is read from either the ES:DI, ES:EDI or the RDI registers (depending " +
  2027. "on the address-size attribute of the instruction, 16, 32 or 64, " +
  2028. "respectively). (The ES segment cannot be overridden with a segment override " +
  2029. "prefix.) The size of the I/O port being accessed (that is, the size of the " +
  2030. "source and destination operands) is determined by the opcode for an 8-bit " +
  2031. "I/O port or by the operand-size attribute of the instruction for a 16- or " +
  2032. "32-bit I/O port.";
  2033. break;
  2034. case "insertps":
  2035. case "vinsertps":
  2036. instructionInfo = "Copy a single-precision scalar floating-point element into a 128-bit vector " +
  2037. "register. The immediate operand has three fields, where the ZMask bits " +
  2038. "specify which elements of the destination will be set to zero, the Count_D " +
  2039. "bits specify which element of the destination will be overwritten with the " +
  2040. "scalar value, and for vector register sources the Count_S bits specify " +
  2041. "which element of the source will be copied. When the scalar source is a " +
  2042. "memory operand the Count_S bits are ignored.";
  2043. break;
  2044. case "int":
  2045. case "into":
  2046. case "int3":
  2047. case "int1":
  2048. instructionInfo = "The INTn instruction generates a call to the interrupt or " +
  2049. "exception handler specified with the destination operand. The destination operand " +
  2050. "specifies a vector from 0 to 255, encoded as an 8-bit unsigned intermediate " +
  2051. "value. Each vector provides an index to a gate descriptor in the IDT. The " +
  2052. "first 32 vectors are reserved by Intel for system use. Some of these " +
  2053. "vectors are used for internally generated exceptions.";
  2054. break;
  2055. case "invd":
  2056. instructionInfo = "Invalidates (flushes) the processors internal caches and issues " +
  2057. "a special-function bus cycle that directs external caches to also flush " +
  2058. "themselves. Data held in internal caches is not written back to main memory.";
  2059. break;
  2060. case "invlpg":
  2061. instructionInfo = "Invalidates any translation lookaside buffer (TLB) entries specified with " +
  2062. "the source operand. The source operand is a memory address. The processor " +
  2063. "determines the page that contains that address and flushes all TLB entries " +
  2064. "for that page.";
  2065. break;
  2066. case "invpcid":
  2067. instructionInfo = "Invalidates mappings in the translation lookaside buffers (TLBs) and " +
  2068. "paging-structure caches based on process-context identifier (PCID). " +
  2069. "Invalidation is based on the INVPCID type specified in the register operand " +
  2070. "and the INVPCID descriptor specified in the memory operand.";
  2071. break;
  2072. case "iret":
  2073. case "iretd":
  2074. instructionInfo = "Returns program control from an exception or interrupt handler to a program " +
  2075. "or procedure that was interrupted by an exception, an external interrupt, " +
  2076. "or a software-generated interrupt. These instructions are also used to " +
  2077. "perform a return from a nested task. (A nested task is created when a CALL " +
  2078. "instruction is used to initiate a task switch or when an interrupt or " +
  2079. "exception causes a task switch to an interrupt or exception handler.)";
  2080. break;
  2081. case "jmp":
  2082. instructionInfo = "Transfers program control to a different point in the instruction stream " +
  2083. "without recording return information. The destination (target) operand " +
  2084. "specifies the address of the instruction being jumped to. This operand can " +
  2085. "be an immediate value, a general-purpose register, or a memory location.";
  2086. break;
  2087. case "ja":
  2088. case "jae":
  2089. case "jb":
  2090. case "jbe":
  2091. case "jc":
  2092. case "jcxz":
  2093. case "jecxz":
  2094. case "jrcxz":
  2095. case "je":
  2096. case "jg":
  2097. case "jge":
  2098. case "jl":
  2099. case "jle":
  2100. case "jna":
  2101. case "jnae":
  2102. case "jnb":
  2103. case "jnbe":
  2104. case "jnc":
  2105. case "jne":
  2106. case "jng":
  2107. case "jnge":
  2108. case "jnl":
  2109. case "jnle":
  2110. case "jno":
  2111. case "jnp":
  2112. case "jns":
  2113. case "jnz":
  2114. case "jo":
  2115. case "jp":
  2116. case "jpe":
  2117. case "jpo":
  2118. case "js":
  2119. case "jz":
  2120. instructionInfo = "Checks the state of one or more of the status flags in the EFLAGS register " +
  2121. "(CF, OF, PF, SF, and ZF) and, if the flags are in the specified state " +
  2122. "(condition), performs a jump to the target instruction specified by the " +
  2123. "destination operand. A condition code (cc) is associated with each " +
  2124. "instruction to indicate the condition being tested for. If the condition is " +
  2125. "not satisfied, the jump is not performed and execution continues with the " +
  2126. "instruction following the Jcc instruction.";
  2127. break;
  2128. case "kaddw":
  2129. case "kaddb":
  2130. case "kaddq":
  2131. case "kaddd":
  2132. instructionInfo = "Adds the vector mask k2 and the vector mask k3, and writes the result into " +
  2133. "vector mask k1.";
  2134. break;
  2135. case "kandw":
  2136. case "kandb":
  2137. case "kandq":
  2138. case "kandd":
  2139. instructionInfo = "Performs a bitwise AND between the vector mask k2 and the vector mask k3, " +
  2140. "and writes the result into vector mask k1.";
  2141. break;
  2142. case "kandnw":
  2143. case "kandnb":
  2144. case "kandnq":
  2145. case "kandnd":
  2146. instructionInfo = "Performs a bitwise AND NOT between the vector mask k2 and the vector mask " +
  2147. "k3, and writes the result into vector mask k1.";
  2148. break;
  2149. case "kmovw":
  2150. case "kmovb":
  2151. case "kmovq":
  2152. case "kmovd":
  2153. instructionInfo = "Copies values from the source operand (second operand) to the destination " +
  2154. "operand (first operand). The source and destination operands can be mask " +
  2155. "registers, memory location or general purpose. The instruction cannot be " +
  2156. "used to transfer data between general purpose registers and or memory locations.";
  2157. break;
  2158. case "knotw":
  2159. case "knotb":
  2160. case "knotq":
  2161. case "knotd":
  2162. instructionInfo = "Performs a bitwise NOT of vector mask k2 and writes the result into vector mask k1.";
  2163. break;
  2164. case "korw":
  2165. case "korb":
  2166. case "korq":
  2167. case "kord":
  2168. instructionInfo = "Performs a bitwise OR between the vector mask k2 and the vector mask k3, " +
  2169. "and writes the result into vector mask k1 (three-operand form).";
  2170. break;
  2171. case "kortestw":
  2172. case "kortestb":
  2173. case "kortestq":
  2174. case "kortestd":
  2175. instructionInfo = "Performs a bitwise OR between the vector mask register k2, and the vector " +
  2176. "mask register k1, and sets CF and ZF based on the operation result.";
  2177. break;
  2178. case "kshiftlw":
  2179. case "kshiftlb":
  2180. case "kshiftlq":
  2181. case "kshiftld":
  2182. instructionInfo = "Shifts 8/16/32/64 bits in the second operand (source operand) left by the " +
  2183. "count specified in immediate byte and place the least significant " +
  2184. "8/16/32/64 bits of the result in the destination operand. The higher bits " +
  2185. "of the destination are zero-extended. The destination is set to zero if the " +
  2186. "count value is greater than 7 (for byte shift), 15 (for word shift), 31 " +
  2187. "(for doubleword shift) or 63 (for quadword shift).";
  2188. break;
  2189. case "kshiftrw":
  2190. case "kshiftrb":
  2191. case "kshiftrq":
  2192. case "kshiftrd":
  2193. instructionInfo = "Shifts 8/16/32/64 bits in the second operand (source operand) right by the " +
  2194. "count specified in immediate and place the least significant 8/16/32/64 " +
  2195. "bits of the result in the destination operand. The higher bits of the " +
  2196. "destination are zero-extended. The destination is set to zero if the count " +
  2197. "value is greater than 7 (for byte shift), 15 (for word shift), 31 (for " +
  2198. "doubleword shift) or 63 (for quadword shift).";
  2199. break;
  2200. case "ktestw":
  2201. case "ktestb":
  2202. case "ktestq":
  2203. case "ktestd":
  2204. instructionInfo = "Performs a bitwise comparison of the bits of the first source operand and " +
  2205. "corresponding bits in the second source operand. If the AND operation " +
  2206. "produces all zeros, the ZF is set else the ZF is clear. If the bitwise " +
  2207. "AND operation of the inverted first source operand with the second source " +
  2208. "operand produces all zeros the CF is set else the CF is clear. Only the " +
  2209. "EFLAGS register is updated.";
  2210. break;
  2211. case "kunpckbw":
  2212. case "kunpckwd":
  2213. case "kunpckdq":
  2214. instructionInfo = "Unpacks the lower 8/16/32 bits of the second and third operands (source " +
  2215. "operands) into the low part of the first operand (destination operand), " +
  2216. "starting from the low bytes. The result is zero-extended in the destination.";
  2217. break;
  2218. case "kxnorw":
  2219. case "kxnorb":
  2220. case "kxnorq":
  2221. case "kxnord":
  2222. instructionInfo = "Performs a bitwise XNOR between the vector mask k2 and the vector mask k3, " +
  2223. "and writes the result into vector mask k1 (three-operand form).";
  2224. break;
  2225. case "kxorw":
  2226. case "kxorb":
  2227. case "kxorq":
  2228. case "kxord":
  2229. instructionInfo = "Performs a bitwise XOR between the vector mask k2 and the vector mask k3, " +
  2230. "and writes the result into vector mask k1 (three-operand form).";
  2231. break;
  2232. case "lahf":
  2233. instructionInfo = "This instruction executes as described above in compatibility mode and " +
  2234. "legacy mode. It is valid in 64-bit mode only if " +
  2235. "CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1.";
  2236. break;
  2237. case "lar":
  2238. instructionInfo = "Loads the access rights from the segment descriptor specified by the second " +
  2239. "operand (source operand) into the first operand (destination operand) and " +
  2240. "sets the ZF flag in the flag register. The source operand (which can be a " +
  2241. "register or a memory location) contains the segment selector for the " +
  2242. "segment descriptor being accessed. If the source operand is a memory " +
  2243. "address, only 16 bits of data are accessed. The destination operand is a " +
  2244. "general-purpose register.";
  2245. break;
  2246. case "lddqu":
  2247. case "vlddqu":
  2248. instructionInfo = "The instruction is functionally similar to (V)MOVDQU ymm/xmm, " +
  2249. "m256/m128 for loading from memory. That is: 32/16 bytes of data starting " +
  2250. "at an address specified by the source memory operand (second operand) are " +
  2251. "fetched from memory and placed in a destination register (first operand). " +
  2252. "The source operand need not be aligned on a 32/16-byte boundary. Up to 64/32 " +
  2253. "bytes may be loaded from memory; this is implementation dependent.";
  2254. break;
  2255. case "ldmxcsr":
  2256. case "vldmxcsr":
  2257. instructionInfo = "Loads the source operand into the MXCSR control/status register. The source " +
  2258. "operand is a 32-bit memory location.";
  2259. break;
  2260. case "lds":
  2261. case "les":
  2262. case "lfs":
  2263. case "lgs":
  2264. case "lss":
  2265. instructionInfo = "Loads a far pointer (segment selector and offset) from the second operand " +
  2266. "(source operand) into a segment register and the first operand (destination " +
  2267. "operand). The source operand specifies a 48-bit or a 32-bit pointer in " +
  2268. "memory depending on the current setting of the operand-size attribute (32 " +
  2269. "bits or 16 bits, respectively). The instruction opcode and the destination " +
  2270. "operand specify a segment register/general-purpose register pair. The 16-bit " +
  2271. "segment selector from the source operand is loaded into the segment " +
  2272. "register specified with the opcode (DS, SS, ES, FS, or GS). The 32-bit or " +
  2273. "16-bit offset is loaded into the register specified with the destination operand.";
  2274. break;
  2275. case "lea":
  2276. instructionInfo = "Computes the effective address of the second operand (the source operand) " +
  2277. "and stores it in the first operand (destination operand). The source operand " +
  2278. "is a memory address (offset part) specified with one of the processors " +
  2279. "addressing modes; the destination operand is a general-purpose register. " +
  2280. "The address-size and operand-size attributes affect the action performed by " +
  2281. "this instruction, as shown in the following table. The operand-size " +
  2282. "attribute of the instruction is determined by the chosen register; the " +
  2283. "address-size attribute is determined by the attribute of the code segment.";
  2284. break;
  2285. case "leave":
  2286. instructionInfo = "Releases the stack frame set up by an earlier ENTER instruction. The LEAVE " +
  2287. "instruction copies the frame pointer (in the EBP register) into the stack " +
  2288. "pointer register (ESP), which releases the stack space allocated to the " +
  2289. "stack frame. The old frame pointer (the frame pointer for the calling " +
  2290. "procedure that was saved by the ENTER instruction) is then popped from the " +
  2291. "stack into the EBP register, restoring the calling procedures " +
  2292. "stack frame.";
  2293. break;
  2294. case "lfence":
  2295. instructionInfo = "Performs a serializing operation on all load-from-memory instructions that " +
  2296. "were issued prior the LFENCE instruction. Specifically, LFENCE does not " +
  2297. "execute until all prior instructions have completed locally, and no later " +
  2298. "instruction begins execution until LFENCE completes. In particular, an " +
  2299. "instruction that loads from memory and that precedes an LFENCE receives data " +
  2300. "from memory prior to completion of the LFENCE. (An LFENCE that follows an " +
  2301. "instruction that stores to memory might complete before the " +
  2302. "data being stored have become globally visible.) Instructions following an " +
  2303. "LFENCE may be fetched from memory before the LFENCE, but they will not " +
  2304. "execute (even speculatively) until the LFENCE completes.";
  2305. break;
  2306. case "lgdt":
  2307. case "lidt":
  2308. instructionInfo = "Loads the values in the source operand into the global descriptor table " +
  2309. "register (GDTR) or the interrupt descriptor table register (IDTR). " +
  2310. "The source operand specifies a 6-byte memory location that contains the base " +
  2311. "address (a linear address) and the limit (size of table in bytes) of the " +
  2312. "global descriptor table (GDT) or the interrupt descriptor table (IDT). If " +
  2313. "operand-size attribute is 32 bits, a 16-bit limit (lower 2 bytes of the " +
  2314. "6-byte data operand) and a 32-bit base address (upper 4 bytes of the data " +
  2315. "operand) are loaded into the register. If the operand-size attribute is 16 " +
  2316. "bits, a 16-bit limit (lower 2 bytes) and a 24-bit base address (third, " +
  2317. "fourth, and fifth byte) are loaded. Here, the high-order byte of the operand " +
  2318. "is not used and the high-order byte of the base address in the GDTR or IDTR " +
  2319. "is filled with zeros.";
  2320. break;
  2321. case "lldt":
  2322. instructionInfo = "Loads the source operand into the segment selector field of the local " +
  2323. "descriptor table register (LDTR). The source operand (a general-purpose " +
  2324. "register or a memory location) contains a segment selector that points to a " +
  2325. "local descriptor table (LDT). After the segment selector is loaded in the " +
  2326. "LDTR, the processor uses the segment selector to locate the segment " +
  2327. "descriptor for the LDT in the global descriptor table (GDT). It then loads " +
  2328. "the segment limit and base address for the LDT from the segment descriptor " +
  2329. "into the LDTR. The segment registers DS, ES, SS, FS, GS, and CS are not " +
  2330. "affected by this instruction, nor is the LDTR field in the task state " +
  2331. "segment (TSS) for the current task.";
  2332. break;
  2333. case "lmsw":
  2334. instructionInfo = "Loads the source operand into the machine status word, bits 0 through 15 of " +
  2335. "register CR0. The source operand can be a 16-bit general-purpose register " +
  2336. "or a memory location. Only the low-order 4 bits of the source operand " +
  2337. "(which contains the PE, MP, EM, and TS flags) are loaded into CR0. The PG, " +
  2338. "CD, NW, AM, WP, NE, and ET flags of CR0 are not affected. The operand-size " +
  2339. "attribute has no effect on this instruction.";
  2340. break;
  2341. case "lock":
  2342. instructionInfo = "Causes the processors LOCK# signal to be asserted during " +
  2343. "execution of the accompanying instruction (turns the instruction into an " +
  2344. "atomic instruction). In a multiprocessor environment, the LOCK# signal " +
  2345. "ensures that the processor has exclusive use of any shared memory while the " +
  2346. "signal is asserted.";
  2347. break;
  2348. case "lods":
  2349. case "lodsb":
  2350. case "lodsw":
  2351. case "lodsd":
  2352. case "lodsq":
  2353. instructionInfo = "Loads a byte, word, or doubleword from the source operand into the AL, AX, " +
  2354. "or EAX register, respectively. The source operand is a memory location, the " +
  2355. "address of which is read from the DS:ESI or the DS:SI registers (depending " +
  2356. "on the address-size attribute of the instruction, 32 or 16, respectively). " +
  2357. "The DS segment may be overridden with a segment override prefix.";
  2358. break;
  2359. case "loop":
  2360. case "loope":
  2361. case "loopne":
  2362. case "loopnz":
  2363. case "loopz":
  2364. instructionInfo = "Performs a loop operation using the RCX, ECX or CX register as a counter " +
  2365. "(depending on whether address size is 64 bits, 32 bits, or 16 bits). Note " +
  2366. "that the LOOP instruction ignores REX.W; but 64-bit address size can be " +
  2367. "over-ridden using a 67H prefix. LOOPcc also accept the ZF flag as a " +
  2368. "condition for terminating the loop before the count reaches zero. With " +
  2369. "these forms of the instruction, a condition code (cc) is associated with " +
  2370. "each instruction to indicate the condition being tested for.";
  2371. break;
  2372. case "lsl":
  2373. instructionInfo = "Loads the unscrambled segment limit from the segment descriptor specified " +
  2374. "with the second operand (source operand) into the first operand (destination " +
  2375. "operand) and sets the ZF flag in the EFLAGS register. The source operand " +
  2376. "(which can be a register or a memory location) contains the segment selector " +
  2377. "for the segment descriptor being accessed. The destination operand is a " +
  2378. "general-purpose register.";
  2379. break;
  2380. case "ltr":
  2381. instructionInfo = "Loads the source operand into the segment selector field of the task " +
  2382. "register. The source operand (a general-purpose register or a memory " +
  2383. "location) contains a segment selector that points to a task state segment " +
  2384. "(TSS). After the segment selector is loaded in the task register, the " +
  2385. "processor uses the segment selector to locate the segment descriptor for the " +
  2386. "TSS in the global descriptor table (GDT). It then loads the segment limit " +
  2387. "and base address for the TSS from the segment descriptor into the task " +
  2388. "register. The task pointed to by the task register is marked busy, but a " +
  2389. "switch to the task does not occur.";
  2390. break;
  2391. case "lzcnt":
  2392. instructionInfo = "Counts the number of leading most significant zero bits in a source operand " +
  2393. "(second operand) returning the result into a destination (first operand).";
  2394. break;
  2395. case "maskmovdqu":
  2396. instructionInfo = "Stores selected bytes from the source operand (first operand) into an " +
  2397. "128-bit memory location. The mask operand (second operand) selects which " +
  2398. "bytes from the source operand are written to memory. The source and mask " +
  2399. "operands are XMM registers. The memory location specified by the effective " +
  2400. "address in the DI/EDI/RDI register (the default segment register is DS, but " +
  2401. "this may be overridden with a segment-override prefix). The memory location " +
  2402. "does not need to be aligned on a natural boundary. (The size of the store " +
  2403. "address depends on the address-size attribute.)";
  2404. break;
  2405. case "maskmovq":
  2406. instructionInfo = "Stores selected bytes from the source operand (first operand) into a 64-bit " +
  2407. "memory location. The mask operand (second operand) selects which bytes from " +
  2408. "the source operand are written to memory. The source and mask operands are " +
  2409. "MMX technology registers. The memory location specified by the effective " +
  2410. "address in the DI/EDI/RDI register (the default segment register is DS, but " +
  2411. "this may be overridden with a segment-override prefix). The memory location " +
  2412. "does not need to be aligned on a natural boundary. (The size of the store " +
  2413. "address depends on the address-size attribute.)";
  2414. break;
  2415. case "maxpd":
  2416. case "vmaxpd":
  2417. instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point values " +
  2418. "in the first source operand and the second source operand and returns the " +
  2419. "maximum value for each pair of values to the destination operand.";
  2420. break;
  2421. case "maxps":
  2422. case "vmaxps":
  2423. instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point values " +
  2424. "in the first source operand and the second source operand and returns the " +
  2425. "maximum value for each pair of values to the destination operand.";
  2426. break;
  2427. case "maxsd":
  2428. case "vmaxsd":
  2429. instructionInfo = "Compares the low double-precision floating-point values in the first source " +
  2430. "operand and the second source operand, and returns the maximum value to the " +
  2431. "low quadword of the destination operand. The second source operand can be an " +
  2432. "XMM register or a 64-bit memory location. The first source and destination " +
  2433. "operands are XMM registers. When the second source operand is a memory " +
  2434. "operand, only 64 bits are accessed.";
  2435. break;
  2436. case "maxss":
  2437. case "vmaxss":
  2438. instructionInfo = "Compares the low single-precision floating-point values in the first source " +
  2439. "operand and the second source operand, and returns the maximum value to the " +
  2440. "low doubleword of the destination operand.";
  2441. break;
  2442. case "mfence":
  2443. instructionInfo = "Performs a serializing operation on all load-from-memory and store-to-memory " +
  2444. "instructions that were issued prior the MFENCE instruction. This serializing " +
  2445. "operation guarantees that every load and store instruction that precedes the " +
  2446. "MFENCE instruction in program order becomes globally visible before any load " +
  2447. "or store instruction that follows the MFENCE instruction. The " +
  2448. "MFENCE instruction is ordered with respect to all load and store " +
  2449. "instructions, other MFENCE instructions, any LFENCE and SFENCE instructions, " +
  2450. "and any serializing instructions (such as the CPUID instruction). MFENCE " +
  2451. "does not serialize the instruction stream.";
  2452. break;
  2453. case "minpd":
  2454. case "vminpd":
  2455. instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point values " +
  2456. "in the first source operand and the second source operand and returns the " +
  2457. "minimum value for each pair of values to the destination operand.";
  2458. break;
  2459. case "minps":
  2460. case "vminps":
  2461. instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point " +
  2462. "values in the first source operand and the second source operand and returns " +
  2463. "the minimum value for each pair of values to the destination operand.";
  2464. break;
  2465. case "minsd":
  2466. case "vminsd":
  2467. instructionInfo = "Compares the low double-precision floating-point values in the first source " +
  2468. "operand and the second source operand, and returns the minimum value to the " +
  2469. "low quadword of the destination operand. When the source operand is a memory " +
  2470. "operand, only the 64 bits are accessed.";
  2471. break;
  2472. case "minss":
  2473. case "vminss":
  2474. instructionInfo = "Compares the low single-precision floating-point values in the first source " +
  2475. "operand and the second source operand and returns the minimum value to the " +
  2476. "low doubleword of the destination operand.";
  2477. break;
  2478. case "monitor":
  2479. instructionInfo = "The MONITOR instruction arms address monitoring hardware using an address " +
  2480. "specified in EAX (the address range that the monitoring hardware checks for " +
  2481. "store operations can be determined by using CPUID). A store to an address " +
  2482. "within the specified address range triggers the monitoring hardware. The " +
  2483. "state of monitor hardware is used by MWAIT.";
  2484. break;
  2485. case "mov":
  2486. instructionInfo = "Copies the second operand (source operand) to the first operand (destination " +
  2487. "operand). The source operand can be an immediate value, general-purpose " +
  2488. "register, segment register, or memory location; the destination register can " +
  2489. "be a general-purpose register, segment register, or memory location. Both " +
  2490. "operands must be the same size, which can be a byte, a word, a doubleword, " +
  2491. "or a quadword.";
  2492. break;
  2493. case "movabs":
  2494. instructionInfo = "Moves 4, 8 or 16 single-precision floating-point values from the source " +
  2495. "operand (second operand) to the destina-tion operand (first operand).";
  2496. break;
  2497. case "movapd":
  2498. case "vmovapd":
  2499. instructionInfo = "Moves 2, 4 or 8 double-precision floating-point values from the source " +
  2500. "operand (second operand) to the destination operand (first operand). This " +
  2501. "instruction can be used to load an XMM, YMM or ZMM register from an 128-bit, " +
  2502. "256-bit or 512-bit memory location, to store the contents of an XMM, YMM or " +
  2503. "ZMM register into a 128-bit, 256-bit or 512-bit memory location, or to move " +
  2504. "data between two XMM, two YMM or two ZMM registers.";
  2505. break;
  2506. case "movaps":
  2507. case "vmovaps":
  2508. instructionInfo = "Moves 4, 8 or 16 single-precision floating-point values from the source " +
  2509. "operand (second operand) to the destination operand (first operand). This " +
  2510. "instruction can be used to load an XMM, YMM or ZMM register from an 128-bit, " +
  2511. "256-bit or 512-bit memory location, to store the contents of an XMM, YMM or " +
  2512. "ZMM register into a 128-bit, 256-bit or 512-bit memory location, or to move " +
  2513. "data between two XMM, two YMM or two ZMM registers.";
  2514. break;
  2515. case "movbe":
  2516. instructionInfo = "Performs a byte swap operation on the data copied from the second operand " +
  2517. "(source operand) and store the result in the first operand (destination " +
  2518. "operand). The source operand can be a general-purpose register, or memory " +
  2519. "location; the destination register can be a general-purpose register, or a " +
  2520. "memory location; however, both operands can not be registers, and only one " +
  2521. "operand can be a memory location. Both operands must be the same size, which " +
  2522. "can be a word, a doubleword or quadword.";
  2523. break;
  2524. case "movd":
  2525. case "vmovd":
  2526. instructionInfo = "Copies a doubleword from the source operand (second operand) to the " +
  2527. "destination operand (first operand). The source and destination operands can " +
  2528. "be general-purpose registers, MMX technology registers, XMM registers, or " +
  2529. "32-bit memory locations. This instruction can be used to move a doubleword " +
  2530. "to and from the low doubleword of an MMX technology register and a " +
  2531. "general-purpose register or a 32-bit memory location, or to and from the low " +
  2532. "doubleword of an XMM register and a general-purpose register or a 32-bit " +
  2533. "memory location. The instruction cannot be used to transfer data between MMX " +
  2534. "technology registers, between XMM registers, between general-purpose " +
  2535. "registers, or between memory locations.";
  2536. break;
  2537. case "movddup":
  2538. case "vmovddup":
  2539. instructionInfo = "For 256-bit or higher versions: Duplicates even-indexed double-precision " +
  2540. "floating-point values from the source operand (the second operand) and into " +
  2541. "adjacent pair and store to the destination operand (the first operand).";
  2542. break;
  2543. case "movdir64b":
  2544. instructionInfo = "Moves 64-bytes as direct-store with 64-byte write atomicity from source " +
  2545. "memory address to destination memory address. The source operand is a " +
  2546. "normal memory operand. The destination operand is a memory location " +
  2547. "specified in a general-purpose register. The register content is interpreted " +
  2548. "as an offset into ES segment without any segment override. In 64-bit mode, " +
  2549. "the register operand width is 64-bits (32-bits with 67H prefix). Outside of " +
  2550. "64-bit mode, the register width is 32-bits when CS.D=1 (16-bits with 67H " +
  2551. "prefix), and 16-bits when CS.D=0 (32-bits with 67H prefix). MOVDIR64B " +
  2552. "requires the destination address to be 64-byte aligned. No alignment " +
  2553. "restriction is enforced for source operand.";
  2554. break;
  2555. case "movdiri":
  2556. instructionInfo = "Moves the doubleword integer in the source operand (second operand) to the " +
  2557. "destination operand (first operand) using a direct-store operation. The " +
  2558. "source operand is a general purpose register. The destination operand is a " +
  2559. "32-bit memory location. In 64-bit mode, the instructions default " +
  2560. "operation size is 32 bits. Use of the REX.R prefix permits access to " +
  2561. "additional registers (R8-R15). Use of the REX.W prefix promotes operation " +
  2562. "to 64 bits. See summary chart at the beginning of this section for encoding " +
  2563. "data and limits.";
  2564. break;
  2565. case "movdq2q":
  2566. instructionInfo = "Moves the low quadword from the source operand (second operand) to the " +
  2567. "destination operand (first operand). The source operand is an XMM register " +
  2568. "and the destination operand is an MMX technology register.";
  2569. break;
  2570. case "movdqa":
  2571. case "vmovdqa":
  2572. case "vmovdqa32":
  2573. case "vmovdqa64":
  2574. instructionInfo = "Note: VEX.vvvv and EVEX.vvvv are reserved and must be 1111b otherwise instructions will #UD.";
  2575. break;
  2576. case "movdqu":
  2577. case "vmovdqu":
  2578. case "vmovdqu8":
  2579. case "vmovdqu16":
  2580. case "vmovdqu32":
  2581. case "vmovdqu64":
  2582. instructionInfo = "Note: VEX.vvvv and EVEX.vvvv are reserved and must be 1111b otherwise instructions will #UD.";
  2583. break;
  2584. case "movhlps":
  2585. case "vmovhlps":
  2586. instructionInfo = "This instruction cannot be used for memory to register moves.";
  2587. break;
  2588. case "movhpd":
  2589. case "vmovhpd":
  2590. instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
  2591. break;
  2592. case "movhps":
  2593. case "vmovhps":
  2594. instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
  2595. break;
  2596. case "movlhps":
  2597. case "vmovlhps":
  2598. instructionInfo = "This instruction cannot be used for memory to register moves.";
  2599. break;
  2600. case "movlpd":
  2601. case "vmovlpd":
  2602. instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
  2603. break;
  2604. case "movlps":
  2605. case "vmovlps":
  2606. instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
  2607. break;
  2608. case "movmskpd":
  2609. case "vmovmskpd":
  2610. instructionInfo = "Extracts the sign bits from the packed double-precision floating-point " +
  2611. "values in the source operand (second operand), formats them into a 2-bit " +
  2612. "mask, and stores the mask in the destination operand (first operand). The " +
  2613. "source operand is an XMM register, and the destination operand is a " +
  2614. "general-purpose register. The mask is stored in the 2 low-order bits of the " +
  2615. "destination operand. Zero-extend the upper bits of the destination.";
  2616. break;
  2617. case "movmskps":
  2618. case "vmovmskps":
  2619. instructionInfo = "Extracts the sign bits from the packed single-precision floating-point " +
  2620. "values in the source operand (second operand), formats them into a 4- or " +
  2621. "8-bit mask, and stores the mask in the destination operand (first operand). " +
  2622. "The source operand is an XMM or YMM register, and the destination operand is " +
  2623. "a general-purpose register. The mask is stored in the 4 or 8 low-order bits " +
  2624. "of the destination operand. The upper bits of the destination operand beyond " +
  2625. "the mask are filled with zeros.";
  2626. break;
  2627. case "movntdq":
  2628. case "vmovntdq":
  2629. instructionInfo = "Moves the packed integers in the source operand (second operand) to the " +
  2630. "destination operand (first operand) using a non-temporal hint to prevent " +
  2631. "caching of the data during the write to memory. The source operand is an XMM " +
  2632. "register, YMM register or ZMM register, which is assumed to contain integer " +
  2633. "data (packed bytes, words, double-words, or quadwords). The destination " +
  2634. "operand is a 128-bit, 256-bit or 512-bit memory location. The memory operand " +
  2635. "must be aligned on a 16-byte (128-bit version), 32-byte (VEX.256 encoded " +
  2636. "version) or 64-byte (512-bit version) boundary otherwise a " +
  2637. "general-protection exception (#GP) will be generated.";
  2638. break;
  2639. case "movntdqa":
  2640. case "vmovntdqa":
  2641. instructionInfo = "MOVNTDQA loads a double quadword from the source operand (second operand) to " +
  2642. "the destination operand (first operand) using a non-temporal hint if the " +
  2643. "memory source is WC (write combining) memory type. For WC memory type, the " +
  2644. "nontemporal hint may be implemented by loading a temporary internal buffer " +
  2645. "with the equivalent of an aligned cache line without filling this data to " +
  2646. "the cache. Any memory-type aliased lines in the cache will be snooped and " +
  2647. "flushed. Subsequent MOVNTDQA reads to unread portions of the WC cache line " +
  2648. "will receive data from the temporary internal buffer if data is available. " +
  2649. "The temporary internal buffer may be flushed by the processor at any time " +
  2650. "for any reason, for example:";
  2651. break;
  2652. case "movnti":
  2653. instructionInfo = "Moves the doubleword integer in the source operand (second operand) to the " +
  2654. "destination operand (first operand) using a non-temporal hint to minimize " +
  2655. "cache pollution during the write to memory. The source operand is a " +
  2656. "general-purpose register. The destination operand is a 32-bit memory location.";
  2657. break;
  2658. case "movntpd":
  2659. case "vmovntpd":
  2660. instructionInfo = "Moves the packed double-precision floating-point values in the source " +
  2661. "operand (second operand) to the destination operand (first operand) using a " +
  2662. "non-temporal hint to prevent caching of the data during the write to memory. " +
  2663. "The source operand is an XMM register, YMM register or ZMM register, which " +
  2664. "is assumed to contain packed double-precision, floating-pointing data. The " +
  2665. "destination operand is a 128-bit, 256-bit or 512-bit memory location. The " +
  2666. "memory operand must be aligned on a 16-byte (128-bit version), 32-byte " +
  2667. "(VEX.256 encoded version) or 64-byte (EVEX.512 encoded version) boundary " +
  2668. "otherwise a general-protection exception (#GP) will be generated.";
  2669. break;
  2670. case "movntps":
  2671. case "vmovntps":
  2672. instructionInfo = "Moves the packed single-precision floating-point values in the source " +
  2673. "operand (second operand) to the destination operand (first operand) using a " +
  2674. "non-temporal hint to prevent caching of the data during the write to memory. " +
  2675. "The source operand is an XMM register, YMM register or ZMM register, which " +
  2676. "is assumed to contain packed single-precision, floating-pointing. The " +
  2677. "destination operand is a 128-bit, 256-bit or 512-bit memory location. The " +
  2678. "memory operand must be aligned on a 16-byte (128-bit version), 32-byte " +
  2679. "(VEX.256 encoded version) or 64-byte (EVEX.512 encoded version) boundary " +
  2680. "otherwise a general-protection exception (#GP) will be generated.";
  2681. break;
  2682. case "movntq":
  2683. instructionInfo = "Moves the quadword in the source operand (second operand) to the destination " +
  2684. "operand (first operand) using a non-temporal hint to minimize cache " +
  2685. "pollution during the write to memory. The source operand is an MMX " +
  2686. "technology register, which is assumed to contain packed integer data (packed " +
  2687. "bytes, words, or doublewords). The destination operand is a 64-bit memory location.";
  2688. break;
  2689. case "movq":
  2690. case "vmovq":
  2691. instructionInfo = "Copies a quadword from the source operand (second operand) to the " +
  2692. "destination operand (first operand). The source and destination operands can " +
  2693. "be MMX technology registers, XMM registers, or 64-bit memory locations. This " +
  2694. "instruction can be used to move a quadword between two MMX technology " +
  2695. "registers or between an MMX technology register and a 64-bit memory " +
  2696. "location, or to move data between two XMM registers or between an XMM " +
  2697. "register and a 64-bit memory location. The instruction cannot be used to " +
  2698. "transfer data between memory locations.";
  2699. break;
  2700. case "movq2dq":
  2701. instructionInfo = "Moves the quadword from the source operand (second operand) to the low " +
  2702. "quadword of the destination operand (first operand). The source operand is " +
  2703. "an MMX technology register and the destination operand is an XMM register.";
  2704. break;
  2705. case "movs":
  2706. case "movsb":
  2707. case "movsw":
  2708. case "movsq":
  2709. instructionInfo = "Moves the byte, word, or doubleword specified with the second operand " +
  2710. "(source operand) to the location specified with the first operand " +
  2711. "(destination operand). Both the source and destination operands are located " +
  2712. "in memory. The address of the source operand is read from the DS:ESI or the " +
  2713. "DS:SI registers (depending on the address-size attribute of the instruction, " +
  2714. "32 or 16, respectively). The address of the destination operand is read from " +
  2715. "the ES:EDI or the ES:DI registers (again depending on the address-size " +
  2716. "attribute of the instruction). The DS segment may be overridden with a " +
  2717. "segment override prefix, but the ES segment cannot be overridden.";
  2718. break;
  2719. case "movsd":
  2720. case "vmovsd":
  2721. instructionInfo = "Moves a scalar double-precision floating-point value from the source operand " +
  2722. "(second operand) to the destination operand (first operand). The source and " +
  2723. "destination operands can be XMM registers or 64-bit memory locations. This " +
  2724. "instruction can be used to move a double-precision floating-point value to " +
  2725. "and from the low quadword of an XMM register and a 64-bit memory location, " +
  2726. "or to move a double-precision floating-point value between the low quadwords " +
  2727. "of two XMM registers. The instruction cannot be used to transfer data " +
  2728. "between memory locations.";
  2729. break;
  2730. case "movshdup":
  2731. case "vmovshdup":
  2732. instructionInfo = "Duplicates odd-indexed single-precision floating-point values from the " +
  2733. "source operand (the second operand) to adjacent element pair in the " +
  2734. "destination operand (the first operand). The source operand is an XMM, YMM " +
  2735. "or ZMM register or 128, 256 or 512-bit memory location and the destination " +
  2736. "operand is an XMM, YMM or ZMM register.";
  2737. break;
  2738. case "movsldup":
  2739. case "vmovsldup":
  2740. instructionInfo = "Duplicates even-indexed single-precision floating-point values from the " +
  2741. "source operand (the second operand). The source operand is an XMM, YMM or " +
  2742. "ZMM register or 128, 256 or 512-bit memory location and the destination " +
  2743. "operand is an XMM, YMM or ZMM register.";
  2744. break;
  2745. case "movss":
  2746. case "vmovss":
  2747. instructionInfo = "Moves a scalar single-precision floating-point value from the source operand " +
  2748. "(second operand) to the destination operand (first operand). The source and " +
  2749. "destination operands can be XMM registers or 32-bit memory locations. This " +
  2750. "instruction can be used to move a single-precision floating-point value to " +
  2751. "and from the low doubleword of an XMM register and a 32-bit memory location, " +
  2752. "or to move a single-precision floating-point value between the low " +
  2753. "doublewords of two XMM registers. The instruction cannot be used to transfer " +
  2754. "data between memory locations.";
  2755. break;
  2756. case "movsx":
  2757. case "movsxd":
  2758. instructionInfo = "Copies the contents of the source operand (register or memory location) to " +
  2759. "the destination operand (register) and sign extends the value to 16 or 32 " +
  2760. "bits. The size of the converted value depends on the operand-size attribute.";
  2761. break;
  2762. case "movupd":
  2763. case "vmovupd":
  2764. instructionInfo = "Note: VEX.vvvv and EVEX.vvvv is reserved and must be 1111b otherwise instructions will #UD.";
  2765. break;
  2766. case "movups":
  2767. case "vmovups":
  2768. instructionInfo = "Note: VEX.vvvv and EVEX.vvvv is reserved and must be 1111b otherwise instructions will #UD.";
  2769. break;
  2770. case "movzx":
  2771. instructionInfo = "Copies the contents of the source operand (register or memory location) to " +
  2772. "the destination operand (register) and zero extends the value. The size of " +
  2773. "the converted value depends on the operand-size attribute.";
  2774. break;
  2775. case "mpsadbw":
  2776. case "vmpsadbw":
  2777. instructionInfo = "(V)MPSADBW calculates packed word results of sum-absolute-difference (SAD) " +
  2778. "of unsigned bytes from two blocks of 32-bit dword elements, using two select " +
  2779. "fields in the immediate byte to select the offsets of the two blocks within " +
  2780. "the first source operand and the second operand. Packed SAD word results are " +
  2781. "calculated within each 128-bit lane. Each SAD word result is calculated " +
  2782. "between a stationary block_2 (whose offset within the second source operand " +
  2783. "is selected by a two bit select control, multiplied by 32 bits) and a " +
  2784. "sliding block_1 at consecutive byte-granular position within the first source " +
  2785. "operand. The offset of the first 32-bit block of block_1 is selectable using " +
  2786. "a one bit select control, multiplied by 32 bits.";
  2787. break;
  2788. case "mul":
  2789. instructionInfo = "Performs an unsigned multiplication of the first operand (destination " +
  2790. "operand) and the second operand (source operand) and stores the result in the " +
  2791. "destination operand. The destination operand is an implied operand located in " +
  2792. "register AL, AX or EAX (depending on the size of the operand); the source " +
  2793. "operand is located in a general-purpose register or a memory location. The " +
  2794. "action of this instruction and the location of the result depends on the " +
  2795. "opcode and the operand size.";
  2796. break;
  2797. case "mulpd":
  2798. case "vmulpd":
  2799. instructionInfo = "Multiply packed double-precision floating-point values from the first source " +
  2800. "operand with corresponding values in the second source operand, and stores " +
  2801. "the packed double-precision floating-point results in the destination operand.";
  2802. break;
  2803. case "mulps":
  2804. case "vmulps":
  2805. instructionInfo = "Multiply the packed single-precision floating-point values from the first " +
  2806. "source operand with the corresponding values in the second source operand, " +
  2807. "and stores the packed double-precision floating-point results in the " +
  2808. "destination operand.";
  2809. break;
  2810. case "mulsd":
  2811. case "vmulsd":
  2812. instructionInfo = "Multiplies the low double-precision floating-point value in the second source " +
  2813. "operand by the low double-precision floating-point value in the first source " +
  2814. "operand, and stores the double-precision floating-point result in the " +
  2815. "destination operand. The second source operand can be an XMM register or a " +
  2816. "64-bit memory location. The first source operand and the destination operands " +
  2817. "are XMM registers.";
  2818. break;
  2819. case "mulss":
  2820. case "vmulss":
  2821. instructionInfo = "Multiplies the low single-precision floating-point value from the second " +
  2822. "source operand by the low single-precision floating-point value in the first " +
  2823. "source operand, and stores the single-precision floating-point result in the " +
  2824. "destination operand. The second source operand can be an XMM register or a " +
  2825. "32-bit memory location. The first source operand and the destination operands " +
  2826. "are XMM registers.";
  2827. break;
  2828. case "mulx":
  2829. instructionInfo = "Performs an unsigned multiplication of the implicit source operand (EDX/RDX) " +
  2830. "and the specified source operand (the third operand) and stores the low half " +
  2831. "of the result in the second destination (second operand), the high half of " +
  2832. "the result in the first destination operand (first operand), without reading " +
  2833. "or writing the arithmetic flags. This enables efficient programming where " +
  2834. "the software can interleave add with carry operations and multiplications.";
  2835. break;
  2836. case "mwait":
  2837. instructionInfo = "MWAIT instruction provides hints to allow the processor to enter an " +
  2838. "implementation-dependent optimized state. There are two principal targeted " +
  2839. "usages: address-range monitor and advanced power management. Both usages of " +
  2840. "MWAIT require the use of the MONITOR instruction.";
  2841. break;
  2842. case "neg":
  2843. instructionInfo = "Replaces the value of operand (the destination operand) with its two\'s " +
  2844. "complement. (This operation is equivalent to subtracting the operand from 0.) " +
  2845. "The destination operand is located in a general-purpose register or a memory " +
  2846. "location.";
  2847. break;
  2848. case "nop":
  2849. instructionInfo = "This instruction performs no operation. It is a one-byte or multi-byte NOP " +
  2850. "that takes up space in the instruction stream but does not impact machine " +
  2851. "context, except for the EIP register.";
  2852. break;
  2853. case "not":
  2854. instructionInfo = "Performs a bitwise NOT operation (each 1 is set to 0, and each 0 is set to 1) " +
  2855. "on the destination operand and stores the result in the destination operand " +
  2856. "location. The destination operand can be a register or a memory location.";
  2857. break;
  2858. case "or":
  2859. instructionInfo = "Performs a bitwise inclusive OR operation between the destination (first) " +
  2860. "and source (second) operands and stores the result in the destination operand " +
  2861. "location. The source operand can be an immediate, a register, or a memory " +
  2862. "location; the destination operand can be a register or a memory location. " +
  2863. "(However, two memory operands cannot be used in one instruction.) Each bit " +
  2864. "of the result of the OR instruction is set to 0 if both corresponding bits " +
  2865. "of the first and second operands are 0; otherwise, each bit is set to 1.";
  2866. break;
  2867. case "orpd":
  2868. case "vorpd":
  2869. instructionInfo = "Performs a bitwise logical OR of the two, four or eight packed " +
  2870. "double-precision floating-point values from the first source operand and the " +
  2871. "second source operand, and stores the result in the destination operand.";
  2872. break;
  2873. case "orps":
  2874. case "vorps":
  2875. instructionInfo = "Performs a bitwise logical OR of the four, eight or sixteen packed " +
  2876. "single-precision floating-point values from the first source operand and the " +
  2877. "second source operand, and stores the result in the destination operand";
  2878. break;
  2879. case "out":
  2880. instructionInfo = "Copies the value from the second operand (source operand) to the I/O port " +
  2881. "specified with the destination operand (first operand). The source operand " +
  2882. "can be register AL, AX, or EAX, depending on the size of the port being " +
  2883. "accessed (8, 16, or 32 bits, respectively); the destination operand can be a " +
  2884. "byte-immediate or the DX register. Using a byte immediate allows I/O port " +
  2885. "addresses 0 to 255 to be accessed; using the DX register as a source operand " +
  2886. "allows I/O ports from 0 to 65,535 to be accessed.";
  2887. break;
  2888. case "outs":
  2889. case "outsb":
  2890. case "outsw":
  2891. case "outsd":
  2892. instructionInfo = "Copies data from the source operand (second operand) to the I/O port " +
  2893. "specified with the destination operand (first operand). The source operand " +
  2894. "is a memory location, the address of which is read from either the DS:SI, " +
  2895. "DS:ESI or the RSI registers (depending on the address-size attribute of the " +
  2896. "instruction, 16, 32 or 64, respectively). (The DS segment may be overridden " +
  2897. "with a segment override prefix.) The destination operand is an I/O port " +
  2898. "address (from 0 to 65,535) that is read from the DX register. The size of " +
  2899. "the I/O port being accessed (that is, the size of the source and destination " +
  2900. "operands) is determined by the opcode for an 8-bit I/O port or by the " +
  2901. "operand-size attribute of the instruction for a 16- or 32-bit I/O port.";
  2902. break;
  2903. case "pabsb":
  2904. case "vpabsb":
  2905. case "pabsw":
  2906. case "vpabsw":
  2907. case "pabsd":
  2908. case "vpabsd":
  2909. case "pabsq":
  2910. instructionInfo = "PABSB/W/D computes the absolute value of each data element of the source " +
  2911. "operand (the second operand) and stores the UNSIGNED results in the " +
  2912. "destination operand (the first operand). PABSB operates on signed bytes, " +
  2913. "PABSW operates on signed 16-bit words, and PABSD operates on signed 32-bit integers.";
  2914. break;
  2915. case "packsswb":
  2916. case "vpacksswb":
  2917. case "packssdw":
  2918. case "vpackssdw":
  2919. instructionInfo = "Converts packed signed word integers into packed signed byte integers " +
  2920. "(PACKSSWB) or converts packed signed doubleword integers into packed signed " +
  2921. "word integers (PACKSSDW), using saturation to handle overflow conditions.";
  2922. break;
  2923. case "packusdw":
  2924. case "vpackusdw":
  2925. instructionInfo = "Converts packed signed doubleword integers in the first and second source " +
  2926. "operands into packed unsigned word integers using unsigned saturation to " +
  2927. "handle overflow conditions. If the signed doubleword value is beyond the " +
  2928. "range of an unsigned word (that is, greater than FFFFH or less than 0000H), " +
  2929. "the saturated unsigned word integer value of FFFFH or 0000H, respectively, " +
  2930. "is stored in the destination.";
  2931. break;
  2932. case "packuswb":
  2933. case "vpackuswb":
  2934. instructionInfo = "Converts 4, 8, 16 or 32 signed word integers from the destination operand " +
  2935. "(first operand) and 4, 8, 16 or 32 signed word integers from the source " +
  2936. "operand (second operand) into 8, 16, 32 or 64 unsigned byte integers and " +
  2937. "stores the result in the destination operand. If a signed word integer value " +
  2938. "is beyond the range of an unsigned byte integer (that is, greater than FFH " +
  2939. "or less than 00H), the saturated unsigned byte integer value of FFH or 00H, " +
  2940. "respectively, is stored in the destination.";
  2941. break;
  2942. case "paddb":
  2943. case "vpaddb":
  2944. case "paddw":
  2945. case "vpaddw":
  2946. case "paddd":
  2947. case "vpaddd":
  2948. case "paddq":
  2949. case "vpaddq":
  2950. instructionInfo = "Performs a SIMD add of the packed integers from the source operand (second " +
  2951. "operand) and the destination operand (first operand), and stores the packed " +
  2952. "integer results in the destination operand. Overflow is handled with " +
  2953. "wraparound, as described in the following paragraphs.";
  2954. break;
  2955. case "paddsb":
  2956. case "vpaddsb":
  2957. case "paddsw":
  2958. case "vpaddsw":
  2959. instructionInfo = "Performs a SIMD add of the packed signed integers from the source operand " +
  2960. "(second operand) and the destination operand (first operand), and stores the " +
  2961. "packed integer results in the destination operand. Overflow is handled with " +
  2962. "signed saturation, as described in the following paragraphs.";
  2963. break;
  2964. case "paddusb":
  2965. case "vpaddusb":
  2966. case "paddusw":
  2967. case "vpaddusw":
  2968. instructionInfo = "Performs a SIMD add of the packed unsigned integers from the source operand " +
  2969. "(second operand) and the destination operand (first operand), and stores the " +
  2970. "packed integer results in the destination operand. Overflow is handled with " +
  2971. "unsigned saturation, as described in the following paragraphs.";
  2972. break;
  2973. case "palignr":
  2974. case "vpalignr":
  2975. instructionInfo = "(V)PALIGNR concatenates the destination operand (the first operand) and the " +
  2976. "source operand (the second operand) into an intermediate composite, shifts " +
  2977. "the composite at byte granularity to the right by a constant immediate, and " +
  2978. "extracts the right-aligned result into the destination. The first and the " +
  2979. "second operands can be an MMX,";
  2980. break;
  2981. case "pand":
  2982. case "vpand":
  2983. instructionInfo = "Performs a bitwise logical AND operation on the first source operand and " +
  2984. "second source operand and stores the result in the destination operand. Each " +
  2985. "bit of the result is set to 1 if the corresponding bits of the first and " +
  2986. "second operands are 1, otherwise it is set to 0.";
  2987. break;
  2988. case "pandn":
  2989. case "vpandn":
  2990. instructionInfo = "Performs a bitwise logical NOT operation on the first source operand, then " +
  2991. "performs bitwise AND with second source operand and stores the result in the " +
  2992. "destination operand. Each bit of the result is set to 1 if the corresponding " +
  2993. "bit in the first operand is 0 and the corresponding bit in the second " +
  2994. "operand is 1, otherwise it is set to 0.";
  2995. break;
  2996. case "pause":
  2997. instructionInfo = "Improves the performance of spin-wait loops. When executing a " +
  2998. "\"spin-wait loop,\" processors will suffer a severe " +
  2999. "performance penalty when exiting the loop because it detects a possible " +
  3000. "memory order violation. The PAUSE instruction provides a hint to the " +
  3001. "processor that the code sequence is a spin-wait loop. The processor uses this " +
  3002. "hint to avoid the memory order violation in most situations, which greatly " +
  3003. "improves processor performance. For this reason, it is recommended that a " +
  3004. "PAUSE instruction be placed in all spin-wait loops.";
  3005. break;
  3006. case "pavgb":
  3007. case "vpavgb":
  3008. case "pavgw":
  3009. case "vpavgw":
  3010. instructionInfo = "Performs a SIMD average of the packed unsigned integers from the source " +
  3011. "operand (second operand) and the destination operand (first operand), and " +
  3012. "stores the results in the destination operand. For each corresponding pair " +
  3013. "of data elements in the first and second operands, the elements are added " +
  3014. "together, a 1 is added to the temporary sum, and that result is shifted " +
  3015. "right one bit position.";
  3016. break;
  3017. case "pblendvb":
  3018. case "vpblendvb":
  3019. instructionInfo = "Conditionally copies byte elements from the source operand (second operand) " +
  3020. "to the destination operand (first operand) depending on mask bits defined in " +
  3021. "the implicit third register argument, XMM0. The mask bits are the most " +
  3022. "significant bit in each byte element of the XMM0 register.";
  3023. break;
  3024. case "pblendw":
  3025. case "vpblendw":
  3026. instructionInfo = "Words from the source operand (second operand) are conditionally written to " +
  3027. "the destination operand (first operand) depending on bits in the immediate " +
  3028. "operand (third operand). The immediate bits (bits 7:0) form a mask that " +
  3029. "determines whether the corresponding word in the destination is copied from " +
  3030. "the source. If a bit in the mask, corresponding to a word, is \"1\", then " +
  3031. "the word is copied, else the word element in the destination operand is unchanged.";
  3032. break;
  3033. case "pclmulqdq":
  3034. case "vpclmulqdq":
  3035. instructionInfo = "Performs a carry-less multiplication of two quadwords, selected from the " +
  3036. "first source and second source operand according to the value of the " +
  3037. "immediate byte. Bits 4 and 0 are used to select which 64-bit half of each " +
  3038. "operand to use, other bits of the immediate byte are ignored.";
  3039. break;
  3040. case "pcmpeqb":
  3041. case "vpcmpeqb":
  3042. case "pcmpeqw":
  3043. case "vpcmpeqw":
  3044. case "pcmpeqd":
  3045. case "vpcmpeqd":
  3046. instructionInfo = "Performs a SIMD compare for equality of the packed bytes, words, or " +
  3047. "doublewords in the destination operand (first operand) and the source " +
  3048. "operand (second operand). If a pair of data elements is equal, the " +
  3049. "corresponding data element in the destination operand is set to all 1s; " +
  3050. "otherwise, it is set to all 0s.";
  3051. break;
  3052. case "pcmpeqq":
  3053. case "vpcmpeqq":
  3054. instructionInfo = "Performs an SIMD compare for equality of the packed quadwords in the " +
  3055. "destination operand (first operand) and the source operand (second operand). " +
  3056. "If a pair of data elements is equal, the corresponding data element in the " +
  3057. "destination is set to all 1s; otherwise, it is set to 0s.";
  3058. break;
  3059. case "pcmpestri":
  3060. case "vpcmpestri":
  3061. instructionInfo = "The instruction compares and processes data from two string fragments based " +
  3062. "on the encoded value in the Imm8 Control Byte, and generates an index stored " +
  3063. "to the count register (ECX).";
  3064. break;
  3065. case "pcmpestrm":
  3066. case "vpcmpestrm":
  3067. instructionInfo = "The instruction compares data from two string fragments based on the encoded " +
  3068. "value in the imm8 contol byte, " +
  3069. "and generates a mask stored to XMM0.";
  3070. break;
  3071. case "pcmpgtb":
  3072. case "vpcmpgtb":
  3073. case "pcmpgtw":
  3074. case "vpcmpgtw":
  3075. case "pcmpgtd":
  3076. case "vpcmpgtd":
  3077. instructionInfo = "Performs an SIMD signed compare for the greater value of the packed byte, " +
  3078. "word, or doubleword integers in the destination operand (first operand) and " +
  3079. "the source operand (second operand). If a data element in the destination " +
  3080. "operand is greater than the corresponding date element in the source operand, " +
  3081. "the corresponding data element in the destination operand is set to all 1s; " +
  3082. "otherwise, it is set to all 0s.";
  3083. break;
  3084. case "pcmpgtq":
  3085. case "vpcmpgtq":
  3086. instructionInfo = "Performs an SIMD signed compare for the packed quadwords in the destination " +
  3087. "operand (first operand) and the source operand (second operand). If the data " +
  3088. "element in the first (destination) operand is greater than the corresponding " +
  3089. "element in the second (source) operand, the corresponding data element in " +
  3090. "the destination is set to all 1s; otherwise, it is set to 0s.";
  3091. break;
  3092. case "pcmpistri":
  3093. case "vpcmpistri":
  3094. instructionInfo = "The instruction compares data from two strings based on the encoded value in " +
  3095. "the Imm8 Control Byte, " +
  3096. "and generates an index stored to ECX.";
  3097. break;
  3098. case "pcmpistrm":
  3099. case "vpcmpistrm":
  3100. instructionInfo = "The instruction compares data from two strings based on the encoded value in " +
  3101. "the imm8 byte generating a mask stored to XMM0.";
  3102. break;
  3103. case "pdep":
  3104. instructionInfo = "PDEP uses a mask in the second source operand (the third operand) to " +
  3105. "transfer/scatter contiguous low order bits in the first source operand " +
  3106. "(the second operand) into the destination (the first operand). PDEP takes " +
  3107. "the low bits from the first source operand and deposit them in the " +
  3108. "destination operand at the corresponding bit locations that are set in the " +
  3109. "second source operand (mask). All other bits (bits not set in mask) in " +
  3110. "destination are set to zero.";
  3111. break;
  3112. case "pext":
  3113. instructionInfo = "PEXT uses a mask in the second source operand (the third operand) to transfer " +
  3114. "either contiguous or non-contiguous bits in the first source operand (the " +
  3115. "second operand) to contiguous low order bit positions in the destination " +
  3116. "(the first operand). For each bit set in the MASK, PEXT extracts the " +
  3117. "corresponding bits from the first source operand and writes them into " +
  3118. "contiguous lower bits of destination operand. The remaining upper bits of " +
  3119. "destination are zeroed.";
  3120. break;
  3121. case "pextrb":
  3122. case "vpextrb":
  3123. case "pextrd":
  3124. case "vpextrd":
  3125. case "pextrq":
  3126. case "vpextrq":
  3127. instructionInfo = "Extract a byte/dword/qword integer value from the source XMM register at a " +
  3128. "byte/dword/qword offset determined from imm8[3:0]. The destination can be a " +
  3129. "register or byte/dword/qword memory location. If the destination is a " +
  3130. "register, the upper bits of the register are zero extended.";
  3131. break;
  3132. case "pextrw":
  3133. case "vpextrw":
  3134. instructionInfo = "Copies the word in the source operand (second operand) specified by the count " +
  3135. "operand (third operand) to the destination operand (first operand). The " +
  3136. "source operand can be an MMX technology register or an XMM register. The " +
  3137. "destination operand can be the low word of a general-purpose register or a " +
  3138. "16-bit memory address. The count operand is an 8-bit immediate. When " +
  3139. "specifying a word location in an MMX technology register, the 2 " +
  3140. "least-significant bits of the count operand specify the location; for an XMM " +
  3141. "register, the 3 least-significant bits specify the location. The content of " +
  3142. "the destination register above bit 16 is cleared (set to all 0s).";
  3143. break;
  3144. case "phaddw":
  3145. case "vphaddw":
  3146. case "phaddd":
  3147. case "vphaddd":
  3148. instructionInfo = "(V)PHADDW adds two adjacent 16-bit signed integers horizontally from the " +
  3149. "source and destination operands and packs the 16-bit signed results to the " +
  3150. "destination operand (first operand). (V)PHADDD adds two adjacent 32-bit " +
  3151. "signed integers horizontally from the source and destination operands and " +
  3152. "packs the 32-bit signed results to the destination operand (first operand). " +
  3153. "When the source operand is a 128-bit memory operand, the operand must be " +
  3154. "aligned on a 16-byte boundary or a general-protection exception (#GP) will be " +
  3155. "generated.";
  3156. break;
  3157. case "phaddsw":
  3158. case "vphaddsw":
  3159. instructionInfo = "(V)PHADDSW adds two adjacent signed 16-bit integers horizontally from the " +
  3160. "source and destination operands and saturates the signed results; packs the " +
  3161. "signed, saturated 16-bit results to the destination operand (first operand) " +
  3162. "When the source operand is a 128-bit memory operand, the operand must be " +
  3163. "aligned on a 16-byte boundary or a general-protection exception (#GP) will be generated.";
  3164. break;
  3165. case "phminposuw":
  3166. case "vphminposuw":
  3167. instructionInfo = "Determine the minimum unsigned word value in the source operand (second operand) " +
  3168. "and place the unsigned word in the low word (bits 0-15) of the destination " +
  3169. "operand (first operand). The word index of the minimum value is stored in " +
  3170. "bits 16-18 of the destination operand. The remaining upper bits of the " +
  3171. "destination are set to zero.";
  3172. break;
  3173. case "phsubw":
  3174. case "vphsubw":
  3175. case "phsubd":
  3176. case "vphsubd":
  3177. instructionInfo = "(V)PHSUBW performs horizontal subtraction on each adjacent pair of 16-bit " +
  3178. "signed integers by subtracting the most significant word from the least " +
  3179. "significant word of each pair in the source and destination operands, and " +
  3180. "packs the signed 16-bit results to the destination operand (first operand). " +
  3181. "(V)PHSUBD performs horizontal subtraction on each adjacent pair of 32-bit " +
  3182. "signed integers by subtracting the most significant doubleword from the " +
  3183. "least significant doubleword of each pair, and packs the signed 32-bit " +
  3184. "result to the destination operand. When the source operand is a 128-bit " +
  3185. "memory operand, the operand must be aligned on a 16-byte boundary or a " +
  3186. "general-protection exception (#GP) will be generated.";
  3187. break;
  3188. case "phsubsw":
  3189. case "vphsubsw":
  3190. instructionInfo = "(V)PHSUBSW performs horizontal subtraction on each adjacent pair of 16-bit " +
  3191. "signed integers by subtracting the most significant word from the least " +
  3192. "significant word of each pair in the source and destination operands. The " +
  3193. "signed, saturated 16-bit results are packed to the destination operand " +
  3194. "(first operand). When the source operand is a 128-bit memory operand, the " +
  3195. "operand must be aligned on a 16-byte boundary or a general-protection " +
  3196. "exception (#GP) will be generated.";
  3197. break;
  3198. case "pinsrb":
  3199. case "vpinsrb":
  3200. case "pinsrd":
  3201. case "vpinsrd":
  3202. case "pinsrq":
  3203. case "vpinsrq":
  3204. instructionInfo = "Copies a byte/dword/qword from the source operand (second operand) and " +
  3205. "inserts it in the destination operand (first operand) at the location " +
  3206. "specified with the count operand (third operand). (The other elements in the " +
  3207. "destination register are left untouched.) The source operand can be a " +
  3208. "general-purpose register or a memory location. (When the source operand is a " +
  3209. "general-purpose register, PINSRB copies the low byte of the register.) " +
  3210. "The destination operand is an XMM register. The count operand is an 8-bit " +
  3211. "immediate. When specifying a qword[dword, byte] location in an XMM register, " +
  3212. "the [2, 4] least-significant bit(s) of the count operand specify the location.";
  3213. break;
  3214. case "pinsrw":
  3215. case "vpinsrw":
  3216. instructionInfo = "Copies a word from the source operand (second operand) and inserts it in the " +
  3217. "destination operand (first operand) at the location specified with the count " +
  3218. "operand (third operand). (The other words in the destination register are " +
  3219. "left untouched.) The source operand can be a general-purpose register or a " +
  3220. "16-bit memory location. (When the source operand is a general-purpose " +
  3221. "register, the low word of the register is copied.) The destination operand " +
  3222. "can be an MMX technology register or an XMM register. The count operand is " +
  3223. "an 8-bit immediate. When specifying a word location in an MMX technology " +
  3224. "register, the 2 least-significant bits of the count operand specify the " +
  3225. "location; for an XMM register, the 3 least-significant bits specify the location.";
  3226. break;
  3227. case "pmaddubsw":
  3228. case "vpmaddubsw":
  3229. instructionInfo = "(V)PMADDUBSW multiplies vertically each unsigned byte of the destination " +
  3230. "operand (first operand) with the corresponding signed byte of the source " +
  3231. "operand (second operand), producing intermediate signed 16-bit integers. " +
  3232. "Each adjacent pair of signed words is added and the saturated result is " +
  3233. "packed to the destination operand. For example, the lowest-order bytes " +
  3234. "(bits 7-0) in the source and destination operands are multiplied and the " +
  3235. "intermediate signed word result is added with the corresponding intermediate " +
  3236. "result from the 2nd lowest-order bytes (bits 15-8) of the operands; the " +
  3237. "sign-saturated result is stored in the lowest word of the destination " +
  3238. "register (15-0). The same operation is performed on the other pairs of " +
  3239. "adjacent bytes. Both operands can be MMX register or XMM registers. When the " +
  3240. "source operand is a 128-bit memory operand, the operand must be aligned on a " +
  3241. "16-byte boundary or a general-protection exception (#GP) will be generated.";
  3242. break;
  3243. case "pmaddwd":
  3244. case "vpmaddwd":
  3245. instructionInfo = "Multiplies the individual signed words of the destination operand " +
  3246. "(first operand) by the corresponding signed words of the source operand " +
  3247. "(second operand), producing temporary signed, doubleword results. The " +
  3248. "adjacent double-word results are then summed and stored in the destination " +
  3249. "operand. For example, the corresponding low-order words (15-0) and (31-16) " +
  3250. "in the source and destination operands are multiplied by one another and the " +
  3251. "double-word results are added together and stored in the low doubleword of " +
  3252. "the destination register (31-0). The same operation is performed on the " +
  3253. "other pairs of adjacent words.";
  3254. break;
  3255. case "pmaxsb":
  3256. case "vpmaxsb":
  3257. case "pmaxsw":
  3258. case "vpmaxsw":
  3259. case "pmaxsd":
  3260. case "vpmaxsd":
  3261. case "pmaxsq":
  3262. instructionInfo = "Performs a SIMD compare of the packed signed byte, word, dword or qword " +
  3263. "integers in the second source operand and the first source operand and " +
  3264. "returns the maximum value for each pair of integers to the destination operand.";
  3265. break;
  3266. case "pmaxub":
  3267. case "vpmaxub":
  3268. case "pmaxuw":
  3269. case "vpmaxuw":
  3270. instructionInfo = "Performs a SIMD compare of the packed unsigned byte, word integers in the " +
  3271. "second source operand and the first source operand and returns the maximum " +
  3272. "value for each pair of integers to the destination operand.";
  3273. break;
  3274. case "pmaxud":
  3275. case "vpmaxud":
  3276. case "pmaxuq":
  3277. instructionInfo = "Performs a SIMD compare of the packed unsigned dword or qword integers in " +
  3278. "the second source operand and the first source operand and returns the " +
  3279. "maximum value for each pair of integers to the destination operand.";
  3280. break;
  3281. case "pminsb":
  3282. case "vpminsb":
  3283. case "pminsw":
  3284. case "vpminsw":
  3285. instructionInfo = "Performs a SIMD compare of the packed signed byte, word, or dword integers " +
  3286. "in the second source operand and the first source operand and returns the " +
  3287. "minimum value for each pair of integers to the destination operand.";
  3288. break;
  3289. case "pminsd":
  3290. case "vpminsd":
  3291. case "pminsq":
  3292. instructionInfo = "Performs a SIMD compare of the packed signed dword or qword integers in the " +
  3293. "second source operand and the first source operand and returns the minimum " +
  3294. "value for each pair of integers to the destination operand.";
  3295. break;
  3296. case "pminub":
  3297. case "vpminub":
  3298. case "pminuw":
  3299. case "vpminuw":
  3300. instructionInfo = "Performs a SIMD compare of the packed unsigned byte or word integers in the " +
  3301. "second source operand and the first source operand and returns the minimum " +
  3302. "value for each pair of integers to the destination operand.";
  3303. break;
  3304. case "pminud":
  3305. case "vpminud":
  3306. case "pminuq":
  3307. instructionInfo = "Performs a SIMD compare of the packed unsigned dword/qword integers in the " +
  3308. "second source operand and the first source operand and returns the minimum " +
  3309. "value for each pair of integers to the destination operand.";
  3310. break;
  3311. case "pmovmskb":
  3312. case "vpmovmskb":
  3313. instructionInfo = "Creates a mask made up of the most significant bit of each byte of the source " +
  3314. "operand (second operand) and stores the result in the low byte or word of " +
  3315. "the destination operand (first operand).";
  3316. break;
  3317. case "pmovsx":
  3318. instructionInfo = "Legacy and VEX encoded versions: Packed byte, word, or dword integers in the " +
  3319. "low bytes of the source operand (second operand) are sign extended to word, " +
  3320. "dword, or quadword integers and stored in packed signed bytes the destination operand.";
  3321. break;
  3322. case "vpmovsxbw":
  3323. instructionInfo = "Sign extend 8 packed 8-bit integers in the low 8 bytes of xmm2/m64 to 8 " +
  3324. "packed 16-bit integers in xmm1.";
  3325. break;
  3326. case "vpmovsxbd":
  3327. instructionInfo = "Sign extend 4 packed 8-bit integers in the low 4 bytes of xmm2/m32 to 4 " +
  3328. "packed 32-bit integers in xmm1.";
  3329. break;
  3330. case "vpmovsxbq":
  3331. instructionInfo = "Sign extend 2 packed 8-bit integers in the low 2 bytes of xmm2/m16 to 2 " +
  3332. "packed 64-bit integers in xmm1.";
  3333. break;
  3334. case "pmovsxwd":
  3335. instructionInfo = "Sign extend 4 packed 16-bit integers in the low 8 bytes of xmm2/m64 to 4 " +
  3336. "packed 32-bit integers in xmm1.";
  3337. break;
  3338. case "pmovsxwq":
  3339. instructionInfo = "Sign extend 2 packed 16-bit integers in the low 4 bytes of xmm2/m32 to 2 " +
  3340. "packed 64-bit integers in xmm1.";
  3341. break;
  3342. case "vpmovsxdq":
  3343. instructionInfo = "Sign extend 2 packed 32-bit integers in the low 8 bytes of xmm2/m64 to 2 " +
  3344. "packed 64-bit integers in xmm1.";
  3345. break;
  3346. case "vpmovsxwd":
  3347. instructionInfo = "Sign extend packed 16-bit integers in the low bytes of xmm2/m128 to packed " +
  3348. "32-bit integers in ymm1.";
  3349. break;
  3350. case "vpmovsxwq":
  3351. instructionInfo = "Sign extend packed 16-bit integers in the low bytes of xmm2/m64 to packed " +
  3352. "64-bit integers in ymm1.";
  3353. break;
  3354. case "pmovzx":
  3355. instructionInfo = "Legacy, VEX and EVEX encoded versions: Packed byte, word, or dword integers " +
  3356. "starting from the low bytes of the source operand (second operand) are zero " +
  3357. "extended to word, dword, or quadword integers and stored in packed signed " +
  3358. "bytes the destination operand.";
  3359. break;
  3360. case "pmovzxbw":
  3361. case "pmovzxbd":
  3362. case "pmovzxbq":
  3363. case "pmovzxwd":
  3364. case "pmovzxwq":
  3365. case "pmovzxdq":
  3366. case "vpmovzxbw":
  3367. case "vpmovzxbd":
  3368. case "vpmovzxbq":
  3369. case "vpmovzxwd":
  3370. case "vpmovzxwq":
  3371. case "vpmovzxdq":
  3372. instructionInfo = "Packed move with zero extend.";
  3373. break;
  3374. case "pmuldq":
  3375. case "vpmuldq":
  3376. instructionInfo = "Multiplies packed signed doubleword integers in the even-numbered " +
  3377. "(zero-based reference) elements of the first source operand with the packed " +
  3378. "signed doubleword integers in the corresponding elements of the second source " +
  3379. "operand and stores packed signed quadword results in the destination operand.";
  3380. break;
  3381. case "pmulhrsw":
  3382. case "vpmulhrsw":
  3383. instructionInfo = "PMULHRSW multiplies vertically each signed 16-bit integer from the " +
  3384. "destination operand (first operand) with the corresponding signed 16-bit " +
  3385. "integer of the source operand (second operand), producing intermediate, " +
  3386. "signed 32-bit integers. Each intermediate 32-bit integer is truncated to the " +
  3387. "18 most significant bits. Rounding is always performed by adding 1 to the " +
  3388. "least significant bit of the 18-bit intermediate result. The final result is " +
  3389. "obtained by selecting the 16 bits immediately to the right of the most " +
  3390. "significant bit of each 18-bit intermediate result and packed to the destination operand.";
  3391. break;
  3392. case "pmulhuw":
  3393. case "vpmulhuw":
  3394. instructionInfo = "Performs a SIMD unsigned multiply of the packed unsigned word integers in the " +
  3395. "destination operand (first operand) and the source operand (second operand), " +
  3396. "and stores the high 16 bits of each 32-bit intermediate results in the destination operand.";
  3397. break;
  3398. case "pmulhw":
  3399. case "vpmulhw":
  3400. instructionInfo = "Performs a SIMD signed multiply of the packed signed word integers in the " +
  3401. "destination operand (first operand) and the source operand (second operand), " +
  3402. "and stores the high 16 bits of each intermediate 32-bit result in the destination operand.";
  3403. break;
  3404. case "pmulld":
  3405. case "vpmulld":
  3406. case "pmullq":
  3407. instructionInfo = "Performs a SIMD signed multiply of the packed signed dword/qword integers " +
  3408. "from each element of the first source operand with the corresponding element " +
  3409. "in the second source operand. The low 32/64 bits of each 64/128-bit " +
  3410. "intermediate results are stored to the destination operand.";
  3411. break;
  3412. case "pmullw":
  3413. case "vpmullw":
  3414. instructionInfo = "Performs a SIMD signed multiply of the packed signed word integers in the " +
  3415. "destination operand (first operand) and the source operand (second operand), " +
  3416. "and stores the low 16 bits of each intermediate 32-bit result in the destination operand.";
  3417. break;
  3418. case "pmuludq":
  3419. case "vpmuludq":
  3420. instructionInfo = "Multiplies the first operand (destination operand) by the second operand " +
  3421. "(source operand) and stores the result in the destination operand.";
  3422. break;
  3423. case "pop":
  3424. instructionInfo = "Loads the value from the top of the stack to the location specified with the " +
  3425. "destination operand (or explicit opcode) and then increments the stack pointer. " +
  3426. "The destination operand can be a general-purpose register, memory location, or segment register.";
  3427. break;
  3428. case "popa":
  3429. case "popad":
  3430. instructionInfo = "Pops doublewords (POPAD) or words (POPA) from the stack into the " +
  3431. "general-purpose registers. The registers are loaded in the following order: " +
  3432. "EDI, ESI, EBP, EBX, EDX, ECX, and EAX (if the operand-size attribute is 32) " +
  3433. "and DI, SI, BP, BX, DX, CX, and AX (if the operand-size attribute is 16). " +
  3434. "(These instructions reverse the operation of the PUSHA/PUSHAD instructions.) " +
  3435. "The value on the stack for the ESP or SP register is ignored. Instead, the " +
  3436. "ESP or SP register is incremented after each register is loaded.";
  3437. break;
  3438. case "popcnt":
  3439. instructionInfo = "This instruction calculates the number of bits set to 1 in the second " +
  3440. "operand (source) and returns the count in the first operand (a destination " +
  3441. "register).";
  3442. break;
  3443. case "popf":
  3444. case "popfd":
  3445. case "popfq":
  3446. instructionInfo = "Pops a doubleword (POPFD) from the top of the stack (if the current " +
  3447. "operand-size attribute is 32) and stores the value in the EFLAGS register, " +
  3448. "or pops a word from the top of the stack (if the operand-size attribute is 16) " +
  3449. "and stores it in the lower 16 bits of the EFLAGS register (that is, the FLAGS " +
  3450. "register). These instructions reverse the operation of the PUSHF/PUSHFD/PUSHFQ instructions.";
  3451. break;
  3452. case "por":
  3453. case "vpor":
  3454. instructionInfo = "Performs a bitwise logical OR operation on the source operand " +
  3455. "(second operand) and the destination operand (first operand) and stores the " +
  3456. "result in the destination operand. Each bit of the result is set to 1 if " +
  3457. "either or both of the corresponding bits of the first and second operands are " +
  3458. "1; otherwise, it is set to 0.";
  3459. break;
  3460. case "prefetchw":
  3461. instructionInfo = "Fetches the cache line of data from memory that contains the byte specified " +
  3462. "with the source operand to a location in the 1st or 2nd level cache and " +
  3463. "invalidates other cached instances of the line.";
  3464. break;
  3465. case "prefetcht0":
  3466. case "prefetcht1":
  3467. case "prefetcht2":
  3468. case "prefetchnta":
  3469. instructionInfo = "Fetches the line of data from memory that contains the byte specified with " +
  3470. "the source operand to a location in the cache hierarchy specified by a locality hint:";
  3471. break;
  3472. case "psadbw":
  3473. case "vpsadbw":
  3474. instructionInfo = "Computes the absolute value of the difference of 8 unsigned byte integers " +
  3475. "from the source operand (second operand) and from the destination operand " +
  3476. "(first operand). These 8 differences are then summed to produce an unsigned " +
  3477. "word integer result that is stored in the destination operand.";
  3478. break;
  3479. case "pshufb":
  3480. case "vpshufb":
  3481. instructionInfo = "PSHUFB performs in-place shuffles of bytes in the destination operand (the " +
  3482. "first operand) according to the shuffle control mask in the source operand " +
  3483. "(the second operand). The instruction permutes the data in the destination " +
  3484. "operand, leaving the shuffle mask unaffected. If the most significant bit " +
  3485. "(bit[7]) of each byte of the shuffle control mask is set, then constant zero " +
  3486. "is written in the result byte. Each byte in the shuffle control mask forms an " +
  3487. "index to permute the corresponding byte in the destination operand. The value " +
  3488. "of each index is the least significant 4 bits (128-bit operation) or 3 bits " +
  3489. "(64-bit operation) of the shuffle control byte. When the source operand is a " +
  3490. "128-bit memory operand, the operand must be aligned on a 16-byte boundary or " +
  3491. "a general-protection exception (#GP) will be generated.";
  3492. break;
  3493. case "pshufd":
  3494. case "vpshufd":
  3495. instructionInfo = "Copies doublewords from source operand (second operand) and inserts them in " +
  3496. "the destination operand (first operand) at the locations selected with the " +
  3497. "order operand (third operand). Each 2-bit field in the order operand selects " +
  3498. "the contents of one doubleword location within a 128-bit lane and copy to the " +
  3499. "target element in the destination operand. For example, bits 0 and 1 of the " +
  3500. "order operand targets the first doubleword element in the low and high 128-bit " +
  3501. "lane of the destination operand for 256-bit VPSHUFD. The encoded value of bits " +
  3502. "1:0 of the order operand determines which doubleword element (from the " +
  3503. "respective 128-bit lane) of the source operand will be copied to doubleword 0 " +
  3504. "of the destination operand.";
  3505. break;
  3506. case "pshufhw":
  3507. case "vpshufhw":
  3508. instructionInfo = "Copies words from the high quadword of a 128-bit lane of the source operand " +
  3509. "and inserts them in the high quadword of the destination operand at word " +
  3510. "locations (of the respective lane) selected with the immediate operand. This " +
  3511. "256-bit operation is similar to the in-lane operation used by the 256-bit " +
  3512. "VPSHUFD instruction. For 128-bit operation, only the low 128-bit lane is " +
  3513. "operative. Each 2-bit field in the immediate operand selects the contents of " +
  3514. "one word location in the high quadword of the destination operand. The binary " +
  3515. "encodings of the immediate operand fields select words (0, 1, 2 or 3, 4) from " +
  3516. "the high quadword of the source operand to be copied to the destination operand. " +
  3517. "The low quadword of the source operand is copied to the low quadword of the " +
  3518. "destination operand, for each 128-bit lane.";
  3519. break;
  3520. case "pshuflw":
  3521. case "vpshuflw":
  3522. instructionInfo = "Copies words from the low quadword of a 128-bit lane of the source operand " +
  3523. "and inserts them in the low quadword of the destination operand at word " +
  3524. "locations (of the respective lane) selected with the immediate operand. The " +
  3525. "256-bit operation is similar to the in-lane operation used by the 256-bit " +
  3526. "VPSHUFD instruction. For 128-bit operation, only the low 128-bit lane is " +
  3527. "operative. Each 2-bit field in the immediate operand selects the contents of " +
  3528. "one word location in the low quadword of the destination operand. The binary " +
  3529. "encodings of the immediate operand fields select words (0, 1, 2 or 3) from the " +
  3530. "low quadword of the source operand to be copied to the destination operand. " +
  3531. "The high quadword of the source operand is copied to the high quadword of the " +
  3532. "destination operand, for each 128-bit lane.";
  3533. break;
  3534. case "pshufw":
  3535. instructionInfo = "Copies words from the source operand (second operand) and inserts them in the " +
  3536. "destination operand (first operand) at word locations selected with the order " +
  3537. "operand (third operand). This operation is similar to the operation used by " +
  3538. "the PSHUFD instruction. For the PSHUFW instruction, each 2-bit field in the " +
  3539. "order operand selects the contents of one word location in the destination " +
  3540. "operand. The encodings of the order operand fields select words from the source " +
  3541. "operand to be copied to the destination operand.";
  3542. break;
  3543. case "psignb":
  3544. case "vpsignb":
  3545. case "psignw":
  3546. case "vpsignw":
  3547. case "psignd":
  3548. case "vpsignd":
  3549. instructionInfo = "(V)PSIGNB/(V)PSIGNW/(V)PSIGND negates each data element of the destination " +
  3550. "operand (the first operand) if the signed integer value of the corresponding " +
  3551. "data element in the source operand (the second operand) is less than zero. " +
  3552. "If the signed integer value of a data element in the source operand is positive, " +
  3553. "the corresponding data element in the destination operand is unchanged. " +
  3554. "If a data element in the source operand is zero, the corresponding data element " +
  3555. "in the destination operand is set to zero.";
  3556. break;
  3557. case "psllw":
  3558. case "vpsllw":
  3559. case "pslld":
  3560. case "vpslld":
  3561. case "psllq":
  3562. case "vpsllq":
  3563. instructionInfo = "Shifts the bits in the individual data elements (words, doublewords, or " +
  3564. "quadword) in the destination operand (first operand) to the left by the " +
  3565. "number of bits specified in the count operand (second operand). As the bits " +
  3566. "in the data elements are shifted left, the empty low-order bits are cleared " +
  3567. "(set to 0). If the value specified by the count operand is greater than 15 " +
  3568. "(for words), 31 (for doublewords), or 63 (for a quadword), then the destination " +
  3569. "operand is set to all 0s.";
  3570. break;
  3571. case "pslldq":
  3572. case "vpslldq":
  3573. instructionInfo = "Shifts the destination operand (first operand) to the left by the number of " +
  3574. "bytes specified in the count operand (second operand). The empty low-order " +
  3575. "bytes are cleared (set to all 0s). If the value specified by the count operand " +
  3576. "is greater than 15, the destination operand is set to all 0s. The count " +
  3577. "operand is an 8-bit immediate.";
  3578. break;
  3579. case "psraw":
  3580. case "vpsraw":
  3581. case "psrad":
  3582. case "vpsrad":
  3583. case "psraq":
  3584. instructionInfo = "Shifts the bits in the individual data elements (words, doublewords or quadwords) " +
  3585. "in the destination operand (first operand) to the right by the number of bits " +
  3586. "specified in the count operand (second operand). As the bits in the data " +
  3587. "elements are shifted right, the empty high-order bits are filled with the initial " +
  3588. "value of the sign bit of the data element. If the value specified by the count " +
  3589. "operand is greater than 15 (for words), 31 (for doublewords), or 63 " +
  3590. "(for quadwords), each destination data element is filled with the initial value " +
  3591. "of the sign bit of the element.)";
  3592. break;
  3593. case "psrlw":
  3594. case "vpsrlw":
  3595. case "psrld":
  3596. case "vpsrld":
  3597. case "psrlq":
  3598. case "vpsrlq":
  3599. instructionInfo = "Shifts the bits in the individual data elements (words, doublewords, or " +
  3600. "quadword) in the destination operand (first operand) to the right by the number " +
  3601. "of bits specified in the count operand (second operand). As the bits in the " +
  3602. "data elements are shifted right, the empty high-order bits are cleared (set to 0). " +
  3603. "If the value specified by the count operand is greater than 15 (for words), " +
  3604. "31 (for doublewords), or 63 (for a quadword), then the destination operand is set to all 0s.";
  3605. break;
  3606. case "psrldq":
  3607. case "vpsrldq":
  3608. instructionInfo = "Shifts the destination operand (first operand) to the right by the number of " +
  3609. "bytes specified in the count operand (second operand). The empty high-order " +
  3610. "bytes are cleared (set to all 0s). If the value specified by the count operand " +
  3611. "is greater than 15, the destination operand is set to all 0s. The count " +
  3612. "operand is an 8-bit immediate.";
  3613. break;
  3614. case "psubb":
  3615. case "vpsubb":
  3616. case "psubw":
  3617. case "vpsubw":
  3618. case "psubd":
  3619. case "vpsubd":
  3620. instructionInfo = "Performs a SIMD subtract of the packed integers of the source operand " +
  3621. "(second operand) from the packed integers of the destination operand " +
  3622. "(first operand), and stores the packed integer results in the destination operand. " +
  3623. "Overflow is handled with wraparound, as described in the following paragraphs.";
  3624. break;
  3625. case "psubq":
  3626. case "vpsubq":
  3627. instructionInfo = "Subtracts the second operand (source operand) from the first operand " +
  3628. "(destination operand) and stores the result in the destination operand. " +
  3629. "When packed quadword operands are used, a SIMD subtract is performed. " +
  3630. "When a quadword result is too large to be represented in 64 bits (overflow), " +
  3631. "the result is wrapped around and the low 64 bits are written to the " +
  3632. "destination element (that is, the carry is ignored).";
  3633. break;
  3634. case "psubsb":
  3635. case "vpsubsb":
  3636. case "psubsw":
  3637. case "vpsubsw":
  3638. instructionInfo = "Performs a SIMD subtract of the packed signed integers of the source operand " +
  3639. "(second operand) from the packed signed integers of the destination operand " +
  3640. "(first operand), and stores the packed integer results in the destination operand. " +
  3641. "Overflow is handled with signed saturation, as described in the following paragraphs.";
  3642. break;
  3643. case "psubsiw":
  3644. instructionInfo = "Word packed subtract second operand from the first operand with saturaiont using implied destination.";
  3645. break;
  3646. case "psubusb":
  3647. case "vpsubusb":
  3648. case "psubusw":
  3649. case "vpsubusw":
  3650. instructionInfo = "Performs a SIMD subtract of the packed unsigned integers of the source operand " +
  3651. "(second operand) from the packed unsigned integers of the destination operand " +
  3652. "(first operand), and stores the packed unsigned integer results in the destination operand. " +
  3653. "Overflow is handled with unsigned saturation, as described in the following paragraphs.";
  3654. break;
  3655. case "ptest":
  3656. case "vptest":
  3657. instructionInfo = "PTEST and VPTEST set the ZF flag if all bits in the result are 0 of the " +
  3658. "bitwise AND of the first source operand (first operand) and the second source " +
  3659. "operand (second operand). VPTEST sets the CF flag if all bits in the result " +
  3660. "are 0 of the bitwise AND of the second source operand (second operand) and the " +
  3661. "logical NOT of the destination operand.";
  3662. break;
  3663. case "ptwrite":
  3664. instructionInfo = "This instruction reads data in the source operand and sends it to the Intel " +
  3665. "Processor Trace hardware to be encoded in a PTW packet if TriggerEn, " +
  3666. "ContextEn, FilterEn, and PTWEn are all set to 1. The size of data is 64-bit " +
  3667. "if using REX.W in 64-bit mode, otherwise 32-bits of data are copied from the source operand.";
  3668. break;
  3669. case "punpckhbw":
  3670. case "vpunpckhbw":
  3671. case "punpckhwd":
  3672. case "vpunpckhwd":
  3673. case "punpckhdq":
  3674. case "vpunpckhdq":
  3675. case "punpckhqdq":
  3676. case "vpunpckhqdq":
  3677. instructionInfo = "Unpacks and interleaves the high-order data elements (bytes, words, " +
  3678. "doublewords, or quadwords) of the destination operand (first operand) and " +
  3679. "source operand (second operand) into the destination operand. The low-order " +
  3680. "data elements are ignored.";
  3681. break;
  3682. case "punpcklbw":
  3683. case "vpunpcklbw":
  3684. case "punpcklwd":
  3685. case "vpunpcklwd":
  3686. case "punpckldq":
  3687. case "vpunpckldq":
  3688. case "punpcklqdq":
  3689. case "vpunpcklqdq":
  3690. instructionInfo = "Unpacks and interleaves the low-order data elements (bytes, words, " +
  3691. "doublewords, and quadwords) of the destination operand (first operand) and " +
  3692. "source operand (second operand) into the destination operand. The high-order " +
  3693. "data elements are ignored.";
  3694. break;
  3695. case "push":
  3696. instructionInfo = "Decrements the stack pointer and then stores the source operand on the top of " +
  3697. "the stack. Address and operand sizes are determined and used as follows:";
  3698. break;
  3699. case "pusha":
  3700. case "pushad":
  3701. instructionInfo = "Pushes the contents of the general-purpose registers onto the stack. " +
  3702. "The registers are stored on the stack in the following order: EAX, ECX, EDX, " +
  3703. "EBX, ESP (original value), EBP, ESI, and EDI (if the current operand-size " +
  3704. "attribute is 32) and AX, CX, DX, BX, SP (original value), BP, SI, and DI " +
  3705. "(if the operand-size attribute is 16). These instructions perform the reverse " +
  3706. "operation of the POPA/POPAD instructions. The value pushed for the ESP or SP " +
  3707. "register is its value before prior to pushing the first register.";
  3708. break;
  3709. case "pushf":
  3710. case "pushfd":
  3711. case "pushfq":
  3712. instructionInfo = "Decrements the stack pointer by 4 (if the current operand-size attribute is 32) " +
  3713. "and pushes the entire contents of the EFLAGS register onto the stack, or " +
  3714. "decrements the stack pointer by 2 (if the operand-size attribute is 16) and " +
  3715. "pushes the lower 16 bits of the EFLAGS register (that is, the FLAGS register) " +
  3716. "onto the stack. These instructions reverse the operation of the POPF/POPFD instructions.";
  3717. break;
  3718. case "pxor":
  3719. case "vpxor":
  3720. instructionInfo = "Performs a bitwise logical exclusive-OR (XOR) operation on the source " +
  3721. "operand (second operand) and the destination operand (first operand) and " +
  3722. "stores the result in the destination operand. Each bit of the result is 1 if " +
  3723. "the corresponding bits of the two operands are different; each bit is 0 if " +
  3724. "the corresponding bits of the operands are the same.";
  3725. break;
  3726. case "rcl":
  3727. case "rcr":
  3728. case "rol":
  3729. case "ror":
  3730. instructionInfo = "Shifts (rotates) the bits of the first operand (destination operand) the " +
  3731. "number of bit positions specified in the second operand (count operand) and " +
  3732. "stores the result in the destination operand. The destination operand can be " +
  3733. "a register or a memory location; the count operand is an unsigned integer that " +
  3734. "can be an immediate or a value in the CL register. The count is masked to 5 " +
  3735. "bits (or 6 bits if in 64-bit mode and REX.W = 1).";
  3736. break;
  3737. case "rcpps":
  3738. case "vrcpps":
  3739. instructionInfo = "Performs a SIMD computation of the approximate reciprocals of the four packed " +
  3740. "single-precision floating-point values in the source operand (second operand) " +
  3741. "stores the packed single-precision floating-point results in the destination " +
  3742. "operand. The source operand can be an XMM register or a 128-bit memory location. " +
  3743. "The destination operand is an XMM register.";
  3744. break;
  3745. case "rcpss":
  3746. case "vrcpss":
  3747. instructionInfo = "Computes of an approximate reciprocal of the low single-precision " +
  3748. "floating-point value in the source operand (second operand) and stores the " +
  3749. "single-precision floating-point result in the destination operand. The source " +
  3750. "operand can be an XMM register or a 32-bit memory location. The destination " +
  3751. "operand is an XMM register. The three high-order doublewords of the destination " +
  3752. "operand remain unchanged.";
  3753. break;
  3754. case "rdfsbase":
  3755. case "rdgsbase":
  3756. instructionInfo = "Loads the general-purpose register indicated by the modR/M:r/m field with the " +
  3757. "FS or GS segment base address.";
  3758. break;
  3759. case "rdmsr":
  3760. instructionInfo = "Reads the contents of a 64-bit model specific register (MSR) specified in the " +
  3761. "ECX register into registers EDX:EAX. (On processors that support the Intel 64 " +
  3762. "architecture, the high-order 32 bits of RCX are ignored.) The EDX register is " +
  3763. "loaded with the high-order 32 bits of the MSR and the EAX register is loaded " +
  3764. "with the low-order 32 bits. (On processors that support the Intel 64 architecture, " +
  3765. "the high-order 32 bits of each of RAX and RDX are cleared.) If fewer than 64 bits " +
  3766. "are implemented in the MSR being read, the values returned to EDX:EAX in " +
  3767. "unimplemented bit locations are undefined.";
  3768. break;
  3769. case "rdpid":
  3770. instructionInfo = "Reads the value of the IA32_TSC_AUX MSR (address C0000103H) into the destination " +
  3771. "register. The value of CS.D and operand-size prefixes (66H and REX.W) do not " +
  3772. "affect the behavior of the RDPID instruction.";
  3773. break;
  3774. case "rdpkru":
  3775. instructionInfo = "Reads the value of PKRU into EAX and clears EDX. ECX must be 0 when RDPKRU " +
  3776. "is executed; otherwise, a general-protection exception (#GP) occurs.";
  3777. break;
  3778. case "rdpmc":
  3779. instructionInfo = "The EAX register is loaded with the low-order 32 bits. The EDX register is " +
  3780. "loaded with the supported high-order bits of the counter. The number of " +
  3781. "high-order bits loaded into EDX is implementation specific on processors that " +
  3782. "do no support architectural performance monitoring. The width of fixed-function " +
  3783. "and general-purpose performance counters on processors supporting architectural " +
  3784. "performance monitoring are reported by CPUID 0AH leaf. See below for the " +
  3785. "treatment of the EDX register for \xe2\x80\x9cfast\xe2\x80\x9d reads.";
  3786. break;
  3787. case "rdrand":
  3788. instructionInfo = "Loads a hardware generated random value and store it in the destination register. " +
  3789. "The size of the random value is determined by the destination register size and " +
  3790. "operating mode. The Carry Flag indicates whether a random value is available at " +
  3791. "the time the instruction is executed. CF=1 indicates that the data in the " +
  3792. "destination is valid. Otherwise CF=0 and the data in the destination operand " +
  3793. "will be returned as zeros for the specified width. All other flags are forced " +
  3794. "to 0 in either situation. Software must check the state of CF=1 for determining " +
  3795. "if a valid random value has been returned, otherwise it is expected to loop " +
  3796. "and retry execution of RDRAND.";
  3797. break;
  3798. case "rdseed":
  3799. instructionInfo = "Loads a hardware generated random value and store it in the destination register. " +
  3800. "The random value is generated from an Enhanced NRBG (Non Deterministic " +
  3801. "Random Bit Generator) that is compliant to NIST SP800-90B and NIST SP800-90C " +
  3802. "in the XOR construction mode. The size of the random value is determined by " +
  3803. "the destination register size and operating mode. The Carry Flag indicates " +
  3804. "whether a random value is available at the time the instruction is executed. " +
  3805. "CF=1 indicates that the data in the destination is valid. Otherwise CF=0 and " +
  3806. "the data in the destination operand will be returned as zeros for the specified width. " +
  3807. "All other flags are forced to 0 in either situation. Software must check the " +
  3808. "state of CF=1 for determining if a valid random seed value has been returned, " +
  3809. "otherwise it is expected to loop and retry execution of RDSEED (see Section 1.2).";
  3810. break;
  3811. case "rdtsc":
  3812. instructionInfo = "Reads the current value of the processor\xe2\x80\x99s time-stamp counter " +
  3813. "(a 64-bit MSR) into the EDX:EAX registers. The EDX register is loaded with " +
  3814. "the high-order 32 bits of the MSR and the EAX register is loaded with the " +
  3815. "low-order 32 bits. (On processors that support the Intel 64 architecture, " +
  3816. "the high-order 32 bits of each of RAX and RDX are cleared.)";
  3817. break;
  3818. case "rdtscp":
  3819. instructionInfo = "Reads the current value of the processor\xe2\x80\x99s time-stamp counter " +
  3820. "(a 64-bit MSR) into the EDX:EAX registers and also reads the value of the " +
  3821. "IA32_TSC_AUX MSR (address C0000103H) into the ECX register. The EDX register " +
  3822. "is loaded with the high-order 32 bits of the IA32_TSC MSR; the EAX register " +
  3823. "is loaded with the low-order 32 bits of the IA32_TSC MSR; and the ECX register " +
  3824. "is loaded with the low-order 32-bits of IA32_TSC_AUX MSR. On processors that " +
  3825. "support the Intel 64 architecture, the high-order 32 bits of each of RAX, RDX, " +
  3826. "and RCX are cleared.";
  3827. break;
  3828. case "rep":
  3829. case "repe":
  3830. case "repz":
  3831. case "repne":
  3832. case "repnz":
  3833. instructionInfo = "Repeats a string instruction the number of times specified in the count " +
  3834. "register or until the indicated condition of the ZF flag is no longer met. " +
  3835. "The REP (repeat), REPE (repeat while equal), REPNE (repeat while not equal), " +
  3836. "REPZ (repeat while zero), and REPNZ (repeat while not zero) mnemonics are " +
  3837. "prefixes that can be added to one of the string instructions. The REP prefix " +
  3838. "can be added to the INS, OUTS, MOVS, LODS, and STOS instructions, and the REPE, " +
  3839. "REPNE, REPZ, and REPNZ prefixes can be added to the CMPS and SCAS instructions. " +
  3840. "(The REPZ and REPNZ prefixes are synonymous forms of the REPE and REPNE prefixes, " +
  3841. "respectively.) The F3H prefix is defined for the following instructions and undefined for the rest:";
  3842. break;
  3843. case "ret":
  3844. instructionInfo = "Transfers program control to a return address located on the top of the stack. " +
  3845. "The address is usually placed on the stack by a CALL instruction, and the " +
  3846. "return is made to the instruction that follows the CALL instruction.";
  3847. break;
  3848. case "rorx":
  3849. instructionInfo = "Rotates the bits of second operand right by the count value specified in imm8 " +
  3850. "without affecting arithmetic flags. The RORX instruction does not read or " +
  3851. "write the arithmetic flags.";
  3852. break;
  3853. case "roundpd":
  3854. case "vroundpd":
  3855. instructionInfo = "Round the 2 double-precision floating-point values in the source operand " +
  3856. "(second operand) using the rounding mode specified in the immediate operand " +
  3857. "(third operand) and place the results in the destination operand (first operand). " +
  3858. "The rounding process rounds each input floating-point value to an integer value " +
  3859. "and returns the integer result as a double-precision floating-point value.";
  3860. break;
  3861. case "roundps":
  3862. case "vroundps":
  3863. instructionInfo = "Round the 4 single-precision floating-point values in the source operand " +
  3864. "(second operand) using the rounding mode specified in the immediate operand " +
  3865. "(third operand) and place the results in the destination operand (first operand). " +
  3866. "The rounding process rounds each input floating-point value to an integer " +
  3867. "value and returns the integer result as a single-precision floating-point value.";
  3868. break;
  3869. case "roundsd":
  3870. case "vroundsd":
  3871. instructionInfo = "Round the DP FP value in the lower qword of the source operand (second operand) " +
  3872. "using the rounding mode specified in the immediate operand (third operand) " +
  3873. "and place the result in the destination operand (first operand). The rounding " +
  3874. "process rounds a double-precision floating-point input to an integer value " +
  3875. "and returns the integer result as a double precision floating-point value in " +
  3876. "the lowest position. The upper double precision floating-point value in the " +
  3877. "destination is retained.";
  3878. break;
  3879. case "roundss":
  3880. case "vroundss":
  3881. instructionInfo = "Round the single-precision floating-point value in the lowest dword of the " +
  3882. "source operand (second operand) using the rounding mode specified in the " +
  3883. "immediate operand (third operand) and place the result in the destination " +
  3884. "operand (first operand). The rounding process rounds a single-precision " +
  3885. "floating-point input to an integer value and returns the result as a " +
  3886. "single-precision floating-point value in the lowest position. The upper three " +
  3887. "single-precision floating-point values in the destination are retained.";
  3888. break;
  3889. case "rsm":
  3890. instructionInfo = "Returns program control from system management mode (SMM) to the application " +
  3891. "program or operating-system procedure that was interrupted when the processor " +
  3892. "received an SMM interrupt. The processor\xe2\x80\x99s state is restored from " +
  3893. "the dump created upon entering SMM. If the processor detects invalid state " +
  3894. "information during state restoration, it enters the shutdown state. " +
  3895. "The following invalid information can cause a shutdown:";
  3896. break;
  3897. case "rsqrtps":
  3898. case "vrsqrtps":
  3899. instructionInfo = "Performs a SIMD computation of the approximate reciprocals of the square " +
  3900. "roots of the four packed single-precision floating-point values in the source " +
  3901. "operand (second operand) and stores the packed single-precision floating-point " +
  3902. "results in the destination operand. The source operand can be an XMM register " +
  3903. "or a 128-bit memory location. The destination operand is an XMM register.";
  3904. break;
  3905. case "rsqrtss":
  3906. case "vrsqrtss":
  3907. instructionInfo = "Computes an approximate reciprocal of the square root of the low single-precision " +
  3908. "floating-point value in the source operand (second operand) stores the " +
  3909. "single-precision floating-point result in the destination operand. " +
  3910. "The source operand can be an XMM register or a 32-bit memory location. " +
  3911. "The destination operand is an XMM register. The three high-order doublewords " +
  3912. "of the destination operand remain unchanged.";
  3913. break;
  3914. case "sahf":
  3915. instructionInfo = "Loads the SF, ZF, AF, PF, and CF flags of the EFLAGS register with values " +
  3916. "from the corresponding bits in the AH register (bits 7, 6, 4, 2, and 0, respectively). " +
  3917. "Bits 1, 3, and 5 of register AH are ignored; the corresponding reserved bits " +
  3918. "(1, 3, and 5) in the EFLAGS register remain.";
  3919. break;
  3920. case "sal":
  3921. case "sar":
  3922. case "shl":
  3923. case "shr":
  3924. instructionInfo = "Shifts the bits in the first operand (destination operand) to the left or " +
  3925. "right by the number of bits specified in the second operand (count operand). " +
  3926. "Bits shifted beyond the destination operand boundary are first shifted into " +
  3927. "the CF flag, then discarded. At the end of the shift operation, the CF flag " +
  3928. "contains the last bit shifted out of the destination operand.";
  3929. break;
  3930. case "sarx":
  3931. case "shlx":
  3932. case "shrx":
  3933. instructionInfo = "Shifts the bits of the first source operand (the second operand) to the left " +
  3934. "or right by a COUNT value specified in the second source operand (the third operand). " +
  3935. "The result is written to the destination operand (the first operand).";
  3936. break;
  3937. case "sbb":
  3938. instructionInfo = "Adds the source operand (second operand) and the carry (CF) flag, and subtracts " +
  3939. "the result from the destination operand (first operand). The result of the " +
  3940. "subtraction is stored in the destination operand. The destination operand can " +
  3941. "be a register or a memory location; the source operand can be an immediate, a " +
  3942. "register, or a memory location. (However, two memory operands cannot be used " +
  3943. "in one instruction.) The state of the CF flag represents a borrow from a previous subtraction.";
  3944. break;
  3945. case "scas":
  3946. case "scasb":
  3947. case "scasw":
  3948. case "scasd":
  3949. instructionInfo = "In non-64-bit modes and in default 64-bit mode: this instruction compares a " +
  3950. "byte, word, doubleword or quadword specified using a memory operand with the " +
  3951. "value in AL, AX, or EAX. It then sets status flags in EFLAGS recording the " +
  3952. "results. The memory operand address is read from ES:(E)DI register (depending " +
  3953. "on the address-size attribute of the instruction and the current operational mode). " +
  3954. "Note that ES cannot be overridden with a segment override prefix.";
  3955. break;
  3956. case "seta":
  3957. case "setae":
  3958. case "setb":
  3959. case "setbe":
  3960. case "setc":
  3961. case "sete":
  3962. case "setg":
  3963. case "setge":
  3964. case "setl":
  3965. case "setle":
  3966. case "setna":
  3967. case "setnae":
  3968. case "setnb":
  3969. case "setnbe":
  3970. case "setnc":
  3971. case "setne":
  3972. case "setng":
  3973. case "setnge":
  3974. case "setnl":
  3975. case "setnle":
  3976. case "setno":
  3977. case "setnp":
  3978. case "setns":
  3979. case "setnz":
  3980. case "seto":
  3981. case "setp":
  3982. case "setpe":
  3983. case "setpo":
  3984. case "sets":
  3985. case "setz":
  3986. instructionInfo = "Sets the destination operand to 0 or 1 depending on the settings of the status " +
  3987. "flags (CF, SF, OF, ZF, and PF) in the EFLAGS register. The destination operand " +
  3988. "points to a byte register or a byte in memory. " +
  3989. "The condition code suffix (cc) indicates the condition being tested for.";
  3990. break;
  3991. case "sfence":
  3992. instructionInfo = "Orders processor execution relative to all memory stores prior to the SFENCE instruction. " +
  3993. "The processor ensures that every store prior to SFENCE is globally visible before " +
  3994. "any store after SFENCE becomes globally visible. The SFENCE instruction is " +
  3995. "ordered with respect to memory stores, other SFENCE instructions, MFENCE instructions, " +
  3996. "and any serializing instructions (such as the CPUID instruction). It is not " +
  3997. "ordered with respect to memory loads or the LFENCE instruction.";
  3998. break;
  3999. case "sgdt":
  4000. instructionInfo = "Stores the content of the global descriptor table register (GDTR) in the " +
  4001. "destination operand. The destination operand specifies a memory location.";
  4002. break;
  4003. case "sha1msg1":
  4004. instructionInfo = "The SHA1MSG1 instruction is one of two SHA1 message scheduling instructions. " +
  4005. "The instruction performs an intermediate calculation for the next four SHA1 message dwords.";
  4006. break;
  4007. case "sha1msg2":
  4008. instructionInfo = "The SHA1MSG2 instruction is one of two SHA1 message scheduling instructions. " +
  4009. "The instruction performs the final calculation to derive the next four SHA1 message dwords.";
  4010. break;
  4011. case "sha1nexte":
  4012. instructionInfo = "The SHA1NEXTE calculates the SHA1 state variable E after four rounds of " +
  4013. "operation from the current SHA1 state variable A in the destination operand. " +
  4014. "The calculated value of the SHA1 state variable E is added to the source operand, " +
  4015. "which contains the scheduled dwords.";
  4016. break;
  4017. case "sha1rnds4":
  4018. instructionInfo = "The SHA1RNDS4 instruction performs four rounds of SHA1 operation using an " +
  4019. "initial SHA1 state (A,B,C,D) from the first operand (which is a source operand " +
  4020. "and the destination operand) and some pre-computed sum of the next 4 round " +
  4021. "message dwords, and state variable E from the second operand (a source operand). " +
  4022. "The updated SHA1 state (A,B,C,D) after four rounds of processing is stored in the destination operand.";
  4023. break;
  4024. case "sha256msg1":
  4025. instructionInfo = "The SHA256MSG1 instruction is one of two SHA256 message scheduling instructions. " +
  4026. "The instruction performs an intermediate calculation for the next four SHA256 message dwords.";
  4027. break;
  4028. case "sha256msg2":
  4029. instructionInfo = "The SHA256MSG2 instruction is one of two SHA2 message scheduling instructions. " +
  4030. "The instruction performs the final calculation for the next four SHA256 message dwords.";
  4031. break;
  4032. case "sha256rnds2":
  4033. instructionInfo = "The SHA256RNDS2 instruction performs 2 rounds of SHA256 operation using an " +
  4034. "initial SHA256 state (C,D,G,H) from the first operand, an initial SHA256 state " +
  4035. "(A,B,E,F) from the second operand, and a pre-computed sum of the next 2 round " +
  4036. "message dwords and the corresponding round constants from the implicit operand xmm0. " +
  4037. "Note that only the two lower dwords of XMM0 are used by the instruction.";
  4038. break;
  4039. case "shld":
  4040. instructionInfo = "The SHLD instruction is used for multi-precision shifts of 64 bits or more.";
  4041. break;
  4042. case "shrd":
  4043. instructionInfo = "The SHRD instruction is useful for multi-precision shifts of 64 bits or more.";
  4044. break;
  4045. case "shufpd":
  4046. case "vshufpd":
  4047. instructionInfo = "Selects a double-precision floating-point value of an input pair using a bit " +
  4048. "control and move to a designated element of the destination operand. " +
  4049. "The low-to-high order of double-precision element of the destination operand " +
  4050. "is interleaved between the first source operand and the second source operand " +
  4051. "at the granularity of input pair of 128 bits. Each bit in the imm8 byte, " +
  4052. "starting from bit 0, is the select control of the corresponding element of the " +
  4053. "destination to received the shuffled result of an input pair.";
  4054. break;
  4055. case "shufps":
  4056. case "vshufps":
  4057. instructionInfo = "Selects a single-precision floating-point value of an input quadruplet using " +
  4058. "a two-bit control and move to a designated element of the destination operand. " +
  4059. "Each 64-bit element-pair of a 128-bit lane of the destination operand is " +
  4060. "interleaved between the corresponding lane of the first source operand and the " +
  4061. "second source operand at the granularity 128 bits. Each two bits in the imm8 byte, " +
  4062. "starting from bit 0, is the select control of the corresponding element of a " +
  4063. "128-bit lane of the destination to received the shuffled result of an input quadruplet. " +
  4064. "The two lower elements of a 128-bit lane in the destination receives shuffle " +
  4065. "results from the quadruple of the first source operand. The next two elements " +
  4066. "of the destination receives shuffle results from the quadruple of the second source operand.";
  4067. break;
  4068. case "sidt":
  4069. instructionInfo = "Stores the content the interrupt descriptor table register (IDTR) in the " +
  4070. "destination operand. The destination operand specifies a 6-byte memory location.";
  4071. break;
  4072. case "sldt":
  4073. instructionInfo = "Stores the segment selector from the local descriptor table register (LDTR) " +
  4074. "in the destination operand. The destination operand can be a general-purpose " +
  4075. "register or a memory location. The segment selector stored with this instruction " +
  4076. "points to the segment descriptor (located in the GDT) for the current LDT. " +
  4077. "This instruction can only be executed in protected mode.";
  4078. break;
  4079. case "smsw":
  4080. instructionInfo = "Stores the machine status word (bits 0 through 15 of control register CR0) " +
  4081. "into the destination operand. The destination operand can be a general-purpose " +
  4082. "register or a memory location.";
  4083. break;
  4084. case "sqrtpd":
  4085. case "vsqrtpd":
  4086. instructionInfo = "Performs a SIMD computation of the square roots of the two, four or eight " +
  4087. "packed double-precision floating-point values in the source operand " +
  4088. "(the second operand) stores the packed double-precision floating-point results " +
  4089. "in the destination operand (the first operand).";
  4090. break;
  4091. case "sqrtps":
  4092. case "vsqrtps":
  4093. instructionInfo = "Performs a SIMD computation of the square roots of the four, eight or sixteen " +
  4094. "packed single-precision floating-point values in the source operand " +
  4095. "(second operand) stores the packed single-precision floating-point results in the destination operand.";
  4096. break;
  4097. case "sqrtsd":
  4098. case "vsqrtsd":
  4099. instructionInfo = "Computes the square root of the low double-precision floating-point value in " +
  4100. "the second source operand and stores the double-precision floating-point result " +
  4101. "in the destination operand. The second source operand can be an XMM register " +
  4102. "or a 64-bit memory location. The first source and destination operands are XMM registers.";
  4103. break;
  4104. case "sqrtss":
  4105. case "vsqrtss":
  4106. instructionInfo = "Computes the square root of the low single-precision floating-point value in " +
  4107. "the second source operand and stores the single-precision floating-point result " +
  4108. "in the destination operand. The second source operand can be an XMM register " +
  4109. "or a 32-bit memory location. The first source and destination operands is an XMM register.";
  4110. break;
  4111. case "stac":
  4112. instructionInfo = "Sets the AC flag bit in EFLAGS register. This may enable alignment checking " +
  4113. "of user-mode data accesses. This allows explicit supervisor-mode data accesses " +
  4114. "to user-mode pages even if the SMAP bit is set in the CR4 register.";
  4115. break;
  4116. case "stc":
  4117. instructionInfo = "Sets the CF flag in the EFLAGS register. Operation is the same in all modes.";
  4118. break;
  4119. case "std":
  4120. instructionInfo = "Sets the DF flag in the EFLAGS register. When the DF flag is set to 1, string " +
  4121. "operations decrement the index registers (ESI and/or EDI). Operation is the same in all modes.";
  4122. break;
  4123. case "sti":
  4124. instructionInfo = "In most cases, STI sets the interrupt flag (IF) in the EFLAGS register. " +
  4125. "This allows the processor to respond to maskable hardware interrupts.";
  4126. break;
  4127. case "stmxcsr":
  4128. case "vstmxcsr":
  4129. instructionInfo = "Stores the contents of the MXCSR control and status register to the destination " +
  4130. "operand. The destination operand is a 32-bit memory location. The reserved bits " +
  4131. "in the MXCSR register are stored as 0s.";
  4132. break;
  4133. case "stos":
  4134. case "stosb":
  4135. case "stosw":
  4136. case "stosd":
  4137. case "stosq":
  4138. instructionInfo = "In non-64-bit and default 64-bit mode; stores a byte, word, or doubleword " +
  4139. "from the AL, AX, or EAX register (respectively) into the destination operand. " +
  4140. "The destination operand is a memory location, the address of which is read " +
  4141. "from either the ES:EDI or ES:DI register (depending on the address-size " +
  4142. "attribute of the instruction and the mode of operation). The ES segment cannot " +
  4143. "be overridden with a segment override prefix.";
  4144. break;
  4145. case "str":
  4146. instructionInfo = "Stores the segment selector from the task register (TR) in the destination operand. " +
  4147. "The destination operand can be a general-purpose register or a memory location. " +
  4148. "The segment selector stored with this instruction points to the task state segment " +
  4149. "(TSS) for the currently running task.";
  4150. break;
  4151. case "sub":
  4152. instructionInfo = "Subtracts the second operand (source operand) from the first operand " +
  4153. "(destination operand) and stores the result in the destination operand. " +
  4154. "The destination operand can be a register or a memory location; the source " +
  4155. "operand can be an immediate, register, or memory location. (However, two memory " +
  4156. "operands cannot be used in one instruction.) When an immediate value is used " +
  4157. "as an operand, it is sign-extended to the length of the destination operand format.";
  4158. break;
  4159. case "subpd":
  4160. case "vsubpd":
  4161. instructionInfo = "Performs a SIMD subtract of the two, four or eight packed double-precision " +
  4162. "floating-point values of the second Source operand from the first Source " +
  4163. "operand, and stores the packed double-precision floating-point results in the " +
  4164. "destination operand.";
  4165. break;
  4166. case "subps":
  4167. case "vsubps":
  4168. instructionInfo = "Performs a SIMD subtract of the packed single-precision floating-point values " +
  4169. "in the second Source operand from the First Source operand, and stores the " +
  4170. "packed single-precision floating-point results in the destination operand.";
  4171. break;
  4172. case "subsd":
  4173. case "vsubsd":
  4174. instructionInfo = "Subtract the low double-precision floating-point value in the second source " +
  4175. "operand from the first source operand and stores the double-precision " +
  4176. "floating-point result in the low quadword of the destination operand.";
  4177. break;
  4178. case "subss":
  4179. case "vsubss":
  4180. instructionInfo = "Subtract the low single-precision floating-point value from the second source " +
  4181. "operand and the first source operand and store the double-precision " +
  4182. "floating-point result in the low doubleword of the destination operand.";
  4183. break;
  4184. case "swapgs":
  4185. instructionInfo = "SWAPGS exchanges the current GS base register value with the value contained " +
  4186. "in MSR address C0000102H (IA32_KERNEL_GS_BASE). The SWAPGS instruction is a " +
  4187. "privileged instruction intended for use by system software.";
  4188. break;
  4189. case "syscall":
  4190. instructionInfo = "SYSCALL invokes an OS system-call handler at privilege level 0. It does so " +
  4191. "by loading RIP from the IA32_LSTAR MSR (after saving the address of the " +
  4192. "instruction following SYSCALL into RCX). (The WRMSR instruction ensures that " +
  4193. "the IA32_LSTAR MSR always contain a canonical address.)";
  4194. break;
  4195. case "sysenter":
  4196. instructionInfo = "Executes a fast call to a level 0 system procedure or routine. SYSENTER is a " +
  4197. "companion instruction to SYSEXIT. The instruction is optimized to provide the " +
  4198. "maximum performance for system calls from user code running at privilege level " +
  4199. "3 to operating system or executive procedures running at privilege level 0.";
  4200. break;
  4201. case "sysexit":
  4202. instructionInfo = "Executes a fast return to privilege level 3 user code. SYSEXIT is a companion " +
  4203. "instruction to the SYSENTER instruction. The instruction is optimized to provide " +
  4204. "the maximum performance for returns from system procedures executing at " +
  4205. "protections levels 0 to user procedures executing at protection level 3. It must " +
  4206. "be executed from code executing at privilege level 0.";
  4207. break;
  4208. case "sysret":
  4209. instructionInfo = "SYSRET is a companion instruction to the SYSCALL instruction. It returns from " +
  4210. "an OS system-call handler to user code at privilege level 3. It does so by " +
  4211. "loading RIP from RCX and loading RFLAGS from R11.<sup>1</sup> With a 64-bit " +
  4212. "operand size, SYSRET remains in 64-bit mode; otherwise, it enters compatibility " +
  4213. "mode and only the low 32 bits of the registers are loaded.";
  4214. break;
  4215. case "test":
  4216. instructionInfo = "Computes the bit-wise logical AND of first operand (source 1 operand) and the " +
  4217. "second operand (source 2 operand) and sets the SF, ZF, and PF status flags " +
  4218. "according to the result. The result is then discarded.";
  4219. break;
  4220. case "tpause":
  4221. instructionInfo = "TPAUSE instructs the processor to enter an implementation-dependent optimized state. " +
  4222. "There are two such optimized states to choose from: light-weight power/performance " +
  4223. "optimized state, and improved power/performance optimized state. " +
  4224. "The selection between the two is governed by the explicit input register bit[0] source operand.";
  4225. break;
  4226. case "tzcnt":
  4227. instructionInfo = "TZCNT counts the number of trailing least significant zero bits in source " +
  4228. "operand (second operand) and returns the result in destination operand (first operand). " +
  4229. "TZCNT is an extension of the BSF instruction. The key difference between " +
  4230. "TZCNT and BSF instruction is that TZCNT provides operand size as output when " +
  4231. "source operand is zero while in the case of BSF instruction, if source operand " +
  4232. "is zero, the content of destination operand are undefined. On processors that " +
  4233. "do not support TZCNT, the instruction byte encoding is executed as BSF.";
  4234. break;
  4235. case "ucomisd":
  4236. case "vucomisd":
  4237. instructionInfo = "Performs an unordered compare of the double-precision floating-point values " +
  4238. "in the low quadwords of operand 1 (first operand) and operand 2 (second operand), " +
  4239. "and sets the ZF, PF, and CF flags in the EFLAGS register according to the result " +
  4240. "(unordered, greater than, less than, or equal). The OF, SF and AF flags in the " +
  4241. "EFLAGS register are set to 0. The unordered result is returned if either source " +
  4242. "operand is a NaN (QNaN or SNaN).";
  4243. break;
  4244. case "ucomiss":
  4245. case "vucomiss":
  4246. instructionInfo = "Compares the single-precision floating-point values in the low doublewords of " +
  4247. "operand 1 (first operand) and operand 2 (second operand), and sets the ZF, PF, " +
  4248. "and CF flags in the EFLAGS register according to the result (unordered, " +
  4249. "greater than, less than, or equal). The OF, SF and AF flags in the EFLAGS " +
  4250. "register are set to 0. The unordered result is returned if either source " +
  4251. "operand is a NaN (QNaN or SNaN).";
  4252. break;
  4253. case "ud":
  4254. instructionInfo = "Generates an invalid opcode exception. This instruction is provided for " +
  4255. "software testing to explicitly generate an invalid opcode exception. The " +
  4256. "opcodes for this instruction are reserved for this purpose.";
  4257. break;
  4258. case "umonitor":
  4259. instructionInfo = "The UMONITOR instruction arms address monitoring hardware using an address " +
  4260. "specified in the source register (the address range that the monitoring " +
  4261. "hardware checks for store operations can be determined by using the CPUID " +
  4262. "monitor leaf function, EAX=05H). A store to an address within the specified " +
  4263. "address range triggers the monitoring hardware. The state of monitor hardware " +
  4264. "is used by UMWAIT.";
  4265. break;
  4266. case "umwait":
  4267. instructionInfo = "UMWAIT instructs the processor to enter an implementation-dependent optimized " +
  4268. "state while monitoring a range of addresses. The optimized state may be " +
  4269. "either a light-weight power/performance optimized state or an improved " +
  4270. "power/performance optimized state. The selection between the two states is " +
  4271. "governed by the explicit input register bit[0] source operand.";
  4272. break;
  4273. case "unpckhpd":
  4274. case "vunpckhpd":
  4275. instructionInfo = "Performs an interleaved unpack of the high double-precision floating-point " +
  4276. "values from the first source operand and the second source operand.";
  4277. break;
  4278. case "unpckhps":
  4279. case "vunpckhps":
  4280. instructionInfo = "Performs an interleaved unpack of the high single-precision floating-point " +
  4281. "values from the first source operand and the second source operand.";
  4282. break;
  4283. case "unpcklpd":
  4284. case "vunpcklpd":
  4285. instructionInfo = "Performs an interleaved unpack of the low double-precision floating-point " +
  4286. "values from the first source operand and the second source operand.";
  4287. break;
  4288. case "unpcklps":
  4289. case "vunpcklps":
  4290. instructionInfo = "Performs an interleaved unpack of the low single-precision floating-point " +
  4291. "values from the first source operand and the second source operand.";
  4292. break;
  4293. case "valignd":
  4294. case "valignq":
  4295. instructionInfo = "Concatenates and shifts right doubleword/quadword elements of the first " +
  4296. "source operand (the second operand) and the second source operand " +
  4297. "(the third operand) into a 1024/512/256-bit intermediate vector. " +
  4298. "The low 512/256/128-bit of the intermediate vector is written to the " +
  4299. "destination operand (the first operand) using the writemask k1. " +
  4300. "The destination and first source operands are ZMM/YMM/XMM registers. " +
  4301. "The second source operand can be a ZMM/YMM/XMM register, a 512/256/128-bit " +
  4302. "memory location or a 512/256/128-bit vector broadcasted from a 32/64-bit memory location.";
  4303. break;
  4304. case "vblendmpd":
  4305. case "vblendmps":
  4306. instructionInfo = "Performs an element-by-element blending between float64/float32 elements in " +
  4307. "the first source operand (the second operand) with the elements in the second " +
  4308. "source operand (the third operand) using an opmask register as select control. " +
  4309. "The blended result is written to the destination register.";
  4310. break;
  4311. case "vbroadcast":
  4312. case "vbroadcastsd":
  4313. case "vbroadcastss":
  4314. case "vbroadcastf128":
  4315. case "vbroadcasti128":
  4316. instructionInfo = "Load floating-point values as one tuple from the source operand " +
  4317. "(second operand) in memory and broadcast to all elements of the destination " +
  4318. "operand (first operand).";
  4319. break;
  4320. case "vcompresspd":
  4321. instructionInfo = "Compress (store) up to 8 double-precision floating-point values from the " +
  4322. "source operand (the second operand) as a contiguous vector to the destination " +
  4323. "operand (the first operand) The source operand is a ZMM/YMM/XMM register, " +
  4324. "the destination operand can be a ZMM/YMM/XMM register or a 512/256/128-bit memory location.";
  4325. break;
  4326. case "vcompressps":
  4327. instructionInfo = "Compress (stores) up to 16 single-precision floating-point values from the " +
  4328. "source operand (the second operand) to the destination operand (the first operand). " +
  4329. "The source operand is a ZMM/YMM/XMM register, the destination operand can be a " +
  4330. "ZMM/YMM/XMM register or a 512/256/128-bit memory location.";
  4331. break;
  4332. case "vcvtpd2qq":
  4333. instructionInfo = "Converts packed double-precision floating-point values in the source operand " +
  4334. "(second operand) to packed quadword integers in the destination operand (first operand).";
  4335. break;
  4336. case "vcvtpd2udq":
  4337. instructionInfo = "Converts packed double-precision floating-point values in the source operand " +
  4338. "(the second operand) to packed unsigned doubleword integers in the destination " +
  4339. "operand (the first operand).";
  4340. break;
  4341. case "vcvtpd2uqq":
  4342. instructionInfo = "Converts packed double-precision floating-point values in the source operand " +
  4343. "(second operand) to packed unsigned quadword integers in the destination " +
  4344. "operand (first operand).";
  4345. break;
  4346. case "vcvtph2ps":
  4347. instructionInfo = "Converts packed half precision (16-bits) floating-point values in the " +
  4348. "low-order bits of the source operand (the second operand) to packed " +
  4349. "single-precision floating-point values and writes the converted values into " +
  4350. "the destination operand (the first operand).";
  4351. break;
  4352. case "vcvtps2ph":
  4353. instructionInfo = "Convert packed single-precision floating values in the source operand to " +
  4354. "half-precision (16-bit) floating-point values and store to the destination operand. " +
  4355. "The rounding mode is specified using the immediate field (imm8).";
  4356. break;
  4357. case "vcvtps2qq":
  4358. instructionInfo = "Converts eight packed single-precision floating-point values in the source " +
  4359. "operand to eight signed quadword integers in the destination operand.";
  4360. break;
  4361. case "vcvtps2udq":
  4362. instructionInfo = "Converts sixteen packed single-precision floating-point values in the source " +
  4363. "operand to sixteen unsigned double-word integers in the destination operand.";
  4364. break;
  4365. case "vcvtps2uqq":
  4366. instructionInfo = "Converts up to eight packed single-precision floating-point values in the " +
  4367. "source operand to unsigned quadword integers in the destination operand.";
  4368. break;
  4369. case "vcvtqq2pd":
  4370. instructionInfo = "Converts packed quadword integers in the source operand (second operand) to " +
  4371. "packed double-precision floating-point values in the destination operand (first operand).";
  4372. break;
  4373. case "vcvtqq2ps":
  4374. instructionInfo = "Converts packed quadword integers in the source operand (second operand) to " +
  4375. "packed single-precision floating-point values in the destination operand (first operand).";
  4376. break;
  4377. case "vcvtsd2usi":
  4378. instructionInfo = "Converts a double-precision floating-point value in the source operand " +
  4379. "(the second operand) to an unsigned doubleword integer in the destination " +
  4380. "operand (the first operand). The source operand can be an XMM register or a " +
  4381. "64-bit memory location. The destination operand is a general-purpose register. " +
  4382. "When the source operand is an XMM register, the double-precision floating-point " +
  4383. "value is contained in the low quadword of the register.";
  4384. break;
  4385. case "vcvtss2usi":
  4386. instructionInfo = "Converts a single-precision floating-point value in the source operand " +
  4387. "(the second operand) to an unsigned double-word integer (or unsigned quadword " +
  4388. "integer if operand size is 64 bits) in the destination operand (the first operand). " +
  4389. "The source operand can be an XMM register or a memory location. " +
  4390. "The destination operand is a general-purpose register. When the source operand " +
  4391. "is an XMM register, the single-precision floating-point value is contained " +
  4392. "in the low doubleword of the register.";
  4393. break;
  4394. case "vcvttpd2qq":
  4395. instructionInfo = "Converts with truncation packed double-precision floating-point values in " +
  4396. "the source operand (second operand) to packed quadword integers in the " +
  4397. "destination operand (first operand).";
  4398. break;
  4399. case "vcvttpd2udq":
  4400. instructionInfo = "Converts with truncation packed double-precision floating-point values in " +
  4401. "the source operand (the second operand) to packed unsigned doubleword integers " +
  4402. "in the destination operand (the first operand).";
  4403. break;
  4404. case "vcvttpd2uqq":
  4405. instructionInfo = "Converts with truncation packed double-precision floating-point values in " +
  4406. "the source operand (second operand) to packed unsigned quadword integers in " +
  4407. "the destination operand (first operand).";
  4408. break;
  4409. case "vcvttps2qq":
  4410. instructionInfo = "Converts with truncation packed single-precision floating-point values in " +
  4411. "the source operand to eight signed quadword integers in the destination operand.";
  4412. break;
  4413. case "vcvttps2udq":
  4414. instructionInfo = "Converts with truncation packed single-precision floating-point values in " +
  4415. "the source operand to sixteen unsigned doubleword integers in the destination operand.";
  4416. break;
  4417. case "vcvttps2uqq":
  4418. instructionInfo = "Converts with truncation up to eight packed single-precision floating-point " +
  4419. "values in the source operand to unsigned quadword integers in the destination operand.";
  4420. break;
  4421. case "vcvttsd2usi":
  4422. instructionInfo = "Converts with truncation a double-precision floating-point value in the " +
  4423. "source operand (the second operand) to an unsigned doubleword integer " +
  4424. "(or unsigned quadword integer if operand size is 64 bits) in the destination " +
  4425. "operand (the first operand). The source operand can be an XMM register or a " +
  4426. "64-bit memory location. The destination operand is a general-purpose register. " +
  4427. "When the source operand is an XMM register, the double-precision floating-point " +
  4428. "value is contained in the low quadword of the register.";
  4429. break;
  4430. case "vcvttss2usi":
  4431. instructionInfo = "Converts with truncation a single-precision floating-point value in the " +
  4432. "source operand (the second operand) to an unsigned doubleword integer " +
  4433. "(or unsigned quadword integer if operand size is 64 bits) in the destination " +
  4434. "operand (the first operand). The source operand can be an XMM register or a " +
  4435. "memory location. The destination operand is a general-purpose register. " +
  4436. "When the source operand is an XMM register, the single-precision floating-point " +
  4437. "value is contained in the low doubleword of the register.";
  4438. break;
  4439. case "vcvtudq2pd":
  4440. instructionInfo = "Converts packed unsigned doubleword integers in the source operand (second " +
  4441. "operand) to packed double-precision floating-point values in the destination " +
  4442. "operand (first operand).";
  4443. break;
  4444. case "vcvtudq2ps":
  4445. instructionInfo = "Converts packed unsigned doubleword integers in the source operand (second " +
  4446. "operand) to single-precision floating-point values in the destination operand " +
  4447. "(first operand).";
  4448. break;
  4449. case "vcvtuqq2pd":
  4450. instructionInfo = "Converts packed unsigned quadword integers in the source operand (second " +
  4451. "operand) to packed double-precision floating-point values in the destination " +
  4452. "operand (first operand).";
  4453. break;
  4454. case "vcvtuqq2ps":
  4455. instructionInfo = "Converts packed unsigned quadword integers in the source operand (second " +
  4456. "operand) to single-precision floating-point values in the destination operand " +
  4457. "(first operand).";
  4458. break;
  4459. case "vcvtusi2sd":
  4460. instructionInfo = "Converts an unsigned doubleword integer (or unsigned quadword integer if " +
  4461. "operand size is 64 bits) in the second source operand to a double-precision " +
  4462. "floating-point value in the destination operand. The result is stored in the " +
  4463. "low quadword of the destination operand. When conversion is inexact, the value " +
  4464. "returned is rounded according to the rounding control bits in the MXCSR register.";
  4465. break;
  4466. case "vcvtusi2ss":
  4467. instructionInfo = "Converts a unsigned doubleword integer (or unsigned quadword integer if " +
  4468. "operand size is 64 bits) in the source operand (second operand) to a " +
  4469. "single-precision floating-point value in the destination operand (first operand). " +
  4470. "The source operand can be a general-purpose register or a memory location. " +
  4471. "The destination operand is an XMM register. The result is stored in the low " +
  4472. "doubleword of the destination operand. When a conversion is inexact, the value " +
  4473. "returned is rounded according to the rounding control bits in the MXCSR " +
  4474. "register or the embedded rounding control bits.";
  4475. break;
  4476. case "vdbpsadbw":
  4477. instructionInfo = "Compute packed SAD (sum of absolute differences) word results of unsigned " +
  4478. "bytes from two 32-bit dword elements. Packed SAD word results are calculated " +
  4479. "in multiples of qword superblocks, producing 4 SAD word results in each " +
  4480. "64-bit superblock of the destination register.";
  4481. break;
  4482. case "verr":
  4483. case "verw":
  4484. instructionInfo = "Verifies whether the code or data segment specified with the source operand " +
  4485. "is readable (VERR) or writable (VERW) from the current privilege level (CPL). " +
  4486. "The source operand is a 16-bit register or a memory location that contains " +
  4487. "the segment selector for the segment to be verified. If the segment is " +
  4488. "accessible and readable (VERR) or writable (VERW), the ZF flag is set; " +
  4489. "otherwise, the ZF flag is cleared. Code segments are never verified as writable. " +
  4490. "This check cannot be performed on system segments.";
  4491. break;
  4492. case "vexpandpd":
  4493. instructionInfo = "Expand (load) up to 8/4/2, contiguous, double-precision floating-point values " +
  4494. "of the input vector in the source operand (the second operand) to sparse " +
  4495. "elements in the destination operand (the first operand) selected by the writemask k1.";
  4496. break;
  4497. case "vexpandps":
  4498. instructionInfo = "Expand (load) up to 16/8/4, contiguous, single-precision floating-point values " +
  4499. "of the input vector in the source operand (the second operand) to sparse " +
  4500. "elements of the destination operand (the first operand) selected by the writemask k1.";
  4501. break;
  4502. case "vextractf128":
  4503. case "vextractf32x4":
  4504. case "vextractf64x2":
  4505. case "vextractf32x8":
  4506. case "vextractf64x4":
  4507. instructionInfo = "VEXTRACTF128/VEXTRACTF32x4 and VEXTRACTF64x2 extract 128-bits of single-precision " +
  4508. "floating-point values from the source operand (the second operand) and store " +
  4509. "to the low 128-bit of the destination operand (the first operand). The 128-bit " +
  4510. "data extraction occurs at an 128-bit granular offset specified by imm8[0] " +
  4511. "(256-bit) or imm8[1:0] as the multiply factor. The destination may be either " +
  4512. "a vector register or an 128-bit memory location.";
  4513. break;
  4514. case "vextracti128":
  4515. case "vextracti32x4":
  4516. case "vextracti64x2":
  4517. case "vextracti32x8":
  4518. case "vextracti64x4":
  4519. instructionInfo = "VEXTRACTI128/VEXTRACTI32x4 and VEXTRACTI64x2 extract 128-bits of doubleword " +
  4520. "integer values from the source operand (the second operand) and store to the " +
  4521. "low 128-bit of the destination operand (the first operand). The 128-bit data " +
  4522. "extraction occurs at an 128-bit granular offset specified by imm8[0] (256-bit) " +
  4523. "or imm8[1:0] as the multiply factor. The destination may be either a vector " +
  4524. "register or an 128-bit memory location.";
  4525. break;
  4526. case "vfixupimmpd":
  4527. instructionInfo = "Perform fix-up of quad-word elements encoded in double-precision floating-point " +
  4528. "format in the first source operand (the second operand) using a 32-bit, " +
  4529. "two-level look-up table specified in the corresponding quadword element of " +
  4530. "the second source operand (the third operand) with exception reporting specifier " +
  4531. "imm8. The elements that are fixed-up are selected by mask bits of 1 specified " +
  4532. "in the opmask k1. Mask bits of 0 in the opmask k1 or table response action of " +
  4533. "0000b preserves the corresponding element of the first operand. The fixed-up " +
  4534. "elements from the first source operand and the preserved element in the first " +
  4535. "operand are combined as the final results in the destination operand (the first operand).";
  4536. break;
  4537. case "vfixupimmps":
  4538. instructionInfo = "Perform fix-up of doubleword elements encoded in single-precision floating-point " +
  4539. "format in the first source operand (the second operand) using a 32-bit, " +
  4540. "two-level look-up table specified in the corresponding doubleword element of " +
  4541. "the second source operand (the third operand) with exception reporting specifier imm8. " +
  4542. "The elements that are fixed-up are selected by mask bits of 1 specified in " +
  4543. "the opmask k1. Mask bits of 0 in the opmask k1 or table response action of 0000b " +
  4544. "preserves the corresponding element of the first operand. The fixed-up elements " +
  4545. "from the first source operand and the preserved element in the first operand " +
  4546. "are combined as the final results in the destination operand (the first operand).";
  4547. break;
  4548. case "vfixupimmsd":
  4549. instructionInfo = "Perform a fix-up of the low quadword element encoded in double-precision " +
  4550. "floating-point format in the first source operand (the second operand) using " +
  4551. "a 32-bit, two-level look-up table specified in the low quadword element of the " +
  4552. "second source operand (the third operand) with exception reporting specifier imm8. " +
  4553. "The element that is fixed-up is selected by mask bit of 1 specified in the " +
  4554. "opmask k1. Mask bit of 0 in the opmask k1 or table response action of 0000b " +
  4555. "preserves the corresponding element of the first operand. The fixed-up element " +
  4556. "from the first source operand or the preserved element in the first operand " +
  4557. "becomes the low quadword element of the destination operand (the first operand). " +
  4558. "Bits 127:64 of the destination operand is copied from the corresponding bits " +
  4559. "of the first source operand. The destination and first source operands are " +
  4560. "XMM registers. The second source operand can be a XMM register or a 64- bit " +
  4561. "memory location.";
  4562. break;
  4563. case "vfixupimmss":
  4564. instructionInfo = "Perform a fix-up of the low doubleword element encoded in single-precision " +
  4565. "floating-point format in the first source operand (the second operand) using " +
  4566. "a 32-bit, two-level look-up table specified in the low doubleword element of " +
  4567. "the second source operand (the third operand) with exception reporting specifier " +
  4568. "imm8. The element that is fixed-up is selected by mask bit of 1 specified in " +
  4569. "the opmask k1. Mask bit of 0 in the opmask k1 or table response action of 0000b " +
  4570. "preserves the corresponding element of the first operand. The fixed-up element " +
  4571. "from the first source operand or the preserved element in the first operand " +
  4572. "becomes the low doubleword element of the destination operand (the first " +
  4573. "operand) Bits 127:32 of the destination operand is copied from the corresponding " +
  4574. "bits of the first source operand. The destination and first source operands " +
  4575. "are XMM registers. The second source operand can be a XMM register or a 32-bit " +
  4576. "memory location.";
  4577. break;
  4578. case "vfmadd123pd":
  4579. case "vfmadd132pd":
  4580. case "vfmadd213pd":
  4581. case "vfmadd231pd":
  4582. case "vfmadd321pd":
  4583. case "vfmadd312pd":
  4584. instructionInfo = "Performs a set of SIMD multiply-add computation on packed double-precision " +
  4585. "floating-point values using three source operands and writes the multiply-add " +
  4586. "results in the destination operand. The destination operand is also the first " +
  4587. "source operand. The second operand must be a SIMD register. The third source " +
  4588. "operand can be a SIMD register or a memory location.";
  4589. break;
  4590. case "vfmadd123ps":
  4591. case "vfmadd132ps":
  4592. case "vfmadd213ps":
  4593. case "vfmadd231ps":
  4594. case "vfmadd321ps":
  4595. case "vfmadd312ps":
  4596. instructionInfo = "Performs a set of SIMD multiply-add computation on packed single-precision " +
  4597. "floating-point values using three source operands and writes the multiply-add " +
  4598. "results in the destination operand. The destination operand is also the first " +
  4599. "source operand. The second operand must be a SIMD register. The third source " +
  4600. "operand can be a SIMD register or a memory location.";
  4601. break;
  4602. case "vfmadd123sd":
  4603. case "vfmadd132sd":
  4604. case "vfmadd213sd":
  4605. case "vfmadd231sd":
  4606. case "vfmadd321sd":
  4607. case "vfmadd312sd":
  4608. instructionInfo = "Performs a SIMD multiply-add computation on the low double-precision " +
  4609. "floating-point values using three source operands and writes the multiply-add " +
  4610. "result in the destination operand. The destination operand is also the first " +
  4611. "source operand. The first and second operand are XMM registers. The third " +
  4612. "source operand can be an XMM register or a 64-bit memory location.";
  4613. break;
  4614. case "vfmadd123ss":
  4615. case "vfmadd132ss":
  4616. case "vfmadd213ss":
  4617. case "vfmadd231ss":
  4618. case "vfmadd321ss":
  4619. case "vfmadd312ss":
  4620. instructionInfo = "Performs a SIMD multiply-add computation on single-precision floating-point " +
  4621. "values using three source operands and writes the multiply-add results in the " +
  4622. "destination operand. The destination operand is also the first source operand. " +
  4623. "The first and second operands are XMM registers. The third source operand can " +
  4624. "be a XMM register or a 32-bit memory location.";
  4625. break;
  4626. case "vfmaddsub132pd":
  4627. case "vfmaddsub213pd":
  4628. case "vfmaddsub231pd":
  4629. case "vfmaddsub123pd":
  4630. case "vfmaddsub312pd":
  4631. case "vfmaddsub321pd":
  4632. instructionInfo = "VFMADDSUB132PD: Multiplies the two, four, or eight packed double-precision " +
  4633. "floating-point values from the first source operand to the two or four packed " +
  4634. "double-precision floating-point values in the third source operand. From the " +
  4635. "infinite precision intermediate result, adds the odd double-precision " +
  4636. "floating-point elements and subtracts the even double-precision floating-point " +
  4637. "values in the second source operand, performs rounding and stores the resulting " +
  4638. "two or four packed double-precision floating-point values to the destination " +
  4639. "operand (first source operand).";
  4640. break;
  4641. case "vfmaddsub132ps":
  4642. case "vfmaddsub213ps":
  4643. case "vfmaddsub231ps":
  4644. case "vfmaddsub123ps":
  4645. case "vfmaddsub312ps":
  4646. case "vfmaddsub321ps":
  4647. instructionInfo = "VFMADDSUB132PS: Multiplies the four, eight or sixteen packed single-precision " +
  4648. "floating-point values from the first source operand to the corresponding packed " +
  4649. "single-precision floating-point values in the third source operand. From the " +
  4650. "infinite precision intermediate result, adds the odd single-precision " +
  4651. "floating-point elements and subtracts the even single-precision floating-point " +
  4652. "values in the second source operand, performs rounding and stores the resulting " +
  4653. "packed single-precision floating-point values to the destination operand " +
  4654. "(first source operand).";
  4655. break;
  4656. case "vfmsub132pd":
  4657. case "vfmsub213pd":
  4658. case "vfmsub231pd":
  4659. case "vfmsub123pd":
  4660. case "vfmsub312pd":
  4661. case "vfmsub321pd":
  4662. instructionInfo = "Performs a set of SIMD multiply-subtract computation on packed double-precision " +
  4663. "floating-point values using three source operands and writes the multiply-subtract " +
  4664. "results in the destination operand. The destination operand is also the first " +
  4665. "source operand. The second operand must be a SIMD register. The third source " +
  4666. "operand can be a SIMD register or a memory location.";
  4667. break;
  4668. case "vfmsub132ps":
  4669. case "vfmsub213ps":
  4670. case "vfmsub231ps":
  4671. case "vfmsub123ps":
  4672. case "vfmsub312ps":
  4673. case "vfmsub321ps":
  4674. instructionInfo = "Performs a set of SIMD multiply-subtract computation on packed single-precision " +
  4675. "floating-point values using three source operands and writes the " +
  4676. "multiply-subtract results in the destination operand. The destination operand " +
  4677. "is also the first source operand. The second operand must be a SIMD register. " +
  4678. "The third source operand can be a SIMD register or a memory location.";
  4679. break;
  4680. case "vfmsub132sd":
  4681. case "vfmsub213sd":
  4682. case "vfmsub231sd":
  4683. case "vfmsub123sd":
  4684. case "vfmsub312sd":
  4685. case "vfmsub321sd":
  4686. instructionInfo = "Performs a SIMD multiply-subtract computation on the low packed double-precision " +
  4687. "floating-point values using three source operands and writes the multiply-subtract " +
  4688. "result in the destination operand. The destination operand is also the first " +
  4689. "source operand. The second operand must be a XMM register. The third source " +
  4690. "operand can be a XMM register or a 64-bit memory location.";
  4691. break;
  4692. case "vfmsub132ss":
  4693. case "vfmsub213ss":
  4694. case "vfmsub231ss":
  4695. case "vfmsub123ss":
  4696. case "vfmsub312ss":
  4697. case "vfmsub321ss":
  4698. instructionInfo = "Performs a SIMD multiply-subtract computation on the low packed single-precision " +
  4699. "floating-point values using three source operands and writes the multiply-subtract result in the destination operand. The destination operand is also the first source operand. The second operand must be a XMM register. The third source operand can be a XMM register or a 32-bit memory location.";
  4700. break;
  4701. case "vfmsubadd132pd":
  4702. case "vfmsubadd213pd":
  4703. case "vfmsubadd231pd":
  4704. case "vfmsubadd123pd":
  4705. case "vfmsubadd312pd":
  4706. case "vfmsubadd321pd":
  4707. instructionInfo = "VFMSUBADD132PD: Multiplies the two, four, or eight packed double-precision " +
  4708. "floating-point values from the first source operand to the two or four packed " +
  4709. "double-precision floating-point values in the third source operand. From the " +
  4710. "infinite precision intermediate result, subtracts the odd double-precision " +
  4711. "floating-point elements and adds the even double-precision floating-point " +
  4712. "values in the second source operand, performs rounding and stores the " +
  4713. "resulting two or four packed double-precision floating-point values to the " +
  4714. "destination operand (first source operand).";
  4715. break;
  4716. case "vfmsubadd132ps":
  4717. case "vfmsubadd213ps":
  4718. case "vfmsubadd231ps":
  4719. case "vfmsubadd123ps":
  4720. case "vfmsubadd312ps":
  4721. case "vfmsubadd321ps":
  4722. instructionInfo = "VFMSUBADD132PS: Multiplies the four, eight or sixteen packed single-precision " +
  4723. "floating-point values from the first source operand to the corresponding packed " +
  4724. "single-precision floating-point values in the third source operand. From the " +
  4725. "infinite precision intermediate result, subtracts the odd single-precision " +
  4726. "floating-point elements and adds the even single-precision floating-point " +
  4727. "values in the second source operand, performs rounding and stores the resulting " +
  4728. "packed single-precision floating-point values to the destination operand " +
  4729. "(first source operand).";
  4730. break;
  4731. case "vfnmadd132pd":
  4732. case "vfnmadd213pd":
  4733. case "vfnmadd231pd":
  4734. case "vfnmadd123pd":
  4735. case "vfnmadd312pd":
  4736. case "vfnmadd321pd":
  4737. instructionInfo = "VFNMADD132PD: Multiplies the two, four or eight packed double-precision " +
  4738. "floating-point values from the first source operand to the two, four or " +
  4739. "eight packed double-precision floating-point values in the third source " +
  4740. "operand, adds the negated infinite precision intermediate result to the two, " +
  4741. "four or eight packed double-precision floating-point values in the second " +
  4742. "source operand, performs rounding and stores the resulting two, four or eight " +
  4743. "packed double-precision floating-point values to the destination operand " +
  4744. "(first source operand).";
  4745. break;
  4746. case "vfnmadd132ps":
  4747. case "vfnmadd213ps":
  4748. case "vfnmadd231ps":
  4749. case "vfnmadd123ps":
  4750. case "vfnmadd312ps":
  4751. case "vfnmadd321ps":
  4752. instructionInfo = "VFNMADD132PS: Multiplies the four, eight or sixteen packed single-precision " +
  4753. "floating-point values from the first source operand to the four, eight or " +
  4754. "sixteen packed single-precision floating-point values in the third source " +
  4755. "operand, adds the negated infinite precision intermediate result to the four, " +
  4756. "eight or sixteen packed single-precision floating-point values in the second " +
  4757. "source operand, performs rounding and stores the resulting four, eight or " +
  4758. "sixteen packed single-precision floating-point values to the destination " +
  4759. "operand (first source operand).";
  4760. break;
  4761. case "vfnmadd132sd":
  4762. case "vfnmadd213sd":
  4763. case "vfnmadd231sd":
  4764. case "vfnmadd123sd":
  4765. case "vfnmadd312sd":
  4766. case "vfnmadd321sd":
  4767. instructionInfo = "VFNMADD132SD: Multiplies the low packed double-precision floating-point value " +
  4768. "from the first source operand to the low packed double-precision floating-point " +
  4769. "value in the third source operand, adds the negated infinite precision " +
  4770. "intermediate result to the low packed double-precision floating-point values " +
  4771. "in the second source operand, performs rounding and stores the resulting packed " +
  4772. "double-precision floating-point value to the destination operand (first source operand).";
  4773. break;
  4774. case "vfnmadd132ss":
  4775. case "vfnmadd213ss":
  4776. case "vfnmadd231ss":
  4777. case "vfnmadd123ss":
  4778. case "vfnmadd312ss":
  4779. case "vfnmadd321ss":
  4780. instructionInfo = "VFNMADD132SS: Multiplies the low packed single-precision floating-point value " +
  4781. "from the first source operand to the low packed single-precision floating-point " +
  4782. "value in the third source operand, adds the negated infinite precision " +
  4783. "intermediate result to the low packed single-precision floating-point value " +
  4784. "in the second source operand, performs rounding and stores the resulting " +
  4785. "packed single-precision floating-point value to the destination operand (first source operand).";
  4786. break;
  4787. case "vfnmsub132pd":
  4788. case "vfnmsub213pd":
  4789. case "vfnmsub231pd":
  4790. case "vfnmsub123pd":
  4791. case "vfnmsub312pd":
  4792. case "vfnmsub321pd":
  4793. instructionInfo = "VFNMSUB132PD: Multiplies the two, four or eight packed double-precision " +
  4794. "floating-point values from the first source operand to the two, four or " +
  4795. "eight packed double-precision floating-point values in the third source operand. " +
  4796. "From negated infinite precision intermediate results, subtracts the two, " +
  4797. "four or eight packed double-precision floating-point values in the second " +
  4798. "source operand, performs rounding and stores the resulting two, four or eight " +
  4799. "packed double-precision floating-point values to the destination operand (first source operand).";
  4800. break;
  4801. case "vfnmsub132ps":
  4802. case "vfnmsub213ps":
  4803. case "vfnmsub231ps":
  4804. case "vfnmsub123ps":
  4805. case "vfnmsub312ps":
  4806. case "vfnmsub321ps":
  4807. instructionInfo = "VFNMSUB132PS: Multiplies the four, eight or sixteen packed single-precision " +
  4808. "floating-point values from the first source operand to the four, eight or " +
  4809. "sixteen packed single-precision floating-point values in the third source operand. " +
  4810. "From negated infinite precision intermediate results, subtracts the four, " +
  4811. "eight or sixteen packed single-precision floating-point values in the second " +
  4812. "source operand, performs rounding and stores the resulting four, eight or " +
  4813. "sixteen packed single-precision floating-point values to the destination " +
  4814. "operand (first source operand).";
  4815. break;
  4816. case "vfnmsub132sd":
  4817. case "vfnmsub213sd":
  4818. case "vfnmsub231sd":
  4819. case "vfnmsub123sd":
  4820. case "vfnmsub312sd":
  4821. case "vfnmsub321sd":
  4822. instructionInfo = "VFNMSUB132SD: Multiplies the low packed double-precision floating-point value " +
  4823. "from the first source operand to the low packed double-precision floating-point " +
  4824. "value in the third source operand. From negated infinite precision " +
  4825. "intermediate result, subtracts the low double-precision floating-point value " +
  4826. "in the second source operand, performs rounding and stores the resulting " +
  4827. "packed double-precision floating-point value to the destination operand (first source operand).";
  4828. break;
  4829. case "vfnmsub132ss":
  4830. case "vfnmsub213ss":
  4831. case "vfnmsub231ss":
  4832. case "vfnmsub123ss":
  4833. case "vfnmsub312ss":
  4834. case "vfnmsub321ss":
  4835. instructionInfo = "VFNMSUB132SS: Multiplies the low packed single-precision floating-point " +
  4836. "value from the first source operand to the low packed single-precision " +
  4837. "floating-point value in the third source operand. From negated infinite " +
  4838. "precision intermediate result, the low single-precision floating-point " +
  4839. "value in the second source operand, performs rounding and stores the " +
  4840. "resulting packed single-precision floating-point value to the destination " +
  4841. "operand (first source operand).";
  4842. break;
  4843. case "vfpclasspd":
  4844. instructionInfo = "The FPCLASSPD instruction checks the packed double precision floating point " +
  4845. "values for special categories, specified by the set bits in the imm8 byte. " +
  4846. "Each set bit in imm8 specifies a category of floating-point values that the " +
  4847. "input data element is classified against. The classified results of all " +
  4848. "specified categories of an input value are ORed together to form the final " +
  4849. "boolean result for the input element. The result of each element is written " +
  4850. "to the corresponding bit in a mask register k2 according to the writemask k1. " +
  4851. "Bits [MAX_KL-1:8/4/2] of the destination are cleared.";
  4852. break;
  4853. case "vfpclassps":
  4854. instructionInfo = "The FPCLASSPS instruction checks the packed single-precision floating point " +
  4855. "values for special categories, specified by the set bits in the imm8 byte. " +
  4856. "Each set bit in imm8 specifies a category of floating-point values that the " +
  4857. "input data element is classified against. The classified results of all " +
  4858. "specified categories of an input value are ORed together to form the final " +
  4859. "boolean result for the input element. The result of each element is written " +
  4860. "to the corresponding bit in a mask register k2 according to the writemask k1. " +
  4861. "Bits [MAX_KL-1:16/8/4] of the destination are cleared.";
  4862. break;
  4863. case "vfpclasssd":
  4864. instructionInfo = "The FPCLASSSD instruction checks the low double precision floating point value " +
  4865. "in the source operand for special categories, specified by the set bits in " +
  4866. "the imm8 byte. Each set bit in imm8 specifies a category of floating-point " +
  4867. "values that the input data element is classified against. The classified " +
  4868. "results of all specified categories of an input value are ORed together to " +
  4869. "form the final boolean result for the input element. The result is written to " +
  4870. "the low bit in a mask register k2 according to the writemask k1. Bits " +
  4871. "MAX_KL-1: 1 of the destination are cleared.";
  4872. break;
  4873. case "vfpclassss":
  4874. instructionInfo = "The FPCLASSSS instruction checks the low single-precision floating point " +
  4875. "value in the source operand for special categories, specified by the set bits " +
  4876. "in the imm8 byte. Each set bit in imm8 specifies a category of floating-point " +
  4877. "values that the input data element is classified against. The classified " +
  4878. "results of all specified categories of an input value are ORed together to " +
  4879. "form the final boolean result for the input element. The result is written " +
  4880. "to the low bit in a mask register k2 according to the writemask k1. Bits " +
  4881. "MAX_KL-1: 1 of the destination are cleared.";
  4882. break;
  4883. case "vgatherdpd":
  4884. case "vgatherqpd":
  4885. instructionInfo = "The instruction conditionally loads up to 2 or 4 double-precision " +
  4886. "floating-point values from memory addresses specified by the memory operand " +
  4887. "(the second operand) and using qword indices. The memory operand uses the " +
  4888. "VSIB form of the SIB byte to specify a general purpose register operand as " +
  4889. "the common base, a vector register for an array of indices relative to the " +
  4890. "base and a constant scale factor.";
  4891. break;
  4892. case "vgatherdps":
  4893. case "vgatherqps":
  4894. instructionInfo = "The instruction conditionally loads up to 4 or 8 single-precision floating-point " +
  4895. "values from memory addresses specified by the memory operand (the second operand) " +
  4896. "and using dword indices. The memory operand uses the VSIB form of the SIB byte to " +
  4897. "specify a general purpose register operand as the common base, a vector register " +
  4898. "for an array of indices relative to the base and a constant scale factor.";
  4899. break;
  4900. case "vgetexppd":
  4901. instructionInfo = "Extracts the biased exponents from the normalized DP FP representation of " +
  4902. "each qword data element of the source operand (the second operand) as unbiased " +
  4903. "signed integer value, or convert the denormal representation of input data to " +
  4904. "unbiased negative integer values. Each integer value of the unbiased exponent " +
  4905. "is converted to double-precision FP value and written to the corresponding " +
  4906. "qword elements of the destination operand (the first operand) as DP FP numbers.";
  4907. break;
  4908. case "vgetexpps":
  4909. instructionInfo = "Extracts the biased exponents from the normalized SP FP representation of " +
  4910. "each dword element of the source operand (the second operand) as unbiased " +
  4911. "signed integer value, or convert the denormal representation of input data to " +
  4912. "unbiased negative integer values. Each integer value of the unbiased exponent " +
  4913. "is converted to single-precision FP value and written to the corresponding " +
  4914. "dword elements of the destination operand (the first operand) as SP FP numbers.";
  4915. break;
  4916. case "vgetexpsd":
  4917. instructionInfo = "Extracts the biased exponent from the normalized DP FP representation of the " +
  4918. "low qword data element of the source operand (the third operand) as unbiased " +
  4919. "signed integer value, or convert the denormal representation of input data to " +
  4920. "unbiased negative integer values. The integer value of the unbiased exponent " +
  4921. "is converted to double-precision FP value and written to the destination operand " +
  4922. "(the first operand) as DP FP numbers. Bits (127:64) of the XMM register " +
  4923. "destination are copied from corresponding bits in the first source operand.";
  4924. break;
  4925. case "vgetexpss":
  4926. instructionInfo = "Extracts the biased exponent from the normalized SP FP representation of the " +
  4927. "low doubleword data element of the source operand (the third operand) as " +
  4928. "unbiased signed integer value, or convert the denormal representation of input " +
  4929. "data to unbiased negative integer values. The integer value of the unbiased " +
  4930. "exponent is converted to single-precision FP value and written to the destination " +
  4931. "operand (the first operand) as SP FP numbers. Bits (127:32) of the XMM register " +
  4932. "destination are copied from corresponding bits in the first source operand.";
  4933. break;
  4934. case "vgetmantpd":
  4935. instructionInfo = "Convert double-precision floating values in the source operand (the second " +
  4936. "operand) to DP FP values with the mantissa normalization and sign control " +
  4937. "specified by the imm8 byte. The converted results are written to the destination " +
  4938. "operand (the first operand) using writemask k1. The normalized mantissa is " +
  4939. "specified by interv (imm8[1:0]) and the sign control (sc) is specified by " +
  4940. "bits 3:2 of the immediate byte.";
  4941. break;
  4942. case "vgetmantps":
  4943. instructionInfo = "Convert single-precision floating values in the source operand (the second " +
  4944. "operand) to SP FP values with the mantissa normalization and sign control " +
  4945. "specified by the imm8 byte. The converted results are written to the destination " +
  4946. "operand (the first operand) using writemask k1. The normalized mantissa is " +
  4947. "specified by interv (imm8[1:0]) and the sign control (sc) is specified by " +
  4948. "bits 3:2 of the immediate byte.";
  4949. break;
  4950. case "vgetmantsd":
  4951. instructionInfo = "Convert the double-precision floating values in the low quadword element of " +
  4952. "the second source operand (the third operand) to DP FP value with the mantissa " +
  4953. "normalization and sign control specified by the imm8 byte. The converted " +
  4954. "result is written to the low quadword element of the destination operand " +
  4955. "(the first operand) using writemask k1. Bits (127:64) of the XMM register " +
  4956. "destination are copied from corresponding bits in the first source operand. " +
  4957. "The normalized mantissa is specified by interv (imm8[1:0]) and the sign " +
  4958. "control (sc) is specified by bits 3:2 of the immediate byte.";
  4959. break;
  4960. case "vgetmantss":
  4961. instructionInfo = "Convert the single-precision floating values in the low doubleword element " +
  4962. "of the second source operand (the third operand) to SP FP value with the " +
  4963. "mantissa normalization and sign control specified by the imm8 byte. " +
  4964. "The converted result is written to the low doubleword element of the destination " +
  4965. "operand (the first operand) using writemask k1. Bits (127:32) of the XMM " +
  4966. "register destination are copied from corresponding bits in the first source " +
  4967. "operand. The normalized mantissa is specified by interv (imm8[1:0]) and the " +
  4968. "sign control (sc) is specified by bits 3:2 of the immediate byte.";
  4969. break;
  4970. case "vinsertf128":
  4971. case "vinsertf32x4":
  4972. case "vinsertf64x2":
  4973. case "vinsertf32x8":
  4974. case "vinsertf64x4":
  4975. instructionInfo = "VINSERTF128/VINSERTF32x4 and VINSERTF64x2 insert 128-bits of packed " +
  4976. "floating-point values from the second source operand (the third operand) " +
  4977. "into the destination operand (the first operand) at an 128-bit granularity " +
  4978. "offset multiplied by imm8[0] (256-bit) or imm8[1:0]. The remaining portions " +
  4979. "of the destination operand are copied from the corresponding fields of the " +
  4980. "first source operand (the second operand). The second source operand can be " +
  4981. "either an XMM register or a 128-bit memory location. The destination and " +
  4982. "first source operands are vector registers.";
  4983. break;
  4984. case "vinserti128":
  4985. case "vinserti32x4":
  4986. case "vinserti64x2":
  4987. case "vinserti32x8":
  4988. case "vinserti64x4":
  4989. instructionInfo = "VINSERTI32x4 and VINSERTI64x2 inserts 128-bits of packed integer values from " +
  4990. "the second source operand (the third operand) into the destination operand " +
  4991. "(the first operand) at an 128-bit granular offset multiplied by imm8[0] " +
  4992. "(256-bit) or imm8[1:0]. The remaining portions of the destination are copied " +
  4993. "from the corresponding fields of the first source operand (the second operand). " +
  4994. "The second source operand can be either an XMM register or a 128-bit memory " +
  4995. "location. The high 6/7bits of the immediate are ignored. The destination " +
  4996. "operand is a ZMM/YMM register and updated at 32 and 64-bit granularity " +
  4997. "according to the writemask.";
  4998. break;
  4999. case "vmaskmov":
  5000. instructionInfo = "Conditionally moves packed data elements from the second source operand into " +
  5001. "the corresponding data element of the destination operand, depending on the " +
  5002. "mask bits associated with each data element. The mask bits are specified in " +
  5003. "the first source operand.";
  5004. break;
  5005. case "vpblendd":
  5006. instructionInfo = "Dword elements from the source operand (second operand) are conditionally " +
  5007. "written to the destination operand (first operand) depending on bits in the " +
  5008. "immediate operand (third operand). The immediate bits (bits 7:0) form a mask " +
  5009. "that determines whether the corresponding word in the destination is copied " +
  5010. "from the source. If a bit in the mask, corresponding to a word, is \"1\", " +
  5011. "then the word is copied, else the word is unchanged.";
  5012. break;
  5013. case "vpblendmb":
  5014. case "vpblendmw":
  5015. instructionInfo = "Performs an element-by-element blending of byte/word elements between the " +
  5016. "first source operand byte vector register and the second source operand byte " +
  5017. "vector from memory or register, using the instruction mask as selector. " +
  5018. "The result is written into the destination byte vector register.";
  5019. break;
  5020. case "vpblendmd":
  5021. case "vpblendmq":
  5022. instructionInfo = "Performs an element-by-element blending of dword/qword elements between the " +
  5023. "first source operand (the second operand) and the elements of the second " +
  5024. "source operand (the third operand) using an opmask register as select control. " +
  5025. "The blended result is written into the destination.";
  5026. break;
  5027. case "vpbroadcast":
  5028. instructionInfo = "Load integer data from the source operand (the second operand) and broadcast " +
  5029. "to all elements of the destination operand (the first operand).";
  5030. break;
  5031. case "vpbroadcastb":
  5032. case "vpbroadcastw":
  5033. case "vpbroadcastd":
  5034. case "vpbroadcastq":
  5035. instructionInfo = "Broadcasts a 8-bit, 16-bit, 32-bit or 64-bit value from a general-purpose " +
  5036. "register (the second operand) to all the locations in the destination vector " +
  5037. "register (the first operand) using the writemask k1.";
  5038. break;
  5039. case "vpbroadcastm":
  5040. instructionInfo = "Broadcasts the zero-extended 64/32 bit value of the low byte/word of the " +
  5041. "source operand (the second operand) to each 64/32 bit element of the " +
  5042. "destination operand (the first operand). The source operand is an opmask register. " +
  5043. "The destination operand is a ZMM register (EVEX.512), YMM register (EVEX.256), " +
  5044. "or XMM register (EVEX.128).";
  5045. break;
  5046. case "vpcmpb":
  5047. case "vpcmpub":
  5048. instructionInfo = "Performs a SIMD compare of the packed byte values in the second source operand " +
  5049. "and the first source operand and returns the results of the comparison to the " +
  5050. "mask destination operand. The comparison predicate operand (immediate byte) " +
  5051. "specifies the type of comparison performed on each pair of packed values in " +
  5052. "the two source operands. The result of each comparison is a single mask bit " +
  5053. "result of 1 (comparison true) or 0 (comparison false).";
  5054. break;
  5055. case "vpcmpd":
  5056. case "vpcmpud":
  5057. instructionInfo = "Performs a SIMD compare of the packed integer values in the second source " +
  5058. "operand and the first source operand and returns the results of the comparison " +
  5059. "to the mask destination operand. The comparison predicate operand (immediate byte) " +
  5060. "specifies the type of comparison performed on each pair of packed values in " +
  5061. "the two source operands. The result of each comparison is a single mask bit " +
  5062. "result of 1 (comparison true) or 0 (comparison false).";
  5063. break;
  5064. case "vpcmpq":
  5065. case "vpcmpuq":
  5066. instructionInfo = "Performs a SIMD compare of the packed integer values in the second source " +
  5067. "operand and the first source operand and returns the results of the comparison " +
  5068. "to the mask destination operand. The comparison predicate operand (immediate " +
  5069. "byte) specifies the type of comparison performed on each pair of packed values " +
  5070. "in the two source operands. The result of each comparison is a single mask " +
  5071. "bit result of 1 (comparison true) or 0 (comparison false).";
  5072. break;
  5073. case "vpcmpw":
  5074. case "vpcmpuw":
  5075. instructionInfo = "Performs a SIMD compare of the packed integer word in the second source " +
  5076. "operand and the first source operand and returns the results of the comparison " +
  5077. "to the mask destination operand. The comparison predicate operand (immediate " +
  5078. "byte) specifies the type of comparison performed on each pair of packed values " +
  5079. "in the two source operands. The result of each comparison is a single mask " +
  5080. "bit result of 1 (comparison true) or 0 (comparison false).";
  5081. break;
  5082. case "vpcompressd":
  5083. instructionInfo = "Compress (store) up to 16/8/4 doubleword integer values from the source " +
  5084. "operand (second operand) to the destination operand (first operand). " +
  5085. "The source operand is a ZMM/YMM/XMM register, the destination operand can " +
  5086. "be a ZMM/YMM/XMM register or a 512/256/128-bit memory location.";
  5087. break;
  5088. case "vpcompressq":
  5089. instructionInfo = "Compress (stores) up to 8/4/2 quadword integer values from the source operand " +
  5090. "(second operand) to the destination operand (first operand). The source " +
  5091. "operand is a ZMM/YMM/XMM register, the destination operand can be a ZMM/YMM/XMM " +
  5092. "register or a 512/256/128-bit memory location.";
  5093. break;
  5094. case "vpconflictd":
  5095. case "vpconflictq":
  5096. instructionInfo = "Test each dword/qword element of the source operand (the second operand) for " +
  5097. "equality with all other elements in the source operand closer to the least " +
  5098. "significant element. Each element\xe2\x80\x99s comparison results form a bit " +
  5099. "vector, which is then zero extended and written to the destination according " +
  5100. "to the writemask.";
  5101. break;
  5102. case "vperm2f128":
  5103. instructionInfo = "Permute 128 bit floating-point-containing fields from the first source operand " +
  5104. "(second operand) and second source operand (third operand) using bits in the " +
  5105. "8-bit immediate and store results in the destination operand (first operand). " +
  5106. "The first source operand is a YMM register, the second source operand is a YMM " +
  5107. "register or a 256-bit memory location, and the destination operand is a YMM register.";
  5108. break;
  5109. case "vperm2i128":
  5110. instructionInfo = "Permute 128 bit integer data from the first source operand (second operand) " +
  5111. "and second source operand (third operand) using bits in the 8-bit immediate " +
  5112. "and store results in the destination operand (first operand). The first source " +
  5113. "operand is a YMM register, the second source operand is a YMM register or a " +
  5114. "256-bit memory location, and the destination operand is a YMM register.";
  5115. break;
  5116. case "vpermb":
  5117. instructionInfo = "Copies bytes from the second source operand (the third operand) to the " +
  5118. "destination operand (the first operand) according to the byte indices in the " +
  5119. "first source operand (the second operand). Note that this instruction permits " +
  5120. "a byte in the source operand to be copied to more than one location in the " +
  5121. "destination operand.";
  5122. break;
  5123. case "vpermd":
  5124. case "vpermw":
  5125. instructionInfo = "Copies doublewords (or words) from the second source operand (the third " +
  5126. "operand) to the destination operand (the first operand) according to the " +
  5127. "indices in the first source operand (the second operand). Note that this " +
  5128. "instruction permits a doubleword (word) in the source operand to be copied " +
  5129. "to more than one location in the destination operand.";
  5130. break;
  5131. case "vpermi2b":
  5132. instructionInfo = "Permutes byte values in the second operand (the first source operand) and " +
  5133. "the third operand (the second source operand) using the byte indices in the " +
  5134. "first operand (the destination operand) to select byte elements from the " +
  5135. "second or third source operands. The selected byte elements are written to " +
  5136. "the destination at byte granularity under the writemask k1.";
  5137. break;
  5138. case "vpermi2w":
  5139. case "vpermi2d":
  5140. case "vpermi2q":
  5141. case "vpermi2ps":
  5142. case "vpermi2pd":
  5143. instructionInfo = "Permutes 16-bit/32-bit/64-bit values in the second operand (the first source " +
  5144. "operand) and the third operand (the second source operand) using indices in " +
  5145. "the first operand to select elements from the second and third operands. " +
  5146. "The selected elements are written to the destination operand (the first " +
  5147. "operand) according to the writemask k1.";
  5148. break;
  5149. case "vpermilpd":
  5150. instructionInfo = "Permute pairs of double-precision floating-point values in the first source " +
  5151. "operand (second operand), each using a 1-bit control field residing in the " +
  5152. "corresponding quadword element of the second source operand (third operand). " +
  5153. "Permuted results are stored in the destination operand (first operand).";
  5154. break;
  5155. case "vpermilps":
  5156. instructionInfo = "Permute quadruples of single-precision floating-point values in the first " +
  5157. "source operand (second operand), each quadruplet using a 2-bit control field " +
  5158. "in the corresponding dword element of the second source operand. Permuted " +
  5159. "results are stored in the destination operand (first operand).";
  5160. break;
  5161. case "vpermpd":
  5162. instructionInfo = "The imm8 version: Copies quadword elements of double-precision floating-point " +
  5163. "values from the source operand (the second operand) to the destination " +
  5164. "operand (the first operand) according to the indices specified by the " +
  5165. "immediate operand (the third operand). Each two-bit value in the immediate " +
  5166. "byte selects a qword element in the source operand.";
  5167. break;
  5168. case "vpermps":
  5169. instructionInfo = "Copies doubleword elements of single-precision floating-point values from " +
  5170. "the second source operand (the third operand) to the destination operand " +
  5171. "(the first operand) according to the indices in the first source operand " +
  5172. "(the second operand). Note that this instruction permits a doubleword in " +
  5173. "the source operand to be copied to more than one location in the destination " +
  5174. "operand.";
  5175. break;
  5176. case "vpermq":
  5177. instructionInfo = "The imm8 version: Copies quadwords from the source operand (the second " +
  5178. "operand) to the destination operand (the first operand) according to the " +
  5179. "indices specified by the immediate operand (the third operand). Each two-bit " +
  5180. "value in the immediate byte selects a qword element in the source operand.";
  5181. break;
  5182. case "vpermt2b":
  5183. instructionInfo = "Permutes byte values from two tables, comprising of the first operand (also " +
  5184. "the destination operand) and the third operand (the second source operand). " +
  5185. "The second operand (the first source operand) provides byte indices to select " +
  5186. "byte results from the two tables. The selected byte elements are written to " +
  5187. "the destination at byte granularity under the writemask k1.";
  5188. break;
  5189. case "vpermt2w":
  5190. case "vpermt2d":
  5191. case "vpermt2q":
  5192. case "vpermt2ps":
  5193. case "vpermt2pd":
  5194. instructionInfo = "Permutes 16-bit/32-bit/64-bit values in the first operand and the third " +
  5195. "operand (the second source operand) using indices in the second operand " +
  5196. "(the first source operand) to select elements from the first and third operands. " +
  5197. "The selected elements are written to the destination operand (the first operand) " +
  5198. "according to the writemask k1.";
  5199. break;
  5200. case "vpexpandd":
  5201. instructionInfo = "Expand (load) up to 16 contiguous doubleword integer values of the input " +
  5202. "vector in the source operand (the second operand) to sparse elements in the " +
  5203. "destination operand (the first operand), selected by the writemask k1. " +
  5204. "The destination operand is a ZMM register, the source operand can be a ZMM " +
  5205. "register or memory location.";
  5206. break;
  5207. case "vpexpandq":
  5208. instructionInfo = "Expand (load) up to 8 quadword integer values from the source operand (the " +
  5209. "second operand) to sparse elements in the destination operand (the first " +
  5210. "operand), selected by the writemask k1. The destination operand is a ZMM " +
  5211. "register, the source operand can be a ZMM register or memory location.";
  5212. break;
  5213. case "vpgatherdd":
  5214. case "vpgatherqd":
  5215. instructionInfo = "The instruction conditionally loads up to 4 or 8 dword values from memory " +
  5216. "addresses specified by the memory operand (the second operand) and using " +
  5217. "dword indices. The memory operand uses the VSIB form of the SIB byte to " +
  5218. "specify a general purpose register operand as the common base, a vector " +
  5219. "register for an array of indices relative to the base and a constant scale factor.";
  5220. break;
  5221. case "vpgatherdq":
  5222. instructionInfo = "A set of 16 or 8 doubleword/quadword memory locations pointed to by base " +
  5223. "address BASE_ADDR and index vector VINDEX with scale SCALE are gathered. " +
  5224. "The result is written into vector zmm1. The elements are specified via the " +
  5225. "VSIB (i.e., the index register is a zmm, holding packed indices). " +
  5226. "Elements will only be loaded if their corresponding mask bit is one. If an " +
  5227. "element\xe2\x80\x99s mask bit is not set, the corresponding element of the " +
  5228. "destination register (zmm1) is left unchanged. The entire mask register will " +
  5229. "be set to zero by this instruction unless it triggers an exception.";
  5230. break;
  5231. case "vpgatherqq":
  5232. instructionInfo = "A set of 8 doubleword/quadword memory locations pointed to by base address " +
  5233. "BASE_ADDR and index vector VINDEX with scale SCALE are gathered. The result " +
  5234. "is written into a vector register. The elements are specified via the VSIB " +
  5235. "(i.e., the index register is a vector register, holding packed indices). " +
  5236. "Elements will only be loaded if their corresponding mask bit is one. If an " +
  5237. "element\xe2\x80\x99s mask bit is not set, the corresponding element of the " +
  5238. "destination register is left unchanged. The entire mask register will be set " +
  5239. "to zero by this instruction unless it triggers an exception.";
  5240. break;
  5241. case "vplzcntd":
  5242. case "vplzcntq":
  5243. instructionInfo = "Counts the number of leading most significant zero bits in each dword or " +
  5244. "qword element of the source operand (the second operand) and stores the " +
  5245. "results in the destination register (the first operand) according to the " +
  5246. "writemask. If an element is zero, the result for that element is the operand " +
  5247. "size of the element.";
  5248. break;
  5249. case "vpmadd52huq":
  5250. instructionInfo = "Multiplies packed unsigned 52-bit integers in each qword element of the first " +
  5251. "source operand (the second operand) with the packed unsigned 52-bit integers " +
  5252. "in the corresponding elements of the second source operand (the third operand) " +
  5253. "to form packed 104-bit intermediate results. The high 52-bit, unsigned integer " +
  5254. "of each 104-bit product is added to the corresponding qword unsigned integer " +
  5255. "of the destination operand (the first operand) under the writemask k1.";
  5256. break;
  5257. case "vpmadd52luq":
  5258. instructionInfo = "Multiplies packed unsigned 52-bit integers in each qword element of the first " +
  5259. "source operand (the second operand) with the packed unsigned 52-bit integers " +
  5260. "in the corresponding elements of the second source operand (the third operand) " +
  5261. "to form packed 104-bit intermediate results. The low 52-bit, unsigned integer " +
  5262. "of each 104-bit product is added to the corresponding qword unsigned integer " +
  5263. "of the destination operand (the first operand) under the writemask k1.";
  5264. break;
  5265. case "vpmaskmov":
  5266. case "vpmaskmovd":
  5267. case "vpmaskmovq":
  5268. instructionInfo = "Conditionally moves packed data elements from the second source operand into " +
  5269. "the corresponding data element of the destination operand, depending on the " +
  5270. "mask bits associated with each data element. The mask bits are specified in " +
  5271. "the first source operand.";
  5272. break;
  5273. case "vpmovb2m":
  5274. case "vpmovw2m":
  5275. case "vpmovd2m":
  5276. case "vpmovq2m":
  5277. instructionInfo = "Converts a vector register to a mask register. Each element in the destination " +
  5278. "register is set to 1 or 0 depending on the value of most significant bit of " +
  5279. "the corresponding element in the source register.";
  5280. break;
  5281. case "vpmovdb":
  5282. case "vpmovsdb":
  5283. case "vpmovusdb":
  5284. instructionInfo = "VPMOVDB down converts 32-bit integer elements in the source operand (the " +
  5285. "second operand) into packed bytes using truncation. VPMOVSDB converts signed " +
  5286. "32-bit integers into packed signed bytes using signed saturation. VPMOVUSDB " +
  5287. "convert unsigned double-word values into unsigned byte values using unsigned " +
  5288. "saturation.";
  5289. break;
  5290. case "vpmovdw":
  5291. case "vpmovsdw":
  5292. case "vpmovusdw":
  5293. instructionInfo = "VPMOVDW down converts 32-bit integer elements in the source operand (the " +
  5294. "second operand) into packed words using truncation. VPMOVSDW converts signed " +
  5295. "32-bit integers into packed signed words using signed saturation. VPMOVUSDW " +
  5296. "convert unsigned double-word values into unsigned word values using unsigned " +
  5297. "saturation.";
  5298. break;
  5299. case "vpmovm2b":
  5300. case "vpmovm2w":
  5301. case "vpmovm2d":
  5302. case "vpmovm2q":
  5303. instructionInfo = "Converts a mask register to a vector register. Each element in the destination " +
  5304. "register is set to all 1\xe2\x80\x99s or all 0\xe2\x80\x99s depending on the " +
  5305. "value of the corresponding bit in the source mask register.";
  5306. break;
  5307. case "vpmovqb":
  5308. case "vpmovsqb":
  5309. case "vpmovusqb":
  5310. instructionInfo = "VPMOVQB down converts 64-bit integer elements in the source operand (the " +
  5311. "second operand) into packed byte elements using truncation. VPMOVSQB converts " +
  5312. "signed 64-bit integers into packed signed bytes using signed saturation. " +
  5313. "VPMOVUSQB convert unsigned quad-word values into unsigned byte values using " +
  5314. "unsigned saturation. The source operand is a vector register. The destination " +
  5315. "operand is an XMM register or a memory location.";
  5316. break;
  5317. case "vpmovqd":
  5318. case "vpmovsqd":
  5319. case "vpmovusqd":
  5320. instructionInfo = "VPMOVQW down converts 64-bit integer elements in the source operand (the " +
  5321. "second operand) into packed double-words using truncation. VPMOVSQW converts " +
  5322. "signed 64-bit integers into packed signed doublewords using signed saturation. " +
  5323. "VPMOVUSQW convert unsigned quad-word values into unsigned double-word values " +
  5324. "using unsigned saturation.";
  5325. break;
  5326. case "vpmovqw":
  5327. case "vpmovsqw":
  5328. case "vpmovusqw":
  5329. instructionInfo = "VPMOVQW down converts 64-bit integer elements in the source operand (the " +
  5330. "second operand) into packed words using truncation. VPMOVSQW converts signed " +
  5331. "64-bit integers into packed signed words using signed saturation. VPMOVUSQW " +
  5332. "convert unsigned quad-word values into unsigned word values using unsigned " +
  5333. "saturation.";
  5334. break;
  5335. case "vpmovwb":
  5336. case "vpmovswb":
  5337. case "vpmovuswb":
  5338. instructionInfo = "VPMOVWB down converts 16-bit integers into packed bytes using truncation. " +
  5339. "VPMOVSWB converts signed 16-bit integers into packed signed bytes using signed " +
  5340. "saturation. VPMOVUSWB convert unsigned word values into unsigned byte values " +
  5341. "using unsigned saturation.";
  5342. break;
  5343. case "vpmultishiftqb":
  5344. instructionInfo = "This instruction selects eight unaligned bytes from each input qword element " +
  5345. "of the second source operand (the third operand) and writes eight assembled " +
  5346. "bytes for each qword element in the destination operand (the first operand). " +
  5347. "Each byte result is selected using a byte-granular shift control within the " +
  5348. "corresponding qword element of the first source operand (the second operand). " +
  5349. "Each byte result in the destination operand is updated under the writemask k1.";
  5350. break;
  5351. case "vprold":
  5352. case "vprolvd":
  5353. case "vprolq":
  5354. case "vprolvq":
  5355. instructionInfo = "Rotates the bits in the individual data elements (doublewords, or quadword) " +
  5356. "in the first source operand to the left by the number of bits specified in " +
  5357. "the count operand. If the value specified by the count operand is greater " +
  5358. "than 31 (for doublewords), or 63 (for a quadword), then the count operand " +
  5359. "modulo the data size (32 or 64) is used.";
  5360. break;
  5361. case "vprord":
  5362. case "vprorvd":
  5363. case "vprorq":
  5364. case "vprorvq":
  5365. instructionInfo = "Rotates the bits in the individual data elements (doublewords, or quadword) " +
  5366. "in the first source operand to the right by the number of bits specified in " +
  5367. "the count operand. If the value specified by the count operand is greater than " +
  5368. "31 (for doublewords), or 63 (for a quadword), then the count operand modulo " +
  5369. "the data size (32 or 64) is used.";
  5370. break;
  5371. case "vpscatterdd":
  5372. case "vpscatterdq":
  5373. case "vpscatterqd":
  5374. case "vpscatterqq":
  5375. instructionInfo = "Stores up to 16 elements (8 elements for qword indices) in doubleword vector " +
  5376. "or 8 elements in quadword vector to the memory locations pointed by base address " +
  5377. "BASE_ADDR and index vector VINDEX, with scale SCALE. The elements are specified " +
  5378. "via the VSIB (i.e., the index register is a vector register, holding packed " +
  5379. "indices). Elements will only be stored if their corresponding mask bit is one. " +
  5380. "The entire mask register will be set to zero by this instruction unless it triggers an exception.";
  5381. break;
  5382. case "vpsllvw":
  5383. case "vpsllvd":
  5384. case "vpsllvq":
  5385. instructionInfo = "Shifts the bits in the individual data elements (words, doublewords or quadword) " +
  5386. "in the first source operand to the left by the count value of respective data " +
  5387. "elements in the second source operand. As the bits in the data elements are " +
  5388. "shifted left, the empty low-order bits are cleared (set to 0).";
  5389. break;
  5390. case "vpsravw":
  5391. case "vpsravd":
  5392. case "vpsravq":
  5393. instructionInfo = "Shifts the bits in the individual data elements (word/doublewords/quadword) " +
  5394. "in the first source operand (the second operand) to the right by the number " +
  5395. "of bits specified in the count value of respective data elements in the second " +
  5396. "source operand (the third operand). As the bits in the data elements are " +
  5397. "shifted right, the empty high-order bits are set to the MSB (sign extension).";
  5398. break;
  5399. case "vpsrlvw":
  5400. case "vpsrlvd":
  5401. case "vpsrlvq":
  5402. instructionInfo = "Shifts the bits in the individual data elements (words, doublewords or " +
  5403. "quadword) in the first source operand to the right by the count value of " +
  5404. "respective data elements in the second source operand. As the bits in the " +
  5405. "data elements are shifted right, the empty high-order bits are cleared (set to 0).";
  5406. break;
  5407. case "vpternlogd":
  5408. case "vpternlogq":
  5409. instructionInfo = "VPTERNLOGD/Q takes three bit vectors of 512-bit length (in the first, second " +
  5410. "and third operand) as input data to form a set of 512 indices, each index is " +
  5411. "comprised of one bit from each input vector. The imm8 byte specifies a boolean " +
  5412. "logic table producing a binary value for each 3-bit index value. The final " +
  5413. "512-bit boolean result is written to the destination operand (the first operand) " +
  5414. "using the writemask k1 with the granularity of doubleword element or quadword " +
  5415. "element into the destination.";
  5416. break;
  5417. case "vptestmb":
  5418. case "vptestmw":
  5419. case "vptestmd":
  5420. case "vptestmq":
  5421. instructionInfo = "Performs a bitwise logical AND operation on the first source operand (the " +
  5422. "second operand) and second source operand (the third operand) and stores the " +
  5423. "result in the destination operand (the first operand) under the writemask. " +
  5424. "Each bit of the result is set to 1 if the bitwise AND of the corresponding " +
  5425. "elements of the first and second src operands is non-zero; otherwise it is " +
  5426. "set to 0.";
  5427. break;
  5428. case "vptestnmb":
  5429. case "vptestnmw":
  5430. case "vptestnmd":
  5431. case "vptestnmq":
  5432. instructionInfo = "Performs a bitwise logical NAND operation on the byte/word/doubleword/quadword " +
  5433. "element of the first source operand (the second operand) with the corresponding " +
  5434. "element of the second source operand (the third operand) and stores the " +
  5435. "logical comparison result into each bit of the destination operand (the first " +
  5436. "operand) according to the writemask k1. Each bit of the result is set to 1 if " +
  5437. "the bitwise AND of the corresponding elements of the first and second src " +
  5438. "operands is zero; otherwise it is set to 0.";
  5439. break;
  5440. case "vrangepd":
  5441. instructionInfo = "This instruction calculates 2/4/8 range operation outputs from two sets of " +
  5442. "packed input double-precision FP values in the first source operand (the second " +
  5443. "operand) and the second source operand (the third operand). The range outputs " +
  5444. "are written to the destination operand (the first operand) under the writemask " +
  5445. "k1.";
  5446. break;
  5447. case "vrangeps":
  5448. instructionInfo = "This instruction calculates 4/8/16 range operation outputs from two sets of " +
  5449. "packed input single-precision FP values in the first source operand (the second " +
  5450. "operand) and the second source operand (the third operand). The range outputs " +
  5451. "are written to the destination operand (the first operand) under the writemask k1.";
  5452. break;
  5453. case "vrangesd":
  5454. instructionInfo = "This instruction calculates a range operation output from two input " +
  5455. "double-precision FP values in the low qword element of the first source " +
  5456. "operand (the second operand) and second source operand (the third operand). " +
  5457. "The range output is written to the low qword element of the destination operand " +
  5458. "(the first operand) under the writemask k1.";
  5459. break;
  5460. case "vrangess":
  5461. instructionInfo = "This instruction calculates a range operation output from two input " +
  5462. "single-precision FP values in the low dword element of the first source operand " +
  5463. "(the second operand) and second source operand (the third operand). The range " +
  5464. "output is written to the low dword element of the destination operand (the " +
  5465. "first operand) under the writemask k1.";
  5466. break;
  5467. case "vrcp14pd":
  5468. instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
  5469. "of eight/four/two packed double-precision floating-point values in the source " +
  5470. "operand (the second operand) and stores the packed double-precision " +
  5471. "floating-point results in the destination operand. The maximum relative error " +
  5472. "for this approximation is less than 2^-14.";
  5473. break;
  5474. case "vrcp14ps":
  5475. instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
  5476. "of the packed single-precision floating-point values in the source operand " +
  5477. "(the second operand) and stores the packed single-precision floating-point " +
  5478. "results in the destination operand (the first operand). The maximum relative " +
  5479. "error for this approximation is less than 2^-14.";
  5480. break;
  5481. case "vrcp14sd":
  5482. instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocal " +
  5483. "of the low double-precision floating-point value in the second source operand " +
  5484. "(the third operand) stores the result in the low quadword element of the " +
  5485. "destination operand (the first operand) according to the writemask k1. Bits " +
  5486. "(127:64) of the XMM register destination are copied from corresponding bits " +
  5487. "in the first source operand (the second operand). The maximum relative error " +
  5488. "for this approximation is less than 2^-14. The source operand can " +
  5489. "be an XMM register or a 64-bit memory location. The destination operand is an " +
  5490. "XMM register.";
  5491. break;
  5492. case "vrcp14ss":
  5493. instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocal " +
  5494. "of the low single-precision floating-point value in the second source operand " +
  5495. "(the third operand) and stores the result in the low quadword element of the " +
  5496. "destination operand (the first operand) according to the writemask k1. Bits " +
  5497. "(127:32) of the XMM register destination are copied from corresponding bits " +
  5498. "in the first source operand (the second operand). The maximum relative error " +
  5499. "for this approximation is less than 2<sup>-14</sup>. The source operand can " +
  5500. "be an XMM register or a 32-bit memory location. The destination operand is an " +
  5501. "XMM register.";
  5502. break;
  5503. case "vreducepd":
  5504. instructionInfo = "Perform reduction transformation of the packed binary encoded double-precision " +
  5505. "FP values in the source operand (the second operand) and store the reduced " +
  5506. "results in binary FP format to the destination operand (the first operand) " +
  5507. "under the writemask k1.";
  5508. break;
  5509. case "vreduceps":
  5510. instructionInfo = "Perform reduction transformation of the packed binary encoded single-precision " +
  5511. "FP values in the source operand (the second operand) and store the reduced " +
  5512. "results in binary FP format to the destination operand (the first operand) " +
  5513. "under the writemask k1.";
  5514. break;
  5515. case "vreducesd":
  5516. instructionInfo = "Perform a reduction transformation of the binary encoded double-precision FP " +
  5517. "value in the low qword element of the second source operand (the third operand) " +
  5518. "and store the reduced result in binary FP format to the low qword element of " +
  5519. "the destination operand (the first operand) under the writemask k1. Bits 127:64 " +
  5520. "of the destination operand are copied from respective qword elements of the " +
  5521. "first source operand (the second operand).";
  5522. break;
  5523. case "vreducess":
  5524. instructionInfo = "Perform a reduction transformation of the binary encoded single-precision FP " +
  5525. "value in the low dword element of the second source operand (the third operand) " +
  5526. "and store the reduced result in binary FP format to the low dword element of " +
  5527. "the destination operand (the first operand) under the writemask k1. Bits 127:32 " +
  5528. "of the destination operand are copied from respective dword elements of the " +
  5529. "first source operand (the second operand).";
  5530. break;
  5531. case "vrndscalepd":
  5532. instructionInfo = "Round the double-precision floating-point values in the source operand by the " +
  5533. "rounding mode specified in the immediate operand and places the result in the " +
  5534. "destination operand.";
  5535. break;
  5536. case "vrndscaleps":
  5537. instructionInfo = "Round the single-precision floating-point values in the source operand by the " +
  5538. "rounding mode specified in the immediate operand and places the result in " +
  5539. "the destination operand.";
  5540. break;
  5541. case "vrndscalesd":
  5542. instructionInfo = "Rounds a double-precision floating-point value in the low quadword element of " +
  5543. "the second source operand (the third operand) by the rounding mode specified " +
  5544. "in the immediate operand and places the result in the corresponding element of " +
  5545. "the destination operand (the first operand) according to the writemask. " +
  5546. "The quadword element at bits 127:64 of the destination is copied from the " +
  5547. "first source operand (the second operand).";
  5548. break;
  5549. case "vrndscaless":
  5550. instructionInfo = "Rounds the single-precision floating-point value in the low doubleword element " +
  5551. "of the second source operand (the third operand) by the rounding mode specified " +
  5552. "in the immediate operand and places the result in the corresponding element of " +
  5553. "the destination operand (the first operand) according to the writemask. " +
  5554. "The double-word elements at bits 127:32 of the destination are copied from " +
  5555. "the first source operand (the second operand).";
  5556. break;
  5557. case "vrsqrt14pd":
  5558. instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
  5559. "of the square roots of the eight packed double-precision floating-point values " +
  5560. "in the source operand (the second operand) and stores the packed double-precision " +
  5561. "floating-point results in the destination operand (the first operand) " +
  5562. "according to the writemask. The maximum relative error for this approximation " +
  5563. "is less than 2^-14.";
  5564. break;
  5565. case "vrsqrt14ps":
  5566. instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
  5567. "of the square roots of 16 packed single-precision floating-point values in " +
  5568. "the source operand (the second operand) and stores the packed single-precision " +
  5569. "floating-point results in the destination operand (the first operand) according " +
  5570. "to the writemask. The maximum relative error for this approximation is less " +
  5571. "than 2-14.";
  5572. break;
  5573. case "vrsqrt14sd":
  5574. instructionInfo = "Computes the approximate reciprocal of the square roots of the scalar " +
  5575. "double-precision floating-point value in the low quadword element of the " +
  5576. "source operand (the second operand) and stores the result in the low quadword " +
  5577. "element of the destination operand (the first operand) according to the writemask. " +
  5578. "The maximum relative error for this approximation is less than 2^-14. " +
  5579. "The source operand can be an XMM register or a 32-bit memory location. " +
  5580. "The destination operand is an XMM register.";
  5581. break;
  5582. case "vrsqrt14ss":
  5583. instructionInfo = "Computes of the approximate reciprocal of the square root of the scalar " +
  5584. "single-precision floating-point value in the low doubleword element of the " +
  5585. "source operand (the second operand) and stores the result in the low doubleword " +
  5586. "element of the destination operand (the first operand) according to the writemask. " +
  5587. "The maximum relative error for this approximation is less than 2^-14. " +
  5588. "The source operand can be an XMM register or a 32-bit memory location. " +
  5589. "The destination operand is an XMM register.";
  5590. break;
  5591. case "vscalefpd":
  5592. instructionInfo = "Performs a floating-point scale of the packed double-precision floating-point " +
  5593. "values in the first source operand by multiplying it by 2 power of the " +
  5594. "double-precision floating-point values in second source operand.";
  5595. break;
  5596. case "vscalefps":
  5597. instructionInfo = "Performs a floating-point scale of the packed single-precision floating-point " +
  5598. "values in the first source operand by multiplying it by 2 power of the float32 " +
  5599. "values in second source operand.";
  5600. break;
  5601. case "vscalefsd":
  5602. instructionInfo = "Performs a floating-point scale of the packed double-precision floating-point " +
  5603. "value in the first source operand by multiplying it by 2 power of the " +
  5604. "double-precision floating-point value in second source operand.";
  5605. break;
  5606. case "vscalefss":
  5607. instructionInfo = "Performs a floating-point scale of the scalar single-precision floating-point " +
  5608. "value in the first source operand by multiplying it by 2 power of the " +
  5609. "float32 value in second source operand.";
  5610. break;
  5611. case "vscatterdps":
  5612. case "vscatterdpd":
  5613. case "vscatterqps":
  5614. case "vscatterqpd":
  5615. instructionInfo = "Stores up to 16 elements (or 8 elements) in doubleword/quadword vector zmm1 " +
  5616. "to the memory locations pointed by base address BASE_ADDR and index vector " +
  5617. "VINDEX, with scale SCALE. The elements are specified via the VSIB (i.e., the " +
  5618. "index register is a vector register, holding packed indices). Elements will " +
  5619. "only be stored if their corresponding mask bit is one. The entire mask register " +
  5620. "will be set to zero by this instruction unless it triggers an exception.";
  5621. break;
  5622. case "vshuff32x4":
  5623. case "vshuff64x2":
  5624. case "vshufi32x4":
  5625. case "vshufi64x2":
  5626. instructionInfo = "256-bit Version: Moves one of the two 128-bit packed single-precision " +
  5627. "floating-point values from the first source operand (second operand) into the " +
  5628. "low 128-bit of the destination operand (first operand); moves one of the two " +
  5629. "packed 128-bit floating-point values from the second source operand (third " +
  5630. "operand) into the high 128-bit of the destination operand. The selector operand " +
  5631. "(third operand) determines which values are moved to the destination operand.";
  5632. break;
  5633. case "vtestpd":
  5634. case "vtestps":
  5635. instructionInfo = "VTESTPS performs a bitwise comparison of all the sign bits of the packed " +
  5636. "single-precision elements in the first source operation and corresponding " +
  5637. "sign bits in the second source operand. If the AND of the source sign bits " +
  5638. "with the dest sign bits produces all zeros, the ZF is set else the ZF is clear. " +
  5639. "If the AND of the source sign bits with the inverted dest sign bits produces " +
  5640. "all zeros the CF is set else the CF is clear. An attempt to execute VTESTPS " +
  5641. "with VEX.W=1 will cause #UD.";
  5642. break;
  5643. case "vzeroall":
  5644. instructionInfo = "The instruction zeros contents of all XMM or YMM registers.";
  5645. break;
  5646. case "vzeroupper":
  5647. instructionInfo = "The instruction zeros the bits in position 128 and higher of all YMM registers. " +
  5648. "The lower 128-bits of the registers (the corresponding XMM registers) are unmodified.";
  5649. break;
  5650. case "wbinvd":
  5651. instructionInfo = "Writes back all modified cache lines in the processors internal " +
  5652. "cache to main memory and invalidates (flushes) the internal caches. " +
  5653. "The instruction then issues a special-function bus cycle that directs external " +
  5654. "caches to also write back modified data and another bus cycle to indicate that " +
  5655. "the external caches should be invalidated.";
  5656. break;
  5657. case "wrfsbase":
  5658. case "wrgsbase":
  5659. instructionInfo = "Loads the FS or GS segment base address with the general-purpose register " +
  5660. "indicated by the modR/M:r/m field.";
  5661. break;
  5662. case "wrmsr":
  5663. instructionInfo = "Writes the contents of registers EDX:EAX into the 64-bit model specific " +
  5664. "register (MSR) specified in the ECX register. (On processors that support the " +
  5665. "Intel 64 architecture, the high-order 32 bits of RCX are ignored.) " +
  5666. "The contents of the EDX register are copied to high-order 32 bits of the " +
  5667. "selected MSR and the contents of the EAX register are copied to low-order 32 " +
  5668. "bits of the MSR. (On processors that support the Intel 64 architecture, the " +
  5669. "high-order 32 bits of each of RAX and RDX are ignored.) Undefined or reserved " +
  5670. "bits in an MSR should be set to values previously read.";
  5671. break;
  5672. case "wrpkru":
  5673. instructionInfo = "Writes the value of EAX into PKRU. ECX and EDX must be 0 when WRPKRU is executed; " +
  5674. "otherwise, a general-protection exception (#GP) occurs.";
  5675. break;
  5676. case "xabort":
  5677. instructionInfo = "XABORT forces an RTM abort. Following an RTM abort, the logical processor " +
  5678. "resumes execution at the fallback address computed through the outermost " +
  5679. "XBEGIN instruction. The EAX register is updated to reflect an XABORT instruction " +
  5680. "caused the abort, and the imm8 argument will be provided in bits 31:24 of EAX.";
  5681. break;
  5682. case "xacquire":
  5683. case "xrelease":
  5684. instructionInfo = "The XACQUIRE prefix is a hint to start lock elision on the memory address " +
  5685. "specified by the instruction and the XRELEASE prefix is a hint to end lock " +
  5686. "elision on the memory address specified by the instruction.";
  5687. break;
  5688. case "xadd":
  5689. instructionInfo = "Exchanges the first operand (destination operand) with the second operand " +
  5690. "(source operand), then loads the sum of the two values into the destination " +
  5691. "operand. The destination operand can be a register or a memory location; the source operand is a register.";
  5692. break;
  5693. case "xbegin":
  5694. instructionInfo = "The XBEGIN instruction specifies the start of an RTM code region. If the " +
  5695. "logical processor was not already in transactional execution, then the XBEGIN " +
  5696. "instruction causes the logical processor to transition into transactional " +
  5697. "execution. The XBEGIN instruction that transitions the logical processor into " +
  5698. "transactional execution is referred to as the outermost XBEGIN instruction. " +
  5699. "The instruction also specifies a relative offset to compute the address of the " +
  5700. "fallback code path following a transactional abort.";
  5701. break;
  5702. case "xchg":
  5703. instructionInfo = "Exchanges the contents of the destination (first) and source (second) operands. " +
  5704. "The operands can be two general-purpose registers or a register and a memory " +
  5705. "location. If a memory operand is referenced, the processors locking " +
  5706. "protocol is automatically implemented for the duration of the exchange operation, " +
  5707. "regardless of the presence or absence of the LOCK prefix or of the value of the IOPL.";
  5708. break;
  5709. case "xend":
  5710. instructionInfo = "The instruction marks the end of an RTM code region. If this corresponds to " +
  5711. "the outermost scope (that is, including this XEND instruction, the number of " +
  5712. "XBEGIN instructions is the same as number of XEND instructions), the logical " +
  5713. "processor will attempt to commit the logical processor state atomically. " +
  5714. "If the commit fails, the logical processor will rollback all architectural " +
  5715. "register and memory updates performed during the RTM execution. The logical " +
  5716. "processor will resume execution at the fallback address computed from the " +
  5717. "outermost XBEGIN instruction. The EAX register is updated to reflect RTM abort " +
  5718. "information.";
  5719. break;
  5720. case "xgetbv":
  5721. instructionInfo = "Reads the contents of the extended control register (XCR) specified in the " +
  5722. "ECX register into registers EDX:EAX. (On processors that support the Intel 64 " +
  5723. "architecture, the high-order 32 bits of RCX are ignored.) The EDX register is " +
  5724. "loaded with the high-order 32 bits of the XCR and the EAX register is loaded " +
  5725. "with the low-order 32 bits. (On processors that support the Intel 64 architecture, " +
  5726. "the high-order 32 bits of each of RAX and RDX are cleared.) If fewer than 64 bits " +
  5727. "are implemented in the XCR being read, the values returned to EDX:EAX in " +
  5728. "unimplemented bit locations are undefined.";
  5729. break;
  5730. case "xlat":
  5731. case "xlatb":
  5732. instructionInfo = "Locates a byte entry in a table in memory, using the contents of the AL " +
  5733. "register as a table index, then copies the contents of the table entry back " +
  5734. "into the AL register. The index in the AL register is treated as an unsigned integer. " +
  5735. "The XLAT and XLATB instructions get the base address of the table in memory " +
  5736. "from either the DS:EBX or the DS:BX registers (depending on the address-size " +
  5737. "attribute of the instruction, 32 or 16, respectively). (The DS segment may be " +
  5738. "overridden with a segment override prefix.)";
  5739. break;
  5740. case "xor":
  5741. instructionInfo = "Performs a bitwise exclusive OR (XOR) operation on the destination (first) " +
  5742. "and source (second) operands and stores the result in the destination operand " +
  5743. "location. The source operand can be an immediate, a register, or a memory " +
  5744. "location; the destination operand can be a register or a memory location. " +
  5745. "(However, two memory operands cannot be used in one instruction.) Each bit of " +
  5746. "the result is 1 if the corresponding bits of the operands are different; each " +
  5747. "bit is 0 if the corresponding bits are the same.";
  5748. break;
  5749. case "xorpd":
  5750. case "vxorpd":
  5751. instructionInfo = "Performs a bitwise logical XOR of the two, four or eight packed double-precision " +
  5752. "floating-point values from the first source operand and the second source " +
  5753. "operand, and stores the result in the destination operand";
  5754. break;
  5755. case "xorps":
  5756. case "vxorps":
  5757. instructionInfo = "Performs a bitwise logical XOR of the four, eight or sixteen packed " +
  5758. "single-precision floating-point values from the first source operand and the " +
  5759. "second source operand, and stores the result in the destination operand";
  5760. break;
  5761. case "xrstor":
  5762. case "xrstor64":
  5763. instructionInfo = "Performs a full or partial restore of processor state components from the " +
  5764. "XSAVE area located at the memory address specified by the source operand. " +
  5765. "The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
  5766. "The specific state components restored correspond to the bits set in the " +
  5767. "requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
  5768. break;
  5769. case "xrstors":
  5770. case "xrstors64":
  5771. instructionInfo = "Performs a full or partial restore of processor state components from the " +
  5772. "XSAVE area located at the memory address specified by the source operand. " +
  5773. "The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
  5774. "The specific state components restored correspond to the bits set in the " +
  5775. "requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and the " +
  5776. "logical-OR of XCR0 with the IA32_XSS MSR. XRSTORS may be executed only if CPL = 0.";
  5777. break;
  5778. case "xsave":
  5779. case "xsave64":
  5780. instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
  5781. "area located at the memory address specified by the destination operand. " +
  5782. "The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
  5783. "The specific state components saved correspond to the bits set in the " +
  5784. "requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
  5785. break;
  5786. case "xsavec":
  5787. case "xsavec64":
  5788. instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
  5789. "area located at the memory address specified by the destination operand. " +
  5790. "The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
  5791. "The specific state components saved correspond to the bits set in the " +
  5792. "requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
  5793. break;
  5794. case "xsaveopt":
  5795. case "xsaveopt64":
  5796. instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
  5797. "area located at the memory address specified by the destination operand. " +
  5798. "The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
  5799. "The specific state components saved correspond to the bits set in the " +
  5800. "requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
  5801. break;
  5802. case "xsaves":
  5803. case "xsaves64":
  5804. instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
  5805. "area located at the memory address specified by the destination operand. " +
  5806. "The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
  5807. "The specific state components saved correspond to the bits set in the " +
  5808. "requested-feature bitmap (RFBM), the logicalAND of EDX:EAX and the logical-OR " +
  5809. "of XCR0 with the IA32_XSS MSR. XSAVES may be executed only if CPL = 0.";
  5810. break;
  5811. case "xsetbv":
  5812. instructionInfo = "Writes the contents of registers EDX:EAX into the 64-bit extended control " +
  5813. "register (XCR) specified in the ECX register. (On processors that support " +
  5814. "the Intel 64 architecture, the high-order 32 bits of RCX are ignored.) " +
  5815. "The contents of the EDX register are copied to high-order 32 bits of the " +
  5816. "selected XCR and the contents of the EAX register are copied to low-order " +
  5817. "32 bits of the XCR. (On processors that support the Intel 64 architecture, " +
  5818. "the high-order 32 bits of each of RAX and RDX are ignored.) Undefined or " +
  5819. "reserved bits in an XCR should be set to values previously read.";
  5820. break;
  5821. case "xtest":
  5822. instructionInfo = "The XTEST instruction queries the transactional execution status. If the " +
  5823. "instruction executes inside a transactionally executing RTM region or a " +
  5824. "transactionally executing HLE region, then the ZF flag is cleared, else it is set.";
  5825. break;
  5826. case "invept":
  5827. instructionInfo = "Invalidates mappings in the translation lookaside buffers (TLBs) and paging-structure " +
  5828. "caches that were derived from extended page tables (EPT). Invalidation is based on the " +
  5829. "INVEPT type specified in the register operand and the INVEPT descriptor specified in the memory operand.";
  5830. break;
  5831. case "invvpid":
  5832. instructionInfo = "Invalidates mappings in the translation lookaside buffers (TLBs) and " +
  5833. "paging-structure caches based on virtualprocessor identifier (VPID). " +
  5834. "Invalidation is based on the INVVPID type specified in the register " +
  5835. "operand and the INVVPID descriptor specified in the memory operand.";
  5836. break;
  5837. case "vmcall":
  5838. instructionInfo = "This instruction allows guest software can make a call for service into an " +
  5839. "underlying VM monitor. The details of the programming interface for such calls " +
  5840. "are VMM-specific; this instruction does nothing more than cause a VM exit, " +
  5841. "registering the appropriate exit reason.";
  5842. break;
  5843. case "vmclear":
  5844. instructionInfo = "This instruction applies to the VMCS whose VMCS region resides at the physical " +
  5845. "address contained in the instruction operand. The instruction ensures that " +
  5846. "VMCS data for that VMCS (some of these data may be currently maintained on " +
  5847. "the processor) are copied to the VMCS region in memory. It also initializes " +
  5848. "parts of the VMCS region (for example, it sets the launch state of that VMCS to clear).";
  5849. break;
  5850. case "vmfunc":
  5851. instructionInfo = "This instruction allows software in VMX non-root operation to invoke a VM " +
  5852. "function, which is processor functionality enabled and configured by software " +
  5853. "in VMX root operation. The value of EAX selects the specific VM function being " +
  5854. "invoked.";
  5855. break;
  5856. case "vmlaunch":
  5857. instructionInfo = "Effects a VM entry managed by the current VMCS. VMLAUNCH fails if the launch " +
  5858. "state of current VMCS is not \"clear\". If the instruction is successful, it " +
  5859. "sets the launch state to \"launched.\"";
  5860. break;
  5861. case "vmresume":
  5862. instructionInfo = "Effects a VM entry managed by the current VMCS. VMRESUME fails if the launch " +
  5863. "state of the current VMCS is not \"launched.\"";
  5864. break;
  5865. case "vmptrld":
  5866. instructionInfo = "Marks the current-VMCS pointer valid and loads it with the physical address " +
  5867. "in the instruction operand. The instruction fails if its operand is not properly " +
  5868. "aligned, sets unsupported physical-address bits, or is equal to the VMXON " +
  5869. "pointer. In addition, the instruction fails if the 32 bits in memory referenced " +
  5870. "by the operand do not match the VMCS revision identifier supported by this processor.";
  5871. break;
  5872. case "vmptrst":
  5873. instructionInfo = "Stores the current-VMCS pointer into a specified memory address. The operand " +
  5874. "of this instruction is always 64 bits and is always in memory.";
  5875. break;
  5876. case "vmread":
  5877. instructionInfo = "Reads a specified field from a VMCS and stores it into a specified destination " +
  5878. "operand (register or memory). In VMX root operation, the instruction reads " +
  5879. "from the current VMCS. If executed in VMX non-root operation, the instruction " +
  5880. "reads from the VMCS referenced by the VMCS link pointer field in the current VMCS.";
  5881. break;
  5882. case "vmwrite":
  5883. instructionInfo = "Writes the contents of a primary source operand (register or memory) to a " +
  5884. "specified field in a VMCS. In VMX root operation, the instruction writes to " +
  5885. "the current VMCS. If executed in VMX non-root operation, the instruction writes " +
  5886. "to the VMCS referenced by the VMCS link pointer field in the current VMCS.";
  5887. break;
  5888. case "vmxoff":
  5889. instructionInfo = "Takes the logical processor out of VMX operation, unblocks INIT signals, " +
  5890. "conditionally re-enables A20M, and clears any address-range monitoring.";
  5891. break;
  5892. case "vmxon":
  5893. instructionInfo = "Puts the logical processor in VMX operation with no current VMCS, blocks INIT " +
  5894. "signals, disables A20M, and clears any address-range monitoring established by " +
  5895. "the MONITOR instruction.";
  5896. break;
  5897. case "prefetchwt1":
  5898. instructionInfo = "Fetches the line of data from memory that contains the byte specified with the " +
  5899. "source operand to a location in the cache hierarchy specified by an intent to " +
  5900. "write hint (so that data is brought into ‘Exclusive’ state via a request for " +
  5901. "ownership) and a locality hint: T1 (temporal data with respect to first level " +
  5902. "cache)—prefetch data into the second level cache.";
  5903. break;
  5904. case "ud2":
  5905. instructionInfo = "Generates an invalid opcode exception. This instruction is provided for software " +
  5906. "testing to explicitly generate an invalid opcode. The opcode for this instruction " +
  5907. "is reserved for this purpose.";
  5908. break;
  5909. case "rex64":
  5910. instructionInfo = "Specify that the instruction is 64 bit.";
  5911. break;
  5912. case "extrq":
  5913. instructionInfo = "Extract field from register.";
  5914. break;
  5915. case "insertq":
  5916. instructionInfo = "Insert field.";
  5917. break;
  5918. case "movntsd":
  5919. instructionInfo = "Move non-temporal scalar double-precision floating point.";
  5920. break;
  5921. case "movntss":
  5922. case "vmovntss":
  5923. instructionInfo = "Move non-temporal scalar single-presicion floating point.";
  5924. break;
  5925. case "femms":
  5926. instructionInfo = "Faster enter/exit of the mmx or floating-point state.";
  5927. break;
  5928. case "paddsiw":
  5929. instructionInfo = "This instruction adds the signed words of the source operand to the signed " +
  5930. "words of the destination operand and writes the results to the implied MMX register. " +
  5931. "The purpose of this instruction is the same as the PADDSW instruction, except " +
  5932. "that it preserves both source operands.";
  5933. break;
  5934. case "paveb":
  5935. instructionInfo = " The PAVEB insruction calculates the average of the unsigned bytes of the " +
  5936. "source operand and the unsigned bytes of the destination operand and writes " +
  5937. "the result to the MMX register.";
  5938. break;
  5939. case "pavgusb":
  5940. instructionInfo = "Average of unsigned packed 8-bit values.";
  5941. break;
  5942. case "pdistib":
  5943. instructionInfo = "The PDISTIB instruction calculates the distance between the unsigned bytes " +
  5944. "of two source operands, adds the result to the unsigned byte in the implied " +
  5945. "destination operand, and saturates the result. The result is written to the " +
  5946. "implied MMX register. The DEST must be an MMX register. The SRC must be a " +
  5947. "64-bit memory operand. The accumulator and destination is an MMX register which " +
  5948. "depends on the DEST.";
  5949. break;
  5950. case "pf2id":
  5951. instructionInfo = "Converts packed floating-point operand to packed 32-bit integer.";
  5952. break;
  5953. case "pfacc":
  5954. instructionInfo = "Floating-point accumulate";
  5955. break;
  5956. case "pfadd":
  5957. instructionInfo = "Packed, floating-point addition";
  5958. break;
  5959. case "pfcmpeq":
  5960. instructionInfo = "Packed floating-point comparison, equal to";
  5961. break;
  5962. case "pfcmpge":
  5963. instructionInfo = "Packed floating-point comparison, greater than or equal to";
  5964. break;
  5965. case "pfcmpgt":
  5966. instructionInfo = "Packed floating-point comparison, greater than";
  5967. break;
  5968. case "pfmax":
  5969. instructionInfo = "Packed floating-point maximum";
  5970. break;
  5971. case "pfmin":
  5972. instructionInfo = "Packed floating-point minimum";
  5973. break;
  5974. case "pfmul":
  5975. instructionInfo = "Packed floating-point multiplication";
  5976. break;
  5977. case "pfrcp":
  5978. instructionInfo = "Floating-point reciprocal approximation";
  5979. break;
  5980. case "pfrcpit1":
  5981. instructionInfo = "Packed floating-point reciprocal, first iteration step";
  5982. break;
  5983. case "pfrcpit2":
  5984. instructionInfo = "Packed floating-point reciprocal/reciprocal square root, second iteration step";
  5985. break;
  5986. case "pfrsqit1":
  5987. instructionInfo = "Packed floating-point reciprocal square root, first iteration step";
  5988. break;
  5989. case "pfrsqrt":
  5990. instructionInfo = "Floating-point reciprocal square root approximation";
  5991. break;
  5992. case "pfsub":
  5993. instructionInfo = "Packed floating-point subtraction";
  5994. break;
  5995. case "pfsubr":
  5996. instructionInfo = "Packed floating-point reverse subtraction";
  5997. break;
  5998. case "pi2fd":
  5999. instructionInfo = "Packed 32-bit integer to floating-point conversion";
  6000. break;
  6001. case "pmulhrw":
  6002. instructionInfo = "Multiply signed packed 16-bit values with rounding and store the high 16 bits";
  6003. break;
  6004. case "prefetch":
  6005. instructionInfo = "Prefetch processor cache line into L1 data cache";
  6006. break;
  6007. case "pmachriw":
  6008. instructionInfo = "Multiplies the two source operands using the method described for PMULHRW, " +
  6009. "and then accumulates the result with the value in the implied destination " +
  6010. "register using wrap-around arithmetic. The final result is placed in the implied " +
  6011. "DEST register. The DEST must be an MMX register. The SRC must be a 64-bit memory " +
  6012. "operand. The destination operand is an implied MMX register that depends on the DEST.";
  6013. break;
  6014. case "pmagw":
  6015. instructionInfo = "Compares the absolute value of the packed words in first and second register, " +
  6016. "and stores the largest word in the first register.";
  6017. break;
  6018. case "pmulhriw":
  6019. instructionInfo = "Multiply the packed words in the two registers.";
  6020. break;
  6021. case "pmvzb":
  6022. instructionInfo = "Packed conditional move each byte from soruce register to destination register, " +
  6023. "when the corresponding byte in the MMX register is zero.";
  6024. break;
  6025. case "pmvgezb":
  6026. instructionInfo = "Packed conditional move each byte from source register to destination reqister, " +
  6027. "when the corresponding byte in the MMX register is greather than or equal to zero.";
  6028. break;
  6029. case "pmvlzb":
  6030. instructionInfo = "Packed conditional move each byte from source register to destination reqister, " +
  6031. "when the corresponding byte in the MMX register is less than zero.";
  6032. break;
  6033. case "pmvnzb":
  6034. instructionInfo = "Packed conditional move each byte from source register to destination reqister," +
  6035. " when the corresponding byte in the MMX register is not zero.";
  6036. break;
  6037. case "pmovsxbd":
  6038. instructionInfo = "Sign extend the lower 8-bit integer of each packed dword element into packed signed dword integers.";
  6039. break;
  6040. case "pmovsxbq":
  6041. instructionInfo = "Sign extend the lower 8-bit integer of each packed qword element into packed signed qword integers.";
  6042. break;
  6043. case "pmovsxbw":
  6044. instructionInfo = "Sign extend the lower 8-bit integer of each packed word element into packed signed word integers.";
  6045. break;
  6046. case "pmovsxdq":
  6047. instructionInfo = "Sign extend the lower 32-bit integer of each packed qword element into packed signed qword integers.";
  6048. break;
  6049. case "pmulhrwa":
  6050. instructionInfo = "Aligned high multiply of word packed registers with rounding.";
  6051. break;
  6052. case "pmulhrwc":
  6053. instructionInfo = "Packed high multiply of word packed complex numbers with rounding.";
  6054. break;
  6055. case "vmaskmovps":
  6056. instructionInfo = "Conditionally load packed single-precision values from third operand using " +
  6057. "mask in second operand and store in first operand.";
  6058. break;
  6059. case "vmaskmovpd":
  6060. instructionInfo = "Conditionally load packed double-precision values from third operand using " +
  6061. "mask in second operand and store in first operand.";
  6062. break;
  6063. case "vmaskmovdqu":
  6064. instructionInfo = "Selectively write bytes from first operand to memory location using the byte " +
  6065. "mask in second operand. The default memory location is specified by DS:DI/EDI/RDI";
  6066. break;
  6067. case "vldqqu":
  6068. instructionInfo = "The instruction is a special 128-bit unaligned load designed to avoid cache " +
  6069. "line splits. If the address of a 16- byte load is on a 16-byte boundary, it " +
  6070. "loads the bytes requested. If the address of the load is not aligned on a " +
  6071. "16-byte boundary, it loads a 32-byte block starting at the 16-byte aligned " +
  6072. "address immediately below the load request. It then extracts the requested 16 byte";
  6073. break;
  6074. case "vmovntqq":
  6075. instructionInfo = "Store 256 bits of data from ymm register into memory using non-temporal hint.";
  6076. break;
  6077. case "vmovqqa":
  6078. instructionInfo = "Move 256 bits of data aligned either from memory to register ymm, or the other way.";
  6079. break;
  6080. case "vmovqqu":
  6081. instructionInfo = "Move 256 bits of data unaligned either from memory to register ymm or the other way.";
  6082. break;
  6083. default:
  6084. instructionInfo = string.Empty;
  6085. returnValue = false;
  6086. break;
  6087. }
  6088. return returnValue;
  6089. }
  6090. }
  6091. }
  6092. }