sha3_asm.S 429 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883
  1. /* sha3_asm
  2. *
  3. * Copyright (C) 2006-2023 wolfSSL Inc.
  4. *
  5. * This file is part of wolfSSL.
  6. *
  7. * wolfSSL is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * wolfSSL is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
  20. */
  21. #ifdef WOLFSSL_USER_SETTINGS
  22. #ifdef WOLFSSL_USER_SETTINGS_ASM
  23. /*
  24. * user_settings_asm.h is a file generated by the script user_settings_asm.sh.
  25. * The script takes in a user_settings.h and produces user_settings_asm.h, which
  26. * is a stripped down version of user_settings.h containing only preprocessor
  27. * directives. This makes the header safe to include in assembly (.S) files.
  28. */
  29. #include "user_settings_asm.h"
  30. #else
  31. /*
  32. * Note: if user_settings.h contains any C code (e.g. a typedef or function
  33. * prototype), including it here in an assembly (.S) file will cause an
  34. * assembler failure. See user_settings_asm.h above.
  35. */
  36. #include "user_settings.h"
  37. #endif /* WOLFSSL_USER_SETTINGS_ASM */
  38. #endif /* WOLFSSL_USER_SETTINGS */
  39. #ifndef HAVE_INTEL_AVX1
  40. #define HAVE_INTEL_AVX1
  41. #endif /* HAVE_INTEL_AVX1 */
  42. #ifndef NO_AVX2_SUPPORT
  43. #define HAVE_INTEL_AVX2
  44. #endif /* NO_AVX2_SUPPORT */
  45. #ifndef __APPLE__
  46. .data
  47. #else
  48. .section __DATA,__data
  49. #endif /* __APPLE__ */
  50. #ifndef __APPLE__
  51. .align 16
  52. #else
  53. .p2align 4
  54. #endif /* __APPLE__ */
  55. L_sha3_avx2_r:
  56. .quad 0x1,0x1
  57. .quad 0x1,0x1
  58. .quad 0x8082,0x8082
  59. .quad 0x8082,0x8082
  60. .quad 0x800000000000808a,0x800000000000808a
  61. .quad 0x800000000000808a,0x800000000000808a
  62. .quad 0x8000000080008000,0x8000000080008000
  63. .quad 0x8000000080008000,0x8000000080008000
  64. .quad 0x808b,0x808b
  65. .quad 0x808b,0x808b
  66. .quad 0x80000001,0x80000001
  67. .quad 0x80000001,0x80000001
  68. .quad 0x8000000080008081,0x8000000080008081
  69. .quad 0x8000000080008081,0x8000000080008081
  70. .quad 0x8000000000008009,0x8000000000008009
  71. .quad 0x8000000000008009,0x8000000000008009
  72. .quad 0x8a,0x8a
  73. .quad 0x8a,0x8a
  74. .quad 0x88,0x88
  75. .quad 0x88,0x88
  76. .quad 0x80008009,0x80008009
  77. .quad 0x80008009,0x80008009
  78. .quad 0x8000000a,0x8000000a
  79. .quad 0x8000000a,0x8000000a
  80. .quad 0x8000808b,0x8000808b
  81. .quad 0x8000808b,0x8000808b
  82. .quad 0x800000000000008b,0x800000000000008b
  83. .quad 0x800000000000008b,0x800000000000008b
  84. .quad 0x8000000000008089,0x8000000000008089
  85. .quad 0x8000000000008089,0x8000000000008089
  86. .quad 0x8000000000008003,0x8000000000008003
  87. .quad 0x8000000000008003,0x8000000000008003
  88. .quad 0x8000000000008002,0x8000000000008002
  89. .quad 0x8000000000008002,0x8000000000008002
  90. .quad 0x8000000000000080,0x8000000000000080
  91. .quad 0x8000000000000080,0x8000000000000080
  92. .quad 0x800a,0x800a
  93. .quad 0x800a,0x800a
  94. .quad 0x800000008000000a,0x800000008000000a
  95. .quad 0x800000008000000a,0x800000008000000a
  96. .quad 0x8000000080008081,0x8000000080008081
  97. .quad 0x8000000080008081,0x8000000080008081
  98. .quad 0x8000000000008080,0x8000000000008080
  99. .quad 0x8000000000008080,0x8000000000008080
  100. .quad 0x80000001,0x80000001
  101. .quad 0x80000001,0x80000001
  102. .quad 0x8000000080008008,0x8000000080008008
  103. .quad 0x8000000080008008,0x8000000080008008
  104. #ifndef __APPLE__
  105. .data
  106. #else
  107. .section __DATA,__data
  108. #endif /* __APPLE__ */
  109. #ifndef __APPLE__
  110. .align 16
  111. #else
  112. .p2align 4
  113. #endif /* __APPLE__ */
  114. L_sha3_x4_avx2_r:
  115. .quad 0x1,0x1
  116. .quad 0x1,0x1
  117. .quad 0x8082,0x8082
  118. .quad 0x8082,0x8082
  119. .quad 0x800000000000808a,0x800000000000808a
  120. .quad 0x800000000000808a,0x800000000000808a
  121. .quad 0x8000000080008000,0x8000000080008000
  122. .quad 0x8000000080008000,0x8000000080008000
  123. .quad 0x808b,0x808b
  124. .quad 0x808b,0x808b
  125. .quad 0x80000001,0x80000001
  126. .quad 0x80000001,0x80000001
  127. .quad 0x8000000080008081,0x8000000080008081
  128. .quad 0x8000000080008081,0x8000000080008081
  129. .quad 0x8000000000008009,0x8000000000008009
  130. .quad 0x8000000000008009,0x8000000000008009
  131. .quad 0x8a,0x8a
  132. .quad 0x8a,0x8a
  133. .quad 0x88,0x88
  134. .quad 0x88,0x88
  135. .quad 0x80008009,0x80008009
  136. .quad 0x80008009,0x80008009
  137. .quad 0x8000000a,0x8000000a
  138. .quad 0x8000000a,0x8000000a
  139. .quad 0x8000808b,0x8000808b
  140. .quad 0x8000808b,0x8000808b
  141. .quad 0x800000000000008b,0x800000000000008b
  142. .quad 0x800000000000008b,0x800000000000008b
  143. .quad 0x8000000000008089,0x8000000000008089
  144. .quad 0x8000000000008089,0x8000000000008089
  145. .quad 0x8000000000008003,0x8000000000008003
  146. .quad 0x8000000000008003,0x8000000000008003
  147. .quad 0x8000000000008002,0x8000000000008002
  148. .quad 0x8000000000008002,0x8000000000008002
  149. .quad 0x8000000000000080,0x8000000000000080
  150. .quad 0x8000000000000080,0x8000000000000080
  151. .quad 0x800a,0x800a
  152. .quad 0x800a,0x800a
  153. .quad 0x800000008000000a,0x800000008000000a
  154. .quad 0x800000008000000a,0x800000008000000a
  155. .quad 0x8000000080008081,0x8000000080008081
  156. .quad 0x8000000080008081,0x8000000080008081
  157. .quad 0x8000000000008080,0x8000000000008080
  158. .quad 0x8000000000008080,0x8000000000008080
  159. .quad 0x80000001,0x80000001
  160. .quad 0x80000001,0x80000001
  161. .quad 0x8000000080008008,0x8000000080008008
  162. .quad 0x8000000080008008,0x8000000080008008
  163. #ifdef HAVE_INTEL_AVX2
  164. #ifndef __APPLE__
  165. .text
  166. .globl sha3_block_bmi2
  167. .type sha3_block_bmi2,@function
  168. .align 16
  169. sha3_block_bmi2:
  170. #else
  171. .section __TEXT,__text
  172. .globl _sha3_block_bmi2
  173. .p2align 4
  174. _sha3_block_bmi2:
  175. #endif /* __APPLE__ */
  176. pushq %r12
  177. pushq %r13
  178. pushq %r14
  179. pushq %r15
  180. movq (%rdi), %rsi
  181. addq $0x60, %rdi
  182. # Round 0
  183. movq %rsi, %r10
  184. movq -88(%rdi), %r11
  185. movq -80(%rdi), %r12
  186. movq -72(%rdi), %r13
  187. movq -64(%rdi), %r14
  188. xorq -56(%rdi), %r10
  189. xorq -48(%rdi), %r11
  190. xorq -40(%rdi), %r12
  191. xorq -32(%rdi), %r13
  192. xorq -24(%rdi), %r14
  193. xorq -16(%rdi), %r10
  194. xorq -8(%rdi), %r11
  195. xorq (%rdi), %r12
  196. xorq 8(%rdi), %r13
  197. xorq 16(%rdi), %r14
  198. xorq 24(%rdi), %r10
  199. xorq 32(%rdi), %r11
  200. xorq 40(%rdi), %r12
  201. xorq 48(%rdi), %r13
  202. xorq 56(%rdi), %r14
  203. xorq 64(%rdi), %r10
  204. xorq 72(%rdi), %r11
  205. xorq 80(%rdi), %r12
  206. xorq 88(%rdi), %r13
  207. xorq 96(%rdi), %r14
  208. # Calc t[0..4]
  209. rorxq $63, %r11, %rdx
  210. rorxq $63, %r12, %rax
  211. rorxq $63, %r13, %rcx
  212. rorxq $63, %r14, %r8
  213. rorxq $63, %r10, %r9
  214. xorq %r14, %rdx
  215. xorq %r10, %rax
  216. xorq %r11, %rcx
  217. xorq %r12, %r8
  218. xorq %r13, %r9
  219. # Row Mix
  220. # Row 0
  221. movq %rsi, %r10
  222. movq -48(%rdi), %r11
  223. movq (%rdi), %r12
  224. movq 48(%rdi), %r13
  225. movq 96(%rdi), %r14
  226. xorq %rdx, %r10
  227. xorq %rax, %r11
  228. xorq %rcx, %r12
  229. xorq %r8, %r13
  230. xorq %r9, %r14
  231. rolq $44, %r11
  232. rolq $43, %r12
  233. rolq $21, %r13
  234. rolq $14, %r14
  235. andnq %r13, %r12, %r15
  236. xorq %r11, %r15
  237. movq %r15, -48(%rdi)
  238. andnq %r14, %r13, %r15
  239. xorq %r12, %r15
  240. movq %r15, (%rdi)
  241. andnq %r10, %r14, %r15
  242. xorq %r13, %r15
  243. movq %r15, 48(%rdi)
  244. andnq %r11, %r10, %r15
  245. xorq %r14, %r15
  246. movq %r15, 96(%rdi)
  247. andnq %r12, %r11, %rsi
  248. xorq %r10, %rsi
  249. # XOR in constant
  250. xorq $0x01, %rsi
  251. # Row 1
  252. movq -72(%rdi), %r10
  253. movq -24(%rdi), %r11
  254. movq -16(%rdi), %r12
  255. movq 32(%rdi), %r13
  256. movq 80(%rdi), %r14
  257. xorq %r8, %r10
  258. xorq %r9, %r11
  259. xorq %rdx, %r12
  260. xorq %rax, %r13
  261. xorq %rcx, %r14
  262. rolq $28, %r10
  263. rolq $20, %r11
  264. rolq $3, %r12
  265. rolq $45, %r13
  266. rolq $61, %r14
  267. andnq %r13, %r12, %r15
  268. xorq %r11, %r15
  269. movq %r15, -24(%rdi)
  270. andnq %r14, %r13, %r15
  271. xorq %r12, %r15
  272. movq %r15, -16(%rdi)
  273. andnq %r10, %r14, %r15
  274. xorq %r13, %r15
  275. movq %r15, 32(%rdi)
  276. andnq %r11, %r10, %r15
  277. xorq %r14, %r15
  278. movq %r15, 80(%rdi)
  279. andnq %r12, %r11, %r15
  280. xorq %r10, %r15
  281. movq %r15, -72(%rdi)
  282. # Row 2
  283. movq -88(%rdi), %r10
  284. movq -40(%rdi), %r11
  285. movq 8(%rdi), %r12
  286. movq 56(%rdi), %r13
  287. movq 64(%rdi), %r14
  288. xorq %rax, %r10
  289. xorq %rcx, %r11
  290. xorq %r8, %r12
  291. xorq %r9, %r13
  292. xorq %rdx, %r14
  293. rolq $0x01, %r10
  294. rolq $6, %r11
  295. rolq $25, %r12
  296. rolq $8, %r13
  297. rolq $18, %r14
  298. andnq %r13, %r12, %r15
  299. xorq %r11, %r15
  300. movq %r15, -40(%rdi)
  301. andnq %r14, %r13, %r15
  302. xorq %r12, %r15
  303. movq %r15, 8(%rdi)
  304. andnq %r10, %r14, %r15
  305. xorq %r13, %r15
  306. movq %r15, 56(%rdi)
  307. andnq %r11, %r10, %r15
  308. xorq %r14, %r15
  309. movq %r15, 64(%rdi)
  310. andnq %r12, %r11, %r15
  311. xorq %r10, %r15
  312. movq %r15, -88(%rdi)
  313. # Row 3
  314. movq -64(%rdi), %r10
  315. movq -56(%rdi), %r11
  316. movq -8(%rdi), %r12
  317. movq 40(%rdi), %r13
  318. movq 88(%rdi), %r14
  319. xorq %r9, %r10
  320. xorq %rdx, %r11
  321. xorq %rax, %r12
  322. xorq %rcx, %r13
  323. xorq %r8, %r14
  324. rolq $27, %r10
  325. rolq $36, %r11
  326. rolq $10, %r12
  327. rolq $15, %r13
  328. rolq $56, %r14
  329. andnq %r13, %r12, %r15
  330. xorq %r11, %r15
  331. movq %r15, -56(%rdi)
  332. andnq %r14, %r13, %r15
  333. xorq %r12, %r15
  334. movq %r15, -8(%rdi)
  335. andnq %r10, %r14, %r15
  336. xorq %r13, %r15
  337. movq %r15, 40(%rdi)
  338. andnq %r11, %r10, %r15
  339. xorq %r14, %r15
  340. movq %r15, 88(%rdi)
  341. andnq %r12, %r11, %r15
  342. xorq %r10, %r15
  343. movq %r15, -64(%rdi)
  344. # Row 4
  345. xorq -80(%rdi), %rcx
  346. xorq -32(%rdi), %r8
  347. xorq 16(%rdi), %r9
  348. xorq 24(%rdi), %rdx
  349. xorq 72(%rdi), %rax
  350. rorxq $2, %rcx, %r10
  351. rorxq $9, %r8, %r11
  352. rorxq $25, %r9, %r12
  353. rorxq $23, %rdx, %r13
  354. rorxq $62, %rax, %r14
  355. andnq %r12, %r11, %rdx
  356. andnq %r13, %r12, %rax
  357. andnq %r14, %r13, %rcx
  358. andnq %r10, %r14, %r8
  359. andnq %r11, %r10, %r9
  360. xorq %rdx, %r10
  361. xorq %rax, %r11
  362. xorq %rcx, %r12
  363. xorq %r8, %r13
  364. xorq %r9, %r14
  365. movq %r10, -80(%rdi)
  366. movq %r11, -32(%rdi)
  367. movq %r12, 16(%rdi)
  368. movq %r13, 24(%rdi)
  369. movq %r14, 72(%rdi)
  370. # Round 1
  371. xorq %rsi, %r10
  372. xorq -88(%rdi), %r10
  373. xorq -72(%rdi), %r10
  374. xorq -64(%rdi), %r10
  375. xorq -56(%rdi), %r11
  376. xorq -48(%rdi), %r11
  377. xorq -40(%rdi), %r11
  378. xorq -24(%rdi), %r11
  379. xorq -16(%rdi), %r12
  380. xorq -8(%rdi), %r12
  381. xorq (%rdi), %r12
  382. xorq 8(%rdi), %r12
  383. xorq 32(%rdi), %r13
  384. xorq 40(%rdi), %r13
  385. xorq 48(%rdi), %r13
  386. xorq 56(%rdi), %r13
  387. xorq 64(%rdi), %r14
  388. xorq 80(%rdi), %r14
  389. xorq 88(%rdi), %r14
  390. xorq 96(%rdi), %r14
  391. # Calc t[0..4]
  392. rorxq $63, %r11, %rdx
  393. rorxq $63, %r12, %rax
  394. rorxq $63, %r13, %rcx
  395. rorxq $63, %r14, %r8
  396. rorxq $63, %r10, %r9
  397. xorq %r14, %rdx
  398. xorq %r10, %rax
  399. xorq %r11, %rcx
  400. xorq %r12, %r8
  401. xorq %r13, %r9
  402. # Row Mix
  403. # Row 0
  404. movq %rsi, %r10
  405. movq -24(%rdi), %r11
  406. movq 8(%rdi), %r12
  407. movq 40(%rdi), %r13
  408. movq 72(%rdi), %r14
  409. xorq %rdx, %r10
  410. xorq %rax, %r11
  411. xorq %rcx, %r12
  412. xorq %r8, %r13
  413. xorq %r9, %r14
  414. rolq $44, %r11
  415. rolq $43, %r12
  416. rolq $21, %r13
  417. rolq $14, %r14
  418. andnq %r13, %r12, %r15
  419. xorq %r11, %r15
  420. movq %r15, -24(%rdi)
  421. andnq %r14, %r13, %r15
  422. xorq %r12, %r15
  423. movq %r15, 8(%rdi)
  424. andnq %r10, %r14, %r15
  425. xorq %r13, %r15
  426. movq %r15, 40(%rdi)
  427. andnq %r11, %r10, %r15
  428. xorq %r14, %r15
  429. movq %r15, 72(%rdi)
  430. andnq %r12, %r11, %rsi
  431. xorq %r10, %rsi
  432. # XOR in constant
  433. xorq $0x8082, %rsi
  434. # Row 1
  435. movq 48(%rdi), %r10
  436. movq 80(%rdi), %r11
  437. movq -88(%rdi), %r12
  438. movq -56(%rdi), %r13
  439. movq 16(%rdi), %r14
  440. xorq %r8, %r10
  441. xorq %r9, %r11
  442. xorq %rdx, %r12
  443. xorq %rax, %r13
  444. xorq %rcx, %r14
  445. rolq $28, %r10
  446. rolq $20, %r11
  447. rolq $3, %r12
  448. rolq $45, %r13
  449. rolq $61, %r14
  450. andnq %r13, %r12, %r15
  451. xorq %r11, %r15
  452. movq %r15, 80(%rdi)
  453. andnq %r14, %r13, %r15
  454. xorq %r12, %r15
  455. movq %r15, -88(%rdi)
  456. andnq %r10, %r14, %r15
  457. xorq %r13, %r15
  458. movq %r15, -56(%rdi)
  459. andnq %r11, %r10, %r15
  460. xorq %r14, %r15
  461. movq %r15, 16(%rdi)
  462. andnq %r12, %r11, %r15
  463. xorq %r10, %r15
  464. movq %r15, 48(%rdi)
  465. # Row 2
  466. movq -48(%rdi), %r10
  467. movq -16(%rdi), %r11
  468. movq 56(%rdi), %r12
  469. movq 88(%rdi), %r13
  470. movq -80(%rdi), %r14
  471. xorq %rax, %r10
  472. xorq %rcx, %r11
  473. xorq %r8, %r12
  474. xorq %r9, %r13
  475. xorq %rdx, %r14
  476. rolq $0x01, %r10
  477. rolq $6, %r11
  478. rolq $25, %r12
  479. rolq $8, %r13
  480. rolq $18, %r14
  481. andnq %r13, %r12, %r15
  482. xorq %r11, %r15
  483. movq %r15, -16(%rdi)
  484. andnq %r14, %r13, %r15
  485. xorq %r12, %r15
  486. movq %r15, 56(%rdi)
  487. andnq %r10, %r14, %r15
  488. xorq %r13, %r15
  489. movq %r15, 88(%rdi)
  490. andnq %r11, %r10, %r15
  491. xorq %r14, %r15
  492. movq %r15, -80(%rdi)
  493. andnq %r12, %r11, %r15
  494. xorq %r10, %r15
  495. movq %r15, -48(%rdi)
  496. # Row 3
  497. movq 96(%rdi), %r10
  498. movq -72(%rdi), %r11
  499. movq -40(%rdi), %r12
  500. movq -8(%rdi), %r13
  501. movq 24(%rdi), %r14
  502. xorq %r9, %r10
  503. xorq %rdx, %r11
  504. xorq %rax, %r12
  505. xorq %rcx, %r13
  506. xorq %r8, %r14
  507. rolq $27, %r10
  508. rolq $36, %r11
  509. rolq $10, %r12
  510. rolq $15, %r13
  511. rolq $56, %r14
  512. andnq %r13, %r12, %r15
  513. xorq %r11, %r15
  514. movq %r15, -72(%rdi)
  515. andnq %r14, %r13, %r15
  516. xorq %r12, %r15
  517. movq %r15, -40(%rdi)
  518. andnq %r10, %r14, %r15
  519. xorq %r13, %r15
  520. movq %r15, -8(%rdi)
  521. andnq %r11, %r10, %r15
  522. xorq %r14, %r15
  523. movq %r15, 24(%rdi)
  524. andnq %r12, %r11, %r15
  525. xorq %r10, %r15
  526. movq %r15, 96(%rdi)
  527. # Row 4
  528. xorq (%rdi), %rcx
  529. xorq 32(%rdi), %r8
  530. xorq 64(%rdi), %r9
  531. xorq -64(%rdi), %rdx
  532. xorq -32(%rdi), %rax
  533. rorxq $2, %rcx, %r10
  534. rorxq $9, %r8, %r11
  535. rorxq $25, %r9, %r12
  536. rorxq $23, %rdx, %r13
  537. rorxq $62, %rax, %r14
  538. andnq %r12, %r11, %rdx
  539. andnq %r13, %r12, %rax
  540. andnq %r14, %r13, %rcx
  541. andnq %r10, %r14, %r8
  542. andnq %r11, %r10, %r9
  543. xorq %rdx, %r10
  544. xorq %rax, %r11
  545. xorq %rcx, %r12
  546. xorq %r8, %r13
  547. xorq %r9, %r14
  548. movq %r10, (%rdi)
  549. movq %r11, 32(%rdi)
  550. movq %r12, 64(%rdi)
  551. movq %r13, -64(%rdi)
  552. movq %r14, -32(%rdi)
  553. # Round 2
  554. xorq %rsi, %r10
  555. xorq -88(%rdi), %r12
  556. xorq -80(%rdi), %r14
  557. xorq -72(%rdi), %r11
  558. xorq -56(%rdi), %r13
  559. xorq -48(%rdi), %r10
  560. xorq -40(%rdi), %r12
  561. xorq -24(%rdi), %r11
  562. xorq -16(%rdi), %r11
  563. xorq -8(%rdi), %r13
  564. xorq 8(%rdi), %r12
  565. xorq 16(%rdi), %r14
  566. xorq 24(%rdi), %r14
  567. xorq 40(%rdi), %r13
  568. xorq 48(%rdi), %r10
  569. xorq 56(%rdi), %r12
  570. xorq 72(%rdi), %r14
  571. xorq 80(%rdi), %r11
  572. xorq 88(%rdi), %r13
  573. xorq 96(%rdi), %r10
  574. # Calc t[0..4]
  575. rorxq $63, %r11, %rdx
  576. rorxq $63, %r12, %rax
  577. rorxq $63, %r13, %rcx
  578. rorxq $63, %r14, %r8
  579. rorxq $63, %r10, %r9
  580. xorq %r14, %rdx
  581. xorq %r10, %rax
  582. xorq %r11, %rcx
  583. xorq %r12, %r8
  584. xorq %r13, %r9
  585. # Row Mix
  586. # Row 0
  587. movq %rsi, %r10
  588. movq 80(%rdi), %r11
  589. movq 56(%rdi), %r12
  590. movq -8(%rdi), %r13
  591. movq -32(%rdi), %r14
  592. xorq %rdx, %r10
  593. xorq %rax, %r11
  594. xorq %rcx, %r12
  595. xorq %r8, %r13
  596. xorq %r9, %r14
  597. rolq $44, %r11
  598. rolq $43, %r12
  599. rolq $21, %r13
  600. rolq $14, %r14
  601. andnq %r13, %r12, %r15
  602. xorq %r11, %r15
  603. movq %r15, 80(%rdi)
  604. andnq %r14, %r13, %r15
  605. xorq %r12, %r15
  606. movq %r15, 56(%rdi)
  607. andnq %r10, %r14, %r15
  608. xorq %r13, %r15
  609. movq %r15, -8(%rdi)
  610. andnq %r11, %r10, %r15
  611. xorq %r14, %r15
  612. movq %r15, -32(%rdi)
  613. movq $0x800000000000808a, %r14
  614. andnq %r12, %r11, %rsi
  615. xorq %r10, %rsi
  616. # XOR in constant
  617. xorq %r14, %rsi
  618. # Row 1
  619. movq 40(%rdi), %r10
  620. movq 16(%rdi), %r11
  621. movq -48(%rdi), %r12
  622. movq -72(%rdi), %r13
  623. movq 64(%rdi), %r14
  624. xorq %r8, %r10
  625. xorq %r9, %r11
  626. xorq %rdx, %r12
  627. xorq %rax, %r13
  628. xorq %rcx, %r14
  629. rolq $28, %r10
  630. rolq $20, %r11
  631. rolq $3, %r12
  632. rolq $45, %r13
  633. rolq $61, %r14
  634. andnq %r13, %r12, %r15
  635. xorq %r11, %r15
  636. movq %r15, 16(%rdi)
  637. andnq %r14, %r13, %r15
  638. xorq %r12, %r15
  639. movq %r15, -48(%rdi)
  640. andnq %r10, %r14, %r15
  641. xorq %r13, %r15
  642. movq %r15, -72(%rdi)
  643. andnq %r11, %r10, %r15
  644. xorq %r14, %r15
  645. movq %r15, 64(%rdi)
  646. andnq %r12, %r11, %r15
  647. xorq %r10, %r15
  648. movq %r15, 40(%rdi)
  649. # Row 2
  650. movq -24(%rdi), %r10
  651. movq -88(%rdi), %r11
  652. movq 88(%rdi), %r12
  653. movq 24(%rdi), %r13
  654. movq (%rdi), %r14
  655. xorq %rax, %r10
  656. xorq %rcx, %r11
  657. xorq %r8, %r12
  658. xorq %r9, %r13
  659. xorq %rdx, %r14
  660. rolq $0x01, %r10
  661. rolq $6, %r11
  662. rolq $25, %r12
  663. rolq $8, %r13
  664. rolq $18, %r14
  665. andnq %r13, %r12, %r15
  666. xorq %r11, %r15
  667. movq %r15, -88(%rdi)
  668. andnq %r14, %r13, %r15
  669. xorq %r12, %r15
  670. movq %r15, 88(%rdi)
  671. andnq %r10, %r14, %r15
  672. xorq %r13, %r15
  673. movq %r15, 24(%rdi)
  674. andnq %r11, %r10, %r15
  675. xorq %r14, %r15
  676. movq %r15, (%rdi)
  677. andnq %r12, %r11, %r15
  678. xorq %r10, %r15
  679. movq %r15, -24(%rdi)
  680. # Row 3
  681. movq 72(%rdi), %r10
  682. movq 48(%rdi), %r11
  683. movq -16(%rdi), %r12
  684. movq -40(%rdi), %r13
  685. movq -64(%rdi), %r14
  686. xorq %r9, %r10
  687. xorq %rdx, %r11
  688. xorq %rax, %r12
  689. xorq %rcx, %r13
  690. xorq %r8, %r14
  691. rolq $27, %r10
  692. rolq $36, %r11
  693. rolq $10, %r12
  694. rolq $15, %r13
  695. rolq $56, %r14
  696. andnq %r13, %r12, %r15
  697. xorq %r11, %r15
  698. movq %r15, 48(%rdi)
  699. andnq %r14, %r13, %r15
  700. xorq %r12, %r15
  701. movq %r15, -16(%rdi)
  702. andnq %r10, %r14, %r15
  703. xorq %r13, %r15
  704. movq %r15, -40(%rdi)
  705. andnq %r11, %r10, %r15
  706. xorq %r14, %r15
  707. movq %r15, -64(%rdi)
  708. andnq %r12, %r11, %r15
  709. xorq %r10, %r15
  710. movq %r15, 72(%rdi)
  711. # Row 4
  712. xorq 8(%rdi), %rcx
  713. xorq -56(%rdi), %r8
  714. xorq -80(%rdi), %r9
  715. xorq 96(%rdi), %rdx
  716. xorq 32(%rdi), %rax
  717. rorxq $2, %rcx, %r10
  718. rorxq $9, %r8, %r11
  719. rorxq $25, %r9, %r12
  720. rorxq $23, %rdx, %r13
  721. rorxq $62, %rax, %r14
  722. andnq %r12, %r11, %rdx
  723. andnq %r13, %r12, %rax
  724. andnq %r14, %r13, %rcx
  725. andnq %r10, %r14, %r8
  726. andnq %r11, %r10, %r9
  727. xorq %rdx, %r10
  728. xorq %rax, %r11
  729. xorq %rcx, %r12
  730. xorq %r8, %r13
  731. xorq %r9, %r14
  732. movq %r10, 8(%rdi)
  733. movq %r11, -56(%rdi)
  734. movq %r12, -80(%rdi)
  735. movq %r13, 96(%rdi)
  736. movq %r14, 32(%rdi)
  737. # Round 3
  738. xorq %rsi, %r10
  739. xorq -88(%rdi), %r11
  740. xorq -72(%rdi), %r13
  741. xorq -64(%rdi), %r14
  742. xorq -48(%rdi), %r12
  743. xorq -40(%rdi), %r13
  744. xorq -32(%rdi), %r14
  745. xorq -24(%rdi), %r10
  746. xorq -16(%rdi), %r12
  747. xorq -8(%rdi), %r13
  748. xorq (%rdi), %r14
  749. xorq 16(%rdi), %r11
  750. xorq 24(%rdi), %r13
  751. xorq 40(%rdi), %r10
  752. xorq 48(%rdi), %r11
  753. xorq 56(%rdi), %r12
  754. xorq 64(%rdi), %r14
  755. xorq 72(%rdi), %r10
  756. xorq 80(%rdi), %r11
  757. xorq 88(%rdi), %r12
  758. # Calc t[0..4]
  759. rorxq $63, %r11, %rdx
  760. rorxq $63, %r12, %rax
  761. rorxq $63, %r13, %rcx
  762. rorxq $63, %r14, %r8
  763. rorxq $63, %r10, %r9
  764. xorq %r14, %rdx
  765. xorq %r10, %rax
  766. xorq %r11, %rcx
  767. xorq %r12, %r8
  768. xorq %r13, %r9
  769. # Row Mix
  770. # Row 0
  771. movq %rsi, %r10
  772. movq 16(%rdi), %r11
  773. movq 88(%rdi), %r12
  774. movq -40(%rdi), %r13
  775. movq 32(%rdi), %r14
  776. xorq %rdx, %r10
  777. xorq %rax, %r11
  778. xorq %rcx, %r12
  779. xorq %r8, %r13
  780. xorq %r9, %r14
  781. rolq $44, %r11
  782. rolq $43, %r12
  783. rolq $21, %r13
  784. rolq $14, %r14
  785. andnq %r13, %r12, %r15
  786. xorq %r11, %r15
  787. movq %r15, 16(%rdi)
  788. andnq %r14, %r13, %r15
  789. xorq %r12, %r15
  790. movq %r15, 88(%rdi)
  791. andnq %r10, %r14, %r15
  792. xorq %r13, %r15
  793. movq %r15, -40(%rdi)
  794. andnq %r11, %r10, %r15
  795. xorq %r14, %r15
  796. movq %r15, 32(%rdi)
  797. movq $0x8000000080008000, %r14
  798. andnq %r12, %r11, %rsi
  799. xorq %r10, %rsi
  800. # XOR in constant
  801. xorq %r14, %rsi
  802. # Row 1
  803. movq -8(%rdi), %r10
  804. movq 64(%rdi), %r11
  805. movq -24(%rdi), %r12
  806. movq 48(%rdi), %r13
  807. movq -80(%rdi), %r14
  808. xorq %r8, %r10
  809. xorq %r9, %r11
  810. xorq %rdx, %r12
  811. xorq %rax, %r13
  812. xorq %rcx, %r14
  813. rolq $28, %r10
  814. rolq $20, %r11
  815. rolq $3, %r12
  816. rolq $45, %r13
  817. rolq $61, %r14
  818. andnq %r13, %r12, %r15
  819. xorq %r11, %r15
  820. movq %r15, 64(%rdi)
  821. andnq %r14, %r13, %r15
  822. xorq %r12, %r15
  823. movq %r15, -24(%rdi)
  824. andnq %r10, %r14, %r15
  825. xorq %r13, %r15
  826. movq %r15, 48(%rdi)
  827. andnq %r11, %r10, %r15
  828. xorq %r14, %r15
  829. movq %r15, -80(%rdi)
  830. andnq %r12, %r11, %r15
  831. xorq %r10, %r15
  832. movq %r15, -8(%rdi)
  833. # Row 2
  834. movq 80(%rdi), %r10
  835. movq -48(%rdi), %r11
  836. movq 24(%rdi), %r12
  837. movq -64(%rdi), %r13
  838. movq 8(%rdi), %r14
  839. xorq %rax, %r10
  840. xorq %rcx, %r11
  841. xorq %r8, %r12
  842. xorq %r9, %r13
  843. xorq %rdx, %r14
  844. rolq $0x01, %r10
  845. rolq $6, %r11
  846. rolq $25, %r12
  847. rolq $8, %r13
  848. rolq $18, %r14
  849. andnq %r13, %r12, %r15
  850. xorq %r11, %r15
  851. movq %r15, -48(%rdi)
  852. andnq %r14, %r13, %r15
  853. xorq %r12, %r15
  854. movq %r15, 24(%rdi)
  855. andnq %r10, %r14, %r15
  856. xorq %r13, %r15
  857. movq %r15, -64(%rdi)
  858. andnq %r11, %r10, %r15
  859. xorq %r14, %r15
  860. movq %r15, 8(%rdi)
  861. andnq %r12, %r11, %r15
  862. xorq %r10, %r15
  863. movq %r15, 80(%rdi)
  864. # Row 3
  865. movq -32(%rdi), %r10
  866. movq 40(%rdi), %r11
  867. movq -88(%rdi), %r12
  868. movq -16(%rdi), %r13
  869. movq 96(%rdi), %r14
  870. xorq %r9, %r10
  871. xorq %rdx, %r11
  872. xorq %rax, %r12
  873. xorq %rcx, %r13
  874. xorq %r8, %r14
  875. rolq $27, %r10
  876. rolq $36, %r11
  877. rolq $10, %r12
  878. rolq $15, %r13
  879. rolq $56, %r14
  880. andnq %r13, %r12, %r15
  881. xorq %r11, %r15
  882. movq %r15, 40(%rdi)
  883. andnq %r14, %r13, %r15
  884. xorq %r12, %r15
  885. movq %r15, -88(%rdi)
  886. andnq %r10, %r14, %r15
  887. xorq %r13, %r15
  888. movq %r15, -16(%rdi)
  889. andnq %r11, %r10, %r15
  890. xorq %r14, %r15
  891. movq %r15, 96(%rdi)
  892. andnq %r12, %r11, %r15
  893. xorq %r10, %r15
  894. movq %r15, -32(%rdi)
  895. # Row 4
  896. xorq 56(%rdi), %rcx
  897. xorq -72(%rdi), %r8
  898. xorq (%rdi), %r9
  899. xorq 72(%rdi), %rdx
  900. xorq -56(%rdi), %rax
  901. rorxq $2, %rcx, %r10
  902. rorxq $9, %r8, %r11
  903. rorxq $25, %r9, %r12
  904. rorxq $23, %rdx, %r13
  905. rorxq $62, %rax, %r14
  906. andnq %r12, %r11, %rdx
  907. andnq %r13, %r12, %rax
  908. andnq %r14, %r13, %rcx
  909. andnq %r10, %r14, %r8
  910. andnq %r11, %r10, %r9
  911. xorq %rdx, %r10
  912. xorq %rax, %r11
  913. xorq %rcx, %r12
  914. xorq %r8, %r13
  915. xorq %r9, %r14
  916. movq %r10, 56(%rdi)
  917. movq %r11, -72(%rdi)
  918. movq %r12, (%rdi)
  919. movq %r13, 72(%rdi)
  920. movq %r14, -56(%rdi)
  921. # Round 4
  922. xorq %rsi, %r10
  923. xorq -88(%rdi), %r12
  924. xorq -80(%rdi), %r14
  925. xorq -64(%rdi), %r13
  926. xorq -48(%rdi), %r11
  927. xorq -40(%rdi), %r13
  928. xorq -32(%rdi), %r10
  929. xorq -24(%rdi), %r12
  930. xorq -16(%rdi), %r13
  931. xorq -8(%rdi), %r10
  932. xorq 8(%rdi), %r14
  933. xorq 16(%rdi), %r11
  934. xorq 24(%rdi), %r12
  935. xorq 32(%rdi), %r14
  936. xorq 40(%rdi), %r11
  937. xorq 48(%rdi), %r13
  938. xorq 64(%rdi), %r11
  939. xorq 80(%rdi), %r10
  940. xorq 88(%rdi), %r12
  941. xorq 96(%rdi), %r14
  942. # Calc t[0..4]
  943. rorxq $63, %r11, %rdx
  944. rorxq $63, %r12, %rax
  945. rorxq $63, %r13, %rcx
  946. rorxq $63, %r14, %r8
  947. rorxq $63, %r10, %r9
  948. xorq %r14, %rdx
  949. xorq %r10, %rax
  950. xorq %r11, %rcx
  951. xorq %r12, %r8
  952. xorq %r13, %r9
  953. # Row Mix
  954. # Row 0
  955. movq %rsi, %r10
  956. movq 64(%rdi), %r11
  957. movq 24(%rdi), %r12
  958. movq -16(%rdi), %r13
  959. movq -56(%rdi), %r14
  960. xorq %rdx, %r10
  961. xorq %rax, %r11
  962. xorq %rcx, %r12
  963. xorq %r8, %r13
  964. xorq %r9, %r14
  965. rolq $44, %r11
  966. rolq $43, %r12
  967. rolq $21, %r13
  968. rolq $14, %r14
  969. andnq %r13, %r12, %r15
  970. xorq %r11, %r15
  971. movq %r15, 64(%rdi)
  972. andnq %r14, %r13, %r15
  973. xorq %r12, %r15
  974. movq %r15, 24(%rdi)
  975. andnq %r10, %r14, %r15
  976. xorq %r13, %r15
  977. movq %r15, -16(%rdi)
  978. andnq %r11, %r10, %r15
  979. xorq %r14, %r15
  980. movq %r15, -56(%rdi)
  981. andnq %r12, %r11, %rsi
  982. xorq %r10, %rsi
  983. # XOR in constant
  984. xorq $0x808b, %rsi
  985. # Row 1
  986. movq -40(%rdi), %r10
  987. movq -80(%rdi), %r11
  988. movq 80(%rdi), %r12
  989. movq 40(%rdi), %r13
  990. movq (%rdi), %r14
  991. xorq %r8, %r10
  992. xorq %r9, %r11
  993. xorq %rdx, %r12
  994. xorq %rax, %r13
  995. xorq %rcx, %r14
  996. rolq $28, %r10
  997. rolq $20, %r11
  998. rolq $3, %r12
  999. rolq $45, %r13
  1000. rolq $61, %r14
  1001. andnq %r13, %r12, %r15
  1002. xorq %r11, %r15
  1003. movq %r15, -80(%rdi)
  1004. andnq %r14, %r13, %r15
  1005. xorq %r12, %r15
  1006. movq %r15, 80(%rdi)
  1007. andnq %r10, %r14, %r15
  1008. xorq %r13, %r15
  1009. movq %r15, 40(%rdi)
  1010. andnq %r11, %r10, %r15
  1011. xorq %r14, %r15
  1012. movq %r15, (%rdi)
  1013. andnq %r12, %r11, %r15
  1014. xorq %r10, %r15
  1015. movq %r15, -40(%rdi)
  1016. # Row 2
  1017. movq 16(%rdi), %r10
  1018. movq -24(%rdi), %r11
  1019. movq -64(%rdi), %r12
  1020. movq 96(%rdi), %r13
  1021. movq 56(%rdi), %r14
  1022. xorq %rax, %r10
  1023. xorq %rcx, %r11
  1024. xorq %r8, %r12
  1025. xorq %r9, %r13
  1026. xorq %rdx, %r14
  1027. rolq $0x01, %r10
  1028. rolq $6, %r11
  1029. rolq $25, %r12
  1030. rolq $8, %r13
  1031. rolq $18, %r14
  1032. andnq %r13, %r12, %r15
  1033. xorq %r11, %r15
  1034. movq %r15, -24(%rdi)
  1035. andnq %r14, %r13, %r15
  1036. xorq %r12, %r15
  1037. movq %r15, -64(%rdi)
  1038. andnq %r10, %r14, %r15
  1039. xorq %r13, %r15
  1040. movq %r15, 96(%rdi)
  1041. andnq %r11, %r10, %r15
  1042. xorq %r14, %r15
  1043. movq %r15, 56(%rdi)
  1044. andnq %r12, %r11, %r15
  1045. xorq %r10, %r15
  1046. movq %r15, 16(%rdi)
  1047. # Row 3
  1048. movq 32(%rdi), %r10
  1049. movq -8(%rdi), %r11
  1050. movq -48(%rdi), %r12
  1051. movq -88(%rdi), %r13
  1052. movq 72(%rdi), %r14
  1053. xorq %r9, %r10
  1054. xorq %rdx, %r11
  1055. xorq %rax, %r12
  1056. xorq %rcx, %r13
  1057. xorq %r8, %r14
  1058. rolq $27, %r10
  1059. rolq $36, %r11
  1060. rolq $10, %r12
  1061. rolq $15, %r13
  1062. rolq $56, %r14
  1063. andnq %r13, %r12, %r15
  1064. xorq %r11, %r15
  1065. movq %r15, -8(%rdi)
  1066. andnq %r14, %r13, %r15
  1067. xorq %r12, %r15
  1068. movq %r15, -48(%rdi)
  1069. andnq %r10, %r14, %r15
  1070. xorq %r13, %r15
  1071. movq %r15, -88(%rdi)
  1072. andnq %r11, %r10, %r15
  1073. xorq %r14, %r15
  1074. movq %r15, 72(%rdi)
  1075. andnq %r12, %r11, %r15
  1076. xorq %r10, %r15
  1077. movq %r15, 32(%rdi)
  1078. # Row 4
  1079. xorq 88(%rdi), %rcx
  1080. xorq 48(%rdi), %r8
  1081. xorq 8(%rdi), %r9
  1082. xorq -32(%rdi), %rdx
  1083. xorq -72(%rdi), %rax
  1084. rorxq $2, %rcx, %r10
  1085. rorxq $9, %r8, %r11
  1086. rorxq $25, %r9, %r12
  1087. rorxq $23, %rdx, %r13
  1088. rorxq $62, %rax, %r14
  1089. andnq %r12, %r11, %rdx
  1090. andnq %r13, %r12, %rax
  1091. andnq %r14, %r13, %rcx
  1092. andnq %r10, %r14, %r8
  1093. andnq %r11, %r10, %r9
  1094. xorq %rdx, %r10
  1095. xorq %rax, %r11
  1096. xorq %rcx, %r12
  1097. xorq %r8, %r13
  1098. xorq %r9, %r14
  1099. movq %r10, 88(%rdi)
  1100. movq %r11, 48(%rdi)
  1101. movq %r12, 8(%rdi)
  1102. movq %r13, -32(%rdi)
  1103. movq %r14, -72(%rdi)
  1104. # Round 5
  1105. xorq %rsi, %r10
  1106. xorq -88(%rdi), %r13
  1107. xorq -80(%rdi), %r11
  1108. xorq -64(%rdi), %r12
  1109. xorq -56(%rdi), %r14
  1110. xorq -48(%rdi), %r12
  1111. xorq -40(%rdi), %r10
  1112. xorq -24(%rdi), %r11
  1113. xorq -16(%rdi), %r13
  1114. xorq -8(%rdi), %r11
  1115. xorq (%rdi), %r14
  1116. xorq 16(%rdi), %r10
  1117. xorq 24(%rdi), %r12
  1118. xorq 32(%rdi), %r10
  1119. xorq 40(%rdi), %r13
  1120. xorq 56(%rdi), %r14
  1121. xorq 64(%rdi), %r11
  1122. xorq 72(%rdi), %r14
  1123. xorq 80(%rdi), %r12
  1124. xorq 96(%rdi), %r13
  1125. # Calc t[0..4]
  1126. rorxq $63, %r11, %rdx
  1127. rorxq $63, %r12, %rax
  1128. rorxq $63, %r13, %rcx
  1129. rorxq $63, %r14, %r8
  1130. rorxq $63, %r10, %r9
  1131. xorq %r14, %rdx
  1132. xorq %r10, %rax
  1133. xorq %r11, %rcx
  1134. xorq %r12, %r8
  1135. xorq %r13, %r9
  1136. # Row Mix
  1137. # Row 0
  1138. movq %rsi, %r10
  1139. movq -80(%rdi), %r11
  1140. movq -64(%rdi), %r12
  1141. movq -88(%rdi), %r13
  1142. movq -72(%rdi), %r14
  1143. xorq %rdx, %r10
  1144. xorq %rax, %r11
  1145. xorq %rcx, %r12
  1146. xorq %r8, %r13
  1147. xorq %r9, %r14
  1148. rolq $44, %r11
  1149. rolq $43, %r12
  1150. rolq $21, %r13
  1151. rolq $14, %r14
  1152. andnq %r13, %r12, %r15
  1153. xorq %r11, %r15
  1154. movq %r15, -80(%rdi)
  1155. andnq %r14, %r13, %r15
  1156. xorq %r12, %r15
  1157. movq %r15, -64(%rdi)
  1158. andnq %r10, %r14, %r15
  1159. xorq %r13, %r15
  1160. movq %r15, -88(%rdi)
  1161. andnq %r11, %r10, %r15
  1162. xorq %r14, %r15
  1163. movq %r15, -72(%rdi)
  1164. movq $0x80000001, %r14
  1165. andnq %r12, %r11, %rsi
  1166. xorq %r10, %rsi
  1167. # XOR in constant
  1168. xorq %r14, %rsi
  1169. # Row 1
  1170. movq -16(%rdi), %r10
  1171. movq (%rdi), %r11
  1172. movq 16(%rdi), %r12
  1173. movq -8(%rdi), %r13
  1174. movq 8(%rdi), %r14
  1175. xorq %r8, %r10
  1176. xorq %r9, %r11
  1177. xorq %rdx, %r12
  1178. xorq %rax, %r13
  1179. xorq %rcx, %r14
  1180. rolq $28, %r10
  1181. rolq $20, %r11
  1182. rolq $3, %r12
  1183. rolq $45, %r13
  1184. rolq $61, %r14
  1185. andnq %r13, %r12, %r15
  1186. xorq %r11, %r15
  1187. movq %r15, (%rdi)
  1188. andnq %r14, %r13, %r15
  1189. xorq %r12, %r15
  1190. movq %r15, 16(%rdi)
  1191. andnq %r10, %r14, %r15
  1192. xorq %r13, %r15
  1193. movq %r15, -8(%rdi)
  1194. andnq %r11, %r10, %r15
  1195. xorq %r14, %r15
  1196. movq %r15, 8(%rdi)
  1197. andnq %r12, %r11, %r15
  1198. xorq %r10, %r15
  1199. movq %r15, -16(%rdi)
  1200. # Row 2
  1201. movq 64(%rdi), %r10
  1202. movq 80(%rdi), %r11
  1203. movq 96(%rdi), %r12
  1204. movq 72(%rdi), %r13
  1205. movq 88(%rdi), %r14
  1206. xorq %rax, %r10
  1207. xorq %rcx, %r11
  1208. xorq %r8, %r12
  1209. xorq %r9, %r13
  1210. xorq %rdx, %r14
  1211. rolq $0x01, %r10
  1212. rolq $6, %r11
  1213. rolq $25, %r12
  1214. rolq $8, %r13
  1215. rolq $18, %r14
  1216. andnq %r13, %r12, %r15
  1217. xorq %r11, %r15
  1218. movq %r15, 80(%rdi)
  1219. andnq %r14, %r13, %r15
  1220. xorq %r12, %r15
  1221. movq %r15, 96(%rdi)
  1222. andnq %r10, %r14, %r15
  1223. xorq %r13, %r15
  1224. movq %r15, 72(%rdi)
  1225. andnq %r11, %r10, %r15
  1226. xorq %r14, %r15
  1227. movq %r15, 88(%rdi)
  1228. andnq %r12, %r11, %r15
  1229. xorq %r10, %r15
  1230. movq %r15, 64(%rdi)
  1231. # Row 3
  1232. movq -56(%rdi), %r10
  1233. movq -40(%rdi), %r11
  1234. movq -24(%rdi), %r12
  1235. movq -48(%rdi), %r13
  1236. movq -32(%rdi), %r14
  1237. xorq %r9, %r10
  1238. xorq %rdx, %r11
  1239. xorq %rax, %r12
  1240. xorq %rcx, %r13
  1241. xorq %r8, %r14
  1242. rolq $27, %r10
  1243. rolq $36, %r11
  1244. rolq $10, %r12
  1245. rolq $15, %r13
  1246. rolq $56, %r14
  1247. andnq %r13, %r12, %r15
  1248. xorq %r11, %r15
  1249. movq %r15, -40(%rdi)
  1250. andnq %r14, %r13, %r15
  1251. xorq %r12, %r15
  1252. movq %r15, -24(%rdi)
  1253. andnq %r10, %r14, %r15
  1254. xorq %r13, %r15
  1255. movq %r15, -48(%rdi)
  1256. andnq %r11, %r10, %r15
  1257. xorq %r14, %r15
  1258. movq %r15, -32(%rdi)
  1259. andnq %r12, %r11, %r15
  1260. xorq %r10, %r15
  1261. movq %r15, -56(%rdi)
  1262. # Row 4
  1263. xorq 24(%rdi), %rcx
  1264. xorq 40(%rdi), %r8
  1265. xorq 56(%rdi), %r9
  1266. xorq 32(%rdi), %rdx
  1267. xorq 48(%rdi), %rax
  1268. rorxq $2, %rcx, %r10
  1269. rorxq $9, %r8, %r11
  1270. rorxq $25, %r9, %r12
  1271. rorxq $23, %rdx, %r13
  1272. rorxq $62, %rax, %r14
  1273. andnq %r12, %r11, %rdx
  1274. andnq %r13, %r12, %rax
  1275. andnq %r14, %r13, %rcx
  1276. andnq %r10, %r14, %r8
  1277. andnq %r11, %r10, %r9
  1278. xorq %rdx, %r10
  1279. xorq %rax, %r11
  1280. xorq %rcx, %r12
  1281. xorq %r8, %r13
  1282. xorq %r9, %r14
  1283. movq %r10, 24(%rdi)
  1284. movq %r11, 40(%rdi)
  1285. movq %r12, 56(%rdi)
  1286. movq %r13, 32(%rdi)
  1287. movq %r14, 48(%rdi)
  1288. # Round 6
  1289. xorq %rsi, %r10
  1290. xorq -88(%rdi), %r13
  1291. xorq -80(%rdi), %r11
  1292. xorq -72(%rdi), %r14
  1293. xorq -64(%rdi), %r12
  1294. xorq -56(%rdi), %r10
  1295. xorq -48(%rdi), %r13
  1296. xorq -40(%rdi), %r11
  1297. xorq -32(%rdi), %r14
  1298. xorq -24(%rdi), %r12
  1299. xorq -16(%rdi), %r10
  1300. xorq -8(%rdi), %r13
  1301. xorq (%rdi), %r11
  1302. xorq 8(%rdi), %r14
  1303. xorq 16(%rdi), %r12
  1304. xorq 64(%rdi), %r10
  1305. xorq 72(%rdi), %r13
  1306. xorq 80(%rdi), %r11
  1307. xorq 88(%rdi), %r14
  1308. xorq 96(%rdi), %r12
  1309. # Calc t[0..4]
  1310. rorxq $63, %r11, %rdx
  1311. rorxq $63, %r12, %rax
  1312. rorxq $63, %r13, %rcx
  1313. rorxq $63, %r14, %r8
  1314. rorxq $63, %r10, %r9
  1315. xorq %r14, %rdx
  1316. xorq %r10, %rax
  1317. xorq %r11, %rcx
  1318. xorq %r12, %r8
  1319. xorq %r13, %r9
  1320. # Row Mix
  1321. # Row 0
  1322. movq %rsi, %r10
  1323. movq (%rdi), %r11
  1324. movq 96(%rdi), %r12
  1325. movq -48(%rdi), %r13
  1326. movq 48(%rdi), %r14
  1327. xorq %rdx, %r10
  1328. xorq %rax, %r11
  1329. xorq %rcx, %r12
  1330. xorq %r8, %r13
  1331. xorq %r9, %r14
  1332. rolq $44, %r11
  1333. rolq $43, %r12
  1334. rolq $21, %r13
  1335. rolq $14, %r14
  1336. andnq %r13, %r12, %r15
  1337. xorq %r11, %r15
  1338. movq %r15, (%rdi)
  1339. andnq %r14, %r13, %r15
  1340. xorq %r12, %r15
  1341. movq %r15, 96(%rdi)
  1342. andnq %r10, %r14, %r15
  1343. xorq %r13, %r15
  1344. movq %r15, -48(%rdi)
  1345. andnq %r11, %r10, %r15
  1346. xorq %r14, %r15
  1347. movq %r15, 48(%rdi)
  1348. movq $0x8000000080008081, %r14
  1349. andnq %r12, %r11, %rsi
  1350. xorq %r10, %rsi
  1351. # XOR in constant
  1352. xorq %r14, %rsi
  1353. # Row 1
  1354. movq -88(%rdi), %r10
  1355. movq 8(%rdi), %r11
  1356. movq 64(%rdi), %r12
  1357. movq -40(%rdi), %r13
  1358. movq 56(%rdi), %r14
  1359. xorq %r8, %r10
  1360. xorq %r9, %r11
  1361. xorq %rdx, %r12
  1362. xorq %rax, %r13
  1363. xorq %rcx, %r14
  1364. rolq $28, %r10
  1365. rolq $20, %r11
  1366. rolq $3, %r12
  1367. rolq $45, %r13
  1368. rolq $61, %r14
  1369. andnq %r13, %r12, %r15
  1370. xorq %r11, %r15
  1371. movq %r15, 8(%rdi)
  1372. andnq %r14, %r13, %r15
  1373. xorq %r12, %r15
  1374. movq %r15, 64(%rdi)
  1375. andnq %r10, %r14, %r15
  1376. xorq %r13, %r15
  1377. movq %r15, -40(%rdi)
  1378. andnq %r11, %r10, %r15
  1379. xorq %r14, %r15
  1380. movq %r15, 56(%rdi)
  1381. andnq %r12, %r11, %r15
  1382. xorq %r10, %r15
  1383. movq %r15, -88(%rdi)
  1384. # Row 2
  1385. movq -80(%rdi), %r10
  1386. movq 16(%rdi), %r11
  1387. movq 72(%rdi), %r12
  1388. movq -32(%rdi), %r13
  1389. movq 24(%rdi), %r14
  1390. xorq %rax, %r10
  1391. xorq %rcx, %r11
  1392. xorq %r8, %r12
  1393. xorq %r9, %r13
  1394. xorq %rdx, %r14
  1395. rolq $0x01, %r10
  1396. rolq $6, %r11
  1397. rolq $25, %r12
  1398. rolq $8, %r13
  1399. rolq $18, %r14
  1400. andnq %r13, %r12, %r15
  1401. xorq %r11, %r15
  1402. movq %r15, 16(%rdi)
  1403. andnq %r14, %r13, %r15
  1404. xorq %r12, %r15
  1405. movq %r15, 72(%rdi)
  1406. andnq %r10, %r14, %r15
  1407. xorq %r13, %r15
  1408. movq %r15, -32(%rdi)
  1409. andnq %r11, %r10, %r15
  1410. xorq %r14, %r15
  1411. movq %r15, 24(%rdi)
  1412. andnq %r12, %r11, %r15
  1413. xorq %r10, %r15
  1414. movq %r15, -80(%rdi)
  1415. # Row 3
  1416. movq -72(%rdi), %r10
  1417. movq -16(%rdi), %r11
  1418. movq 80(%rdi), %r12
  1419. movq -24(%rdi), %r13
  1420. movq 32(%rdi), %r14
  1421. xorq %r9, %r10
  1422. xorq %rdx, %r11
  1423. xorq %rax, %r12
  1424. xorq %rcx, %r13
  1425. xorq %r8, %r14
  1426. rolq $27, %r10
  1427. rolq $36, %r11
  1428. rolq $10, %r12
  1429. rolq $15, %r13
  1430. rolq $56, %r14
  1431. andnq %r13, %r12, %r15
  1432. xorq %r11, %r15
  1433. movq %r15, -16(%rdi)
  1434. andnq %r14, %r13, %r15
  1435. xorq %r12, %r15
  1436. movq %r15, 80(%rdi)
  1437. andnq %r10, %r14, %r15
  1438. xorq %r13, %r15
  1439. movq %r15, -24(%rdi)
  1440. andnq %r11, %r10, %r15
  1441. xorq %r14, %r15
  1442. movq %r15, 32(%rdi)
  1443. andnq %r12, %r11, %r15
  1444. xorq %r10, %r15
  1445. movq %r15, -72(%rdi)
  1446. # Row 4
  1447. xorq -64(%rdi), %rcx
  1448. xorq -8(%rdi), %r8
  1449. xorq 88(%rdi), %r9
  1450. xorq -56(%rdi), %rdx
  1451. xorq 40(%rdi), %rax
  1452. rorxq $2, %rcx, %r10
  1453. rorxq $9, %r8, %r11
  1454. rorxq $25, %r9, %r12
  1455. rorxq $23, %rdx, %r13
  1456. rorxq $62, %rax, %r14
  1457. andnq %r12, %r11, %rdx
  1458. andnq %r13, %r12, %rax
  1459. andnq %r14, %r13, %rcx
  1460. andnq %r10, %r14, %r8
  1461. andnq %r11, %r10, %r9
  1462. xorq %rdx, %r10
  1463. xorq %rax, %r11
  1464. xorq %rcx, %r12
  1465. xorq %r8, %r13
  1466. xorq %r9, %r14
  1467. movq %r10, -64(%rdi)
  1468. movq %r11, -8(%rdi)
  1469. movq %r12, 88(%rdi)
  1470. movq %r13, -56(%rdi)
  1471. movq %r14, 40(%rdi)
  1472. # Round 7
  1473. xorq %rsi, %r10
  1474. xorq -88(%rdi), %r10
  1475. xorq -80(%rdi), %r10
  1476. xorq -72(%rdi), %r10
  1477. xorq -48(%rdi), %r13
  1478. xorq -40(%rdi), %r13
  1479. xorq -32(%rdi), %r13
  1480. xorq -24(%rdi), %r13
  1481. xorq -16(%rdi), %r11
  1482. xorq (%rdi), %r11
  1483. xorq 8(%rdi), %r11
  1484. xorq 16(%rdi), %r11
  1485. xorq 24(%rdi), %r14
  1486. xorq 32(%rdi), %r14
  1487. xorq 48(%rdi), %r14
  1488. xorq 56(%rdi), %r14
  1489. xorq 64(%rdi), %r12
  1490. xorq 72(%rdi), %r12
  1491. xorq 80(%rdi), %r12
  1492. xorq 96(%rdi), %r12
  1493. # Calc t[0..4]
  1494. rorxq $63, %r11, %rdx
  1495. rorxq $63, %r12, %rax
  1496. rorxq $63, %r13, %rcx
  1497. rorxq $63, %r14, %r8
  1498. rorxq $63, %r10, %r9
  1499. xorq %r14, %rdx
  1500. xorq %r10, %rax
  1501. xorq %r11, %rcx
  1502. xorq %r12, %r8
  1503. xorq %r13, %r9
  1504. # Row Mix
  1505. # Row 0
  1506. movq %rsi, %r10
  1507. movq 8(%rdi), %r11
  1508. movq 72(%rdi), %r12
  1509. movq -24(%rdi), %r13
  1510. movq 40(%rdi), %r14
  1511. xorq %rdx, %r10
  1512. xorq %rax, %r11
  1513. xorq %rcx, %r12
  1514. xorq %r8, %r13
  1515. xorq %r9, %r14
  1516. rolq $44, %r11
  1517. rolq $43, %r12
  1518. rolq $21, %r13
  1519. rolq $14, %r14
  1520. andnq %r13, %r12, %r15
  1521. xorq %r11, %r15
  1522. movq %r15, 8(%rdi)
  1523. andnq %r14, %r13, %r15
  1524. xorq %r12, %r15
  1525. movq %r15, 72(%rdi)
  1526. andnq %r10, %r14, %r15
  1527. xorq %r13, %r15
  1528. movq %r15, -24(%rdi)
  1529. andnq %r11, %r10, %r15
  1530. xorq %r14, %r15
  1531. movq %r15, 40(%rdi)
  1532. movq $0x8000000000008009, %r14
  1533. andnq %r12, %r11, %rsi
  1534. xorq %r10, %rsi
  1535. # XOR in constant
  1536. xorq %r14, %rsi
  1537. # Row 1
  1538. movq -48(%rdi), %r10
  1539. movq 56(%rdi), %r11
  1540. movq -80(%rdi), %r12
  1541. movq -16(%rdi), %r13
  1542. movq 88(%rdi), %r14
  1543. xorq %r8, %r10
  1544. xorq %r9, %r11
  1545. xorq %rdx, %r12
  1546. xorq %rax, %r13
  1547. xorq %rcx, %r14
  1548. rolq $28, %r10
  1549. rolq $20, %r11
  1550. rolq $3, %r12
  1551. rolq $45, %r13
  1552. rolq $61, %r14
  1553. andnq %r13, %r12, %r15
  1554. xorq %r11, %r15
  1555. movq %r15, 56(%rdi)
  1556. andnq %r14, %r13, %r15
  1557. xorq %r12, %r15
  1558. movq %r15, -80(%rdi)
  1559. andnq %r10, %r14, %r15
  1560. xorq %r13, %r15
  1561. movq %r15, -16(%rdi)
  1562. andnq %r11, %r10, %r15
  1563. xorq %r14, %r15
  1564. movq %r15, 88(%rdi)
  1565. andnq %r12, %r11, %r15
  1566. xorq %r10, %r15
  1567. movq %r15, -48(%rdi)
  1568. # Row 2
  1569. movq (%rdi), %r10
  1570. movq 64(%rdi), %r11
  1571. movq -32(%rdi), %r12
  1572. movq 32(%rdi), %r13
  1573. movq -64(%rdi), %r14
  1574. xorq %rax, %r10
  1575. xorq %rcx, %r11
  1576. xorq %r8, %r12
  1577. xorq %r9, %r13
  1578. xorq %rdx, %r14
  1579. rolq $0x01, %r10
  1580. rolq $6, %r11
  1581. rolq $25, %r12
  1582. rolq $8, %r13
  1583. rolq $18, %r14
  1584. andnq %r13, %r12, %r15
  1585. xorq %r11, %r15
  1586. movq %r15, 64(%rdi)
  1587. andnq %r14, %r13, %r15
  1588. xorq %r12, %r15
  1589. movq %r15, -32(%rdi)
  1590. andnq %r10, %r14, %r15
  1591. xorq %r13, %r15
  1592. movq %r15, 32(%rdi)
  1593. andnq %r11, %r10, %r15
  1594. xorq %r14, %r15
  1595. movq %r15, -64(%rdi)
  1596. andnq %r12, %r11, %r15
  1597. xorq %r10, %r15
  1598. movq %r15, (%rdi)
  1599. # Row 3
  1600. movq 48(%rdi), %r10
  1601. movq -88(%rdi), %r11
  1602. movq 16(%rdi), %r12
  1603. movq 80(%rdi), %r13
  1604. movq -56(%rdi), %r14
  1605. xorq %r9, %r10
  1606. xorq %rdx, %r11
  1607. xorq %rax, %r12
  1608. xorq %rcx, %r13
  1609. xorq %r8, %r14
  1610. rolq $27, %r10
  1611. rolq $36, %r11
  1612. rolq $10, %r12
  1613. rolq $15, %r13
  1614. rolq $56, %r14
  1615. andnq %r13, %r12, %r15
  1616. xorq %r11, %r15
  1617. movq %r15, -88(%rdi)
  1618. andnq %r14, %r13, %r15
  1619. xorq %r12, %r15
  1620. movq %r15, 16(%rdi)
  1621. andnq %r10, %r14, %r15
  1622. xorq %r13, %r15
  1623. movq %r15, 80(%rdi)
  1624. andnq %r11, %r10, %r15
  1625. xorq %r14, %r15
  1626. movq %r15, -56(%rdi)
  1627. andnq %r12, %r11, %r15
  1628. xorq %r10, %r15
  1629. movq %r15, 48(%rdi)
  1630. # Row 4
  1631. xorq 96(%rdi), %rcx
  1632. xorq -40(%rdi), %r8
  1633. xorq 24(%rdi), %r9
  1634. xorq -72(%rdi), %rdx
  1635. xorq -8(%rdi), %rax
  1636. rorxq $2, %rcx, %r10
  1637. rorxq $9, %r8, %r11
  1638. rorxq $25, %r9, %r12
  1639. rorxq $23, %rdx, %r13
  1640. rorxq $62, %rax, %r14
  1641. andnq %r12, %r11, %rdx
  1642. andnq %r13, %r12, %rax
  1643. andnq %r14, %r13, %rcx
  1644. andnq %r10, %r14, %r8
  1645. andnq %r11, %r10, %r9
  1646. xorq %rdx, %r10
  1647. xorq %rax, %r11
  1648. xorq %rcx, %r12
  1649. xorq %r8, %r13
  1650. xorq %r9, %r14
  1651. movq %r10, 96(%rdi)
  1652. movq %r11, -40(%rdi)
  1653. movq %r12, 24(%rdi)
  1654. movq %r13, -72(%rdi)
  1655. movq %r14, -8(%rdi)
  1656. # Round 8
  1657. xorq %rsi, %r10
  1658. xorq -88(%rdi), %r11
  1659. xorq -80(%rdi), %r12
  1660. xorq -64(%rdi), %r14
  1661. xorq -56(%rdi), %r14
  1662. xorq -48(%rdi), %r10
  1663. xorq -32(%rdi), %r12
  1664. xorq -24(%rdi), %r13
  1665. xorq -16(%rdi), %r13
  1666. xorq (%rdi), %r10
  1667. xorq 8(%rdi), %r11
  1668. xorq 16(%rdi), %r12
  1669. xorq 32(%rdi), %r13
  1670. xorq 40(%rdi), %r14
  1671. xorq 48(%rdi), %r10
  1672. xorq 56(%rdi), %r11
  1673. xorq 64(%rdi), %r11
  1674. xorq 72(%rdi), %r12
  1675. xorq 80(%rdi), %r13
  1676. xorq 88(%rdi), %r14
  1677. # Calc t[0..4]
  1678. rorxq $63, %r11, %rdx
  1679. rorxq $63, %r12, %rax
  1680. rorxq $63, %r13, %rcx
  1681. rorxq $63, %r14, %r8
  1682. rorxq $63, %r10, %r9
  1683. xorq %r14, %rdx
  1684. xorq %r10, %rax
  1685. xorq %r11, %rcx
  1686. xorq %r12, %r8
  1687. xorq %r13, %r9
  1688. # Row Mix
  1689. # Row 0
  1690. movq %rsi, %r10
  1691. movq 56(%rdi), %r11
  1692. movq -32(%rdi), %r12
  1693. movq 80(%rdi), %r13
  1694. movq -8(%rdi), %r14
  1695. xorq %rdx, %r10
  1696. xorq %rax, %r11
  1697. xorq %rcx, %r12
  1698. xorq %r8, %r13
  1699. xorq %r9, %r14
  1700. rolq $44, %r11
  1701. rolq $43, %r12
  1702. rolq $21, %r13
  1703. rolq $14, %r14
  1704. andnq %r13, %r12, %r15
  1705. xorq %r11, %r15
  1706. movq %r15, 56(%rdi)
  1707. andnq %r14, %r13, %r15
  1708. xorq %r12, %r15
  1709. movq %r15, -32(%rdi)
  1710. andnq %r10, %r14, %r15
  1711. xorq %r13, %r15
  1712. movq %r15, 80(%rdi)
  1713. andnq %r11, %r10, %r15
  1714. xorq %r14, %r15
  1715. movq %r15, -8(%rdi)
  1716. andnq %r12, %r11, %rsi
  1717. xorq %r10, %rsi
  1718. # XOR in constant
  1719. xorq $0x8a, %rsi
  1720. # Row 1
  1721. movq -24(%rdi), %r10
  1722. movq 88(%rdi), %r11
  1723. movq (%rdi), %r12
  1724. movq -88(%rdi), %r13
  1725. movq 24(%rdi), %r14
  1726. xorq %r8, %r10
  1727. xorq %r9, %r11
  1728. xorq %rdx, %r12
  1729. xorq %rax, %r13
  1730. xorq %rcx, %r14
  1731. rolq $28, %r10
  1732. rolq $20, %r11
  1733. rolq $3, %r12
  1734. rolq $45, %r13
  1735. rolq $61, %r14
  1736. andnq %r13, %r12, %r15
  1737. xorq %r11, %r15
  1738. movq %r15, 88(%rdi)
  1739. andnq %r14, %r13, %r15
  1740. xorq %r12, %r15
  1741. movq %r15, (%rdi)
  1742. andnq %r10, %r14, %r15
  1743. xorq %r13, %r15
  1744. movq %r15, -88(%rdi)
  1745. andnq %r11, %r10, %r15
  1746. xorq %r14, %r15
  1747. movq %r15, 24(%rdi)
  1748. andnq %r12, %r11, %r15
  1749. xorq %r10, %r15
  1750. movq %r15, -24(%rdi)
  1751. # Row 2
  1752. movq 8(%rdi), %r10
  1753. movq -80(%rdi), %r11
  1754. movq 32(%rdi), %r12
  1755. movq -56(%rdi), %r13
  1756. movq 96(%rdi), %r14
  1757. xorq %rax, %r10
  1758. xorq %rcx, %r11
  1759. xorq %r8, %r12
  1760. xorq %r9, %r13
  1761. xorq %rdx, %r14
  1762. rolq $0x01, %r10
  1763. rolq $6, %r11
  1764. rolq $25, %r12
  1765. rolq $8, %r13
  1766. rolq $18, %r14
  1767. andnq %r13, %r12, %r15
  1768. xorq %r11, %r15
  1769. movq %r15, -80(%rdi)
  1770. andnq %r14, %r13, %r15
  1771. xorq %r12, %r15
  1772. movq %r15, 32(%rdi)
  1773. andnq %r10, %r14, %r15
  1774. xorq %r13, %r15
  1775. movq %r15, -56(%rdi)
  1776. andnq %r11, %r10, %r15
  1777. xorq %r14, %r15
  1778. movq %r15, 96(%rdi)
  1779. andnq %r12, %r11, %r15
  1780. xorq %r10, %r15
  1781. movq %r15, 8(%rdi)
  1782. # Row 3
  1783. movq 40(%rdi), %r10
  1784. movq -48(%rdi), %r11
  1785. movq 64(%rdi), %r12
  1786. movq 16(%rdi), %r13
  1787. movq -72(%rdi), %r14
  1788. xorq %r9, %r10
  1789. xorq %rdx, %r11
  1790. xorq %rax, %r12
  1791. xorq %rcx, %r13
  1792. xorq %r8, %r14
  1793. rolq $27, %r10
  1794. rolq $36, %r11
  1795. rolq $10, %r12
  1796. rolq $15, %r13
  1797. rolq $56, %r14
  1798. andnq %r13, %r12, %r15
  1799. xorq %r11, %r15
  1800. movq %r15, -48(%rdi)
  1801. andnq %r14, %r13, %r15
  1802. xorq %r12, %r15
  1803. movq %r15, 64(%rdi)
  1804. andnq %r10, %r14, %r15
  1805. xorq %r13, %r15
  1806. movq %r15, 16(%rdi)
  1807. andnq %r11, %r10, %r15
  1808. xorq %r14, %r15
  1809. movq %r15, -72(%rdi)
  1810. andnq %r12, %r11, %r15
  1811. xorq %r10, %r15
  1812. movq %r15, 40(%rdi)
  1813. # Row 4
  1814. xorq 72(%rdi), %rcx
  1815. xorq -16(%rdi), %r8
  1816. xorq -64(%rdi), %r9
  1817. xorq 48(%rdi), %rdx
  1818. xorq -40(%rdi), %rax
  1819. rorxq $2, %rcx, %r10
  1820. rorxq $9, %r8, %r11
  1821. rorxq $25, %r9, %r12
  1822. rorxq $23, %rdx, %r13
  1823. rorxq $62, %rax, %r14
  1824. andnq %r12, %r11, %rdx
  1825. andnq %r13, %r12, %rax
  1826. andnq %r14, %r13, %rcx
  1827. andnq %r10, %r14, %r8
  1828. andnq %r11, %r10, %r9
  1829. xorq %rdx, %r10
  1830. xorq %rax, %r11
  1831. xorq %rcx, %r12
  1832. xorq %r8, %r13
  1833. xorq %r9, %r14
  1834. movq %r10, 72(%rdi)
  1835. movq %r11, -16(%rdi)
  1836. movq %r12, -64(%rdi)
  1837. movq %r13, 48(%rdi)
  1838. movq %r14, -40(%rdi)
  1839. # Round 9
  1840. xorq %rsi, %r10
  1841. xorq -88(%rdi), %r13
  1842. xorq -80(%rdi), %r11
  1843. xorq -72(%rdi), %r14
  1844. xorq -56(%rdi), %r13
  1845. xorq -48(%rdi), %r11
  1846. xorq -32(%rdi), %r12
  1847. xorq -24(%rdi), %r10
  1848. xorq -8(%rdi), %r14
  1849. xorq (%rdi), %r12
  1850. xorq 8(%rdi), %r10
  1851. xorq 16(%rdi), %r13
  1852. xorq 24(%rdi), %r14
  1853. xorq 32(%rdi), %r12
  1854. xorq 40(%rdi), %r10
  1855. xorq 56(%rdi), %r11
  1856. xorq 64(%rdi), %r12
  1857. xorq 80(%rdi), %r13
  1858. xorq 88(%rdi), %r11
  1859. xorq 96(%rdi), %r14
  1860. # Calc t[0..4]
  1861. rorxq $63, %r11, %rdx
  1862. rorxq $63, %r12, %rax
  1863. rorxq $63, %r13, %rcx
  1864. rorxq $63, %r14, %r8
  1865. rorxq $63, %r10, %r9
  1866. xorq %r14, %rdx
  1867. xorq %r10, %rax
  1868. xorq %r11, %rcx
  1869. xorq %r12, %r8
  1870. xorq %r13, %r9
  1871. # Row Mix
  1872. # Row 0
  1873. movq %rsi, %r10
  1874. movq 88(%rdi), %r11
  1875. movq 32(%rdi), %r12
  1876. movq 16(%rdi), %r13
  1877. movq -40(%rdi), %r14
  1878. xorq %rdx, %r10
  1879. xorq %rax, %r11
  1880. xorq %rcx, %r12
  1881. xorq %r8, %r13
  1882. xorq %r9, %r14
  1883. rolq $44, %r11
  1884. rolq $43, %r12
  1885. rolq $21, %r13
  1886. rolq $14, %r14
  1887. andnq %r13, %r12, %r15
  1888. xorq %r11, %r15
  1889. movq %r15, 88(%rdi)
  1890. andnq %r14, %r13, %r15
  1891. xorq %r12, %r15
  1892. movq %r15, 32(%rdi)
  1893. andnq %r10, %r14, %r15
  1894. xorq %r13, %r15
  1895. movq %r15, 16(%rdi)
  1896. andnq %r11, %r10, %r15
  1897. xorq %r14, %r15
  1898. movq %r15, -40(%rdi)
  1899. andnq %r12, %r11, %rsi
  1900. xorq %r10, %rsi
  1901. # XOR in constant
  1902. xorq $0x88, %rsi
  1903. # Row 1
  1904. movq 80(%rdi), %r10
  1905. movq 24(%rdi), %r11
  1906. movq 8(%rdi), %r12
  1907. movq -48(%rdi), %r13
  1908. movq -64(%rdi), %r14
  1909. xorq %r8, %r10
  1910. xorq %r9, %r11
  1911. xorq %rdx, %r12
  1912. xorq %rax, %r13
  1913. xorq %rcx, %r14
  1914. rolq $28, %r10
  1915. rolq $20, %r11
  1916. rolq $3, %r12
  1917. rolq $45, %r13
  1918. rolq $61, %r14
  1919. andnq %r13, %r12, %r15
  1920. xorq %r11, %r15
  1921. movq %r15, 24(%rdi)
  1922. andnq %r14, %r13, %r15
  1923. xorq %r12, %r15
  1924. movq %r15, 8(%rdi)
  1925. andnq %r10, %r14, %r15
  1926. xorq %r13, %r15
  1927. movq %r15, -48(%rdi)
  1928. andnq %r11, %r10, %r15
  1929. xorq %r14, %r15
  1930. movq %r15, -64(%rdi)
  1931. andnq %r12, %r11, %r15
  1932. xorq %r10, %r15
  1933. movq %r15, 80(%rdi)
  1934. # Row 2
  1935. movq 56(%rdi), %r10
  1936. movq (%rdi), %r11
  1937. movq -56(%rdi), %r12
  1938. movq -72(%rdi), %r13
  1939. movq 72(%rdi), %r14
  1940. xorq %rax, %r10
  1941. xorq %rcx, %r11
  1942. xorq %r8, %r12
  1943. xorq %r9, %r13
  1944. xorq %rdx, %r14
  1945. rolq $0x01, %r10
  1946. rolq $6, %r11
  1947. rolq $25, %r12
  1948. rolq $8, %r13
  1949. rolq $18, %r14
  1950. andnq %r13, %r12, %r15
  1951. xorq %r11, %r15
  1952. movq %r15, (%rdi)
  1953. andnq %r14, %r13, %r15
  1954. xorq %r12, %r15
  1955. movq %r15, -56(%rdi)
  1956. andnq %r10, %r14, %r15
  1957. xorq %r13, %r15
  1958. movq %r15, -72(%rdi)
  1959. andnq %r11, %r10, %r15
  1960. xorq %r14, %r15
  1961. movq %r15, 72(%rdi)
  1962. andnq %r12, %r11, %r15
  1963. xorq %r10, %r15
  1964. movq %r15, 56(%rdi)
  1965. # Row 3
  1966. movq -8(%rdi), %r10
  1967. movq -24(%rdi), %r11
  1968. movq -80(%rdi), %r12
  1969. movq 64(%rdi), %r13
  1970. movq 48(%rdi), %r14
  1971. xorq %r9, %r10
  1972. xorq %rdx, %r11
  1973. xorq %rax, %r12
  1974. xorq %rcx, %r13
  1975. xorq %r8, %r14
  1976. rolq $27, %r10
  1977. rolq $36, %r11
  1978. rolq $10, %r12
  1979. rolq $15, %r13
  1980. rolq $56, %r14
  1981. andnq %r13, %r12, %r15
  1982. xorq %r11, %r15
  1983. movq %r15, -24(%rdi)
  1984. andnq %r14, %r13, %r15
  1985. xorq %r12, %r15
  1986. movq %r15, -80(%rdi)
  1987. andnq %r10, %r14, %r15
  1988. xorq %r13, %r15
  1989. movq %r15, 64(%rdi)
  1990. andnq %r11, %r10, %r15
  1991. xorq %r14, %r15
  1992. movq %r15, 48(%rdi)
  1993. andnq %r12, %r11, %r15
  1994. xorq %r10, %r15
  1995. movq %r15, -8(%rdi)
  1996. # Row 4
  1997. xorq -32(%rdi), %rcx
  1998. xorq -88(%rdi), %r8
  1999. xorq 96(%rdi), %r9
  2000. xorq 40(%rdi), %rdx
  2001. xorq -16(%rdi), %rax
  2002. rorxq $2, %rcx, %r10
  2003. rorxq $9, %r8, %r11
  2004. rorxq $25, %r9, %r12
  2005. rorxq $23, %rdx, %r13
  2006. rorxq $62, %rax, %r14
  2007. andnq %r12, %r11, %rdx
  2008. andnq %r13, %r12, %rax
  2009. andnq %r14, %r13, %rcx
  2010. andnq %r10, %r14, %r8
  2011. andnq %r11, %r10, %r9
  2012. xorq %rdx, %r10
  2013. xorq %rax, %r11
  2014. xorq %rcx, %r12
  2015. xorq %r8, %r13
  2016. xorq %r9, %r14
  2017. movq %r10, -32(%rdi)
  2018. movq %r11, -88(%rdi)
  2019. movq %r12, 96(%rdi)
  2020. movq %r13, 40(%rdi)
  2021. movq %r14, -16(%rdi)
  2022. # Round 10
  2023. xorq %rsi, %r10
  2024. xorq -80(%rdi), %r12
  2025. xorq -72(%rdi), %r13
  2026. xorq -64(%rdi), %r14
  2027. xorq -56(%rdi), %r12
  2028. xorq -48(%rdi), %r13
  2029. xorq -40(%rdi), %r14
  2030. xorq -24(%rdi), %r11
  2031. xorq -8(%rdi), %r10
  2032. xorq (%rdi), %r11
  2033. xorq 8(%rdi), %r12
  2034. xorq 16(%rdi), %r13
  2035. xorq 24(%rdi), %r11
  2036. xorq 32(%rdi), %r12
  2037. xorq 48(%rdi), %r14
  2038. xorq 56(%rdi), %r10
  2039. xorq 64(%rdi), %r13
  2040. xorq 72(%rdi), %r14
  2041. xorq 80(%rdi), %r10
  2042. xorq 88(%rdi), %r11
  2043. # Calc t[0..4]
  2044. rorxq $63, %r11, %rdx
  2045. rorxq $63, %r12, %rax
  2046. rorxq $63, %r13, %rcx
  2047. rorxq $63, %r14, %r8
  2048. rorxq $63, %r10, %r9
  2049. xorq %r14, %rdx
  2050. xorq %r10, %rax
  2051. xorq %r11, %rcx
  2052. xorq %r12, %r8
  2053. xorq %r13, %r9
  2054. # Row Mix
  2055. # Row 0
  2056. movq %rsi, %r10
  2057. movq 24(%rdi), %r11
  2058. movq -56(%rdi), %r12
  2059. movq 64(%rdi), %r13
  2060. movq -16(%rdi), %r14
  2061. xorq %rdx, %r10
  2062. xorq %rax, %r11
  2063. xorq %rcx, %r12
  2064. xorq %r8, %r13
  2065. xorq %r9, %r14
  2066. rolq $44, %r11
  2067. rolq $43, %r12
  2068. rolq $21, %r13
  2069. rolq $14, %r14
  2070. andnq %r13, %r12, %r15
  2071. xorq %r11, %r15
  2072. movq %r15, 24(%rdi)
  2073. andnq %r14, %r13, %r15
  2074. xorq %r12, %r15
  2075. movq %r15, -56(%rdi)
  2076. andnq %r10, %r14, %r15
  2077. xorq %r13, %r15
  2078. movq %r15, 64(%rdi)
  2079. andnq %r11, %r10, %r15
  2080. xorq %r14, %r15
  2081. movq %r15, -16(%rdi)
  2082. movq $0x80008009, %r14
  2083. andnq %r12, %r11, %rsi
  2084. xorq %r10, %rsi
  2085. # XOR in constant
  2086. xorq %r14, %rsi
  2087. # Row 1
  2088. movq 16(%rdi), %r10
  2089. movq -64(%rdi), %r11
  2090. movq 56(%rdi), %r12
  2091. movq -24(%rdi), %r13
  2092. movq 96(%rdi), %r14
  2093. xorq %r8, %r10
  2094. xorq %r9, %r11
  2095. xorq %rdx, %r12
  2096. xorq %rax, %r13
  2097. xorq %rcx, %r14
  2098. rolq $28, %r10
  2099. rolq $20, %r11
  2100. rolq $3, %r12
  2101. rolq $45, %r13
  2102. rolq $61, %r14
  2103. andnq %r13, %r12, %r15
  2104. xorq %r11, %r15
  2105. movq %r15, -64(%rdi)
  2106. andnq %r14, %r13, %r15
  2107. xorq %r12, %r15
  2108. movq %r15, 56(%rdi)
  2109. andnq %r10, %r14, %r15
  2110. xorq %r13, %r15
  2111. movq %r15, -24(%rdi)
  2112. andnq %r11, %r10, %r15
  2113. xorq %r14, %r15
  2114. movq %r15, 96(%rdi)
  2115. andnq %r12, %r11, %r15
  2116. xorq %r10, %r15
  2117. movq %r15, 16(%rdi)
  2118. # Row 2
  2119. movq 88(%rdi), %r10
  2120. movq 8(%rdi), %r11
  2121. movq -72(%rdi), %r12
  2122. movq 48(%rdi), %r13
  2123. movq -32(%rdi), %r14
  2124. xorq %rax, %r10
  2125. xorq %rcx, %r11
  2126. xorq %r8, %r12
  2127. xorq %r9, %r13
  2128. xorq %rdx, %r14
  2129. rolq $0x01, %r10
  2130. rolq $6, %r11
  2131. rolq $25, %r12
  2132. rolq $8, %r13
  2133. rolq $18, %r14
  2134. andnq %r13, %r12, %r15
  2135. xorq %r11, %r15
  2136. movq %r15, 8(%rdi)
  2137. andnq %r14, %r13, %r15
  2138. xorq %r12, %r15
  2139. movq %r15, -72(%rdi)
  2140. andnq %r10, %r14, %r15
  2141. xorq %r13, %r15
  2142. movq %r15, 48(%rdi)
  2143. andnq %r11, %r10, %r15
  2144. xorq %r14, %r15
  2145. movq %r15, -32(%rdi)
  2146. andnq %r12, %r11, %r15
  2147. xorq %r10, %r15
  2148. movq %r15, 88(%rdi)
  2149. # Row 3
  2150. movq -40(%rdi), %r10
  2151. movq 80(%rdi), %r11
  2152. movq (%rdi), %r12
  2153. movq -80(%rdi), %r13
  2154. movq 40(%rdi), %r14
  2155. xorq %r9, %r10
  2156. xorq %rdx, %r11
  2157. xorq %rax, %r12
  2158. xorq %rcx, %r13
  2159. xorq %r8, %r14
  2160. rolq $27, %r10
  2161. rolq $36, %r11
  2162. rolq $10, %r12
  2163. rolq $15, %r13
  2164. rolq $56, %r14
  2165. andnq %r13, %r12, %r15
  2166. xorq %r11, %r15
  2167. movq %r15, 80(%rdi)
  2168. andnq %r14, %r13, %r15
  2169. xorq %r12, %r15
  2170. movq %r15, (%rdi)
  2171. andnq %r10, %r14, %r15
  2172. xorq %r13, %r15
  2173. movq %r15, -80(%rdi)
  2174. andnq %r11, %r10, %r15
  2175. xorq %r14, %r15
  2176. movq %r15, 40(%rdi)
  2177. andnq %r12, %r11, %r15
  2178. xorq %r10, %r15
  2179. movq %r15, -40(%rdi)
  2180. # Row 4
  2181. xorq 32(%rdi), %rcx
  2182. xorq -48(%rdi), %r8
  2183. xorq 72(%rdi), %r9
  2184. xorq -8(%rdi), %rdx
  2185. xorq -88(%rdi), %rax
  2186. rorxq $2, %rcx, %r10
  2187. rorxq $9, %r8, %r11
  2188. rorxq $25, %r9, %r12
  2189. rorxq $23, %rdx, %r13
  2190. rorxq $62, %rax, %r14
  2191. andnq %r12, %r11, %rdx
  2192. andnq %r13, %r12, %rax
  2193. andnq %r14, %r13, %rcx
  2194. andnq %r10, %r14, %r8
  2195. andnq %r11, %r10, %r9
  2196. xorq %rdx, %r10
  2197. xorq %rax, %r11
  2198. xorq %rcx, %r12
  2199. xorq %r8, %r13
  2200. xorq %r9, %r14
  2201. movq %r10, 32(%rdi)
  2202. movq %r11, -48(%rdi)
  2203. movq %r12, 72(%rdi)
  2204. movq %r13, -8(%rdi)
  2205. movq %r14, -88(%rdi)
  2206. # Round 11
  2207. xorq %rsi, %r10
  2208. xorq -80(%rdi), %r13
  2209. xorq -72(%rdi), %r12
  2210. xorq -64(%rdi), %r11
  2211. xorq -56(%rdi), %r12
  2212. xorq -40(%rdi), %r10
  2213. xorq -32(%rdi), %r14
  2214. xorq -24(%rdi), %r13
  2215. xorq -16(%rdi), %r14
  2216. xorq (%rdi), %r12
  2217. xorq 8(%rdi), %r11
  2218. xorq 16(%rdi), %r10
  2219. xorq 24(%rdi), %r11
  2220. xorq 40(%rdi), %r14
  2221. xorq 48(%rdi), %r13
  2222. xorq 56(%rdi), %r12
  2223. xorq 64(%rdi), %r13
  2224. xorq 80(%rdi), %r11
  2225. xorq 88(%rdi), %r10
  2226. xorq 96(%rdi), %r14
  2227. # Calc t[0..4]
  2228. rorxq $63, %r11, %rdx
  2229. rorxq $63, %r12, %rax
  2230. rorxq $63, %r13, %rcx
  2231. rorxq $63, %r14, %r8
  2232. rorxq $63, %r10, %r9
  2233. xorq %r14, %rdx
  2234. xorq %r10, %rax
  2235. xorq %r11, %rcx
  2236. xorq %r12, %r8
  2237. xorq %r13, %r9
  2238. # Row Mix
  2239. # Row 0
  2240. movq %rsi, %r10
  2241. movq -64(%rdi), %r11
  2242. movq -72(%rdi), %r12
  2243. movq -80(%rdi), %r13
  2244. movq -88(%rdi), %r14
  2245. xorq %rdx, %r10
  2246. xorq %rax, %r11
  2247. xorq %rcx, %r12
  2248. xorq %r8, %r13
  2249. xorq %r9, %r14
  2250. rolq $44, %r11
  2251. rolq $43, %r12
  2252. rolq $21, %r13
  2253. rolq $14, %r14
  2254. andnq %r13, %r12, %r15
  2255. xorq %r11, %r15
  2256. movq %r15, -64(%rdi)
  2257. andnq %r14, %r13, %r15
  2258. xorq %r12, %r15
  2259. movq %r15, -72(%rdi)
  2260. andnq %r10, %r14, %r15
  2261. xorq %r13, %r15
  2262. movq %r15, -80(%rdi)
  2263. andnq %r11, %r10, %r15
  2264. xorq %r14, %r15
  2265. movq %r15, -88(%rdi)
  2266. movq $0x8000000a, %r14
  2267. andnq %r12, %r11, %rsi
  2268. xorq %r10, %rsi
  2269. # XOR in constant
  2270. xorq %r14, %rsi
  2271. # Row 1
  2272. movq 64(%rdi), %r10
  2273. movq 96(%rdi), %r11
  2274. movq 88(%rdi), %r12
  2275. movq 80(%rdi), %r13
  2276. movq 72(%rdi), %r14
  2277. xorq %r8, %r10
  2278. xorq %r9, %r11
  2279. xorq %rdx, %r12
  2280. xorq %rax, %r13
  2281. xorq %rcx, %r14
  2282. rolq $28, %r10
  2283. rolq $20, %r11
  2284. rolq $3, %r12
  2285. rolq $45, %r13
  2286. rolq $61, %r14
  2287. andnq %r13, %r12, %r15
  2288. xorq %r11, %r15
  2289. movq %r15, 96(%rdi)
  2290. andnq %r14, %r13, %r15
  2291. xorq %r12, %r15
  2292. movq %r15, 88(%rdi)
  2293. andnq %r10, %r14, %r15
  2294. xorq %r13, %r15
  2295. movq %r15, 80(%rdi)
  2296. andnq %r11, %r10, %r15
  2297. xorq %r14, %r15
  2298. movq %r15, 72(%rdi)
  2299. andnq %r12, %r11, %r15
  2300. xorq %r10, %r15
  2301. movq %r15, 64(%rdi)
  2302. # Row 2
  2303. movq 24(%rdi), %r10
  2304. movq 56(%rdi), %r11
  2305. movq 48(%rdi), %r12
  2306. movq 40(%rdi), %r13
  2307. movq 32(%rdi), %r14
  2308. xorq %rax, %r10
  2309. xorq %rcx, %r11
  2310. xorq %r8, %r12
  2311. xorq %r9, %r13
  2312. xorq %rdx, %r14
  2313. rolq $0x01, %r10
  2314. rolq $6, %r11
  2315. rolq $25, %r12
  2316. rolq $8, %r13
  2317. rolq $18, %r14
  2318. andnq %r13, %r12, %r15
  2319. xorq %r11, %r15
  2320. movq %r15, 56(%rdi)
  2321. andnq %r14, %r13, %r15
  2322. xorq %r12, %r15
  2323. movq %r15, 48(%rdi)
  2324. andnq %r10, %r14, %r15
  2325. xorq %r13, %r15
  2326. movq %r15, 40(%rdi)
  2327. andnq %r11, %r10, %r15
  2328. xorq %r14, %r15
  2329. movq %r15, 32(%rdi)
  2330. andnq %r12, %r11, %r15
  2331. xorq %r10, %r15
  2332. movq %r15, 24(%rdi)
  2333. # Row 3
  2334. movq -16(%rdi), %r10
  2335. movq 16(%rdi), %r11
  2336. movq 8(%rdi), %r12
  2337. movq (%rdi), %r13
  2338. movq -8(%rdi), %r14
  2339. xorq %r9, %r10
  2340. xorq %rdx, %r11
  2341. xorq %rax, %r12
  2342. xorq %rcx, %r13
  2343. xorq %r8, %r14
  2344. rolq $27, %r10
  2345. rolq $36, %r11
  2346. rolq $10, %r12
  2347. rolq $15, %r13
  2348. rolq $56, %r14
  2349. andnq %r13, %r12, %r15
  2350. xorq %r11, %r15
  2351. movq %r15, 16(%rdi)
  2352. andnq %r14, %r13, %r15
  2353. xorq %r12, %r15
  2354. movq %r15, 8(%rdi)
  2355. andnq %r10, %r14, %r15
  2356. xorq %r13, %r15
  2357. movq %r15, (%rdi)
  2358. andnq %r11, %r10, %r15
  2359. xorq %r14, %r15
  2360. movq %r15, -8(%rdi)
  2361. andnq %r12, %r11, %r15
  2362. xorq %r10, %r15
  2363. movq %r15, -16(%rdi)
  2364. # Row 4
  2365. xorq -56(%rdi), %rcx
  2366. xorq -24(%rdi), %r8
  2367. xorq -32(%rdi), %r9
  2368. xorq -40(%rdi), %rdx
  2369. xorq -48(%rdi), %rax
  2370. rorxq $2, %rcx, %r10
  2371. rorxq $9, %r8, %r11
  2372. rorxq $25, %r9, %r12
  2373. rorxq $23, %rdx, %r13
  2374. rorxq $62, %rax, %r14
  2375. andnq %r12, %r11, %rdx
  2376. andnq %r13, %r12, %rax
  2377. andnq %r14, %r13, %rcx
  2378. andnq %r10, %r14, %r8
  2379. andnq %r11, %r10, %r9
  2380. xorq %rdx, %r10
  2381. xorq %rax, %r11
  2382. xorq %rcx, %r12
  2383. xorq %r8, %r13
  2384. xorq %r9, %r14
  2385. movq %r10, -56(%rdi)
  2386. movq %r11, -24(%rdi)
  2387. movq %r12, -32(%rdi)
  2388. movq %r13, -40(%rdi)
  2389. movq %r14, -48(%rdi)
  2390. # Round 12
  2391. xorq %rsi, %r10
  2392. xorq -88(%rdi), %r14
  2393. xorq -80(%rdi), %r13
  2394. xorq -72(%rdi), %r12
  2395. xorq -64(%rdi), %r11
  2396. xorq -16(%rdi), %r10
  2397. xorq -8(%rdi), %r14
  2398. xorq (%rdi), %r13
  2399. xorq 8(%rdi), %r12
  2400. xorq 16(%rdi), %r11
  2401. xorq 24(%rdi), %r10
  2402. xorq 32(%rdi), %r14
  2403. xorq 40(%rdi), %r13
  2404. xorq 48(%rdi), %r12
  2405. xorq 56(%rdi), %r11
  2406. xorq 64(%rdi), %r10
  2407. xorq 72(%rdi), %r14
  2408. xorq 80(%rdi), %r13
  2409. xorq 88(%rdi), %r12
  2410. xorq 96(%rdi), %r11
  2411. # Calc t[0..4]
  2412. rorxq $63, %r11, %rdx
  2413. rorxq $63, %r12, %rax
  2414. rorxq $63, %r13, %rcx
  2415. rorxq $63, %r14, %r8
  2416. rorxq $63, %r10, %r9
  2417. xorq %r14, %rdx
  2418. xorq %r10, %rax
  2419. xorq %r11, %rcx
  2420. xorq %r12, %r8
  2421. xorq %r13, %r9
  2422. # Row Mix
  2423. # Row 0
  2424. movq %rsi, %r10
  2425. movq 96(%rdi), %r11
  2426. movq 48(%rdi), %r12
  2427. movq (%rdi), %r13
  2428. movq -48(%rdi), %r14
  2429. xorq %rdx, %r10
  2430. xorq %rax, %r11
  2431. xorq %rcx, %r12
  2432. xorq %r8, %r13
  2433. xorq %r9, %r14
  2434. rolq $44, %r11
  2435. rolq $43, %r12
  2436. rolq $21, %r13
  2437. rolq $14, %r14
  2438. andnq %r13, %r12, %r15
  2439. xorq %r11, %r15
  2440. movq %r15, 96(%rdi)
  2441. andnq %r14, %r13, %r15
  2442. xorq %r12, %r15
  2443. movq %r15, 48(%rdi)
  2444. andnq %r10, %r14, %r15
  2445. xorq %r13, %r15
  2446. movq %r15, (%rdi)
  2447. andnq %r11, %r10, %r15
  2448. xorq %r14, %r15
  2449. movq %r15, -48(%rdi)
  2450. movq $0x8000808b, %r14
  2451. andnq %r12, %r11, %rsi
  2452. xorq %r10, %rsi
  2453. # XOR in constant
  2454. xorq %r14, %rsi
  2455. # Row 1
  2456. movq -80(%rdi), %r10
  2457. movq 72(%rdi), %r11
  2458. movq 24(%rdi), %r12
  2459. movq 16(%rdi), %r13
  2460. movq -32(%rdi), %r14
  2461. xorq %r8, %r10
  2462. xorq %r9, %r11
  2463. xorq %rdx, %r12
  2464. xorq %rax, %r13
  2465. xorq %rcx, %r14
  2466. rolq $28, %r10
  2467. rolq $20, %r11
  2468. rolq $3, %r12
  2469. rolq $45, %r13
  2470. rolq $61, %r14
  2471. andnq %r13, %r12, %r15
  2472. xorq %r11, %r15
  2473. movq %r15, 72(%rdi)
  2474. andnq %r14, %r13, %r15
  2475. xorq %r12, %r15
  2476. movq %r15, 24(%rdi)
  2477. andnq %r10, %r14, %r15
  2478. xorq %r13, %r15
  2479. movq %r15, 16(%rdi)
  2480. andnq %r11, %r10, %r15
  2481. xorq %r14, %r15
  2482. movq %r15, -32(%rdi)
  2483. andnq %r12, %r11, %r15
  2484. xorq %r10, %r15
  2485. movq %r15, -80(%rdi)
  2486. # Row 2
  2487. movq -64(%rdi), %r10
  2488. movq 88(%rdi), %r11
  2489. movq 40(%rdi), %r12
  2490. movq -8(%rdi), %r13
  2491. movq -56(%rdi), %r14
  2492. xorq %rax, %r10
  2493. xorq %rcx, %r11
  2494. xorq %r8, %r12
  2495. xorq %r9, %r13
  2496. xorq %rdx, %r14
  2497. rolq $0x01, %r10
  2498. rolq $6, %r11
  2499. rolq $25, %r12
  2500. rolq $8, %r13
  2501. rolq $18, %r14
  2502. andnq %r13, %r12, %r15
  2503. xorq %r11, %r15
  2504. movq %r15, 88(%rdi)
  2505. andnq %r14, %r13, %r15
  2506. xorq %r12, %r15
  2507. movq %r15, 40(%rdi)
  2508. andnq %r10, %r14, %r15
  2509. xorq %r13, %r15
  2510. movq %r15, -8(%rdi)
  2511. andnq %r11, %r10, %r15
  2512. xorq %r14, %r15
  2513. movq %r15, -56(%rdi)
  2514. andnq %r12, %r11, %r15
  2515. xorq %r10, %r15
  2516. movq %r15, -64(%rdi)
  2517. # Row 3
  2518. movq -88(%rdi), %r10
  2519. movq 64(%rdi), %r11
  2520. movq 56(%rdi), %r12
  2521. movq 8(%rdi), %r13
  2522. movq -40(%rdi), %r14
  2523. xorq %r9, %r10
  2524. xorq %rdx, %r11
  2525. xorq %rax, %r12
  2526. xorq %rcx, %r13
  2527. xorq %r8, %r14
  2528. rolq $27, %r10
  2529. rolq $36, %r11
  2530. rolq $10, %r12
  2531. rolq $15, %r13
  2532. rolq $56, %r14
  2533. andnq %r13, %r12, %r15
  2534. xorq %r11, %r15
  2535. movq %r15, 64(%rdi)
  2536. andnq %r14, %r13, %r15
  2537. xorq %r12, %r15
  2538. movq %r15, 56(%rdi)
  2539. andnq %r10, %r14, %r15
  2540. xorq %r13, %r15
  2541. movq %r15, 8(%rdi)
  2542. andnq %r11, %r10, %r15
  2543. xorq %r14, %r15
  2544. movq %r15, -40(%rdi)
  2545. andnq %r12, %r11, %r15
  2546. xorq %r10, %r15
  2547. movq %r15, -88(%rdi)
  2548. # Row 4
  2549. xorq -72(%rdi), %rcx
  2550. xorq 80(%rdi), %r8
  2551. xorq 32(%rdi), %r9
  2552. xorq -16(%rdi), %rdx
  2553. xorq -24(%rdi), %rax
  2554. rorxq $2, %rcx, %r10
  2555. rorxq $9, %r8, %r11
  2556. rorxq $25, %r9, %r12
  2557. rorxq $23, %rdx, %r13
  2558. rorxq $62, %rax, %r14
  2559. andnq %r12, %r11, %rdx
  2560. andnq %r13, %r12, %rax
  2561. andnq %r14, %r13, %rcx
  2562. andnq %r10, %r14, %r8
  2563. andnq %r11, %r10, %r9
  2564. xorq %rdx, %r10
  2565. xorq %rax, %r11
  2566. xorq %rcx, %r12
  2567. xorq %r8, %r13
  2568. xorq %r9, %r14
  2569. movq %r10, -72(%rdi)
  2570. movq %r11, 80(%rdi)
  2571. movq %r12, 32(%rdi)
  2572. movq %r13, -16(%rdi)
  2573. movq %r14, -24(%rdi)
  2574. # Round 13
  2575. xorq %rsi, %r10
  2576. xorq -88(%rdi), %r10
  2577. xorq -80(%rdi), %r10
  2578. xorq -64(%rdi), %r10
  2579. xorq -56(%rdi), %r14
  2580. xorq -48(%rdi), %r14
  2581. xorq -40(%rdi), %r14
  2582. xorq -32(%rdi), %r14
  2583. xorq -8(%rdi), %r13
  2584. xorq (%rdi), %r13
  2585. xorq 8(%rdi), %r13
  2586. xorq 16(%rdi), %r13
  2587. xorq 24(%rdi), %r12
  2588. xorq 40(%rdi), %r12
  2589. xorq 48(%rdi), %r12
  2590. xorq 56(%rdi), %r12
  2591. xorq 64(%rdi), %r11
  2592. xorq 72(%rdi), %r11
  2593. xorq 88(%rdi), %r11
  2594. xorq 96(%rdi), %r11
  2595. # Calc t[0..4]
  2596. rorxq $63, %r11, %rdx
  2597. rorxq $63, %r12, %rax
  2598. rorxq $63, %r13, %rcx
  2599. rorxq $63, %r14, %r8
  2600. rorxq $63, %r10, %r9
  2601. xorq %r14, %rdx
  2602. xorq %r10, %rax
  2603. xorq %r11, %rcx
  2604. xorq %r12, %r8
  2605. xorq %r13, %r9
  2606. # Row Mix
  2607. # Row 0
  2608. movq %rsi, %r10
  2609. movq 72(%rdi), %r11
  2610. movq 40(%rdi), %r12
  2611. movq 8(%rdi), %r13
  2612. movq -24(%rdi), %r14
  2613. xorq %rdx, %r10
  2614. xorq %rax, %r11
  2615. xorq %rcx, %r12
  2616. xorq %r8, %r13
  2617. xorq %r9, %r14
  2618. rolq $44, %r11
  2619. rolq $43, %r12
  2620. rolq $21, %r13
  2621. rolq $14, %r14
  2622. andnq %r13, %r12, %r15
  2623. xorq %r11, %r15
  2624. movq %r15, 72(%rdi)
  2625. andnq %r14, %r13, %r15
  2626. xorq %r12, %r15
  2627. movq %r15, 40(%rdi)
  2628. andnq %r10, %r14, %r15
  2629. xorq %r13, %r15
  2630. movq %r15, 8(%rdi)
  2631. andnq %r11, %r10, %r15
  2632. xorq %r14, %r15
  2633. movq %r15, -24(%rdi)
  2634. movq $0x800000000000008b, %r14
  2635. andnq %r12, %r11, %rsi
  2636. xorq %r10, %rsi
  2637. # XOR in constant
  2638. xorq %r14, %rsi
  2639. # Row 1
  2640. movq (%rdi), %r10
  2641. movq -32(%rdi), %r11
  2642. movq -64(%rdi), %r12
  2643. movq 64(%rdi), %r13
  2644. movq 32(%rdi), %r14
  2645. xorq %r8, %r10
  2646. xorq %r9, %r11
  2647. xorq %rdx, %r12
  2648. xorq %rax, %r13
  2649. xorq %rcx, %r14
  2650. rolq $28, %r10
  2651. rolq $20, %r11
  2652. rolq $3, %r12
  2653. rolq $45, %r13
  2654. rolq $61, %r14
  2655. andnq %r13, %r12, %r15
  2656. xorq %r11, %r15
  2657. movq %r15, -32(%rdi)
  2658. andnq %r14, %r13, %r15
  2659. xorq %r12, %r15
  2660. movq %r15, -64(%rdi)
  2661. andnq %r10, %r14, %r15
  2662. xorq %r13, %r15
  2663. movq %r15, 64(%rdi)
  2664. andnq %r11, %r10, %r15
  2665. xorq %r14, %r15
  2666. movq %r15, 32(%rdi)
  2667. andnq %r12, %r11, %r15
  2668. xorq %r10, %r15
  2669. movq %r15, (%rdi)
  2670. # Row 2
  2671. movq 96(%rdi), %r10
  2672. movq 24(%rdi), %r11
  2673. movq -8(%rdi), %r12
  2674. movq -40(%rdi), %r13
  2675. movq -72(%rdi), %r14
  2676. xorq %rax, %r10
  2677. xorq %rcx, %r11
  2678. xorq %r8, %r12
  2679. xorq %r9, %r13
  2680. xorq %rdx, %r14
  2681. rolq $0x01, %r10
  2682. rolq $6, %r11
  2683. rolq $25, %r12
  2684. rolq $8, %r13
  2685. rolq $18, %r14
  2686. andnq %r13, %r12, %r15
  2687. xorq %r11, %r15
  2688. movq %r15, 24(%rdi)
  2689. andnq %r14, %r13, %r15
  2690. xorq %r12, %r15
  2691. movq %r15, -8(%rdi)
  2692. andnq %r10, %r14, %r15
  2693. xorq %r13, %r15
  2694. movq %r15, -40(%rdi)
  2695. andnq %r11, %r10, %r15
  2696. xorq %r14, %r15
  2697. movq %r15, -72(%rdi)
  2698. andnq %r12, %r11, %r15
  2699. xorq %r10, %r15
  2700. movq %r15, 96(%rdi)
  2701. # Row 3
  2702. movq -48(%rdi), %r10
  2703. movq -80(%rdi), %r11
  2704. movq 88(%rdi), %r12
  2705. movq 56(%rdi), %r13
  2706. movq -16(%rdi), %r14
  2707. xorq %r9, %r10
  2708. xorq %rdx, %r11
  2709. xorq %rax, %r12
  2710. xorq %rcx, %r13
  2711. xorq %r8, %r14
  2712. rolq $27, %r10
  2713. rolq $36, %r11
  2714. rolq $10, %r12
  2715. rolq $15, %r13
  2716. rolq $56, %r14
  2717. andnq %r13, %r12, %r15
  2718. xorq %r11, %r15
  2719. movq %r15, -80(%rdi)
  2720. andnq %r14, %r13, %r15
  2721. xorq %r12, %r15
  2722. movq %r15, 88(%rdi)
  2723. andnq %r10, %r14, %r15
  2724. xorq %r13, %r15
  2725. movq %r15, 56(%rdi)
  2726. andnq %r11, %r10, %r15
  2727. xorq %r14, %r15
  2728. movq %r15, -16(%rdi)
  2729. andnq %r12, %r11, %r15
  2730. xorq %r10, %r15
  2731. movq %r15, -48(%rdi)
  2732. # Row 4
  2733. xorq 48(%rdi), %rcx
  2734. xorq 16(%rdi), %r8
  2735. xorq -56(%rdi), %r9
  2736. xorq -88(%rdi), %rdx
  2737. xorq 80(%rdi), %rax
  2738. rorxq $2, %rcx, %r10
  2739. rorxq $9, %r8, %r11
  2740. rorxq $25, %r9, %r12
  2741. rorxq $23, %rdx, %r13
  2742. rorxq $62, %rax, %r14
  2743. andnq %r12, %r11, %rdx
  2744. andnq %r13, %r12, %rax
  2745. andnq %r14, %r13, %rcx
  2746. andnq %r10, %r14, %r8
  2747. andnq %r11, %r10, %r9
  2748. xorq %rdx, %r10
  2749. xorq %rax, %r11
  2750. xorq %rcx, %r12
  2751. xorq %r8, %r13
  2752. xorq %r9, %r14
  2753. movq %r10, 48(%rdi)
  2754. movq %r11, 16(%rdi)
  2755. movq %r12, -56(%rdi)
  2756. movq %r13, -88(%rdi)
  2757. movq %r14, 80(%rdi)
  2758. # Round 14
  2759. xorq %rsi, %r10
  2760. xorq -80(%rdi), %r11
  2761. xorq -72(%rdi), %r14
  2762. xorq -64(%rdi), %r12
  2763. xorq -48(%rdi), %r10
  2764. xorq -40(%rdi), %r13
  2765. xorq -32(%rdi), %r11
  2766. xorq -24(%rdi), %r14
  2767. xorq -16(%rdi), %r14
  2768. xorq -8(%rdi), %r12
  2769. xorq (%rdi), %r10
  2770. xorq 8(%rdi), %r13
  2771. xorq 24(%rdi), %r11
  2772. xorq 32(%rdi), %r14
  2773. xorq 40(%rdi), %r12
  2774. xorq 56(%rdi), %r13
  2775. xorq 64(%rdi), %r13
  2776. xorq 72(%rdi), %r11
  2777. xorq 88(%rdi), %r12
  2778. xorq 96(%rdi), %r10
  2779. # Calc t[0..4]
  2780. rorxq $63, %r11, %rdx
  2781. rorxq $63, %r12, %rax
  2782. rorxq $63, %r13, %rcx
  2783. rorxq $63, %r14, %r8
  2784. rorxq $63, %r10, %r9
  2785. xorq %r14, %rdx
  2786. xorq %r10, %rax
  2787. xorq %r11, %rcx
  2788. xorq %r12, %r8
  2789. xorq %r13, %r9
  2790. # Row Mix
  2791. # Row 0
  2792. movq %rsi, %r10
  2793. movq -32(%rdi), %r11
  2794. movq -8(%rdi), %r12
  2795. movq 56(%rdi), %r13
  2796. movq 80(%rdi), %r14
  2797. xorq %rdx, %r10
  2798. xorq %rax, %r11
  2799. xorq %rcx, %r12
  2800. xorq %r8, %r13
  2801. xorq %r9, %r14
  2802. rolq $44, %r11
  2803. rolq $43, %r12
  2804. rolq $21, %r13
  2805. rolq $14, %r14
  2806. andnq %r13, %r12, %r15
  2807. xorq %r11, %r15
  2808. movq %r15, -32(%rdi)
  2809. andnq %r14, %r13, %r15
  2810. xorq %r12, %r15
  2811. movq %r15, -8(%rdi)
  2812. andnq %r10, %r14, %r15
  2813. xorq %r13, %r15
  2814. movq %r15, 56(%rdi)
  2815. andnq %r11, %r10, %r15
  2816. xorq %r14, %r15
  2817. movq %r15, 80(%rdi)
  2818. movq $0x8000000000008089, %r14
  2819. andnq %r12, %r11, %rsi
  2820. xorq %r10, %rsi
  2821. # XOR in constant
  2822. xorq %r14, %rsi
  2823. # Row 1
  2824. movq 8(%rdi), %r10
  2825. movq 32(%rdi), %r11
  2826. movq 96(%rdi), %r12
  2827. movq -80(%rdi), %r13
  2828. movq -56(%rdi), %r14
  2829. xorq %r8, %r10
  2830. xorq %r9, %r11
  2831. xorq %rdx, %r12
  2832. xorq %rax, %r13
  2833. xorq %rcx, %r14
  2834. rolq $28, %r10
  2835. rolq $20, %r11
  2836. rolq $3, %r12
  2837. rolq $45, %r13
  2838. rolq $61, %r14
  2839. andnq %r13, %r12, %r15
  2840. xorq %r11, %r15
  2841. movq %r15, 32(%rdi)
  2842. andnq %r14, %r13, %r15
  2843. xorq %r12, %r15
  2844. movq %r15, 96(%rdi)
  2845. andnq %r10, %r14, %r15
  2846. xorq %r13, %r15
  2847. movq %r15, -80(%rdi)
  2848. andnq %r11, %r10, %r15
  2849. xorq %r14, %r15
  2850. movq %r15, -56(%rdi)
  2851. andnq %r12, %r11, %r15
  2852. xorq %r10, %r15
  2853. movq %r15, 8(%rdi)
  2854. # Row 2
  2855. movq 72(%rdi), %r10
  2856. movq -64(%rdi), %r11
  2857. movq -40(%rdi), %r12
  2858. movq -16(%rdi), %r13
  2859. movq 48(%rdi), %r14
  2860. xorq %rax, %r10
  2861. xorq %rcx, %r11
  2862. xorq %r8, %r12
  2863. xorq %r9, %r13
  2864. xorq %rdx, %r14
  2865. rolq $0x01, %r10
  2866. rolq $6, %r11
  2867. rolq $25, %r12
  2868. rolq $8, %r13
  2869. rolq $18, %r14
  2870. andnq %r13, %r12, %r15
  2871. xorq %r11, %r15
  2872. movq %r15, -64(%rdi)
  2873. andnq %r14, %r13, %r15
  2874. xorq %r12, %r15
  2875. movq %r15, -40(%rdi)
  2876. andnq %r10, %r14, %r15
  2877. xorq %r13, %r15
  2878. movq %r15, -16(%rdi)
  2879. andnq %r11, %r10, %r15
  2880. xorq %r14, %r15
  2881. movq %r15, 48(%rdi)
  2882. andnq %r12, %r11, %r15
  2883. xorq %r10, %r15
  2884. movq %r15, 72(%rdi)
  2885. # Row 3
  2886. movq -24(%rdi), %r10
  2887. movq (%rdi), %r11
  2888. movq 24(%rdi), %r12
  2889. movq 88(%rdi), %r13
  2890. movq -88(%rdi), %r14
  2891. xorq %r9, %r10
  2892. xorq %rdx, %r11
  2893. xorq %rax, %r12
  2894. xorq %rcx, %r13
  2895. xorq %r8, %r14
  2896. rolq $27, %r10
  2897. rolq $36, %r11
  2898. rolq $10, %r12
  2899. rolq $15, %r13
  2900. rolq $56, %r14
  2901. andnq %r13, %r12, %r15
  2902. xorq %r11, %r15
  2903. movq %r15, (%rdi)
  2904. andnq %r14, %r13, %r15
  2905. xorq %r12, %r15
  2906. movq %r15, 24(%rdi)
  2907. andnq %r10, %r14, %r15
  2908. xorq %r13, %r15
  2909. movq %r15, 88(%rdi)
  2910. andnq %r11, %r10, %r15
  2911. xorq %r14, %r15
  2912. movq %r15, -88(%rdi)
  2913. andnq %r12, %r11, %r15
  2914. xorq %r10, %r15
  2915. movq %r15, -24(%rdi)
  2916. # Row 4
  2917. xorq 40(%rdi), %rcx
  2918. xorq 64(%rdi), %r8
  2919. xorq -72(%rdi), %r9
  2920. xorq -48(%rdi), %rdx
  2921. xorq 16(%rdi), %rax
  2922. rorxq $2, %rcx, %r10
  2923. rorxq $9, %r8, %r11
  2924. rorxq $25, %r9, %r12
  2925. rorxq $23, %rdx, %r13
  2926. rorxq $62, %rax, %r14
  2927. andnq %r12, %r11, %rdx
  2928. andnq %r13, %r12, %rax
  2929. andnq %r14, %r13, %rcx
  2930. andnq %r10, %r14, %r8
  2931. andnq %r11, %r10, %r9
  2932. xorq %rdx, %r10
  2933. xorq %rax, %r11
  2934. xorq %rcx, %r12
  2935. xorq %r8, %r13
  2936. xorq %r9, %r14
  2937. movq %r10, 40(%rdi)
  2938. movq %r11, 64(%rdi)
  2939. movq %r12, -72(%rdi)
  2940. movq %r13, -48(%rdi)
  2941. movq %r14, 16(%rdi)
  2942. # Round 15
  2943. xorq %rsi, %r10
  2944. xorq -88(%rdi), %r14
  2945. xorq -80(%rdi), %r13
  2946. xorq -64(%rdi), %r11
  2947. xorq -56(%rdi), %r14
  2948. xorq -40(%rdi), %r12
  2949. xorq -32(%rdi), %r11
  2950. xorq -24(%rdi), %r10
  2951. xorq -16(%rdi), %r13
  2952. xorq -8(%rdi), %r12
  2953. xorq (%rdi), %r11
  2954. xorq 8(%rdi), %r10
  2955. xorq 24(%rdi), %r12
  2956. xorq 32(%rdi), %r11
  2957. xorq 48(%rdi), %r14
  2958. xorq 56(%rdi), %r13
  2959. xorq 72(%rdi), %r10
  2960. xorq 80(%rdi), %r14
  2961. xorq 88(%rdi), %r13
  2962. xorq 96(%rdi), %r12
  2963. # Calc t[0..4]
  2964. rorxq $63, %r11, %rdx
  2965. rorxq $63, %r12, %rax
  2966. rorxq $63, %r13, %rcx
  2967. rorxq $63, %r14, %r8
  2968. rorxq $63, %r10, %r9
  2969. xorq %r14, %rdx
  2970. xorq %r10, %rax
  2971. xorq %r11, %rcx
  2972. xorq %r12, %r8
  2973. xorq %r13, %r9
  2974. # Row Mix
  2975. # Row 0
  2976. movq %rsi, %r10
  2977. movq 32(%rdi), %r11
  2978. movq -40(%rdi), %r12
  2979. movq 88(%rdi), %r13
  2980. movq 16(%rdi), %r14
  2981. xorq %rdx, %r10
  2982. xorq %rax, %r11
  2983. xorq %rcx, %r12
  2984. xorq %r8, %r13
  2985. xorq %r9, %r14
  2986. rolq $44, %r11
  2987. rolq $43, %r12
  2988. rolq $21, %r13
  2989. rolq $14, %r14
  2990. andnq %r13, %r12, %r15
  2991. xorq %r11, %r15
  2992. movq %r15, 32(%rdi)
  2993. andnq %r14, %r13, %r15
  2994. xorq %r12, %r15
  2995. movq %r15, -40(%rdi)
  2996. andnq %r10, %r14, %r15
  2997. xorq %r13, %r15
  2998. movq %r15, 88(%rdi)
  2999. andnq %r11, %r10, %r15
  3000. xorq %r14, %r15
  3001. movq %r15, 16(%rdi)
  3002. movq $0x8000000000008003, %r14
  3003. andnq %r12, %r11, %rsi
  3004. xorq %r10, %rsi
  3005. # XOR in constant
  3006. xorq %r14, %rsi
  3007. # Row 1
  3008. movq 56(%rdi), %r10
  3009. movq -56(%rdi), %r11
  3010. movq 72(%rdi), %r12
  3011. movq (%rdi), %r13
  3012. movq -72(%rdi), %r14
  3013. xorq %r8, %r10
  3014. xorq %r9, %r11
  3015. xorq %rdx, %r12
  3016. xorq %rax, %r13
  3017. xorq %rcx, %r14
  3018. rolq $28, %r10
  3019. rolq $20, %r11
  3020. rolq $3, %r12
  3021. rolq $45, %r13
  3022. rolq $61, %r14
  3023. andnq %r13, %r12, %r15
  3024. xorq %r11, %r15
  3025. movq %r15, -56(%rdi)
  3026. andnq %r14, %r13, %r15
  3027. xorq %r12, %r15
  3028. movq %r15, 72(%rdi)
  3029. andnq %r10, %r14, %r15
  3030. xorq %r13, %r15
  3031. movq %r15, (%rdi)
  3032. andnq %r11, %r10, %r15
  3033. xorq %r14, %r15
  3034. movq %r15, -72(%rdi)
  3035. andnq %r12, %r11, %r15
  3036. xorq %r10, %r15
  3037. movq %r15, 56(%rdi)
  3038. # Row 2
  3039. movq -32(%rdi), %r10
  3040. movq 96(%rdi), %r11
  3041. movq -16(%rdi), %r12
  3042. movq -88(%rdi), %r13
  3043. movq 40(%rdi), %r14
  3044. xorq %rax, %r10
  3045. xorq %rcx, %r11
  3046. xorq %r8, %r12
  3047. xorq %r9, %r13
  3048. xorq %rdx, %r14
  3049. rolq $0x01, %r10
  3050. rolq $6, %r11
  3051. rolq $25, %r12
  3052. rolq $8, %r13
  3053. rolq $18, %r14
  3054. andnq %r13, %r12, %r15
  3055. xorq %r11, %r15
  3056. movq %r15, 96(%rdi)
  3057. andnq %r14, %r13, %r15
  3058. xorq %r12, %r15
  3059. movq %r15, -16(%rdi)
  3060. andnq %r10, %r14, %r15
  3061. xorq %r13, %r15
  3062. movq %r15, -88(%rdi)
  3063. andnq %r11, %r10, %r15
  3064. xorq %r14, %r15
  3065. movq %r15, 40(%rdi)
  3066. andnq %r12, %r11, %r15
  3067. xorq %r10, %r15
  3068. movq %r15, -32(%rdi)
  3069. # Row 3
  3070. movq 80(%rdi), %r10
  3071. movq 8(%rdi), %r11
  3072. movq -64(%rdi), %r12
  3073. movq 24(%rdi), %r13
  3074. movq -48(%rdi), %r14
  3075. xorq %r9, %r10
  3076. xorq %rdx, %r11
  3077. xorq %rax, %r12
  3078. xorq %rcx, %r13
  3079. xorq %r8, %r14
  3080. rolq $27, %r10
  3081. rolq $36, %r11
  3082. rolq $10, %r12
  3083. rolq $15, %r13
  3084. rolq $56, %r14
  3085. andnq %r13, %r12, %r15
  3086. xorq %r11, %r15
  3087. movq %r15, 8(%rdi)
  3088. andnq %r14, %r13, %r15
  3089. xorq %r12, %r15
  3090. movq %r15, -64(%rdi)
  3091. andnq %r10, %r14, %r15
  3092. xorq %r13, %r15
  3093. movq %r15, 24(%rdi)
  3094. andnq %r11, %r10, %r15
  3095. xorq %r14, %r15
  3096. movq %r15, -48(%rdi)
  3097. andnq %r12, %r11, %r15
  3098. xorq %r10, %r15
  3099. movq %r15, 80(%rdi)
  3100. # Row 4
  3101. xorq -8(%rdi), %rcx
  3102. xorq -80(%rdi), %r8
  3103. xorq 48(%rdi), %r9
  3104. xorq -24(%rdi), %rdx
  3105. xorq 64(%rdi), %rax
  3106. rorxq $2, %rcx, %r10
  3107. rorxq $9, %r8, %r11
  3108. rorxq $25, %r9, %r12
  3109. rorxq $23, %rdx, %r13
  3110. rorxq $62, %rax, %r14
  3111. andnq %r12, %r11, %rdx
  3112. andnq %r13, %r12, %rax
  3113. andnq %r14, %r13, %rcx
  3114. andnq %r10, %r14, %r8
  3115. andnq %r11, %r10, %r9
  3116. xorq %rdx, %r10
  3117. xorq %rax, %r11
  3118. xorq %rcx, %r12
  3119. xorq %r8, %r13
  3120. xorq %r9, %r14
  3121. movq %r10, -8(%rdi)
  3122. movq %r11, -80(%rdi)
  3123. movq %r12, 48(%rdi)
  3124. movq %r13, -24(%rdi)
  3125. movq %r14, 64(%rdi)
  3126. # Round 16
  3127. xorq %rsi, %r10
  3128. xorq -88(%rdi), %r13
  3129. xorq -72(%rdi), %r14
  3130. xorq -64(%rdi), %r12
  3131. xorq -56(%rdi), %r11
  3132. xorq -48(%rdi), %r14
  3133. xorq -40(%rdi), %r12
  3134. xorq -32(%rdi), %r10
  3135. xorq -16(%rdi), %r12
  3136. xorq (%rdi), %r13
  3137. xorq 8(%rdi), %r11
  3138. xorq 16(%rdi), %r14
  3139. xorq 24(%rdi), %r13
  3140. xorq 32(%rdi), %r11
  3141. xorq 40(%rdi), %r14
  3142. xorq 56(%rdi), %r10
  3143. xorq 72(%rdi), %r12
  3144. xorq 80(%rdi), %r10
  3145. xorq 88(%rdi), %r13
  3146. xorq 96(%rdi), %r11
  3147. # Calc t[0..4]
  3148. rorxq $63, %r11, %rdx
  3149. rorxq $63, %r12, %rax
  3150. rorxq $63, %r13, %rcx
  3151. rorxq $63, %r14, %r8
  3152. rorxq $63, %r10, %r9
  3153. xorq %r14, %rdx
  3154. xorq %r10, %rax
  3155. xorq %r11, %rcx
  3156. xorq %r12, %r8
  3157. xorq %r13, %r9
  3158. # Row Mix
  3159. # Row 0
  3160. movq %rsi, %r10
  3161. movq -56(%rdi), %r11
  3162. movq -16(%rdi), %r12
  3163. movq 24(%rdi), %r13
  3164. movq 64(%rdi), %r14
  3165. xorq %rdx, %r10
  3166. xorq %rax, %r11
  3167. xorq %rcx, %r12
  3168. xorq %r8, %r13
  3169. xorq %r9, %r14
  3170. rolq $44, %r11
  3171. rolq $43, %r12
  3172. rolq $21, %r13
  3173. rolq $14, %r14
  3174. andnq %r13, %r12, %r15
  3175. xorq %r11, %r15
  3176. movq %r15, -56(%rdi)
  3177. andnq %r14, %r13, %r15
  3178. xorq %r12, %r15
  3179. movq %r15, -16(%rdi)
  3180. andnq %r10, %r14, %r15
  3181. xorq %r13, %r15
  3182. movq %r15, 24(%rdi)
  3183. andnq %r11, %r10, %r15
  3184. xorq %r14, %r15
  3185. movq %r15, 64(%rdi)
  3186. movq $0x8000000000008002, %r14
  3187. andnq %r12, %r11, %rsi
  3188. xorq %r10, %rsi
  3189. # XOR in constant
  3190. xorq %r14, %rsi
  3191. # Row 1
  3192. movq 88(%rdi), %r10
  3193. movq -72(%rdi), %r11
  3194. movq -32(%rdi), %r12
  3195. movq 8(%rdi), %r13
  3196. movq 48(%rdi), %r14
  3197. xorq %r8, %r10
  3198. xorq %r9, %r11
  3199. xorq %rdx, %r12
  3200. xorq %rax, %r13
  3201. xorq %rcx, %r14
  3202. rolq $28, %r10
  3203. rolq $20, %r11
  3204. rolq $3, %r12
  3205. rolq $45, %r13
  3206. rolq $61, %r14
  3207. andnq %r13, %r12, %r15
  3208. xorq %r11, %r15
  3209. movq %r15, -72(%rdi)
  3210. andnq %r14, %r13, %r15
  3211. xorq %r12, %r15
  3212. movq %r15, -32(%rdi)
  3213. andnq %r10, %r14, %r15
  3214. xorq %r13, %r15
  3215. movq %r15, 8(%rdi)
  3216. andnq %r11, %r10, %r15
  3217. xorq %r14, %r15
  3218. movq %r15, 48(%rdi)
  3219. andnq %r12, %r11, %r15
  3220. xorq %r10, %r15
  3221. movq %r15, 88(%rdi)
  3222. # Row 2
  3223. movq 32(%rdi), %r10
  3224. movq 72(%rdi), %r11
  3225. movq -88(%rdi), %r12
  3226. movq -48(%rdi), %r13
  3227. movq -8(%rdi), %r14
  3228. xorq %rax, %r10
  3229. xorq %rcx, %r11
  3230. xorq %r8, %r12
  3231. xorq %r9, %r13
  3232. xorq %rdx, %r14
  3233. rolq $0x01, %r10
  3234. rolq $6, %r11
  3235. rolq $25, %r12
  3236. rolq $8, %r13
  3237. rolq $18, %r14
  3238. andnq %r13, %r12, %r15
  3239. xorq %r11, %r15
  3240. movq %r15, 72(%rdi)
  3241. andnq %r14, %r13, %r15
  3242. xorq %r12, %r15
  3243. movq %r15, -88(%rdi)
  3244. andnq %r10, %r14, %r15
  3245. xorq %r13, %r15
  3246. movq %r15, -48(%rdi)
  3247. andnq %r11, %r10, %r15
  3248. xorq %r14, %r15
  3249. movq %r15, -8(%rdi)
  3250. andnq %r12, %r11, %r15
  3251. xorq %r10, %r15
  3252. movq %r15, 32(%rdi)
  3253. # Row 3
  3254. movq 16(%rdi), %r10
  3255. movq 56(%rdi), %r11
  3256. movq 96(%rdi), %r12
  3257. movq -64(%rdi), %r13
  3258. movq -24(%rdi), %r14
  3259. xorq %r9, %r10
  3260. xorq %rdx, %r11
  3261. xorq %rax, %r12
  3262. xorq %rcx, %r13
  3263. xorq %r8, %r14
  3264. rolq $27, %r10
  3265. rolq $36, %r11
  3266. rolq $10, %r12
  3267. rolq $15, %r13
  3268. rolq $56, %r14
  3269. andnq %r13, %r12, %r15
  3270. xorq %r11, %r15
  3271. movq %r15, 56(%rdi)
  3272. andnq %r14, %r13, %r15
  3273. xorq %r12, %r15
  3274. movq %r15, 96(%rdi)
  3275. andnq %r10, %r14, %r15
  3276. xorq %r13, %r15
  3277. movq %r15, -64(%rdi)
  3278. andnq %r11, %r10, %r15
  3279. xorq %r14, %r15
  3280. movq %r15, -24(%rdi)
  3281. andnq %r12, %r11, %r15
  3282. xorq %r10, %r15
  3283. movq %r15, 16(%rdi)
  3284. # Row 4
  3285. xorq -40(%rdi), %rcx
  3286. xorq (%rdi), %r8
  3287. xorq 40(%rdi), %r9
  3288. xorq 80(%rdi), %rdx
  3289. xorq -80(%rdi), %rax
  3290. rorxq $2, %rcx, %r10
  3291. rorxq $9, %r8, %r11
  3292. rorxq $25, %r9, %r12
  3293. rorxq $23, %rdx, %r13
  3294. rorxq $62, %rax, %r14
  3295. andnq %r12, %r11, %rdx
  3296. andnq %r13, %r12, %rax
  3297. andnq %r14, %r13, %rcx
  3298. andnq %r10, %r14, %r8
  3299. andnq %r11, %r10, %r9
  3300. xorq %rdx, %r10
  3301. xorq %rax, %r11
  3302. xorq %rcx, %r12
  3303. xorq %r8, %r13
  3304. xorq %r9, %r14
  3305. movq %r10, -40(%rdi)
  3306. movq %r11, (%rdi)
  3307. movq %r12, 40(%rdi)
  3308. movq %r13, 80(%rdi)
  3309. movq %r14, -80(%rdi)
  3310. # Round 17
  3311. xorq %rsi, %r10
  3312. xorq -88(%rdi), %r12
  3313. xorq -72(%rdi), %r11
  3314. xorq -64(%rdi), %r13
  3315. xorq -56(%rdi), %r11
  3316. xorq -48(%rdi), %r13
  3317. xorq -32(%rdi), %r12
  3318. xorq -24(%rdi), %r14
  3319. xorq -16(%rdi), %r12
  3320. xorq -8(%rdi), %r14
  3321. xorq 8(%rdi), %r13
  3322. xorq 16(%rdi), %r10
  3323. xorq 24(%rdi), %r13
  3324. xorq 32(%rdi), %r10
  3325. xorq 48(%rdi), %r14
  3326. xorq 56(%rdi), %r11
  3327. xorq 64(%rdi), %r14
  3328. xorq 72(%rdi), %r11
  3329. xorq 88(%rdi), %r10
  3330. xorq 96(%rdi), %r12
  3331. # Calc t[0..4]
  3332. rorxq $63, %r11, %rdx
  3333. rorxq $63, %r12, %rax
  3334. rorxq $63, %r13, %rcx
  3335. rorxq $63, %r14, %r8
  3336. rorxq $63, %r10, %r9
  3337. xorq %r14, %rdx
  3338. xorq %r10, %rax
  3339. xorq %r11, %rcx
  3340. xorq %r12, %r8
  3341. xorq %r13, %r9
  3342. # Row Mix
  3343. # Row 0
  3344. movq %rsi, %r10
  3345. movq -72(%rdi), %r11
  3346. movq -88(%rdi), %r12
  3347. movq -64(%rdi), %r13
  3348. movq -80(%rdi), %r14
  3349. xorq %rdx, %r10
  3350. xorq %rax, %r11
  3351. xorq %rcx, %r12
  3352. xorq %r8, %r13
  3353. xorq %r9, %r14
  3354. rolq $44, %r11
  3355. rolq $43, %r12
  3356. rolq $21, %r13
  3357. rolq $14, %r14
  3358. andnq %r13, %r12, %r15
  3359. xorq %r11, %r15
  3360. movq %r15, -72(%rdi)
  3361. andnq %r14, %r13, %r15
  3362. xorq %r12, %r15
  3363. movq %r15, -88(%rdi)
  3364. andnq %r10, %r14, %r15
  3365. xorq %r13, %r15
  3366. movq %r15, -64(%rdi)
  3367. andnq %r11, %r10, %r15
  3368. xorq %r14, %r15
  3369. movq %r15, -80(%rdi)
  3370. movq $0x8000000000000080, %r14
  3371. andnq %r12, %r11, %rsi
  3372. xorq %r10, %rsi
  3373. # XOR in constant
  3374. xorq %r14, %rsi
  3375. # Row 1
  3376. movq 24(%rdi), %r10
  3377. movq 48(%rdi), %r11
  3378. movq 32(%rdi), %r12
  3379. movq 56(%rdi), %r13
  3380. movq 40(%rdi), %r14
  3381. xorq %r8, %r10
  3382. xorq %r9, %r11
  3383. xorq %rdx, %r12
  3384. xorq %rax, %r13
  3385. xorq %rcx, %r14
  3386. rolq $28, %r10
  3387. rolq $20, %r11
  3388. rolq $3, %r12
  3389. rolq $45, %r13
  3390. rolq $61, %r14
  3391. andnq %r13, %r12, %r15
  3392. xorq %r11, %r15
  3393. movq %r15, 48(%rdi)
  3394. andnq %r14, %r13, %r15
  3395. xorq %r12, %r15
  3396. movq %r15, 32(%rdi)
  3397. andnq %r10, %r14, %r15
  3398. xorq %r13, %r15
  3399. movq %r15, 56(%rdi)
  3400. andnq %r11, %r10, %r15
  3401. xorq %r14, %r15
  3402. movq %r15, 40(%rdi)
  3403. andnq %r12, %r11, %r15
  3404. xorq %r10, %r15
  3405. movq %r15, 24(%rdi)
  3406. # Row 2
  3407. movq -56(%rdi), %r10
  3408. movq -32(%rdi), %r11
  3409. movq -48(%rdi), %r12
  3410. movq -24(%rdi), %r13
  3411. movq -40(%rdi), %r14
  3412. xorq %rax, %r10
  3413. xorq %rcx, %r11
  3414. xorq %r8, %r12
  3415. xorq %r9, %r13
  3416. xorq %rdx, %r14
  3417. rolq $0x01, %r10
  3418. rolq $6, %r11
  3419. rolq $25, %r12
  3420. rolq $8, %r13
  3421. rolq $18, %r14
  3422. andnq %r13, %r12, %r15
  3423. xorq %r11, %r15
  3424. movq %r15, -32(%rdi)
  3425. andnq %r14, %r13, %r15
  3426. xorq %r12, %r15
  3427. movq %r15, -48(%rdi)
  3428. andnq %r10, %r14, %r15
  3429. xorq %r13, %r15
  3430. movq %r15, -24(%rdi)
  3431. andnq %r11, %r10, %r15
  3432. xorq %r14, %r15
  3433. movq %r15, -40(%rdi)
  3434. andnq %r12, %r11, %r15
  3435. xorq %r10, %r15
  3436. movq %r15, -56(%rdi)
  3437. # Row 3
  3438. movq 64(%rdi), %r10
  3439. movq 88(%rdi), %r11
  3440. movq 72(%rdi), %r12
  3441. movq 96(%rdi), %r13
  3442. movq 80(%rdi), %r14
  3443. xorq %r9, %r10
  3444. xorq %rdx, %r11
  3445. xorq %rax, %r12
  3446. xorq %rcx, %r13
  3447. xorq %r8, %r14
  3448. rolq $27, %r10
  3449. rolq $36, %r11
  3450. rolq $10, %r12
  3451. rolq $15, %r13
  3452. rolq $56, %r14
  3453. andnq %r13, %r12, %r15
  3454. xorq %r11, %r15
  3455. movq %r15, 88(%rdi)
  3456. andnq %r14, %r13, %r15
  3457. xorq %r12, %r15
  3458. movq %r15, 72(%rdi)
  3459. andnq %r10, %r14, %r15
  3460. xorq %r13, %r15
  3461. movq %r15, 96(%rdi)
  3462. andnq %r11, %r10, %r15
  3463. xorq %r14, %r15
  3464. movq %r15, 80(%rdi)
  3465. andnq %r12, %r11, %r15
  3466. xorq %r10, %r15
  3467. movq %r15, 64(%rdi)
  3468. # Row 4
  3469. xorq -16(%rdi), %rcx
  3470. xorq 8(%rdi), %r8
  3471. xorq -8(%rdi), %r9
  3472. xorq 16(%rdi), %rdx
  3473. xorq (%rdi), %rax
  3474. rorxq $2, %rcx, %r10
  3475. rorxq $9, %r8, %r11
  3476. rorxq $25, %r9, %r12
  3477. rorxq $23, %rdx, %r13
  3478. rorxq $62, %rax, %r14
  3479. andnq %r12, %r11, %rdx
  3480. andnq %r13, %r12, %rax
  3481. andnq %r14, %r13, %rcx
  3482. andnq %r10, %r14, %r8
  3483. andnq %r11, %r10, %r9
  3484. xorq %rdx, %r10
  3485. xorq %rax, %r11
  3486. xorq %rcx, %r12
  3487. xorq %r8, %r13
  3488. xorq %r9, %r14
  3489. movq %r10, -16(%rdi)
  3490. movq %r11, 8(%rdi)
  3491. movq %r12, -8(%rdi)
  3492. movq %r13, 16(%rdi)
  3493. movq %r14, (%rdi)
  3494. # Round 18
  3495. xorq %rsi, %r10
  3496. xorq -88(%rdi), %r12
  3497. xorq -80(%rdi), %r14
  3498. xorq -72(%rdi), %r11
  3499. xorq -64(%rdi), %r13
  3500. xorq -56(%rdi), %r10
  3501. xorq -48(%rdi), %r12
  3502. xorq -40(%rdi), %r14
  3503. xorq -32(%rdi), %r11
  3504. xorq -24(%rdi), %r13
  3505. xorq 24(%rdi), %r10
  3506. xorq 32(%rdi), %r12
  3507. xorq 40(%rdi), %r14
  3508. xorq 48(%rdi), %r11
  3509. xorq 56(%rdi), %r13
  3510. xorq 64(%rdi), %r10
  3511. xorq 72(%rdi), %r12
  3512. xorq 80(%rdi), %r14
  3513. xorq 88(%rdi), %r11
  3514. xorq 96(%rdi), %r13
  3515. # Calc t[0..4]
  3516. rorxq $63, %r11, %rdx
  3517. rorxq $63, %r12, %rax
  3518. rorxq $63, %r13, %rcx
  3519. rorxq $63, %r14, %r8
  3520. rorxq $63, %r10, %r9
  3521. xorq %r14, %rdx
  3522. xorq %r10, %rax
  3523. xorq %r11, %rcx
  3524. xorq %r12, %r8
  3525. xorq %r13, %r9
  3526. # Row Mix
  3527. # Row 0
  3528. movq %rsi, %r10
  3529. movq 48(%rdi), %r11
  3530. movq -48(%rdi), %r12
  3531. movq 96(%rdi), %r13
  3532. movq (%rdi), %r14
  3533. xorq %rdx, %r10
  3534. xorq %rax, %r11
  3535. xorq %rcx, %r12
  3536. xorq %r8, %r13
  3537. xorq %r9, %r14
  3538. rolq $44, %r11
  3539. rolq $43, %r12
  3540. rolq $21, %r13
  3541. rolq $14, %r14
  3542. andnq %r13, %r12, %r15
  3543. xorq %r11, %r15
  3544. movq %r15, 48(%rdi)
  3545. andnq %r14, %r13, %r15
  3546. xorq %r12, %r15
  3547. movq %r15, -48(%rdi)
  3548. andnq %r10, %r14, %r15
  3549. xorq %r13, %r15
  3550. movq %r15, 96(%rdi)
  3551. andnq %r11, %r10, %r15
  3552. xorq %r14, %r15
  3553. movq %r15, (%rdi)
  3554. andnq %r12, %r11, %rsi
  3555. xorq %r10, %rsi
  3556. # XOR in constant
  3557. xorq $0x800a, %rsi
  3558. # Row 1
  3559. movq -64(%rdi), %r10
  3560. movq 40(%rdi), %r11
  3561. movq -56(%rdi), %r12
  3562. movq 88(%rdi), %r13
  3563. movq -8(%rdi), %r14
  3564. xorq %r8, %r10
  3565. xorq %r9, %r11
  3566. xorq %rdx, %r12
  3567. xorq %rax, %r13
  3568. xorq %rcx, %r14
  3569. rolq $28, %r10
  3570. rolq $20, %r11
  3571. rolq $3, %r12
  3572. rolq $45, %r13
  3573. rolq $61, %r14
  3574. andnq %r13, %r12, %r15
  3575. xorq %r11, %r15
  3576. movq %r15, 40(%rdi)
  3577. andnq %r14, %r13, %r15
  3578. xorq %r12, %r15
  3579. movq %r15, -56(%rdi)
  3580. andnq %r10, %r14, %r15
  3581. xorq %r13, %r15
  3582. movq %r15, 88(%rdi)
  3583. andnq %r11, %r10, %r15
  3584. xorq %r14, %r15
  3585. movq %r15, -8(%rdi)
  3586. andnq %r12, %r11, %r15
  3587. xorq %r10, %r15
  3588. movq %r15, -64(%rdi)
  3589. # Row 2
  3590. movq -72(%rdi), %r10
  3591. movq 32(%rdi), %r11
  3592. movq -24(%rdi), %r12
  3593. movq 80(%rdi), %r13
  3594. movq -16(%rdi), %r14
  3595. xorq %rax, %r10
  3596. xorq %rcx, %r11
  3597. xorq %r8, %r12
  3598. xorq %r9, %r13
  3599. xorq %rdx, %r14
  3600. rolq $0x01, %r10
  3601. rolq $6, %r11
  3602. rolq $25, %r12
  3603. rolq $8, %r13
  3604. rolq $18, %r14
  3605. andnq %r13, %r12, %r15
  3606. xorq %r11, %r15
  3607. movq %r15, 32(%rdi)
  3608. andnq %r14, %r13, %r15
  3609. xorq %r12, %r15
  3610. movq %r15, -24(%rdi)
  3611. andnq %r10, %r14, %r15
  3612. xorq %r13, %r15
  3613. movq %r15, 80(%rdi)
  3614. andnq %r11, %r10, %r15
  3615. xorq %r14, %r15
  3616. movq %r15, -16(%rdi)
  3617. andnq %r12, %r11, %r15
  3618. xorq %r10, %r15
  3619. movq %r15, -72(%rdi)
  3620. # Row 3
  3621. movq -80(%rdi), %r10
  3622. movq 24(%rdi), %r11
  3623. movq -32(%rdi), %r12
  3624. movq 72(%rdi), %r13
  3625. movq 16(%rdi), %r14
  3626. xorq %r9, %r10
  3627. xorq %rdx, %r11
  3628. xorq %rax, %r12
  3629. xorq %rcx, %r13
  3630. xorq %r8, %r14
  3631. rolq $27, %r10
  3632. rolq $36, %r11
  3633. rolq $10, %r12
  3634. rolq $15, %r13
  3635. rolq $56, %r14
  3636. andnq %r13, %r12, %r15
  3637. xorq %r11, %r15
  3638. movq %r15, 24(%rdi)
  3639. andnq %r14, %r13, %r15
  3640. xorq %r12, %r15
  3641. movq %r15, -32(%rdi)
  3642. andnq %r10, %r14, %r15
  3643. xorq %r13, %r15
  3644. movq %r15, 72(%rdi)
  3645. andnq %r11, %r10, %r15
  3646. xorq %r14, %r15
  3647. movq %r15, 16(%rdi)
  3648. andnq %r12, %r11, %r15
  3649. xorq %r10, %r15
  3650. movq %r15, -80(%rdi)
  3651. # Row 4
  3652. xorq -88(%rdi), %rcx
  3653. xorq 56(%rdi), %r8
  3654. xorq -40(%rdi), %r9
  3655. xorq 64(%rdi), %rdx
  3656. xorq 8(%rdi), %rax
  3657. rorxq $2, %rcx, %r10
  3658. rorxq $9, %r8, %r11
  3659. rorxq $25, %r9, %r12
  3660. rorxq $23, %rdx, %r13
  3661. rorxq $62, %rax, %r14
  3662. andnq %r12, %r11, %rdx
  3663. andnq %r13, %r12, %rax
  3664. andnq %r14, %r13, %rcx
  3665. andnq %r10, %r14, %r8
  3666. andnq %r11, %r10, %r9
  3667. xorq %rdx, %r10
  3668. xorq %rax, %r11
  3669. xorq %rcx, %r12
  3670. xorq %r8, %r13
  3671. xorq %r9, %r14
  3672. movq %r10, -88(%rdi)
  3673. movq %r11, 56(%rdi)
  3674. movq %r12, -40(%rdi)
  3675. movq %r13, 64(%rdi)
  3676. movq %r14, 8(%rdi)
  3677. # Round 19
  3678. xorq %rsi, %r10
  3679. xorq -80(%rdi), %r10
  3680. xorq -72(%rdi), %r10
  3681. xorq -64(%rdi), %r10
  3682. xorq -56(%rdi), %r12
  3683. xorq -48(%rdi), %r12
  3684. xorq -32(%rdi), %r12
  3685. xorq -24(%rdi), %r12
  3686. xorq -16(%rdi), %r14
  3687. xorq -8(%rdi), %r14
  3688. xorq (%rdi), %r14
  3689. xorq 16(%rdi), %r14
  3690. xorq 24(%rdi), %r11
  3691. xorq 32(%rdi), %r11
  3692. xorq 40(%rdi), %r11
  3693. xorq 48(%rdi), %r11
  3694. xorq 72(%rdi), %r13
  3695. xorq 80(%rdi), %r13
  3696. xorq 88(%rdi), %r13
  3697. xorq 96(%rdi), %r13
  3698. # Calc t[0..4]
  3699. rorxq $63, %r11, %rdx
  3700. rorxq $63, %r12, %rax
  3701. rorxq $63, %r13, %rcx
  3702. rorxq $63, %r14, %r8
  3703. rorxq $63, %r10, %r9
  3704. xorq %r14, %rdx
  3705. xorq %r10, %rax
  3706. xorq %r11, %rcx
  3707. xorq %r12, %r8
  3708. xorq %r13, %r9
  3709. # Row Mix
  3710. # Row 0
  3711. movq %rsi, %r10
  3712. movq 40(%rdi), %r11
  3713. movq -24(%rdi), %r12
  3714. movq 72(%rdi), %r13
  3715. movq 8(%rdi), %r14
  3716. xorq %rdx, %r10
  3717. xorq %rax, %r11
  3718. xorq %rcx, %r12
  3719. xorq %r8, %r13
  3720. xorq %r9, %r14
  3721. rolq $44, %r11
  3722. rolq $43, %r12
  3723. rolq $21, %r13
  3724. rolq $14, %r14
  3725. andnq %r13, %r12, %r15
  3726. xorq %r11, %r15
  3727. movq %r15, 40(%rdi)
  3728. andnq %r14, %r13, %r15
  3729. xorq %r12, %r15
  3730. movq %r15, -24(%rdi)
  3731. andnq %r10, %r14, %r15
  3732. xorq %r13, %r15
  3733. movq %r15, 72(%rdi)
  3734. andnq %r11, %r10, %r15
  3735. xorq %r14, %r15
  3736. movq %r15, 8(%rdi)
  3737. movq $0x800000008000000a, %r14
  3738. andnq %r12, %r11, %rsi
  3739. xorq %r10, %rsi
  3740. # XOR in constant
  3741. xorq %r14, %rsi
  3742. # Row 1
  3743. movq 96(%rdi), %r10
  3744. movq -8(%rdi), %r11
  3745. movq -72(%rdi), %r12
  3746. movq 24(%rdi), %r13
  3747. movq -40(%rdi), %r14
  3748. xorq %r8, %r10
  3749. xorq %r9, %r11
  3750. xorq %rdx, %r12
  3751. xorq %rax, %r13
  3752. xorq %rcx, %r14
  3753. rolq $28, %r10
  3754. rolq $20, %r11
  3755. rolq $3, %r12
  3756. rolq $45, %r13
  3757. rolq $61, %r14
  3758. andnq %r13, %r12, %r15
  3759. xorq %r11, %r15
  3760. movq %r15, -8(%rdi)
  3761. andnq %r14, %r13, %r15
  3762. xorq %r12, %r15
  3763. movq %r15, -72(%rdi)
  3764. andnq %r10, %r14, %r15
  3765. xorq %r13, %r15
  3766. movq %r15, 24(%rdi)
  3767. andnq %r11, %r10, %r15
  3768. xorq %r14, %r15
  3769. movq %r15, -40(%rdi)
  3770. andnq %r12, %r11, %r15
  3771. xorq %r10, %r15
  3772. movq %r15, 96(%rdi)
  3773. # Row 2
  3774. movq 48(%rdi), %r10
  3775. movq -56(%rdi), %r11
  3776. movq 80(%rdi), %r12
  3777. movq 16(%rdi), %r13
  3778. movq -88(%rdi), %r14
  3779. xorq %rax, %r10
  3780. xorq %rcx, %r11
  3781. xorq %r8, %r12
  3782. xorq %r9, %r13
  3783. xorq %rdx, %r14
  3784. rolq $0x01, %r10
  3785. rolq $6, %r11
  3786. rolq $25, %r12
  3787. rolq $8, %r13
  3788. rolq $18, %r14
  3789. andnq %r13, %r12, %r15
  3790. xorq %r11, %r15
  3791. movq %r15, -56(%rdi)
  3792. andnq %r14, %r13, %r15
  3793. xorq %r12, %r15
  3794. movq %r15, 80(%rdi)
  3795. andnq %r10, %r14, %r15
  3796. xorq %r13, %r15
  3797. movq %r15, 16(%rdi)
  3798. andnq %r11, %r10, %r15
  3799. xorq %r14, %r15
  3800. movq %r15, -88(%rdi)
  3801. andnq %r12, %r11, %r15
  3802. xorq %r10, %r15
  3803. movq %r15, 48(%rdi)
  3804. # Row 3
  3805. movq (%rdi), %r10
  3806. movq -64(%rdi), %r11
  3807. movq 32(%rdi), %r12
  3808. movq -32(%rdi), %r13
  3809. movq 64(%rdi), %r14
  3810. xorq %r9, %r10
  3811. xorq %rdx, %r11
  3812. xorq %rax, %r12
  3813. xorq %rcx, %r13
  3814. xorq %r8, %r14
  3815. rolq $27, %r10
  3816. rolq $36, %r11
  3817. rolq $10, %r12
  3818. rolq $15, %r13
  3819. rolq $56, %r14
  3820. andnq %r13, %r12, %r15
  3821. xorq %r11, %r15
  3822. movq %r15, -64(%rdi)
  3823. andnq %r14, %r13, %r15
  3824. xorq %r12, %r15
  3825. movq %r15, 32(%rdi)
  3826. andnq %r10, %r14, %r15
  3827. xorq %r13, %r15
  3828. movq %r15, -32(%rdi)
  3829. andnq %r11, %r10, %r15
  3830. xorq %r14, %r15
  3831. movq %r15, 64(%rdi)
  3832. andnq %r12, %r11, %r15
  3833. xorq %r10, %r15
  3834. movq %r15, (%rdi)
  3835. # Row 4
  3836. xorq -48(%rdi), %rcx
  3837. xorq 88(%rdi), %r8
  3838. xorq -16(%rdi), %r9
  3839. xorq -80(%rdi), %rdx
  3840. xorq 56(%rdi), %rax
  3841. rorxq $2, %rcx, %r10
  3842. rorxq $9, %r8, %r11
  3843. rorxq $25, %r9, %r12
  3844. rorxq $23, %rdx, %r13
  3845. rorxq $62, %rax, %r14
  3846. andnq %r12, %r11, %rdx
  3847. andnq %r13, %r12, %rax
  3848. andnq %r14, %r13, %rcx
  3849. andnq %r10, %r14, %r8
  3850. andnq %r11, %r10, %r9
  3851. xorq %rdx, %r10
  3852. xorq %rax, %r11
  3853. xorq %rcx, %r12
  3854. xorq %r8, %r13
  3855. xorq %r9, %r14
  3856. movq %r10, -48(%rdi)
  3857. movq %r11, 88(%rdi)
  3858. movq %r12, -16(%rdi)
  3859. movq %r13, -80(%rdi)
  3860. movq %r14, 56(%rdi)
  3861. # Round 20
  3862. xorq %rsi, %r10
  3863. xorq -88(%rdi), %r14
  3864. xorq -72(%rdi), %r12
  3865. xorq -64(%rdi), %r11
  3866. xorq -56(%rdi), %r11
  3867. xorq -40(%rdi), %r14
  3868. xorq -32(%rdi), %r13
  3869. xorq -24(%rdi), %r12
  3870. xorq -8(%rdi), %r11
  3871. xorq (%rdi), %r10
  3872. xorq 8(%rdi), %r14
  3873. xorq 16(%rdi), %r13
  3874. xorq 24(%rdi), %r13
  3875. xorq 32(%rdi), %r12
  3876. xorq 40(%rdi), %r11
  3877. xorq 48(%rdi), %r10
  3878. xorq 64(%rdi), %r14
  3879. xorq 72(%rdi), %r13
  3880. xorq 80(%rdi), %r12
  3881. xorq 96(%rdi), %r10
  3882. # Calc t[0..4]
  3883. rorxq $63, %r11, %rdx
  3884. rorxq $63, %r12, %rax
  3885. rorxq $63, %r13, %rcx
  3886. rorxq $63, %r14, %r8
  3887. rorxq $63, %r10, %r9
  3888. xorq %r14, %rdx
  3889. xorq %r10, %rax
  3890. xorq %r11, %rcx
  3891. xorq %r12, %r8
  3892. xorq %r13, %r9
  3893. # Row Mix
  3894. # Row 0
  3895. movq %rsi, %r10
  3896. movq -8(%rdi), %r11
  3897. movq 80(%rdi), %r12
  3898. movq -32(%rdi), %r13
  3899. movq 56(%rdi), %r14
  3900. xorq %rdx, %r10
  3901. xorq %rax, %r11
  3902. xorq %rcx, %r12
  3903. xorq %r8, %r13
  3904. xorq %r9, %r14
  3905. rolq $44, %r11
  3906. rolq $43, %r12
  3907. rolq $21, %r13
  3908. rolq $14, %r14
  3909. andnq %r13, %r12, %r15
  3910. xorq %r11, %r15
  3911. movq %r15, -8(%rdi)
  3912. andnq %r14, %r13, %r15
  3913. xorq %r12, %r15
  3914. movq %r15, 80(%rdi)
  3915. andnq %r10, %r14, %r15
  3916. xorq %r13, %r15
  3917. movq %r15, -32(%rdi)
  3918. andnq %r11, %r10, %r15
  3919. xorq %r14, %r15
  3920. movq %r15, 56(%rdi)
  3921. movq $0x8000000080008081, %r14
  3922. andnq %r12, %r11, %rsi
  3923. xorq %r10, %rsi
  3924. # XOR in constant
  3925. xorq %r14, %rsi
  3926. # Row 1
  3927. movq 72(%rdi), %r10
  3928. movq -40(%rdi), %r11
  3929. movq 48(%rdi), %r12
  3930. movq -64(%rdi), %r13
  3931. movq -16(%rdi), %r14
  3932. xorq %r8, %r10
  3933. xorq %r9, %r11
  3934. xorq %rdx, %r12
  3935. xorq %rax, %r13
  3936. xorq %rcx, %r14
  3937. rolq $28, %r10
  3938. rolq $20, %r11
  3939. rolq $3, %r12
  3940. rolq $45, %r13
  3941. rolq $61, %r14
  3942. andnq %r13, %r12, %r15
  3943. xorq %r11, %r15
  3944. movq %r15, -40(%rdi)
  3945. andnq %r14, %r13, %r15
  3946. xorq %r12, %r15
  3947. movq %r15, 48(%rdi)
  3948. andnq %r10, %r14, %r15
  3949. xorq %r13, %r15
  3950. movq %r15, -64(%rdi)
  3951. andnq %r11, %r10, %r15
  3952. xorq %r14, %r15
  3953. movq %r15, -16(%rdi)
  3954. andnq %r12, %r11, %r15
  3955. xorq %r10, %r15
  3956. movq %r15, 72(%rdi)
  3957. # Row 2
  3958. movq 40(%rdi), %r10
  3959. movq -72(%rdi), %r11
  3960. movq 16(%rdi), %r12
  3961. movq 64(%rdi), %r13
  3962. movq -48(%rdi), %r14
  3963. xorq %rax, %r10
  3964. xorq %rcx, %r11
  3965. xorq %r8, %r12
  3966. xorq %r9, %r13
  3967. xorq %rdx, %r14
  3968. rolq $0x01, %r10
  3969. rolq $6, %r11
  3970. rolq $25, %r12
  3971. rolq $8, %r13
  3972. rolq $18, %r14
  3973. andnq %r13, %r12, %r15
  3974. xorq %r11, %r15
  3975. movq %r15, -72(%rdi)
  3976. andnq %r14, %r13, %r15
  3977. xorq %r12, %r15
  3978. movq %r15, 16(%rdi)
  3979. andnq %r10, %r14, %r15
  3980. xorq %r13, %r15
  3981. movq %r15, 64(%rdi)
  3982. andnq %r11, %r10, %r15
  3983. xorq %r14, %r15
  3984. movq %r15, -48(%rdi)
  3985. andnq %r12, %r11, %r15
  3986. xorq %r10, %r15
  3987. movq %r15, 40(%rdi)
  3988. # Row 3
  3989. movq 8(%rdi), %r10
  3990. movq 96(%rdi), %r11
  3991. movq -56(%rdi), %r12
  3992. movq 32(%rdi), %r13
  3993. movq -80(%rdi), %r14
  3994. xorq %r9, %r10
  3995. xorq %rdx, %r11
  3996. xorq %rax, %r12
  3997. xorq %rcx, %r13
  3998. xorq %r8, %r14
  3999. rolq $27, %r10
  4000. rolq $36, %r11
  4001. rolq $10, %r12
  4002. rolq $15, %r13
  4003. rolq $56, %r14
  4004. andnq %r13, %r12, %r15
  4005. xorq %r11, %r15
  4006. movq %r15, 96(%rdi)
  4007. andnq %r14, %r13, %r15
  4008. xorq %r12, %r15
  4009. movq %r15, -56(%rdi)
  4010. andnq %r10, %r14, %r15
  4011. xorq %r13, %r15
  4012. movq %r15, 32(%rdi)
  4013. andnq %r11, %r10, %r15
  4014. xorq %r14, %r15
  4015. movq %r15, -80(%rdi)
  4016. andnq %r12, %r11, %r15
  4017. xorq %r10, %r15
  4018. movq %r15, 8(%rdi)
  4019. # Row 4
  4020. xorq -24(%rdi), %rcx
  4021. xorq 24(%rdi), %r8
  4022. xorq -88(%rdi), %r9
  4023. xorq (%rdi), %rdx
  4024. xorq 88(%rdi), %rax
  4025. rorxq $2, %rcx, %r10
  4026. rorxq $9, %r8, %r11
  4027. rorxq $25, %r9, %r12
  4028. rorxq $23, %rdx, %r13
  4029. rorxq $62, %rax, %r14
  4030. andnq %r12, %r11, %rdx
  4031. andnq %r13, %r12, %rax
  4032. andnq %r14, %r13, %rcx
  4033. andnq %r10, %r14, %r8
  4034. andnq %r11, %r10, %r9
  4035. xorq %rdx, %r10
  4036. xorq %rax, %r11
  4037. xorq %rcx, %r12
  4038. xorq %r8, %r13
  4039. xorq %r9, %r14
  4040. movq %r10, -24(%rdi)
  4041. movq %r11, 24(%rdi)
  4042. movq %r12, -88(%rdi)
  4043. movq %r13, (%rdi)
  4044. movq %r14, 88(%rdi)
  4045. # Round 21
  4046. xorq %rsi, %r10
  4047. xorq -80(%rdi), %r14
  4048. xorq -72(%rdi), %r11
  4049. xorq -64(%rdi), %r13
  4050. xorq -56(%rdi), %r12
  4051. xorq -48(%rdi), %r14
  4052. xorq -40(%rdi), %r11
  4053. xorq -32(%rdi), %r13
  4054. xorq -16(%rdi), %r14
  4055. xorq -8(%rdi), %r11
  4056. xorq 8(%rdi), %r10
  4057. xorq 16(%rdi), %r12
  4058. xorq 32(%rdi), %r13
  4059. xorq 40(%rdi), %r10
  4060. xorq 48(%rdi), %r12
  4061. xorq 56(%rdi), %r14
  4062. xorq 64(%rdi), %r13
  4063. xorq 72(%rdi), %r10
  4064. xorq 80(%rdi), %r12
  4065. xorq 96(%rdi), %r11
  4066. # Calc t[0..4]
  4067. rorxq $63, %r11, %rdx
  4068. rorxq $63, %r12, %rax
  4069. rorxq $63, %r13, %rcx
  4070. rorxq $63, %r14, %r8
  4071. rorxq $63, %r10, %r9
  4072. xorq %r14, %rdx
  4073. xorq %r10, %rax
  4074. xorq %r11, %rcx
  4075. xorq %r12, %r8
  4076. xorq %r13, %r9
  4077. # Row Mix
  4078. # Row 0
  4079. movq %rsi, %r10
  4080. movq -40(%rdi), %r11
  4081. movq 16(%rdi), %r12
  4082. movq 32(%rdi), %r13
  4083. movq 88(%rdi), %r14
  4084. xorq %rdx, %r10
  4085. xorq %rax, %r11
  4086. xorq %rcx, %r12
  4087. xorq %r8, %r13
  4088. xorq %r9, %r14
  4089. rolq $44, %r11
  4090. rolq $43, %r12
  4091. rolq $21, %r13
  4092. rolq $14, %r14
  4093. andnq %r13, %r12, %r15
  4094. xorq %r11, %r15
  4095. movq %r15, -40(%rdi)
  4096. andnq %r14, %r13, %r15
  4097. xorq %r12, %r15
  4098. movq %r15, 16(%rdi)
  4099. andnq %r10, %r14, %r15
  4100. xorq %r13, %r15
  4101. movq %r15, 32(%rdi)
  4102. andnq %r11, %r10, %r15
  4103. xorq %r14, %r15
  4104. movq %r15, 88(%rdi)
  4105. movq $0x8000000000008080, %r14
  4106. andnq %r12, %r11, %rsi
  4107. xorq %r10, %rsi
  4108. # XOR in constant
  4109. xorq %r14, %rsi
  4110. # Row 1
  4111. movq -32(%rdi), %r10
  4112. movq -16(%rdi), %r11
  4113. movq 40(%rdi), %r12
  4114. movq 96(%rdi), %r13
  4115. movq -88(%rdi), %r14
  4116. xorq %r8, %r10
  4117. xorq %r9, %r11
  4118. xorq %rdx, %r12
  4119. xorq %rax, %r13
  4120. xorq %rcx, %r14
  4121. rolq $28, %r10
  4122. rolq $20, %r11
  4123. rolq $3, %r12
  4124. rolq $45, %r13
  4125. rolq $61, %r14
  4126. andnq %r13, %r12, %r15
  4127. xorq %r11, %r15
  4128. movq %r15, -16(%rdi)
  4129. andnq %r14, %r13, %r15
  4130. xorq %r12, %r15
  4131. movq %r15, 40(%rdi)
  4132. andnq %r10, %r14, %r15
  4133. xorq %r13, %r15
  4134. movq %r15, 96(%rdi)
  4135. andnq %r11, %r10, %r15
  4136. xorq %r14, %r15
  4137. movq %r15, -88(%rdi)
  4138. andnq %r12, %r11, %r15
  4139. xorq %r10, %r15
  4140. movq %r15, -32(%rdi)
  4141. # Row 2
  4142. movq -8(%rdi), %r10
  4143. movq 48(%rdi), %r11
  4144. movq 64(%rdi), %r12
  4145. movq -80(%rdi), %r13
  4146. movq -24(%rdi), %r14
  4147. xorq %rax, %r10
  4148. xorq %rcx, %r11
  4149. xorq %r8, %r12
  4150. xorq %r9, %r13
  4151. xorq %rdx, %r14
  4152. rolq $0x01, %r10
  4153. rolq $6, %r11
  4154. rolq $25, %r12
  4155. rolq $8, %r13
  4156. rolq $18, %r14
  4157. andnq %r13, %r12, %r15
  4158. xorq %r11, %r15
  4159. movq %r15, 48(%rdi)
  4160. andnq %r14, %r13, %r15
  4161. xorq %r12, %r15
  4162. movq %r15, 64(%rdi)
  4163. andnq %r10, %r14, %r15
  4164. xorq %r13, %r15
  4165. movq %r15, -80(%rdi)
  4166. andnq %r11, %r10, %r15
  4167. xorq %r14, %r15
  4168. movq %r15, -24(%rdi)
  4169. andnq %r12, %r11, %r15
  4170. xorq %r10, %r15
  4171. movq %r15, -8(%rdi)
  4172. # Row 3
  4173. movq 56(%rdi), %r10
  4174. movq 72(%rdi), %r11
  4175. movq -72(%rdi), %r12
  4176. movq -56(%rdi), %r13
  4177. movq (%rdi), %r14
  4178. xorq %r9, %r10
  4179. xorq %rdx, %r11
  4180. xorq %rax, %r12
  4181. xorq %rcx, %r13
  4182. xorq %r8, %r14
  4183. rolq $27, %r10
  4184. rolq $36, %r11
  4185. rolq $10, %r12
  4186. rolq $15, %r13
  4187. rolq $56, %r14
  4188. andnq %r13, %r12, %r15
  4189. xorq %r11, %r15
  4190. movq %r15, 72(%rdi)
  4191. andnq %r14, %r13, %r15
  4192. xorq %r12, %r15
  4193. movq %r15, -72(%rdi)
  4194. andnq %r10, %r14, %r15
  4195. xorq %r13, %r15
  4196. movq %r15, -56(%rdi)
  4197. andnq %r11, %r10, %r15
  4198. xorq %r14, %r15
  4199. movq %r15, (%rdi)
  4200. andnq %r12, %r11, %r15
  4201. xorq %r10, %r15
  4202. movq %r15, 56(%rdi)
  4203. # Row 4
  4204. xorq 80(%rdi), %rcx
  4205. xorq -64(%rdi), %r8
  4206. xorq -48(%rdi), %r9
  4207. xorq 8(%rdi), %rdx
  4208. xorq 24(%rdi), %rax
  4209. rorxq $2, %rcx, %r10
  4210. rorxq $9, %r8, %r11
  4211. rorxq $25, %r9, %r12
  4212. rorxq $23, %rdx, %r13
  4213. rorxq $62, %rax, %r14
  4214. andnq %r12, %r11, %rdx
  4215. andnq %r13, %r12, %rax
  4216. andnq %r14, %r13, %rcx
  4217. andnq %r10, %r14, %r8
  4218. andnq %r11, %r10, %r9
  4219. xorq %rdx, %r10
  4220. xorq %rax, %r11
  4221. xorq %rcx, %r12
  4222. xorq %r8, %r13
  4223. xorq %r9, %r14
  4224. movq %r10, 80(%rdi)
  4225. movq %r11, -64(%rdi)
  4226. movq %r12, -48(%rdi)
  4227. movq %r13, 8(%rdi)
  4228. movq %r14, 24(%rdi)
  4229. # Round 22
  4230. xorq %rsi, %r10
  4231. xorq -88(%rdi), %r14
  4232. xorq -80(%rdi), %r13
  4233. xorq -72(%rdi), %r12
  4234. xorq -56(%rdi), %r13
  4235. xorq -40(%rdi), %r11
  4236. xorq -32(%rdi), %r10
  4237. xorq -24(%rdi), %r14
  4238. xorq -16(%rdi), %r11
  4239. xorq -8(%rdi), %r10
  4240. xorq (%rdi), %r14
  4241. xorq 16(%rdi), %r12
  4242. xorq 32(%rdi), %r13
  4243. xorq 40(%rdi), %r12
  4244. xorq 48(%rdi), %r11
  4245. xorq 56(%rdi), %r10
  4246. xorq 64(%rdi), %r12
  4247. xorq 72(%rdi), %r11
  4248. xorq 88(%rdi), %r14
  4249. xorq 96(%rdi), %r13
  4250. # Calc t[0..4]
  4251. rorxq $63, %r11, %rdx
  4252. rorxq $63, %r12, %rax
  4253. rorxq $63, %r13, %rcx
  4254. rorxq $63, %r14, %r8
  4255. rorxq $63, %r10, %r9
  4256. xorq %r14, %rdx
  4257. xorq %r10, %rax
  4258. xorq %r11, %rcx
  4259. xorq %r12, %r8
  4260. xorq %r13, %r9
  4261. # Row Mix
  4262. # Row 0
  4263. movq %rsi, %r10
  4264. movq -16(%rdi), %r11
  4265. movq 64(%rdi), %r12
  4266. movq -56(%rdi), %r13
  4267. movq 24(%rdi), %r14
  4268. xorq %rdx, %r10
  4269. xorq %rax, %r11
  4270. xorq %rcx, %r12
  4271. xorq %r8, %r13
  4272. xorq %r9, %r14
  4273. rolq $44, %r11
  4274. rolq $43, %r12
  4275. rolq $21, %r13
  4276. rolq $14, %r14
  4277. andnq %r13, %r12, %r15
  4278. xorq %r11, %r15
  4279. movq %r15, -16(%rdi)
  4280. andnq %r14, %r13, %r15
  4281. xorq %r12, %r15
  4282. movq %r15, 64(%rdi)
  4283. andnq %r10, %r14, %r15
  4284. xorq %r13, %r15
  4285. movq %r15, -56(%rdi)
  4286. andnq %r11, %r10, %r15
  4287. xorq %r14, %r15
  4288. movq %r15, 24(%rdi)
  4289. movq $0x80000001, %r14
  4290. andnq %r12, %r11, %rsi
  4291. xorq %r10, %rsi
  4292. # XOR in constant
  4293. xorq %r14, %rsi
  4294. # Row 1
  4295. movq 32(%rdi), %r10
  4296. movq -88(%rdi), %r11
  4297. movq -8(%rdi), %r12
  4298. movq 72(%rdi), %r13
  4299. movq -48(%rdi), %r14
  4300. xorq %r8, %r10
  4301. xorq %r9, %r11
  4302. xorq %rdx, %r12
  4303. xorq %rax, %r13
  4304. xorq %rcx, %r14
  4305. rolq $28, %r10
  4306. rolq $20, %r11
  4307. rolq $3, %r12
  4308. rolq $45, %r13
  4309. rolq $61, %r14
  4310. andnq %r13, %r12, %r15
  4311. xorq %r11, %r15
  4312. movq %r15, -88(%rdi)
  4313. andnq %r14, %r13, %r15
  4314. xorq %r12, %r15
  4315. movq %r15, -8(%rdi)
  4316. andnq %r10, %r14, %r15
  4317. xorq %r13, %r15
  4318. movq %r15, 72(%rdi)
  4319. andnq %r11, %r10, %r15
  4320. xorq %r14, %r15
  4321. movq %r15, -48(%rdi)
  4322. andnq %r12, %r11, %r15
  4323. xorq %r10, %r15
  4324. movq %r15, 32(%rdi)
  4325. # Row 2
  4326. movq -40(%rdi), %r10
  4327. movq 40(%rdi), %r11
  4328. movq -80(%rdi), %r12
  4329. movq (%rdi), %r13
  4330. movq 80(%rdi), %r14
  4331. xorq %rax, %r10
  4332. xorq %rcx, %r11
  4333. xorq %r8, %r12
  4334. xorq %r9, %r13
  4335. xorq %rdx, %r14
  4336. rolq $0x01, %r10
  4337. rolq $6, %r11
  4338. rolq $25, %r12
  4339. rolq $8, %r13
  4340. rolq $18, %r14
  4341. andnq %r13, %r12, %r15
  4342. xorq %r11, %r15
  4343. movq %r15, 40(%rdi)
  4344. andnq %r14, %r13, %r15
  4345. xorq %r12, %r15
  4346. movq %r15, -80(%rdi)
  4347. andnq %r10, %r14, %r15
  4348. xorq %r13, %r15
  4349. movq %r15, (%rdi)
  4350. andnq %r11, %r10, %r15
  4351. xorq %r14, %r15
  4352. movq %r15, 80(%rdi)
  4353. andnq %r12, %r11, %r15
  4354. xorq %r10, %r15
  4355. movq %r15, -40(%rdi)
  4356. # Row 3
  4357. movq 88(%rdi), %r10
  4358. movq -32(%rdi), %r11
  4359. movq 48(%rdi), %r12
  4360. movq -72(%rdi), %r13
  4361. movq 8(%rdi), %r14
  4362. xorq %r9, %r10
  4363. xorq %rdx, %r11
  4364. xorq %rax, %r12
  4365. xorq %rcx, %r13
  4366. xorq %r8, %r14
  4367. rolq $27, %r10
  4368. rolq $36, %r11
  4369. rolq $10, %r12
  4370. rolq $15, %r13
  4371. rolq $56, %r14
  4372. andnq %r13, %r12, %r15
  4373. xorq %r11, %r15
  4374. movq %r15, -32(%rdi)
  4375. andnq %r14, %r13, %r15
  4376. xorq %r12, %r15
  4377. movq %r15, 48(%rdi)
  4378. andnq %r10, %r14, %r15
  4379. xorq %r13, %r15
  4380. movq %r15, -72(%rdi)
  4381. andnq %r11, %r10, %r15
  4382. xorq %r14, %r15
  4383. movq %r15, 8(%rdi)
  4384. andnq %r12, %r11, %r15
  4385. xorq %r10, %r15
  4386. movq %r15, 88(%rdi)
  4387. # Row 4
  4388. xorq 16(%rdi), %rcx
  4389. xorq 96(%rdi), %r8
  4390. xorq -24(%rdi), %r9
  4391. xorq 56(%rdi), %rdx
  4392. xorq -64(%rdi), %rax
  4393. rorxq $2, %rcx, %r10
  4394. rorxq $9, %r8, %r11
  4395. rorxq $25, %r9, %r12
  4396. rorxq $23, %rdx, %r13
  4397. rorxq $62, %rax, %r14
  4398. andnq %r12, %r11, %rdx
  4399. andnq %r13, %r12, %rax
  4400. andnq %r14, %r13, %rcx
  4401. andnq %r10, %r14, %r8
  4402. andnq %r11, %r10, %r9
  4403. xorq %rdx, %r10
  4404. xorq %rax, %r11
  4405. xorq %rcx, %r12
  4406. xorq %r8, %r13
  4407. xorq %r9, %r14
  4408. movq %r10, 16(%rdi)
  4409. movq %r11, 96(%rdi)
  4410. movq %r12, -24(%rdi)
  4411. movq %r13, 56(%rdi)
  4412. movq %r14, -64(%rdi)
  4413. # Round 23
  4414. xorq %rsi, %r10
  4415. xorq -88(%rdi), %r11
  4416. xorq -80(%rdi), %r12
  4417. xorq -72(%rdi), %r13
  4418. xorq -56(%rdi), %r13
  4419. xorq -48(%rdi), %r14
  4420. xorq -40(%rdi), %r10
  4421. xorq -32(%rdi), %r11
  4422. xorq -16(%rdi), %r11
  4423. xorq -8(%rdi), %r12
  4424. xorq (%rdi), %r13
  4425. xorq 8(%rdi), %r14
  4426. xorq 24(%rdi), %r14
  4427. xorq 32(%rdi), %r10
  4428. xorq 40(%rdi), %r11
  4429. xorq 48(%rdi), %r12
  4430. xorq 64(%rdi), %r12
  4431. xorq 72(%rdi), %r13
  4432. xorq 80(%rdi), %r14
  4433. xorq 88(%rdi), %r10
  4434. # Calc t[0..4]
  4435. rorxq $63, %r11, %rdx
  4436. rorxq $63, %r12, %rax
  4437. rorxq $63, %r13, %rcx
  4438. rorxq $63, %r14, %r8
  4439. rorxq $63, %r10, %r9
  4440. xorq %r14, %rdx
  4441. xorq %r10, %rax
  4442. xorq %r11, %rcx
  4443. xorq %r12, %r8
  4444. xorq %r13, %r9
  4445. # Row Mix
  4446. # Row 0
  4447. movq %rsi, %r10
  4448. movq -88(%rdi), %r11
  4449. movq -80(%rdi), %r12
  4450. movq -72(%rdi), %r13
  4451. movq -64(%rdi), %r14
  4452. xorq %rdx, %r10
  4453. xorq %rax, %r11
  4454. xorq %rcx, %r12
  4455. xorq %r8, %r13
  4456. xorq %r9, %r14
  4457. rolq $44, %r11
  4458. rolq $43, %r12
  4459. rolq $21, %r13
  4460. rolq $14, %r14
  4461. andnq %r13, %r12, %r15
  4462. xorq %r11, %r15
  4463. movq %r15, -88(%rdi)
  4464. andnq %r14, %r13, %r15
  4465. xorq %r12, %r15
  4466. movq %r15, -80(%rdi)
  4467. andnq %r10, %r14, %r15
  4468. xorq %r13, %r15
  4469. movq %r15, -72(%rdi)
  4470. andnq %r11, %r10, %r15
  4471. xorq %r14, %r15
  4472. movq %r15, -64(%rdi)
  4473. movq $0x8000000080008008, %r14
  4474. andnq %r12, %r11, %rsi
  4475. xorq %r10, %rsi
  4476. # XOR in constant
  4477. xorq %r14, %rsi
  4478. # Row 1
  4479. movq -56(%rdi), %r10
  4480. movq -48(%rdi), %r11
  4481. movq -40(%rdi), %r12
  4482. movq -32(%rdi), %r13
  4483. movq -24(%rdi), %r14
  4484. xorq %r8, %r10
  4485. xorq %r9, %r11
  4486. xorq %rdx, %r12
  4487. xorq %rax, %r13
  4488. xorq %rcx, %r14
  4489. rolq $28, %r10
  4490. rolq $20, %r11
  4491. rolq $3, %r12
  4492. rolq $45, %r13
  4493. rolq $61, %r14
  4494. andnq %r13, %r12, %r15
  4495. xorq %r11, %r15
  4496. movq %r15, -48(%rdi)
  4497. andnq %r14, %r13, %r15
  4498. xorq %r12, %r15
  4499. movq %r15, -40(%rdi)
  4500. andnq %r10, %r14, %r15
  4501. xorq %r13, %r15
  4502. movq %r15, -32(%rdi)
  4503. andnq %r11, %r10, %r15
  4504. xorq %r14, %r15
  4505. movq %r15, -24(%rdi)
  4506. andnq %r12, %r11, %r15
  4507. xorq %r10, %r15
  4508. movq %r15, -56(%rdi)
  4509. # Row 2
  4510. movq -16(%rdi), %r10
  4511. movq -8(%rdi), %r11
  4512. movq (%rdi), %r12
  4513. movq 8(%rdi), %r13
  4514. movq 16(%rdi), %r14
  4515. xorq %rax, %r10
  4516. xorq %rcx, %r11
  4517. xorq %r8, %r12
  4518. xorq %r9, %r13
  4519. xorq %rdx, %r14
  4520. rolq $0x01, %r10
  4521. rolq $6, %r11
  4522. rolq $25, %r12
  4523. rolq $8, %r13
  4524. rolq $18, %r14
  4525. andnq %r13, %r12, %r15
  4526. xorq %r11, %r15
  4527. movq %r15, -8(%rdi)
  4528. andnq %r14, %r13, %r15
  4529. xorq %r12, %r15
  4530. movq %r15, (%rdi)
  4531. andnq %r10, %r14, %r15
  4532. xorq %r13, %r15
  4533. movq %r15, 8(%rdi)
  4534. andnq %r11, %r10, %r15
  4535. xorq %r14, %r15
  4536. movq %r15, 16(%rdi)
  4537. andnq %r12, %r11, %r15
  4538. xorq %r10, %r15
  4539. movq %r15, -16(%rdi)
  4540. # Row 3
  4541. movq 24(%rdi), %r10
  4542. movq 32(%rdi), %r11
  4543. movq 40(%rdi), %r12
  4544. movq 48(%rdi), %r13
  4545. movq 56(%rdi), %r14
  4546. xorq %r9, %r10
  4547. xorq %rdx, %r11
  4548. xorq %rax, %r12
  4549. xorq %rcx, %r13
  4550. xorq %r8, %r14
  4551. rolq $27, %r10
  4552. rolq $36, %r11
  4553. rolq $10, %r12
  4554. rolq $15, %r13
  4555. rolq $56, %r14
  4556. andnq %r13, %r12, %r15
  4557. xorq %r11, %r15
  4558. movq %r15, 32(%rdi)
  4559. andnq %r14, %r13, %r15
  4560. xorq %r12, %r15
  4561. movq %r15, 40(%rdi)
  4562. andnq %r10, %r14, %r15
  4563. xorq %r13, %r15
  4564. movq %r15, 48(%rdi)
  4565. andnq %r11, %r10, %r15
  4566. xorq %r14, %r15
  4567. movq %r15, 56(%rdi)
  4568. andnq %r12, %r11, %r15
  4569. xorq %r10, %r15
  4570. movq %r15, 24(%rdi)
  4571. # Row 4
  4572. xorq 64(%rdi), %rcx
  4573. xorq 72(%rdi), %r8
  4574. xorq 80(%rdi), %r9
  4575. xorq 88(%rdi), %rdx
  4576. xorq 96(%rdi), %rax
  4577. rorxq $2, %rcx, %r10
  4578. rorxq $9, %r8, %r11
  4579. rorxq $25, %r9, %r12
  4580. rorxq $23, %rdx, %r13
  4581. rorxq $62, %rax, %r14
  4582. andnq %r12, %r11, %rdx
  4583. andnq %r13, %r12, %rax
  4584. andnq %r14, %r13, %rcx
  4585. andnq %r10, %r14, %r8
  4586. andnq %r11, %r10, %r9
  4587. xorq %rdx, %r10
  4588. xorq %rax, %r11
  4589. xorq %rcx, %r12
  4590. xorq %r8, %r13
  4591. xorq %r9, %r14
  4592. movq %r10, 64(%rdi)
  4593. movq %r11, 72(%rdi)
  4594. movq %r12, 80(%rdi)
  4595. movq %r13, 88(%rdi)
  4596. movq %r14, 96(%rdi)
  4597. movq %rsi, -96(%rdi)
  4598. popq %r15
  4599. popq %r14
  4600. popq %r13
  4601. popq %r12
  4602. repz retq
  4603. #ifndef __APPLE__
  4604. .size sha3_block_bmi2,.-sha3_block_bmi2
  4605. #endif /* __APPLE__ */
  4606. #ifndef __APPLE__
  4607. .text
  4608. .globl sha3_block_n_bmi2
  4609. .type sha3_block_n_bmi2,@function
  4610. .align 16
  4611. sha3_block_n_bmi2:
  4612. #else
  4613. .section __TEXT,__text
  4614. .globl _sha3_block_n_bmi2
  4615. .p2align 4
  4616. _sha3_block_n_bmi2:
  4617. #endif /* __APPLE__ */
  4618. pushq %r12
  4619. pushq %r13
  4620. pushq %r14
  4621. pushq %r15
  4622. pushq %rbx
  4623. pushq %rbp
  4624. pushq %rcx
  4625. movq %rcx, %rbp
  4626. movq (%rdi), %rcx
  4627. addq $0x60, %rdi
  4628. L_sha3_block_n_bmi2_start:
  4629. cmpq $0x88, %rbp
  4630. je L_sha3_block_n_bmi2_load_256
  4631. cmpq $0xa8, %rbp
  4632. je L_sha3_block_n_bmi2_load_128
  4633. cmpq $0x90, %rbp
  4634. je L_sha3_block_n_bmi2_load_224
  4635. cmpq $0x68, %rbp
  4636. je L_sha3_block_n_bmi2_load_384
  4637. movq (%rsi), %r12
  4638. movq 8(%rsi), %r13
  4639. movq 16(%rsi), %r14
  4640. movq 24(%rsi), %r15
  4641. movq 32(%rsi), %rbx
  4642. movq 40(%rsi), %rax
  4643. movq 48(%rsi), %r8
  4644. movq 56(%rsi), %r9
  4645. movq 64(%rsi), %r10
  4646. xorq %rcx, %r12
  4647. xorq -88(%rdi), %r13
  4648. xorq -80(%rdi), %r14
  4649. xorq -72(%rdi), %r15
  4650. xorq -64(%rdi), %rbx
  4651. xorq -56(%rdi), %rax
  4652. xorq -48(%rdi), %r8
  4653. xorq -40(%rdi), %r9
  4654. xorq -32(%rdi), %r10
  4655. movq %r12, %rcx
  4656. movq %r13, -88(%rdi)
  4657. movq %r14, -80(%rdi)
  4658. movq %r15, -72(%rdi)
  4659. movq %rbx, -64(%rdi)
  4660. movq %rax, -56(%rdi)
  4661. movq %r8, -48(%rdi)
  4662. movq %r9, -40(%rdi)
  4663. movq %r10, -32(%rdi)
  4664. jmp L_sha3_block_n_bmi2_rounds
  4665. L_sha3_block_n_bmi2_load_128:
  4666. movq (%rsi), %r12
  4667. movq 8(%rsi), %r13
  4668. movq 16(%rsi), %r14
  4669. movq 24(%rsi), %r15
  4670. movq 32(%rsi), %rbx
  4671. xorq %rcx, %r12
  4672. xorq -88(%rdi), %r13
  4673. xorq -80(%rdi), %r14
  4674. xorq -72(%rdi), %r15
  4675. xorq -64(%rdi), %rbx
  4676. movq %r12, %rcx
  4677. movq %r13, -88(%rdi)
  4678. movq %r14, -80(%rdi)
  4679. movq %r15, -72(%rdi)
  4680. movq %rbx, -64(%rdi)
  4681. movq 40(%rsi), %rax
  4682. movq 48(%rsi), %r8
  4683. movq 56(%rsi), %r9
  4684. movq 64(%rsi), %r10
  4685. movq 72(%rsi), %r11
  4686. movq 80(%rsi), %rbp
  4687. xorq -56(%rdi), %rax
  4688. xorq -48(%rdi), %r8
  4689. xorq -40(%rdi), %r9
  4690. xorq -32(%rdi), %r10
  4691. xorq -24(%rdi), %r11
  4692. xorq -16(%rdi), %rbp
  4693. movq %rax, -56(%rdi)
  4694. movq %r8, -48(%rdi)
  4695. movq %r9, -40(%rdi)
  4696. movq %r10, -32(%rdi)
  4697. movq %r11, -24(%rdi)
  4698. movq %rbp, -16(%rdi)
  4699. movq 88(%rsi), %rax
  4700. movq 96(%rsi), %r8
  4701. movq 104(%rsi), %r9
  4702. movq 112(%rsi), %r10
  4703. movq 120(%rsi), %r11
  4704. movq 128(%rsi), %rbp
  4705. xorq -8(%rdi), %rax
  4706. xorq (%rdi), %r8
  4707. xorq 8(%rdi), %r9
  4708. xorq 16(%rdi), %r10
  4709. xorq 24(%rdi), %r11
  4710. xorq 32(%rdi), %rbp
  4711. movq %rax, -8(%rdi)
  4712. movq %r8, (%rdi)
  4713. movq %r9, 8(%rdi)
  4714. movq %r10, 16(%rdi)
  4715. movq %r11, 24(%rdi)
  4716. movq %rbp, 32(%rdi)
  4717. movq 136(%rsi), %rax
  4718. movq 144(%rsi), %r8
  4719. movq 152(%rsi), %r9
  4720. movq 160(%rsi), %r10
  4721. xorq 40(%rdi), %rax
  4722. xorq 48(%rdi), %r8
  4723. xorq 56(%rdi), %r9
  4724. xorq 64(%rdi), %r10
  4725. movq %rax, 40(%rdi)
  4726. movq %r8, 48(%rdi)
  4727. movq %r9, 56(%rdi)
  4728. movq %r10, 64(%rdi)
  4729. jmp L_sha3_block_n_bmi2_rounds
  4730. L_sha3_block_n_bmi2_load_224:
  4731. movq 40(%rsi), %r12
  4732. movq 48(%rsi), %r13
  4733. movq 56(%rsi), %r14
  4734. movq 64(%rsi), %r15
  4735. movq 72(%rsi), %rbx
  4736. movq 80(%rsi), %rax
  4737. movq 88(%rsi), %r8
  4738. movq 96(%rsi), %r9
  4739. movq 104(%rsi), %r10
  4740. movq 112(%rsi), %r11
  4741. xorq -56(%rdi), %r12
  4742. xorq -48(%rdi), %r13
  4743. xorq -40(%rdi), %r14
  4744. xorq -32(%rdi), %r15
  4745. xorq -24(%rdi), %rbx
  4746. xorq -16(%rdi), %rax
  4747. xorq -8(%rdi), %r8
  4748. xorq (%rdi), %r9
  4749. xorq 8(%rdi), %r10
  4750. xorq 16(%rdi), %r11
  4751. movq %r12, -56(%rdi)
  4752. movq %r13, -48(%rdi)
  4753. movq %r14, -40(%rdi)
  4754. movq %r15, -32(%rdi)
  4755. movq %rbx, -24(%rdi)
  4756. movq %rax, -16(%rdi)
  4757. movq %r8, -8(%rdi)
  4758. movq %r9, (%rdi)
  4759. movq %r10, 8(%rdi)
  4760. movq %r11, 16(%rdi)
  4761. movq (%rsi), %r12
  4762. movq 8(%rsi), %r13
  4763. movq 16(%rsi), %r14
  4764. movq 24(%rsi), %r15
  4765. movq 32(%rsi), %rbx
  4766. movq 120(%rsi), %rax
  4767. movq 128(%rsi), %r8
  4768. movq 136(%rsi), %r9
  4769. xorq %rcx, %r12
  4770. xorq -88(%rdi), %r13
  4771. xorq -80(%rdi), %r14
  4772. xorq -72(%rdi), %r15
  4773. xorq -64(%rdi), %rbx
  4774. xorq 24(%rdi), %rax
  4775. xorq 32(%rdi), %r8
  4776. xorq 40(%rdi), %r9
  4777. movq %r12, %rcx
  4778. movq %r13, -88(%rdi)
  4779. movq %r14, -80(%rdi)
  4780. movq %r15, -72(%rdi)
  4781. movq %rbx, -64(%rdi)
  4782. movq %rax, 24(%rdi)
  4783. movq %r8, 32(%rdi)
  4784. movq %r9, 40(%rdi)
  4785. jmp L_sha3_block_n_bmi2_rounds
  4786. L_sha3_block_n_bmi2_load_384:
  4787. movq (%rsi), %r12
  4788. movq 8(%rsi), %r13
  4789. movq 16(%rsi), %r14
  4790. movq 24(%rsi), %r15
  4791. movq 32(%rsi), %rbx
  4792. movq 40(%rsi), %rax
  4793. movq 48(%rsi), %r8
  4794. movq 56(%rsi), %r9
  4795. movq 64(%rsi), %r10
  4796. xorq %rcx, %r12
  4797. xorq -88(%rdi), %r13
  4798. xorq -80(%rdi), %r14
  4799. xorq -72(%rdi), %r15
  4800. xorq -64(%rdi), %rbx
  4801. xorq -56(%rdi), %rax
  4802. xorq -48(%rdi), %r8
  4803. xorq -40(%rdi), %r9
  4804. xorq -32(%rdi), %r10
  4805. movq %r12, %rcx
  4806. movq %r13, -88(%rdi)
  4807. movq %r14, -80(%rdi)
  4808. movq %r15, -72(%rdi)
  4809. movq %rbx, -64(%rdi)
  4810. movq %rax, -56(%rdi)
  4811. movq %r8, -48(%rdi)
  4812. movq %r9, -40(%rdi)
  4813. movq %r10, -32(%rdi)
  4814. movq 72(%rsi), %rax
  4815. movq 80(%rsi), %r8
  4816. movq 88(%rsi), %r9
  4817. movq 96(%rsi), %r10
  4818. xorq -24(%rdi), %rax
  4819. xorq -16(%rdi), %r8
  4820. xorq -8(%rdi), %r9
  4821. xorq (%rdi), %r10
  4822. movq %rax, -24(%rdi)
  4823. movq %r8, -16(%rdi)
  4824. movq %r9, -8(%rdi)
  4825. movq %r10, (%rdi)
  4826. jmp L_sha3_block_n_bmi2_rounds
  4827. L_sha3_block_n_bmi2_load_256:
  4828. movq (%rsi), %r12
  4829. movq 8(%rsi), %r13
  4830. movq 16(%rsi), %r14
  4831. movq 24(%rsi), %r15
  4832. movq 32(%rsi), %rbx
  4833. movq 40(%rsi), %rax
  4834. movq 48(%rsi), %r8
  4835. movq 56(%rsi), %r9
  4836. movq 64(%rsi), %r10
  4837. movq 72(%rsi), %r11
  4838. movq 80(%rsi), %rbp
  4839. xorq %rcx, %r12
  4840. xorq -88(%rdi), %r13
  4841. xorq -80(%rdi), %r14
  4842. xorq -72(%rdi), %r15
  4843. xorq -64(%rdi), %rbx
  4844. xorq -56(%rdi), %rax
  4845. xorq -48(%rdi), %r8
  4846. xorq -40(%rdi), %r9
  4847. xorq -32(%rdi), %r10
  4848. xorq -24(%rdi), %r11
  4849. xorq -16(%rdi), %rbp
  4850. movq %r12, %rcx
  4851. movq %r13, -88(%rdi)
  4852. movq %r14, -80(%rdi)
  4853. movq %r15, -72(%rdi)
  4854. movq %rbx, -64(%rdi)
  4855. movq %rax, -56(%rdi)
  4856. movq %r8, -48(%rdi)
  4857. movq %r9, -40(%rdi)
  4858. movq %r10, -32(%rdi)
  4859. movq %r11, -24(%rdi)
  4860. movq %rbp, -16(%rdi)
  4861. movq 88(%rsi), %rax
  4862. movq 96(%rsi), %r8
  4863. movq 104(%rsi), %r9
  4864. movq 112(%rsi), %r10
  4865. movq 120(%rsi), %r11
  4866. movq 128(%rsi), %rbp
  4867. xorq -8(%rdi), %rax
  4868. xorq (%rdi), %r8
  4869. xorq 8(%rdi), %r9
  4870. xorq 16(%rdi), %r10
  4871. xorq 24(%rdi), %r11
  4872. xorq 32(%rdi), %rbp
  4873. movq %rax, -8(%rdi)
  4874. movq %r8, (%rdi)
  4875. movq %r9, 8(%rdi)
  4876. movq %r10, 16(%rdi)
  4877. movq %r11, 24(%rdi)
  4878. movq %rbp, 32(%rdi)
  4879. L_sha3_block_n_bmi2_rounds:
  4880. # Round 0
  4881. xorq -56(%rdi), %r12
  4882. xorq -48(%rdi), %r13
  4883. xorq -40(%rdi), %r14
  4884. xorq -32(%rdi), %r15
  4885. xorq -24(%rdi), %rbx
  4886. xorq -16(%rdi), %r12
  4887. xorq -8(%rdi), %r13
  4888. xorq (%rdi), %r14
  4889. xorq 8(%rdi), %r15
  4890. xorq 16(%rdi), %rbx
  4891. xorq 24(%rdi), %r12
  4892. xorq 32(%rdi), %r13
  4893. xorq 40(%rdi), %r14
  4894. xorq 48(%rdi), %r15
  4895. xorq 56(%rdi), %rbx
  4896. xorq 64(%rdi), %r12
  4897. xorq 72(%rdi), %r13
  4898. xorq 80(%rdi), %r14
  4899. xorq 88(%rdi), %r15
  4900. xorq 96(%rdi), %rbx
  4901. # Calc t[0..4]
  4902. rorxq $63, %r13, %rax
  4903. rorxq $63, %r14, %r8
  4904. rorxq $63, %r15, %r9
  4905. rorxq $63, %rbx, %r10
  4906. rorxq $63, %r12, %r11
  4907. xorq %rbx, %rax
  4908. xorq %r12, %r8
  4909. xorq %r13, %r9
  4910. xorq %r14, %r10
  4911. xorq %r15, %r11
  4912. # Row Mix
  4913. # Row 0
  4914. movq %rcx, %r12
  4915. movq -48(%rdi), %r13
  4916. movq (%rdi), %r14
  4917. movq 48(%rdi), %r15
  4918. movq 96(%rdi), %rbx
  4919. xorq %rax, %r12
  4920. xorq %r8, %r13
  4921. xorq %r9, %r14
  4922. xorq %r10, %r15
  4923. xorq %r11, %rbx
  4924. rolq $44, %r13
  4925. rolq $43, %r14
  4926. rolq $21, %r15
  4927. rolq $14, %rbx
  4928. andnq %r15, %r14, %rbp
  4929. xorq %r13, %rbp
  4930. movq %rbp, -48(%rdi)
  4931. andnq %rbx, %r15, %rbp
  4932. xorq %r14, %rbp
  4933. movq %rbp, (%rdi)
  4934. andnq %r12, %rbx, %rbp
  4935. xorq %r15, %rbp
  4936. movq %rbp, 48(%rdi)
  4937. andnq %r13, %r12, %rbp
  4938. xorq %rbx, %rbp
  4939. movq %rbp, 96(%rdi)
  4940. andnq %r14, %r13, %rcx
  4941. xorq %r12, %rcx
  4942. # XOR in constant
  4943. xorq $0x01, %rcx
  4944. # Row 1
  4945. movq -72(%rdi), %r12
  4946. movq -24(%rdi), %r13
  4947. movq -16(%rdi), %r14
  4948. movq 32(%rdi), %r15
  4949. movq 80(%rdi), %rbx
  4950. xorq %r10, %r12
  4951. xorq %r11, %r13
  4952. xorq %rax, %r14
  4953. xorq %r8, %r15
  4954. xorq %r9, %rbx
  4955. rolq $28, %r12
  4956. rolq $20, %r13
  4957. rolq $3, %r14
  4958. rolq $45, %r15
  4959. rolq $61, %rbx
  4960. andnq %r15, %r14, %rbp
  4961. xorq %r13, %rbp
  4962. movq %rbp, -24(%rdi)
  4963. andnq %rbx, %r15, %rbp
  4964. xorq %r14, %rbp
  4965. movq %rbp, -16(%rdi)
  4966. andnq %r12, %rbx, %rbp
  4967. xorq %r15, %rbp
  4968. movq %rbp, 32(%rdi)
  4969. andnq %r13, %r12, %rbp
  4970. xorq %rbx, %rbp
  4971. movq %rbp, 80(%rdi)
  4972. andnq %r14, %r13, %rbp
  4973. xorq %r12, %rbp
  4974. movq %rbp, -72(%rdi)
  4975. # Row 2
  4976. movq -88(%rdi), %r12
  4977. movq -40(%rdi), %r13
  4978. movq 8(%rdi), %r14
  4979. movq 56(%rdi), %r15
  4980. movq 64(%rdi), %rbx
  4981. xorq %r8, %r12
  4982. xorq %r9, %r13
  4983. xorq %r10, %r14
  4984. xorq %r11, %r15
  4985. xorq %rax, %rbx
  4986. rolq $0x01, %r12
  4987. rolq $6, %r13
  4988. rolq $25, %r14
  4989. rolq $8, %r15
  4990. rolq $18, %rbx
  4991. andnq %r15, %r14, %rbp
  4992. xorq %r13, %rbp
  4993. movq %rbp, -40(%rdi)
  4994. andnq %rbx, %r15, %rbp
  4995. xorq %r14, %rbp
  4996. movq %rbp, 8(%rdi)
  4997. andnq %r12, %rbx, %rbp
  4998. xorq %r15, %rbp
  4999. movq %rbp, 56(%rdi)
  5000. andnq %r13, %r12, %rbp
  5001. xorq %rbx, %rbp
  5002. movq %rbp, 64(%rdi)
  5003. andnq %r14, %r13, %rbp
  5004. xorq %r12, %rbp
  5005. movq %rbp, -88(%rdi)
  5006. # Row 3
  5007. movq -64(%rdi), %r12
  5008. movq -56(%rdi), %r13
  5009. movq -8(%rdi), %r14
  5010. movq 40(%rdi), %r15
  5011. movq 88(%rdi), %rbx
  5012. xorq %r11, %r12
  5013. xorq %rax, %r13
  5014. xorq %r8, %r14
  5015. xorq %r9, %r15
  5016. xorq %r10, %rbx
  5017. rolq $27, %r12
  5018. rolq $36, %r13
  5019. rolq $10, %r14
  5020. rolq $15, %r15
  5021. rolq $56, %rbx
  5022. andnq %r15, %r14, %rbp
  5023. xorq %r13, %rbp
  5024. movq %rbp, -56(%rdi)
  5025. andnq %rbx, %r15, %rbp
  5026. xorq %r14, %rbp
  5027. movq %rbp, -8(%rdi)
  5028. andnq %r12, %rbx, %rbp
  5029. xorq %r15, %rbp
  5030. movq %rbp, 40(%rdi)
  5031. andnq %r13, %r12, %rbp
  5032. xorq %rbx, %rbp
  5033. movq %rbp, 88(%rdi)
  5034. andnq %r14, %r13, %rbp
  5035. xorq %r12, %rbp
  5036. movq %rbp, -64(%rdi)
  5037. # Row 4
  5038. xorq -80(%rdi), %r9
  5039. xorq -32(%rdi), %r10
  5040. xorq 16(%rdi), %r11
  5041. xorq 24(%rdi), %rax
  5042. xorq 72(%rdi), %r8
  5043. rorxq $2, %r9, %r12
  5044. rorxq $9, %r10, %r13
  5045. rorxq $25, %r11, %r14
  5046. rorxq $23, %rax, %r15
  5047. rorxq $62, %r8, %rbx
  5048. andnq %r14, %r13, %rax
  5049. andnq %r15, %r14, %r8
  5050. andnq %rbx, %r15, %r9
  5051. andnq %r12, %rbx, %r10
  5052. andnq %r13, %r12, %r11
  5053. xorq %rax, %r12
  5054. xorq %r8, %r13
  5055. xorq %r9, %r14
  5056. xorq %r10, %r15
  5057. xorq %r11, %rbx
  5058. movq %r12, -80(%rdi)
  5059. movq %r13, -32(%rdi)
  5060. movq %r14, 16(%rdi)
  5061. movq %r15, 24(%rdi)
  5062. movq %rbx, 72(%rdi)
  5063. # Round 1
  5064. xorq %rcx, %r12
  5065. xorq -88(%rdi), %r12
  5066. xorq -72(%rdi), %r12
  5067. xorq -64(%rdi), %r12
  5068. xorq -56(%rdi), %r13
  5069. xorq -48(%rdi), %r13
  5070. xorq -40(%rdi), %r13
  5071. xorq -24(%rdi), %r13
  5072. xorq -16(%rdi), %r14
  5073. xorq -8(%rdi), %r14
  5074. xorq (%rdi), %r14
  5075. xorq 8(%rdi), %r14
  5076. xorq 32(%rdi), %r15
  5077. xorq 40(%rdi), %r15
  5078. xorq 48(%rdi), %r15
  5079. xorq 56(%rdi), %r15
  5080. xorq 64(%rdi), %rbx
  5081. xorq 80(%rdi), %rbx
  5082. xorq 88(%rdi), %rbx
  5083. xorq 96(%rdi), %rbx
  5084. # Calc t[0..4]
  5085. rorxq $63, %r13, %rax
  5086. rorxq $63, %r14, %r8
  5087. rorxq $63, %r15, %r9
  5088. rorxq $63, %rbx, %r10
  5089. rorxq $63, %r12, %r11
  5090. xorq %rbx, %rax
  5091. xorq %r12, %r8
  5092. xorq %r13, %r9
  5093. xorq %r14, %r10
  5094. xorq %r15, %r11
  5095. # Row Mix
  5096. # Row 0
  5097. movq %rcx, %r12
  5098. movq -24(%rdi), %r13
  5099. movq 8(%rdi), %r14
  5100. movq 40(%rdi), %r15
  5101. movq 72(%rdi), %rbx
  5102. xorq %rax, %r12
  5103. xorq %r8, %r13
  5104. xorq %r9, %r14
  5105. xorq %r10, %r15
  5106. xorq %r11, %rbx
  5107. rolq $44, %r13
  5108. rolq $43, %r14
  5109. rolq $21, %r15
  5110. rolq $14, %rbx
  5111. andnq %r15, %r14, %rbp
  5112. xorq %r13, %rbp
  5113. movq %rbp, -24(%rdi)
  5114. andnq %rbx, %r15, %rbp
  5115. xorq %r14, %rbp
  5116. movq %rbp, 8(%rdi)
  5117. andnq %r12, %rbx, %rbp
  5118. xorq %r15, %rbp
  5119. movq %rbp, 40(%rdi)
  5120. andnq %r13, %r12, %rbp
  5121. xorq %rbx, %rbp
  5122. movq %rbp, 72(%rdi)
  5123. andnq %r14, %r13, %rcx
  5124. xorq %r12, %rcx
  5125. # XOR in constant
  5126. xorq $0x8082, %rcx
  5127. # Row 1
  5128. movq 48(%rdi), %r12
  5129. movq 80(%rdi), %r13
  5130. movq -88(%rdi), %r14
  5131. movq -56(%rdi), %r15
  5132. movq 16(%rdi), %rbx
  5133. xorq %r10, %r12
  5134. xorq %r11, %r13
  5135. xorq %rax, %r14
  5136. xorq %r8, %r15
  5137. xorq %r9, %rbx
  5138. rolq $28, %r12
  5139. rolq $20, %r13
  5140. rolq $3, %r14
  5141. rolq $45, %r15
  5142. rolq $61, %rbx
  5143. andnq %r15, %r14, %rbp
  5144. xorq %r13, %rbp
  5145. movq %rbp, 80(%rdi)
  5146. andnq %rbx, %r15, %rbp
  5147. xorq %r14, %rbp
  5148. movq %rbp, -88(%rdi)
  5149. andnq %r12, %rbx, %rbp
  5150. xorq %r15, %rbp
  5151. movq %rbp, -56(%rdi)
  5152. andnq %r13, %r12, %rbp
  5153. xorq %rbx, %rbp
  5154. movq %rbp, 16(%rdi)
  5155. andnq %r14, %r13, %rbp
  5156. xorq %r12, %rbp
  5157. movq %rbp, 48(%rdi)
  5158. # Row 2
  5159. movq -48(%rdi), %r12
  5160. movq -16(%rdi), %r13
  5161. movq 56(%rdi), %r14
  5162. movq 88(%rdi), %r15
  5163. movq -80(%rdi), %rbx
  5164. xorq %r8, %r12
  5165. xorq %r9, %r13
  5166. xorq %r10, %r14
  5167. xorq %r11, %r15
  5168. xorq %rax, %rbx
  5169. rolq $0x01, %r12
  5170. rolq $6, %r13
  5171. rolq $25, %r14
  5172. rolq $8, %r15
  5173. rolq $18, %rbx
  5174. andnq %r15, %r14, %rbp
  5175. xorq %r13, %rbp
  5176. movq %rbp, -16(%rdi)
  5177. andnq %rbx, %r15, %rbp
  5178. xorq %r14, %rbp
  5179. movq %rbp, 56(%rdi)
  5180. andnq %r12, %rbx, %rbp
  5181. xorq %r15, %rbp
  5182. movq %rbp, 88(%rdi)
  5183. andnq %r13, %r12, %rbp
  5184. xorq %rbx, %rbp
  5185. movq %rbp, -80(%rdi)
  5186. andnq %r14, %r13, %rbp
  5187. xorq %r12, %rbp
  5188. movq %rbp, -48(%rdi)
  5189. # Row 3
  5190. movq 96(%rdi), %r12
  5191. movq -72(%rdi), %r13
  5192. movq -40(%rdi), %r14
  5193. movq -8(%rdi), %r15
  5194. movq 24(%rdi), %rbx
  5195. xorq %r11, %r12
  5196. xorq %rax, %r13
  5197. xorq %r8, %r14
  5198. xorq %r9, %r15
  5199. xorq %r10, %rbx
  5200. rolq $27, %r12
  5201. rolq $36, %r13
  5202. rolq $10, %r14
  5203. rolq $15, %r15
  5204. rolq $56, %rbx
  5205. andnq %r15, %r14, %rbp
  5206. xorq %r13, %rbp
  5207. movq %rbp, -72(%rdi)
  5208. andnq %rbx, %r15, %rbp
  5209. xorq %r14, %rbp
  5210. movq %rbp, -40(%rdi)
  5211. andnq %r12, %rbx, %rbp
  5212. xorq %r15, %rbp
  5213. movq %rbp, -8(%rdi)
  5214. andnq %r13, %r12, %rbp
  5215. xorq %rbx, %rbp
  5216. movq %rbp, 24(%rdi)
  5217. andnq %r14, %r13, %rbp
  5218. xorq %r12, %rbp
  5219. movq %rbp, 96(%rdi)
  5220. # Row 4
  5221. xorq (%rdi), %r9
  5222. xorq 32(%rdi), %r10
  5223. xorq 64(%rdi), %r11
  5224. xorq -64(%rdi), %rax
  5225. xorq -32(%rdi), %r8
  5226. rorxq $2, %r9, %r12
  5227. rorxq $9, %r10, %r13
  5228. rorxq $25, %r11, %r14
  5229. rorxq $23, %rax, %r15
  5230. rorxq $62, %r8, %rbx
  5231. andnq %r14, %r13, %rax
  5232. andnq %r15, %r14, %r8
  5233. andnq %rbx, %r15, %r9
  5234. andnq %r12, %rbx, %r10
  5235. andnq %r13, %r12, %r11
  5236. xorq %rax, %r12
  5237. xorq %r8, %r13
  5238. xorq %r9, %r14
  5239. xorq %r10, %r15
  5240. xorq %r11, %rbx
  5241. movq %r12, (%rdi)
  5242. movq %r13, 32(%rdi)
  5243. movq %r14, 64(%rdi)
  5244. movq %r15, -64(%rdi)
  5245. movq %rbx, -32(%rdi)
  5246. # Round 2
  5247. xorq %rcx, %r12
  5248. xorq -88(%rdi), %r14
  5249. xorq -80(%rdi), %rbx
  5250. xorq -72(%rdi), %r13
  5251. xorq -56(%rdi), %r15
  5252. xorq -48(%rdi), %r12
  5253. xorq -40(%rdi), %r14
  5254. xorq -24(%rdi), %r13
  5255. xorq -16(%rdi), %r13
  5256. xorq -8(%rdi), %r15
  5257. xorq 8(%rdi), %r14
  5258. xorq 16(%rdi), %rbx
  5259. xorq 24(%rdi), %rbx
  5260. xorq 40(%rdi), %r15
  5261. xorq 48(%rdi), %r12
  5262. xorq 56(%rdi), %r14
  5263. xorq 72(%rdi), %rbx
  5264. xorq 80(%rdi), %r13
  5265. xorq 88(%rdi), %r15
  5266. xorq 96(%rdi), %r12
  5267. # Calc t[0..4]
  5268. rorxq $63, %r13, %rax
  5269. rorxq $63, %r14, %r8
  5270. rorxq $63, %r15, %r9
  5271. rorxq $63, %rbx, %r10
  5272. rorxq $63, %r12, %r11
  5273. xorq %rbx, %rax
  5274. xorq %r12, %r8
  5275. xorq %r13, %r9
  5276. xorq %r14, %r10
  5277. xorq %r15, %r11
  5278. # Row Mix
  5279. # Row 0
  5280. movq %rcx, %r12
  5281. movq 80(%rdi), %r13
  5282. movq 56(%rdi), %r14
  5283. movq -8(%rdi), %r15
  5284. movq -32(%rdi), %rbx
  5285. xorq %rax, %r12
  5286. xorq %r8, %r13
  5287. xorq %r9, %r14
  5288. xorq %r10, %r15
  5289. xorq %r11, %rbx
  5290. rolq $44, %r13
  5291. rolq $43, %r14
  5292. rolq $21, %r15
  5293. rolq $14, %rbx
  5294. andnq %r15, %r14, %rbp
  5295. xorq %r13, %rbp
  5296. movq %rbp, 80(%rdi)
  5297. andnq %rbx, %r15, %rbp
  5298. xorq %r14, %rbp
  5299. movq %rbp, 56(%rdi)
  5300. andnq %r12, %rbx, %rbp
  5301. xorq %r15, %rbp
  5302. movq %rbp, -8(%rdi)
  5303. andnq %r13, %r12, %rbp
  5304. xorq %rbx, %rbp
  5305. movq %rbp, -32(%rdi)
  5306. movq $0x800000000000808a, %rbx
  5307. andnq %r14, %r13, %rcx
  5308. xorq %r12, %rcx
  5309. # XOR in constant
  5310. xorq %rbx, %rcx
  5311. # Row 1
  5312. movq 40(%rdi), %r12
  5313. movq 16(%rdi), %r13
  5314. movq -48(%rdi), %r14
  5315. movq -72(%rdi), %r15
  5316. movq 64(%rdi), %rbx
  5317. xorq %r10, %r12
  5318. xorq %r11, %r13
  5319. xorq %rax, %r14
  5320. xorq %r8, %r15
  5321. xorq %r9, %rbx
  5322. rolq $28, %r12
  5323. rolq $20, %r13
  5324. rolq $3, %r14
  5325. rolq $45, %r15
  5326. rolq $61, %rbx
  5327. andnq %r15, %r14, %rbp
  5328. xorq %r13, %rbp
  5329. movq %rbp, 16(%rdi)
  5330. andnq %rbx, %r15, %rbp
  5331. xorq %r14, %rbp
  5332. movq %rbp, -48(%rdi)
  5333. andnq %r12, %rbx, %rbp
  5334. xorq %r15, %rbp
  5335. movq %rbp, -72(%rdi)
  5336. andnq %r13, %r12, %rbp
  5337. xorq %rbx, %rbp
  5338. movq %rbp, 64(%rdi)
  5339. andnq %r14, %r13, %rbp
  5340. xorq %r12, %rbp
  5341. movq %rbp, 40(%rdi)
  5342. # Row 2
  5343. movq -24(%rdi), %r12
  5344. movq -88(%rdi), %r13
  5345. movq 88(%rdi), %r14
  5346. movq 24(%rdi), %r15
  5347. movq (%rdi), %rbx
  5348. xorq %r8, %r12
  5349. xorq %r9, %r13
  5350. xorq %r10, %r14
  5351. xorq %r11, %r15
  5352. xorq %rax, %rbx
  5353. rolq $0x01, %r12
  5354. rolq $6, %r13
  5355. rolq $25, %r14
  5356. rolq $8, %r15
  5357. rolq $18, %rbx
  5358. andnq %r15, %r14, %rbp
  5359. xorq %r13, %rbp
  5360. movq %rbp, -88(%rdi)
  5361. andnq %rbx, %r15, %rbp
  5362. xorq %r14, %rbp
  5363. movq %rbp, 88(%rdi)
  5364. andnq %r12, %rbx, %rbp
  5365. xorq %r15, %rbp
  5366. movq %rbp, 24(%rdi)
  5367. andnq %r13, %r12, %rbp
  5368. xorq %rbx, %rbp
  5369. movq %rbp, (%rdi)
  5370. andnq %r14, %r13, %rbp
  5371. xorq %r12, %rbp
  5372. movq %rbp, -24(%rdi)
  5373. # Row 3
  5374. movq 72(%rdi), %r12
  5375. movq 48(%rdi), %r13
  5376. movq -16(%rdi), %r14
  5377. movq -40(%rdi), %r15
  5378. movq -64(%rdi), %rbx
  5379. xorq %r11, %r12
  5380. xorq %rax, %r13
  5381. xorq %r8, %r14
  5382. xorq %r9, %r15
  5383. xorq %r10, %rbx
  5384. rolq $27, %r12
  5385. rolq $36, %r13
  5386. rolq $10, %r14
  5387. rolq $15, %r15
  5388. rolq $56, %rbx
  5389. andnq %r15, %r14, %rbp
  5390. xorq %r13, %rbp
  5391. movq %rbp, 48(%rdi)
  5392. andnq %rbx, %r15, %rbp
  5393. xorq %r14, %rbp
  5394. movq %rbp, -16(%rdi)
  5395. andnq %r12, %rbx, %rbp
  5396. xorq %r15, %rbp
  5397. movq %rbp, -40(%rdi)
  5398. andnq %r13, %r12, %rbp
  5399. xorq %rbx, %rbp
  5400. movq %rbp, -64(%rdi)
  5401. andnq %r14, %r13, %rbp
  5402. xorq %r12, %rbp
  5403. movq %rbp, 72(%rdi)
  5404. # Row 4
  5405. xorq 8(%rdi), %r9
  5406. xorq -56(%rdi), %r10
  5407. xorq -80(%rdi), %r11
  5408. xorq 96(%rdi), %rax
  5409. xorq 32(%rdi), %r8
  5410. rorxq $2, %r9, %r12
  5411. rorxq $9, %r10, %r13
  5412. rorxq $25, %r11, %r14
  5413. rorxq $23, %rax, %r15
  5414. rorxq $62, %r8, %rbx
  5415. andnq %r14, %r13, %rax
  5416. andnq %r15, %r14, %r8
  5417. andnq %rbx, %r15, %r9
  5418. andnq %r12, %rbx, %r10
  5419. andnq %r13, %r12, %r11
  5420. xorq %rax, %r12
  5421. xorq %r8, %r13
  5422. xorq %r9, %r14
  5423. xorq %r10, %r15
  5424. xorq %r11, %rbx
  5425. movq %r12, 8(%rdi)
  5426. movq %r13, -56(%rdi)
  5427. movq %r14, -80(%rdi)
  5428. movq %r15, 96(%rdi)
  5429. movq %rbx, 32(%rdi)
  5430. # Round 3
  5431. xorq %rcx, %r12
  5432. xorq -88(%rdi), %r13
  5433. xorq -72(%rdi), %r15
  5434. xorq -64(%rdi), %rbx
  5435. xorq -48(%rdi), %r14
  5436. xorq -40(%rdi), %r15
  5437. xorq -32(%rdi), %rbx
  5438. xorq -24(%rdi), %r12
  5439. xorq -16(%rdi), %r14
  5440. xorq -8(%rdi), %r15
  5441. xorq (%rdi), %rbx
  5442. xorq 16(%rdi), %r13
  5443. xorq 24(%rdi), %r15
  5444. xorq 40(%rdi), %r12
  5445. xorq 48(%rdi), %r13
  5446. xorq 56(%rdi), %r14
  5447. xorq 64(%rdi), %rbx
  5448. xorq 72(%rdi), %r12
  5449. xorq 80(%rdi), %r13
  5450. xorq 88(%rdi), %r14
  5451. # Calc t[0..4]
  5452. rorxq $63, %r13, %rax
  5453. rorxq $63, %r14, %r8
  5454. rorxq $63, %r15, %r9
  5455. rorxq $63, %rbx, %r10
  5456. rorxq $63, %r12, %r11
  5457. xorq %rbx, %rax
  5458. xorq %r12, %r8
  5459. xorq %r13, %r9
  5460. xorq %r14, %r10
  5461. xorq %r15, %r11
  5462. # Row Mix
  5463. # Row 0
  5464. movq %rcx, %r12
  5465. movq 16(%rdi), %r13
  5466. movq 88(%rdi), %r14
  5467. movq -40(%rdi), %r15
  5468. movq 32(%rdi), %rbx
  5469. xorq %rax, %r12
  5470. xorq %r8, %r13
  5471. xorq %r9, %r14
  5472. xorq %r10, %r15
  5473. xorq %r11, %rbx
  5474. rolq $44, %r13
  5475. rolq $43, %r14
  5476. rolq $21, %r15
  5477. rolq $14, %rbx
  5478. andnq %r15, %r14, %rbp
  5479. xorq %r13, %rbp
  5480. movq %rbp, 16(%rdi)
  5481. andnq %rbx, %r15, %rbp
  5482. xorq %r14, %rbp
  5483. movq %rbp, 88(%rdi)
  5484. andnq %r12, %rbx, %rbp
  5485. xorq %r15, %rbp
  5486. movq %rbp, -40(%rdi)
  5487. andnq %r13, %r12, %rbp
  5488. xorq %rbx, %rbp
  5489. movq %rbp, 32(%rdi)
  5490. movq $0x8000000080008000, %rbx
  5491. andnq %r14, %r13, %rcx
  5492. xorq %r12, %rcx
  5493. # XOR in constant
  5494. xorq %rbx, %rcx
  5495. # Row 1
  5496. movq -8(%rdi), %r12
  5497. movq 64(%rdi), %r13
  5498. movq -24(%rdi), %r14
  5499. movq 48(%rdi), %r15
  5500. movq -80(%rdi), %rbx
  5501. xorq %r10, %r12
  5502. xorq %r11, %r13
  5503. xorq %rax, %r14
  5504. xorq %r8, %r15
  5505. xorq %r9, %rbx
  5506. rolq $28, %r12
  5507. rolq $20, %r13
  5508. rolq $3, %r14
  5509. rolq $45, %r15
  5510. rolq $61, %rbx
  5511. andnq %r15, %r14, %rbp
  5512. xorq %r13, %rbp
  5513. movq %rbp, 64(%rdi)
  5514. andnq %rbx, %r15, %rbp
  5515. xorq %r14, %rbp
  5516. movq %rbp, -24(%rdi)
  5517. andnq %r12, %rbx, %rbp
  5518. xorq %r15, %rbp
  5519. movq %rbp, 48(%rdi)
  5520. andnq %r13, %r12, %rbp
  5521. xorq %rbx, %rbp
  5522. movq %rbp, -80(%rdi)
  5523. andnq %r14, %r13, %rbp
  5524. xorq %r12, %rbp
  5525. movq %rbp, -8(%rdi)
  5526. # Row 2
  5527. movq 80(%rdi), %r12
  5528. movq -48(%rdi), %r13
  5529. movq 24(%rdi), %r14
  5530. movq -64(%rdi), %r15
  5531. movq 8(%rdi), %rbx
  5532. xorq %r8, %r12
  5533. xorq %r9, %r13
  5534. xorq %r10, %r14
  5535. xorq %r11, %r15
  5536. xorq %rax, %rbx
  5537. rolq $0x01, %r12
  5538. rolq $6, %r13
  5539. rolq $25, %r14
  5540. rolq $8, %r15
  5541. rolq $18, %rbx
  5542. andnq %r15, %r14, %rbp
  5543. xorq %r13, %rbp
  5544. movq %rbp, -48(%rdi)
  5545. andnq %rbx, %r15, %rbp
  5546. xorq %r14, %rbp
  5547. movq %rbp, 24(%rdi)
  5548. andnq %r12, %rbx, %rbp
  5549. xorq %r15, %rbp
  5550. movq %rbp, -64(%rdi)
  5551. andnq %r13, %r12, %rbp
  5552. xorq %rbx, %rbp
  5553. movq %rbp, 8(%rdi)
  5554. andnq %r14, %r13, %rbp
  5555. xorq %r12, %rbp
  5556. movq %rbp, 80(%rdi)
  5557. # Row 3
  5558. movq -32(%rdi), %r12
  5559. movq 40(%rdi), %r13
  5560. movq -88(%rdi), %r14
  5561. movq -16(%rdi), %r15
  5562. movq 96(%rdi), %rbx
  5563. xorq %r11, %r12
  5564. xorq %rax, %r13
  5565. xorq %r8, %r14
  5566. xorq %r9, %r15
  5567. xorq %r10, %rbx
  5568. rolq $27, %r12
  5569. rolq $36, %r13
  5570. rolq $10, %r14
  5571. rolq $15, %r15
  5572. rolq $56, %rbx
  5573. andnq %r15, %r14, %rbp
  5574. xorq %r13, %rbp
  5575. movq %rbp, 40(%rdi)
  5576. andnq %rbx, %r15, %rbp
  5577. xorq %r14, %rbp
  5578. movq %rbp, -88(%rdi)
  5579. andnq %r12, %rbx, %rbp
  5580. xorq %r15, %rbp
  5581. movq %rbp, -16(%rdi)
  5582. andnq %r13, %r12, %rbp
  5583. xorq %rbx, %rbp
  5584. movq %rbp, 96(%rdi)
  5585. andnq %r14, %r13, %rbp
  5586. xorq %r12, %rbp
  5587. movq %rbp, -32(%rdi)
  5588. # Row 4
  5589. xorq 56(%rdi), %r9
  5590. xorq -72(%rdi), %r10
  5591. xorq (%rdi), %r11
  5592. xorq 72(%rdi), %rax
  5593. xorq -56(%rdi), %r8
  5594. rorxq $2, %r9, %r12
  5595. rorxq $9, %r10, %r13
  5596. rorxq $25, %r11, %r14
  5597. rorxq $23, %rax, %r15
  5598. rorxq $62, %r8, %rbx
  5599. andnq %r14, %r13, %rax
  5600. andnq %r15, %r14, %r8
  5601. andnq %rbx, %r15, %r9
  5602. andnq %r12, %rbx, %r10
  5603. andnq %r13, %r12, %r11
  5604. xorq %rax, %r12
  5605. xorq %r8, %r13
  5606. xorq %r9, %r14
  5607. xorq %r10, %r15
  5608. xorq %r11, %rbx
  5609. movq %r12, 56(%rdi)
  5610. movq %r13, -72(%rdi)
  5611. movq %r14, (%rdi)
  5612. movq %r15, 72(%rdi)
  5613. movq %rbx, -56(%rdi)
  5614. # Round 4
  5615. xorq %rcx, %r12
  5616. xorq -88(%rdi), %r14
  5617. xorq -80(%rdi), %rbx
  5618. xorq -64(%rdi), %r15
  5619. xorq -48(%rdi), %r13
  5620. xorq -40(%rdi), %r15
  5621. xorq -32(%rdi), %r12
  5622. xorq -24(%rdi), %r14
  5623. xorq -16(%rdi), %r15
  5624. xorq -8(%rdi), %r12
  5625. xorq 8(%rdi), %rbx
  5626. xorq 16(%rdi), %r13
  5627. xorq 24(%rdi), %r14
  5628. xorq 32(%rdi), %rbx
  5629. xorq 40(%rdi), %r13
  5630. xorq 48(%rdi), %r15
  5631. xorq 64(%rdi), %r13
  5632. xorq 80(%rdi), %r12
  5633. xorq 88(%rdi), %r14
  5634. xorq 96(%rdi), %rbx
  5635. # Calc t[0..4]
  5636. rorxq $63, %r13, %rax
  5637. rorxq $63, %r14, %r8
  5638. rorxq $63, %r15, %r9
  5639. rorxq $63, %rbx, %r10
  5640. rorxq $63, %r12, %r11
  5641. xorq %rbx, %rax
  5642. xorq %r12, %r8
  5643. xorq %r13, %r9
  5644. xorq %r14, %r10
  5645. xorq %r15, %r11
  5646. # Row Mix
  5647. # Row 0
  5648. movq %rcx, %r12
  5649. movq 64(%rdi), %r13
  5650. movq 24(%rdi), %r14
  5651. movq -16(%rdi), %r15
  5652. movq -56(%rdi), %rbx
  5653. xorq %rax, %r12
  5654. xorq %r8, %r13
  5655. xorq %r9, %r14
  5656. xorq %r10, %r15
  5657. xorq %r11, %rbx
  5658. rolq $44, %r13
  5659. rolq $43, %r14
  5660. rolq $21, %r15
  5661. rolq $14, %rbx
  5662. andnq %r15, %r14, %rbp
  5663. xorq %r13, %rbp
  5664. movq %rbp, 64(%rdi)
  5665. andnq %rbx, %r15, %rbp
  5666. xorq %r14, %rbp
  5667. movq %rbp, 24(%rdi)
  5668. andnq %r12, %rbx, %rbp
  5669. xorq %r15, %rbp
  5670. movq %rbp, -16(%rdi)
  5671. andnq %r13, %r12, %rbp
  5672. xorq %rbx, %rbp
  5673. movq %rbp, -56(%rdi)
  5674. andnq %r14, %r13, %rcx
  5675. xorq %r12, %rcx
  5676. # XOR in constant
  5677. xorq $0x808b, %rcx
  5678. # Row 1
  5679. movq -40(%rdi), %r12
  5680. movq -80(%rdi), %r13
  5681. movq 80(%rdi), %r14
  5682. movq 40(%rdi), %r15
  5683. movq (%rdi), %rbx
  5684. xorq %r10, %r12
  5685. xorq %r11, %r13
  5686. xorq %rax, %r14
  5687. xorq %r8, %r15
  5688. xorq %r9, %rbx
  5689. rolq $28, %r12
  5690. rolq $20, %r13
  5691. rolq $3, %r14
  5692. rolq $45, %r15
  5693. rolq $61, %rbx
  5694. andnq %r15, %r14, %rbp
  5695. xorq %r13, %rbp
  5696. movq %rbp, -80(%rdi)
  5697. andnq %rbx, %r15, %rbp
  5698. xorq %r14, %rbp
  5699. movq %rbp, 80(%rdi)
  5700. andnq %r12, %rbx, %rbp
  5701. xorq %r15, %rbp
  5702. movq %rbp, 40(%rdi)
  5703. andnq %r13, %r12, %rbp
  5704. xorq %rbx, %rbp
  5705. movq %rbp, (%rdi)
  5706. andnq %r14, %r13, %rbp
  5707. xorq %r12, %rbp
  5708. movq %rbp, -40(%rdi)
  5709. # Row 2
  5710. movq 16(%rdi), %r12
  5711. movq -24(%rdi), %r13
  5712. movq -64(%rdi), %r14
  5713. movq 96(%rdi), %r15
  5714. movq 56(%rdi), %rbx
  5715. xorq %r8, %r12
  5716. xorq %r9, %r13
  5717. xorq %r10, %r14
  5718. xorq %r11, %r15
  5719. xorq %rax, %rbx
  5720. rolq $0x01, %r12
  5721. rolq $6, %r13
  5722. rolq $25, %r14
  5723. rolq $8, %r15
  5724. rolq $18, %rbx
  5725. andnq %r15, %r14, %rbp
  5726. xorq %r13, %rbp
  5727. movq %rbp, -24(%rdi)
  5728. andnq %rbx, %r15, %rbp
  5729. xorq %r14, %rbp
  5730. movq %rbp, -64(%rdi)
  5731. andnq %r12, %rbx, %rbp
  5732. xorq %r15, %rbp
  5733. movq %rbp, 96(%rdi)
  5734. andnq %r13, %r12, %rbp
  5735. xorq %rbx, %rbp
  5736. movq %rbp, 56(%rdi)
  5737. andnq %r14, %r13, %rbp
  5738. xorq %r12, %rbp
  5739. movq %rbp, 16(%rdi)
  5740. # Row 3
  5741. movq 32(%rdi), %r12
  5742. movq -8(%rdi), %r13
  5743. movq -48(%rdi), %r14
  5744. movq -88(%rdi), %r15
  5745. movq 72(%rdi), %rbx
  5746. xorq %r11, %r12
  5747. xorq %rax, %r13
  5748. xorq %r8, %r14
  5749. xorq %r9, %r15
  5750. xorq %r10, %rbx
  5751. rolq $27, %r12
  5752. rolq $36, %r13
  5753. rolq $10, %r14
  5754. rolq $15, %r15
  5755. rolq $56, %rbx
  5756. andnq %r15, %r14, %rbp
  5757. xorq %r13, %rbp
  5758. movq %rbp, -8(%rdi)
  5759. andnq %rbx, %r15, %rbp
  5760. xorq %r14, %rbp
  5761. movq %rbp, -48(%rdi)
  5762. andnq %r12, %rbx, %rbp
  5763. xorq %r15, %rbp
  5764. movq %rbp, -88(%rdi)
  5765. andnq %r13, %r12, %rbp
  5766. xorq %rbx, %rbp
  5767. movq %rbp, 72(%rdi)
  5768. andnq %r14, %r13, %rbp
  5769. xorq %r12, %rbp
  5770. movq %rbp, 32(%rdi)
  5771. # Row 4
  5772. xorq 88(%rdi), %r9
  5773. xorq 48(%rdi), %r10
  5774. xorq 8(%rdi), %r11
  5775. xorq -32(%rdi), %rax
  5776. xorq -72(%rdi), %r8
  5777. rorxq $2, %r9, %r12
  5778. rorxq $9, %r10, %r13
  5779. rorxq $25, %r11, %r14
  5780. rorxq $23, %rax, %r15
  5781. rorxq $62, %r8, %rbx
  5782. andnq %r14, %r13, %rax
  5783. andnq %r15, %r14, %r8
  5784. andnq %rbx, %r15, %r9
  5785. andnq %r12, %rbx, %r10
  5786. andnq %r13, %r12, %r11
  5787. xorq %rax, %r12
  5788. xorq %r8, %r13
  5789. xorq %r9, %r14
  5790. xorq %r10, %r15
  5791. xorq %r11, %rbx
  5792. movq %r12, 88(%rdi)
  5793. movq %r13, 48(%rdi)
  5794. movq %r14, 8(%rdi)
  5795. movq %r15, -32(%rdi)
  5796. movq %rbx, -72(%rdi)
  5797. # Round 5
  5798. xorq %rcx, %r12
  5799. xorq -88(%rdi), %r15
  5800. xorq -80(%rdi), %r13
  5801. xorq -64(%rdi), %r14
  5802. xorq -56(%rdi), %rbx
  5803. xorq -48(%rdi), %r14
  5804. xorq -40(%rdi), %r12
  5805. xorq -24(%rdi), %r13
  5806. xorq -16(%rdi), %r15
  5807. xorq -8(%rdi), %r13
  5808. xorq (%rdi), %rbx
  5809. xorq 16(%rdi), %r12
  5810. xorq 24(%rdi), %r14
  5811. xorq 32(%rdi), %r12
  5812. xorq 40(%rdi), %r15
  5813. xorq 56(%rdi), %rbx
  5814. xorq 64(%rdi), %r13
  5815. xorq 72(%rdi), %rbx
  5816. xorq 80(%rdi), %r14
  5817. xorq 96(%rdi), %r15
  5818. # Calc t[0..4]
  5819. rorxq $63, %r13, %rax
  5820. rorxq $63, %r14, %r8
  5821. rorxq $63, %r15, %r9
  5822. rorxq $63, %rbx, %r10
  5823. rorxq $63, %r12, %r11
  5824. xorq %rbx, %rax
  5825. xorq %r12, %r8
  5826. xorq %r13, %r9
  5827. xorq %r14, %r10
  5828. xorq %r15, %r11
  5829. # Row Mix
  5830. # Row 0
  5831. movq %rcx, %r12
  5832. movq -80(%rdi), %r13
  5833. movq -64(%rdi), %r14
  5834. movq -88(%rdi), %r15
  5835. movq -72(%rdi), %rbx
  5836. xorq %rax, %r12
  5837. xorq %r8, %r13
  5838. xorq %r9, %r14
  5839. xorq %r10, %r15
  5840. xorq %r11, %rbx
  5841. rolq $44, %r13
  5842. rolq $43, %r14
  5843. rolq $21, %r15
  5844. rolq $14, %rbx
  5845. andnq %r15, %r14, %rbp
  5846. xorq %r13, %rbp
  5847. movq %rbp, -80(%rdi)
  5848. andnq %rbx, %r15, %rbp
  5849. xorq %r14, %rbp
  5850. movq %rbp, -64(%rdi)
  5851. andnq %r12, %rbx, %rbp
  5852. xorq %r15, %rbp
  5853. movq %rbp, -88(%rdi)
  5854. andnq %r13, %r12, %rbp
  5855. xorq %rbx, %rbp
  5856. movq %rbp, -72(%rdi)
  5857. movq $0x80000001, %rbx
  5858. andnq %r14, %r13, %rcx
  5859. xorq %r12, %rcx
  5860. # XOR in constant
  5861. xorq %rbx, %rcx
  5862. # Row 1
  5863. movq -16(%rdi), %r12
  5864. movq (%rdi), %r13
  5865. movq 16(%rdi), %r14
  5866. movq -8(%rdi), %r15
  5867. movq 8(%rdi), %rbx
  5868. xorq %r10, %r12
  5869. xorq %r11, %r13
  5870. xorq %rax, %r14
  5871. xorq %r8, %r15
  5872. xorq %r9, %rbx
  5873. rolq $28, %r12
  5874. rolq $20, %r13
  5875. rolq $3, %r14
  5876. rolq $45, %r15
  5877. rolq $61, %rbx
  5878. andnq %r15, %r14, %rbp
  5879. xorq %r13, %rbp
  5880. movq %rbp, (%rdi)
  5881. andnq %rbx, %r15, %rbp
  5882. xorq %r14, %rbp
  5883. movq %rbp, 16(%rdi)
  5884. andnq %r12, %rbx, %rbp
  5885. xorq %r15, %rbp
  5886. movq %rbp, -8(%rdi)
  5887. andnq %r13, %r12, %rbp
  5888. xorq %rbx, %rbp
  5889. movq %rbp, 8(%rdi)
  5890. andnq %r14, %r13, %rbp
  5891. xorq %r12, %rbp
  5892. movq %rbp, -16(%rdi)
  5893. # Row 2
  5894. movq 64(%rdi), %r12
  5895. movq 80(%rdi), %r13
  5896. movq 96(%rdi), %r14
  5897. movq 72(%rdi), %r15
  5898. movq 88(%rdi), %rbx
  5899. xorq %r8, %r12
  5900. xorq %r9, %r13
  5901. xorq %r10, %r14
  5902. xorq %r11, %r15
  5903. xorq %rax, %rbx
  5904. rolq $0x01, %r12
  5905. rolq $6, %r13
  5906. rolq $25, %r14
  5907. rolq $8, %r15
  5908. rolq $18, %rbx
  5909. andnq %r15, %r14, %rbp
  5910. xorq %r13, %rbp
  5911. movq %rbp, 80(%rdi)
  5912. andnq %rbx, %r15, %rbp
  5913. xorq %r14, %rbp
  5914. movq %rbp, 96(%rdi)
  5915. andnq %r12, %rbx, %rbp
  5916. xorq %r15, %rbp
  5917. movq %rbp, 72(%rdi)
  5918. andnq %r13, %r12, %rbp
  5919. xorq %rbx, %rbp
  5920. movq %rbp, 88(%rdi)
  5921. andnq %r14, %r13, %rbp
  5922. xorq %r12, %rbp
  5923. movq %rbp, 64(%rdi)
  5924. # Row 3
  5925. movq -56(%rdi), %r12
  5926. movq -40(%rdi), %r13
  5927. movq -24(%rdi), %r14
  5928. movq -48(%rdi), %r15
  5929. movq -32(%rdi), %rbx
  5930. xorq %r11, %r12
  5931. xorq %rax, %r13
  5932. xorq %r8, %r14
  5933. xorq %r9, %r15
  5934. xorq %r10, %rbx
  5935. rolq $27, %r12
  5936. rolq $36, %r13
  5937. rolq $10, %r14
  5938. rolq $15, %r15
  5939. rolq $56, %rbx
  5940. andnq %r15, %r14, %rbp
  5941. xorq %r13, %rbp
  5942. movq %rbp, -40(%rdi)
  5943. andnq %rbx, %r15, %rbp
  5944. xorq %r14, %rbp
  5945. movq %rbp, -24(%rdi)
  5946. andnq %r12, %rbx, %rbp
  5947. xorq %r15, %rbp
  5948. movq %rbp, -48(%rdi)
  5949. andnq %r13, %r12, %rbp
  5950. xorq %rbx, %rbp
  5951. movq %rbp, -32(%rdi)
  5952. andnq %r14, %r13, %rbp
  5953. xorq %r12, %rbp
  5954. movq %rbp, -56(%rdi)
  5955. # Row 4
  5956. xorq 24(%rdi), %r9
  5957. xorq 40(%rdi), %r10
  5958. xorq 56(%rdi), %r11
  5959. xorq 32(%rdi), %rax
  5960. xorq 48(%rdi), %r8
  5961. rorxq $2, %r9, %r12
  5962. rorxq $9, %r10, %r13
  5963. rorxq $25, %r11, %r14
  5964. rorxq $23, %rax, %r15
  5965. rorxq $62, %r8, %rbx
  5966. andnq %r14, %r13, %rax
  5967. andnq %r15, %r14, %r8
  5968. andnq %rbx, %r15, %r9
  5969. andnq %r12, %rbx, %r10
  5970. andnq %r13, %r12, %r11
  5971. xorq %rax, %r12
  5972. xorq %r8, %r13
  5973. xorq %r9, %r14
  5974. xorq %r10, %r15
  5975. xorq %r11, %rbx
  5976. movq %r12, 24(%rdi)
  5977. movq %r13, 40(%rdi)
  5978. movq %r14, 56(%rdi)
  5979. movq %r15, 32(%rdi)
  5980. movq %rbx, 48(%rdi)
  5981. # Round 6
  5982. xorq %rcx, %r12
  5983. xorq -88(%rdi), %r15
  5984. xorq -80(%rdi), %r13
  5985. xorq -72(%rdi), %rbx
  5986. xorq -64(%rdi), %r14
  5987. xorq -56(%rdi), %r12
  5988. xorq -48(%rdi), %r15
  5989. xorq -40(%rdi), %r13
  5990. xorq -32(%rdi), %rbx
  5991. xorq -24(%rdi), %r14
  5992. xorq -16(%rdi), %r12
  5993. xorq -8(%rdi), %r15
  5994. xorq (%rdi), %r13
  5995. xorq 8(%rdi), %rbx
  5996. xorq 16(%rdi), %r14
  5997. xorq 64(%rdi), %r12
  5998. xorq 72(%rdi), %r15
  5999. xorq 80(%rdi), %r13
  6000. xorq 88(%rdi), %rbx
  6001. xorq 96(%rdi), %r14
  6002. # Calc t[0..4]
  6003. rorxq $63, %r13, %rax
  6004. rorxq $63, %r14, %r8
  6005. rorxq $63, %r15, %r9
  6006. rorxq $63, %rbx, %r10
  6007. rorxq $63, %r12, %r11
  6008. xorq %rbx, %rax
  6009. xorq %r12, %r8
  6010. xorq %r13, %r9
  6011. xorq %r14, %r10
  6012. xorq %r15, %r11
  6013. # Row Mix
  6014. # Row 0
  6015. movq %rcx, %r12
  6016. movq (%rdi), %r13
  6017. movq 96(%rdi), %r14
  6018. movq -48(%rdi), %r15
  6019. movq 48(%rdi), %rbx
  6020. xorq %rax, %r12
  6021. xorq %r8, %r13
  6022. xorq %r9, %r14
  6023. xorq %r10, %r15
  6024. xorq %r11, %rbx
  6025. rolq $44, %r13
  6026. rolq $43, %r14
  6027. rolq $21, %r15
  6028. rolq $14, %rbx
  6029. andnq %r15, %r14, %rbp
  6030. xorq %r13, %rbp
  6031. movq %rbp, (%rdi)
  6032. andnq %rbx, %r15, %rbp
  6033. xorq %r14, %rbp
  6034. movq %rbp, 96(%rdi)
  6035. andnq %r12, %rbx, %rbp
  6036. xorq %r15, %rbp
  6037. movq %rbp, -48(%rdi)
  6038. andnq %r13, %r12, %rbp
  6039. xorq %rbx, %rbp
  6040. movq %rbp, 48(%rdi)
  6041. movq $0x8000000080008081, %rbx
  6042. andnq %r14, %r13, %rcx
  6043. xorq %r12, %rcx
  6044. # XOR in constant
  6045. xorq %rbx, %rcx
  6046. # Row 1
  6047. movq -88(%rdi), %r12
  6048. movq 8(%rdi), %r13
  6049. movq 64(%rdi), %r14
  6050. movq -40(%rdi), %r15
  6051. movq 56(%rdi), %rbx
  6052. xorq %r10, %r12
  6053. xorq %r11, %r13
  6054. xorq %rax, %r14
  6055. xorq %r8, %r15
  6056. xorq %r9, %rbx
  6057. rolq $28, %r12
  6058. rolq $20, %r13
  6059. rolq $3, %r14
  6060. rolq $45, %r15
  6061. rolq $61, %rbx
  6062. andnq %r15, %r14, %rbp
  6063. xorq %r13, %rbp
  6064. movq %rbp, 8(%rdi)
  6065. andnq %rbx, %r15, %rbp
  6066. xorq %r14, %rbp
  6067. movq %rbp, 64(%rdi)
  6068. andnq %r12, %rbx, %rbp
  6069. xorq %r15, %rbp
  6070. movq %rbp, -40(%rdi)
  6071. andnq %r13, %r12, %rbp
  6072. xorq %rbx, %rbp
  6073. movq %rbp, 56(%rdi)
  6074. andnq %r14, %r13, %rbp
  6075. xorq %r12, %rbp
  6076. movq %rbp, -88(%rdi)
  6077. # Row 2
  6078. movq -80(%rdi), %r12
  6079. movq 16(%rdi), %r13
  6080. movq 72(%rdi), %r14
  6081. movq -32(%rdi), %r15
  6082. movq 24(%rdi), %rbx
  6083. xorq %r8, %r12
  6084. xorq %r9, %r13
  6085. xorq %r10, %r14
  6086. xorq %r11, %r15
  6087. xorq %rax, %rbx
  6088. rolq $0x01, %r12
  6089. rolq $6, %r13
  6090. rolq $25, %r14
  6091. rolq $8, %r15
  6092. rolq $18, %rbx
  6093. andnq %r15, %r14, %rbp
  6094. xorq %r13, %rbp
  6095. movq %rbp, 16(%rdi)
  6096. andnq %rbx, %r15, %rbp
  6097. xorq %r14, %rbp
  6098. movq %rbp, 72(%rdi)
  6099. andnq %r12, %rbx, %rbp
  6100. xorq %r15, %rbp
  6101. movq %rbp, -32(%rdi)
  6102. andnq %r13, %r12, %rbp
  6103. xorq %rbx, %rbp
  6104. movq %rbp, 24(%rdi)
  6105. andnq %r14, %r13, %rbp
  6106. xorq %r12, %rbp
  6107. movq %rbp, -80(%rdi)
  6108. # Row 3
  6109. movq -72(%rdi), %r12
  6110. movq -16(%rdi), %r13
  6111. movq 80(%rdi), %r14
  6112. movq -24(%rdi), %r15
  6113. movq 32(%rdi), %rbx
  6114. xorq %r11, %r12
  6115. xorq %rax, %r13
  6116. xorq %r8, %r14
  6117. xorq %r9, %r15
  6118. xorq %r10, %rbx
  6119. rolq $27, %r12
  6120. rolq $36, %r13
  6121. rolq $10, %r14
  6122. rolq $15, %r15
  6123. rolq $56, %rbx
  6124. andnq %r15, %r14, %rbp
  6125. xorq %r13, %rbp
  6126. movq %rbp, -16(%rdi)
  6127. andnq %rbx, %r15, %rbp
  6128. xorq %r14, %rbp
  6129. movq %rbp, 80(%rdi)
  6130. andnq %r12, %rbx, %rbp
  6131. xorq %r15, %rbp
  6132. movq %rbp, -24(%rdi)
  6133. andnq %r13, %r12, %rbp
  6134. xorq %rbx, %rbp
  6135. movq %rbp, 32(%rdi)
  6136. andnq %r14, %r13, %rbp
  6137. xorq %r12, %rbp
  6138. movq %rbp, -72(%rdi)
  6139. # Row 4
  6140. xorq -64(%rdi), %r9
  6141. xorq -8(%rdi), %r10
  6142. xorq 88(%rdi), %r11
  6143. xorq -56(%rdi), %rax
  6144. xorq 40(%rdi), %r8
  6145. rorxq $2, %r9, %r12
  6146. rorxq $9, %r10, %r13
  6147. rorxq $25, %r11, %r14
  6148. rorxq $23, %rax, %r15
  6149. rorxq $62, %r8, %rbx
  6150. andnq %r14, %r13, %rax
  6151. andnq %r15, %r14, %r8
  6152. andnq %rbx, %r15, %r9
  6153. andnq %r12, %rbx, %r10
  6154. andnq %r13, %r12, %r11
  6155. xorq %rax, %r12
  6156. xorq %r8, %r13
  6157. xorq %r9, %r14
  6158. xorq %r10, %r15
  6159. xorq %r11, %rbx
  6160. movq %r12, -64(%rdi)
  6161. movq %r13, -8(%rdi)
  6162. movq %r14, 88(%rdi)
  6163. movq %r15, -56(%rdi)
  6164. movq %rbx, 40(%rdi)
  6165. # Round 7
  6166. xorq %rcx, %r12
  6167. xorq -88(%rdi), %r12
  6168. xorq -80(%rdi), %r12
  6169. xorq -72(%rdi), %r12
  6170. xorq -48(%rdi), %r15
  6171. xorq -40(%rdi), %r15
  6172. xorq -32(%rdi), %r15
  6173. xorq -24(%rdi), %r15
  6174. xorq -16(%rdi), %r13
  6175. xorq (%rdi), %r13
  6176. xorq 8(%rdi), %r13
  6177. xorq 16(%rdi), %r13
  6178. xorq 24(%rdi), %rbx
  6179. xorq 32(%rdi), %rbx
  6180. xorq 48(%rdi), %rbx
  6181. xorq 56(%rdi), %rbx
  6182. xorq 64(%rdi), %r14
  6183. xorq 72(%rdi), %r14
  6184. xorq 80(%rdi), %r14
  6185. xorq 96(%rdi), %r14
  6186. # Calc t[0..4]
  6187. rorxq $63, %r13, %rax
  6188. rorxq $63, %r14, %r8
  6189. rorxq $63, %r15, %r9
  6190. rorxq $63, %rbx, %r10
  6191. rorxq $63, %r12, %r11
  6192. xorq %rbx, %rax
  6193. xorq %r12, %r8
  6194. xorq %r13, %r9
  6195. xorq %r14, %r10
  6196. xorq %r15, %r11
  6197. # Row Mix
  6198. # Row 0
  6199. movq %rcx, %r12
  6200. movq 8(%rdi), %r13
  6201. movq 72(%rdi), %r14
  6202. movq -24(%rdi), %r15
  6203. movq 40(%rdi), %rbx
  6204. xorq %rax, %r12
  6205. xorq %r8, %r13
  6206. xorq %r9, %r14
  6207. xorq %r10, %r15
  6208. xorq %r11, %rbx
  6209. rolq $44, %r13
  6210. rolq $43, %r14
  6211. rolq $21, %r15
  6212. rolq $14, %rbx
  6213. andnq %r15, %r14, %rbp
  6214. xorq %r13, %rbp
  6215. movq %rbp, 8(%rdi)
  6216. andnq %rbx, %r15, %rbp
  6217. xorq %r14, %rbp
  6218. movq %rbp, 72(%rdi)
  6219. andnq %r12, %rbx, %rbp
  6220. xorq %r15, %rbp
  6221. movq %rbp, -24(%rdi)
  6222. andnq %r13, %r12, %rbp
  6223. xorq %rbx, %rbp
  6224. movq %rbp, 40(%rdi)
  6225. movq $0x8000000000008009, %rbx
  6226. andnq %r14, %r13, %rcx
  6227. xorq %r12, %rcx
  6228. # XOR in constant
  6229. xorq %rbx, %rcx
  6230. # Row 1
  6231. movq -48(%rdi), %r12
  6232. movq 56(%rdi), %r13
  6233. movq -80(%rdi), %r14
  6234. movq -16(%rdi), %r15
  6235. movq 88(%rdi), %rbx
  6236. xorq %r10, %r12
  6237. xorq %r11, %r13
  6238. xorq %rax, %r14
  6239. xorq %r8, %r15
  6240. xorq %r9, %rbx
  6241. rolq $28, %r12
  6242. rolq $20, %r13
  6243. rolq $3, %r14
  6244. rolq $45, %r15
  6245. rolq $61, %rbx
  6246. andnq %r15, %r14, %rbp
  6247. xorq %r13, %rbp
  6248. movq %rbp, 56(%rdi)
  6249. andnq %rbx, %r15, %rbp
  6250. xorq %r14, %rbp
  6251. movq %rbp, -80(%rdi)
  6252. andnq %r12, %rbx, %rbp
  6253. xorq %r15, %rbp
  6254. movq %rbp, -16(%rdi)
  6255. andnq %r13, %r12, %rbp
  6256. xorq %rbx, %rbp
  6257. movq %rbp, 88(%rdi)
  6258. andnq %r14, %r13, %rbp
  6259. xorq %r12, %rbp
  6260. movq %rbp, -48(%rdi)
  6261. # Row 2
  6262. movq (%rdi), %r12
  6263. movq 64(%rdi), %r13
  6264. movq -32(%rdi), %r14
  6265. movq 32(%rdi), %r15
  6266. movq -64(%rdi), %rbx
  6267. xorq %r8, %r12
  6268. xorq %r9, %r13
  6269. xorq %r10, %r14
  6270. xorq %r11, %r15
  6271. xorq %rax, %rbx
  6272. rolq $0x01, %r12
  6273. rolq $6, %r13
  6274. rolq $25, %r14
  6275. rolq $8, %r15
  6276. rolq $18, %rbx
  6277. andnq %r15, %r14, %rbp
  6278. xorq %r13, %rbp
  6279. movq %rbp, 64(%rdi)
  6280. andnq %rbx, %r15, %rbp
  6281. xorq %r14, %rbp
  6282. movq %rbp, -32(%rdi)
  6283. andnq %r12, %rbx, %rbp
  6284. xorq %r15, %rbp
  6285. movq %rbp, 32(%rdi)
  6286. andnq %r13, %r12, %rbp
  6287. xorq %rbx, %rbp
  6288. movq %rbp, -64(%rdi)
  6289. andnq %r14, %r13, %rbp
  6290. xorq %r12, %rbp
  6291. movq %rbp, (%rdi)
  6292. # Row 3
  6293. movq 48(%rdi), %r12
  6294. movq -88(%rdi), %r13
  6295. movq 16(%rdi), %r14
  6296. movq 80(%rdi), %r15
  6297. movq -56(%rdi), %rbx
  6298. xorq %r11, %r12
  6299. xorq %rax, %r13
  6300. xorq %r8, %r14
  6301. xorq %r9, %r15
  6302. xorq %r10, %rbx
  6303. rolq $27, %r12
  6304. rolq $36, %r13
  6305. rolq $10, %r14
  6306. rolq $15, %r15
  6307. rolq $56, %rbx
  6308. andnq %r15, %r14, %rbp
  6309. xorq %r13, %rbp
  6310. movq %rbp, -88(%rdi)
  6311. andnq %rbx, %r15, %rbp
  6312. xorq %r14, %rbp
  6313. movq %rbp, 16(%rdi)
  6314. andnq %r12, %rbx, %rbp
  6315. xorq %r15, %rbp
  6316. movq %rbp, 80(%rdi)
  6317. andnq %r13, %r12, %rbp
  6318. xorq %rbx, %rbp
  6319. movq %rbp, -56(%rdi)
  6320. andnq %r14, %r13, %rbp
  6321. xorq %r12, %rbp
  6322. movq %rbp, 48(%rdi)
  6323. # Row 4
  6324. xorq 96(%rdi), %r9
  6325. xorq -40(%rdi), %r10
  6326. xorq 24(%rdi), %r11
  6327. xorq -72(%rdi), %rax
  6328. xorq -8(%rdi), %r8
  6329. rorxq $2, %r9, %r12
  6330. rorxq $9, %r10, %r13
  6331. rorxq $25, %r11, %r14
  6332. rorxq $23, %rax, %r15
  6333. rorxq $62, %r8, %rbx
  6334. andnq %r14, %r13, %rax
  6335. andnq %r15, %r14, %r8
  6336. andnq %rbx, %r15, %r9
  6337. andnq %r12, %rbx, %r10
  6338. andnq %r13, %r12, %r11
  6339. xorq %rax, %r12
  6340. xorq %r8, %r13
  6341. xorq %r9, %r14
  6342. xorq %r10, %r15
  6343. xorq %r11, %rbx
  6344. movq %r12, 96(%rdi)
  6345. movq %r13, -40(%rdi)
  6346. movq %r14, 24(%rdi)
  6347. movq %r15, -72(%rdi)
  6348. movq %rbx, -8(%rdi)
  6349. # Round 8
  6350. xorq %rcx, %r12
  6351. xorq -88(%rdi), %r13
  6352. xorq -80(%rdi), %r14
  6353. xorq -64(%rdi), %rbx
  6354. xorq -56(%rdi), %rbx
  6355. xorq -48(%rdi), %r12
  6356. xorq -32(%rdi), %r14
  6357. xorq -24(%rdi), %r15
  6358. xorq -16(%rdi), %r15
  6359. xorq (%rdi), %r12
  6360. xorq 8(%rdi), %r13
  6361. xorq 16(%rdi), %r14
  6362. xorq 32(%rdi), %r15
  6363. xorq 40(%rdi), %rbx
  6364. xorq 48(%rdi), %r12
  6365. xorq 56(%rdi), %r13
  6366. xorq 64(%rdi), %r13
  6367. xorq 72(%rdi), %r14
  6368. xorq 80(%rdi), %r15
  6369. xorq 88(%rdi), %rbx
  6370. # Calc t[0..4]
  6371. rorxq $63, %r13, %rax
  6372. rorxq $63, %r14, %r8
  6373. rorxq $63, %r15, %r9
  6374. rorxq $63, %rbx, %r10
  6375. rorxq $63, %r12, %r11
  6376. xorq %rbx, %rax
  6377. xorq %r12, %r8
  6378. xorq %r13, %r9
  6379. xorq %r14, %r10
  6380. xorq %r15, %r11
  6381. # Row Mix
  6382. # Row 0
  6383. movq %rcx, %r12
  6384. movq 56(%rdi), %r13
  6385. movq -32(%rdi), %r14
  6386. movq 80(%rdi), %r15
  6387. movq -8(%rdi), %rbx
  6388. xorq %rax, %r12
  6389. xorq %r8, %r13
  6390. xorq %r9, %r14
  6391. xorq %r10, %r15
  6392. xorq %r11, %rbx
  6393. rolq $44, %r13
  6394. rolq $43, %r14
  6395. rolq $21, %r15
  6396. rolq $14, %rbx
  6397. andnq %r15, %r14, %rbp
  6398. xorq %r13, %rbp
  6399. movq %rbp, 56(%rdi)
  6400. andnq %rbx, %r15, %rbp
  6401. xorq %r14, %rbp
  6402. movq %rbp, -32(%rdi)
  6403. andnq %r12, %rbx, %rbp
  6404. xorq %r15, %rbp
  6405. movq %rbp, 80(%rdi)
  6406. andnq %r13, %r12, %rbp
  6407. xorq %rbx, %rbp
  6408. movq %rbp, -8(%rdi)
  6409. andnq %r14, %r13, %rcx
  6410. xorq %r12, %rcx
  6411. # XOR in constant
  6412. xorq $0x8a, %rcx
  6413. # Row 1
  6414. movq -24(%rdi), %r12
  6415. movq 88(%rdi), %r13
  6416. movq (%rdi), %r14
  6417. movq -88(%rdi), %r15
  6418. movq 24(%rdi), %rbx
  6419. xorq %r10, %r12
  6420. xorq %r11, %r13
  6421. xorq %rax, %r14
  6422. xorq %r8, %r15
  6423. xorq %r9, %rbx
  6424. rolq $28, %r12
  6425. rolq $20, %r13
  6426. rolq $3, %r14
  6427. rolq $45, %r15
  6428. rolq $61, %rbx
  6429. andnq %r15, %r14, %rbp
  6430. xorq %r13, %rbp
  6431. movq %rbp, 88(%rdi)
  6432. andnq %rbx, %r15, %rbp
  6433. xorq %r14, %rbp
  6434. movq %rbp, (%rdi)
  6435. andnq %r12, %rbx, %rbp
  6436. xorq %r15, %rbp
  6437. movq %rbp, -88(%rdi)
  6438. andnq %r13, %r12, %rbp
  6439. xorq %rbx, %rbp
  6440. movq %rbp, 24(%rdi)
  6441. andnq %r14, %r13, %rbp
  6442. xorq %r12, %rbp
  6443. movq %rbp, -24(%rdi)
  6444. # Row 2
  6445. movq 8(%rdi), %r12
  6446. movq -80(%rdi), %r13
  6447. movq 32(%rdi), %r14
  6448. movq -56(%rdi), %r15
  6449. movq 96(%rdi), %rbx
  6450. xorq %r8, %r12
  6451. xorq %r9, %r13
  6452. xorq %r10, %r14
  6453. xorq %r11, %r15
  6454. xorq %rax, %rbx
  6455. rolq $0x01, %r12
  6456. rolq $6, %r13
  6457. rolq $25, %r14
  6458. rolq $8, %r15
  6459. rolq $18, %rbx
  6460. andnq %r15, %r14, %rbp
  6461. xorq %r13, %rbp
  6462. movq %rbp, -80(%rdi)
  6463. andnq %rbx, %r15, %rbp
  6464. xorq %r14, %rbp
  6465. movq %rbp, 32(%rdi)
  6466. andnq %r12, %rbx, %rbp
  6467. xorq %r15, %rbp
  6468. movq %rbp, -56(%rdi)
  6469. andnq %r13, %r12, %rbp
  6470. xorq %rbx, %rbp
  6471. movq %rbp, 96(%rdi)
  6472. andnq %r14, %r13, %rbp
  6473. xorq %r12, %rbp
  6474. movq %rbp, 8(%rdi)
  6475. # Row 3
  6476. movq 40(%rdi), %r12
  6477. movq -48(%rdi), %r13
  6478. movq 64(%rdi), %r14
  6479. movq 16(%rdi), %r15
  6480. movq -72(%rdi), %rbx
  6481. xorq %r11, %r12
  6482. xorq %rax, %r13
  6483. xorq %r8, %r14
  6484. xorq %r9, %r15
  6485. xorq %r10, %rbx
  6486. rolq $27, %r12
  6487. rolq $36, %r13
  6488. rolq $10, %r14
  6489. rolq $15, %r15
  6490. rolq $56, %rbx
  6491. andnq %r15, %r14, %rbp
  6492. xorq %r13, %rbp
  6493. movq %rbp, -48(%rdi)
  6494. andnq %rbx, %r15, %rbp
  6495. xorq %r14, %rbp
  6496. movq %rbp, 64(%rdi)
  6497. andnq %r12, %rbx, %rbp
  6498. xorq %r15, %rbp
  6499. movq %rbp, 16(%rdi)
  6500. andnq %r13, %r12, %rbp
  6501. xorq %rbx, %rbp
  6502. movq %rbp, -72(%rdi)
  6503. andnq %r14, %r13, %rbp
  6504. xorq %r12, %rbp
  6505. movq %rbp, 40(%rdi)
  6506. # Row 4
  6507. xorq 72(%rdi), %r9
  6508. xorq -16(%rdi), %r10
  6509. xorq -64(%rdi), %r11
  6510. xorq 48(%rdi), %rax
  6511. xorq -40(%rdi), %r8
  6512. rorxq $2, %r9, %r12
  6513. rorxq $9, %r10, %r13
  6514. rorxq $25, %r11, %r14
  6515. rorxq $23, %rax, %r15
  6516. rorxq $62, %r8, %rbx
  6517. andnq %r14, %r13, %rax
  6518. andnq %r15, %r14, %r8
  6519. andnq %rbx, %r15, %r9
  6520. andnq %r12, %rbx, %r10
  6521. andnq %r13, %r12, %r11
  6522. xorq %rax, %r12
  6523. xorq %r8, %r13
  6524. xorq %r9, %r14
  6525. xorq %r10, %r15
  6526. xorq %r11, %rbx
  6527. movq %r12, 72(%rdi)
  6528. movq %r13, -16(%rdi)
  6529. movq %r14, -64(%rdi)
  6530. movq %r15, 48(%rdi)
  6531. movq %rbx, -40(%rdi)
  6532. # Round 9
  6533. xorq %rcx, %r12
  6534. xorq -88(%rdi), %r15
  6535. xorq -80(%rdi), %r13
  6536. xorq -72(%rdi), %rbx
  6537. xorq -56(%rdi), %r15
  6538. xorq -48(%rdi), %r13
  6539. xorq -32(%rdi), %r14
  6540. xorq -24(%rdi), %r12
  6541. xorq -8(%rdi), %rbx
  6542. xorq (%rdi), %r14
  6543. xorq 8(%rdi), %r12
  6544. xorq 16(%rdi), %r15
  6545. xorq 24(%rdi), %rbx
  6546. xorq 32(%rdi), %r14
  6547. xorq 40(%rdi), %r12
  6548. xorq 56(%rdi), %r13
  6549. xorq 64(%rdi), %r14
  6550. xorq 80(%rdi), %r15
  6551. xorq 88(%rdi), %r13
  6552. xorq 96(%rdi), %rbx
  6553. # Calc t[0..4]
  6554. rorxq $63, %r13, %rax
  6555. rorxq $63, %r14, %r8
  6556. rorxq $63, %r15, %r9
  6557. rorxq $63, %rbx, %r10
  6558. rorxq $63, %r12, %r11
  6559. xorq %rbx, %rax
  6560. xorq %r12, %r8
  6561. xorq %r13, %r9
  6562. xorq %r14, %r10
  6563. xorq %r15, %r11
  6564. # Row Mix
  6565. # Row 0
  6566. movq %rcx, %r12
  6567. movq 88(%rdi), %r13
  6568. movq 32(%rdi), %r14
  6569. movq 16(%rdi), %r15
  6570. movq -40(%rdi), %rbx
  6571. xorq %rax, %r12
  6572. xorq %r8, %r13
  6573. xorq %r9, %r14
  6574. xorq %r10, %r15
  6575. xorq %r11, %rbx
  6576. rolq $44, %r13
  6577. rolq $43, %r14
  6578. rolq $21, %r15
  6579. rolq $14, %rbx
  6580. andnq %r15, %r14, %rbp
  6581. xorq %r13, %rbp
  6582. movq %rbp, 88(%rdi)
  6583. andnq %rbx, %r15, %rbp
  6584. xorq %r14, %rbp
  6585. movq %rbp, 32(%rdi)
  6586. andnq %r12, %rbx, %rbp
  6587. xorq %r15, %rbp
  6588. movq %rbp, 16(%rdi)
  6589. andnq %r13, %r12, %rbp
  6590. xorq %rbx, %rbp
  6591. movq %rbp, -40(%rdi)
  6592. andnq %r14, %r13, %rcx
  6593. xorq %r12, %rcx
  6594. # XOR in constant
  6595. xorq $0x88, %rcx
  6596. # Row 1
  6597. movq 80(%rdi), %r12
  6598. movq 24(%rdi), %r13
  6599. movq 8(%rdi), %r14
  6600. movq -48(%rdi), %r15
  6601. movq -64(%rdi), %rbx
  6602. xorq %r10, %r12
  6603. xorq %r11, %r13
  6604. xorq %rax, %r14
  6605. xorq %r8, %r15
  6606. xorq %r9, %rbx
  6607. rolq $28, %r12
  6608. rolq $20, %r13
  6609. rolq $3, %r14
  6610. rolq $45, %r15
  6611. rolq $61, %rbx
  6612. andnq %r15, %r14, %rbp
  6613. xorq %r13, %rbp
  6614. movq %rbp, 24(%rdi)
  6615. andnq %rbx, %r15, %rbp
  6616. xorq %r14, %rbp
  6617. movq %rbp, 8(%rdi)
  6618. andnq %r12, %rbx, %rbp
  6619. xorq %r15, %rbp
  6620. movq %rbp, -48(%rdi)
  6621. andnq %r13, %r12, %rbp
  6622. xorq %rbx, %rbp
  6623. movq %rbp, -64(%rdi)
  6624. andnq %r14, %r13, %rbp
  6625. xorq %r12, %rbp
  6626. movq %rbp, 80(%rdi)
  6627. # Row 2
  6628. movq 56(%rdi), %r12
  6629. movq (%rdi), %r13
  6630. movq -56(%rdi), %r14
  6631. movq -72(%rdi), %r15
  6632. movq 72(%rdi), %rbx
  6633. xorq %r8, %r12
  6634. xorq %r9, %r13
  6635. xorq %r10, %r14
  6636. xorq %r11, %r15
  6637. xorq %rax, %rbx
  6638. rolq $0x01, %r12
  6639. rolq $6, %r13
  6640. rolq $25, %r14
  6641. rolq $8, %r15
  6642. rolq $18, %rbx
  6643. andnq %r15, %r14, %rbp
  6644. xorq %r13, %rbp
  6645. movq %rbp, (%rdi)
  6646. andnq %rbx, %r15, %rbp
  6647. xorq %r14, %rbp
  6648. movq %rbp, -56(%rdi)
  6649. andnq %r12, %rbx, %rbp
  6650. xorq %r15, %rbp
  6651. movq %rbp, -72(%rdi)
  6652. andnq %r13, %r12, %rbp
  6653. xorq %rbx, %rbp
  6654. movq %rbp, 72(%rdi)
  6655. andnq %r14, %r13, %rbp
  6656. xorq %r12, %rbp
  6657. movq %rbp, 56(%rdi)
  6658. # Row 3
  6659. movq -8(%rdi), %r12
  6660. movq -24(%rdi), %r13
  6661. movq -80(%rdi), %r14
  6662. movq 64(%rdi), %r15
  6663. movq 48(%rdi), %rbx
  6664. xorq %r11, %r12
  6665. xorq %rax, %r13
  6666. xorq %r8, %r14
  6667. xorq %r9, %r15
  6668. xorq %r10, %rbx
  6669. rolq $27, %r12
  6670. rolq $36, %r13
  6671. rolq $10, %r14
  6672. rolq $15, %r15
  6673. rolq $56, %rbx
  6674. andnq %r15, %r14, %rbp
  6675. xorq %r13, %rbp
  6676. movq %rbp, -24(%rdi)
  6677. andnq %rbx, %r15, %rbp
  6678. xorq %r14, %rbp
  6679. movq %rbp, -80(%rdi)
  6680. andnq %r12, %rbx, %rbp
  6681. xorq %r15, %rbp
  6682. movq %rbp, 64(%rdi)
  6683. andnq %r13, %r12, %rbp
  6684. xorq %rbx, %rbp
  6685. movq %rbp, 48(%rdi)
  6686. andnq %r14, %r13, %rbp
  6687. xorq %r12, %rbp
  6688. movq %rbp, -8(%rdi)
  6689. # Row 4
  6690. xorq -32(%rdi), %r9
  6691. xorq -88(%rdi), %r10
  6692. xorq 96(%rdi), %r11
  6693. xorq 40(%rdi), %rax
  6694. xorq -16(%rdi), %r8
  6695. rorxq $2, %r9, %r12
  6696. rorxq $9, %r10, %r13
  6697. rorxq $25, %r11, %r14
  6698. rorxq $23, %rax, %r15
  6699. rorxq $62, %r8, %rbx
  6700. andnq %r14, %r13, %rax
  6701. andnq %r15, %r14, %r8
  6702. andnq %rbx, %r15, %r9
  6703. andnq %r12, %rbx, %r10
  6704. andnq %r13, %r12, %r11
  6705. xorq %rax, %r12
  6706. xorq %r8, %r13
  6707. xorq %r9, %r14
  6708. xorq %r10, %r15
  6709. xorq %r11, %rbx
  6710. movq %r12, -32(%rdi)
  6711. movq %r13, -88(%rdi)
  6712. movq %r14, 96(%rdi)
  6713. movq %r15, 40(%rdi)
  6714. movq %rbx, -16(%rdi)
  6715. # Round 10
  6716. xorq %rcx, %r12
  6717. xorq -80(%rdi), %r14
  6718. xorq -72(%rdi), %r15
  6719. xorq -64(%rdi), %rbx
  6720. xorq -56(%rdi), %r14
  6721. xorq -48(%rdi), %r15
  6722. xorq -40(%rdi), %rbx
  6723. xorq -24(%rdi), %r13
  6724. xorq -8(%rdi), %r12
  6725. xorq (%rdi), %r13
  6726. xorq 8(%rdi), %r14
  6727. xorq 16(%rdi), %r15
  6728. xorq 24(%rdi), %r13
  6729. xorq 32(%rdi), %r14
  6730. xorq 48(%rdi), %rbx
  6731. xorq 56(%rdi), %r12
  6732. xorq 64(%rdi), %r15
  6733. xorq 72(%rdi), %rbx
  6734. xorq 80(%rdi), %r12
  6735. xorq 88(%rdi), %r13
  6736. # Calc t[0..4]
  6737. rorxq $63, %r13, %rax
  6738. rorxq $63, %r14, %r8
  6739. rorxq $63, %r15, %r9
  6740. rorxq $63, %rbx, %r10
  6741. rorxq $63, %r12, %r11
  6742. xorq %rbx, %rax
  6743. xorq %r12, %r8
  6744. xorq %r13, %r9
  6745. xorq %r14, %r10
  6746. xorq %r15, %r11
  6747. # Row Mix
  6748. # Row 0
  6749. movq %rcx, %r12
  6750. movq 24(%rdi), %r13
  6751. movq -56(%rdi), %r14
  6752. movq 64(%rdi), %r15
  6753. movq -16(%rdi), %rbx
  6754. xorq %rax, %r12
  6755. xorq %r8, %r13
  6756. xorq %r9, %r14
  6757. xorq %r10, %r15
  6758. xorq %r11, %rbx
  6759. rolq $44, %r13
  6760. rolq $43, %r14
  6761. rolq $21, %r15
  6762. rolq $14, %rbx
  6763. andnq %r15, %r14, %rbp
  6764. xorq %r13, %rbp
  6765. movq %rbp, 24(%rdi)
  6766. andnq %rbx, %r15, %rbp
  6767. xorq %r14, %rbp
  6768. movq %rbp, -56(%rdi)
  6769. andnq %r12, %rbx, %rbp
  6770. xorq %r15, %rbp
  6771. movq %rbp, 64(%rdi)
  6772. andnq %r13, %r12, %rbp
  6773. xorq %rbx, %rbp
  6774. movq %rbp, -16(%rdi)
  6775. movq $0x80008009, %rbx
  6776. andnq %r14, %r13, %rcx
  6777. xorq %r12, %rcx
  6778. # XOR in constant
  6779. xorq %rbx, %rcx
  6780. # Row 1
  6781. movq 16(%rdi), %r12
  6782. movq -64(%rdi), %r13
  6783. movq 56(%rdi), %r14
  6784. movq -24(%rdi), %r15
  6785. movq 96(%rdi), %rbx
  6786. xorq %r10, %r12
  6787. xorq %r11, %r13
  6788. xorq %rax, %r14
  6789. xorq %r8, %r15
  6790. xorq %r9, %rbx
  6791. rolq $28, %r12
  6792. rolq $20, %r13
  6793. rolq $3, %r14
  6794. rolq $45, %r15
  6795. rolq $61, %rbx
  6796. andnq %r15, %r14, %rbp
  6797. xorq %r13, %rbp
  6798. movq %rbp, -64(%rdi)
  6799. andnq %rbx, %r15, %rbp
  6800. xorq %r14, %rbp
  6801. movq %rbp, 56(%rdi)
  6802. andnq %r12, %rbx, %rbp
  6803. xorq %r15, %rbp
  6804. movq %rbp, -24(%rdi)
  6805. andnq %r13, %r12, %rbp
  6806. xorq %rbx, %rbp
  6807. movq %rbp, 96(%rdi)
  6808. andnq %r14, %r13, %rbp
  6809. xorq %r12, %rbp
  6810. movq %rbp, 16(%rdi)
  6811. # Row 2
  6812. movq 88(%rdi), %r12
  6813. movq 8(%rdi), %r13
  6814. movq -72(%rdi), %r14
  6815. movq 48(%rdi), %r15
  6816. movq -32(%rdi), %rbx
  6817. xorq %r8, %r12
  6818. xorq %r9, %r13
  6819. xorq %r10, %r14
  6820. xorq %r11, %r15
  6821. xorq %rax, %rbx
  6822. rolq $0x01, %r12
  6823. rolq $6, %r13
  6824. rolq $25, %r14
  6825. rolq $8, %r15
  6826. rolq $18, %rbx
  6827. andnq %r15, %r14, %rbp
  6828. xorq %r13, %rbp
  6829. movq %rbp, 8(%rdi)
  6830. andnq %rbx, %r15, %rbp
  6831. xorq %r14, %rbp
  6832. movq %rbp, -72(%rdi)
  6833. andnq %r12, %rbx, %rbp
  6834. xorq %r15, %rbp
  6835. movq %rbp, 48(%rdi)
  6836. andnq %r13, %r12, %rbp
  6837. xorq %rbx, %rbp
  6838. movq %rbp, -32(%rdi)
  6839. andnq %r14, %r13, %rbp
  6840. xorq %r12, %rbp
  6841. movq %rbp, 88(%rdi)
  6842. # Row 3
  6843. movq -40(%rdi), %r12
  6844. movq 80(%rdi), %r13
  6845. movq (%rdi), %r14
  6846. movq -80(%rdi), %r15
  6847. movq 40(%rdi), %rbx
  6848. xorq %r11, %r12
  6849. xorq %rax, %r13
  6850. xorq %r8, %r14
  6851. xorq %r9, %r15
  6852. xorq %r10, %rbx
  6853. rolq $27, %r12
  6854. rolq $36, %r13
  6855. rolq $10, %r14
  6856. rolq $15, %r15
  6857. rolq $56, %rbx
  6858. andnq %r15, %r14, %rbp
  6859. xorq %r13, %rbp
  6860. movq %rbp, 80(%rdi)
  6861. andnq %rbx, %r15, %rbp
  6862. xorq %r14, %rbp
  6863. movq %rbp, (%rdi)
  6864. andnq %r12, %rbx, %rbp
  6865. xorq %r15, %rbp
  6866. movq %rbp, -80(%rdi)
  6867. andnq %r13, %r12, %rbp
  6868. xorq %rbx, %rbp
  6869. movq %rbp, 40(%rdi)
  6870. andnq %r14, %r13, %rbp
  6871. xorq %r12, %rbp
  6872. movq %rbp, -40(%rdi)
  6873. # Row 4
  6874. xorq 32(%rdi), %r9
  6875. xorq -48(%rdi), %r10
  6876. xorq 72(%rdi), %r11
  6877. xorq -8(%rdi), %rax
  6878. xorq -88(%rdi), %r8
  6879. rorxq $2, %r9, %r12
  6880. rorxq $9, %r10, %r13
  6881. rorxq $25, %r11, %r14
  6882. rorxq $23, %rax, %r15
  6883. rorxq $62, %r8, %rbx
  6884. andnq %r14, %r13, %rax
  6885. andnq %r15, %r14, %r8
  6886. andnq %rbx, %r15, %r9
  6887. andnq %r12, %rbx, %r10
  6888. andnq %r13, %r12, %r11
  6889. xorq %rax, %r12
  6890. xorq %r8, %r13
  6891. xorq %r9, %r14
  6892. xorq %r10, %r15
  6893. xorq %r11, %rbx
  6894. movq %r12, 32(%rdi)
  6895. movq %r13, -48(%rdi)
  6896. movq %r14, 72(%rdi)
  6897. movq %r15, -8(%rdi)
  6898. movq %rbx, -88(%rdi)
  6899. # Round 11
  6900. xorq %rcx, %r12
  6901. xorq -80(%rdi), %r15
  6902. xorq -72(%rdi), %r14
  6903. xorq -64(%rdi), %r13
  6904. xorq -56(%rdi), %r14
  6905. xorq -40(%rdi), %r12
  6906. xorq -32(%rdi), %rbx
  6907. xorq -24(%rdi), %r15
  6908. xorq -16(%rdi), %rbx
  6909. xorq (%rdi), %r14
  6910. xorq 8(%rdi), %r13
  6911. xorq 16(%rdi), %r12
  6912. xorq 24(%rdi), %r13
  6913. xorq 40(%rdi), %rbx
  6914. xorq 48(%rdi), %r15
  6915. xorq 56(%rdi), %r14
  6916. xorq 64(%rdi), %r15
  6917. xorq 80(%rdi), %r13
  6918. xorq 88(%rdi), %r12
  6919. xorq 96(%rdi), %rbx
  6920. # Calc t[0..4]
  6921. rorxq $63, %r13, %rax
  6922. rorxq $63, %r14, %r8
  6923. rorxq $63, %r15, %r9
  6924. rorxq $63, %rbx, %r10
  6925. rorxq $63, %r12, %r11
  6926. xorq %rbx, %rax
  6927. xorq %r12, %r8
  6928. xorq %r13, %r9
  6929. xorq %r14, %r10
  6930. xorq %r15, %r11
  6931. # Row Mix
  6932. # Row 0
  6933. movq %rcx, %r12
  6934. movq -64(%rdi), %r13
  6935. movq -72(%rdi), %r14
  6936. movq -80(%rdi), %r15
  6937. movq -88(%rdi), %rbx
  6938. xorq %rax, %r12
  6939. xorq %r8, %r13
  6940. xorq %r9, %r14
  6941. xorq %r10, %r15
  6942. xorq %r11, %rbx
  6943. rolq $44, %r13
  6944. rolq $43, %r14
  6945. rolq $21, %r15
  6946. rolq $14, %rbx
  6947. andnq %r15, %r14, %rbp
  6948. xorq %r13, %rbp
  6949. movq %rbp, -64(%rdi)
  6950. andnq %rbx, %r15, %rbp
  6951. xorq %r14, %rbp
  6952. movq %rbp, -72(%rdi)
  6953. andnq %r12, %rbx, %rbp
  6954. xorq %r15, %rbp
  6955. movq %rbp, -80(%rdi)
  6956. andnq %r13, %r12, %rbp
  6957. xorq %rbx, %rbp
  6958. movq %rbp, -88(%rdi)
  6959. movq $0x8000000a, %rbx
  6960. andnq %r14, %r13, %rcx
  6961. xorq %r12, %rcx
  6962. # XOR in constant
  6963. xorq %rbx, %rcx
  6964. # Row 1
  6965. movq 64(%rdi), %r12
  6966. movq 96(%rdi), %r13
  6967. movq 88(%rdi), %r14
  6968. movq 80(%rdi), %r15
  6969. movq 72(%rdi), %rbx
  6970. xorq %r10, %r12
  6971. xorq %r11, %r13
  6972. xorq %rax, %r14
  6973. xorq %r8, %r15
  6974. xorq %r9, %rbx
  6975. rolq $28, %r12
  6976. rolq $20, %r13
  6977. rolq $3, %r14
  6978. rolq $45, %r15
  6979. rolq $61, %rbx
  6980. andnq %r15, %r14, %rbp
  6981. xorq %r13, %rbp
  6982. movq %rbp, 96(%rdi)
  6983. andnq %rbx, %r15, %rbp
  6984. xorq %r14, %rbp
  6985. movq %rbp, 88(%rdi)
  6986. andnq %r12, %rbx, %rbp
  6987. xorq %r15, %rbp
  6988. movq %rbp, 80(%rdi)
  6989. andnq %r13, %r12, %rbp
  6990. xorq %rbx, %rbp
  6991. movq %rbp, 72(%rdi)
  6992. andnq %r14, %r13, %rbp
  6993. xorq %r12, %rbp
  6994. movq %rbp, 64(%rdi)
  6995. # Row 2
  6996. movq 24(%rdi), %r12
  6997. movq 56(%rdi), %r13
  6998. movq 48(%rdi), %r14
  6999. movq 40(%rdi), %r15
  7000. movq 32(%rdi), %rbx
  7001. xorq %r8, %r12
  7002. xorq %r9, %r13
  7003. xorq %r10, %r14
  7004. xorq %r11, %r15
  7005. xorq %rax, %rbx
  7006. rolq $0x01, %r12
  7007. rolq $6, %r13
  7008. rolq $25, %r14
  7009. rolq $8, %r15
  7010. rolq $18, %rbx
  7011. andnq %r15, %r14, %rbp
  7012. xorq %r13, %rbp
  7013. movq %rbp, 56(%rdi)
  7014. andnq %rbx, %r15, %rbp
  7015. xorq %r14, %rbp
  7016. movq %rbp, 48(%rdi)
  7017. andnq %r12, %rbx, %rbp
  7018. xorq %r15, %rbp
  7019. movq %rbp, 40(%rdi)
  7020. andnq %r13, %r12, %rbp
  7021. xorq %rbx, %rbp
  7022. movq %rbp, 32(%rdi)
  7023. andnq %r14, %r13, %rbp
  7024. xorq %r12, %rbp
  7025. movq %rbp, 24(%rdi)
  7026. # Row 3
  7027. movq -16(%rdi), %r12
  7028. movq 16(%rdi), %r13
  7029. movq 8(%rdi), %r14
  7030. movq (%rdi), %r15
  7031. movq -8(%rdi), %rbx
  7032. xorq %r11, %r12
  7033. xorq %rax, %r13
  7034. xorq %r8, %r14
  7035. xorq %r9, %r15
  7036. xorq %r10, %rbx
  7037. rolq $27, %r12
  7038. rolq $36, %r13
  7039. rolq $10, %r14
  7040. rolq $15, %r15
  7041. rolq $56, %rbx
  7042. andnq %r15, %r14, %rbp
  7043. xorq %r13, %rbp
  7044. movq %rbp, 16(%rdi)
  7045. andnq %rbx, %r15, %rbp
  7046. xorq %r14, %rbp
  7047. movq %rbp, 8(%rdi)
  7048. andnq %r12, %rbx, %rbp
  7049. xorq %r15, %rbp
  7050. movq %rbp, (%rdi)
  7051. andnq %r13, %r12, %rbp
  7052. xorq %rbx, %rbp
  7053. movq %rbp, -8(%rdi)
  7054. andnq %r14, %r13, %rbp
  7055. xorq %r12, %rbp
  7056. movq %rbp, -16(%rdi)
  7057. # Row 4
  7058. xorq -56(%rdi), %r9
  7059. xorq -24(%rdi), %r10
  7060. xorq -32(%rdi), %r11
  7061. xorq -40(%rdi), %rax
  7062. xorq -48(%rdi), %r8
  7063. rorxq $2, %r9, %r12
  7064. rorxq $9, %r10, %r13
  7065. rorxq $25, %r11, %r14
  7066. rorxq $23, %rax, %r15
  7067. rorxq $62, %r8, %rbx
  7068. andnq %r14, %r13, %rax
  7069. andnq %r15, %r14, %r8
  7070. andnq %rbx, %r15, %r9
  7071. andnq %r12, %rbx, %r10
  7072. andnq %r13, %r12, %r11
  7073. xorq %rax, %r12
  7074. xorq %r8, %r13
  7075. xorq %r9, %r14
  7076. xorq %r10, %r15
  7077. xorq %r11, %rbx
  7078. movq %r12, -56(%rdi)
  7079. movq %r13, -24(%rdi)
  7080. movq %r14, -32(%rdi)
  7081. movq %r15, -40(%rdi)
  7082. movq %rbx, -48(%rdi)
  7083. # Round 12
  7084. xorq %rcx, %r12
  7085. xorq -88(%rdi), %rbx
  7086. xorq -80(%rdi), %r15
  7087. xorq -72(%rdi), %r14
  7088. xorq -64(%rdi), %r13
  7089. xorq -16(%rdi), %r12
  7090. xorq -8(%rdi), %rbx
  7091. xorq (%rdi), %r15
  7092. xorq 8(%rdi), %r14
  7093. xorq 16(%rdi), %r13
  7094. xorq 24(%rdi), %r12
  7095. xorq 32(%rdi), %rbx
  7096. xorq 40(%rdi), %r15
  7097. xorq 48(%rdi), %r14
  7098. xorq 56(%rdi), %r13
  7099. xorq 64(%rdi), %r12
  7100. xorq 72(%rdi), %rbx
  7101. xorq 80(%rdi), %r15
  7102. xorq 88(%rdi), %r14
  7103. xorq 96(%rdi), %r13
  7104. # Calc t[0..4]
  7105. rorxq $63, %r13, %rax
  7106. rorxq $63, %r14, %r8
  7107. rorxq $63, %r15, %r9
  7108. rorxq $63, %rbx, %r10
  7109. rorxq $63, %r12, %r11
  7110. xorq %rbx, %rax
  7111. xorq %r12, %r8
  7112. xorq %r13, %r9
  7113. xorq %r14, %r10
  7114. xorq %r15, %r11
  7115. # Row Mix
  7116. # Row 0
  7117. movq %rcx, %r12
  7118. movq 96(%rdi), %r13
  7119. movq 48(%rdi), %r14
  7120. movq (%rdi), %r15
  7121. movq -48(%rdi), %rbx
  7122. xorq %rax, %r12
  7123. xorq %r8, %r13
  7124. xorq %r9, %r14
  7125. xorq %r10, %r15
  7126. xorq %r11, %rbx
  7127. rolq $44, %r13
  7128. rolq $43, %r14
  7129. rolq $21, %r15
  7130. rolq $14, %rbx
  7131. andnq %r15, %r14, %rbp
  7132. xorq %r13, %rbp
  7133. movq %rbp, 96(%rdi)
  7134. andnq %rbx, %r15, %rbp
  7135. xorq %r14, %rbp
  7136. movq %rbp, 48(%rdi)
  7137. andnq %r12, %rbx, %rbp
  7138. xorq %r15, %rbp
  7139. movq %rbp, (%rdi)
  7140. andnq %r13, %r12, %rbp
  7141. xorq %rbx, %rbp
  7142. movq %rbp, -48(%rdi)
  7143. movq $0x8000808b, %rbx
  7144. andnq %r14, %r13, %rcx
  7145. xorq %r12, %rcx
  7146. # XOR in constant
  7147. xorq %rbx, %rcx
  7148. # Row 1
  7149. movq -80(%rdi), %r12
  7150. movq 72(%rdi), %r13
  7151. movq 24(%rdi), %r14
  7152. movq 16(%rdi), %r15
  7153. movq -32(%rdi), %rbx
  7154. xorq %r10, %r12
  7155. xorq %r11, %r13
  7156. xorq %rax, %r14
  7157. xorq %r8, %r15
  7158. xorq %r9, %rbx
  7159. rolq $28, %r12
  7160. rolq $20, %r13
  7161. rolq $3, %r14
  7162. rolq $45, %r15
  7163. rolq $61, %rbx
  7164. andnq %r15, %r14, %rbp
  7165. xorq %r13, %rbp
  7166. movq %rbp, 72(%rdi)
  7167. andnq %rbx, %r15, %rbp
  7168. xorq %r14, %rbp
  7169. movq %rbp, 24(%rdi)
  7170. andnq %r12, %rbx, %rbp
  7171. xorq %r15, %rbp
  7172. movq %rbp, 16(%rdi)
  7173. andnq %r13, %r12, %rbp
  7174. xorq %rbx, %rbp
  7175. movq %rbp, -32(%rdi)
  7176. andnq %r14, %r13, %rbp
  7177. xorq %r12, %rbp
  7178. movq %rbp, -80(%rdi)
  7179. # Row 2
  7180. movq -64(%rdi), %r12
  7181. movq 88(%rdi), %r13
  7182. movq 40(%rdi), %r14
  7183. movq -8(%rdi), %r15
  7184. movq -56(%rdi), %rbx
  7185. xorq %r8, %r12
  7186. xorq %r9, %r13
  7187. xorq %r10, %r14
  7188. xorq %r11, %r15
  7189. xorq %rax, %rbx
  7190. rolq $0x01, %r12
  7191. rolq $6, %r13
  7192. rolq $25, %r14
  7193. rolq $8, %r15
  7194. rolq $18, %rbx
  7195. andnq %r15, %r14, %rbp
  7196. xorq %r13, %rbp
  7197. movq %rbp, 88(%rdi)
  7198. andnq %rbx, %r15, %rbp
  7199. xorq %r14, %rbp
  7200. movq %rbp, 40(%rdi)
  7201. andnq %r12, %rbx, %rbp
  7202. xorq %r15, %rbp
  7203. movq %rbp, -8(%rdi)
  7204. andnq %r13, %r12, %rbp
  7205. xorq %rbx, %rbp
  7206. movq %rbp, -56(%rdi)
  7207. andnq %r14, %r13, %rbp
  7208. xorq %r12, %rbp
  7209. movq %rbp, -64(%rdi)
  7210. # Row 3
  7211. movq -88(%rdi), %r12
  7212. movq 64(%rdi), %r13
  7213. movq 56(%rdi), %r14
  7214. movq 8(%rdi), %r15
  7215. movq -40(%rdi), %rbx
  7216. xorq %r11, %r12
  7217. xorq %rax, %r13
  7218. xorq %r8, %r14
  7219. xorq %r9, %r15
  7220. xorq %r10, %rbx
  7221. rolq $27, %r12
  7222. rolq $36, %r13
  7223. rolq $10, %r14
  7224. rolq $15, %r15
  7225. rolq $56, %rbx
  7226. andnq %r15, %r14, %rbp
  7227. xorq %r13, %rbp
  7228. movq %rbp, 64(%rdi)
  7229. andnq %rbx, %r15, %rbp
  7230. xorq %r14, %rbp
  7231. movq %rbp, 56(%rdi)
  7232. andnq %r12, %rbx, %rbp
  7233. xorq %r15, %rbp
  7234. movq %rbp, 8(%rdi)
  7235. andnq %r13, %r12, %rbp
  7236. xorq %rbx, %rbp
  7237. movq %rbp, -40(%rdi)
  7238. andnq %r14, %r13, %rbp
  7239. xorq %r12, %rbp
  7240. movq %rbp, -88(%rdi)
  7241. # Row 4
  7242. xorq -72(%rdi), %r9
  7243. xorq 80(%rdi), %r10
  7244. xorq 32(%rdi), %r11
  7245. xorq -16(%rdi), %rax
  7246. xorq -24(%rdi), %r8
  7247. rorxq $2, %r9, %r12
  7248. rorxq $9, %r10, %r13
  7249. rorxq $25, %r11, %r14
  7250. rorxq $23, %rax, %r15
  7251. rorxq $62, %r8, %rbx
  7252. andnq %r14, %r13, %rax
  7253. andnq %r15, %r14, %r8
  7254. andnq %rbx, %r15, %r9
  7255. andnq %r12, %rbx, %r10
  7256. andnq %r13, %r12, %r11
  7257. xorq %rax, %r12
  7258. xorq %r8, %r13
  7259. xorq %r9, %r14
  7260. xorq %r10, %r15
  7261. xorq %r11, %rbx
  7262. movq %r12, -72(%rdi)
  7263. movq %r13, 80(%rdi)
  7264. movq %r14, 32(%rdi)
  7265. movq %r15, -16(%rdi)
  7266. movq %rbx, -24(%rdi)
  7267. # Round 13
  7268. xorq %rcx, %r12
  7269. xorq -88(%rdi), %r12
  7270. xorq -80(%rdi), %r12
  7271. xorq -64(%rdi), %r12
  7272. xorq -56(%rdi), %rbx
  7273. xorq -48(%rdi), %rbx
  7274. xorq -40(%rdi), %rbx
  7275. xorq -32(%rdi), %rbx
  7276. xorq -8(%rdi), %r15
  7277. xorq (%rdi), %r15
  7278. xorq 8(%rdi), %r15
  7279. xorq 16(%rdi), %r15
  7280. xorq 24(%rdi), %r14
  7281. xorq 40(%rdi), %r14
  7282. xorq 48(%rdi), %r14
  7283. xorq 56(%rdi), %r14
  7284. xorq 64(%rdi), %r13
  7285. xorq 72(%rdi), %r13
  7286. xorq 88(%rdi), %r13
  7287. xorq 96(%rdi), %r13
  7288. # Calc t[0..4]
  7289. rorxq $63, %r13, %rax
  7290. rorxq $63, %r14, %r8
  7291. rorxq $63, %r15, %r9
  7292. rorxq $63, %rbx, %r10
  7293. rorxq $63, %r12, %r11
  7294. xorq %rbx, %rax
  7295. xorq %r12, %r8
  7296. xorq %r13, %r9
  7297. xorq %r14, %r10
  7298. xorq %r15, %r11
  7299. # Row Mix
  7300. # Row 0
  7301. movq %rcx, %r12
  7302. movq 72(%rdi), %r13
  7303. movq 40(%rdi), %r14
  7304. movq 8(%rdi), %r15
  7305. movq -24(%rdi), %rbx
  7306. xorq %rax, %r12
  7307. xorq %r8, %r13
  7308. xorq %r9, %r14
  7309. xorq %r10, %r15
  7310. xorq %r11, %rbx
  7311. rolq $44, %r13
  7312. rolq $43, %r14
  7313. rolq $21, %r15
  7314. rolq $14, %rbx
  7315. andnq %r15, %r14, %rbp
  7316. xorq %r13, %rbp
  7317. movq %rbp, 72(%rdi)
  7318. andnq %rbx, %r15, %rbp
  7319. xorq %r14, %rbp
  7320. movq %rbp, 40(%rdi)
  7321. andnq %r12, %rbx, %rbp
  7322. xorq %r15, %rbp
  7323. movq %rbp, 8(%rdi)
  7324. andnq %r13, %r12, %rbp
  7325. xorq %rbx, %rbp
  7326. movq %rbp, -24(%rdi)
  7327. movq $0x800000000000008b, %rbx
  7328. andnq %r14, %r13, %rcx
  7329. xorq %r12, %rcx
  7330. # XOR in constant
  7331. xorq %rbx, %rcx
  7332. # Row 1
  7333. movq (%rdi), %r12
  7334. movq -32(%rdi), %r13
  7335. movq -64(%rdi), %r14
  7336. movq 64(%rdi), %r15
  7337. movq 32(%rdi), %rbx
  7338. xorq %r10, %r12
  7339. xorq %r11, %r13
  7340. xorq %rax, %r14
  7341. xorq %r8, %r15
  7342. xorq %r9, %rbx
  7343. rolq $28, %r12
  7344. rolq $20, %r13
  7345. rolq $3, %r14
  7346. rolq $45, %r15
  7347. rolq $61, %rbx
  7348. andnq %r15, %r14, %rbp
  7349. xorq %r13, %rbp
  7350. movq %rbp, -32(%rdi)
  7351. andnq %rbx, %r15, %rbp
  7352. xorq %r14, %rbp
  7353. movq %rbp, -64(%rdi)
  7354. andnq %r12, %rbx, %rbp
  7355. xorq %r15, %rbp
  7356. movq %rbp, 64(%rdi)
  7357. andnq %r13, %r12, %rbp
  7358. xorq %rbx, %rbp
  7359. movq %rbp, 32(%rdi)
  7360. andnq %r14, %r13, %rbp
  7361. xorq %r12, %rbp
  7362. movq %rbp, (%rdi)
  7363. # Row 2
  7364. movq 96(%rdi), %r12
  7365. movq 24(%rdi), %r13
  7366. movq -8(%rdi), %r14
  7367. movq -40(%rdi), %r15
  7368. movq -72(%rdi), %rbx
  7369. xorq %r8, %r12
  7370. xorq %r9, %r13
  7371. xorq %r10, %r14
  7372. xorq %r11, %r15
  7373. xorq %rax, %rbx
  7374. rolq $0x01, %r12
  7375. rolq $6, %r13
  7376. rolq $25, %r14
  7377. rolq $8, %r15
  7378. rolq $18, %rbx
  7379. andnq %r15, %r14, %rbp
  7380. xorq %r13, %rbp
  7381. movq %rbp, 24(%rdi)
  7382. andnq %rbx, %r15, %rbp
  7383. xorq %r14, %rbp
  7384. movq %rbp, -8(%rdi)
  7385. andnq %r12, %rbx, %rbp
  7386. xorq %r15, %rbp
  7387. movq %rbp, -40(%rdi)
  7388. andnq %r13, %r12, %rbp
  7389. xorq %rbx, %rbp
  7390. movq %rbp, -72(%rdi)
  7391. andnq %r14, %r13, %rbp
  7392. xorq %r12, %rbp
  7393. movq %rbp, 96(%rdi)
  7394. # Row 3
  7395. movq -48(%rdi), %r12
  7396. movq -80(%rdi), %r13
  7397. movq 88(%rdi), %r14
  7398. movq 56(%rdi), %r15
  7399. movq -16(%rdi), %rbx
  7400. xorq %r11, %r12
  7401. xorq %rax, %r13
  7402. xorq %r8, %r14
  7403. xorq %r9, %r15
  7404. xorq %r10, %rbx
  7405. rolq $27, %r12
  7406. rolq $36, %r13
  7407. rolq $10, %r14
  7408. rolq $15, %r15
  7409. rolq $56, %rbx
  7410. andnq %r15, %r14, %rbp
  7411. xorq %r13, %rbp
  7412. movq %rbp, -80(%rdi)
  7413. andnq %rbx, %r15, %rbp
  7414. xorq %r14, %rbp
  7415. movq %rbp, 88(%rdi)
  7416. andnq %r12, %rbx, %rbp
  7417. xorq %r15, %rbp
  7418. movq %rbp, 56(%rdi)
  7419. andnq %r13, %r12, %rbp
  7420. xorq %rbx, %rbp
  7421. movq %rbp, -16(%rdi)
  7422. andnq %r14, %r13, %rbp
  7423. xorq %r12, %rbp
  7424. movq %rbp, -48(%rdi)
  7425. # Row 4
  7426. xorq 48(%rdi), %r9
  7427. xorq 16(%rdi), %r10
  7428. xorq -56(%rdi), %r11
  7429. xorq -88(%rdi), %rax
  7430. xorq 80(%rdi), %r8
  7431. rorxq $2, %r9, %r12
  7432. rorxq $9, %r10, %r13
  7433. rorxq $25, %r11, %r14
  7434. rorxq $23, %rax, %r15
  7435. rorxq $62, %r8, %rbx
  7436. andnq %r14, %r13, %rax
  7437. andnq %r15, %r14, %r8
  7438. andnq %rbx, %r15, %r9
  7439. andnq %r12, %rbx, %r10
  7440. andnq %r13, %r12, %r11
  7441. xorq %rax, %r12
  7442. xorq %r8, %r13
  7443. xorq %r9, %r14
  7444. xorq %r10, %r15
  7445. xorq %r11, %rbx
  7446. movq %r12, 48(%rdi)
  7447. movq %r13, 16(%rdi)
  7448. movq %r14, -56(%rdi)
  7449. movq %r15, -88(%rdi)
  7450. movq %rbx, 80(%rdi)
  7451. # Round 14
  7452. xorq %rcx, %r12
  7453. xorq -80(%rdi), %r13
  7454. xorq -72(%rdi), %rbx
  7455. xorq -64(%rdi), %r14
  7456. xorq -48(%rdi), %r12
  7457. xorq -40(%rdi), %r15
  7458. xorq -32(%rdi), %r13
  7459. xorq -24(%rdi), %rbx
  7460. xorq -16(%rdi), %rbx
  7461. xorq -8(%rdi), %r14
  7462. xorq (%rdi), %r12
  7463. xorq 8(%rdi), %r15
  7464. xorq 24(%rdi), %r13
  7465. xorq 32(%rdi), %rbx
  7466. xorq 40(%rdi), %r14
  7467. xorq 56(%rdi), %r15
  7468. xorq 64(%rdi), %r15
  7469. xorq 72(%rdi), %r13
  7470. xorq 88(%rdi), %r14
  7471. xorq 96(%rdi), %r12
  7472. # Calc t[0..4]
  7473. rorxq $63, %r13, %rax
  7474. rorxq $63, %r14, %r8
  7475. rorxq $63, %r15, %r9
  7476. rorxq $63, %rbx, %r10
  7477. rorxq $63, %r12, %r11
  7478. xorq %rbx, %rax
  7479. xorq %r12, %r8
  7480. xorq %r13, %r9
  7481. xorq %r14, %r10
  7482. xorq %r15, %r11
  7483. # Row Mix
  7484. # Row 0
  7485. movq %rcx, %r12
  7486. movq -32(%rdi), %r13
  7487. movq -8(%rdi), %r14
  7488. movq 56(%rdi), %r15
  7489. movq 80(%rdi), %rbx
  7490. xorq %rax, %r12
  7491. xorq %r8, %r13
  7492. xorq %r9, %r14
  7493. xorq %r10, %r15
  7494. xorq %r11, %rbx
  7495. rolq $44, %r13
  7496. rolq $43, %r14
  7497. rolq $21, %r15
  7498. rolq $14, %rbx
  7499. andnq %r15, %r14, %rbp
  7500. xorq %r13, %rbp
  7501. movq %rbp, -32(%rdi)
  7502. andnq %rbx, %r15, %rbp
  7503. xorq %r14, %rbp
  7504. movq %rbp, -8(%rdi)
  7505. andnq %r12, %rbx, %rbp
  7506. xorq %r15, %rbp
  7507. movq %rbp, 56(%rdi)
  7508. andnq %r13, %r12, %rbp
  7509. xorq %rbx, %rbp
  7510. movq %rbp, 80(%rdi)
  7511. movq $0x8000000000008089, %rbx
  7512. andnq %r14, %r13, %rcx
  7513. xorq %r12, %rcx
  7514. # XOR in constant
  7515. xorq %rbx, %rcx
  7516. # Row 1
  7517. movq 8(%rdi), %r12
  7518. movq 32(%rdi), %r13
  7519. movq 96(%rdi), %r14
  7520. movq -80(%rdi), %r15
  7521. movq -56(%rdi), %rbx
  7522. xorq %r10, %r12
  7523. xorq %r11, %r13
  7524. xorq %rax, %r14
  7525. xorq %r8, %r15
  7526. xorq %r9, %rbx
  7527. rolq $28, %r12
  7528. rolq $20, %r13
  7529. rolq $3, %r14
  7530. rolq $45, %r15
  7531. rolq $61, %rbx
  7532. andnq %r15, %r14, %rbp
  7533. xorq %r13, %rbp
  7534. movq %rbp, 32(%rdi)
  7535. andnq %rbx, %r15, %rbp
  7536. xorq %r14, %rbp
  7537. movq %rbp, 96(%rdi)
  7538. andnq %r12, %rbx, %rbp
  7539. xorq %r15, %rbp
  7540. movq %rbp, -80(%rdi)
  7541. andnq %r13, %r12, %rbp
  7542. xorq %rbx, %rbp
  7543. movq %rbp, -56(%rdi)
  7544. andnq %r14, %r13, %rbp
  7545. xorq %r12, %rbp
  7546. movq %rbp, 8(%rdi)
  7547. # Row 2
  7548. movq 72(%rdi), %r12
  7549. movq -64(%rdi), %r13
  7550. movq -40(%rdi), %r14
  7551. movq -16(%rdi), %r15
  7552. movq 48(%rdi), %rbx
  7553. xorq %r8, %r12
  7554. xorq %r9, %r13
  7555. xorq %r10, %r14
  7556. xorq %r11, %r15
  7557. xorq %rax, %rbx
  7558. rolq $0x01, %r12
  7559. rolq $6, %r13
  7560. rolq $25, %r14
  7561. rolq $8, %r15
  7562. rolq $18, %rbx
  7563. andnq %r15, %r14, %rbp
  7564. xorq %r13, %rbp
  7565. movq %rbp, -64(%rdi)
  7566. andnq %rbx, %r15, %rbp
  7567. xorq %r14, %rbp
  7568. movq %rbp, -40(%rdi)
  7569. andnq %r12, %rbx, %rbp
  7570. xorq %r15, %rbp
  7571. movq %rbp, -16(%rdi)
  7572. andnq %r13, %r12, %rbp
  7573. xorq %rbx, %rbp
  7574. movq %rbp, 48(%rdi)
  7575. andnq %r14, %r13, %rbp
  7576. xorq %r12, %rbp
  7577. movq %rbp, 72(%rdi)
  7578. # Row 3
  7579. movq -24(%rdi), %r12
  7580. movq (%rdi), %r13
  7581. movq 24(%rdi), %r14
  7582. movq 88(%rdi), %r15
  7583. movq -88(%rdi), %rbx
  7584. xorq %r11, %r12
  7585. xorq %rax, %r13
  7586. xorq %r8, %r14
  7587. xorq %r9, %r15
  7588. xorq %r10, %rbx
  7589. rolq $27, %r12
  7590. rolq $36, %r13
  7591. rolq $10, %r14
  7592. rolq $15, %r15
  7593. rolq $56, %rbx
  7594. andnq %r15, %r14, %rbp
  7595. xorq %r13, %rbp
  7596. movq %rbp, (%rdi)
  7597. andnq %rbx, %r15, %rbp
  7598. xorq %r14, %rbp
  7599. movq %rbp, 24(%rdi)
  7600. andnq %r12, %rbx, %rbp
  7601. xorq %r15, %rbp
  7602. movq %rbp, 88(%rdi)
  7603. andnq %r13, %r12, %rbp
  7604. xorq %rbx, %rbp
  7605. movq %rbp, -88(%rdi)
  7606. andnq %r14, %r13, %rbp
  7607. xorq %r12, %rbp
  7608. movq %rbp, -24(%rdi)
  7609. # Row 4
  7610. xorq 40(%rdi), %r9
  7611. xorq 64(%rdi), %r10
  7612. xorq -72(%rdi), %r11
  7613. xorq -48(%rdi), %rax
  7614. xorq 16(%rdi), %r8
  7615. rorxq $2, %r9, %r12
  7616. rorxq $9, %r10, %r13
  7617. rorxq $25, %r11, %r14
  7618. rorxq $23, %rax, %r15
  7619. rorxq $62, %r8, %rbx
  7620. andnq %r14, %r13, %rax
  7621. andnq %r15, %r14, %r8
  7622. andnq %rbx, %r15, %r9
  7623. andnq %r12, %rbx, %r10
  7624. andnq %r13, %r12, %r11
  7625. xorq %rax, %r12
  7626. xorq %r8, %r13
  7627. xorq %r9, %r14
  7628. xorq %r10, %r15
  7629. xorq %r11, %rbx
  7630. movq %r12, 40(%rdi)
  7631. movq %r13, 64(%rdi)
  7632. movq %r14, -72(%rdi)
  7633. movq %r15, -48(%rdi)
  7634. movq %rbx, 16(%rdi)
  7635. # Round 15
  7636. xorq %rcx, %r12
  7637. xorq -88(%rdi), %rbx
  7638. xorq -80(%rdi), %r15
  7639. xorq -64(%rdi), %r13
  7640. xorq -56(%rdi), %rbx
  7641. xorq -40(%rdi), %r14
  7642. xorq -32(%rdi), %r13
  7643. xorq -24(%rdi), %r12
  7644. xorq -16(%rdi), %r15
  7645. xorq -8(%rdi), %r14
  7646. xorq (%rdi), %r13
  7647. xorq 8(%rdi), %r12
  7648. xorq 24(%rdi), %r14
  7649. xorq 32(%rdi), %r13
  7650. xorq 48(%rdi), %rbx
  7651. xorq 56(%rdi), %r15
  7652. xorq 72(%rdi), %r12
  7653. xorq 80(%rdi), %rbx
  7654. xorq 88(%rdi), %r15
  7655. xorq 96(%rdi), %r14
  7656. # Calc t[0..4]
  7657. rorxq $63, %r13, %rax
  7658. rorxq $63, %r14, %r8
  7659. rorxq $63, %r15, %r9
  7660. rorxq $63, %rbx, %r10
  7661. rorxq $63, %r12, %r11
  7662. xorq %rbx, %rax
  7663. xorq %r12, %r8
  7664. xorq %r13, %r9
  7665. xorq %r14, %r10
  7666. xorq %r15, %r11
  7667. # Row Mix
  7668. # Row 0
  7669. movq %rcx, %r12
  7670. movq 32(%rdi), %r13
  7671. movq -40(%rdi), %r14
  7672. movq 88(%rdi), %r15
  7673. movq 16(%rdi), %rbx
  7674. xorq %rax, %r12
  7675. xorq %r8, %r13
  7676. xorq %r9, %r14
  7677. xorq %r10, %r15
  7678. xorq %r11, %rbx
  7679. rolq $44, %r13
  7680. rolq $43, %r14
  7681. rolq $21, %r15
  7682. rolq $14, %rbx
  7683. andnq %r15, %r14, %rbp
  7684. xorq %r13, %rbp
  7685. movq %rbp, 32(%rdi)
  7686. andnq %rbx, %r15, %rbp
  7687. xorq %r14, %rbp
  7688. movq %rbp, -40(%rdi)
  7689. andnq %r12, %rbx, %rbp
  7690. xorq %r15, %rbp
  7691. movq %rbp, 88(%rdi)
  7692. andnq %r13, %r12, %rbp
  7693. xorq %rbx, %rbp
  7694. movq %rbp, 16(%rdi)
  7695. movq $0x8000000000008003, %rbx
  7696. andnq %r14, %r13, %rcx
  7697. xorq %r12, %rcx
  7698. # XOR in constant
  7699. xorq %rbx, %rcx
  7700. # Row 1
  7701. movq 56(%rdi), %r12
  7702. movq -56(%rdi), %r13
  7703. movq 72(%rdi), %r14
  7704. movq (%rdi), %r15
  7705. movq -72(%rdi), %rbx
  7706. xorq %r10, %r12
  7707. xorq %r11, %r13
  7708. xorq %rax, %r14
  7709. xorq %r8, %r15
  7710. xorq %r9, %rbx
  7711. rolq $28, %r12
  7712. rolq $20, %r13
  7713. rolq $3, %r14
  7714. rolq $45, %r15
  7715. rolq $61, %rbx
  7716. andnq %r15, %r14, %rbp
  7717. xorq %r13, %rbp
  7718. movq %rbp, -56(%rdi)
  7719. andnq %rbx, %r15, %rbp
  7720. xorq %r14, %rbp
  7721. movq %rbp, 72(%rdi)
  7722. andnq %r12, %rbx, %rbp
  7723. xorq %r15, %rbp
  7724. movq %rbp, (%rdi)
  7725. andnq %r13, %r12, %rbp
  7726. xorq %rbx, %rbp
  7727. movq %rbp, -72(%rdi)
  7728. andnq %r14, %r13, %rbp
  7729. xorq %r12, %rbp
  7730. movq %rbp, 56(%rdi)
  7731. # Row 2
  7732. movq -32(%rdi), %r12
  7733. movq 96(%rdi), %r13
  7734. movq -16(%rdi), %r14
  7735. movq -88(%rdi), %r15
  7736. movq 40(%rdi), %rbx
  7737. xorq %r8, %r12
  7738. xorq %r9, %r13
  7739. xorq %r10, %r14
  7740. xorq %r11, %r15
  7741. xorq %rax, %rbx
  7742. rolq $0x01, %r12
  7743. rolq $6, %r13
  7744. rolq $25, %r14
  7745. rolq $8, %r15
  7746. rolq $18, %rbx
  7747. andnq %r15, %r14, %rbp
  7748. xorq %r13, %rbp
  7749. movq %rbp, 96(%rdi)
  7750. andnq %rbx, %r15, %rbp
  7751. xorq %r14, %rbp
  7752. movq %rbp, -16(%rdi)
  7753. andnq %r12, %rbx, %rbp
  7754. xorq %r15, %rbp
  7755. movq %rbp, -88(%rdi)
  7756. andnq %r13, %r12, %rbp
  7757. xorq %rbx, %rbp
  7758. movq %rbp, 40(%rdi)
  7759. andnq %r14, %r13, %rbp
  7760. xorq %r12, %rbp
  7761. movq %rbp, -32(%rdi)
  7762. # Row 3
  7763. movq 80(%rdi), %r12
  7764. movq 8(%rdi), %r13
  7765. movq -64(%rdi), %r14
  7766. movq 24(%rdi), %r15
  7767. movq -48(%rdi), %rbx
  7768. xorq %r11, %r12
  7769. xorq %rax, %r13
  7770. xorq %r8, %r14
  7771. xorq %r9, %r15
  7772. xorq %r10, %rbx
  7773. rolq $27, %r12
  7774. rolq $36, %r13
  7775. rolq $10, %r14
  7776. rolq $15, %r15
  7777. rolq $56, %rbx
  7778. andnq %r15, %r14, %rbp
  7779. xorq %r13, %rbp
  7780. movq %rbp, 8(%rdi)
  7781. andnq %rbx, %r15, %rbp
  7782. xorq %r14, %rbp
  7783. movq %rbp, -64(%rdi)
  7784. andnq %r12, %rbx, %rbp
  7785. xorq %r15, %rbp
  7786. movq %rbp, 24(%rdi)
  7787. andnq %r13, %r12, %rbp
  7788. xorq %rbx, %rbp
  7789. movq %rbp, -48(%rdi)
  7790. andnq %r14, %r13, %rbp
  7791. xorq %r12, %rbp
  7792. movq %rbp, 80(%rdi)
  7793. # Row 4
  7794. xorq -8(%rdi), %r9
  7795. xorq -80(%rdi), %r10
  7796. xorq 48(%rdi), %r11
  7797. xorq -24(%rdi), %rax
  7798. xorq 64(%rdi), %r8
  7799. rorxq $2, %r9, %r12
  7800. rorxq $9, %r10, %r13
  7801. rorxq $25, %r11, %r14
  7802. rorxq $23, %rax, %r15
  7803. rorxq $62, %r8, %rbx
  7804. andnq %r14, %r13, %rax
  7805. andnq %r15, %r14, %r8
  7806. andnq %rbx, %r15, %r9
  7807. andnq %r12, %rbx, %r10
  7808. andnq %r13, %r12, %r11
  7809. xorq %rax, %r12
  7810. xorq %r8, %r13
  7811. xorq %r9, %r14
  7812. xorq %r10, %r15
  7813. xorq %r11, %rbx
  7814. movq %r12, -8(%rdi)
  7815. movq %r13, -80(%rdi)
  7816. movq %r14, 48(%rdi)
  7817. movq %r15, -24(%rdi)
  7818. movq %rbx, 64(%rdi)
  7819. # Round 16
  7820. xorq %rcx, %r12
  7821. xorq -88(%rdi), %r15
  7822. xorq -72(%rdi), %rbx
  7823. xorq -64(%rdi), %r14
  7824. xorq -56(%rdi), %r13
  7825. xorq -48(%rdi), %rbx
  7826. xorq -40(%rdi), %r14
  7827. xorq -32(%rdi), %r12
  7828. xorq -16(%rdi), %r14
  7829. xorq (%rdi), %r15
  7830. xorq 8(%rdi), %r13
  7831. xorq 16(%rdi), %rbx
  7832. xorq 24(%rdi), %r15
  7833. xorq 32(%rdi), %r13
  7834. xorq 40(%rdi), %rbx
  7835. xorq 56(%rdi), %r12
  7836. xorq 72(%rdi), %r14
  7837. xorq 80(%rdi), %r12
  7838. xorq 88(%rdi), %r15
  7839. xorq 96(%rdi), %r13
  7840. # Calc t[0..4]
  7841. rorxq $63, %r13, %rax
  7842. rorxq $63, %r14, %r8
  7843. rorxq $63, %r15, %r9
  7844. rorxq $63, %rbx, %r10
  7845. rorxq $63, %r12, %r11
  7846. xorq %rbx, %rax
  7847. xorq %r12, %r8
  7848. xorq %r13, %r9
  7849. xorq %r14, %r10
  7850. xorq %r15, %r11
  7851. # Row Mix
  7852. # Row 0
  7853. movq %rcx, %r12
  7854. movq -56(%rdi), %r13
  7855. movq -16(%rdi), %r14
  7856. movq 24(%rdi), %r15
  7857. movq 64(%rdi), %rbx
  7858. xorq %rax, %r12
  7859. xorq %r8, %r13
  7860. xorq %r9, %r14
  7861. xorq %r10, %r15
  7862. xorq %r11, %rbx
  7863. rolq $44, %r13
  7864. rolq $43, %r14
  7865. rolq $21, %r15
  7866. rolq $14, %rbx
  7867. andnq %r15, %r14, %rbp
  7868. xorq %r13, %rbp
  7869. movq %rbp, -56(%rdi)
  7870. andnq %rbx, %r15, %rbp
  7871. xorq %r14, %rbp
  7872. movq %rbp, -16(%rdi)
  7873. andnq %r12, %rbx, %rbp
  7874. xorq %r15, %rbp
  7875. movq %rbp, 24(%rdi)
  7876. andnq %r13, %r12, %rbp
  7877. xorq %rbx, %rbp
  7878. movq %rbp, 64(%rdi)
  7879. movq $0x8000000000008002, %rbx
  7880. andnq %r14, %r13, %rcx
  7881. xorq %r12, %rcx
  7882. # XOR in constant
  7883. xorq %rbx, %rcx
  7884. # Row 1
  7885. movq 88(%rdi), %r12
  7886. movq -72(%rdi), %r13
  7887. movq -32(%rdi), %r14
  7888. movq 8(%rdi), %r15
  7889. movq 48(%rdi), %rbx
  7890. xorq %r10, %r12
  7891. xorq %r11, %r13
  7892. xorq %rax, %r14
  7893. xorq %r8, %r15
  7894. xorq %r9, %rbx
  7895. rolq $28, %r12
  7896. rolq $20, %r13
  7897. rolq $3, %r14
  7898. rolq $45, %r15
  7899. rolq $61, %rbx
  7900. andnq %r15, %r14, %rbp
  7901. xorq %r13, %rbp
  7902. movq %rbp, -72(%rdi)
  7903. andnq %rbx, %r15, %rbp
  7904. xorq %r14, %rbp
  7905. movq %rbp, -32(%rdi)
  7906. andnq %r12, %rbx, %rbp
  7907. xorq %r15, %rbp
  7908. movq %rbp, 8(%rdi)
  7909. andnq %r13, %r12, %rbp
  7910. xorq %rbx, %rbp
  7911. movq %rbp, 48(%rdi)
  7912. andnq %r14, %r13, %rbp
  7913. xorq %r12, %rbp
  7914. movq %rbp, 88(%rdi)
  7915. # Row 2
  7916. movq 32(%rdi), %r12
  7917. movq 72(%rdi), %r13
  7918. movq -88(%rdi), %r14
  7919. movq -48(%rdi), %r15
  7920. movq -8(%rdi), %rbx
  7921. xorq %r8, %r12
  7922. xorq %r9, %r13
  7923. xorq %r10, %r14
  7924. xorq %r11, %r15
  7925. xorq %rax, %rbx
  7926. rolq $0x01, %r12
  7927. rolq $6, %r13
  7928. rolq $25, %r14
  7929. rolq $8, %r15
  7930. rolq $18, %rbx
  7931. andnq %r15, %r14, %rbp
  7932. xorq %r13, %rbp
  7933. movq %rbp, 72(%rdi)
  7934. andnq %rbx, %r15, %rbp
  7935. xorq %r14, %rbp
  7936. movq %rbp, -88(%rdi)
  7937. andnq %r12, %rbx, %rbp
  7938. xorq %r15, %rbp
  7939. movq %rbp, -48(%rdi)
  7940. andnq %r13, %r12, %rbp
  7941. xorq %rbx, %rbp
  7942. movq %rbp, -8(%rdi)
  7943. andnq %r14, %r13, %rbp
  7944. xorq %r12, %rbp
  7945. movq %rbp, 32(%rdi)
  7946. # Row 3
  7947. movq 16(%rdi), %r12
  7948. movq 56(%rdi), %r13
  7949. movq 96(%rdi), %r14
  7950. movq -64(%rdi), %r15
  7951. movq -24(%rdi), %rbx
  7952. xorq %r11, %r12
  7953. xorq %rax, %r13
  7954. xorq %r8, %r14
  7955. xorq %r9, %r15
  7956. xorq %r10, %rbx
  7957. rolq $27, %r12
  7958. rolq $36, %r13
  7959. rolq $10, %r14
  7960. rolq $15, %r15
  7961. rolq $56, %rbx
  7962. andnq %r15, %r14, %rbp
  7963. xorq %r13, %rbp
  7964. movq %rbp, 56(%rdi)
  7965. andnq %rbx, %r15, %rbp
  7966. xorq %r14, %rbp
  7967. movq %rbp, 96(%rdi)
  7968. andnq %r12, %rbx, %rbp
  7969. xorq %r15, %rbp
  7970. movq %rbp, -64(%rdi)
  7971. andnq %r13, %r12, %rbp
  7972. xorq %rbx, %rbp
  7973. movq %rbp, -24(%rdi)
  7974. andnq %r14, %r13, %rbp
  7975. xorq %r12, %rbp
  7976. movq %rbp, 16(%rdi)
  7977. # Row 4
  7978. xorq -40(%rdi), %r9
  7979. xorq (%rdi), %r10
  7980. xorq 40(%rdi), %r11
  7981. xorq 80(%rdi), %rax
  7982. xorq -80(%rdi), %r8
  7983. rorxq $2, %r9, %r12
  7984. rorxq $9, %r10, %r13
  7985. rorxq $25, %r11, %r14
  7986. rorxq $23, %rax, %r15
  7987. rorxq $62, %r8, %rbx
  7988. andnq %r14, %r13, %rax
  7989. andnq %r15, %r14, %r8
  7990. andnq %rbx, %r15, %r9
  7991. andnq %r12, %rbx, %r10
  7992. andnq %r13, %r12, %r11
  7993. xorq %rax, %r12
  7994. xorq %r8, %r13
  7995. xorq %r9, %r14
  7996. xorq %r10, %r15
  7997. xorq %r11, %rbx
  7998. movq %r12, -40(%rdi)
  7999. movq %r13, (%rdi)
  8000. movq %r14, 40(%rdi)
  8001. movq %r15, 80(%rdi)
  8002. movq %rbx, -80(%rdi)
  8003. # Round 17
  8004. xorq %rcx, %r12
  8005. xorq -88(%rdi), %r14
  8006. xorq -72(%rdi), %r13
  8007. xorq -64(%rdi), %r15
  8008. xorq -56(%rdi), %r13
  8009. xorq -48(%rdi), %r15
  8010. xorq -32(%rdi), %r14
  8011. xorq -24(%rdi), %rbx
  8012. xorq -16(%rdi), %r14
  8013. xorq -8(%rdi), %rbx
  8014. xorq 8(%rdi), %r15
  8015. xorq 16(%rdi), %r12
  8016. xorq 24(%rdi), %r15
  8017. xorq 32(%rdi), %r12
  8018. xorq 48(%rdi), %rbx
  8019. xorq 56(%rdi), %r13
  8020. xorq 64(%rdi), %rbx
  8021. xorq 72(%rdi), %r13
  8022. xorq 88(%rdi), %r12
  8023. xorq 96(%rdi), %r14
  8024. # Calc t[0..4]
  8025. rorxq $63, %r13, %rax
  8026. rorxq $63, %r14, %r8
  8027. rorxq $63, %r15, %r9
  8028. rorxq $63, %rbx, %r10
  8029. rorxq $63, %r12, %r11
  8030. xorq %rbx, %rax
  8031. xorq %r12, %r8
  8032. xorq %r13, %r9
  8033. xorq %r14, %r10
  8034. xorq %r15, %r11
  8035. # Row Mix
  8036. # Row 0
  8037. movq %rcx, %r12
  8038. movq -72(%rdi), %r13
  8039. movq -88(%rdi), %r14
  8040. movq -64(%rdi), %r15
  8041. movq -80(%rdi), %rbx
  8042. xorq %rax, %r12
  8043. xorq %r8, %r13
  8044. xorq %r9, %r14
  8045. xorq %r10, %r15
  8046. xorq %r11, %rbx
  8047. rolq $44, %r13
  8048. rolq $43, %r14
  8049. rolq $21, %r15
  8050. rolq $14, %rbx
  8051. andnq %r15, %r14, %rbp
  8052. xorq %r13, %rbp
  8053. movq %rbp, -72(%rdi)
  8054. andnq %rbx, %r15, %rbp
  8055. xorq %r14, %rbp
  8056. movq %rbp, -88(%rdi)
  8057. andnq %r12, %rbx, %rbp
  8058. xorq %r15, %rbp
  8059. movq %rbp, -64(%rdi)
  8060. andnq %r13, %r12, %rbp
  8061. xorq %rbx, %rbp
  8062. movq %rbp, -80(%rdi)
  8063. movq $0x8000000000000080, %rbx
  8064. andnq %r14, %r13, %rcx
  8065. xorq %r12, %rcx
  8066. # XOR in constant
  8067. xorq %rbx, %rcx
  8068. # Row 1
  8069. movq 24(%rdi), %r12
  8070. movq 48(%rdi), %r13
  8071. movq 32(%rdi), %r14
  8072. movq 56(%rdi), %r15
  8073. movq 40(%rdi), %rbx
  8074. xorq %r10, %r12
  8075. xorq %r11, %r13
  8076. xorq %rax, %r14
  8077. xorq %r8, %r15
  8078. xorq %r9, %rbx
  8079. rolq $28, %r12
  8080. rolq $20, %r13
  8081. rolq $3, %r14
  8082. rolq $45, %r15
  8083. rolq $61, %rbx
  8084. andnq %r15, %r14, %rbp
  8085. xorq %r13, %rbp
  8086. movq %rbp, 48(%rdi)
  8087. andnq %rbx, %r15, %rbp
  8088. xorq %r14, %rbp
  8089. movq %rbp, 32(%rdi)
  8090. andnq %r12, %rbx, %rbp
  8091. xorq %r15, %rbp
  8092. movq %rbp, 56(%rdi)
  8093. andnq %r13, %r12, %rbp
  8094. xorq %rbx, %rbp
  8095. movq %rbp, 40(%rdi)
  8096. andnq %r14, %r13, %rbp
  8097. xorq %r12, %rbp
  8098. movq %rbp, 24(%rdi)
  8099. # Row 2
  8100. movq -56(%rdi), %r12
  8101. movq -32(%rdi), %r13
  8102. movq -48(%rdi), %r14
  8103. movq -24(%rdi), %r15
  8104. movq -40(%rdi), %rbx
  8105. xorq %r8, %r12
  8106. xorq %r9, %r13
  8107. xorq %r10, %r14
  8108. xorq %r11, %r15
  8109. xorq %rax, %rbx
  8110. rolq $0x01, %r12
  8111. rolq $6, %r13
  8112. rolq $25, %r14
  8113. rolq $8, %r15
  8114. rolq $18, %rbx
  8115. andnq %r15, %r14, %rbp
  8116. xorq %r13, %rbp
  8117. movq %rbp, -32(%rdi)
  8118. andnq %rbx, %r15, %rbp
  8119. xorq %r14, %rbp
  8120. movq %rbp, -48(%rdi)
  8121. andnq %r12, %rbx, %rbp
  8122. xorq %r15, %rbp
  8123. movq %rbp, -24(%rdi)
  8124. andnq %r13, %r12, %rbp
  8125. xorq %rbx, %rbp
  8126. movq %rbp, -40(%rdi)
  8127. andnq %r14, %r13, %rbp
  8128. xorq %r12, %rbp
  8129. movq %rbp, -56(%rdi)
  8130. # Row 3
  8131. movq 64(%rdi), %r12
  8132. movq 88(%rdi), %r13
  8133. movq 72(%rdi), %r14
  8134. movq 96(%rdi), %r15
  8135. movq 80(%rdi), %rbx
  8136. xorq %r11, %r12
  8137. xorq %rax, %r13
  8138. xorq %r8, %r14
  8139. xorq %r9, %r15
  8140. xorq %r10, %rbx
  8141. rolq $27, %r12
  8142. rolq $36, %r13
  8143. rolq $10, %r14
  8144. rolq $15, %r15
  8145. rolq $56, %rbx
  8146. andnq %r15, %r14, %rbp
  8147. xorq %r13, %rbp
  8148. movq %rbp, 88(%rdi)
  8149. andnq %rbx, %r15, %rbp
  8150. xorq %r14, %rbp
  8151. movq %rbp, 72(%rdi)
  8152. andnq %r12, %rbx, %rbp
  8153. xorq %r15, %rbp
  8154. movq %rbp, 96(%rdi)
  8155. andnq %r13, %r12, %rbp
  8156. xorq %rbx, %rbp
  8157. movq %rbp, 80(%rdi)
  8158. andnq %r14, %r13, %rbp
  8159. xorq %r12, %rbp
  8160. movq %rbp, 64(%rdi)
  8161. # Row 4
  8162. xorq -16(%rdi), %r9
  8163. xorq 8(%rdi), %r10
  8164. xorq -8(%rdi), %r11
  8165. xorq 16(%rdi), %rax
  8166. xorq (%rdi), %r8
  8167. rorxq $2, %r9, %r12
  8168. rorxq $9, %r10, %r13
  8169. rorxq $25, %r11, %r14
  8170. rorxq $23, %rax, %r15
  8171. rorxq $62, %r8, %rbx
  8172. andnq %r14, %r13, %rax
  8173. andnq %r15, %r14, %r8
  8174. andnq %rbx, %r15, %r9
  8175. andnq %r12, %rbx, %r10
  8176. andnq %r13, %r12, %r11
  8177. xorq %rax, %r12
  8178. xorq %r8, %r13
  8179. xorq %r9, %r14
  8180. xorq %r10, %r15
  8181. xorq %r11, %rbx
  8182. movq %r12, -16(%rdi)
  8183. movq %r13, 8(%rdi)
  8184. movq %r14, -8(%rdi)
  8185. movq %r15, 16(%rdi)
  8186. movq %rbx, (%rdi)
  8187. # Round 18
  8188. xorq %rcx, %r12
  8189. xorq -88(%rdi), %r14
  8190. xorq -80(%rdi), %rbx
  8191. xorq -72(%rdi), %r13
  8192. xorq -64(%rdi), %r15
  8193. xorq -56(%rdi), %r12
  8194. xorq -48(%rdi), %r14
  8195. xorq -40(%rdi), %rbx
  8196. xorq -32(%rdi), %r13
  8197. xorq -24(%rdi), %r15
  8198. xorq 24(%rdi), %r12
  8199. xorq 32(%rdi), %r14
  8200. xorq 40(%rdi), %rbx
  8201. xorq 48(%rdi), %r13
  8202. xorq 56(%rdi), %r15
  8203. xorq 64(%rdi), %r12
  8204. xorq 72(%rdi), %r14
  8205. xorq 80(%rdi), %rbx
  8206. xorq 88(%rdi), %r13
  8207. xorq 96(%rdi), %r15
  8208. # Calc t[0..4]
  8209. rorxq $63, %r13, %rax
  8210. rorxq $63, %r14, %r8
  8211. rorxq $63, %r15, %r9
  8212. rorxq $63, %rbx, %r10
  8213. rorxq $63, %r12, %r11
  8214. xorq %rbx, %rax
  8215. xorq %r12, %r8
  8216. xorq %r13, %r9
  8217. xorq %r14, %r10
  8218. xorq %r15, %r11
  8219. # Row Mix
  8220. # Row 0
  8221. movq %rcx, %r12
  8222. movq 48(%rdi), %r13
  8223. movq -48(%rdi), %r14
  8224. movq 96(%rdi), %r15
  8225. movq (%rdi), %rbx
  8226. xorq %rax, %r12
  8227. xorq %r8, %r13
  8228. xorq %r9, %r14
  8229. xorq %r10, %r15
  8230. xorq %r11, %rbx
  8231. rolq $44, %r13
  8232. rolq $43, %r14
  8233. rolq $21, %r15
  8234. rolq $14, %rbx
  8235. andnq %r15, %r14, %rbp
  8236. xorq %r13, %rbp
  8237. movq %rbp, 48(%rdi)
  8238. andnq %rbx, %r15, %rbp
  8239. xorq %r14, %rbp
  8240. movq %rbp, -48(%rdi)
  8241. andnq %r12, %rbx, %rbp
  8242. xorq %r15, %rbp
  8243. movq %rbp, 96(%rdi)
  8244. andnq %r13, %r12, %rbp
  8245. xorq %rbx, %rbp
  8246. movq %rbp, (%rdi)
  8247. andnq %r14, %r13, %rcx
  8248. xorq %r12, %rcx
  8249. # XOR in constant
  8250. xorq $0x800a, %rcx
  8251. # Row 1
  8252. movq -64(%rdi), %r12
  8253. movq 40(%rdi), %r13
  8254. movq -56(%rdi), %r14
  8255. movq 88(%rdi), %r15
  8256. movq -8(%rdi), %rbx
  8257. xorq %r10, %r12
  8258. xorq %r11, %r13
  8259. xorq %rax, %r14
  8260. xorq %r8, %r15
  8261. xorq %r9, %rbx
  8262. rolq $28, %r12
  8263. rolq $20, %r13
  8264. rolq $3, %r14
  8265. rolq $45, %r15
  8266. rolq $61, %rbx
  8267. andnq %r15, %r14, %rbp
  8268. xorq %r13, %rbp
  8269. movq %rbp, 40(%rdi)
  8270. andnq %rbx, %r15, %rbp
  8271. xorq %r14, %rbp
  8272. movq %rbp, -56(%rdi)
  8273. andnq %r12, %rbx, %rbp
  8274. xorq %r15, %rbp
  8275. movq %rbp, 88(%rdi)
  8276. andnq %r13, %r12, %rbp
  8277. xorq %rbx, %rbp
  8278. movq %rbp, -8(%rdi)
  8279. andnq %r14, %r13, %rbp
  8280. xorq %r12, %rbp
  8281. movq %rbp, -64(%rdi)
  8282. # Row 2
  8283. movq -72(%rdi), %r12
  8284. movq 32(%rdi), %r13
  8285. movq -24(%rdi), %r14
  8286. movq 80(%rdi), %r15
  8287. movq -16(%rdi), %rbx
  8288. xorq %r8, %r12
  8289. xorq %r9, %r13
  8290. xorq %r10, %r14
  8291. xorq %r11, %r15
  8292. xorq %rax, %rbx
  8293. rolq $0x01, %r12
  8294. rolq $6, %r13
  8295. rolq $25, %r14
  8296. rolq $8, %r15
  8297. rolq $18, %rbx
  8298. andnq %r15, %r14, %rbp
  8299. xorq %r13, %rbp
  8300. movq %rbp, 32(%rdi)
  8301. andnq %rbx, %r15, %rbp
  8302. xorq %r14, %rbp
  8303. movq %rbp, -24(%rdi)
  8304. andnq %r12, %rbx, %rbp
  8305. xorq %r15, %rbp
  8306. movq %rbp, 80(%rdi)
  8307. andnq %r13, %r12, %rbp
  8308. xorq %rbx, %rbp
  8309. movq %rbp, -16(%rdi)
  8310. andnq %r14, %r13, %rbp
  8311. xorq %r12, %rbp
  8312. movq %rbp, -72(%rdi)
  8313. # Row 3
  8314. movq -80(%rdi), %r12
  8315. movq 24(%rdi), %r13
  8316. movq -32(%rdi), %r14
  8317. movq 72(%rdi), %r15
  8318. movq 16(%rdi), %rbx
  8319. xorq %r11, %r12
  8320. xorq %rax, %r13
  8321. xorq %r8, %r14
  8322. xorq %r9, %r15
  8323. xorq %r10, %rbx
  8324. rolq $27, %r12
  8325. rolq $36, %r13
  8326. rolq $10, %r14
  8327. rolq $15, %r15
  8328. rolq $56, %rbx
  8329. andnq %r15, %r14, %rbp
  8330. xorq %r13, %rbp
  8331. movq %rbp, 24(%rdi)
  8332. andnq %rbx, %r15, %rbp
  8333. xorq %r14, %rbp
  8334. movq %rbp, -32(%rdi)
  8335. andnq %r12, %rbx, %rbp
  8336. xorq %r15, %rbp
  8337. movq %rbp, 72(%rdi)
  8338. andnq %r13, %r12, %rbp
  8339. xorq %rbx, %rbp
  8340. movq %rbp, 16(%rdi)
  8341. andnq %r14, %r13, %rbp
  8342. xorq %r12, %rbp
  8343. movq %rbp, -80(%rdi)
  8344. # Row 4
  8345. xorq -88(%rdi), %r9
  8346. xorq 56(%rdi), %r10
  8347. xorq -40(%rdi), %r11
  8348. xorq 64(%rdi), %rax
  8349. xorq 8(%rdi), %r8
  8350. rorxq $2, %r9, %r12
  8351. rorxq $9, %r10, %r13
  8352. rorxq $25, %r11, %r14
  8353. rorxq $23, %rax, %r15
  8354. rorxq $62, %r8, %rbx
  8355. andnq %r14, %r13, %rax
  8356. andnq %r15, %r14, %r8
  8357. andnq %rbx, %r15, %r9
  8358. andnq %r12, %rbx, %r10
  8359. andnq %r13, %r12, %r11
  8360. xorq %rax, %r12
  8361. xorq %r8, %r13
  8362. xorq %r9, %r14
  8363. xorq %r10, %r15
  8364. xorq %r11, %rbx
  8365. movq %r12, -88(%rdi)
  8366. movq %r13, 56(%rdi)
  8367. movq %r14, -40(%rdi)
  8368. movq %r15, 64(%rdi)
  8369. movq %rbx, 8(%rdi)
  8370. # Round 19
  8371. xorq %rcx, %r12
  8372. xorq -80(%rdi), %r12
  8373. xorq -72(%rdi), %r12
  8374. xorq -64(%rdi), %r12
  8375. xorq -56(%rdi), %r14
  8376. xorq -48(%rdi), %r14
  8377. xorq -32(%rdi), %r14
  8378. xorq -24(%rdi), %r14
  8379. xorq -16(%rdi), %rbx
  8380. xorq -8(%rdi), %rbx
  8381. xorq (%rdi), %rbx
  8382. xorq 16(%rdi), %rbx
  8383. xorq 24(%rdi), %r13
  8384. xorq 32(%rdi), %r13
  8385. xorq 40(%rdi), %r13
  8386. xorq 48(%rdi), %r13
  8387. xorq 72(%rdi), %r15
  8388. xorq 80(%rdi), %r15
  8389. xorq 88(%rdi), %r15
  8390. xorq 96(%rdi), %r15
  8391. # Calc t[0..4]
  8392. rorxq $63, %r13, %rax
  8393. rorxq $63, %r14, %r8
  8394. rorxq $63, %r15, %r9
  8395. rorxq $63, %rbx, %r10
  8396. rorxq $63, %r12, %r11
  8397. xorq %rbx, %rax
  8398. xorq %r12, %r8
  8399. xorq %r13, %r9
  8400. xorq %r14, %r10
  8401. xorq %r15, %r11
  8402. # Row Mix
  8403. # Row 0
  8404. movq %rcx, %r12
  8405. movq 40(%rdi), %r13
  8406. movq -24(%rdi), %r14
  8407. movq 72(%rdi), %r15
  8408. movq 8(%rdi), %rbx
  8409. xorq %rax, %r12
  8410. xorq %r8, %r13
  8411. xorq %r9, %r14
  8412. xorq %r10, %r15
  8413. xorq %r11, %rbx
  8414. rolq $44, %r13
  8415. rolq $43, %r14
  8416. rolq $21, %r15
  8417. rolq $14, %rbx
  8418. andnq %r15, %r14, %rbp
  8419. xorq %r13, %rbp
  8420. movq %rbp, 40(%rdi)
  8421. andnq %rbx, %r15, %rbp
  8422. xorq %r14, %rbp
  8423. movq %rbp, -24(%rdi)
  8424. andnq %r12, %rbx, %rbp
  8425. xorq %r15, %rbp
  8426. movq %rbp, 72(%rdi)
  8427. andnq %r13, %r12, %rbp
  8428. xorq %rbx, %rbp
  8429. movq %rbp, 8(%rdi)
  8430. movq $0x800000008000000a, %rbx
  8431. andnq %r14, %r13, %rcx
  8432. xorq %r12, %rcx
  8433. # XOR in constant
  8434. xorq %rbx, %rcx
  8435. # Row 1
  8436. movq 96(%rdi), %r12
  8437. movq -8(%rdi), %r13
  8438. movq -72(%rdi), %r14
  8439. movq 24(%rdi), %r15
  8440. movq -40(%rdi), %rbx
  8441. xorq %r10, %r12
  8442. xorq %r11, %r13
  8443. xorq %rax, %r14
  8444. xorq %r8, %r15
  8445. xorq %r9, %rbx
  8446. rolq $28, %r12
  8447. rolq $20, %r13
  8448. rolq $3, %r14
  8449. rolq $45, %r15
  8450. rolq $61, %rbx
  8451. andnq %r15, %r14, %rbp
  8452. xorq %r13, %rbp
  8453. movq %rbp, -8(%rdi)
  8454. andnq %rbx, %r15, %rbp
  8455. xorq %r14, %rbp
  8456. movq %rbp, -72(%rdi)
  8457. andnq %r12, %rbx, %rbp
  8458. xorq %r15, %rbp
  8459. movq %rbp, 24(%rdi)
  8460. andnq %r13, %r12, %rbp
  8461. xorq %rbx, %rbp
  8462. movq %rbp, -40(%rdi)
  8463. andnq %r14, %r13, %rbp
  8464. xorq %r12, %rbp
  8465. movq %rbp, 96(%rdi)
  8466. # Row 2
  8467. movq 48(%rdi), %r12
  8468. movq -56(%rdi), %r13
  8469. movq 80(%rdi), %r14
  8470. movq 16(%rdi), %r15
  8471. movq -88(%rdi), %rbx
  8472. xorq %r8, %r12
  8473. xorq %r9, %r13
  8474. xorq %r10, %r14
  8475. xorq %r11, %r15
  8476. xorq %rax, %rbx
  8477. rolq $0x01, %r12
  8478. rolq $6, %r13
  8479. rolq $25, %r14
  8480. rolq $8, %r15
  8481. rolq $18, %rbx
  8482. andnq %r15, %r14, %rbp
  8483. xorq %r13, %rbp
  8484. movq %rbp, -56(%rdi)
  8485. andnq %rbx, %r15, %rbp
  8486. xorq %r14, %rbp
  8487. movq %rbp, 80(%rdi)
  8488. andnq %r12, %rbx, %rbp
  8489. xorq %r15, %rbp
  8490. movq %rbp, 16(%rdi)
  8491. andnq %r13, %r12, %rbp
  8492. xorq %rbx, %rbp
  8493. movq %rbp, -88(%rdi)
  8494. andnq %r14, %r13, %rbp
  8495. xorq %r12, %rbp
  8496. movq %rbp, 48(%rdi)
  8497. # Row 3
  8498. movq (%rdi), %r12
  8499. movq -64(%rdi), %r13
  8500. movq 32(%rdi), %r14
  8501. movq -32(%rdi), %r15
  8502. movq 64(%rdi), %rbx
  8503. xorq %r11, %r12
  8504. xorq %rax, %r13
  8505. xorq %r8, %r14
  8506. xorq %r9, %r15
  8507. xorq %r10, %rbx
  8508. rolq $27, %r12
  8509. rolq $36, %r13
  8510. rolq $10, %r14
  8511. rolq $15, %r15
  8512. rolq $56, %rbx
  8513. andnq %r15, %r14, %rbp
  8514. xorq %r13, %rbp
  8515. movq %rbp, -64(%rdi)
  8516. andnq %rbx, %r15, %rbp
  8517. xorq %r14, %rbp
  8518. movq %rbp, 32(%rdi)
  8519. andnq %r12, %rbx, %rbp
  8520. xorq %r15, %rbp
  8521. movq %rbp, -32(%rdi)
  8522. andnq %r13, %r12, %rbp
  8523. xorq %rbx, %rbp
  8524. movq %rbp, 64(%rdi)
  8525. andnq %r14, %r13, %rbp
  8526. xorq %r12, %rbp
  8527. movq %rbp, (%rdi)
  8528. # Row 4
  8529. xorq -48(%rdi), %r9
  8530. xorq 88(%rdi), %r10
  8531. xorq -16(%rdi), %r11
  8532. xorq -80(%rdi), %rax
  8533. xorq 56(%rdi), %r8
  8534. rorxq $2, %r9, %r12
  8535. rorxq $9, %r10, %r13
  8536. rorxq $25, %r11, %r14
  8537. rorxq $23, %rax, %r15
  8538. rorxq $62, %r8, %rbx
  8539. andnq %r14, %r13, %rax
  8540. andnq %r15, %r14, %r8
  8541. andnq %rbx, %r15, %r9
  8542. andnq %r12, %rbx, %r10
  8543. andnq %r13, %r12, %r11
  8544. xorq %rax, %r12
  8545. xorq %r8, %r13
  8546. xorq %r9, %r14
  8547. xorq %r10, %r15
  8548. xorq %r11, %rbx
  8549. movq %r12, -48(%rdi)
  8550. movq %r13, 88(%rdi)
  8551. movq %r14, -16(%rdi)
  8552. movq %r15, -80(%rdi)
  8553. movq %rbx, 56(%rdi)
  8554. # Round 20
  8555. xorq %rcx, %r12
  8556. xorq -88(%rdi), %rbx
  8557. xorq -72(%rdi), %r14
  8558. xorq -64(%rdi), %r13
  8559. xorq -56(%rdi), %r13
  8560. xorq -40(%rdi), %rbx
  8561. xorq -32(%rdi), %r15
  8562. xorq -24(%rdi), %r14
  8563. xorq -8(%rdi), %r13
  8564. xorq (%rdi), %r12
  8565. xorq 8(%rdi), %rbx
  8566. xorq 16(%rdi), %r15
  8567. xorq 24(%rdi), %r15
  8568. xorq 32(%rdi), %r14
  8569. xorq 40(%rdi), %r13
  8570. xorq 48(%rdi), %r12
  8571. xorq 64(%rdi), %rbx
  8572. xorq 72(%rdi), %r15
  8573. xorq 80(%rdi), %r14
  8574. xorq 96(%rdi), %r12
  8575. # Calc t[0..4]
  8576. rorxq $63, %r13, %rax
  8577. rorxq $63, %r14, %r8
  8578. rorxq $63, %r15, %r9
  8579. rorxq $63, %rbx, %r10
  8580. rorxq $63, %r12, %r11
  8581. xorq %rbx, %rax
  8582. xorq %r12, %r8
  8583. xorq %r13, %r9
  8584. xorq %r14, %r10
  8585. xorq %r15, %r11
  8586. # Row Mix
  8587. # Row 0
  8588. movq %rcx, %r12
  8589. movq -8(%rdi), %r13
  8590. movq 80(%rdi), %r14
  8591. movq -32(%rdi), %r15
  8592. movq 56(%rdi), %rbx
  8593. xorq %rax, %r12
  8594. xorq %r8, %r13
  8595. xorq %r9, %r14
  8596. xorq %r10, %r15
  8597. xorq %r11, %rbx
  8598. rolq $44, %r13
  8599. rolq $43, %r14
  8600. rolq $21, %r15
  8601. rolq $14, %rbx
  8602. andnq %r15, %r14, %rbp
  8603. xorq %r13, %rbp
  8604. movq %rbp, -8(%rdi)
  8605. andnq %rbx, %r15, %rbp
  8606. xorq %r14, %rbp
  8607. movq %rbp, 80(%rdi)
  8608. andnq %r12, %rbx, %rbp
  8609. xorq %r15, %rbp
  8610. movq %rbp, -32(%rdi)
  8611. andnq %r13, %r12, %rbp
  8612. xorq %rbx, %rbp
  8613. movq %rbp, 56(%rdi)
  8614. movq $0x8000000080008081, %rbx
  8615. andnq %r14, %r13, %rcx
  8616. xorq %r12, %rcx
  8617. # XOR in constant
  8618. xorq %rbx, %rcx
  8619. # Row 1
  8620. movq 72(%rdi), %r12
  8621. movq -40(%rdi), %r13
  8622. movq 48(%rdi), %r14
  8623. movq -64(%rdi), %r15
  8624. movq -16(%rdi), %rbx
  8625. xorq %r10, %r12
  8626. xorq %r11, %r13
  8627. xorq %rax, %r14
  8628. xorq %r8, %r15
  8629. xorq %r9, %rbx
  8630. rolq $28, %r12
  8631. rolq $20, %r13
  8632. rolq $3, %r14
  8633. rolq $45, %r15
  8634. rolq $61, %rbx
  8635. andnq %r15, %r14, %rbp
  8636. xorq %r13, %rbp
  8637. movq %rbp, -40(%rdi)
  8638. andnq %rbx, %r15, %rbp
  8639. xorq %r14, %rbp
  8640. movq %rbp, 48(%rdi)
  8641. andnq %r12, %rbx, %rbp
  8642. xorq %r15, %rbp
  8643. movq %rbp, -64(%rdi)
  8644. andnq %r13, %r12, %rbp
  8645. xorq %rbx, %rbp
  8646. movq %rbp, -16(%rdi)
  8647. andnq %r14, %r13, %rbp
  8648. xorq %r12, %rbp
  8649. movq %rbp, 72(%rdi)
  8650. # Row 2
  8651. movq 40(%rdi), %r12
  8652. movq -72(%rdi), %r13
  8653. movq 16(%rdi), %r14
  8654. movq 64(%rdi), %r15
  8655. movq -48(%rdi), %rbx
  8656. xorq %r8, %r12
  8657. xorq %r9, %r13
  8658. xorq %r10, %r14
  8659. xorq %r11, %r15
  8660. xorq %rax, %rbx
  8661. rolq $0x01, %r12
  8662. rolq $6, %r13
  8663. rolq $25, %r14
  8664. rolq $8, %r15
  8665. rolq $18, %rbx
  8666. andnq %r15, %r14, %rbp
  8667. xorq %r13, %rbp
  8668. movq %rbp, -72(%rdi)
  8669. andnq %rbx, %r15, %rbp
  8670. xorq %r14, %rbp
  8671. movq %rbp, 16(%rdi)
  8672. andnq %r12, %rbx, %rbp
  8673. xorq %r15, %rbp
  8674. movq %rbp, 64(%rdi)
  8675. andnq %r13, %r12, %rbp
  8676. xorq %rbx, %rbp
  8677. movq %rbp, -48(%rdi)
  8678. andnq %r14, %r13, %rbp
  8679. xorq %r12, %rbp
  8680. movq %rbp, 40(%rdi)
  8681. # Row 3
  8682. movq 8(%rdi), %r12
  8683. movq 96(%rdi), %r13
  8684. movq -56(%rdi), %r14
  8685. movq 32(%rdi), %r15
  8686. movq -80(%rdi), %rbx
  8687. xorq %r11, %r12
  8688. xorq %rax, %r13
  8689. xorq %r8, %r14
  8690. xorq %r9, %r15
  8691. xorq %r10, %rbx
  8692. rolq $27, %r12
  8693. rolq $36, %r13
  8694. rolq $10, %r14
  8695. rolq $15, %r15
  8696. rolq $56, %rbx
  8697. andnq %r15, %r14, %rbp
  8698. xorq %r13, %rbp
  8699. movq %rbp, 96(%rdi)
  8700. andnq %rbx, %r15, %rbp
  8701. xorq %r14, %rbp
  8702. movq %rbp, -56(%rdi)
  8703. andnq %r12, %rbx, %rbp
  8704. xorq %r15, %rbp
  8705. movq %rbp, 32(%rdi)
  8706. andnq %r13, %r12, %rbp
  8707. xorq %rbx, %rbp
  8708. movq %rbp, -80(%rdi)
  8709. andnq %r14, %r13, %rbp
  8710. xorq %r12, %rbp
  8711. movq %rbp, 8(%rdi)
  8712. # Row 4
  8713. xorq -24(%rdi), %r9
  8714. xorq 24(%rdi), %r10
  8715. xorq -88(%rdi), %r11
  8716. xorq (%rdi), %rax
  8717. xorq 88(%rdi), %r8
  8718. rorxq $2, %r9, %r12
  8719. rorxq $9, %r10, %r13
  8720. rorxq $25, %r11, %r14
  8721. rorxq $23, %rax, %r15
  8722. rorxq $62, %r8, %rbx
  8723. andnq %r14, %r13, %rax
  8724. andnq %r15, %r14, %r8
  8725. andnq %rbx, %r15, %r9
  8726. andnq %r12, %rbx, %r10
  8727. andnq %r13, %r12, %r11
  8728. xorq %rax, %r12
  8729. xorq %r8, %r13
  8730. xorq %r9, %r14
  8731. xorq %r10, %r15
  8732. xorq %r11, %rbx
  8733. movq %r12, -24(%rdi)
  8734. movq %r13, 24(%rdi)
  8735. movq %r14, -88(%rdi)
  8736. movq %r15, (%rdi)
  8737. movq %rbx, 88(%rdi)
  8738. # Round 21
  8739. xorq %rcx, %r12
  8740. xorq -80(%rdi), %rbx
  8741. xorq -72(%rdi), %r13
  8742. xorq -64(%rdi), %r15
  8743. xorq -56(%rdi), %r14
  8744. xorq -48(%rdi), %rbx
  8745. xorq -40(%rdi), %r13
  8746. xorq -32(%rdi), %r15
  8747. xorq -16(%rdi), %rbx
  8748. xorq -8(%rdi), %r13
  8749. xorq 8(%rdi), %r12
  8750. xorq 16(%rdi), %r14
  8751. xorq 32(%rdi), %r15
  8752. xorq 40(%rdi), %r12
  8753. xorq 48(%rdi), %r14
  8754. xorq 56(%rdi), %rbx
  8755. xorq 64(%rdi), %r15
  8756. xorq 72(%rdi), %r12
  8757. xorq 80(%rdi), %r14
  8758. xorq 96(%rdi), %r13
  8759. # Calc t[0..4]
  8760. rorxq $63, %r13, %rax
  8761. rorxq $63, %r14, %r8
  8762. rorxq $63, %r15, %r9
  8763. rorxq $63, %rbx, %r10
  8764. rorxq $63, %r12, %r11
  8765. xorq %rbx, %rax
  8766. xorq %r12, %r8
  8767. xorq %r13, %r9
  8768. xorq %r14, %r10
  8769. xorq %r15, %r11
  8770. # Row Mix
  8771. # Row 0
  8772. movq %rcx, %r12
  8773. movq -40(%rdi), %r13
  8774. movq 16(%rdi), %r14
  8775. movq 32(%rdi), %r15
  8776. movq 88(%rdi), %rbx
  8777. xorq %rax, %r12
  8778. xorq %r8, %r13
  8779. xorq %r9, %r14
  8780. xorq %r10, %r15
  8781. xorq %r11, %rbx
  8782. rolq $44, %r13
  8783. rolq $43, %r14
  8784. rolq $21, %r15
  8785. rolq $14, %rbx
  8786. andnq %r15, %r14, %rbp
  8787. xorq %r13, %rbp
  8788. movq %rbp, -40(%rdi)
  8789. andnq %rbx, %r15, %rbp
  8790. xorq %r14, %rbp
  8791. movq %rbp, 16(%rdi)
  8792. andnq %r12, %rbx, %rbp
  8793. xorq %r15, %rbp
  8794. movq %rbp, 32(%rdi)
  8795. andnq %r13, %r12, %rbp
  8796. xorq %rbx, %rbp
  8797. movq %rbp, 88(%rdi)
  8798. movq $0x8000000000008080, %rbx
  8799. andnq %r14, %r13, %rcx
  8800. xorq %r12, %rcx
  8801. # XOR in constant
  8802. xorq %rbx, %rcx
  8803. # Row 1
  8804. movq -32(%rdi), %r12
  8805. movq -16(%rdi), %r13
  8806. movq 40(%rdi), %r14
  8807. movq 96(%rdi), %r15
  8808. movq -88(%rdi), %rbx
  8809. xorq %r10, %r12
  8810. xorq %r11, %r13
  8811. xorq %rax, %r14
  8812. xorq %r8, %r15
  8813. xorq %r9, %rbx
  8814. rolq $28, %r12
  8815. rolq $20, %r13
  8816. rolq $3, %r14
  8817. rolq $45, %r15
  8818. rolq $61, %rbx
  8819. andnq %r15, %r14, %rbp
  8820. xorq %r13, %rbp
  8821. movq %rbp, -16(%rdi)
  8822. andnq %rbx, %r15, %rbp
  8823. xorq %r14, %rbp
  8824. movq %rbp, 40(%rdi)
  8825. andnq %r12, %rbx, %rbp
  8826. xorq %r15, %rbp
  8827. movq %rbp, 96(%rdi)
  8828. andnq %r13, %r12, %rbp
  8829. xorq %rbx, %rbp
  8830. movq %rbp, -88(%rdi)
  8831. andnq %r14, %r13, %rbp
  8832. xorq %r12, %rbp
  8833. movq %rbp, -32(%rdi)
  8834. # Row 2
  8835. movq -8(%rdi), %r12
  8836. movq 48(%rdi), %r13
  8837. movq 64(%rdi), %r14
  8838. movq -80(%rdi), %r15
  8839. movq -24(%rdi), %rbx
  8840. xorq %r8, %r12
  8841. xorq %r9, %r13
  8842. xorq %r10, %r14
  8843. xorq %r11, %r15
  8844. xorq %rax, %rbx
  8845. rolq $0x01, %r12
  8846. rolq $6, %r13
  8847. rolq $25, %r14
  8848. rolq $8, %r15
  8849. rolq $18, %rbx
  8850. andnq %r15, %r14, %rbp
  8851. xorq %r13, %rbp
  8852. movq %rbp, 48(%rdi)
  8853. andnq %rbx, %r15, %rbp
  8854. xorq %r14, %rbp
  8855. movq %rbp, 64(%rdi)
  8856. andnq %r12, %rbx, %rbp
  8857. xorq %r15, %rbp
  8858. movq %rbp, -80(%rdi)
  8859. andnq %r13, %r12, %rbp
  8860. xorq %rbx, %rbp
  8861. movq %rbp, -24(%rdi)
  8862. andnq %r14, %r13, %rbp
  8863. xorq %r12, %rbp
  8864. movq %rbp, -8(%rdi)
  8865. # Row 3
  8866. movq 56(%rdi), %r12
  8867. movq 72(%rdi), %r13
  8868. movq -72(%rdi), %r14
  8869. movq -56(%rdi), %r15
  8870. movq (%rdi), %rbx
  8871. xorq %r11, %r12
  8872. xorq %rax, %r13
  8873. xorq %r8, %r14
  8874. xorq %r9, %r15
  8875. xorq %r10, %rbx
  8876. rolq $27, %r12
  8877. rolq $36, %r13
  8878. rolq $10, %r14
  8879. rolq $15, %r15
  8880. rolq $56, %rbx
  8881. andnq %r15, %r14, %rbp
  8882. xorq %r13, %rbp
  8883. movq %rbp, 72(%rdi)
  8884. andnq %rbx, %r15, %rbp
  8885. xorq %r14, %rbp
  8886. movq %rbp, -72(%rdi)
  8887. andnq %r12, %rbx, %rbp
  8888. xorq %r15, %rbp
  8889. movq %rbp, -56(%rdi)
  8890. andnq %r13, %r12, %rbp
  8891. xorq %rbx, %rbp
  8892. movq %rbp, (%rdi)
  8893. andnq %r14, %r13, %rbp
  8894. xorq %r12, %rbp
  8895. movq %rbp, 56(%rdi)
  8896. # Row 4
  8897. xorq 80(%rdi), %r9
  8898. xorq -64(%rdi), %r10
  8899. xorq -48(%rdi), %r11
  8900. xorq 8(%rdi), %rax
  8901. xorq 24(%rdi), %r8
  8902. rorxq $2, %r9, %r12
  8903. rorxq $9, %r10, %r13
  8904. rorxq $25, %r11, %r14
  8905. rorxq $23, %rax, %r15
  8906. rorxq $62, %r8, %rbx
  8907. andnq %r14, %r13, %rax
  8908. andnq %r15, %r14, %r8
  8909. andnq %rbx, %r15, %r9
  8910. andnq %r12, %rbx, %r10
  8911. andnq %r13, %r12, %r11
  8912. xorq %rax, %r12
  8913. xorq %r8, %r13
  8914. xorq %r9, %r14
  8915. xorq %r10, %r15
  8916. xorq %r11, %rbx
  8917. movq %r12, 80(%rdi)
  8918. movq %r13, -64(%rdi)
  8919. movq %r14, -48(%rdi)
  8920. movq %r15, 8(%rdi)
  8921. movq %rbx, 24(%rdi)
  8922. # Round 22
  8923. xorq %rcx, %r12
  8924. xorq -88(%rdi), %rbx
  8925. xorq -80(%rdi), %r15
  8926. xorq -72(%rdi), %r14
  8927. xorq -56(%rdi), %r15
  8928. xorq -40(%rdi), %r13
  8929. xorq -32(%rdi), %r12
  8930. xorq -24(%rdi), %rbx
  8931. xorq -16(%rdi), %r13
  8932. xorq -8(%rdi), %r12
  8933. xorq (%rdi), %rbx
  8934. xorq 16(%rdi), %r14
  8935. xorq 32(%rdi), %r15
  8936. xorq 40(%rdi), %r14
  8937. xorq 48(%rdi), %r13
  8938. xorq 56(%rdi), %r12
  8939. xorq 64(%rdi), %r14
  8940. xorq 72(%rdi), %r13
  8941. xorq 88(%rdi), %rbx
  8942. xorq 96(%rdi), %r15
  8943. # Calc t[0..4]
  8944. rorxq $63, %r13, %rax
  8945. rorxq $63, %r14, %r8
  8946. rorxq $63, %r15, %r9
  8947. rorxq $63, %rbx, %r10
  8948. rorxq $63, %r12, %r11
  8949. xorq %rbx, %rax
  8950. xorq %r12, %r8
  8951. xorq %r13, %r9
  8952. xorq %r14, %r10
  8953. xorq %r15, %r11
  8954. # Row Mix
  8955. # Row 0
  8956. movq %rcx, %r12
  8957. movq -16(%rdi), %r13
  8958. movq 64(%rdi), %r14
  8959. movq -56(%rdi), %r15
  8960. movq 24(%rdi), %rbx
  8961. xorq %rax, %r12
  8962. xorq %r8, %r13
  8963. xorq %r9, %r14
  8964. xorq %r10, %r15
  8965. xorq %r11, %rbx
  8966. rolq $44, %r13
  8967. rolq $43, %r14
  8968. rolq $21, %r15
  8969. rolq $14, %rbx
  8970. andnq %r15, %r14, %rbp
  8971. xorq %r13, %rbp
  8972. movq %rbp, -16(%rdi)
  8973. andnq %rbx, %r15, %rbp
  8974. xorq %r14, %rbp
  8975. movq %rbp, 64(%rdi)
  8976. andnq %r12, %rbx, %rbp
  8977. xorq %r15, %rbp
  8978. movq %rbp, -56(%rdi)
  8979. andnq %r13, %r12, %rbp
  8980. xorq %rbx, %rbp
  8981. movq %rbp, 24(%rdi)
  8982. movq $0x80000001, %rbx
  8983. andnq %r14, %r13, %rcx
  8984. xorq %r12, %rcx
  8985. # XOR in constant
  8986. xorq %rbx, %rcx
  8987. # Row 1
  8988. movq 32(%rdi), %r12
  8989. movq -88(%rdi), %r13
  8990. movq -8(%rdi), %r14
  8991. movq 72(%rdi), %r15
  8992. movq -48(%rdi), %rbx
  8993. xorq %r10, %r12
  8994. xorq %r11, %r13
  8995. xorq %rax, %r14
  8996. xorq %r8, %r15
  8997. xorq %r9, %rbx
  8998. rolq $28, %r12
  8999. rolq $20, %r13
  9000. rolq $3, %r14
  9001. rolq $45, %r15
  9002. rolq $61, %rbx
  9003. andnq %r15, %r14, %rbp
  9004. xorq %r13, %rbp
  9005. movq %rbp, -88(%rdi)
  9006. andnq %rbx, %r15, %rbp
  9007. xorq %r14, %rbp
  9008. movq %rbp, -8(%rdi)
  9009. andnq %r12, %rbx, %rbp
  9010. xorq %r15, %rbp
  9011. movq %rbp, 72(%rdi)
  9012. andnq %r13, %r12, %rbp
  9013. xorq %rbx, %rbp
  9014. movq %rbp, -48(%rdi)
  9015. andnq %r14, %r13, %rbp
  9016. xorq %r12, %rbp
  9017. movq %rbp, 32(%rdi)
  9018. # Row 2
  9019. movq -40(%rdi), %r12
  9020. movq 40(%rdi), %r13
  9021. movq -80(%rdi), %r14
  9022. movq (%rdi), %r15
  9023. movq 80(%rdi), %rbx
  9024. xorq %r8, %r12
  9025. xorq %r9, %r13
  9026. xorq %r10, %r14
  9027. xorq %r11, %r15
  9028. xorq %rax, %rbx
  9029. rolq $0x01, %r12
  9030. rolq $6, %r13
  9031. rolq $25, %r14
  9032. rolq $8, %r15
  9033. rolq $18, %rbx
  9034. andnq %r15, %r14, %rbp
  9035. xorq %r13, %rbp
  9036. movq %rbp, 40(%rdi)
  9037. andnq %rbx, %r15, %rbp
  9038. xorq %r14, %rbp
  9039. movq %rbp, -80(%rdi)
  9040. andnq %r12, %rbx, %rbp
  9041. xorq %r15, %rbp
  9042. movq %rbp, (%rdi)
  9043. andnq %r13, %r12, %rbp
  9044. xorq %rbx, %rbp
  9045. movq %rbp, 80(%rdi)
  9046. andnq %r14, %r13, %rbp
  9047. xorq %r12, %rbp
  9048. movq %rbp, -40(%rdi)
  9049. # Row 3
  9050. movq 88(%rdi), %r12
  9051. movq -32(%rdi), %r13
  9052. movq 48(%rdi), %r14
  9053. movq -72(%rdi), %r15
  9054. movq 8(%rdi), %rbx
  9055. xorq %r11, %r12
  9056. xorq %rax, %r13
  9057. xorq %r8, %r14
  9058. xorq %r9, %r15
  9059. xorq %r10, %rbx
  9060. rolq $27, %r12
  9061. rolq $36, %r13
  9062. rolq $10, %r14
  9063. rolq $15, %r15
  9064. rolq $56, %rbx
  9065. andnq %r15, %r14, %rbp
  9066. xorq %r13, %rbp
  9067. movq %rbp, -32(%rdi)
  9068. andnq %rbx, %r15, %rbp
  9069. xorq %r14, %rbp
  9070. movq %rbp, 48(%rdi)
  9071. andnq %r12, %rbx, %rbp
  9072. xorq %r15, %rbp
  9073. movq %rbp, -72(%rdi)
  9074. andnq %r13, %r12, %rbp
  9075. xorq %rbx, %rbp
  9076. movq %rbp, 8(%rdi)
  9077. andnq %r14, %r13, %rbp
  9078. xorq %r12, %rbp
  9079. movq %rbp, 88(%rdi)
  9080. # Row 4
  9081. xorq 16(%rdi), %r9
  9082. xorq 96(%rdi), %r10
  9083. xorq -24(%rdi), %r11
  9084. xorq 56(%rdi), %rax
  9085. xorq -64(%rdi), %r8
  9086. rorxq $2, %r9, %r12
  9087. rorxq $9, %r10, %r13
  9088. rorxq $25, %r11, %r14
  9089. rorxq $23, %rax, %r15
  9090. rorxq $62, %r8, %rbx
  9091. andnq %r14, %r13, %rax
  9092. andnq %r15, %r14, %r8
  9093. andnq %rbx, %r15, %r9
  9094. andnq %r12, %rbx, %r10
  9095. andnq %r13, %r12, %r11
  9096. xorq %rax, %r12
  9097. xorq %r8, %r13
  9098. xorq %r9, %r14
  9099. xorq %r10, %r15
  9100. xorq %r11, %rbx
  9101. movq %r12, 16(%rdi)
  9102. movq %r13, 96(%rdi)
  9103. movq %r14, -24(%rdi)
  9104. movq %r15, 56(%rdi)
  9105. movq %rbx, -64(%rdi)
  9106. # Round 23
  9107. xorq %rcx, %r12
  9108. xorq -88(%rdi), %r13
  9109. xorq -80(%rdi), %r14
  9110. xorq -72(%rdi), %r15
  9111. xorq -56(%rdi), %r15
  9112. xorq -48(%rdi), %rbx
  9113. xorq -40(%rdi), %r12
  9114. xorq -32(%rdi), %r13
  9115. xorq -16(%rdi), %r13
  9116. xorq -8(%rdi), %r14
  9117. xorq (%rdi), %r15
  9118. xorq 8(%rdi), %rbx
  9119. xorq 24(%rdi), %rbx
  9120. xorq 32(%rdi), %r12
  9121. xorq 40(%rdi), %r13
  9122. xorq 48(%rdi), %r14
  9123. xorq 64(%rdi), %r14
  9124. xorq 72(%rdi), %r15
  9125. xorq 80(%rdi), %rbx
  9126. xorq 88(%rdi), %r12
  9127. # Calc t[0..4]
  9128. rorxq $63, %r13, %rax
  9129. rorxq $63, %r14, %r8
  9130. rorxq $63, %r15, %r9
  9131. rorxq $63, %rbx, %r10
  9132. rorxq $63, %r12, %r11
  9133. xorq %rbx, %rax
  9134. xorq %r12, %r8
  9135. xorq %r13, %r9
  9136. xorq %r14, %r10
  9137. xorq %r15, %r11
  9138. # Row Mix
  9139. # Row 0
  9140. movq %rcx, %r12
  9141. movq -88(%rdi), %r13
  9142. movq -80(%rdi), %r14
  9143. movq -72(%rdi), %r15
  9144. movq -64(%rdi), %rbx
  9145. xorq %rax, %r12
  9146. xorq %r8, %r13
  9147. xorq %r9, %r14
  9148. xorq %r10, %r15
  9149. xorq %r11, %rbx
  9150. rolq $44, %r13
  9151. rolq $43, %r14
  9152. rolq $21, %r15
  9153. rolq $14, %rbx
  9154. andnq %r15, %r14, %rbp
  9155. xorq %r13, %rbp
  9156. movq %rbp, -88(%rdi)
  9157. andnq %rbx, %r15, %rbp
  9158. xorq %r14, %rbp
  9159. movq %rbp, -80(%rdi)
  9160. andnq %r12, %rbx, %rbp
  9161. xorq %r15, %rbp
  9162. movq %rbp, -72(%rdi)
  9163. andnq %r13, %r12, %rbp
  9164. xorq %rbx, %rbp
  9165. movq %rbp, -64(%rdi)
  9166. movq $0x8000000080008008, %rbx
  9167. andnq %r14, %r13, %rcx
  9168. xorq %r12, %rcx
  9169. # XOR in constant
  9170. xorq %rbx, %rcx
  9171. # Row 1
  9172. movq -56(%rdi), %r12
  9173. movq -48(%rdi), %r13
  9174. movq -40(%rdi), %r14
  9175. movq -32(%rdi), %r15
  9176. movq -24(%rdi), %rbx
  9177. xorq %r10, %r12
  9178. xorq %r11, %r13
  9179. xorq %rax, %r14
  9180. xorq %r8, %r15
  9181. xorq %r9, %rbx
  9182. rolq $28, %r12
  9183. rolq $20, %r13
  9184. rolq $3, %r14
  9185. rolq $45, %r15
  9186. rolq $61, %rbx
  9187. andnq %r15, %r14, %rbp
  9188. xorq %r13, %rbp
  9189. movq %rbp, -48(%rdi)
  9190. andnq %rbx, %r15, %rbp
  9191. xorq %r14, %rbp
  9192. movq %rbp, -40(%rdi)
  9193. andnq %r12, %rbx, %rbp
  9194. xorq %r15, %rbp
  9195. movq %rbp, -32(%rdi)
  9196. andnq %r13, %r12, %rbp
  9197. xorq %rbx, %rbp
  9198. movq %rbp, -24(%rdi)
  9199. andnq %r14, %r13, %rbp
  9200. xorq %r12, %rbp
  9201. movq %rbp, -56(%rdi)
  9202. # Row 2
  9203. movq -16(%rdi), %r12
  9204. movq -8(%rdi), %r13
  9205. movq (%rdi), %r14
  9206. movq 8(%rdi), %r15
  9207. movq 16(%rdi), %rbx
  9208. xorq %r8, %r12
  9209. xorq %r9, %r13
  9210. xorq %r10, %r14
  9211. xorq %r11, %r15
  9212. xorq %rax, %rbx
  9213. rolq $0x01, %r12
  9214. rolq $6, %r13
  9215. rolq $25, %r14
  9216. rolq $8, %r15
  9217. rolq $18, %rbx
  9218. andnq %r15, %r14, %rbp
  9219. xorq %r13, %rbp
  9220. movq %rbp, -8(%rdi)
  9221. andnq %rbx, %r15, %rbp
  9222. xorq %r14, %rbp
  9223. movq %rbp, (%rdi)
  9224. andnq %r12, %rbx, %rbp
  9225. xorq %r15, %rbp
  9226. movq %rbp, 8(%rdi)
  9227. andnq %r13, %r12, %rbp
  9228. xorq %rbx, %rbp
  9229. movq %rbp, 16(%rdi)
  9230. andnq %r14, %r13, %rbp
  9231. xorq %r12, %rbp
  9232. movq %rbp, -16(%rdi)
  9233. # Row 3
  9234. movq 24(%rdi), %r12
  9235. movq 32(%rdi), %r13
  9236. movq 40(%rdi), %r14
  9237. movq 48(%rdi), %r15
  9238. movq 56(%rdi), %rbx
  9239. xorq %r11, %r12
  9240. xorq %rax, %r13
  9241. xorq %r8, %r14
  9242. xorq %r9, %r15
  9243. xorq %r10, %rbx
  9244. rolq $27, %r12
  9245. rolq $36, %r13
  9246. rolq $10, %r14
  9247. rolq $15, %r15
  9248. rolq $56, %rbx
  9249. andnq %r15, %r14, %rbp
  9250. xorq %r13, %rbp
  9251. movq %rbp, 32(%rdi)
  9252. andnq %rbx, %r15, %rbp
  9253. xorq %r14, %rbp
  9254. movq %rbp, 40(%rdi)
  9255. andnq %r12, %rbx, %rbp
  9256. xorq %r15, %rbp
  9257. movq %rbp, 48(%rdi)
  9258. andnq %r13, %r12, %rbp
  9259. xorq %rbx, %rbp
  9260. movq %rbp, 56(%rdi)
  9261. andnq %r14, %r13, %rbp
  9262. xorq %r12, %rbp
  9263. movq %rbp, 24(%rdi)
  9264. # Row 4
  9265. xorq 64(%rdi), %r9
  9266. xorq 72(%rdi), %r10
  9267. xorq 80(%rdi), %r11
  9268. xorq 88(%rdi), %rax
  9269. xorq 96(%rdi), %r8
  9270. rorxq $2, %r9, %r12
  9271. rorxq $9, %r10, %r13
  9272. rorxq $25, %r11, %r14
  9273. rorxq $23, %rax, %r15
  9274. rorxq $62, %r8, %rbx
  9275. andnq %r14, %r13, %rax
  9276. andnq %r15, %r14, %r8
  9277. andnq %rbx, %r15, %r9
  9278. andnq %r12, %rbx, %r10
  9279. andnq %r13, %r12, %r11
  9280. xorq %rax, %r12
  9281. xorq %r8, %r13
  9282. xorq %r9, %r14
  9283. xorq %r10, %r15
  9284. xorq %r11, %rbx
  9285. movq %r12, 64(%rdi)
  9286. movq %r13, 72(%rdi)
  9287. movq %r14, 80(%rdi)
  9288. movq %r15, 88(%rdi)
  9289. movq %rbx, 96(%rdi)
  9290. addq (%rsp), %rsi
  9291. subl $0x01, %edx
  9292. movq (%rsp), %rbp
  9293. jg L_sha3_block_n_bmi2_start
  9294. movq %rcx, -96(%rdi)
  9295. popq %rbp
  9296. popq %rbp
  9297. popq %rbx
  9298. popq %r15
  9299. popq %r14
  9300. popq %r13
  9301. popq %r12
  9302. repz retq
  9303. #ifndef __APPLE__
  9304. .size sha3_block_n_bmi2,.-sha3_block_n_bmi2
  9305. #endif /* __APPLE__ */
  9306. #ifndef __APPLE__
  9307. .data
  9308. #else
  9309. .section __DATA,__data
  9310. #endif /* __APPLE__ */
  9311. #ifndef __APPLE__
  9312. .align 16
  9313. #else
  9314. .p2align 4
  9315. #endif /* __APPLE__ */
  9316. L_sha3_block_avx2_rotl:
  9317. .quad 0x1,0x3e
  9318. .quad 0x1c,0x1b
  9319. .quad 0x2c,0x6
  9320. .quad 0x37,0x14
  9321. .quad 0xa,0x2b
  9322. .quad 0x19,0x27
  9323. .quad 0x2d,0xf
  9324. .quad 0x15,0x8
  9325. .quad 0x24,0x3
  9326. .quad 0x29,0x12
  9327. .quad 0x2,0x3d
  9328. .quad 0x38,0xe
  9329. #ifndef __APPLE__
  9330. .data
  9331. #else
  9332. .section __DATA,__data
  9333. #endif /* __APPLE__ */
  9334. #ifndef __APPLE__
  9335. .align 16
  9336. #else
  9337. .p2align 4
  9338. #endif /* __APPLE__ */
  9339. L_sha3_block_avx2_rotr:
  9340. .quad 0x3f,0x2
  9341. .quad 0x24,0x25
  9342. .quad 0x14,0x3a
  9343. .quad 0x9,0x2c
  9344. .quad 0x36,0x15
  9345. .quad 0x27,0x19
  9346. .quad 0x13,0x31
  9347. .quad 0x2b,0x38
  9348. .quad 0x1c,0x3d
  9349. .quad 0x17,0x2e
  9350. .quad 0x3e,0x3
  9351. .quad 0x8,0x32
  9352. #ifndef __APPLE__
  9353. .text
  9354. .globl sha3_block_avx2
  9355. .type sha3_block_avx2,@function
  9356. .align 16
  9357. sha3_block_avx2:
  9358. #else
  9359. .section __TEXT,__text
  9360. .globl _sha3_block_avx2
  9361. .p2align 4
  9362. _sha3_block_avx2:
  9363. #endif /* __APPLE__ */
  9364. leaq L_sha3_avx2_r(%rip), %rdx
  9365. leaq L_sha3_block_avx2_rotl(%rip), %rax
  9366. addq $0x40, %rax
  9367. leaq L_sha3_block_avx2_rotr(%rip), %rcx
  9368. addq $0x40, %rcx
  9369. movq $24, %r8
  9370. vpbroadcastq (%rdi), %ymm0
  9371. vmovdqu 8(%rdi), %ymm1
  9372. vmovdqu 40(%rdi), %ymm2
  9373. vmovdqu 72(%rdi), %ymm3
  9374. vmovdqu 104(%rdi), %ymm4
  9375. vmovdqu 136(%rdi), %ymm5
  9376. vmovdqu 168(%rdi), %ymm6
  9377. vpermq $57, %ymm2, %ymm7
  9378. vpermq $30, %ymm3, %ymm8
  9379. vpermq $0x4b, %ymm4, %ymm9
  9380. vpermq $0x93, %ymm5, %ymm10
  9381. vpblendd $12, %ymm3, %ymm2, %ymm11
  9382. vpblendd $0xc0, %ymm5, %ymm4, %ymm12
  9383. vpblendd $0xc0, %ymm8, %ymm7, %ymm2
  9384. vpblendd $0xf0, %ymm9, %ymm8, %ymm3
  9385. vpblendd $3, %ymm9, %ymm10, %ymm4
  9386. vpblendd $0xf0, %ymm12, %ymm11, %ymm5
  9387. L_sha3_block_avx2_start:
  9388. # Calc b[0..4]
  9389. vpshufd $0xee, %ymm5, %ymm7
  9390. vpxor %ymm7, %ymm5, %ymm14
  9391. vpxor %ymm2, %ymm1, %ymm15
  9392. vpermq $0xaa, %ymm14, %ymm7
  9393. vpxor %ymm0, %ymm14, %ymm14
  9394. vpxor %ymm4, %ymm3, %ymm12
  9395. vpxor %ymm7, %ymm14, %ymm14
  9396. vpermq $0x00, %ymm14, %ymm14
  9397. vpxor %ymm6, %ymm15, %ymm15
  9398. vpxor %ymm12, %ymm15, %ymm15
  9399. # XOR in b[x+4]
  9400. vpermq $0x93, %ymm15, %ymm7
  9401. vpermq $57, %ymm15, %ymm9
  9402. vpermq $0xff, %ymm15, %ymm8
  9403. vpermq $0x00, %ymm15, %ymm10
  9404. vpblendd $3, %ymm14, %ymm7, %ymm7
  9405. vpblendd $0xc0, %ymm14, %ymm9, %ymm9
  9406. vpxor %ymm8, %ymm0, %ymm0
  9407. vpxor %ymm7, %ymm1, %ymm1
  9408. vpxor %ymm7, %ymm2, %ymm2
  9409. vpxor %ymm7, %ymm3, %ymm3
  9410. vpxor %ymm7, %ymm4, %ymm4
  9411. vpxor %ymm8, %ymm5, %ymm5
  9412. vpxor %ymm7, %ymm6, %ymm6
  9413. # Rotate left 1
  9414. vpsrlq $63, %ymm9, %ymm7
  9415. vpsrlq $63, %ymm10, %ymm8
  9416. vpaddq %ymm9, %ymm9, %ymm9
  9417. vpaddq %ymm10, %ymm10, %ymm10
  9418. vpor %ymm7, %ymm9, %ymm9
  9419. vpor %ymm8, %ymm10, %ymm10
  9420. # XOR in ROTL64(b[x+1])
  9421. vpxor %ymm10, %ymm0, %ymm0
  9422. vpxor %ymm9, %ymm1, %ymm1
  9423. vpxor %ymm9, %ymm2, %ymm2
  9424. vpxor %ymm9, %ymm3, %ymm3
  9425. vpxor %ymm9, %ymm4, %ymm4
  9426. vpxor %ymm10, %ymm5, %ymm5
  9427. vpxor %ymm9, %ymm6, %ymm6
  9428. # Shuffle - Rotate
  9429. vpsrlvq -64(%rcx), %ymm1, %ymm8
  9430. vpsrlvq -32(%rcx), %ymm2, %ymm9
  9431. vpsrlvq (%rcx), %ymm3, %ymm10
  9432. vpsrlvq 32(%rcx), %ymm4, %ymm11
  9433. vpsrlvq 64(%rcx), %ymm5, %ymm12
  9434. vpsrlvq 96(%rcx), %ymm6, %ymm13
  9435. vpsllvq -64(%rax), %ymm1, %ymm1
  9436. vpsllvq -32(%rax), %ymm2, %ymm2
  9437. vpsllvq (%rax), %ymm3, %ymm3
  9438. vpsllvq 32(%rax), %ymm4, %ymm4
  9439. vpsllvq 64(%rax), %ymm5, %ymm5
  9440. vpsllvq 96(%rax), %ymm6, %ymm6
  9441. vpor %ymm8, %ymm1, %ymm1
  9442. vpor %ymm9, %ymm2, %ymm2
  9443. vpor %ymm10, %ymm3, %ymm3
  9444. vpor %ymm11, %ymm4, %ymm4
  9445. vpor %ymm12, %ymm5, %ymm5
  9446. vpor %ymm13, %ymm6, %ymm6
  9447. # Row Mix
  9448. vpermq $0x00, %ymm2, %ymm12
  9449. vpermq $0x55, %ymm3, %ymm13
  9450. vpermq $0xaa, %ymm4, %ymm14
  9451. vpermq $0xff, %ymm6, %ymm15
  9452. vpandn %ymm14, %ymm13, %ymm7
  9453. vpandn %ymm15, %ymm14, %ymm8
  9454. vpandn %ymm0, %ymm15, %ymm9
  9455. vpandn %ymm12, %ymm0, %ymm10
  9456. vpandn %ymm13, %ymm12, %ymm11
  9457. vpxor %ymm7, %ymm12, %ymm12
  9458. vpxor %ymm8, %ymm13, %ymm13
  9459. vpxor %ymm9, %ymm14, %ymm14
  9460. vpxor %ymm10, %ymm15, %ymm15
  9461. vpxor %ymm11, %ymm0, %ymm0
  9462. vpermq $0x8d, %ymm5, %ymm7
  9463. vpblendd $12, %ymm13, %ymm12, %ymm10
  9464. vpermq $0x72, %ymm1, %ymm11
  9465. vpblendd $0xc0, %ymm15, %ymm14, %ymm9
  9466. vpermq $0x87, %ymm2, %ymm12
  9467. vpblendd $0xf0, %ymm9, %ymm10, %ymm1
  9468. vpermq $0xc9, %ymm3, %ymm13
  9469. vpermq $0x9c, %ymm4, %ymm14
  9470. vpermq $45, %ymm6, %ymm15
  9471. vpblendd $48, %ymm7, %ymm12, %ymm12
  9472. vpblendd $3, %ymm7, %ymm13, %ymm13
  9473. vpblendd $0xc0, %ymm7, %ymm14, %ymm14
  9474. vpblendd $12, %ymm7, %ymm15, %ymm15
  9475. vpandn %ymm13, %ymm12, %ymm5
  9476. vpandn %ymm14, %ymm13, %ymm7
  9477. vpandn %ymm15, %ymm14, %ymm2
  9478. vpandn %ymm11, %ymm15, %ymm3
  9479. vpandn %ymm12, %ymm11, %ymm4
  9480. vpxor %ymm5, %ymm11, %ymm5
  9481. vpxor %ymm7, %ymm12, %ymm12
  9482. vpxor %ymm2, %ymm13, %ymm13
  9483. vpxor %ymm3, %ymm14, %ymm14
  9484. vpxor %ymm4, %ymm15, %ymm15
  9485. vpunpcklqdq %ymm13, %ymm12, %ymm2
  9486. vpunpckhqdq %ymm13, %ymm12, %ymm3
  9487. vpunpcklqdq %ymm15, %ymm14, %ymm7
  9488. vpunpckhqdq %ymm15, %ymm14, %ymm8
  9489. vperm2i128 $49, %ymm7, %ymm2, %ymm4
  9490. vperm2i128 $49, %ymm8, %ymm3, %ymm6
  9491. vperm2i128 $32, %ymm7, %ymm2, %ymm2
  9492. vperm2i128 $32, %ymm8, %ymm3, %ymm3
  9493. vpxor (%rdx), %ymm0, %ymm0
  9494. addq $32, %rdx
  9495. subq $0x01, %r8
  9496. jnz L_sha3_block_avx2_start
  9497. vpermq $0x93, %ymm2, %ymm7
  9498. vpermq $0x4e, %ymm3, %ymm8
  9499. vpermq $57, %ymm4, %ymm9
  9500. vpblendd $3, %ymm5, %ymm7, %ymm2
  9501. vpblendd $3, %ymm7, %ymm8, %ymm3
  9502. vpblendd $12, %ymm5, %ymm3, %ymm3
  9503. vpblendd $0xc0, %ymm9, %ymm8, %ymm4
  9504. vpblendd $48, %ymm5, %ymm4, %ymm4
  9505. vpblendd $0xc0, %ymm5, %ymm9, %ymm5
  9506. vmovq %xmm0, (%rdi)
  9507. vmovdqu %ymm1, 8(%rdi)
  9508. vmovdqu %ymm2, 40(%rdi)
  9509. vmovdqu %ymm3, 72(%rdi)
  9510. vmovdqu %ymm4, 104(%rdi)
  9511. vmovdqu %ymm5, 136(%rdi)
  9512. vmovdqu %ymm6, 168(%rdi)
  9513. vzeroupper
  9514. repz retq
  9515. #ifndef __APPLE__
  9516. .size sha3_block_avx2,.-sha3_block_avx2
  9517. #endif /* __APPLE__ */
  9518. #ifndef __APPLE__
  9519. .text
  9520. .globl kyber_sha3_blocksx4_avx2
  9521. .type kyber_sha3_blocksx4_avx2,@function
  9522. .align 16
  9523. kyber_sha3_blocksx4_avx2:
  9524. #else
  9525. .section __TEXT,__text
  9526. .globl _kyber_sha3_blocksx4_avx2
  9527. .p2align 4
  9528. _kyber_sha3_blocksx4_avx2:
  9529. #endif /* __APPLE__ */
  9530. leaq L_sha3_x4_avx2_r(%rip), %rdx
  9531. vmovdqu (%rdi), %ymm15
  9532. movq %rdi, %rax
  9533. movq %rdi, %rcx
  9534. addq $0x80, %rdi
  9535. addq $0x180, %rax
  9536. addq $0x280, %rcx
  9537. # Round 0
  9538. # Calc b[0..4]
  9539. vmovdqu -96(%rdi), %ymm11
  9540. vmovdqu -64(%rdi), %ymm12
  9541. vmovdqu -32(%rdi), %ymm13
  9542. vmovdqu (%rdi), %ymm14
  9543. vpxor 32(%rdi), %ymm15, %ymm10
  9544. vpxor 64(%rdi), %ymm11, %ymm11
  9545. vpxor 96(%rdi), %ymm12, %ymm12
  9546. vpxor 128(%rdi), %ymm13, %ymm13
  9547. vpxor -96(%rax), %ymm14, %ymm14
  9548. vpxor -64(%rax), %ymm10, %ymm10
  9549. vpxor -32(%rax), %ymm11, %ymm11
  9550. vpxor (%rax), %ymm12, %ymm12
  9551. vpxor 32(%rax), %ymm13, %ymm13
  9552. vpxor 64(%rax), %ymm14, %ymm14
  9553. vpxor 96(%rax), %ymm10, %ymm10
  9554. vpxor 128(%rax), %ymm11, %ymm11
  9555. vpxor -96(%rcx), %ymm12, %ymm12
  9556. vpxor -64(%rcx), %ymm13, %ymm13
  9557. vpxor -32(%rcx), %ymm14, %ymm14
  9558. vpxor (%rcx), %ymm10, %ymm10
  9559. vpxor 32(%rcx), %ymm11, %ymm11
  9560. vpxor 64(%rcx), %ymm12, %ymm12
  9561. vpxor 96(%rcx), %ymm13, %ymm13
  9562. vpxor 128(%rcx), %ymm14, %ymm14
  9563. # Calc t[0..4]
  9564. vpsrlq $63, %ymm11, %ymm0
  9565. vpsrlq $63, %ymm12, %ymm1
  9566. vpsrlq $63, %ymm13, %ymm2
  9567. vpsrlq $63, %ymm14, %ymm3
  9568. vpsrlq $63, %ymm10, %ymm4
  9569. vpaddq %ymm11, %ymm11, %ymm5
  9570. vpaddq %ymm12, %ymm12, %ymm6
  9571. vpaddq %ymm13, %ymm13, %ymm7
  9572. vpaddq %ymm14, %ymm14, %ymm8
  9573. vpaddq %ymm10, %ymm10, %ymm9
  9574. vpor %ymm0, %ymm5, %ymm5
  9575. vpor %ymm1, %ymm6, %ymm6
  9576. vpor %ymm2, %ymm7, %ymm7
  9577. vpor %ymm3, %ymm8, %ymm8
  9578. vpor %ymm4, %ymm9, %ymm9
  9579. vpxor %ymm14, %ymm5, %ymm5
  9580. vpxor %ymm10, %ymm6, %ymm6
  9581. vpxor %ymm11, %ymm7, %ymm7
  9582. vpxor %ymm12, %ymm8, %ymm8
  9583. vpxor %ymm13, %ymm9, %ymm9
  9584. # Row Mix
  9585. # Row 0
  9586. vpxor %ymm15, %ymm5, %ymm10
  9587. vpxor 64(%rdi), %ymm6, %ymm11
  9588. vpxor (%rax), %ymm7, %ymm12
  9589. vpxor -64(%rcx), %ymm8, %ymm13
  9590. vpxor 128(%rcx), %ymm9, %ymm14
  9591. vpsrlq $20, %ymm11, %ymm0
  9592. vpsrlq $21, %ymm12, %ymm1
  9593. vpsrlq $43, %ymm13, %ymm2
  9594. vpsrlq $50, %ymm14, %ymm3
  9595. vpsllq $44, %ymm11, %ymm11
  9596. vpsllq $43, %ymm12, %ymm12
  9597. vpsllq $21, %ymm13, %ymm13
  9598. vpsllq $14, %ymm14, %ymm14
  9599. vpor %ymm0, %ymm11, %ymm11
  9600. vpor %ymm1, %ymm12, %ymm12
  9601. vpor %ymm2, %ymm13, %ymm13
  9602. vpor %ymm3, %ymm14, %ymm14
  9603. vpandn %ymm12, %ymm11, %ymm15
  9604. vpandn %ymm13, %ymm12, %ymm1
  9605. vpandn %ymm14, %ymm13, %ymm2
  9606. vpandn %ymm10, %ymm14, %ymm3
  9607. vpandn %ymm11, %ymm10, %ymm4
  9608. vpxor %ymm10, %ymm15, %ymm15
  9609. vpxor %ymm11, %ymm1, %ymm1
  9610. vpxor %ymm12, %ymm2, %ymm2
  9611. # XOR in constant
  9612. vpxor (%rdx), %ymm15, %ymm15
  9613. vpxor %ymm13, %ymm3, %ymm3
  9614. vpxor %ymm14, %ymm4, %ymm4
  9615. vmovdqu %ymm1, 64(%rdi)
  9616. vmovdqu %ymm2, (%rax)
  9617. vmovdqu %ymm3, -64(%rcx)
  9618. vmovdqu %ymm4, 128(%rcx)
  9619. # Row 1
  9620. vpxor -32(%rdi), %ymm8, %ymm10
  9621. vpxor -96(%rax), %ymm9, %ymm11
  9622. vpxor -64(%rax), %ymm5, %ymm12
  9623. vpxor 128(%rax), %ymm6, %ymm13
  9624. vpxor 64(%rcx), %ymm7, %ymm14
  9625. vpsrlq $36, %ymm10, %ymm0
  9626. vpsrlq $44, %ymm11, %ymm1
  9627. vpsrlq $61, %ymm12, %ymm2
  9628. vpsrlq $19, %ymm13, %ymm3
  9629. vpsrlq $3, %ymm14, %ymm4
  9630. vpsllq $28, %ymm10, %ymm10
  9631. vpsllq $20, %ymm11, %ymm11
  9632. vpsllq $3, %ymm12, %ymm12
  9633. vpsllq $45, %ymm13, %ymm13
  9634. vpsllq $61, %ymm14, %ymm14
  9635. vpor %ymm0, %ymm10, %ymm10
  9636. vpor %ymm1, %ymm11, %ymm11
  9637. vpor %ymm2, %ymm12, %ymm12
  9638. vpor %ymm3, %ymm13, %ymm13
  9639. vpor %ymm4, %ymm14, %ymm14
  9640. vpandn %ymm12, %ymm11, %ymm0
  9641. vpandn %ymm13, %ymm12, %ymm1
  9642. vpandn %ymm14, %ymm13, %ymm2
  9643. vpandn %ymm10, %ymm14, %ymm3
  9644. vpandn %ymm11, %ymm10, %ymm4
  9645. vpxor %ymm10, %ymm0, %ymm0
  9646. vpxor %ymm11, %ymm1, %ymm1
  9647. vpxor %ymm12, %ymm2, %ymm2
  9648. vpxor %ymm13, %ymm3, %ymm3
  9649. vpxor %ymm14, %ymm4, %ymm4
  9650. vmovdqu %ymm0, -32(%rdi)
  9651. vmovdqu %ymm1, -96(%rax)
  9652. vmovdqu %ymm2, -64(%rax)
  9653. vmovdqu %ymm3, 128(%rax)
  9654. vmovdqu %ymm4, 64(%rcx)
  9655. # Row 2
  9656. vpxor -96(%rdi), %ymm6, %ymm10
  9657. vpxor 96(%rdi), %ymm7, %ymm11
  9658. vpxor 32(%rax), %ymm8, %ymm12
  9659. vpxor -32(%rcx), %ymm9, %ymm13
  9660. vpxor (%rcx), %ymm5, %ymm14
  9661. vpsrlq $63, %ymm10, %ymm0
  9662. vpsrlq $58, %ymm11, %ymm1
  9663. vpsrlq $39, %ymm12, %ymm2
  9664. vpsrlq $56, %ymm13, %ymm3
  9665. vpsrlq $46, %ymm14, %ymm4
  9666. vpaddq %ymm10, %ymm10, %ymm10
  9667. vpsllq $6, %ymm11, %ymm11
  9668. vpsllq $25, %ymm12, %ymm12
  9669. vpsllq $8, %ymm13, %ymm13
  9670. vpsllq $18, %ymm14, %ymm14
  9671. vpor %ymm0, %ymm10, %ymm10
  9672. vpor %ymm1, %ymm11, %ymm11
  9673. vpor %ymm2, %ymm12, %ymm12
  9674. vpor %ymm3, %ymm13, %ymm13
  9675. vpor %ymm4, %ymm14, %ymm14
  9676. vpandn %ymm12, %ymm11, %ymm0
  9677. vpandn %ymm13, %ymm12, %ymm1
  9678. vpandn %ymm14, %ymm13, %ymm2
  9679. vpandn %ymm10, %ymm14, %ymm3
  9680. vpandn %ymm11, %ymm10, %ymm4
  9681. vpxor %ymm10, %ymm0, %ymm0
  9682. vpxor %ymm11, %ymm1, %ymm1
  9683. vpxor %ymm12, %ymm2, %ymm2
  9684. vpxor %ymm13, %ymm3, %ymm3
  9685. vpxor %ymm14, %ymm4, %ymm4
  9686. vmovdqu %ymm0, -96(%rdi)
  9687. vmovdqu %ymm1, 96(%rdi)
  9688. vmovdqu %ymm2, 32(%rax)
  9689. vmovdqu %ymm3, -32(%rcx)
  9690. vmovdqu %ymm4, (%rcx)
  9691. # Row 3
  9692. vpxor (%rdi), %ymm9, %ymm10
  9693. vpxor 32(%rdi), %ymm5, %ymm11
  9694. vpxor -32(%rax), %ymm6, %ymm12
  9695. vpxor -96(%rcx), %ymm7, %ymm13
  9696. vpxor 96(%rcx), %ymm8, %ymm14
  9697. vpsrlq $37, %ymm10, %ymm0
  9698. vpsrlq $28, %ymm11, %ymm1
  9699. vpsrlq $54, %ymm12, %ymm2
  9700. vpsrlq $49, %ymm13, %ymm3
  9701. vpsrlq $8, %ymm14, %ymm4
  9702. vpsllq $27, %ymm10, %ymm10
  9703. vpsllq $36, %ymm11, %ymm11
  9704. vpsllq $10, %ymm12, %ymm12
  9705. vpsllq $15, %ymm13, %ymm13
  9706. vpsllq $56, %ymm14, %ymm14
  9707. vpor %ymm0, %ymm10, %ymm10
  9708. vpor %ymm1, %ymm11, %ymm11
  9709. vpor %ymm2, %ymm12, %ymm12
  9710. vpor %ymm3, %ymm13, %ymm13
  9711. vpor %ymm4, %ymm14, %ymm14
  9712. vpandn %ymm12, %ymm11, %ymm0
  9713. vpandn %ymm13, %ymm12, %ymm1
  9714. vpandn %ymm14, %ymm13, %ymm2
  9715. vpandn %ymm10, %ymm14, %ymm3
  9716. vpandn %ymm11, %ymm10, %ymm4
  9717. vpxor %ymm10, %ymm0, %ymm0
  9718. vpxor %ymm11, %ymm1, %ymm1
  9719. vpxor %ymm12, %ymm2, %ymm2
  9720. vpxor %ymm13, %ymm3, %ymm3
  9721. vpxor %ymm14, %ymm4, %ymm4
  9722. vmovdqu %ymm0, (%rdi)
  9723. vmovdqu %ymm1, 32(%rdi)
  9724. vmovdqu %ymm2, -32(%rax)
  9725. vmovdqu %ymm3, -96(%rcx)
  9726. vmovdqu %ymm4, 96(%rcx)
  9727. # Row 4
  9728. vpxor -64(%rdi), %ymm7, %ymm10
  9729. vpxor 128(%rdi), %ymm8, %ymm11
  9730. vpxor 64(%rax), %ymm9, %ymm12
  9731. vpxor 96(%rax), %ymm5, %ymm13
  9732. vpxor 32(%rcx), %ymm6, %ymm14
  9733. vpsrlq $2, %ymm10, %ymm0
  9734. vpsrlq $9, %ymm11, %ymm1
  9735. vpsrlq $25, %ymm12, %ymm2
  9736. vpsrlq $23, %ymm13, %ymm3
  9737. vpsrlq $62, %ymm14, %ymm4
  9738. vpsllq $62, %ymm10, %ymm10
  9739. vpsllq $55, %ymm11, %ymm11
  9740. vpsllq $39, %ymm12, %ymm12
  9741. vpsllq $41, %ymm13, %ymm13
  9742. vpsllq $2, %ymm14, %ymm14
  9743. vpor %ymm0, %ymm10, %ymm10
  9744. vpor %ymm1, %ymm11, %ymm11
  9745. vpor %ymm2, %ymm12, %ymm12
  9746. vpor %ymm3, %ymm13, %ymm13
  9747. vpor %ymm4, %ymm14, %ymm14
  9748. vpandn %ymm12, %ymm11, %ymm0
  9749. vpandn %ymm13, %ymm12, %ymm1
  9750. vpandn %ymm14, %ymm13, %ymm2
  9751. vpandn %ymm10, %ymm14, %ymm3
  9752. vpandn %ymm11, %ymm10, %ymm4
  9753. vpxor %ymm10, %ymm0, %ymm0
  9754. vpxor %ymm11, %ymm1, %ymm1
  9755. vpxor %ymm12, %ymm2, %ymm2
  9756. vpxor %ymm13, %ymm3, %ymm3
  9757. vpxor %ymm14, %ymm4, %ymm4
  9758. vmovdqu %ymm0, -64(%rdi)
  9759. vmovdqu %ymm1, 128(%rdi)
  9760. vmovdqu %ymm2, 64(%rax)
  9761. vmovdqu %ymm3, 96(%rax)
  9762. vmovdqu %ymm4, 32(%rcx)
  9763. # Round 1
  9764. # Calc b[0..4]
  9765. vpxor %ymm15, %ymm0, %ymm10
  9766. vpxor -96(%rdi), %ymm10, %ymm10
  9767. vpxor -32(%rdi), %ymm10, %ymm10
  9768. vpxor (%rdi), %ymm10, %ymm10
  9769. vpxor 32(%rdi), %ymm1, %ymm11
  9770. vpxor 64(%rdi), %ymm11, %ymm11
  9771. vpxor 96(%rdi), %ymm11, %ymm11
  9772. vpxor -96(%rax), %ymm11, %ymm11
  9773. vpxor -64(%rax), %ymm2, %ymm12
  9774. vpxor -32(%rax), %ymm12, %ymm12
  9775. vpxor (%rax), %ymm12, %ymm12
  9776. vpxor 32(%rax), %ymm12, %ymm12
  9777. vpxor 128(%rax), %ymm3, %ymm13
  9778. vpxor -96(%rcx), %ymm13, %ymm13
  9779. vpxor -64(%rcx), %ymm13, %ymm13
  9780. vpxor -32(%rcx), %ymm13, %ymm13
  9781. vpxor (%rcx), %ymm4, %ymm14
  9782. vpxor 64(%rcx), %ymm14, %ymm14
  9783. vpxor 96(%rcx), %ymm14, %ymm14
  9784. vpxor 128(%rcx), %ymm14, %ymm14
  9785. # Calc t[0..4]
  9786. vpsrlq $63, %ymm11, %ymm0
  9787. vpsrlq $63, %ymm12, %ymm1
  9788. vpsrlq $63, %ymm13, %ymm2
  9789. vpsrlq $63, %ymm14, %ymm3
  9790. vpsrlq $63, %ymm10, %ymm4
  9791. vpaddq %ymm11, %ymm11, %ymm5
  9792. vpaddq %ymm12, %ymm12, %ymm6
  9793. vpaddq %ymm13, %ymm13, %ymm7
  9794. vpaddq %ymm14, %ymm14, %ymm8
  9795. vpaddq %ymm10, %ymm10, %ymm9
  9796. vpor %ymm0, %ymm5, %ymm5
  9797. vpor %ymm1, %ymm6, %ymm6
  9798. vpor %ymm2, %ymm7, %ymm7
  9799. vpor %ymm3, %ymm8, %ymm8
  9800. vpor %ymm4, %ymm9, %ymm9
  9801. vpxor %ymm14, %ymm5, %ymm5
  9802. vpxor %ymm10, %ymm6, %ymm6
  9803. vpxor %ymm11, %ymm7, %ymm7
  9804. vpxor %ymm12, %ymm8, %ymm8
  9805. vpxor %ymm13, %ymm9, %ymm9
  9806. # Row Mix
  9807. # Row 0
  9808. vpxor %ymm15, %ymm5, %ymm10
  9809. vpxor -96(%rax), %ymm6, %ymm11
  9810. vpxor 32(%rax), %ymm7, %ymm12
  9811. vpxor -96(%rcx), %ymm8, %ymm13
  9812. vpxor 32(%rcx), %ymm9, %ymm14
  9813. vpsrlq $20, %ymm11, %ymm0
  9814. vpsrlq $21, %ymm12, %ymm1
  9815. vpsrlq $43, %ymm13, %ymm2
  9816. vpsrlq $50, %ymm14, %ymm3
  9817. vpsllq $44, %ymm11, %ymm11
  9818. vpsllq $43, %ymm12, %ymm12
  9819. vpsllq $21, %ymm13, %ymm13
  9820. vpsllq $14, %ymm14, %ymm14
  9821. vpor %ymm0, %ymm11, %ymm11
  9822. vpor %ymm1, %ymm12, %ymm12
  9823. vpor %ymm2, %ymm13, %ymm13
  9824. vpor %ymm3, %ymm14, %ymm14
  9825. vpandn %ymm12, %ymm11, %ymm15
  9826. vpandn %ymm13, %ymm12, %ymm1
  9827. vpandn %ymm14, %ymm13, %ymm2
  9828. vpandn %ymm10, %ymm14, %ymm3
  9829. vpandn %ymm11, %ymm10, %ymm4
  9830. vpxor %ymm10, %ymm15, %ymm15
  9831. vpxor %ymm11, %ymm1, %ymm1
  9832. vpxor %ymm12, %ymm2, %ymm2
  9833. # XOR in constant
  9834. vpxor 32(%rdx), %ymm15, %ymm15
  9835. vpxor %ymm13, %ymm3, %ymm3
  9836. vpxor %ymm14, %ymm4, %ymm4
  9837. vmovdqu %ymm1, -96(%rax)
  9838. vmovdqu %ymm2, 32(%rax)
  9839. vmovdqu %ymm3, -96(%rcx)
  9840. vmovdqu %ymm4, 32(%rcx)
  9841. # Row 1
  9842. vpxor -64(%rcx), %ymm8, %ymm10
  9843. vpxor 64(%rcx), %ymm9, %ymm11
  9844. vpxor -96(%rdi), %ymm5, %ymm12
  9845. vpxor 32(%rdi), %ymm6, %ymm13
  9846. vpxor 64(%rax), %ymm7, %ymm14
  9847. vpsrlq $36, %ymm10, %ymm0
  9848. vpsrlq $44, %ymm11, %ymm1
  9849. vpsrlq $61, %ymm12, %ymm2
  9850. vpsrlq $19, %ymm13, %ymm3
  9851. vpsrlq $3, %ymm14, %ymm4
  9852. vpsllq $28, %ymm10, %ymm10
  9853. vpsllq $20, %ymm11, %ymm11
  9854. vpsllq $3, %ymm12, %ymm12
  9855. vpsllq $45, %ymm13, %ymm13
  9856. vpsllq $61, %ymm14, %ymm14
  9857. vpor %ymm0, %ymm10, %ymm10
  9858. vpor %ymm1, %ymm11, %ymm11
  9859. vpor %ymm2, %ymm12, %ymm12
  9860. vpor %ymm3, %ymm13, %ymm13
  9861. vpor %ymm4, %ymm14, %ymm14
  9862. vpandn %ymm12, %ymm11, %ymm0
  9863. vpandn %ymm13, %ymm12, %ymm1
  9864. vpandn %ymm14, %ymm13, %ymm2
  9865. vpandn %ymm10, %ymm14, %ymm3
  9866. vpandn %ymm11, %ymm10, %ymm4
  9867. vpxor %ymm10, %ymm0, %ymm0
  9868. vpxor %ymm11, %ymm1, %ymm1
  9869. vpxor %ymm12, %ymm2, %ymm2
  9870. vpxor %ymm13, %ymm3, %ymm3
  9871. vpxor %ymm14, %ymm4, %ymm4
  9872. vmovdqu %ymm0, -64(%rcx)
  9873. vmovdqu %ymm1, 64(%rcx)
  9874. vmovdqu %ymm2, -96(%rdi)
  9875. vmovdqu %ymm3, 32(%rdi)
  9876. vmovdqu %ymm4, 64(%rax)
  9877. # Row 2
  9878. vpxor 64(%rdi), %ymm6, %ymm10
  9879. vpxor -64(%rax), %ymm7, %ymm11
  9880. vpxor -32(%rcx), %ymm8, %ymm12
  9881. vpxor 96(%rcx), %ymm9, %ymm13
  9882. vpxor -64(%rdi), %ymm5, %ymm14
  9883. vpsrlq $63, %ymm10, %ymm0
  9884. vpsrlq $58, %ymm11, %ymm1
  9885. vpsrlq $39, %ymm12, %ymm2
  9886. vpsrlq $56, %ymm13, %ymm3
  9887. vpsrlq $46, %ymm14, %ymm4
  9888. vpaddq %ymm10, %ymm10, %ymm10
  9889. vpsllq $6, %ymm11, %ymm11
  9890. vpsllq $25, %ymm12, %ymm12
  9891. vpsllq $8, %ymm13, %ymm13
  9892. vpsllq $18, %ymm14, %ymm14
  9893. vpor %ymm0, %ymm10, %ymm10
  9894. vpor %ymm1, %ymm11, %ymm11
  9895. vpor %ymm2, %ymm12, %ymm12
  9896. vpor %ymm3, %ymm13, %ymm13
  9897. vpor %ymm4, %ymm14, %ymm14
  9898. vpandn %ymm12, %ymm11, %ymm0
  9899. vpandn %ymm13, %ymm12, %ymm1
  9900. vpandn %ymm14, %ymm13, %ymm2
  9901. vpandn %ymm10, %ymm14, %ymm3
  9902. vpandn %ymm11, %ymm10, %ymm4
  9903. vpxor %ymm10, %ymm0, %ymm0
  9904. vpxor %ymm11, %ymm1, %ymm1
  9905. vpxor %ymm12, %ymm2, %ymm2
  9906. vpxor %ymm13, %ymm3, %ymm3
  9907. vpxor %ymm14, %ymm4, %ymm4
  9908. vmovdqu %ymm0, 64(%rdi)
  9909. vmovdqu %ymm1, -64(%rax)
  9910. vmovdqu %ymm2, -32(%rcx)
  9911. vmovdqu %ymm3, 96(%rcx)
  9912. vmovdqu %ymm4, -64(%rdi)
  9913. # Row 3
  9914. vpxor 128(%rcx), %ymm9, %ymm10
  9915. vpxor -32(%rdi), %ymm5, %ymm11
  9916. vpxor 96(%rdi), %ymm6, %ymm12
  9917. vpxor -32(%rax), %ymm7, %ymm13
  9918. vpxor 96(%rax), %ymm8, %ymm14
  9919. vpsrlq $37, %ymm10, %ymm0
  9920. vpsrlq $28, %ymm11, %ymm1
  9921. vpsrlq $54, %ymm12, %ymm2
  9922. vpsrlq $49, %ymm13, %ymm3
  9923. vpsrlq $8, %ymm14, %ymm4
  9924. vpsllq $27, %ymm10, %ymm10
  9925. vpsllq $36, %ymm11, %ymm11
  9926. vpsllq $10, %ymm12, %ymm12
  9927. vpsllq $15, %ymm13, %ymm13
  9928. vpsllq $56, %ymm14, %ymm14
  9929. vpor %ymm0, %ymm10, %ymm10
  9930. vpor %ymm1, %ymm11, %ymm11
  9931. vpor %ymm2, %ymm12, %ymm12
  9932. vpor %ymm3, %ymm13, %ymm13
  9933. vpor %ymm4, %ymm14, %ymm14
  9934. vpandn %ymm12, %ymm11, %ymm0
  9935. vpandn %ymm13, %ymm12, %ymm1
  9936. vpandn %ymm14, %ymm13, %ymm2
  9937. vpandn %ymm10, %ymm14, %ymm3
  9938. vpandn %ymm11, %ymm10, %ymm4
  9939. vpxor %ymm10, %ymm0, %ymm0
  9940. vpxor %ymm11, %ymm1, %ymm1
  9941. vpxor %ymm12, %ymm2, %ymm2
  9942. vpxor %ymm13, %ymm3, %ymm3
  9943. vpxor %ymm14, %ymm4, %ymm4
  9944. vmovdqu %ymm0, 128(%rcx)
  9945. vmovdqu %ymm1, -32(%rdi)
  9946. vmovdqu %ymm2, 96(%rdi)
  9947. vmovdqu %ymm3, -32(%rax)
  9948. vmovdqu %ymm4, 96(%rax)
  9949. # Row 4
  9950. vpxor (%rax), %ymm7, %ymm10
  9951. vpxor 128(%rax), %ymm8, %ymm11
  9952. vpxor (%rcx), %ymm9, %ymm12
  9953. vpxor (%rdi), %ymm5, %ymm13
  9954. vpxor 128(%rdi), %ymm6, %ymm14
  9955. vpsrlq $2, %ymm10, %ymm0
  9956. vpsrlq $9, %ymm11, %ymm1
  9957. vpsrlq $25, %ymm12, %ymm2
  9958. vpsrlq $23, %ymm13, %ymm3
  9959. vpsrlq $62, %ymm14, %ymm4
  9960. vpsllq $62, %ymm10, %ymm10
  9961. vpsllq $55, %ymm11, %ymm11
  9962. vpsllq $39, %ymm12, %ymm12
  9963. vpsllq $41, %ymm13, %ymm13
  9964. vpsllq $2, %ymm14, %ymm14
  9965. vpor %ymm0, %ymm10, %ymm10
  9966. vpor %ymm1, %ymm11, %ymm11
  9967. vpor %ymm2, %ymm12, %ymm12
  9968. vpor %ymm3, %ymm13, %ymm13
  9969. vpor %ymm4, %ymm14, %ymm14
  9970. vpandn %ymm12, %ymm11, %ymm0
  9971. vpandn %ymm13, %ymm12, %ymm1
  9972. vpandn %ymm14, %ymm13, %ymm2
  9973. vpandn %ymm10, %ymm14, %ymm3
  9974. vpandn %ymm11, %ymm10, %ymm4
  9975. vpxor %ymm10, %ymm0, %ymm0
  9976. vpxor %ymm11, %ymm1, %ymm1
  9977. vpxor %ymm12, %ymm2, %ymm2
  9978. vpxor %ymm13, %ymm3, %ymm3
  9979. vpxor %ymm14, %ymm4, %ymm4
  9980. vmovdqu %ymm0, (%rax)
  9981. vmovdqu %ymm1, 128(%rax)
  9982. vmovdqu %ymm2, (%rcx)
  9983. vmovdqu %ymm3, (%rdi)
  9984. vmovdqu %ymm4, 128(%rdi)
  9985. # Round 2
  9986. # Calc b[0..4]
  9987. vpxor %ymm15, %ymm0, %ymm10
  9988. vpxor -96(%rdi), %ymm2, %ymm12
  9989. vpxor -64(%rdi), %ymm4, %ymm14
  9990. vpxor -32(%rdi), %ymm1, %ymm11
  9991. vpxor 32(%rdi), %ymm3, %ymm13
  9992. vpxor 64(%rdi), %ymm10, %ymm10
  9993. vpxor 96(%rdi), %ymm12, %ymm12
  9994. vpxor -96(%rax), %ymm11, %ymm11
  9995. vpxor -64(%rax), %ymm11, %ymm11
  9996. vpxor -32(%rax), %ymm13, %ymm13
  9997. vpxor 32(%rax), %ymm12, %ymm12
  9998. vpxor 64(%rax), %ymm14, %ymm14
  9999. vpxor 96(%rax), %ymm14, %ymm14
  10000. vpxor -96(%rcx), %ymm13, %ymm13
  10001. vpxor -64(%rcx), %ymm10, %ymm10
  10002. vpxor -32(%rcx), %ymm12, %ymm12
  10003. vpxor 32(%rcx), %ymm14, %ymm14
  10004. vpxor 64(%rcx), %ymm11, %ymm11
  10005. vpxor 96(%rcx), %ymm13, %ymm13
  10006. vpxor 128(%rcx), %ymm10, %ymm10
  10007. # Calc t[0..4]
  10008. vpsrlq $63, %ymm11, %ymm0
  10009. vpsrlq $63, %ymm12, %ymm1
  10010. vpsrlq $63, %ymm13, %ymm2
  10011. vpsrlq $63, %ymm14, %ymm3
  10012. vpsrlq $63, %ymm10, %ymm4
  10013. vpaddq %ymm11, %ymm11, %ymm5
  10014. vpaddq %ymm12, %ymm12, %ymm6
  10015. vpaddq %ymm13, %ymm13, %ymm7
  10016. vpaddq %ymm14, %ymm14, %ymm8
  10017. vpaddq %ymm10, %ymm10, %ymm9
  10018. vpor %ymm0, %ymm5, %ymm5
  10019. vpor %ymm1, %ymm6, %ymm6
  10020. vpor %ymm2, %ymm7, %ymm7
  10021. vpor %ymm3, %ymm8, %ymm8
  10022. vpor %ymm4, %ymm9, %ymm9
  10023. vpxor %ymm14, %ymm5, %ymm5
  10024. vpxor %ymm10, %ymm6, %ymm6
  10025. vpxor %ymm11, %ymm7, %ymm7
  10026. vpxor %ymm12, %ymm8, %ymm8
  10027. vpxor %ymm13, %ymm9, %ymm9
  10028. # Row Mix
  10029. # Row 0
  10030. vpxor %ymm15, %ymm5, %ymm10
  10031. vpxor 64(%rcx), %ymm6, %ymm11
  10032. vpxor -32(%rcx), %ymm7, %ymm12
  10033. vpxor -32(%rax), %ymm8, %ymm13
  10034. vpxor 128(%rdi), %ymm9, %ymm14
  10035. vpsrlq $20, %ymm11, %ymm0
  10036. vpsrlq $21, %ymm12, %ymm1
  10037. vpsrlq $43, %ymm13, %ymm2
  10038. vpsrlq $50, %ymm14, %ymm3
  10039. vpsllq $44, %ymm11, %ymm11
  10040. vpsllq $43, %ymm12, %ymm12
  10041. vpsllq $21, %ymm13, %ymm13
  10042. vpsllq $14, %ymm14, %ymm14
  10043. vpor %ymm0, %ymm11, %ymm11
  10044. vpor %ymm1, %ymm12, %ymm12
  10045. vpor %ymm2, %ymm13, %ymm13
  10046. vpor %ymm3, %ymm14, %ymm14
  10047. vpandn %ymm12, %ymm11, %ymm15
  10048. vpandn %ymm13, %ymm12, %ymm1
  10049. vpandn %ymm14, %ymm13, %ymm2
  10050. vpandn %ymm10, %ymm14, %ymm3
  10051. vpandn %ymm11, %ymm10, %ymm4
  10052. vpxor %ymm10, %ymm15, %ymm15
  10053. vpxor %ymm11, %ymm1, %ymm1
  10054. vpxor %ymm12, %ymm2, %ymm2
  10055. # XOR in constant
  10056. vpxor 64(%rdx), %ymm15, %ymm15
  10057. vpxor %ymm13, %ymm3, %ymm3
  10058. vpxor %ymm14, %ymm4, %ymm4
  10059. vmovdqu %ymm1, 64(%rcx)
  10060. vmovdqu %ymm2, -32(%rcx)
  10061. vmovdqu %ymm3, -32(%rax)
  10062. vmovdqu %ymm4, 128(%rdi)
  10063. # Row 1
  10064. vpxor -96(%rcx), %ymm8, %ymm10
  10065. vpxor 64(%rax), %ymm9, %ymm11
  10066. vpxor 64(%rdi), %ymm5, %ymm12
  10067. vpxor -32(%rdi), %ymm6, %ymm13
  10068. vpxor (%rcx), %ymm7, %ymm14
  10069. vpsrlq $36, %ymm10, %ymm0
  10070. vpsrlq $44, %ymm11, %ymm1
  10071. vpsrlq $61, %ymm12, %ymm2
  10072. vpsrlq $19, %ymm13, %ymm3
  10073. vpsrlq $3, %ymm14, %ymm4
  10074. vpsllq $28, %ymm10, %ymm10
  10075. vpsllq $20, %ymm11, %ymm11
  10076. vpsllq $3, %ymm12, %ymm12
  10077. vpsllq $45, %ymm13, %ymm13
  10078. vpsllq $61, %ymm14, %ymm14
  10079. vpor %ymm0, %ymm10, %ymm10
  10080. vpor %ymm1, %ymm11, %ymm11
  10081. vpor %ymm2, %ymm12, %ymm12
  10082. vpor %ymm3, %ymm13, %ymm13
  10083. vpor %ymm4, %ymm14, %ymm14
  10084. vpandn %ymm12, %ymm11, %ymm0
  10085. vpandn %ymm13, %ymm12, %ymm1
  10086. vpandn %ymm14, %ymm13, %ymm2
  10087. vpandn %ymm10, %ymm14, %ymm3
  10088. vpandn %ymm11, %ymm10, %ymm4
  10089. vpxor %ymm10, %ymm0, %ymm0
  10090. vpxor %ymm11, %ymm1, %ymm1
  10091. vpxor %ymm12, %ymm2, %ymm2
  10092. vpxor %ymm13, %ymm3, %ymm3
  10093. vpxor %ymm14, %ymm4, %ymm4
  10094. vmovdqu %ymm0, -96(%rcx)
  10095. vmovdqu %ymm1, 64(%rax)
  10096. vmovdqu %ymm2, 64(%rdi)
  10097. vmovdqu %ymm3, -32(%rdi)
  10098. vmovdqu %ymm4, (%rcx)
  10099. # Row 2
  10100. vpxor -96(%rax), %ymm6, %ymm10
  10101. vpxor -96(%rdi), %ymm7, %ymm11
  10102. vpxor 96(%rcx), %ymm8, %ymm12
  10103. vpxor 96(%rax), %ymm9, %ymm13
  10104. vpxor (%rax), %ymm5, %ymm14
  10105. vpsrlq $63, %ymm10, %ymm0
  10106. vpsrlq $58, %ymm11, %ymm1
  10107. vpsrlq $39, %ymm12, %ymm2
  10108. vpsrlq $56, %ymm13, %ymm3
  10109. vpsrlq $46, %ymm14, %ymm4
  10110. vpaddq %ymm10, %ymm10, %ymm10
  10111. vpsllq $6, %ymm11, %ymm11
  10112. vpsllq $25, %ymm12, %ymm12
  10113. vpsllq $8, %ymm13, %ymm13
  10114. vpsllq $18, %ymm14, %ymm14
  10115. vpor %ymm0, %ymm10, %ymm10
  10116. vpor %ymm1, %ymm11, %ymm11
  10117. vpor %ymm2, %ymm12, %ymm12
  10118. vpor %ymm3, %ymm13, %ymm13
  10119. vpor %ymm4, %ymm14, %ymm14
  10120. vpandn %ymm12, %ymm11, %ymm0
  10121. vpandn %ymm13, %ymm12, %ymm1
  10122. vpandn %ymm14, %ymm13, %ymm2
  10123. vpandn %ymm10, %ymm14, %ymm3
  10124. vpandn %ymm11, %ymm10, %ymm4
  10125. vpxor %ymm10, %ymm0, %ymm0
  10126. vpxor %ymm11, %ymm1, %ymm1
  10127. vpxor %ymm12, %ymm2, %ymm2
  10128. vpxor %ymm13, %ymm3, %ymm3
  10129. vpxor %ymm14, %ymm4, %ymm4
  10130. vmovdqu %ymm0, -96(%rax)
  10131. vmovdqu %ymm1, -96(%rdi)
  10132. vmovdqu %ymm2, 96(%rcx)
  10133. vmovdqu %ymm3, 96(%rax)
  10134. vmovdqu %ymm4, (%rax)
  10135. # Row 3
  10136. vpxor 32(%rcx), %ymm9, %ymm10
  10137. vpxor -64(%rcx), %ymm5, %ymm11
  10138. vpxor -64(%rax), %ymm6, %ymm12
  10139. vpxor 96(%rdi), %ymm7, %ymm13
  10140. vpxor (%rdi), %ymm8, %ymm14
  10141. vpsrlq $37, %ymm10, %ymm0
  10142. vpsrlq $28, %ymm11, %ymm1
  10143. vpsrlq $54, %ymm12, %ymm2
  10144. vpsrlq $49, %ymm13, %ymm3
  10145. vpsrlq $8, %ymm14, %ymm4
  10146. vpsllq $27, %ymm10, %ymm10
  10147. vpsllq $36, %ymm11, %ymm11
  10148. vpsllq $10, %ymm12, %ymm12
  10149. vpsllq $15, %ymm13, %ymm13
  10150. vpsllq $56, %ymm14, %ymm14
  10151. vpor %ymm0, %ymm10, %ymm10
  10152. vpor %ymm1, %ymm11, %ymm11
  10153. vpor %ymm2, %ymm12, %ymm12
  10154. vpor %ymm3, %ymm13, %ymm13
  10155. vpor %ymm4, %ymm14, %ymm14
  10156. vpandn %ymm12, %ymm11, %ymm0
  10157. vpandn %ymm13, %ymm12, %ymm1
  10158. vpandn %ymm14, %ymm13, %ymm2
  10159. vpandn %ymm10, %ymm14, %ymm3
  10160. vpandn %ymm11, %ymm10, %ymm4
  10161. vpxor %ymm10, %ymm0, %ymm0
  10162. vpxor %ymm11, %ymm1, %ymm1
  10163. vpxor %ymm12, %ymm2, %ymm2
  10164. vpxor %ymm13, %ymm3, %ymm3
  10165. vpxor %ymm14, %ymm4, %ymm4
  10166. vmovdqu %ymm0, 32(%rcx)
  10167. vmovdqu %ymm1, -64(%rcx)
  10168. vmovdqu %ymm2, -64(%rax)
  10169. vmovdqu %ymm3, 96(%rdi)
  10170. vmovdqu %ymm4, (%rdi)
  10171. # Row 4
  10172. vpxor 32(%rax), %ymm7, %ymm10
  10173. vpxor 32(%rdi), %ymm8, %ymm11
  10174. vpxor -64(%rdi), %ymm9, %ymm12
  10175. vpxor 128(%rcx), %ymm5, %ymm13
  10176. vpxor 128(%rax), %ymm6, %ymm14
  10177. vpsrlq $2, %ymm10, %ymm0
  10178. vpsrlq $9, %ymm11, %ymm1
  10179. vpsrlq $25, %ymm12, %ymm2
  10180. vpsrlq $23, %ymm13, %ymm3
  10181. vpsrlq $62, %ymm14, %ymm4
  10182. vpsllq $62, %ymm10, %ymm10
  10183. vpsllq $55, %ymm11, %ymm11
  10184. vpsllq $39, %ymm12, %ymm12
  10185. vpsllq $41, %ymm13, %ymm13
  10186. vpsllq $2, %ymm14, %ymm14
  10187. vpor %ymm0, %ymm10, %ymm10
  10188. vpor %ymm1, %ymm11, %ymm11
  10189. vpor %ymm2, %ymm12, %ymm12
  10190. vpor %ymm3, %ymm13, %ymm13
  10191. vpor %ymm4, %ymm14, %ymm14
  10192. vpandn %ymm12, %ymm11, %ymm0
  10193. vpandn %ymm13, %ymm12, %ymm1
  10194. vpandn %ymm14, %ymm13, %ymm2
  10195. vpandn %ymm10, %ymm14, %ymm3
  10196. vpandn %ymm11, %ymm10, %ymm4
  10197. vpxor %ymm10, %ymm0, %ymm0
  10198. vpxor %ymm11, %ymm1, %ymm1
  10199. vpxor %ymm12, %ymm2, %ymm2
  10200. vpxor %ymm13, %ymm3, %ymm3
  10201. vpxor %ymm14, %ymm4, %ymm4
  10202. vmovdqu %ymm0, 32(%rax)
  10203. vmovdqu %ymm1, 32(%rdi)
  10204. vmovdqu %ymm2, -64(%rdi)
  10205. vmovdqu %ymm3, 128(%rcx)
  10206. vmovdqu %ymm4, 128(%rax)
  10207. # Round 3
  10208. # Calc b[0..4]
  10209. vpxor %ymm15, %ymm0, %ymm10
  10210. vpxor -96(%rdi), %ymm1, %ymm11
  10211. vpxor -32(%rdi), %ymm3, %ymm13
  10212. vpxor (%rdi), %ymm4, %ymm14
  10213. vpxor 64(%rdi), %ymm2, %ymm12
  10214. vpxor 96(%rdi), %ymm13, %ymm13
  10215. vpxor 128(%rdi), %ymm14, %ymm14
  10216. vpxor -96(%rax), %ymm10, %ymm10
  10217. vpxor -64(%rax), %ymm12, %ymm12
  10218. vpxor -32(%rax), %ymm13, %ymm13
  10219. vpxor (%rax), %ymm14, %ymm14
  10220. vpxor 64(%rax), %ymm11, %ymm11
  10221. vpxor 96(%rax), %ymm13, %ymm13
  10222. vpxor -96(%rcx), %ymm10, %ymm10
  10223. vpxor -64(%rcx), %ymm11, %ymm11
  10224. vpxor -32(%rcx), %ymm12, %ymm12
  10225. vpxor (%rcx), %ymm14, %ymm14
  10226. vpxor 32(%rcx), %ymm10, %ymm10
  10227. vpxor 64(%rcx), %ymm11, %ymm11
  10228. vpxor 96(%rcx), %ymm12, %ymm12
  10229. # Calc t[0..4]
  10230. vpsrlq $63, %ymm11, %ymm0
  10231. vpsrlq $63, %ymm12, %ymm1
  10232. vpsrlq $63, %ymm13, %ymm2
  10233. vpsrlq $63, %ymm14, %ymm3
  10234. vpsrlq $63, %ymm10, %ymm4
  10235. vpaddq %ymm11, %ymm11, %ymm5
  10236. vpaddq %ymm12, %ymm12, %ymm6
  10237. vpaddq %ymm13, %ymm13, %ymm7
  10238. vpaddq %ymm14, %ymm14, %ymm8
  10239. vpaddq %ymm10, %ymm10, %ymm9
  10240. vpor %ymm0, %ymm5, %ymm5
  10241. vpor %ymm1, %ymm6, %ymm6
  10242. vpor %ymm2, %ymm7, %ymm7
  10243. vpor %ymm3, %ymm8, %ymm8
  10244. vpor %ymm4, %ymm9, %ymm9
  10245. vpxor %ymm14, %ymm5, %ymm5
  10246. vpxor %ymm10, %ymm6, %ymm6
  10247. vpxor %ymm11, %ymm7, %ymm7
  10248. vpxor %ymm12, %ymm8, %ymm8
  10249. vpxor %ymm13, %ymm9, %ymm9
  10250. # Row Mix
  10251. # Row 0
  10252. vpxor %ymm15, %ymm5, %ymm10
  10253. vpxor 64(%rax), %ymm6, %ymm11
  10254. vpxor 96(%rcx), %ymm7, %ymm12
  10255. vpxor 96(%rdi), %ymm8, %ymm13
  10256. vpxor 128(%rax), %ymm9, %ymm14
  10257. vpsrlq $20, %ymm11, %ymm0
  10258. vpsrlq $21, %ymm12, %ymm1
  10259. vpsrlq $43, %ymm13, %ymm2
  10260. vpsrlq $50, %ymm14, %ymm3
  10261. vpsllq $44, %ymm11, %ymm11
  10262. vpsllq $43, %ymm12, %ymm12
  10263. vpsllq $21, %ymm13, %ymm13
  10264. vpsllq $14, %ymm14, %ymm14
  10265. vpor %ymm0, %ymm11, %ymm11
  10266. vpor %ymm1, %ymm12, %ymm12
  10267. vpor %ymm2, %ymm13, %ymm13
  10268. vpor %ymm3, %ymm14, %ymm14
  10269. vpandn %ymm12, %ymm11, %ymm15
  10270. vpandn %ymm13, %ymm12, %ymm1
  10271. vpandn %ymm14, %ymm13, %ymm2
  10272. vpandn %ymm10, %ymm14, %ymm3
  10273. vpandn %ymm11, %ymm10, %ymm4
  10274. vpxor %ymm10, %ymm15, %ymm15
  10275. vpxor %ymm11, %ymm1, %ymm1
  10276. vpxor %ymm12, %ymm2, %ymm2
  10277. # XOR in constant
  10278. vpxor 96(%rdx), %ymm15, %ymm15
  10279. vpxor %ymm13, %ymm3, %ymm3
  10280. vpxor %ymm14, %ymm4, %ymm4
  10281. vmovdqu %ymm1, 64(%rax)
  10282. vmovdqu %ymm2, 96(%rcx)
  10283. vmovdqu %ymm3, 96(%rdi)
  10284. vmovdqu %ymm4, 128(%rax)
  10285. # Row 1
  10286. vpxor -32(%rax), %ymm8, %ymm10
  10287. vpxor (%rcx), %ymm9, %ymm11
  10288. vpxor -96(%rax), %ymm5, %ymm12
  10289. vpxor -64(%rcx), %ymm6, %ymm13
  10290. vpxor -64(%rdi), %ymm7, %ymm14
  10291. vpsrlq $36, %ymm10, %ymm0
  10292. vpsrlq $44, %ymm11, %ymm1
  10293. vpsrlq $61, %ymm12, %ymm2
  10294. vpsrlq $19, %ymm13, %ymm3
  10295. vpsrlq $3, %ymm14, %ymm4
  10296. vpsllq $28, %ymm10, %ymm10
  10297. vpsllq $20, %ymm11, %ymm11
  10298. vpsllq $3, %ymm12, %ymm12
  10299. vpsllq $45, %ymm13, %ymm13
  10300. vpsllq $61, %ymm14, %ymm14
  10301. vpor %ymm0, %ymm10, %ymm10
  10302. vpor %ymm1, %ymm11, %ymm11
  10303. vpor %ymm2, %ymm12, %ymm12
  10304. vpor %ymm3, %ymm13, %ymm13
  10305. vpor %ymm4, %ymm14, %ymm14
  10306. vpandn %ymm12, %ymm11, %ymm0
  10307. vpandn %ymm13, %ymm12, %ymm1
  10308. vpandn %ymm14, %ymm13, %ymm2
  10309. vpandn %ymm10, %ymm14, %ymm3
  10310. vpandn %ymm11, %ymm10, %ymm4
  10311. vpxor %ymm10, %ymm0, %ymm0
  10312. vpxor %ymm11, %ymm1, %ymm1
  10313. vpxor %ymm12, %ymm2, %ymm2
  10314. vpxor %ymm13, %ymm3, %ymm3
  10315. vpxor %ymm14, %ymm4, %ymm4
  10316. vmovdqu %ymm0, -32(%rax)
  10317. vmovdqu %ymm1, (%rcx)
  10318. vmovdqu %ymm2, -96(%rax)
  10319. vmovdqu %ymm3, -64(%rcx)
  10320. vmovdqu %ymm4, -64(%rdi)
  10321. # Row 2
  10322. vpxor 64(%rcx), %ymm6, %ymm10
  10323. vpxor 64(%rdi), %ymm7, %ymm11
  10324. vpxor 96(%rax), %ymm8, %ymm12
  10325. vpxor (%rdi), %ymm9, %ymm13
  10326. vpxor 32(%rax), %ymm5, %ymm14
  10327. vpsrlq $63, %ymm10, %ymm0
  10328. vpsrlq $58, %ymm11, %ymm1
  10329. vpsrlq $39, %ymm12, %ymm2
  10330. vpsrlq $56, %ymm13, %ymm3
  10331. vpsrlq $46, %ymm14, %ymm4
  10332. vpaddq %ymm10, %ymm10, %ymm10
  10333. vpsllq $6, %ymm11, %ymm11
  10334. vpsllq $25, %ymm12, %ymm12
  10335. vpsllq $8, %ymm13, %ymm13
  10336. vpsllq $18, %ymm14, %ymm14
  10337. vpor %ymm0, %ymm10, %ymm10
  10338. vpor %ymm1, %ymm11, %ymm11
  10339. vpor %ymm2, %ymm12, %ymm12
  10340. vpor %ymm3, %ymm13, %ymm13
  10341. vpor %ymm4, %ymm14, %ymm14
  10342. vpandn %ymm12, %ymm11, %ymm0
  10343. vpandn %ymm13, %ymm12, %ymm1
  10344. vpandn %ymm14, %ymm13, %ymm2
  10345. vpandn %ymm10, %ymm14, %ymm3
  10346. vpandn %ymm11, %ymm10, %ymm4
  10347. vpxor %ymm10, %ymm0, %ymm0
  10348. vpxor %ymm11, %ymm1, %ymm1
  10349. vpxor %ymm12, %ymm2, %ymm2
  10350. vpxor %ymm13, %ymm3, %ymm3
  10351. vpxor %ymm14, %ymm4, %ymm4
  10352. vmovdqu %ymm0, 64(%rcx)
  10353. vmovdqu %ymm1, 64(%rdi)
  10354. vmovdqu %ymm2, 96(%rax)
  10355. vmovdqu %ymm3, (%rdi)
  10356. vmovdqu %ymm4, 32(%rax)
  10357. # Row 3
  10358. vpxor 128(%rdi), %ymm9, %ymm10
  10359. vpxor -96(%rcx), %ymm5, %ymm11
  10360. vpxor -96(%rdi), %ymm6, %ymm12
  10361. vpxor -64(%rax), %ymm7, %ymm13
  10362. vpxor 128(%rcx), %ymm8, %ymm14
  10363. vpsrlq $37, %ymm10, %ymm0
  10364. vpsrlq $28, %ymm11, %ymm1
  10365. vpsrlq $54, %ymm12, %ymm2
  10366. vpsrlq $49, %ymm13, %ymm3
  10367. vpsrlq $8, %ymm14, %ymm4
  10368. vpsllq $27, %ymm10, %ymm10
  10369. vpsllq $36, %ymm11, %ymm11
  10370. vpsllq $10, %ymm12, %ymm12
  10371. vpsllq $15, %ymm13, %ymm13
  10372. vpsllq $56, %ymm14, %ymm14
  10373. vpor %ymm0, %ymm10, %ymm10
  10374. vpor %ymm1, %ymm11, %ymm11
  10375. vpor %ymm2, %ymm12, %ymm12
  10376. vpor %ymm3, %ymm13, %ymm13
  10377. vpor %ymm4, %ymm14, %ymm14
  10378. vpandn %ymm12, %ymm11, %ymm0
  10379. vpandn %ymm13, %ymm12, %ymm1
  10380. vpandn %ymm14, %ymm13, %ymm2
  10381. vpandn %ymm10, %ymm14, %ymm3
  10382. vpandn %ymm11, %ymm10, %ymm4
  10383. vpxor %ymm10, %ymm0, %ymm0
  10384. vpxor %ymm11, %ymm1, %ymm1
  10385. vpxor %ymm12, %ymm2, %ymm2
  10386. vpxor %ymm13, %ymm3, %ymm3
  10387. vpxor %ymm14, %ymm4, %ymm4
  10388. vmovdqu %ymm0, 128(%rdi)
  10389. vmovdqu %ymm1, -96(%rcx)
  10390. vmovdqu %ymm2, -96(%rdi)
  10391. vmovdqu %ymm3, -64(%rax)
  10392. vmovdqu %ymm4, 128(%rcx)
  10393. # Row 4
  10394. vpxor -32(%rcx), %ymm7, %ymm10
  10395. vpxor -32(%rdi), %ymm8, %ymm11
  10396. vpxor (%rax), %ymm9, %ymm12
  10397. vpxor 32(%rcx), %ymm5, %ymm13
  10398. vpxor 32(%rdi), %ymm6, %ymm14
  10399. vpsrlq $2, %ymm10, %ymm0
  10400. vpsrlq $9, %ymm11, %ymm1
  10401. vpsrlq $25, %ymm12, %ymm2
  10402. vpsrlq $23, %ymm13, %ymm3
  10403. vpsrlq $62, %ymm14, %ymm4
  10404. vpsllq $62, %ymm10, %ymm10
  10405. vpsllq $55, %ymm11, %ymm11
  10406. vpsllq $39, %ymm12, %ymm12
  10407. vpsllq $41, %ymm13, %ymm13
  10408. vpsllq $2, %ymm14, %ymm14
  10409. vpor %ymm0, %ymm10, %ymm10
  10410. vpor %ymm1, %ymm11, %ymm11
  10411. vpor %ymm2, %ymm12, %ymm12
  10412. vpor %ymm3, %ymm13, %ymm13
  10413. vpor %ymm4, %ymm14, %ymm14
  10414. vpandn %ymm12, %ymm11, %ymm0
  10415. vpandn %ymm13, %ymm12, %ymm1
  10416. vpandn %ymm14, %ymm13, %ymm2
  10417. vpandn %ymm10, %ymm14, %ymm3
  10418. vpandn %ymm11, %ymm10, %ymm4
  10419. vpxor %ymm10, %ymm0, %ymm0
  10420. vpxor %ymm11, %ymm1, %ymm1
  10421. vpxor %ymm12, %ymm2, %ymm2
  10422. vpxor %ymm13, %ymm3, %ymm3
  10423. vpxor %ymm14, %ymm4, %ymm4
  10424. vmovdqu %ymm0, -32(%rcx)
  10425. vmovdqu %ymm1, -32(%rdi)
  10426. vmovdqu %ymm2, (%rax)
  10427. vmovdqu %ymm3, 32(%rcx)
  10428. vmovdqu %ymm4, 32(%rdi)
  10429. # Round 4
  10430. # Calc b[0..4]
  10431. vpxor %ymm15, %ymm0, %ymm10
  10432. vpxor -96(%rdi), %ymm2, %ymm12
  10433. vpxor -64(%rdi), %ymm4, %ymm14
  10434. vpxor (%rdi), %ymm3, %ymm13
  10435. vpxor 64(%rdi), %ymm1, %ymm11
  10436. vpxor 96(%rdi), %ymm13, %ymm13
  10437. vpxor 128(%rdi), %ymm10, %ymm10
  10438. vpxor -96(%rax), %ymm12, %ymm12
  10439. vpxor -64(%rax), %ymm13, %ymm13
  10440. vpxor -32(%rax), %ymm10, %ymm10
  10441. vpxor 32(%rax), %ymm14, %ymm14
  10442. vpxor 64(%rax), %ymm11, %ymm11
  10443. vpxor 96(%rax), %ymm12, %ymm12
  10444. vpxor 128(%rax), %ymm14, %ymm14
  10445. vpxor -96(%rcx), %ymm11, %ymm11
  10446. vpxor -64(%rcx), %ymm13, %ymm13
  10447. vpxor (%rcx), %ymm11, %ymm11
  10448. vpxor 64(%rcx), %ymm10, %ymm10
  10449. vpxor 96(%rcx), %ymm12, %ymm12
  10450. vpxor 128(%rcx), %ymm14, %ymm14
  10451. # Calc t[0..4]
  10452. vpsrlq $63, %ymm11, %ymm0
  10453. vpsrlq $63, %ymm12, %ymm1
  10454. vpsrlq $63, %ymm13, %ymm2
  10455. vpsrlq $63, %ymm14, %ymm3
  10456. vpsrlq $63, %ymm10, %ymm4
  10457. vpaddq %ymm11, %ymm11, %ymm5
  10458. vpaddq %ymm12, %ymm12, %ymm6
  10459. vpaddq %ymm13, %ymm13, %ymm7
  10460. vpaddq %ymm14, %ymm14, %ymm8
  10461. vpaddq %ymm10, %ymm10, %ymm9
  10462. vpor %ymm0, %ymm5, %ymm5
  10463. vpor %ymm1, %ymm6, %ymm6
  10464. vpor %ymm2, %ymm7, %ymm7
  10465. vpor %ymm3, %ymm8, %ymm8
  10466. vpor %ymm4, %ymm9, %ymm9
  10467. vpxor %ymm14, %ymm5, %ymm5
  10468. vpxor %ymm10, %ymm6, %ymm6
  10469. vpxor %ymm11, %ymm7, %ymm7
  10470. vpxor %ymm12, %ymm8, %ymm8
  10471. vpxor %ymm13, %ymm9, %ymm9
  10472. # Row Mix
  10473. # Row 0
  10474. vpxor %ymm15, %ymm5, %ymm10
  10475. vpxor (%rcx), %ymm6, %ymm11
  10476. vpxor 96(%rax), %ymm7, %ymm12
  10477. vpxor -64(%rax), %ymm8, %ymm13
  10478. vpxor 32(%rdi), %ymm9, %ymm14
  10479. vpsrlq $20, %ymm11, %ymm0
  10480. vpsrlq $21, %ymm12, %ymm1
  10481. vpsrlq $43, %ymm13, %ymm2
  10482. vpsrlq $50, %ymm14, %ymm3
  10483. vpsllq $44, %ymm11, %ymm11
  10484. vpsllq $43, %ymm12, %ymm12
  10485. vpsllq $21, %ymm13, %ymm13
  10486. vpsllq $14, %ymm14, %ymm14
  10487. vpor %ymm0, %ymm11, %ymm11
  10488. vpor %ymm1, %ymm12, %ymm12
  10489. vpor %ymm2, %ymm13, %ymm13
  10490. vpor %ymm3, %ymm14, %ymm14
  10491. vpandn %ymm12, %ymm11, %ymm15
  10492. vpandn %ymm13, %ymm12, %ymm1
  10493. vpandn %ymm14, %ymm13, %ymm2
  10494. vpandn %ymm10, %ymm14, %ymm3
  10495. vpandn %ymm11, %ymm10, %ymm4
  10496. vpxor %ymm10, %ymm15, %ymm15
  10497. vpxor %ymm11, %ymm1, %ymm1
  10498. vpxor %ymm12, %ymm2, %ymm2
  10499. # XOR in constant
  10500. vpxor 128(%rdx), %ymm15, %ymm15
  10501. vpxor %ymm13, %ymm3, %ymm3
  10502. vpxor %ymm14, %ymm4, %ymm4
  10503. vmovdqu %ymm1, (%rcx)
  10504. vmovdqu %ymm2, 96(%rax)
  10505. vmovdqu %ymm3, -64(%rax)
  10506. vmovdqu %ymm4, 32(%rdi)
  10507. # Row 1
  10508. vpxor 96(%rdi), %ymm8, %ymm10
  10509. vpxor -64(%rdi), %ymm9, %ymm11
  10510. vpxor 64(%rcx), %ymm5, %ymm12
  10511. vpxor -96(%rcx), %ymm6, %ymm13
  10512. vpxor (%rax), %ymm7, %ymm14
  10513. vpsrlq $36, %ymm10, %ymm0
  10514. vpsrlq $44, %ymm11, %ymm1
  10515. vpsrlq $61, %ymm12, %ymm2
  10516. vpsrlq $19, %ymm13, %ymm3
  10517. vpsrlq $3, %ymm14, %ymm4
  10518. vpsllq $28, %ymm10, %ymm10
  10519. vpsllq $20, %ymm11, %ymm11
  10520. vpsllq $3, %ymm12, %ymm12
  10521. vpsllq $45, %ymm13, %ymm13
  10522. vpsllq $61, %ymm14, %ymm14
  10523. vpor %ymm0, %ymm10, %ymm10
  10524. vpor %ymm1, %ymm11, %ymm11
  10525. vpor %ymm2, %ymm12, %ymm12
  10526. vpor %ymm3, %ymm13, %ymm13
  10527. vpor %ymm4, %ymm14, %ymm14
  10528. vpandn %ymm12, %ymm11, %ymm0
  10529. vpandn %ymm13, %ymm12, %ymm1
  10530. vpandn %ymm14, %ymm13, %ymm2
  10531. vpandn %ymm10, %ymm14, %ymm3
  10532. vpandn %ymm11, %ymm10, %ymm4
  10533. vpxor %ymm10, %ymm0, %ymm0
  10534. vpxor %ymm11, %ymm1, %ymm1
  10535. vpxor %ymm12, %ymm2, %ymm2
  10536. vpxor %ymm13, %ymm3, %ymm3
  10537. vpxor %ymm14, %ymm4, %ymm4
  10538. vmovdqu %ymm0, 96(%rdi)
  10539. vmovdqu %ymm1, -64(%rdi)
  10540. vmovdqu %ymm2, 64(%rcx)
  10541. vmovdqu %ymm3, -96(%rcx)
  10542. vmovdqu %ymm4, (%rax)
  10543. # Row 2
  10544. vpxor 64(%rax), %ymm6, %ymm10
  10545. vpxor -96(%rax), %ymm7, %ymm11
  10546. vpxor (%rdi), %ymm8, %ymm12
  10547. vpxor 128(%rcx), %ymm9, %ymm13
  10548. vpxor -32(%rcx), %ymm5, %ymm14
  10549. vpsrlq $63, %ymm10, %ymm0
  10550. vpsrlq $58, %ymm11, %ymm1
  10551. vpsrlq $39, %ymm12, %ymm2
  10552. vpsrlq $56, %ymm13, %ymm3
  10553. vpsrlq $46, %ymm14, %ymm4
  10554. vpaddq %ymm10, %ymm10, %ymm10
  10555. vpsllq $6, %ymm11, %ymm11
  10556. vpsllq $25, %ymm12, %ymm12
  10557. vpsllq $8, %ymm13, %ymm13
  10558. vpsllq $18, %ymm14, %ymm14
  10559. vpor %ymm0, %ymm10, %ymm10
  10560. vpor %ymm1, %ymm11, %ymm11
  10561. vpor %ymm2, %ymm12, %ymm12
  10562. vpor %ymm3, %ymm13, %ymm13
  10563. vpor %ymm4, %ymm14, %ymm14
  10564. vpandn %ymm12, %ymm11, %ymm0
  10565. vpandn %ymm13, %ymm12, %ymm1
  10566. vpandn %ymm14, %ymm13, %ymm2
  10567. vpandn %ymm10, %ymm14, %ymm3
  10568. vpandn %ymm11, %ymm10, %ymm4
  10569. vpxor %ymm10, %ymm0, %ymm0
  10570. vpxor %ymm11, %ymm1, %ymm1
  10571. vpxor %ymm12, %ymm2, %ymm2
  10572. vpxor %ymm13, %ymm3, %ymm3
  10573. vpxor %ymm14, %ymm4, %ymm4
  10574. vmovdqu %ymm0, 64(%rax)
  10575. vmovdqu %ymm1, -96(%rax)
  10576. vmovdqu %ymm2, (%rdi)
  10577. vmovdqu %ymm3, 128(%rcx)
  10578. vmovdqu %ymm4, -32(%rcx)
  10579. # Row 3
  10580. vpxor 128(%rax), %ymm9, %ymm10
  10581. vpxor -32(%rax), %ymm5, %ymm11
  10582. vpxor 64(%rdi), %ymm6, %ymm12
  10583. vpxor -96(%rdi), %ymm7, %ymm13
  10584. vpxor 32(%rcx), %ymm8, %ymm14
  10585. vpsrlq $37, %ymm10, %ymm0
  10586. vpsrlq $28, %ymm11, %ymm1
  10587. vpsrlq $54, %ymm12, %ymm2
  10588. vpsrlq $49, %ymm13, %ymm3
  10589. vpsrlq $8, %ymm14, %ymm4
  10590. vpsllq $27, %ymm10, %ymm10
  10591. vpsllq $36, %ymm11, %ymm11
  10592. vpsllq $10, %ymm12, %ymm12
  10593. vpsllq $15, %ymm13, %ymm13
  10594. vpsllq $56, %ymm14, %ymm14
  10595. vpor %ymm0, %ymm10, %ymm10
  10596. vpor %ymm1, %ymm11, %ymm11
  10597. vpor %ymm2, %ymm12, %ymm12
  10598. vpor %ymm3, %ymm13, %ymm13
  10599. vpor %ymm4, %ymm14, %ymm14
  10600. vpandn %ymm12, %ymm11, %ymm0
  10601. vpandn %ymm13, %ymm12, %ymm1
  10602. vpandn %ymm14, %ymm13, %ymm2
  10603. vpandn %ymm10, %ymm14, %ymm3
  10604. vpandn %ymm11, %ymm10, %ymm4
  10605. vpxor %ymm10, %ymm0, %ymm0
  10606. vpxor %ymm11, %ymm1, %ymm1
  10607. vpxor %ymm12, %ymm2, %ymm2
  10608. vpxor %ymm13, %ymm3, %ymm3
  10609. vpxor %ymm14, %ymm4, %ymm4
  10610. vmovdqu %ymm0, 128(%rax)
  10611. vmovdqu %ymm1, -32(%rax)
  10612. vmovdqu %ymm2, 64(%rdi)
  10613. vmovdqu %ymm3, -96(%rdi)
  10614. vmovdqu %ymm4, 32(%rcx)
  10615. # Row 4
  10616. vpxor 96(%rcx), %ymm7, %ymm10
  10617. vpxor -64(%rcx), %ymm8, %ymm11
  10618. vpxor 32(%rax), %ymm9, %ymm12
  10619. vpxor 128(%rdi), %ymm5, %ymm13
  10620. vpxor -32(%rdi), %ymm6, %ymm14
  10621. vpsrlq $2, %ymm10, %ymm0
  10622. vpsrlq $9, %ymm11, %ymm1
  10623. vpsrlq $25, %ymm12, %ymm2
  10624. vpsrlq $23, %ymm13, %ymm3
  10625. vpsrlq $62, %ymm14, %ymm4
  10626. vpsllq $62, %ymm10, %ymm10
  10627. vpsllq $55, %ymm11, %ymm11
  10628. vpsllq $39, %ymm12, %ymm12
  10629. vpsllq $41, %ymm13, %ymm13
  10630. vpsllq $2, %ymm14, %ymm14
  10631. vpor %ymm0, %ymm10, %ymm10
  10632. vpor %ymm1, %ymm11, %ymm11
  10633. vpor %ymm2, %ymm12, %ymm12
  10634. vpor %ymm3, %ymm13, %ymm13
  10635. vpor %ymm4, %ymm14, %ymm14
  10636. vpandn %ymm12, %ymm11, %ymm0
  10637. vpandn %ymm13, %ymm12, %ymm1
  10638. vpandn %ymm14, %ymm13, %ymm2
  10639. vpandn %ymm10, %ymm14, %ymm3
  10640. vpandn %ymm11, %ymm10, %ymm4
  10641. vpxor %ymm10, %ymm0, %ymm0
  10642. vpxor %ymm11, %ymm1, %ymm1
  10643. vpxor %ymm12, %ymm2, %ymm2
  10644. vpxor %ymm13, %ymm3, %ymm3
  10645. vpxor %ymm14, %ymm4, %ymm4
  10646. vmovdqu %ymm0, 96(%rcx)
  10647. vmovdqu %ymm1, -64(%rcx)
  10648. vmovdqu %ymm2, 32(%rax)
  10649. vmovdqu %ymm3, 128(%rdi)
  10650. vmovdqu %ymm4, -32(%rdi)
  10651. # Round 5
  10652. # Calc b[0..4]
  10653. vpxor %ymm15, %ymm0, %ymm10
  10654. vpxor -96(%rdi), %ymm3, %ymm13
  10655. vpxor -64(%rdi), %ymm1, %ymm11
  10656. vpxor (%rdi), %ymm2, %ymm12
  10657. vpxor 32(%rdi), %ymm4, %ymm14
  10658. vpxor 64(%rdi), %ymm12, %ymm12
  10659. vpxor 96(%rdi), %ymm10, %ymm10
  10660. vpxor -96(%rax), %ymm11, %ymm11
  10661. vpxor -64(%rax), %ymm13, %ymm13
  10662. vpxor -32(%rax), %ymm11, %ymm11
  10663. vpxor (%rax), %ymm14, %ymm14
  10664. vpxor 64(%rax), %ymm10, %ymm10
  10665. vpxor 96(%rax), %ymm12, %ymm12
  10666. vpxor 128(%rax), %ymm10, %ymm10
  10667. vpxor -96(%rcx), %ymm13, %ymm13
  10668. vpxor -32(%rcx), %ymm14, %ymm14
  10669. vpxor (%rcx), %ymm11, %ymm11
  10670. vpxor 32(%rcx), %ymm14, %ymm14
  10671. vpxor 64(%rcx), %ymm12, %ymm12
  10672. vpxor 128(%rcx), %ymm13, %ymm13
  10673. # Calc t[0..4]
  10674. vpsrlq $63, %ymm11, %ymm0
  10675. vpsrlq $63, %ymm12, %ymm1
  10676. vpsrlq $63, %ymm13, %ymm2
  10677. vpsrlq $63, %ymm14, %ymm3
  10678. vpsrlq $63, %ymm10, %ymm4
  10679. vpaddq %ymm11, %ymm11, %ymm5
  10680. vpaddq %ymm12, %ymm12, %ymm6
  10681. vpaddq %ymm13, %ymm13, %ymm7
  10682. vpaddq %ymm14, %ymm14, %ymm8
  10683. vpaddq %ymm10, %ymm10, %ymm9
  10684. vpor %ymm0, %ymm5, %ymm5
  10685. vpor %ymm1, %ymm6, %ymm6
  10686. vpor %ymm2, %ymm7, %ymm7
  10687. vpor %ymm3, %ymm8, %ymm8
  10688. vpor %ymm4, %ymm9, %ymm9
  10689. vpxor %ymm14, %ymm5, %ymm5
  10690. vpxor %ymm10, %ymm6, %ymm6
  10691. vpxor %ymm11, %ymm7, %ymm7
  10692. vpxor %ymm12, %ymm8, %ymm8
  10693. vpxor %ymm13, %ymm9, %ymm9
  10694. # Row Mix
  10695. # Row 0
  10696. vpxor %ymm15, %ymm5, %ymm10
  10697. vpxor -64(%rdi), %ymm6, %ymm11
  10698. vpxor (%rdi), %ymm7, %ymm12
  10699. vpxor -96(%rdi), %ymm8, %ymm13
  10700. vpxor -32(%rdi), %ymm9, %ymm14
  10701. vpsrlq $20, %ymm11, %ymm0
  10702. vpsrlq $21, %ymm12, %ymm1
  10703. vpsrlq $43, %ymm13, %ymm2
  10704. vpsrlq $50, %ymm14, %ymm3
  10705. vpsllq $44, %ymm11, %ymm11
  10706. vpsllq $43, %ymm12, %ymm12
  10707. vpsllq $21, %ymm13, %ymm13
  10708. vpsllq $14, %ymm14, %ymm14
  10709. vpor %ymm0, %ymm11, %ymm11
  10710. vpor %ymm1, %ymm12, %ymm12
  10711. vpor %ymm2, %ymm13, %ymm13
  10712. vpor %ymm3, %ymm14, %ymm14
  10713. vpandn %ymm12, %ymm11, %ymm15
  10714. vpandn %ymm13, %ymm12, %ymm1
  10715. vpandn %ymm14, %ymm13, %ymm2
  10716. vpandn %ymm10, %ymm14, %ymm3
  10717. vpandn %ymm11, %ymm10, %ymm4
  10718. vpxor %ymm10, %ymm15, %ymm15
  10719. vpxor %ymm11, %ymm1, %ymm1
  10720. vpxor %ymm12, %ymm2, %ymm2
  10721. # XOR in constant
  10722. vpxor 160(%rdx), %ymm15, %ymm15
  10723. vpxor %ymm13, %ymm3, %ymm3
  10724. vpxor %ymm14, %ymm4, %ymm4
  10725. vmovdqu %ymm1, -64(%rdi)
  10726. vmovdqu %ymm2, (%rdi)
  10727. vmovdqu %ymm3, -96(%rdi)
  10728. vmovdqu %ymm4, -32(%rdi)
  10729. # Row 1
  10730. vpxor -64(%rax), %ymm8, %ymm10
  10731. vpxor (%rax), %ymm9, %ymm11
  10732. vpxor 64(%rax), %ymm5, %ymm12
  10733. vpxor -32(%rax), %ymm6, %ymm13
  10734. vpxor 32(%rax), %ymm7, %ymm14
  10735. vpsrlq $36, %ymm10, %ymm0
  10736. vpsrlq $44, %ymm11, %ymm1
  10737. vpsrlq $61, %ymm12, %ymm2
  10738. vpsrlq $19, %ymm13, %ymm3
  10739. vpsrlq $3, %ymm14, %ymm4
  10740. vpsllq $28, %ymm10, %ymm10
  10741. vpsllq $20, %ymm11, %ymm11
  10742. vpsllq $3, %ymm12, %ymm12
  10743. vpsllq $45, %ymm13, %ymm13
  10744. vpsllq $61, %ymm14, %ymm14
  10745. vpor %ymm0, %ymm10, %ymm10
  10746. vpor %ymm1, %ymm11, %ymm11
  10747. vpor %ymm2, %ymm12, %ymm12
  10748. vpor %ymm3, %ymm13, %ymm13
  10749. vpor %ymm4, %ymm14, %ymm14
  10750. vpandn %ymm12, %ymm11, %ymm0
  10751. vpandn %ymm13, %ymm12, %ymm1
  10752. vpandn %ymm14, %ymm13, %ymm2
  10753. vpandn %ymm10, %ymm14, %ymm3
  10754. vpandn %ymm11, %ymm10, %ymm4
  10755. vpxor %ymm10, %ymm0, %ymm0
  10756. vpxor %ymm11, %ymm1, %ymm1
  10757. vpxor %ymm12, %ymm2, %ymm2
  10758. vpxor %ymm13, %ymm3, %ymm3
  10759. vpxor %ymm14, %ymm4, %ymm4
  10760. vmovdqu %ymm0, -64(%rax)
  10761. vmovdqu %ymm1, (%rax)
  10762. vmovdqu %ymm2, 64(%rax)
  10763. vmovdqu %ymm3, -32(%rax)
  10764. vmovdqu %ymm4, 32(%rax)
  10765. # Row 2
  10766. vpxor (%rcx), %ymm6, %ymm10
  10767. vpxor 64(%rcx), %ymm7, %ymm11
  10768. vpxor 128(%rcx), %ymm8, %ymm12
  10769. vpxor 32(%rcx), %ymm9, %ymm13
  10770. vpxor 96(%rcx), %ymm5, %ymm14
  10771. vpsrlq $63, %ymm10, %ymm0
  10772. vpsrlq $58, %ymm11, %ymm1
  10773. vpsrlq $39, %ymm12, %ymm2
  10774. vpsrlq $56, %ymm13, %ymm3
  10775. vpsrlq $46, %ymm14, %ymm4
  10776. vpaddq %ymm10, %ymm10, %ymm10
  10777. vpsllq $6, %ymm11, %ymm11
  10778. vpsllq $25, %ymm12, %ymm12
  10779. vpsllq $8, %ymm13, %ymm13
  10780. vpsllq $18, %ymm14, %ymm14
  10781. vpor %ymm0, %ymm10, %ymm10
  10782. vpor %ymm1, %ymm11, %ymm11
  10783. vpor %ymm2, %ymm12, %ymm12
  10784. vpor %ymm3, %ymm13, %ymm13
  10785. vpor %ymm4, %ymm14, %ymm14
  10786. vpandn %ymm12, %ymm11, %ymm0
  10787. vpandn %ymm13, %ymm12, %ymm1
  10788. vpandn %ymm14, %ymm13, %ymm2
  10789. vpandn %ymm10, %ymm14, %ymm3
  10790. vpandn %ymm11, %ymm10, %ymm4
  10791. vpxor %ymm10, %ymm0, %ymm0
  10792. vpxor %ymm11, %ymm1, %ymm1
  10793. vpxor %ymm12, %ymm2, %ymm2
  10794. vpxor %ymm13, %ymm3, %ymm3
  10795. vpxor %ymm14, %ymm4, %ymm4
  10796. vmovdqu %ymm0, (%rcx)
  10797. vmovdqu %ymm1, 64(%rcx)
  10798. vmovdqu %ymm2, 128(%rcx)
  10799. vmovdqu %ymm3, 32(%rcx)
  10800. vmovdqu %ymm4, 96(%rcx)
  10801. # Row 3
  10802. vpxor 32(%rdi), %ymm9, %ymm10
  10803. vpxor 96(%rdi), %ymm5, %ymm11
  10804. vpxor -96(%rax), %ymm6, %ymm12
  10805. vpxor 64(%rdi), %ymm7, %ymm13
  10806. vpxor 128(%rdi), %ymm8, %ymm14
  10807. vpsrlq $37, %ymm10, %ymm0
  10808. vpsrlq $28, %ymm11, %ymm1
  10809. vpsrlq $54, %ymm12, %ymm2
  10810. vpsrlq $49, %ymm13, %ymm3
  10811. vpsrlq $8, %ymm14, %ymm4
  10812. vpsllq $27, %ymm10, %ymm10
  10813. vpsllq $36, %ymm11, %ymm11
  10814. vpsllq $10, %ymm12, %ymm12
  10815. vpsllq $15, %ymm13, %ymm13
  10816. vpsllq $56, %ymm14, %ymm14
  10817. vpor %ymm0, %ymm10, %ymm10
  10818. vpor %ymm1, %ymm11, %ymm11
  10819. vpor %ymm2, %ymm12, %ymm12
  10820. vpor %ymm3, %ymm13, %ymm13
  10821. vpor %ymm4, %ymm14, %ymm14
  10822. vpandn %ymm12, %ymm11, %ymm0
  10823. vpandn %ymm13, %ymm12, %ymm1
  10824. vpandn %ymm14, %ymm13, %ymm2
  10825. vpandn %ymm10, %ymm14, %ymm3
  10826. vpandn %ymm11, %ymm10, %ymm4
  10827. vpxor %ymm10, %ymm0, %ymm0
  10828. vpxor %ymm11, %ymm1, %ymm1
  10829. vpxor %ymm12, %ymm2, %ymm2
  10830. vpxor %ymm13, %ymm3, %ymm3
  10831. vpxor %ymm14, %ymm4, %ymm4
  10832. vmovdqu %ymm0, 32(%rdi)
  10833. vmovdqu %ymm1, 96(%rdi)
  10834. vmovdqu %ymm2, -96(%rax)
  10835. vmovdqu %ymm3, 64(%rdi)
  10836. vmovdqu %ymm4, 128(%rdi)
  10837. # Row 4
  10838. vpxor 96(%rax), %ymm7, %ymm10
  10839. vpxor -96(%rcx), %ymm8, %ymm11
  10840. vpxor -32(%rcx), %ymm9, %ymm12
  10841. vpxor 128(%rax), %ymm5, %ymm13
  10842. vpxor -64(%rcx), %ymm6, %ymm14
  10843. vpsrlq $2, %ymm10, %ymm0
  10844. vpsrlq $9, %ymm11, %ymm1
  10845. vpsrlq $25, %ymm12, %ymm2
  10846. vpsrlq $23, %ymm13, %ymm3
  10847. vpsrlq $62, %ymm14, %ymm4
  10848. vpsllq $62, %ymm10, %ymm10
  10849. vpsllq $55, %ymm11, %ymm11
  10850. vpsllq $39, %ymm12, %ymm12
  10851. vpsllq $41, %ymm13, %ymm13
  10852. vpsllq $2, %ymm14, %ymm14
  10853. vpor %ymm0, %ymm10, %ymm10
  10854. vpor %ymm1, %ymm11, %ymm11
  10855. vpor %ymm2, %ymm12, %ymm12
  10856. vpor %ymm3, %ymm13, %ymm13
  10857. vpor %ymm4, %ymm14, %ymm14
  10858. vpandn %ymm12, %ymm11, %ymm0
  10859. vpandn %ymm13, %ymm12, %ymm1
  10860. vpandn %ymm14, %ymm13, %ymm2
  10861. vpandn %ymm10, %ymm14, %ymm3
  10862. vpandn %ymm11, %ymm10, %ymm4
  10863. vpxor %ymm10, %ymm0, %ymm0
  10864. vpxor %ymm11, %ymm1, %ymm1
  10865. vpxor %ymm12, %ymm2, %ymm2
  10866. vpxor %ymm13, %ymm3, %ymm3
  10867. vpxor %ymm14, %ymm4, %ymm4
  10868. vmovdqu %ymm0, 96(%rax)
  10869. vmovdqu %ymm1, -96(%rcx)
  10870. vmovdqu %ymm2, -32(%rcx)
  10871. vmovdqu %ymm3, 128(%rax)
  10872. vmovdqu %ymm4, -64(%rcx)
  10873. # Round 6
  10874. # Calc b[0..4]
  10875. vpxor %ymm15, %ymm0, %ymm10
  10876. vpxor -96(%rdi), %ymm3, %ymm13
  10877. vpxor -64(%rdi), %ymm1, %ymm11
  10878. vpxor -32(%rdi), %ymm4, %ymm14
  10879. vpxor (%rdi), %ymm2, %ymm12
  10880. vpxor 32(%rdi), %ymm10, %ymm10
  10881. vpxor 64(%rdi), %ymm13, %ymm13
  10882. vpxor 96(%rdi), %ymm11, %ymm11
  10883. vpxor 128(%rdi), %ymm14, %ymm14
  10884. vpxor -96(%rax), %ymm12, %ymm12
  10885. vpxor -64(%rax), %ymm10, %ymm10
  10886. vpxor -32(%rax), %ymm13, %ymm13
  10887. vpxor (%rax), %ymm11, %ymm11
  10888. vpxor 32(%rax), %ymm14, %ymm14
  10889. vpxor 64(%rax), %ymm12, %ymm12
  10890. vpxor (%rcx), %ymm10, %ymm10
  10891. vpxor 32(%rcx), %ymm13, %ymm13
  10892. vpxor 64(%rcx), %ymm11, %ymm11
  10893. vpxor 96(%rcx), %ymm14, %ymm14
  10894. vpxor 128(%rcx), %ymm12, %ymm12
  10895. # Calc t[0..4]
  10896. vpsrlq $63, %ymm11, %ymm0
  10897. vpsrlq $63, %ymm12, %ymm1
  10898. vpsrlq $63, %ymm13, %ymm2
  10899. vpsrlq $63, %ymm14, %ymm3
  10900. vpsrlq $63, %ymm10, %ymm4
  10901. vpaddq %ymm11, %ymm11, %ymm5
  10902. vpaddq %ymm12, %ymm12, %ymm6
  10903. vpaddq %ymm13, %ymm13, %ymm7
  10904. vpaddq %ymm14, %ymm14, %ymm8
  10905. vpaddq %ymm10, %ymm10, %ymm9
  10906. vpor %ymm0, %ymm5, %ymm5
  10907. vpor %ymm1, %ymm6, %ymm6
  10908. vpor %ymm2, %ymm7, %ymm7
  10909. vpor %ymm3, %ymm8, %ymm8
  10910. vpor %ymm4, %ymm9, %ymm9
  10911. vpxor %ymm14, %ymm5, %ymm5
  10912. vpxor %ymm10, %ymm6, %ymm6
  10913. vpxor %ymm11, %ymm7, %ymm7
  10914. vpxor %ymm12, %ymm8, %ymm8
  10915. vpxor %ymm13, %ymm9, %ymm9
  10916. # Row Mix
  10917. # Row 0
  10918. vpxor %ymm15, %ymm5, %ymm10
  10919. vpxor (%rax), %ymm6, %ymm11
  10920. vpxor 128(%rcx), %ymm7, %ymm12
  10921. vpxor 64(%rdi), %ymm8, %ymm13
  10922. vpxor -64(%rcx), %ymm9, %ymm14
  10923. vpsrlq $20, %ymm11, %ymm0
  10924. vpsrlq $21, %ymm12, %ymm1
  10925. vpsrlq $43, %ymm13, %ymm2
  10926. vpsrlq $50, %ymm14, %ymm3
  10927. vpsllq $44, %ymm11, %ymm11
  10928. vpsllq $43, %ymm12, %ymm12
  10929. vpsllq $21, %ymm13, %ymm13
  10930. vpsllq $14, %ymm14, %ymm14
  10931. vpor %ymm0, %ymm11, %ymm11
  10932. vpor %ymm1, %ymm12, %ymm12
  10933. vpor %ymm2, %ymm13, %ymm13
  10934. vpor %ymm3, %ymm14, %ymm14
  10935. vpandn %ymm12, %ymm11, %ymm15
  10936. vpandn %ymm13, %ymm12, %ymm1
  10937. vpandn %ymm14, %ymm13, %ymm2
  10938. vpandn %ymm10, %ymm14, %ymm3
  10939. vpandn %ymm11, %ymm10, %ymm4
  10940. vpxor %ymm10, %ymm15, %ymm15
  10941. vpxor %ymm11, %ymm1, %ymm1
  10942. vpxor %ymm12, %ymm2, %ymm2
  10943. # XOR in constant
  10944. vpxor 192(%rdx), %ymm15, %ymm15
  10945. vpxor %ymm13, %ymm3, %ymm3
  10946. vpxor %ymm14, %ymm4, %ymm4
  10947. vmovdqu %ymm1, (%rax)
  10948. vmovdqu %ymm2, 128(%rcx)
  10949. vmovdqu %ymm3, 64(%rdi)
  10950. vmovdqu %ymm4, -64(%rcx)
  10951. # Row 1
  10952. vpxor -96(%rdi), %ymm8, %ymm10
  10953. vpxor 32(%rax), %ymm9, %ymm11
  10954. vpxor (%rcx), %ymm5, %ymm12
  10955. vpxor 96(%rdi), %ymm6, %ymm13
  10956. vpxor -32(%rcx), %ymm7, %ymm14
  10957. vpsrlq $36, %ymm10, %ymm0
  10958. vpsrlq $44, %ymm11, %ymm1
  10959. vpsrlq $61, %ymm12, %ymm2
  10960. vpsrlq $19, %ymm13, %ymm3
  10961. vpsrlq $3, %ymm14, %ymm4
  10962. vpsllq $28, %ymm10, %ymm10
  10963. vpsllq $20, %ymm11, %ymm11
  10964. vpsllq $3, %ymm12, %ymm12
  10965. vpsllq $45, %ymm13, %ymm13
  10966. vpsllq $61, %ymm14, %ymm14
  10967. vpor %ymm0, %ymm10, %ymm10
  10968. vpor %ymm1, %ymm11, %ymm11
  10969. vpor %ymm2, %ymm12, %ymm12
  10970. vpor %ymm3, %ymm13, %ymm13
  10971. vpor %ymm4, %ymm14, %ymm14
  10972. vpandn %ymm12, %ymm11, %ymm0
  10973. vpandn %ymm13, %ymm12, %ymm1
  10974. vpandn %ymm14, %ymm13, %ymm2
  10975. vpandn %ymm10, %ymm14, %ymm3
  10976. vpandn %ymm11, %ymm10, %ymm4
  10977. vpxor %ymm10, %ymm0, %ymm0
  10978. vpxor %ymm11, %ymm1, %ymm1
  10979. vpxor %ymm12, %ymm2, %ymm2
  10980. vpxor %ymm13, %ymm3, %ymm3
  10981. vpxor %ymm14, %ymm4, %ymm4
  10982. vmovdqu %ymm0, -96(%rdi)
  10983. vmovdqu %ymm1, 32(%rax)
  10984. vmovdqu %ymm2, (%rcx)
  10985. vmovdqu %ymm3, 96(%rdi)
  10986. vmovdqu %ymm4, -32(%rcx)
  10987. # Row 2
  10988. vpxor -64(%rdi), %ymm6, %ymm10
  10989. vpxor 64(%rax), %ymm7, %ymm11
  10990. vpxor 32(%rcx), %ymm8, %ymm12
  10991. vpxor 128(%rdi), %ymm9, %ymm13
  10992. vpxor 96(%rax), %ymm5, %ymm14
  10993. vpsrlq $63, %ymm10, %ymm0
  10994. vpsrlq $58, %ymm11, %ymm1
  10995. vpsrlq $39, %ymm12, %ymm2
  10996. vpsrlq $56, %ymm13, %ymm3
  10997. vpsrlq $46, %ymm14, %ymm4
  10998. vpaddq %ymm10, %ymm10, %ymm10
  10999. vpsllq $6, %ymm11, %ymm11
  11000. vpsllq $25, %ymm12, %ymm12
  11001. vpsllq $8, %ymm13, %ymm13
  11002. vpsllq $18, %ymm14, %ymm14
  11003. vpor %ymm0, %ymm10, %ymm10
  11004. vpor %ymm1, %ymm11, %ymm11
  11005. vpor %ymm2, %ymm12, %ymm12
  11006. vpor %ymm3, %ymm13, %ymm13
  11007. vpor %ymm4, %ymm14, %ymm14
  11008. vpandn %ymm12, %ymm11, %ymm0
  11009. vpandn %ymm13, %ymm12, %ymm1
  11010. vpandn %ymm14, %ymm13, %ymm2
  11011. vpandn %ymm10, %ymm14, %ymm3
  11012. vpandn %ymm11, %ymm10, %ymm4
  11013. vpxor %ymm10, %ymm0, %ymm0
  11014. vpxor %ymm11, %ymm1, %ymm1
  11015. vpxor %ymm12, %ymm2, %ymm2
  11016. vpxor %ymm13, %ymm3, %ymm3
  11017. vpxor %ymm14, %ymm4, %ymm4
  11018. vmovdqu %ymm0, -64(%rdi)
  11019. vmovdqu %ymm1, 64(%rax)
  11020. vmovdqu %ymm2, 32(%rcx)
  11021. vmovdqu %ymm3, 128(%rdi)
  11022. vmovdqu %ymm4, 96(%rax)
  11023. # Row 3
  11024. vpxor -32(%rdi), %ymm9, %ymm10
  11025. vpxor -64(%rax), %ymm5, %ymm11
  11026. vpxor 64(%rcx), %ymm6, %ymm12
  11027. vpxor -96(%rax), %ymm7, %ymm13
  11028. vpxor 128(%rax), %ymm8, %ymm14
  11029. vpsrlq $37, %ymm10, %ymm0
  11030. vpsrlq $28, %ymm11, %ymm1
  11031. vpsrlq $54, %ymm12, %ymm2
  11032. vpsrlq $49, %ymm13, %ymm3
  11033. vpsrlq $8, %ymm14, %ymm4
  11034. vpsllq $27, %ymm10, %ymm10
  11035. vpsllq $36, %ymm11, %ymm11
  11036. vpsllq $10, %ymm12, %ymm12
  11037. vpsllq $15, %ymm13, %ymm13
  11038. vpsllq $56, %ymm14, %ymm14
  11039. vpor %ymm0, %ymm10, %ymm10
  11040. vpor %ymm1, %ymm11, %ymm11
  11041. vpor %ymm2, %ymm12, %ymm12
  11042. vpor %ymm3, %ymm13, %ymm13
  11043. vpor %ymm4, %ymm14, %ymm14
  11044. vpandn %ymm12, %ymm11, %ymm0
  11045. vpandn %ymm13, %ymm12, %ymm1
  11046. vpandn %ymm14, %ymm13, %ymm2
  11047. vpandn %ymm10, %ymm14, %ymm3
  11048. vpandn %ymm11, %ymm10, %ymm4
  11049. vpxor %ymm10, %ymm0, %ymm0
  11050. vpxor %ymm11, %ymm1, %ymm1
  11051. vpxor %ymm12, %ymm2, %ymm2
  11052. vpxor %ymm13, %ymm3, %ymm3
  11053. vpxor %ymm14, %ymm4, %ymm4
  11054. vmovdqu %ymm0, -32(%rdi)
  11055. vmovdqu %ymm1, -64(%rax)
  11056. vmovdqu %ymm2, 64(%rcx)
  11057. vmovdqu %ymm3, -96(%rax)
  11058. vmovdqu %ymm4, 128(%rax)
  11059. # Row 4
  11060. vpxor (%rdi), %ymm7, %ymm10
  11061. vpxor -32(%rax), %ymm8, %ymm11
  11062. vpxor 96(%rcx), %ymm9, %ymm12
  11063. vpxor 32(%rdi), %ymm5, %ymm13
  11064. vpxor -96(%rcx), %ymm6, %ymm14
  11065. vpsrlq $2, %ymm10, %ymm0
  11066. vpsrlq $9, %ymm11, %ymm1
  11067. vpsrlq $25, %ymm12, %ymm2
  11068. vpsrlq $23, %ymm13, %ymm3
  11069. vpsrlq $62, %ymm14, %ymm4
  11070. vpsllq $62, %ymm10, %ymm10
  11071. vpsllq $55, %ymm11, %ymm11
  11072. vpsllq $39, %ymm12, %ymm12
  11073. vpsllq $41, %ymm13, %ymm13
  11074. vpsllq $2, %ymm14, %ymm14
  11075. vpor %ymm0, %ymm10, %ymm10
  11076. vpor %ymm1, %ymm11, %ymm11
  11077. vpor %ymm2, %ymm12, %ymm12
  11078. vpor %ymm3, %ymm13, %ymm13
  11079. vpor %ymm4, %ymm14, %ymm14
  11080. vpandn %ymm12, %ymm11, %ymm0
  11081. vpandn %ymm13, %ymm12, %ymm1
  11082. vpandn %ymm14, %ymm13, %ymm2
  11083. vpandn %ymm10, %ymm14, %ymm3
  11084. vpandn %ymm11, %ymm10, %ymm4
  11085. vpxor %ymm10, %ymm0, %ymm0
  11086. vpxor %ymm11, %ymm1, %ymm1
  11087. vpxor %ymm12, %ymm2, %ymm2
  11088. vpxor %ymm13, %ymm3, %ymm3
  11089. vpxor %ymm14, %ymm4, %ymm4
  11090. vmovdqu %ymm0, (%rdi)
  11091. vmovdqu %ymm1, -32(%rax)
  11092. vmovdqu %ymm2, 96(%rcx)
  11093. vmovdqu %ymm3, 32(%rdi)
  11094. vmovdqu %ymm4, -96(%rcx)
  11095. # Round 7
  11096. # Calc b[0..4]
  11097. vpxor %ymm15, %ymm0, %ymm10
  11098. vpxor -96(%rdi), %ymm10, %ymm10
  11099. vpxor -64(%rdi), %ymm10, %ymm10
  11100. vpxor -32(%rdi), %ymm10, %ymm10
  11101. vpxor 64(%rdi), %ymm3, %ymm13
  11102. vpxor 96(%rdi), %ymm13, %ymm13
  11103. vpxor 128(%rdi), %ymm13, %ymm13
  11104. vpxor -96(%rax), %ymm13, %ymm13
  11105. vpxor -64(%rax), %ymm1, %ymm11
  11106. vpxor (%rax), %ymm11, %ymm11
  11107. vpxor 32(%rax), %ymm11, %ymm11
  11108. vpxor 64(%rax), %ymm11, %ymm11
  11109. vpxor 96(%rax), %ymm4, %ymm14
  11110. vpxor 128(%rax), %ymm14, %ymm14
  11111. vpxor -64(%rcx), %ymm14, %ymm14
  11112. vpxor -32(%rcx), %ymm14, %ymm14
  11113. vpxor (%rcx), %ymm2, %ymm12
  11114. vpxor 32(%rcx), %ymm12, %ymm12
  11115. vpxor 64(%rcx), %ymm12, %ymm12
  11116. vpxor 128(%rcx), %ymm12, %ymm12
  11117. # Calc t[0..4]
  11118. vpsrlq $63, %ymm11, %ymm0
  11119. vpsrlq $63, %ymm12, %ymm1
  11120. vpsrlq $63, %ymm13, %ymm2
  11121. vpsrlq $63, %ymm14, %ymm3
  11122. vpsrlq $63, %ymm10, %ymm4
  11123. vpaddq %ymm11, %ymm11, %ymm5
  11124. vpaddq %ymm12, %ymm12, %ymm6
  11125. vpaddq %ymm13, %ymm13, %ymm7
  11126. vpaddq %ymm14, %ymm14, %ymm8
  11127. vpaddq %ymm10, %ymm10, %ymm9
  11128. vpor %ymm0, %ymm5, %ymm5
  11129. vpor %ymm1, %ymm6, %ymm6
  11130. vpor %ymm2, %ymm7, %ymm7
  11131. vpor %ymm3, %ymm8, %ymm8
  11132. vpor %ymm4, %ymm9, %ymm9
  11133. vpxor %ymm14, %ymm5, %ymm5
  11134. vpxor %ymm10, %ymm6, %ymm6
  11135. vpxor %ymm11, %ymm7, %ymm7
  11136. vpxor %ymm12, %ymm8, %ymm8
  11137. vpxor %ymm13, %ymm9, %ymm9
  11138. # Row Mix
  11139. # Row 0
  11140. vpxor %ymm15, %ymm5, %ymm10
  11141. vpxor 32(%rax), %ymm6, %ymm11
  11142. vpxor 32(%rcx), %ymm7, %ymm12
  11143. vpxor -96(%rax), %ymm8, %ymm13
  11144. vpxor -96(%rcx), %ymm9, %ymm14
  11145. vpsrlq $20, %ymm11, %ymm0
  11146. vpsrlq $21, %ymm12, %ymm1
  11147. vpsrlq $43, %ymm13, %ymm2
  11148. vpsrlq $50, %ymm14, %ymm3
  11149. vpsllq $44, %ymm11, %ymm11
  11150. vpsllq $43, %ymm12, %ymm12
  11151. vpsllq $21, %ymm13, %ymm13
  11152. vpsllq $14, %ymm14, %ymm14
  11153. vpor %ymm0, %ymm11, %ymm11
  11154. vpor %ymm1, %ymm12, %ymm12
  11155. vpor %ymm2, %ymm13, %ymm13
  11156. vpor %ymm3, %ymm14, %ymm14
  11157. vpandn %ymm12, %ymm11, %ymm15
  11158. vpandn %ymm13, %ymm12, %ymm1
  11159. vpandn %ymm14, %ymm13, %ymm2
  11160. vpandn %ymm10, %ymm14, %ymm3
  11161. vpandn %ymm11, %ymm10, %ymm4
  11162. vpxor %ymm10, %ymm15, %ymm15
  11163. vpxor %ymm11, %ymm1, %ymm1
  11164. vpxor %ymm12, %ymm2, %ymm2
  11165. # XOR in constant
  11166. vpxor 224(%rdx), %ymm15, %ymm15
  11167. vpxor %ymm13, %ymm3, %ymm3
  11168. vpxor %ymm14, %ymm4, %ymm4
  11169. vmovdqu %ymm1, 32(%rax)
  11170. vmovdqu %ymm2, 32(%rcx)
  11171. vmovdqu %ymm3, -96(%rax)
  11172. vmovdqu %ymm4, -96(%rcx)
  11173. # Row 1
  11174. vpxor 64(%rdi), %ymm8, %ymm10
  11175. vpxor -32(%rcx), %ymm9, %ymm11
  11176. vpxor -64(%rdi), %ymm5, %ymm12
  11177. vpxor -64(%rax), %ymm6, %ymm13
  11178. vpxor 96(%rcx), %ymm7, %ymm14
  11179. vpsrlq $36, %ymm10, %ymm0
  11180. vpsrlq $44, %ymm11, %ymm1
  11181. vpsrlq $61, %ymm12, %ymm2
  11182. vpsrlq $19, %ymm13, %ymm3
  11183. vpsrlq $3, %ymm14, %ymm4
  11184. vpsllq $28, %ymm10, %ymm10
  11185. vpsllq $20, %ymm11, %ymm11
  11186. vpsllq $3, %ymm12, %ymm12
  11187. vpsllq $45, %ymm13, %ymm13
  11188. vpsllq $61, %ymm14, %ymm14
  11189. vpor %ymm0, %ymm10, %ymm10
  11190. vpor %ymm1, %ymm11, %ymm11
  11191. vpor %ymm2, %ymm12, %ymm12
  11192. vpor %ymm3, %ymm13, %ymm13
  11193. vpor %ymm4, %ymm14, %ymm14
  11194. vpandn %ymm12, %ymm11, %ymm0
  11195. vpandn %ymm13, %ymm12, %ymm1
  11196. vpandn %ymm14, %ymm13, %ymm2
  11197. vpandn %ymm10, %ymm14, %ymm3
  11198. vpandn %ymm11, %ymm10, %ymm4
  11199. vpxor %ymm10, %ymm0, %ymm0
  11200. vpxor %ymm11, %ymm1, %ymm1
  11201. vpxor %ymm12, %ymm2, %ymm2
  11202. vpxor %ymm13, %ymm3, %ymm3
  11203. vpxor %ymm14, %ymm4, %ymm4
  11204. vmovdqu %ymm0, 64(%rdi)
  11205. vmovdqu %ymm1, -32(%rcx)
  11206. vmovdqu %ymm2, -64(%rdi)
  11207. vmovdqu %ymm3, -64(%rax)
  11208. vmovdqu %ymm4, 96(%rcx)
  11209. # Row 2
  11210. vpxor (%rax), %ymm6, %ymm10
  11211. vpxor (%rcx), %ymm7, %ymm11
  11212. vpxor 128(%rdi), %ymm8, %ymm12
  11213. vpxor 128(%rax), %ymm9, %ymm13
  11214. vpxor (%rdi), %ymm5, %ymm14
  11215. vpsrlq $63, %ymm10, %ymm0
  11216. vpsrlq $58, %ymm11, %ymm1
  11217. vpsrlq $39, %ymm12, %ymm2
  11218. vpsrlq $56, %ymm13, %ymm3
  11219. vpsrlq $46, %ymm14, %ymm4
  11220. vpaddq %ymm10, %ymm10, %ymm10
  11221. vpsllq $6, %ymm11, %ymm11
  11222. vpsllq $25, %ymm12, %ymm12
  11223. vpsllq $8, %ymm13, %ymm13
  11224. vpsllq $18, %ymm14, %ymm14
  11225. vpor %ymm0, %ymm10, %ymm10
  11226. vpor %ymm1, %ymm11, %ymm11
  11227. vpor %ymm2, %ymm12, %ymm12
  11228. vpor %ymm3, %ymm13, %ymm13
  11229. vpor %ymm4, %ymm14, %ymm14
  11230. vpandn %ymm12, %ymm11, %ymm0
  11231. vpandn %ymm13, %ymm12, %ymm1
  11232. vpandn %ymm14, %ymm13, %ymm2
  11233. vpandn %ymm10, %ymm14, %ymm3
  11234. vpandn %ymm11, %ymm10, %ymm4
  11235. vpxor %ymm10, %ymm0, %ymm0
  11236. vpxor %ymm11, %ymm1, %ymm1
  11237. vpxor %ymm12, %ymm2, %ymm2
  11238. vpxor %ymm13, %ymm3, %ymm3
  11239. vpxor %ymm14, %ymm4, %ymm4
  11240. vmovdqu %ymm0, (%rax)
  11241. vmovdqu %ymm1, (%rcx)
  11242. vmovdqu %ymm2, 128(%rdi)
  11243. vmovdqu %ymm3, 128(%rax)
  11244. vmovdqu %ymm4, (%rdi)
  11245. # Row 3
  11246. vpxor -64(%rcx), %ymm9, %ymm10
  11247. vpxor -96(%rdi), %ymm5, %ymm11
  11248. vpxor 64(%rax), %ymm6, %ymm12
  11249. vpxor 64(%rcx), %ymm7, %ymm13
  11250. vpxor 32(%rdi), %ymm8, %ymm14
  11251. vpsrlq $37, %ymm10, %ymm0
  11252. vpsrlq $28, %ymm11, %ymm1
  11253. vpsrlq $54, %ymm12, %ymm2
  11254. vpsrlq $49, %ymm13, %ymm3
  11255. vpsrlq $8, %ymm14, %ymm4
  11256. vpsllq $27, %ymm10, %ymm10
  11257. vpsllq $36, %ymm11, %ymm11
  11258. vpsllq $10, %ymm12, %ymm12
  11259. vpsllq $15, %ymm13, %ymm13
  11260. vpsllq $56, %ymm14, %ymm14
  11261. vpor %ymm0, %ymm10, %ymm10
  11262. vpor %ymm1, %ymm11, %ymm11
  11263. vpor %ymm2, %ymm12, %ymm12
  11264. vpor %ymm3, %ymm13, %ymm13
  11265. vpor %ymm4, %ymm14, %ymm14
  11266. vpandn %ymm12, %ymm11, %ymm0
  11267. vpandn %ymm13, %ymm12, %ymm1
  11268. vpandn %ymm14, %ymm13, %ymm2
  11269. vpandn %ymm10, %ymm14, %ymm3
  11270. vpandn %ymm11, %ymm10, %ymm4
  11271. vpxor %ymm10, %ymm0, %ymm0
  11272. vpxor %ymm11, %ymm1, %ymm1
  11273. vpxor %ymm12, %ymm2, %ymm2
  11274. vpxor %ymm13, %ymm3, %ymm3
  11275. vpxor %ymm14, %ymm4, %ymm4
  11276. vmovdqu %ymm0, -64(%rcx)
  11277. vmovdqu %ymm1, -96(%rdi)
  11278. vmovdqu %ymm2, 64(%rax)
  11279. vmovdqu %ymm3, 64(%rcx)
  11280. vmovdqu %ymm4, 32(%rdi)
  11281. # Row 4
  11282. vpxor 128(%rcx), %ymm7, %ymm10
  11283. vpxor 96(%rdi), %ymm8, %ymm11
  11284. vpxor 96(%rax), %ymm9, %ymm12
  11285. vpxor -32(%rdi), %ymm5, %ymm13
  11286. vpxor -32(%rax), %ymm6, %ymm14
  11287. vpsrlq $2, %ymm10, %ymm0
  11288. vpsrlq $9, %ymm11, %ymm1
  11289. vpsrlq $25, %ymm12, %ymm2
  11290. vpsrlq $23, %ymm13, %ymm3
  11291. vpsrlq $62, %ymm14, %ymm4
  11292. vpsllq $62, %ymm10, %ymm10
  11293. vpsllq $55, %ymm11, %ymm11
  11294. vpsllq $39, %ymm12, %ymm12
  11295. vpsllq $41, %ymm13, %ymm13
  11296. vpsllq $2, %ymm14, %ymm14
  11297. vpor %ymm0, %ymm10, %ymm10
  11298. vpor %ymm1, %ymm11, %ymm11
  11299. vpor %ymm2, %ymm12, %ymm12
  11300. vpor %ymm3, %ymm13, %ymm13
  11301. vpor %ymm4, %ymm14, %ymm14
  11302. vpandn %ymm12, %ymm11, %ymm0
  11303. vpandn %ymm13, %ymm12, %ymm1
  11304. vpandn %ymm14, %ymm13, %ymm2
  11305. vpandn %ymm10, %ymm14, %ymm3
  11306. vpandn %ymm11, %ymm10, %ymm4
  11307. vpxor %ymm10, %ymm0, %ymm0
  11308. vpxor %ymm11, %ymm1, %ymm1
  11309. vpxor %ymm12, %ymm2, %ymm2
  11310. vpxor %ymm13, %ymm3, %ymm3
  11311. vpxor %ymm14, %ymm4, %ymm4
  11312. vmovdqu %ymm0, 128(%rcx)
  11313. vmovdqu %ymm1, 96(%rdi)
  11314. vmovdqu %ymm2, 96(%rax)
  11315. vmovdqu %ymm3, -32(%rdi)
  11316. vmovdqu %ymm4, -32(%rax)
  11317. # Round 8
  11318. # Calc b[0..4]
  11319. vpxor %ymm15, %ymm0, %ymm10
  11320. vpxor -96(%rdi), %ymm1, %ymm11
  11321. vpxor -64(%rdi), %ymm2, %ymm12
  11322. vpxor (%rdi), %ymm4, %ymm14
  11323. vpxor 32(%rdi), %ymm14, %ymm14
  11324. vpxor 64(%rdi), %ymm10, %ymm10
  11325. vpxor 128(%rdi), %ymm12, %ymm12
  11326. vpxor -96(%rax), %ymm3, %ymm13
  11327. vpxor -64(%rax), %ymm13, %ymm13
  11328. vpxor (%rax), %ymm10, %ymm10
  11329. vpxor 32(%rax), %ymm11, %ymm11
  11330. vpxor 64(%rax), %ymm12, %ymm12
  11331. vpxor 128(%rax), %ymm13, %ymm13
  11332. vpxor -96(%rcx), %ymm14, %ymm14
  11333. vpxor -64(%rcx), %ymm10, %ymm10
  11334. vpxor -32(%rcx), %ymm11, %ymm11
  11335. vpxor (%rcx), %ymm11, %ymm11
  11336. vpxor 32(%rcx), %ymm12, %ymm12
  11337. vpxor 64(%rcx), %ymm13, %ymm13
  11338. vpxor 96(%rcx), %ymm14, %ymm14
  11339. # Calc t[0..4]
  11340. vpsrlq $63, %ymm11, %ymm0
  11341. vpsrlq $63, %ymm12, %ymm1
  11342. vpsrlq $63, %ymm13, %ymm2
  11343. vpsrlq $63, %ymm14, %ymm3
  11344. vpsrlq $63, %ymm10, %ymm4
  11345. vpaddq %ymm11, %ymm11, %ymm5
  11346. vpaddq %ymm12, %ymm12, %ymm6
  11347. vpaddq %ymm13, %ymm13, %ymm7
  11348. vpaddq %ymm14, %ymm14, %ymm8
  11349. vpaddq %ymm10, %ymm10, %ymm9
  11350. vpor %ymm0, %ymm5, %ymm5
  11351. vpor %ymm1, %ymm6, %ymm6
  11352. vpor %ymm2, %ymm7, %ymm7
  11353. vpor %ymm3, %ymm8, %ymm8
  11354. vpor %ymm4, %ymm9, %ymm9
  11355. vpxor %ymm14, %ymm5, %ymm5
  11356. vpxor %ymm10, %ymm6, %ymm6
  11357. vpxor %ymm11, %ymm7, %ymm7
  11358. vpxor %ymm12, %ymm8, %ymm8
  11359. vpxor %ymm13, %ymm9, %ymm9
  11360. # Row Mix
  11361. # Row 0
  11362. vpxor %ymm15, %ymm5, %ymm10
  11363. vpxor -32(%rcx), %ymm6, %ymm11
  11364. vpxor 128(%rdi), %ymm7, %ymm12
  11365. vpxor 64(%rcx), %ymm8, %ymm13
  11366. vpxor -32(%rax), %ymm9, %ymm14
  11367. vpsrlq $20, %ymm11, %ymm0
  11368. vpsrlq $21, %ymm12, %ymm1
  11369. vpsrlq $43, %ymm13, %ymm2
  11370. vpsrlq $50, %ymm14, %ymm3
  11371. vpsllq $44, %ymm11, %ymm11
  11372. vpsllq $43, %ymm12, %ymm12
  11373. vpsllq $21, %ymm13, %ymm13
  11374. vpsllq $14, %ymm14, %ymm14
  11375. vpor %ymm0, %ymm11, %ymm11
  11376. vpor %ymm1, %ymm12, %ymm12
  11377. vpor %ymm2, %ymm13, %ymm13
  11378. vpor %ymm3, %ymm14, %ymm14
  11379. vpandn %ymm12, %ymm11, %ymm15
  11380. vpandn %ymm13, %ymm12, %ymm1
  11381. vpandn %ymm14, %ymm13, %ymm2
  11382. vpandn %ymm10, %ymm14, %ymm3
  11383. vpandn %ymm11, %ymm10, %ymm4
  11384. vpxor %ymm10, %ymm15, %ymm15
  11385. vpxor %ymm11, %ymm1, %ymm1
  11386. vpxor %ymm12, %ymm2, %ymm2
  11387. # XOR in constant
  11388. vpxor 256(%rdx), %ymm15, %ymm15
  11389. vpxor %ymm13, %ymm3, %ymm3
  11390. vpxor %ymm14, %ymm4, %ymm4
  11391. vmovdqu %ymm1, -32(%rcx)
  11392. vmovdqu %ymm2, 128(%rdi)
  11393. vmovdqu %ymm3, 64(%rcx)
  11394. vmovdqu %ymm4, -32(%rax)
  11395. # Row 1
  11396. vpxor -96(%rax), %ymm8, %ymm10
  11397. vpxor 96(%rcx), %ymm9, %ymm11
  11398. vpxor (%rax), %ymm5, %ymm12
  11399. vpxor -96(%rdi), %ymm6, %ymm13
  11400. vpxor 96(%rax), %ymm7, %ymm14
  11401. vpsrlq $36, %ymm10, %ymm0
  11402. vpsrlq $44, %ymm11, %ymm1
  11403. vpsrlq $61, %ymm12, %ymm2
  11404. vpsrlq $19, %ymm13, %ymm3
  11405. vpsrlq $3, %ymm14, %ymm4
  11406. vpsllq $28, %ymm10, %ymm10
  11407. vpsllq $20, %ymm11, %ymm11
  11408. vpsllq $3, %ymm12, %ymm12
  11409. vpsllq $45, %ymm13, %ymm13
  11410. vpsllq $61, %ymm14, %ymm14
  11411. vpor %ymm0, %ymm10, %ymm10
  11412. vpor %ymm1, %ymm11, %ymm11
  11413. vpor %ymm2, %ymm12, %ymm12
  11414. vpor %ymm3, %ymm13, %ymm13
  11415. vpor %ymm4, %ymm14, %ymm14
  11416. vpandn %ymm12, %ymm11, %ymm0
  11417. vpandn %ymm13, %ymm12, %ymm1
  11418. vpandn %ymm14, %ymm13, %ymm2
  11419. vpandn %ymm10, %ymm14, %ymm3
  11420. vpandn %ymm11, %ymm10, %ymm4
  11421. vpxor %ymm10, %ymm0, %ymm0
  11422. vpxor %ymm11, %ymm1, %ymm1
  11423. vpxor %ymm12, %ymm2, %ymm2
  11424. vpxor %ymm13, %ymm3, %ymm3
  11425. vpxor %ymm14, %ymm4, %ymm4
  11426. vmovdqu %ymm0, -96(%rax)
  11427. vmovdqu %ymm1, 96(%rcx)
  11428. vmovdqu %ymm2, (%rax)
  11429. vmovdqu %ymm3, -96(%rdi)
  11430. vmovdqu %ymm4, 96(%rax)
  11431. # Row 2
  11432. vpxor 32(%rax), %ymm6, %ymm10
  11433. vpxor -64(%rdi), %ymm7, %ymm11
  11434. vpxor 128(%rax), %ymm8, %ymm12
  11435. vpxor 32(%rdi), %ymm9, %ymm13
  11436. vpxor 128(%rcx), %ymm5, %ymm14
  11437. vpsrlq $63, %ymm10, %ymm0
  11438. vpsrlq $58, %ymm11, %ymm1
  11439. vpsrlq $39, %ymm12, %ymm2
  11440. vpsrlq $56, %ymm13, %ymm3
  11441. vpsrlq $46, %ymm14, %ymm4
  11442. vpaddq %ymm10, %ymm10, %ymm10
  11443. vpsllq $6, %ymm11, %ymm11
  11444. vpsllq $25, %ymm12, %ymm12
  11445. vpsllq $8, %ymm13, %ymm13
  11446. vpsllq $18, %ymm14, %ymm14
  11447. vpor %ymm0, %ymm10, %ymm10
  11448. vpor %ymm1, %ymm11, %ymm11
  11449. vpor %ymm2, %ymm12, %ymm12
  11450. vpor %ymm3, %ymm13, %ymm13
  11451. vpor %ymm4, %ymm14, %ymm14
  11452. vpandn %ymm12, %ymm11, %ymm0
  11453. vpandn %ymm13, %ymm12, %ymm1
  11454. vpandn %ymm14, %ymm13, %ymm2
  11455. vpandn %ymm10, %ymm14, %ymm3
  11456. vpandn %ymm11, %ymm10, %ymm4
  11457. vpxor %ymm10, %ymm0, %ymm0
  11458. vpxor %ymm11, %ymm1, %ymm1
  11459. vpxor %ymm12, %ymm2, %ymm2
  11460. vpxor %ymm13, %ymm3, %ymm3
  11461. vpxor %ymm14, %ymm4, %ymm4
  11462. vmovdqu %ymm0, 32(%rax)
  11463. vmovdqu %ymm1, -64(%rdi)
  11464. vmovdqu %ymm2, 128(%rax)
  11465. vmovdqu %ymm3, 32(%rdi)
  11466. vmovdqu %ymm4, 128(%rcx)
  11467. # Row 3
  11468. vpxor -96(%rcx), %ymm9, %ymm10
  11469. vpxor 64(%rdi), %ymm5, %ymm11
  11470. vpxor (%rcx), %ymm6, %ymm12
  11471. vpxor 64(%rax), %ymm7, %ymm13
  11472. vpxor -32(%rdi), %ymm8, %ymm14
  11473. vpsrlq $37, %ymm10, %ymm0
  11474. vpsrlq $28, %ymm11, %ymm1
  11475. vpsrlq $54, %ymm12, %ymm2
  11476. vpsrlq $49, %ymm13, %ymm3
  11477. vpsrlq $8, %ymm14, %ymm4
  11478. vpsllq $27, %ymm10, %ymm10
  11479. vpsllq $36, %ymm11, %ymm11
  11480. vpsllq $10, %ymm12, %ymm12
  11481. vpsllq $15, %ymm13, %ymm13
  11482. vpsllq $56, %ymm14, %ymm14
  11483. vpor %ymm0, %ymm10, %ymm10
  11484. vpor %ymm1, %ymm11, %ymm11
  11485. vpor %ymm2, %ymm12, %ymm12
  11486. vpor %ymm3, %ymm13, %ymm13
  11487. vpor %ymm4, %ymm14, %ymm14
  11488. vpandn %ymm12, %ymm11, %ymm0
  11489. vpandn %ymm13, %ymm12, %ymm1
  11490. vpandn %ymm14, %ymm13, %ymm2
  11491. vpandn %ymm10, %ymm14, %ymm3
  11492. vpandn %ymm11, %ymm10, %ymm4
  11493. vpxor %ymm10, %ymm0, %ymm0
  11494. vpxor %ymm11, %ymm1, %ymm1
  11495. vpxor %ymm12, %ymm2, %ymm2
  11496. vpxor %ymm13, %ymm3, %ymm3
  11497. vpxor %ymm14, %ymm4, %ymm4
  11498. vmovdqu %ymm0, -96(%rcx)
  11499. vmovdqu %ymm1, 64(%rdi)
  11500. vmovdqu %ymm2, (%rcx)
  11501. vmovdqu %ymm3, 64(%rax)
  11502. vmovdqu %ymm4, -32(%rdi)
  11503. # Row 4
  11504. vpxor 32(%rcx), %ymm7, %ymm10
  11505. vpxor -64(%rax), %ymm8, %ymm11
  11506. vpxor (%rdi), %ymm9, %ymm12
  11507. vpxor -64(%rcx), %ymm5, %ymm13
  11508. vpxor 96(%rdi), %ymm6, %ymm14
  11509. vpsrlq $2, %ymm10, %ymm0
  11510. vpsrlq $9, %ymm11, %ymm1
  11511. vpsrlq $25, %ymm12, %ymm2
  11512. vpsrlq $23, %ymm13, %ymm3
  11513. vpsrlq $62, %ymm14, %ymm4
  11514. vpsllq $62, %ymm10, %ymm10
  11515. vpsllq $55, %ymm11, %ymm11
  11516. vpsllq $39, %ymm12, %ymm12
  11517. vpsllq $41, %ymm13, %ymm13
  11518. vpsllq $2, %ymm14, %ymm14
  11519. vpor %ymm0, %ymm10, %ymm10
  11520. vpor %ymm1, %ymm11, %ymm11
  11521. vpor %ymm2, %ymm12, %ymm12
  11522. vpor %ymm3, %ymm13, %ymm13
  11523. vpor %ymm4, %ymm14, %ymm14
  11524. vpandn %ymm12, %ymm11, %ymm0
  11525. vpandn %ymm13, %ymm12, %ymm1
  11526. vpandn %ymm14, %ymm13, %ymm2
  11527. vpandn %ymm10, %ymm14, %ymm3
  11528. vpandn %ymm11, %ymm10, %ymm4
  11529. vpxor %ymm10, %ymm0, %ymm0
  11530. vpxor %ymm11, %ymm1, %ymm1
  11531. vpxor %ymm12, %ymm2, %ymm2
  11532. vpxor %ymm13, %ymm3, %ymm3
  11533. vpxor %ymm14, %ymm4, %ymm4
  11534. vmovdqu %ymm0, 32(%rcx)
  11535. vmovdqu %ymm1, -64(%rax)
  11536. vmovdqu %ymm2, (%rdi)
  11537. vmovdqu %ymm3, -64(%rcx)
  11538. vmovdqu %ymm4, 96(%rdi)
  11539. # Round 9
  11540. # Calc b[0..4]
  11541. vpxor %ymm15, %ymm0, %ymm10
  11542. vpxor -96(%rdi), %ymm3, %ymm13
  11543. vpxor -64(%rdi), %ymm1, %ymm11
  11544. vpxor -32(%rdi), %ymm4, %ymm14
  11545. vpxor 32(%rdi), %ymm13, %ymm13
  11546. vpxor 64(%rdi), %ymm11, %ymm11
  11547. vpxor 128(%rdi), %ymm2, %ymm12
  11548. vpxor -96(%rax), %ymm10, %ymm10
  11549. vpxor -32(%rax), %ymm14, %ymm14
  11550. vpxor (%rax), %ymm12, %ymm12
  11551. vpxor 32(%rax), %ymm10, %ymm10
  11552. vpxor 64(%rax), %ymm13, %ymm13
  11553. vpxor 96(%rax), %ymm14, %ymm14
  11554. vpxor 128(%rax), %ymm12, %ymm12
  11555. vpxor -96(%rcx), %ymm10, %ymm10
  11556. vpxor -32(%rcx), %ymm11, %ymm11
  11557. vpxor (%rcx), %ymm12, %ymm12
  11558. vpxor 64(%rcx), %ymm13, %ymm13
  11559. vpxor 96(%rcx), %ymm11, %ymm11
  11560. vpxor 128(%rcx), %ymm14, %ymm14
  11561. # Calc t[0..4]
  11562. vpsrlq $63, %ymm11, %ymm0
  11563. vpsrlq $63, %ymm12, %ymm1
  11564. vpsrlq $63, %ymm13, %ymm2
  11565. vpsrlq $63, %ymm14, %ymm3
  11566. vpsrlq $63, %ymm10, %ymm4
  11567. vpaddq %ymm11, %ymm11, %ymm5
  11568. vpaddq %ymm12, %ymm12, %ymm6
  11569. vpaddq %ymm13, %ymm13, %ymm7
  11570. vpaddq %ymm14, %ymm14, %ymm8
  11571. vpaddq %ymm10, %ymm10, %ymm9
  11572. vpor %ymm0, %ymm5, %ymm5
  11573. vpor %ymm1, %ymm6, %ymm6
  11574. vpor %ymm2, %ymm7, %ymm7
  11575. vpor %ymm3, %ymm8, %ymm8
  11576. vpor %ymm4, %ymm9, %ymm9
  11577. vpxor %ymm14, %ymm5, %ymm5
  11578. vpxor %ymm10, %ymm6, %ymm6
  11579. vpxor %ymm11, %ymm7, %ymm7
  11580. vpxor %ymm12, %ymm8, %ymm8
  11581. vpxor %ymm13, %ymm9, %ymm9
  11582. # Row Mix
  11583. # Row 0
  11584. vpxor %ymm15, %ymm5, %ymm10
  11585. vpxor 96(%rcx), %ymm6, %ymm11
  11586. vpxor 128(%rax), %ymm7, %ymm12
  11587. vpxor 64(%rax), %ymm8, %ymm13
  11588. vpxor 96(%rdi), %ymm9, %ymm14
  11589. vpsrlq $20, %ymm11, %ymm0
  11590. vpsrlq $21, %ymm12, %ymm1
  11591. vpsrlq $43, %ymm13, %ymm2
  11592. vpsrlq $50, %ymm14, %ymm3
  11593. vpsllq $44, %ymm11, %ymm11
  11594. vpsllq $43, %ymm12, %ymm12
  11595. vpsllq $21, %ymm13, %ymm13
  11596. vpsllq $14, %ymm14, %ymm14
  11597. vpor %ymm0, %ymm11, %ymm11
  11598. vpor %ymm1, %ymm12, %ymm12
  11599. vpor %ymm2, %ymm13, %ymm13
  11600. vpor %ymm3, %ymm14, %ymm14
  11601. vpandn %ymm12, %ymm11, %ymm15
  11602. vpandn %ymm13, %ymm12, %ymm1
  11603. vpandn %ymm14, %ymm13, %ymm2
  11604. vpandn %ymm10, %ymm14, %ymm3
  11605. vpandn %ymm11, %ymm10, %ymm4
  11606. vpxor %ymm10, %ymm15, %ymm15
  11607. vpxor %ymm11, %ymm1, %ymm1
  11608. vpxor %ymm12, %ymm2, %ymm2
  11609. # XOR in constant
  11610. vpxor 288(%rdx), %ymm15, %ymm15
  11611. vpxor %ymm13, %ymm3, %ymm3
  11612. vpxor %ymm14, %ymm4, %ymm4
  11613. vmovdqu %ymm1, 96(%rcx)
  11614. vmovdqu %ymm2, 128(%rax)
  11615. vmovdqu %ymm3, 64(%rax)
  11616. vmovdqu %ymm4, 96(%rdi)
  11617. # Row 1
  11618. vpxor 64(%rcx), %ymm8, %ymm10
  11619. vpxor 96(%rax), %ymm9, %ymm11
  11620. vpxor 32(%rax), %ymm5, %ymm12
  11621. vpxor 64(%rdi), %ymm6, %ymm13
  11622. vpxor (%rdi), %ymm7, %ymm14
  11623. vpsrlq $36, %ymm10, %ymm0
  11624. vpsrlq $44, %ymm11, %ymm1
  11625. vpsrlq $61, %ymm12, %ymm2
  11626. vpsrlq $19, %ymm13, %ymm3
  11627. vpsrlq $3, %ymm14, %ymm4
  11628. vpsllq $28, %ymm10, %ymm10
  11629. vpsllq $20, %ymm11, %ymm11
  11630. vpsllq $3, %ymm12, %ymm12
  11631. vpsllq $45, %ymm13, %ymm13
  11632. vpsllq $61, %ymm14, %ymm14
  11633. vpor %ymm0, %ymm10, %ymm10
  11634. vpor %ymm1, %ymm11, %ymm11
  11635. vpor %ymm2, %ymm12, %ymm12
  11636. vpor %ymm3, %ymm13, %ymm13
  11637. vpor %ymm4, %ymm14, %ymm14
  11638. vpandn %ymm12, %ymm11, %ymm0
  11639. vpandn %ymm13, %ymm12, %ymm1
  11640. vpandn %ymm14, %ymm13, %ymm2
  11641. vpandn %ymm10, %ymm14, %ymm3
  11642. vpandn %ymm11, %ymm10, %ymm4
  11643. vpxor %ymm10, %ymm0, %ymm0
  11644. vpxor %ymm11, %ymm1, %ymm1
  11645. vpxor %ymm12, %ymm2, %ymm2
  11646. vpxor %ymm13, %ymm3, %ymm3
  11647. vpxor %ymm14, %ymm4, %ymm4
  11648. vmovdqu %ymm0, 64(%rcx)
  11649. vmovdqu %ymm1, 96(%rax)
  11650. vmovdqu %ymm2, 32(%rax)
  11651. vmovdqu %ymm3, 64(%rdi)
  11652. vmovdqu %ymm4, (%rdi)
  11653. # Row 2
  11654. vpxor -32(%rcx), %ymm6, %ymm10
  11655. vpxor (%rax), %ymm7, %ymm11
  11656. vpxor 32(%rdi), %ymm8, %ymm12
  11657. vpxor -32(%rdi), %ymm9, %ymm13
  11658. vpxor 32(%rcx), %ymm5, %ymm14
  11659. vpsrlq $63, %ymm10, %ymm0
  11660. vpsrlq $58, %ymm11, %ymm1
  11661. vpsrlq $39, %ymm12, %ymm2
  11662. vpsrlq $56, %ymm13, %ymm3
  11663. vpsrlq $46, %ymm14, %ymm4
  11664. vpaddq %ymm10, %ymm10, %ymm10
  11665. vpsllq $6, %ymm11, %ymm11
  11666. vpsllq $25, %ymm12, %ymm12
  11667. vpsllq $8, %ymm13, %ymm13
  11668. vpsllq $18, %ymm14, %ymm14
  11669. vpor %ymm0, %ymm10, %ymm10
  11670. vpor %ymm1, %ymm11, %ymm11
  11671. vpor %ymm2, %ymm12, %ymm12
  11672. vpor %ymm3, %ymm13, %ymm13
  11673. vpor %ymm4, %ymm14, %ymm14
  11674. vpandn %ymm12, %ymm11, %ymm0
  11675. vpandn %ymm13, %ymm12, %ymm1
  11676. vpandn %ymm14, %ymm13, %ymm2
  11677. vpandn %ymm10, %ymm14, %ymm3
  11678. vpandn %ymm11, %ymm10, %ymm4
  11679. vpxor %ymm10, %ymm0, %ymm0
  11680. vpxor %ymm11, %ymm1, %ymm1
  11681. vpxor %ymm12, %ymm2, %ymm2
  11682. vpxor %ymm13, %ymm3, %ymm3
  11683. vpxor %ymm14, %ymm4, %ymm4
  11684. vmovdqu %ymm0, -32(%rcx)
  11685. vmovdqu %ymm1, (%rax)
  11686. vmovdqu %ymm2, 32(%rdi)
  11687. vmovdqu %ymm3, -32(%rdi)
  11688. vmovdqu %ymm4, 32(%rcx)
  11689. # Row 3
  11690. vpxor -32(%rax), %ymm9, %ymm10
  11691. vpxor -96(%rax), %ymm5, %ymm11
  11692. vpxor -64(%rdi), %ymm6, %ymm12
  11693. vpxor (%rcx), %ymm7, %ymm13
  11694. vpxor -64(%rcx), %ymm8, %ymm14
  11695. vpsrlq $37, %ymm10, %ymm0
  11696. vpsrlq $28, %ymm11, %ymm1
  11697. vpsrlq $54, %ymm12, %ymm2
  11698. vpsrlq $49, %ymm13, %ymm3
  11699. vpsrlq $8, %ymm14, %ymm4
  11700. vpsllq $27, %ymm10, %ymm10
  11701. vpsllq $36, %ymm11, %ymm11
  11702. vpsllq $10, %ymm12, %ymm12
  11703. vpsllq $15, %ymm13, %ymm13
  11704. vpsllq $56, %ymm14, %ymm14
  11705. vpor %ymm0, %ymm10, %ymm10
  11706. vpor %ymm1, %ymm11, %ymm11
  11707. vpor %ymm2, %ymm12, %ymm12
  11708. vpor %ymm3, %ymm13, %ymm13
  11709. vpor %ymm4, %ymm14, %ymm14
  11710. vpandn %ymm12, %ymm11, %ymm0
  11711. vpandn %ymm13, %ymm12, %ymm1
  11712. vpandn %ymm14, %ymm13, %ymm2
  11713. vpandn %ymm10, %ymm14, %ymm3
  11714. vpandn %ymm11, %ymm10, %ymm4
  11715. vpxor %ymm10, %ymm0, %ymm0
  11716. vpxor %ymm11, %ymm1, %ymm1
  11717. vpxor %ymm12, %ymm2, %ymm2
  11718. vpxor %ymm13, %ymm3, %ymm3
  11719. vpxor %ymm14, %ymm4, %ymm4
  11720. vmovdqu %ymm0, -32(%rax)
  11721. vmovdqu %ymm1, -96(%rax)
  11722. vmovdqu %ymm2, -64(%rdi)
  11723. vmovdqu %ymm3, (%rcx)
  11724. vmovdqu %ymm4, -64(%rcx)
  11725. # Row 4
  11726. vpxor 128(%rdi), %ymm7, %ymm10
  11727. vpxor -96(%rdi), %ymm8, %ymm11
  11728. vpxor 128(%rcx), %ymm9, %ymm12
  11729. vpxor -96(%rcx), %ymm5, %ymm13
  11730. vpxor -64(%rax), %ymm6, %ymm14
  11731. vpsrlq $2, %ymm10, %ymm0
  11732. vpsrlq $9, %ymm11, %ymm1
  11733. vpsrlq $25, %ymm12, %ymm2
  11734. vpsrlq $23, %ymm13, %ymm3
  11735. vpsrlq $62, %ymm14, %ymm4
  11736. vpsllq $62, %ymm10, %ymm10
  11737. vpsllq $55, %ymm11, %ymm11
  11738. vpsllq $39, %ymm12, %ymm12
  11739. vpsllq $41, %ymm13, %ymm13
  11740. vpsllq $2, %ymm14, %ymm14
  11741. vpor %ymm0, %ymm10, %ymm10
  11742. vpor %ymm1, %ymm11, %ymm11
  11743. vpor %ymm2, %ymm12, %ymm12
  11744. vpor %ymm3, %ymm13, %ymm13
  11745. vpor %ymm4, %ymm14, %ymm14
  11746. vpandn %ymm12, %ymm11, %ymm0
  11747. vpandn %ymm13, %ymm12, %ymm1
  11748. vpandn %ymm14, %ymm13, %ymm2
  11749. vpandn %ymm10, %ymm14, %ymm3
  11750. vpandn %ymm11, %ymm10, %ymm4
  11751. vpxor %ymm10, %ymm0, %ymm0
  11752. vpxor %ymm11, %ymm1, %ymm1
  11753. vpxor %ymm12, %ymm2, %ymm2
  11754. vpxor %ymm13, %ymm3, %ymm3
  11755. vpxor %ymm14, %ymm4, %ymm4
  11756. vmovdqu %ymm0, 128(%rdi)
  11757. vmovdqu %ymm1, -96(%rdi)
  11758. vmovdqu %ymm2, 128(%rcx)
  11759. vmovdqu %ymm3, -96(%rcx)
  11760. vmovdqu %ymm4, -64(%rax)
  11761. # Round 10
  11762. # Calc b[0..4]
  11763. vpxor %ymm15, %ymm0, %ymm10
  11764. vpxor -64(%rdi), %ymm2, %ymm12
  11765. vpxor -32(%rdi), %ymm3, %ymm13
  11766. vpxor (%rdi), %ymm4, %ymm14
  11767. vpxor 32(%rdi), %ymm12, %ymm12
  11768. vpxor 64(%rdi), %ymm13, %ymm13
  11769. vpxor 96(%rdi), %ymm14, %ymm14
  11770. vpxor -96(%rax), %ymm1, %ymm11
  11771. vpxor -32(%rax), %ymm10, %ymm10
  11772. vpxor (%rax), %ymm11, %ymm11
  11773. vpxor 32(%rax), %ymm12, %ymm12
  11774. vpxor 64(%rax), %ymm13, %ymm13
  11775. vpxor 96(%rax), %ymm11, %ymm11
  11776. vpxor 128(%rax), %ymm12, %ymm12
  11777. vpxor -64(%rcx), %ymm14, %ymm14
  11778. vpxor -32(%rcx), %ymm10, %ymm10
  11779. vpxor (%rcx), %ymm13, %ymm13
  11780. vpxor 32(%rcx), %ymm14, %ymm14
  11781. vpxor 64(%rcx), %ymm10, %ymm10
  11782. vpxor 96(%rcx), %ymm11, %ymm11
  11783. # Calc t[0..4]
  11784. vpsrlq $63, %ymm11, %ymm0
  11785. vpsrlq $63, %ymm12, %ymm1
  11786. vpsrlq $63, %ymm13, %ymm2
  11787. vpsrlq $63, %ymm14, %ymm3
  11788. vpsrlq $63, %ymm10, %ymm4
  11789. vpaddq %ymm11, %ymm11, %ymm5
  11790. vpaddq %ymm12, %ymm12, %ymm6
  11791. vpaddq %ymm13, %ymm13, %ymm7
  11792. vpaddq %ymm14, %ymm14, %ymm8
  11793. vpaddq %ymm10, %ymm10, %ymm9
  11794. vpor %ymm0, %ymm5, %ymm5
  11795. vpor %ymm1, %ymm6, %ymm6
  11796. vpor %ymm2, %ymm7, %ymm7
  11797. vpor %ymm3, %ymm8, %ymm8
  11798. vpor %ymm4, %ymm9, %ymm9
  11799. vpxor %ymm14, %ymm5, %ymm5
  11800. vpxor %ymm10, %ymm6, %ymm6
  11801. vpxor %ymm11, %ymm7, %ymm7
  11802. vpxor %ymm12, %ymm8, %ymm8
  11803. vpxor %ymm13, %ymm9, %ymm9
  11804. # Row Mix
  11805. # Row 0
  11806. vpxor %ymm15, %ymm5, %ymm10
  11807. vpxor 96(%rax), %ymm6, %ymm11
  11808. vpxor 32(%rdi), %ymm7, %ymm12
  11809. vpxor (%rcx), %ymm8, %ymm13
  11810. vpxor -64(%rax), %ymm9, %ymm14
  11811. vpsrlq $20, %ymm11, %ymm0
  11812. vpsrlq $21, %ymm12, %ymm1
  11813. vpsrlq $43, %ymm13, %ymm2
  11814. vpsrlq $50, %ymm14, %ymm3
  11815. vpsllq $44, %ymm11, %ymm11
  11816. vpsllq $43, %ymm12, %ymm12
  11817. vpsllq $21, %ymm13, %ymm13
  11818. vpsllq $14, %ymm14, %ymm14
  11819. vpor %ymm0, %ymm11, %ymm11
  11820. vpor %ymm1, %ymm12, %ymm12
  11821. vpor %ymm2, %ymm13, %ymm13
  11822. vpor %ymm3, %ymm14, %ymm14
  11823. vpandn %ymm12, %ymm11, %ymm15
  11824. vpandn %ymm13, %ymm12, %ymm1
  11825. vpandn %ymm14, %ymm13, %ymm2
  11826. vpandn %ymm10, %ymm14, %ymm3
  11827. vpandn %ymm11, %ymm10, %ymm4
  11828. vpxor %ymm10, %ymm15, %ymm15
  11829. vpxor %ymm11, %ymm1, %ymm1
  11830. vpxor %ymm12, %ymm2, %ymm2
  11831. # XOR in constant
  11832. vpxor 320(%rdx), %ymm15, %ymm15
  11833. vpxor %ymm13, %ymm3, %ymm3
  11834. vpxor %ymm14, %ymm4, %ymm4
  11835. vmovdqu %ymm1, 96(%rax)
  11836. vmovdqu %ymm2, 32(%rdi)
  11837. vmovdqu %ymm3, (%rcx)
  11838. vmovdqu %ymm4, -64(%rax)
  11839. # Row 1
  11840. vpxor 64(%rax), %ymm8, %ymm10
  11841. vpxor (%rdi), %ymm9, %ymm11
  11842. vpxor -32(%rcx), %ymm5, %ymm12
  11843. vpxor -96(%rax), %ymm6, %ymm13
  11844. vpxor 128(%rcx), %ymm7, %ymm14
  11845. vpsrlq $36, %ymm10, %ymm0
  11846. vpsrlq $44, %ymm11, %ymm1
  11847. vpsrlq $61, %ymm12, %ymm2
  11848. vpsrlq $19, %ymm13, %ymm3
  11849. vpsrlq $3, %ymm14, %ymm4
  11850. vpsllq $28, %ymm10, %ymm10
  11851. vpsllq $20, %ymm11, %ymm11
  11852. vpsllq $3, %ymm12, %ymm12
  11853. vpsllq $45, %ymm13, %ymm13
  11854. vpsllq $61, %ymm14, %ymm14
  11855. vpor %ymm0, %ymm10, %ymm10
  11856. vpor %ymm1, %ymm11, %ymm11
  11857. vpor %ymm2, %ymm12, %ymm12
  11858. vpor %ymm3, %ymm13, %ymm13
  11859. vpor %ymm4, %ymm14, %ymm14
  11860. vpandn %ymm12, %ymm11, %ymm0
  11861. vpandn %ymm13, %ymm12, %ymm1
  11862. vpandn %ymm14, %ymm13, %ymm2
  11863. vpandn %ymm10, %ymm14, %ymm3
  11864. vpandn %ymm11, %ymm10, %ymm4
  11865. vpxor %ymm10, %ymm0, %ymm0
  11866. vpxor %ymm11, %ymm1, %ymm1
  11867. vpxor %ymm12, %ymm2, %ymm2
  11868. vpxor %ymm13, %ymm3, %ymm3
  11869. vpxor %ymm14, %ymm4, %ymm4
  11870. vmovdqu %ymm0, 64(%rax)
  11871. vmovdqu %ymm1, (%rdi)
  11872. vmovdqu %ymm2, -32(%rcx)
  11873. vmovdqu %ymm3, -96(%rax)
  11874. vmovdqu %ymm4, 128(%rcx)
  11875. # Row 2
  11876. vpxor 96(%rcx), %ymm6, %ymm10
  11877. vpxor 32(%rax), %ymm7, %ymm11
  11878. vpxor -32(%rdi), %ymm8, %ymm12
  11879. vpxor -64(%rcx), %ymm9, %ymm13
  11880. vpxor 128(%rdi), %ymm5, %ymm14
  11881. vpsrlq $63, %ymm10, %ymm0
  11882. vpsrlq $58, %ymm11, %ymm1
  11883. vpsrlq $39, %ymm12, %ymm2
  11884. vpsrlq $56, %ymm13, %ymm3
  11885. vpsrlq $46, %ymm14, %ymm4
  11886. vpaddq %ymm10, %ymm10, %ymm10
  11887. vpsllq $6, %ymm11, %ymm11
  11888. vpsllq $25, %ymm12, %ymm12
  11889. vpsllq $8, %ymm13, %ymm13
  11890. vpsllq $18, %ymm14, %ymm14
  11891. vpor %ymm0, %ymm10, %ymm10
  11892. vpor %ymm1, %ymm11, %ymm11
  11893. vpor %ymm2, %ymm12, %ymm12
  11894. vpor %ymm3, %ymm13, %ymm13
  11895. vpor %ymm4, %ymm14, %ymm14
  11896. vpandn %ymm12, %ymm11, %ymm0
  11897. vpandn %ymm13, %ymm12, %ymm1
  11898. vpandn %ymm14, %ymm13, %ymm2
  11899. vpandn %ymm10, %ymm14, %ymm3
  11900. vpandn %ymm11, %ymm10, %ymm4
  11901. vpxor %ymm10, %ymm0, %ymm0
  11902. vpxor %ymm11, %ymm1, %ymm1
  11903. vpxor %ymm12, %ymm2, %ymm2
  11904. vpxor %ymm13, %ymm3, %ymm3
  11905. vpxor %ymm14, %ymm4, %ymm4
  11906. vmovdqu %ymm0, 96(%rcx)
  11907. vmovdqu %ymm1, 32(%rax)
  11908. vmovdqu %ymm2, -32(%rdi)
  11909. vmovdqu %ymm3, -64(%rcx)
  11910. vmovdqu %ymm4, 128(%rdi)
  11911. # Row 3
  11912. vpxor 96(%rdi), %ymm9, %ymm10
  11913. vpxor 64(%rcx), %ymm5, %ymm11
  11914. vpxor (%rax), %ymm6, %ymm12
  11915. vpxor -64(%rdi), %ymm7, %ymm13
  11916. vpxor -96(%rcx), %ymm8, %ymm14
  11917. vpsrlq $37, %ymm10, %ymm0
  11918. vpsrlq $28, %ymm11, %ymm1
  11919. vpsrlq $54, %ymm12, %ymm2
  11920. vpsrlq $49, %ymm13, %ymm3
  11921. vpsrlq $8, %ymm14, %ymm4
  11922. vpsllq $27, %ymm10, %ymm10
  11923. vpsllq $36, %ymm11, %ymm11
  11924. vpsllq $10, %ymm12, %ymm12
  11925. vpsllq $15, %ymm13, %ymm13
  11926. vpsllq $56, %ymm14, %ymm14
  11927. vpor %ymm0, %ymm10, %ymm10
  11928. vpor %ymm1, %ymm11, %ymm11
  11929. vpor %ymm2, %ymm12, %ymm12
  11930. vpor %ymm3, %ymm13, %ymm13
  11931. vpor %ymm4, %ymm14, %ymm14
  11932. vpandn %ymm12, %ymm11, %ymm0
  11933. vpandn %ymm13, %ymm12, %ymm1
  11934. vpandn %ymm14, %ymm13, %ymm2
  11935. vpandn %ymm10, %ymm14, %ymm3
  11936. vpandn %ymm11, %ymm10, %ymm4
  11937. vpxor %ymm10, %ymm0, %ymm0
  11938. vpxor %ymm11, %ymm1, %ymm1
  11939. vpxor %ymm12, %ymm2, %ymm2
  11940. vpxor %ymm13, %ymm3, %ymm3
  11941. vpxor %ymm14, %ymm4, %ymm4
  11942. vmovdqu %ymm0, 96(%rdi)
  11943. vmovdqu %ymm1, 64(%rcx)
  11944. vmovdqu %ymm2, (%rax)
  11945. vmovdqu %ymm3, -64(%rdi)
  11946. vmovdqu %ymm4, -96(%rcx)
  11947. # Row 4
  11948. vpxor 128(%rax), %ymm7, %ymm10
  11949. vpxor 64(%rdi), %ymm8, %ymm11
  11950. vpxor 32(%rcx), %ymm9, %ymm12
  11951. vpxor -32(%rax), %ymm5, %ymm13
  11952. vpxor -96(%rdi), %ymm6, %ymm14
  11953. vpsrlq $2, %ymm10, %ymm0
  11954. vpsrlq $9, %ymm11, %ymm1
  11955. vpsrlq $25, %ymm12, %ymm2
  11956. vpsrlq $23, %ymm13, %ymm3
  11957. vpsrlq $62, %ymm14, %ymm4
  11958. vpsllq $62, %ymm10, %ymm10
  11959. vpsllq $55, %ymm11, %ymm11
  11960. vpsllq $39, %ymm12, %ymm12
  11961. vpsllq $41, %ymm13, %ymm13
  11962. vpsllq $2, %ymm14, %ymm14
  11963. vpor %ymm0, %ymm10, %ymm10
  11964. vpor %ymm1, %ymm11, %ymm11
  11965. vpor %ymm2, %ymm12, %ymm12
  11966. vpor %ymm3, %ymm13, %ymm13
  11967. vpor %ymm4, %ymm14, %ymm14
  11968. vpandn %ymm12, %ymm11, %ymm0
  11969. vpandn %ymm13, %ymm12, %ymm1
  11970. vpandn %ymm14, %ymm13, %ymm2
  11971. vpandn %ymm10, %ymm14, %ymm3
  11972. vpandn %ymm11, %ymm10, %ymm4
  11973. vpxor %ymm10, %ymm0, %ymm0
  11974. vpxor %ymm11, %ymm1, %ymm1
  11975. vpxor %ymm12, %ymm2, %ymm2
  11976. vpxor %ymm13, %ymm3, %ymm3
  11977. vpxor %ymm14, %ymm4, %ymm4
  11978. vmovdqu %ymm0, 128(%rax)
  11979. vmovdqu %ymm1, 64(%rdi)
  11980. vmovdqu %ymm2, 32(%rcx)
  11981. vmovdqu %ymm3, -32(%rax)
  11982. vmovdqu %ymm4, -96(%rdi)
  11983. # Round 11
  11984. # Calc b[0..4]
  11985. vpxor %ymm15, %ymm0, %ymm10
  11986. vpxor -64(%rdi), %ymm3, %ymm13
  11987. vpxor -32(%rdi), %ymm2, %ymm12
  11988. vpxor (%rdi), %ymm1, %ymm11
  11989. vpxor 32(%rdi), %ymm12, %ymm12
  11990. vpxor 96(%rdi), %ymm10, %ymm10
  11991. vpxor 128(%rdi), %ymm4, %ymm14
  11992. vpxor -96(%rax), %ymm13, %ymm13
  11993. vpxor -64(%rax), %ymm14, %ymm14
  11994. vpxor (%rax), %ymm12, %ymm12
  11995. vpxor 32(%rax), %ymm11, %ymm11
  11996. vpxor 64(%rax), %ymm10, %ymm10
  11997. vpxor 96(%rax), %ymm11, %ymm11
  11998. vpxor -96(%rcx), %ymm14, %ymm14
  11999. vpxor -64(%rcx), %ymm13, %ymm13
  12000. vpxor -32(%rcx), %ymm12, %ymm12
  12001. vpxor (%rcx), %ymm13, %ymm13
  12002. vpxor 64(%rcx), %ymm11, %ymm11
  12003. vpxor 96(%rcx), %ymm10, %ymm10
  12004. vpxor 128(%rcx), %ymm14, %ymm14
  12005. # Calc t[0..4]
  12006. vpsrlq $63, %ymm11, %ymm0
  12007. vpsrlq $63, %ymm12, %ymm1
  12008. vpsrlq $63, %ymm13, %ymm2
  12009. vpsrlq $63, %ymm14, %ymm3
  12010. vpsrlq $63, %ymm10, %ymm4
  12011. vpaddq %ymm11, %ymm11, %ymm5
  12012. vpaddq %ymm12, %ymm12, %ymm6
  12013. vpaddq %ymm13, %ymm13, %ymm7
  12014. vpaddq %ymm14, %ymm14, %ymm8
  12015. vpaddq %ymm10, %ymm10, %ymm9
  12016. vpor %ymm0, %ymm5, %ymm5
  12017. vpor %ymm1, %ymm6, %ymm6
  12018. vpor %ymm2, %ymm7, %ymm7
  12019. vpor %ymm3, %ymm8, %ymm8
  12020. vpor %ymm4, %ymm9, %ymm9
  12021. vpxor %ymm14, %ymm5, %ymm5
  12022. vpxor %ymm10, %ymm6, %ymm6
  12023. vpxor %ymm11, %ymm7, %ymm7
  12024. vpxor %ymm12, %ymm8, %ymm8
  12025. vpxor %ymm13, %ymm9, %ymm9
  12026. # Row Mix
  12027. # Row 0
  12028. vpxor %ymm15, %ymm5, %ymm10
  12029. vpxor (%rdi), %ymm6, %ymm11
  12030. vpxor -32(%rdi), %ymm7, %ymm12
  12031. vpxor -64(%rdi), %ymm8, %ymm13
  12032. vpxor -96(%rdi), %ymm9, %ymm14
  12033. vpsrlq $20, %ymm11, %ymm0
  12034. vpsrlq $21, %ymm12, %ymm1
  12035. vpsrlq $43, %ymm13, %ymm2
  12036. vpsrlq $50, %ymm14, %ymm3
  12037. vpsllq $44, %ymm11, %ymm11
  12038. vpsllq $43, %ymm12, %ymm12
  12039. vpsllq $21, %ymm13, %ymm13
  12040. vpsllq $14, %ymm14, %ymm14
  12041. vpor %ymm0, %ymm11, %ymm11
  12042. vpor %ymm1, %ymm12, %ymm12
  12043. vpor %ymm2, %ymm13, %ymm13
  12044. vpor %ymm3, %ymm14, %ymm14
  12045. vpandn %ymm12, %ymm11, %ymm15
  12046. vpandn %ymm13, %ymm12, %ymm1
  12047. vpandn %ymm14, %ymm13, %ymm2
  12048. vpandn %ymm10, %ymm14, %ymm3
  12049. vpandn %ymm11, %ymm10, %ymm4
  12050. vpxor %ymm10, %ymm15, %ymm15
  12051. vpxor %ymm11, %ymm1, %ymm1
  12052. vpxor %ymm12, %ymm2, %ymm2
  12053. # XOR in constant
  12054. vpxor 352(%rdx), %ymm15, %ymm15
  12055. vpxor %ymm13, %ymm3, %ymm3
  12056. vpxor %ymm14, %ymm4, %ymm4
  12057. vmovdqu %ymm1, (%rdi)
  12058. vmovdqu %ymm2, -32(%rdi)
  12059. vmovdqu %ymm3, -64(%rdi)
  12060. vmovdqu %ymm4, -96(%rdi)
  12061. # Row 1
  12062. vpxor (%rcx), %ymm8, %ymm10
  12063. vpxor 128(%rcx), %ymm9, %ymm11
  12064. vpxor 96(%rcx), %ymm5, %ymm12
  12065. vpxor 64(%rcx), %ymm6, %ymm13
  12066. vpxor 32(%rcx), %ymm7, %ymm14
  12067. vpsrlq $36, %ymm10, %ymm0
  12068. vpsrlq $44, %ymm11, %ymm1
  12069. vpsrlq $61, %ymm12, %ymm2
  12070. vpsrlq $19, %ymm13, %ymm3
  12071. vpsrlq $3, %ymm14, %ymm4
  12072. vpsllq $28, %ymm10, %ymm10
  12073. vpsllq $20, %ymm11, %ymm11
  12074. vpsllq $3, %ymm12, %ymm12
  12075. vpsllq $45, %ymm13, %ymm13
  12076. vpsllq $61, %ymm14, %ymm14
  12077. vpor %ymm0, %ymm10, %ymm10
  12078. vpor %ymm1, %ymm11, %ymm11
  12079. vpor %ymm2, %ymm12, %ymm12
  12080. vpor %ymm3, %ymm13, %ymm13
  12081. vpor %ymm4, %ymm14, %ymm14
  12082. vpandn %ymm12, %ymm11, %ymm0
  12083. vpandn %ymm13, %ymm12, %ymm1
  12084. vpandn %ymm14, %ymm13, %ymm2
  12085. vpandn %ymm10, %ymm14, %ymm3
  12086. vpandn %ymm11, %ymm10, %ymm4
  12087. vpxor %ymm10, %ymm0, %ymm0
  12088. vpxor %ymm11, %ymm1, %ymm1
  12089. vpxor %ymm12, %ymm2, %ymm2
  12090. vpxor %ymm13, %ymm3, %ymm3
  12091. vpxor %ymm14, %ymm4, %ymm4
  12092. vmovdqu %ymm0, (%rcx)
  12093. vmovdqu %ymm1, 128(%rcx)
  12094. vmovdqu %ymm2, 96(%rcx)
  12095. vmovdqu %ymm3, 64(%rcx)
  12096. vmovdqu %ymm4, 32(%rcx)
  12097. # Row 2
  12098. vpxor 96(%rax), %ymm6, %ymm10
  12099. vpxor -32(%rcx), %ymm7, %ymm11
  12100. vpxor -64(%rcx), %ymm8, %ymm12
  12101. vpxor -96(%rcx), %ymm9, %ymm13
  12102. vpxor 128(%rax), %ymm5, %ymm14
  12103. vpsrlq $63, %ymm10, %ymm0
  12104. vpsrlq $58, %ymm11, %ymm1
  12105. vpsrlq $39, %ymm12, %ymm2
  12106. vpsrlq $56, %ymm13, %ymm3
  12107. vpsrlq $46, %ymm14, %ymm4
  12108. vpaddq %ymm10, %ymm10, %ymm10
  12109. vpsllq $6, %ymm11, %ymm11
  12110. vpsllq $25, %ymm12, %ymm12
  12111. vpsllq $8, %ymm13, %ymm13
  12112. vpsllq $18, %ymm14, %ymm14
  12113. vpor %ymm0, %ymm10, %ymm10
  12114. vpor %ymm1, %ymm11, %ymm11
  12115. vpor %ymm2, %ymm12, %ymm12
  12116. vpor %ymm3, %ymm13, %ymm13
  12117. vpor %ymm4, %ymm14, %ymm14
  12118. vpandn %ymm12, %ymm11, %ymm0
  12119. vpandn %ymm13, %ymm12, %ymm1
  12120. vpandn %ymm14, %ymm13, %ymm2
  12121. vpandn %ymm10, %ymm14, %ymm3
  12122. vpandn %ymm11, %ymm10, %ymm4
  12123. vpxor %ymm10, %ymm0, %ymm0
  12124. vpxor %ymm11, %ymm1, %ymm1
  12125. vpxor %ymm12, %ymm2, %ymm2
  12126. vpxor %ymm13, %ymm3, %ymm3
  12127. vpxor %ymm14, %ymm4, %ymm4
  12128. vmovdqu %ymm0, 96(%rax)
  12129. vmovdqu %ymm1, -32(%rcx)
  12130. vmovdqu %ymm2, -64(%rcx)
  12131. vmovdqu %ymm3, -96(%rcx)
  12132. vmovdqu %ymm4, 128(%rax)
  12133. # Row 3
  12134. vpxor -64(%rax), %ymm9, %ymm10
  12135. vpxor 64(%rax), %ymm5, %ymm11
  12136. vpxor 32(%rax), %ymm6, %ymm12
  12137. vpxor (%rax), %ymm7, %ymm13
  12138. vpxor -32(%rax), %ymm8, %ymm14
  12139. vpsrlq $37, %ymm10, %ymm0
  12140. vpsrlq $28, %ymm11, %ymm1
  12141. vpsrlq $54, %ymm12, %ymm2
  12142. vpsrlq $49, %ymm13, %ymm3
  12143. vpsrlq $8, %ymm14, %ymm4
  12144. vpsllq $27, %ymm10, %ymm10
  12145. vpsllq $36, %ymm11, %ymm11
  12146. vpsllq $10, %ymm12, %ymm12
  12147. vpsllq $15, %ymm13, %ymm13
  12148. vpsllq $56, %ymm14, %ymm14
  12149. vpor %ymm0, %ymm10, %ymm10
  12150. vpor %ymm1, %ymm11, %ymm11
  12151. vpor %ymm2, %ymm12, %ymm12
  12152. vpor %ymm3, %ymm13, %ymm13
  12153. vpor %ymm4, %ymm14, %ymm14
  12154. vpandn %ymm12, %ymm11, %ymm0
  12155. vpandn %ymm13, %ymm12, %ymm1
  12156. vpandn %ymm14, %ymm13, %ymm2
  12157. vpandn %ymm10, %ymm14, %ymm3
  12158. vpandn %ymm11, %ymm10, %ymm4
  12159. vpxor %ymm10, %ymm0, %ymm0
  12160. vpxor %ymm11, %ymm1, %ymm1
  12161. vpxor %ymm12, %ymm2, %ymm2
  12162. vpxor %ymm13, %ymm3, %ymm3
  12163. vpxor %ymm14, %ymm4, %ymm4
  12164. vmovdqu %ymm0, -64(%rax)
  12165. vmovdqu %ymm1, 64(%rax)
  12166. vmovdqu %ymm2, 32(%rax)
  12167. vmovdqu %ymm3, (%rax)
  12168. vmovdqu %ymm4, -32(%rax)
  12169. # Row 4
  12170. vpxor 32(%rdi), %ymm7, %ymm10
  12171. vpxor -96(%rax), %ymm8, %ymm11
  12172. vpxor 128(%rdi), %ymm9, %ymm12
  12173. vpxor 96(%rdi), %ymm5, %ymm13
  12174. vpxor 64(%rdi), %ymm6, %ymm14
  12175. vpsrlq $2, %ymm10, %ymm0
  12176. vpsrlq $9, %ymm11, %ymm1
  12177. vpsrlq $25, %ymm12, %ymm2
  12178. vpsrlq $23, %ymm13, %ymm3
  12179. vpsrlq $62, %ymm14, %ymm4
  12180. vpsllq $62, %ymm10, %ymm10
  12181. vpsllq $55, %ymm11, %ymm11
  12182. vpsllq $39, %ymm12, %ymm12
  12183. vpsllq $41, %ymm13, %ymm13
  12184. vpsllq $2, %ymm14, %ymm14
  12185. vpor %ymm0, %ymm10, %ymm10
  12186. vpor %ymm1, %ymm11, %ymm11
  12187. vpor %ymm2, %ymm12, %ymm12
  12188. vpor %ymm3, %ymm13, %ymm13
  12189. vpor %ymm4, %ymm14, %ymm14
  12190. vpandn %ymm12, %ymm11, %ymm0
  12191. vpandn %ymm13, %ymm12, %ymm1
  12192. vpandn %ymm14, %ymm13, %ymm2
  12193. vpandn %ymm10, %ymm14, %ymm3
  12194. vpandn %ymm11, %ymm10, %ymm4
  12195. vpxor %ymm10, %ymm0, %ymm0
  12196. vpxor %ymm11, %ymm1, %ymm1
  12197. vpxor %ymm12, %ymm2, %ymm2
  12198. vpxor %ymm13, %ymm3, %ymm3
  12199. vpxor %ymm14, %ymm4, %ymm4
  12200. vmovdqu %ymm0, 32(%rdi)
  12201. vmovdqu %ymm1, -96(%rax)
  12202. vmovdqu %ymm2, 128(%rdi)
  12203. vmovdqu %ymm3, 96(%rdi)
  12204. vmovdqu %ymm4, 64(%rdi)
  12205. # Round 12
  12206. # Calc b[0..4]
  12207. vpxor %ymm15, %ymm0, %ymm10
  12208. vpxor -96(%rdi), %ymm4, %ymm14
  12209. vpxor -64(%rdi), %ymm3, %ymm13
  12210. vpxor -32(%rdi), %ymm2, %ymm12
  12211. vpxor (%rdi), %ymm1, %ymm11
  12212. vpxor -64(%rax), %ymm10, %ymm10
  12213. vpxor -32(%rax), %ymm14, %ymm14
  12214. vpxor (%rax), %ymm13, %ymm13
  12215. vpxor 32(%rax), %ymm12, %ymm12
  12216. vpxor 64(%rax), %ymm11, %ymm11
  12217. vpxor 96(%rax), %ymm10, %ymm10
  12218. vpxor 128(%rax), %ymm14, %ymm14
  12219. vpxor -96(%rcx), %ymm13, %ymm13
  12220. vpxor -64(%rcx), %ymm12, %ymm12
  12221. vpxor -32(%rcx), %ymm11, %ymm11
  12222. vpxor (%rcx), %ymm10, %ymm10
  12223. vpxor 32(%rcx), %ymm14, %ymm14
  12224. vpxor 64(%rcx), %ymm13, %ymm13
  12225. vpxor 96(%rcx), %ymm12, %ymm12
  12226. vpxor 128(%rcx), %ymm11, %ymm11
  12227. # Calc t[0..4]
  12228. vpsrlq $63, %ymm11, %ymm0
  12229. vpsrlq $63, %ymm12, %ymm1
  12230. vpsrlq $63, %ymm13, %ymm2
  12231. vpsrlq $63, %ymm14, %ymm3
  12232. vpsrlq $63, %ymm10, %ymm4
  12233. vpaddq %ymm11, %ymm11, %ymm5
  12234. vpaddq %ymm12, %ymm12, %ymm6
  12235. vpaddq %ymm13, %ymm13, %ymm7
  12236. vpaddq %ymm14, %ymm14, %ymm8
  12237. vpaddq %ymm10, %ymm10, %ymm9
  12238. vpor %ymm0, %ymm5, %ymm5
  12239. vpor %ymm1, %ymm6, %ymm6
  12240. vpor %ymm2, %ymm7, %ymm7
  12241. vpor %ymm3, %ymm8, %ymm8
  12242. vpor %ymm4, %ymm9, %ymm9
  12243. vpxor %ymm14, %ymm5, %ymm5
  12244. vpxor %ymm10, %ymm6, %ymm6
  12245. vpxor %ymm11, %ymm7, %ymm7
  12246. vpxor %ymm12, %ymm8, %ymm8
  12247. vpxor %ymm13, %ymm9, %ymm9
  12248. # Row Mix
  12249. # Row 0
  12250. vpxor %ymm15, %ymm5, %ymm10
  12251. vpxor 128(%rcx), %ymm6, %ymm11
  12252. vpxor -64(%rcx), %ymm7, %ymm12
  12253. vpxor (%rax), %ymm8, %ymm13
  12254. vpxor 64(%rdi), %ymm9, %ymm14
  12255. vpsrlq $20, %ymm11, %ymm0
  12256. vpsrlq $21, %ymm12, %ymm1
  12257. vpsrlq $43, %ymm13, %ymm2
  12258. vpsrlq $50, %ymm14, %ymm3
  12259. vpsllq $44, %ymm11, %ymm11
  12260. vpsllq $43, %ymm12, %ymm12
  12261. vpsllq $21, %ymm13, %ymm13
  12262. vpsllq $14, %ymm14, %ymm14
  12263. vpor %ymm0, %ymm11, %ymm11
  12264. vpor %ymm1, %ymm12, %ymm12
  12265. vpor %ymm2, %ymm13, %ymm13
  12266. vpor %ymm3, %ymm14, %ymm14
  12267. vpandn %ymm12, %ymm11, %ymm15
  12268. vpandn %ymm13, %ymm12, %ymm1
  12269. vpandn %ymm14, %ymm13, %ymm2
  12270. vpandn %ymm10, %ymm14, %ymm3
  12271. vpandn %ymm11, %ymm10, %ymm4
  12272. vpxor %ymm10, %ymm15, %ymm15
  12273. vpxor %ymm11, %ymm1, %ymm1
  12274. vpxor %ymm12, %ymm2, %ymm2
  12275. # XOR in constant
  12276. vpxor 384(%rdx), %ymm15, %ymm15
  12277. vpxor %ymm13, %ymm3, %ymm3
  12278. vpxor %ymm14, %ymm4, %ymm4
  12279. vmovdqu %ymm1, 128(%rcx)
  12280. vmovdqu %ymm2, -64(%rcx)
  12281. vmovdqu %ymm3, (%rax)
  12282. vmovdqu %ymm4, 64(%rdi)
  12283. # Row 1
  12284. vpxor -64(%rdi), %ymm8, %ymm10
  12285. vpxor 32(%rcx), %ymm9, %ymm11
  12286. vpxor 96(%rax), %ymm5, %ymm12
  12287. vpxor 64(%rax), %ymm6, %ymm13
  12288. vpxor 128(%rdi), %ymm7, %ymm14
  12289. vpsrlq $36, %ymm10, %ymm0
  12290. vpsrlq $44, %ymm11, %ymm1
  12291. vpsrlq $61, %ymm12, %ymm2
  12292. vpsrlq $19, %ymm13, %ymm3
  12293. vpsrlq $3, %ymm14, %ymm4
  12294. vpsllq $28, %ymm10, %ymm10
  12295. vpsllq $20, %ymm11, %ymm11
  12296. vpsllq $3, %ymm12, %ymm12
  12297. vpsllq $45, %ymm13, %ymm13
  12298. vpsllq $61, %ymm14, %ymm14
  12299. vpor %ymm0, %ymm10, %ymm10
  12300. vpor %ymm1, %ymm11, %ymm11
  12301. vpor %ymm2, %ymm12, %ymm12
  12302. vpor %ymm3, %ymm13, %ymm13
  12303. vpor %ymm4, %ymm14, %ymm14
  12304. vpandn %ymm12, %ymm11, %ymm0
  12305. vpandn %ymm13, %ymm12, %ymm1
  12306. vpandn %ymm14, %ymm13, %ymm2
  12307. vpandn %ymm10, %ymm14, %ymm3
  12308. vpandn %ymm11, %ymm10, %ymm4
  12309. vpxor %ymm10, %ymm0, %ymm0
  12310. vpxor %ymm11, %ymm1, %ymm1
  12311. vpxor %ymm12, %ymm2, %ymm2
  12312. vpxor %ymm13, %ymm3, %ymm3
  12313. vpxor %ymm14, %ymm4, %ymm4
  12314. vmovdqu %ymm0, -64(%rdi)
  12315. vmovdqu %ymm1, 32(%rcx)
  12316. vmovdqu %ymm2, 96(%rax)
  12317. vmovdqu %ymm3, 64(%rax)
  12318. vmovdqu %ymm4, 128(%rdi)
  12319. # Row 2
  12320. vpxor (%rdi), %ymm6, %ymm10
  12321. vpxor 96(%rcx), %ymm7, %ymm11
  12322. vpxor -96(%rcx), %ymm8, %ymm12
  12323. vpxor -32(%rax), %ymm9, %ymm13
  12324. vpxor 32(%rdi), %ymm5, %ymm14
  12325. vpsrlq $63, %ymm10, %ymm0
  12326. vpsrlq $58, %ymm11, %ymm1
  12327. vpsrlq $39, %ymm12, %ymm2
  12328. vpsrlq $56, %ymm13, %ymm3
  12329. vpsrlq $46, %ymm14, %ymm4
  12330. vpaddq %ymm10, %ymm10, %ymm10
  12331. vpsllq $6, %ymm11, %ymm11
  12332. vpsllq $25, %ymm12, %ymm12
  12333. vpsllq $8, %ymm13, %ymm13
  12334. vpsllq $18, %ymm14, %ymm14
  12335. vpor %ymm0, %ymm10, %ymm10
  12336. vpor %ymm1, %ymm11, %ymm11
  12337. vpor %ymm2, %ymm12, %ymm12
  12338. vpor %ymm3, %ymm13, %ymm13
  12339. vpor %ymm4, %ymm14, %ymm14
  12340. vpandn %ymm12, %ymm11, %ymm0
  12341. vpandn %ymm13, %ymm12, %ymm1
  12342. vpandn %ymm14, %ymm13, %ymm2
  12343. vpandn %ymm10, %ymm14, %ymm3
  12344. vpandn %ymm11, %ymm10, %ymm4
  12345. vpxor %ymm10, %ymm0, %ymm0
  12346. vpxor %ymm11, %ymm1, %ymm1
  12347. vpxor %ymm12, %ymm2, %ymm2
  12348. vpxor %ymm13, %ymm3, %ymm3
  12349. vpxor %ymm14, %ymm4, %ymm4
  12350. vmovdqu %ymm0, (%rdi)
  12351. vmovdqu %ymm1, 96(%rcx)
  12352. vmovdqu %ymm2, -96(%rcx)
  12353. vmovdqu %ymm3, -32(%rax)
  12354. vmovdqu %ymm4, 32(%rdi)
  12355. # Row 3
  12356. vpxor -96(%rdi), %ymm9, %ymm10
  12357. vpxor (%rcx), %ymm5, %ymm11
  12358. vpxor -32(%rcx), %ymm6, %ymm12
  12359. vpxor 32(%rax), %ymm7, %ymm13
  12360. vpxor 96(%rdi), %ymm8, %ymm14
  12361. vpsrlq $37, %ymm10, %ymm0
  12362. vpsrlq $28, %ymm11, %ymm1
  12363. vpsrlq $54, %ymm12, %ymm2
  12364. vpsrlq $49, %ymm13, %ymm3
  12365. vpsrlq $8, %ymm14, %ymm4
  12366. vpsllq $27, %ymm10, %ymm10
  12367. vpsllq $36, %ymm11, %ymm11
  12368. vpsllq $10, %ymm12, %ymm12
  12369. vpsllq $15, %ymm13, %ymm13
  12370. vpsllq $56, %ymm14, %ymm14
  12371. vpor %ymm0, %ymm10, %ymm10
  12372. vpor %ymm1, %ymm11, %ymm11
  12373. vpor %ymm2, %ymm12, %ymm12
  12374. vpor %ymm3, %ymm13, %ymm13
  12375. vpor %ymm4, %ymm14, %ymm14
  12376. vpandn %ymm12, %ymm11, %ymm0
  12377. vpandn %ymm13, %ymm12, %ymm1
  12378. vpandn %ymm14, %ymm13, %ymm2
  12379. vpandn %ymm10, %ymm14, %ymm3
  12380. vpandn %ymm11, %ymm10, %ymm4
  12381. vpxor %ymm10, %ymm0, %ymm0
  12382. vpxor %ymm11, %ymm1, %ymm1
  12383. vpxor %ymm12, %ymm2, %ymm2
  12384. vpxor %ymm13, %ymm3, %ymm3
  12385. vpxor %ymm14, %ymm4, %ymm4
  12386. vmovdqu %ymm0, -96(%rdi)
  12387. vmovdqu %ymm1, (%rcx)
  12388. vmovdqu %ymm2, -32(%rcx)
  12389. vmovdqu %ymm3, 32(%rax)
  12390. vmovdqu %ymm4, 96(%rdi)
  12391. # Row 4
  12392. vpxor -32(%rdi), %ymm7, %ymm10
  12393. vpxor 64(%rcx), %ymm8, %ymm11
  12394. vpxor 128(%rax), %ymm9, %ymm12
  12395. vpxor -64(%rax), %ymm5, %ymm13
  12396. vpxor -96(%rax), %ymm6, %ymm14
  12397. vpsrlq $2, %ymm10, %ymm0
  12398. vpsrlq $9, %ymm11, %ymm1
  12399. vpsrlq $25, %ymm12, %ymm2
  12400. vpsrlq $23, %ymm13, %ymm3
  12401. vpsrlq $62, %ymm14, %ymm4
  12402. vpsllq $62, %ymm10, %ymm10
  12403. vpsllq $55, %ymm11, %ymm11
  12404. vpsllq $39, %ymm12, %ymm12
  12405. vpsllq $41, %ymm13, %ymm13
  12406. vpsllq $2, %ymm14, %ymm14
  12407. vpor %ymm0, %ymm10, %ymm10
  12408. vpor %ymm1, %ymm11, %ymm11
  12409. vpor %ymm2, %ymm12, %ymm12
  12410. vpor %ymm3, %ymm13, %ymm13
  12411. vpor %ymm4, %ymm14, %ymm14
  12412. vpandn %ymm12, %ymm11, %ymm0
  12413. vpandn %ymm13, %ymm12, %ymm1
  12414. vpandn %ymm14, %ymm13, %ymm2
  12415. vpandn %ymm10, %ymm14, %ymm3
  12416. vpandn %ymm11, %ymm10, %ymm4
  12417. vpxor %ymm10, %ymm0, %ymm0
  12418. vpxor %ymm11, %ymm1, %ymm1
  12419. vpxor %ymm12, %ymm2, %ymm2
  12420. vpxor %ymm13, %ymm3, %ymm3
  12421. vpxor %ymm14, %ymm4, %ymm4
  12422. vmovdqu %ymm0, -32(%rdi)
  12423. vmovdqu %ymm1, 64(%rcx)
  12424. vmovdqu %ymm2, 128(%rax)
  12425. vmovdqu %ymm3, -64(%rax)
  12426. vmovdqu %ymm4, -96(%rax)
  12427. # Round 13
  12428. # Calc b[0..4]
  12429. vpxor %ymm15, %ymm0, %ymm10
  12430. vpxor -96(%rdi), %ymm10, %ymm10
  12431. vpxor -64(%rdi), %ymm10, %ymm10
  12432. vpxor (%rdi), %ymm10, %ymm10
  12433. vpxor 32(%rdi), %ymm4, %ymm14
  12434. vpxor 64(%rdi), %ymm14, %ymm14
  12435. vpxor 96(%rdi), %ymm14, %ymm14
  12436. vpxor 128(%rdi), %ymm14, %ymm14
  12437. vpxor -32(%rax), %ymm3, %ymm13
  12438. vpxor (%rax), %ymm13, %ymm13
  12439. vpxor 32(%rax), %ymm13, %ymm13
  12440. vpxor 64(%rax), %ymm13, %ymm13
  12441. vpxor 96(%rax), %ymm2, %ymm12
  12442. vpxor -96(%rcx), %ymm12, %ymm12
  12443. vpxor -64(%rcx), %ymm12, %ymm12
  12444. vpxor -32(%rcx), %ymm12, %ymm12
  12445. vpxor (%rcx), %ymm1, %ymm11
  12446. vpxor 32(%rcx), %ymm11, %ymm11
  12447. vpxor 96(%rcx), %ymm11, %ymm11
  12448. vpxor 128(%rcx), %ymm11, %ymm11
  12449. # Calc t[0..4]
  12450. vpsrlq $63, %ymm11, %ymm0
  12451. vpsrlq $63, %ymm12, %ymm1
  12452. vpsrlq $63, %ymm13, %ymm2
  12453. vpsrlq $63, %ymm14, %ymm3
  12454. vpsrlq $63, %ymm10, %ymm4
  12455. vpaddq %ymm11, %ymm11, %ymm5
  12456. vpaddq %ymm12, %ymm12, %ymm6
  12457. vpaddq %ymm13, %ymm13, %ymm7
  12458. vpaddq %ymm14, %ymm14, %ymm8
  12459. vpaddq %ymm10, %ymm10, %ymm9
  12460. vpor %ymm0, %ymm5, %ymm5
  12461. vpor %ymm1, %ymm6, %ymm6
  12462. vpor %ymm2, %ymm7, %ymm7
  12463. vpor %ymm3, %ymm8, %ymm8
  12464. vpor %ymm4, %ymm9, %ymm9
  12465. vpxor %ymm14, %ymm5, %ymm5
  12466. vpxor %ymm10, %ymm6, %ymm6
  12467. vpxor %ymm11, %ymm7, %ymm7
  12468. vpxor %ymm12, %ymm8, %ymm8
  12469. vpxor %ymm13, %ymm9, %ymm9
  12470. # Row Mix
  12471. # Row 0
  12472. vpxor %ymm15, %ymm5, %ymm10
  12473. vpxor 32(%rcx), %ymm6, %ymm11
  12474. vpxor -96(%rcx), %ymm7, %ymm12
  12475. vpxor 32(%rax), %ymm8, %ymm13
  12476. vpxor -96(%rax), %ymm9, %ymm14
  12477. vpsrlq $20, %ymm11, %ymm0
  12478. vpsrlq $21, %ymm12, %ymm1
  12479. vpsrlq $43, %ymm13, %ymm2
  12480. vpsrlq $50, %ymm14, %ymm3
  12481. vpsllq $44, %ymm11, %ymm11
  12482. vpsllq $43, %ymm12, %ymm12
  12483. vpsllq $21, %ymm13, %ymm13
  12484. vpsllq $14, %ymm14, %ymm14
  12485. vpor %ymm0, %ymm11, %ymm11
  12486. vpor %ymm1, %ymm12, %ymm12
  12487. vpor %ymm2, %ymm13, %ymm13
  12488. vpor %ymm3, %ymm14, %ymm14
  12489. vpandn %ymm12, %ymm11, %ymm15
  12490. vpandn %ymm13, %ymm12, %ymm1
  12491. vpandn %ymm14, %ymm13, %ymm2
  12492. vpandn %ymm10, %ymm14, %ymm3
  12493. vpandn %ymm11, %ymm10, %ymm4
  12494. vpxor %ymm10, %ymm15, %ymm15
  12495. vpxor %ymm11, %ymm1, %ymm1
  12496. vpxor %ymm12, %ymm2, %ymm2
  12497. # XOR in constant
  12498. vpxor 416(%rdx), %ymm15, %ymm15
  12499. vpxor %ymm13, %ymm3, %ymm3
  12500. vpxor %ymm14, %ymm4, %ymm4
  12501. vmovdqu %ymm1, 32(%rcx)
  12502. vmovdqu %ymm2, -96(%rcx)
  12503. vmovdqu %ymm3, 32(%rax)
  12504. vmovdqu %ymm4, -96(%rax)
  12505. # Row 1
  12506. vpxor (%rax), %ymm8, %ymm10
  12507. vpxor 128(%rdi), %ymm9, %ymm11
  12508. vpxor (%rdi), %ymm5, %ymm12
  12509. vpxor (%rcx), %ymm6, %ymm13
  12510. vpxor 128(%rax), %ymm7, %ymm14
  12511. vpsrlq $36, %ymm10, %ymm0
  12512. vpsrlq $44, %ymm11, %ymm1
  12513. vpsrlq $61, %ymm12, %ymm2
  12514. vpsrlq $19, %ymm13, %ymm3
  12515. vpsrlq $3, %ymm14, %ymm4
  12516. vpsllq $28, %ymm10, %ymm10
  12517. vpsllq $20, %ymm11, %ymm11
  12518. vpsllq $3, %ymm12, %ymm12
  12519. vpsllq $45, %ymm13, %ymm13
  12520. vpsllq $61, %ymm14, %ymm14
  12521. vpor %ymm0, %ymm10, %ymm10
  12522. vpor %ymm1, %ymm11, %ymm11
  12523. vpor %ymm2, %ymm12, %ymm12
  12524. vpor %ymm3, %ymm13, %ymm13
  12525. vpor %ymm4, %ymm14, %ymm14
  12526. vpandn %ymm12, %ymm11, %ymm0
  12527. vpandn %ymm13, %ymm12, %ymm1
  12528. vpandn %ymm14, %ymm13, %ymm2
  12529. vpandn %ymm10, %ymm14, %ymm3
  12530. vpandn %ymm11, %ymm10, %ymm4
  12531. vpxor %ymm10, %ymm0, %ymm0
  12532. vpxor %ymm11, %ymm1, %ymm1
  12533. vpxor %ymm12, %ymm2, %ymm2
  12534. vpxor %ymm13, %ymm3, %ymm3
  12535. vpxor %ymm14, %ymm4, %ymm4
  12536. vmovdqu %ymm0, (%rax)
  12537. vmovdqu %ymm1, 128(%rdi)
  12538. vmovdqu %ymm2, (%rdi)
  12539. vmovdqu %ymm3, (%rcx)
  12540. vmovdqu %ymm4, 128(%rax)
  12541. # Row 2
  12542. vpxor 128(%rcx), %ymm6, %ymm10
  12543. vpxor 96(%rax), %ymm7, %ymm11
  12544. vpxor -32(%rax), %ymm8, %ymm12
  12545. vpxor 96(%rdi), %ymm9, %ymm13
  12546. vpxor -32(%rdi), %ymm5, %ymm14
  12547. vpsrlq $63, %ymm10, %ymm0
  12548. vpsrlq $58, %ymm11, %ymm1
  12549. vpsrlq $39, %ymm12, %ymm2
  12550. vpsrlq $56, %ymm13, %ymm3
  12551. vpsrlq $46, %ymm14, %ymm4
  12552. vpaddq %ymm10, %ymm10, %ymm10
  12553. vpsllq $6, %ymm11, %ymm11
  12554. vpsllq $25, %ymm12, %ymm12
  12555. vpsllq $8, %ymm13, %ymm13
  12556. vpsllq $18, %ymm14, %ymm14
  12557. vpor %ymm0, %ymm10, %ymm10
  12558. vpor %ymm1, %ymm11, %ymm11
  12559. vpor %ymm2, %ymm12, %ymm12
  12560. vpor %ymm3, %ymm13, %ymm13
  12561. vpor %ymm4, %ymm14, %ymm14
  12562. vpandn %ymm12, %ymm11, %ymm0
  12563. vpandn %ymm13, %ymm12, %ymm1
  12564. vpandn %ymm14, %ymm13, %ymm2
  12565. vpandn %ymm10, %ymm14, %ymm3
  12566. vpandn %ymm11, %ymm10, %ymm4
  12567. vpxor %ymm10, %ymm0, %ymm0
  12568. vpxor %ymm11, %ymm1, %ymm1
  12569. vpxor %ymm12, %ymm2, %ymm2
  12570. vpxor %ymm13, %ymm3, %ymm3
  12571. vpxor %ymm14, %ymm4, %ymm4
  12572. vmovdqu %ymm0, 128(%rcx)
  12573. vmovdqu %ymm1, 96(%rax)
  12574. vmovdqu %ymm2, -32(%rax)
  12575. vmovdqu %ymm3, 96(%rdi)
  12576. vmovdqu %ymm4, -32(%rdi)
  12577. # Row 3
  12578. vpxor 64(%rdi), %ymm9, %ymm10
  12579. vpxor -64(%rdi), %ymm5, %ymm11
  12580. vpxor 96(%rcx), %ymm6, %ymm12
  12581. vpxor -32(%rcx), %ymm7, %ymm13
  12582. vpxor -64(%rax), %ymm8, %ymm14
  12583. vpsrlq $37, %ymm10, %ymm0
  12584. vpsrlq $28, %ymm11, %ymm1
  12585. vpsrlq $54, %ymm12, %ymm2
  12586. vpsrlq $49, %ymm13, %ymm3
  12587. vpsrlq $8, %ymm14, %ymm4
  12588. vpsllq $27, %ymm10, %ymm10
  12589. vpsllq $36, %ymm11, %ymm11
  12590. vpsllq $10, %ymm12, %ymm12
  12591. vpsllq $15, %ymm13, %ymm13
  12592. vpsllq $56, %ymm14, %ymm14
  12593. vpor %ymm0, %ymm10, %ymm10
  12594. vpor %ymm1, %ymm11, %ymm11
  12595. vpor %ymm2, %ymm12, %ymm12
  12596. vpor %ymm3, %ymm13, %ymm13
  12597. vpor %ymm4, %ymm14, %ymm14
  12598. vpandn %ymm12, %ymm11, %ymm0
  12599. vpandn %ymm13, %ymm12, %ymm1
  12600. vpandn %ymm14, %ymm13, %ymm2
  12601. vpandn %ymm10, %ymm14, %ymm3
  12602. vpandn %ymm11, %ymm10, %ymm4
  12603. vpxor %ymm10, %ymm0, %ymm0
  12604. vpxor %ymm11, %ymm1, %ymm1
  12605. vpxor %ymm12, %ymm2, %ymm2
  12606. vpxor %ymm13, %ymm3, %ymm3
  12607. vpxor %ymm14, %ymm4, %ymm4
  12608. vmovdqu %ymm0, 64(%rdi)
  12609. vmovdqu %ymm1, -64(%rdi)
  12610. vmovdqu %ymm2, 96(%rcx)
  12611. vmovdqu %ymm3, -32(%rcx)
  12612. vmovdqu %ymm4, -64(%rax)
  12613. # Row 4
  12614. vpxor -64(%rcx), %ymm7, %ymm10
  12615. vpxor 64(%rax), %ymm8, %ymm11
  12616. vpxor 32(%rdi), %ymm9, %ymm12
  12617. vpxor -96(%rdi), %ymm5, %ymm13
  12618. vpxor 64(%rcx), %ymm6, %ymm14
  12619. vpsrlq $2, %ymm10, %ymm0
  12620. vpsrlq $9, %ymm11, %ymm1
  12621. vpsrlq $25, %ymm12, %ymm2
  12622. vpsrlq $23, %ymm13, %ymm3
  12623. vpsrlq $62, %ymm14, %ymm4
  12624. vpsllq $62, %ymm10, %ymm10
  12625. vpsllq $55, %ymm11, %ymm11
  12626. vpsllq $39, %ymm12, %ymm12
  12627. vpsllq $41, %ymm13, %ymm13
  12628. vpsllq $2, %ymm14, %ymm14
  12629. vpor %ymm0, %ymm10, %ymm10
  12630. vpor %ymm1, %ymm11, %ymm11
  12631. vpor %ymm2, %ymm12, %ymm12
  12632. vpor %ymm3, %ymm13, %ymm13
  12633. vpor %ymm4, %ymm14, %ymm14
  12634. vpandn %ymm12, %ymm11, %ymm0
  12635. vpandn %ymm13, %ymm12, %ymm1
  12636. vpandn %ymm14, %ymm13, %ymm2
  12637. vpandn %ymm10, %ymm14, %ymm3
  12638. vpandn %ymm11, %ymm10, %ymm4
  12639. vpxor %ymm10, %ymm0, %ymm0
  12640. vpxor %ymm11, %ymm1, %ymm1
  12641. vpxor %ymm12, %ymm2, %ymm2
  12642. vpxor %ymm13, %ymm3, %ymm3
  12643. vpxor %ymm14, %ymm4, %ymm4
  12644. vmovdqu %ymm0, -64(%rcx)
  12645. vmovdqu %ymm1, 64(%rax)
  12646. vmovdqu %ymm2, 32(%rdi)
  12647. vmovdqu %ymm3, -96(%rdi)
  12648. vmovdqu %ymm4, 64(%rcx)
  12649. # Round 14
  12650. # Calc b[0..4]
  12651. vpxor %ymm15, %ymm0, %ymm10
  12652. vpxor -64(%rdi), %ymm1, %ymm11
  12653. vpxor -32(%rdi), %ymm4, %ymm14
  12654. vpxor (%rdi), %ymm2, %ymm12
  12655. vpxor 64(%rdi), %ymm10, %ymm10
  12656. vpxor 96(%rdi), %ymm3, %ymm13
  12657. vpxor 128(%rdi), %ymm11, %ymm11
  12658. vpxor -96(%rax), %ymm14, %ymm14
  12659. vpxor -64(%rax), %ymm14, %ymm14
  12660. vpxor -32(%rax), %ymm12, %ymm12
  12661. vpxor (%rax), %ymm10, %ymm10
  12662. vpxor 32(%rax), %ymm13, %ymm13
  12663. vpxor 96(%rax), %ymm11, %ymm11
  12664. vpxor 128(%rax), %ymm14, %ymm14
  12665. vpxor -96(%rcx), %ymm12, %ymm12
  12666. vpxor -32(%rcx), %ymm13, %ymm13
  12667. vpxor (%rcx), %ymm13, %ymm13
  12668. vpxor 32(%rcx), %ymm11, %ymm11
  12669. vpxor 96(%rcx), %ymm12, %ymm12
  12670. vpxor 128(%rcx), %ymm10, %ymm10
  12671. # Calc t[0..4]
  12672. vpsrlq $63, %ymm11, %ymm0
  12673. vpsrlq $63, %ymm12, %ymm1
  12674. vpsrlq $63, %ymm13, %ymm2
  12675. vpsrlq $63, %ymm14, %ymm3
  12676. vpsrlq $63, %ymm10, %ymm4
  12677. vpaddq %ymm11, %ymm11, %ymm5
  12678. vpaddq %ymm12, %ymm12, %ymm6
  12679. vpaddq %ymm13, %ymm13, %ymm7
  12680. vpaddq %ymm14, %ymm14, %ymm8
  12681. vpaddq %ymm10, %ymm10, %ymm9
  12682. vpor %ymm0, %ymm5, %ymm5
  12683. vpor %ymm1, %ymm6, %ymm6
  12684. vpor %ymm2, %ymm7, %ymm7
  12685. vpor %ymm3, %ymm8, %ymm8
  12686. vpor %ymm4, %ymm9, %ymm9
  12687. vpxor %ymm14, %ymm5, %ymm5
  12688. vpxor %ymm10, %ymm6, %ymm6
  12689. vpxor %ymm11, %ymm7, %ymm7
  12690. vpxor %ymm12, %ymm8, %ymm8
  12691. vpxor %ymm13, %ymm9, %ymm9
  12692. # Row Mix
  12693. # Row 0
  12694. vpxor %ymm15, %ymm5, %ymm10
  12695. vpxor 128(%rdi), %ymm6, %ymm11
  12696. vpxor -32(%rax), %ymm7, %ymm12
  12697. vpxor -32(%rcx), %ymm8, %ymm13
  12698. vpxor 64(%rcx), %ymm9, %ymm14
  12699. vpsrlq $20, %ymm11, %ymm0
  12700. vpsrlq $21, %ymm12, %ymm1
  12701. vpsrlq $43, %ymm13, %ymm2
  12702. vpsrlq $50, %ymm14, %ymm3
  12703. vpsllq $44, %ymm11, %ymm11
  12704. vpsllq $43, %ymm12, %ymm12
  12705. vpsllq $21, %ymm13, %ymm13
  12706. vpsllq $14, %ymm14, %ymm14
  12707. vpor %ymm0, %ymm11, %ymm11
  12708. vpor %ymm1, %ymm12, %ymm12
  12709. vpor %ymm2, %ymm13, %ymm13
  12710. vpor %ymm3, %ymm14, %ymm14
  12711. vpandn %ymm12, %ymm11, %ymm15
  12712. vpandn %ymm13, %ymm12, %ymm1
  12713. vpandn %ymm14, %ymm13, %ymm2
  12714. vpandn %ymm10, %ymm14, %ymm3
  12715. vpandn %ymm11, %ymm10, %ymm4
  12716. vpxor %ymm10, %ymm15, %ymm15
  12717. vpxor %ymm11, %ymm1, %ymm1
  12718. vpxor %ymm12, %ymm2, %ymm2
  12719. # XOR in constant
  12720. vpxor 448(%rdx), %ymm15, %ymm15
  12721. vpxor %ymm13, %ymm3, %ymm3
  12722. vpxor %ymm14, %ymm4, %ymm4
  12723. vmovdqu %ymm1, 128(%rdi)
  12724. vmovdqu %ymm2, -32(%rax)
  12725. vmovdqu %ymm3, -32(%rcx)
  12726. vmovdqu %ymm4, 64(%rcx)
  12727. # Row 1
  12728. vpxor 32(%rax), %ymm8, %ymm10
  12729. vpxor 128(%rax), %ymm9, %ymm11
  12730. vpxor 128(%rcx), %ymm5, %ymm12
  12731. vpxor -64(%rdi), %ymm6, %ymm13
  12732. vpxor 32(%rdi), %ymm7, %ymm14
  12733. vpsrlq $36, %ymm10, %ymm0
  12734. vpsrlq $44, %ymm11, %ymm1
  12735. vpsrlq $61, %ymm12, %ymm2
  12736. vpsrlq $19, %ymm13, %ymm3
  12737. vpsrlq $3, %ymm14, %ymm4
  12738. vpsllq $28, %ymm10, %ymm10
  12739. vpsllq $20, %ymm11, %ymm11
  12740. vpsllq $3, %ymm12, %ymm12
  12741. vpsllq $45, %ymm13, %ymm13
  12742. vpsllq $61, %ymm14, %ymm14
  12743. vpor %ymm0, %ymm10, %ymm10
  12744. vpor %ymm1, %ymm11, %ymm11
  12745. vpor %ymm2, %ymm12, %ymm12
  12746. vpor %ymm3, %ymm13, %ymm13
  12747. vpor %ymm4, %ymm14, %ymm14
  12748. vpandn %ymm12, %ymm11, %ymm0
  12749. vpandn %ymm13, %ymm12, %ymm1
  12750. vpandn %ymm14, %ymm13, %ymm2
  12751. vpandn %ymm10, %ymm14, %ymm3
  12752. vpandn %ymm11, %ymm10, %ymm4
  12753. vpxor %ymm10, %ymm0, %ymm0
  12754. vpxor %ymm11, %ymm1, %ymm1
  12755. vpxor %ymm12, %ymm2, %ymm2
  12756. vpxor %ymm13, %ymm3, %ymm3
  12757. vpxor %ymm14, %ymm4, %ymm4
  12758. vmovdqu %ymm0, 32(%rax)
  12759. vmovdqu %ymm1, 128(%rax)
  12760. vmovdqu %ymm2, 128(%rcx)
  12761. vmovdqu %ymm3, -64(%rdi)
  12762. vmovdqu %ymm4, 32(%rdi)
  12763. # Row 2
  12764. vpxor 32(%rcx), %ymm6, %ymm10
  12765. vpxor (%rdi), %ymm7, %ymm11
  12766. vpxor 96(%rdi), %ymm8, %ymm12
  12767. vpxor -64(%rax), %ymm9, %ymm13
  12768. vpxor -64(%rcx), %ymm5, %ymm14
  12769. vpsrlq $63, %ymm10, %ymm0
  12770. vpsrlq $58, %ymm11, %ymm1
  12771. vpsrlq $39, %ymm12, %ymm2
  12772. vpsrlq $56, %ymm13, %ymm3
  12773. vpsrlq $46, %ymm14, %ymm4
  12774. vpaddq %ymm10, %ymm10, %ymm10
  12775. vpsllq $6, %ymm11, %ymm11
  12776. vpsllq $25, %ymm12, %ymm12
  12777. vpsllq $8, %ymm13, %ymm13
  12778. vpsllq $18, %ymm14, %ymm14
  12779. vpor %ymm0, %ymm10, %ymm10
  12780. vpor %ymm1, %ymm11, %ymm11
  12781. vpor %ymm2, %ymm12, %ymm12
  12782. vpor %ymm3, %ymm13, %ymm13
  12783. vpor %ymm4, %ymm14, %ymm14
  12784. vpandn %ymm12, %ymm11, %ymm0
  12785. vpandn %ymm13, %ymm12, %ymm1
  12786. vpandn %ymm14, %ymm13, %ymm2
  12787. vpandn %ymm10, %ymm14, %ymm3
  12788. vpandn %ymm11, %ymm10, %ymm4
  12789. vpxor %ymm10, %ymm0, %ymm0
  12790. vpxor %ymm11, %ymm1, %ymm1
  12791. vpxor %ymm12, %ymm2, %ymm2
  12792. vpxor %ymm13, %ymm3, %ymm3
  12793. vpxor %ymm14, %ymm4, %ymm4
  12794. vmovdqu %ymm0, 32(%rcx)
  12795. vmovdqu %ymm1, (%rdi)
  12796. vmovdqu %ymm2, 96(%rdi)
  12797. vmovdqu %ymm3, -64(%rax)
  12798. vmovdqu %ymm4, -64(%rcx)
  12799. # Row 3
  12800. vpxor -96(%rax), %ymm9, %ymm10
  12801. vpxor (%rax), %ymm5, %ymm11
  12802. vpxor 96(%rax), %ymm6, %ymm12
  12803. vpxor 96(%rcx), %ymm7, %ymm13
  12804. vpxor -96(%rdi), %ymm8, %ymm14
  12805. vpsrlq $37, %ymm10, %ymm0
  12806. vpsrlq $28, %ymm11, %ymm1
  12807. vpsrlq $54, %ymm12, %ymm2
  12808. vpsrlq $49, %ymm13, %ymm3
  12809. vpsrlq $8, %ymm14, %ymm4
  12810. vpsllq $27, %ymm10, %ymm10
  12811. vpsllq $36, %ymm11, %ymm11
  12812. vpsllq $10, %ymm12, %ymm12
  12813. vpsllq $15, %ymm13, %ymm13
  12814. vpsllq $56, %ymm14, %ymm14
  12815. vpor %ymm0, %ymm10, %ymm10
  12816. vpor %ymm1, %ymm11, %ymm11
  12817. vpor %ymm2, %ymm12, %ymm12
  12818. vpor %ymm3, %ymm13, %ymm13
  12819. vpor %ymm4, %ymm14, %ymm14
  12820. vpandn %ymm12, %ymm11, %ymm0
  12821. vpandn %ymm13, %ymm12, %ymm1
  12822. vpandn %ymm14, %ymm13, %ymm2
  12823. vpandn %ymm10, %ymm14, %ymm3
  12824. vpandn %ymm11, %ymm10, %ymm4
  12825. vpxor %ymm10, %ymm0, %ymm0
  12826. vpxor %ymm11, %ymm1, %ymm1
  12827. vpxor %ymm12, %ymm2, %ymm2
  12828. vpxor %ymm13, %ymm3, %ymm3
  12829. vpxor %ymm14, %ymm4, %ymm4
  12830. vmovdqu %ymm0, -96(%rax)
  12831. vmovdqu %ymm1, (%rax)
  12832. vmovdqu %ymm2, 96(%rax)
  12833. vmovdqu %ymm3, 96(%rcx)
  12834. vmovdqu %ymm4, -96(%rdi)
  12835. # Row 4
  12836. vpxor -96(%rcx), %ymm7, %ymm10
  12837. vpxor (%rcx), %ymm8, %ymm11
  12838. vpxor -32(%rdi), %ymm9, %ymm12
  12839. vpxor 64(%rdi), %ymm5, %ymm13
  12840. vpxor 64(%rax), %ymm6, %ymm14
  12841. vpsrlq $2, %ymm10, %ymm0
  12842. vpsrlq $9, %ymm11, %ymm1
  12843. vpsrlq $25, %ymm12, %ymm2
  12844. vpsrlq $23, %ymm13, %ymm3
  12845. vpsrlq $62, %ymm14, %ymm4
  12846. vpsllq $62, %ymm10, %ymm10
  12847. vpsllq $55, %ymm11, %ymm11
  12848. vpsllq $39, %ymm12, %ymm12
  12849. vpsllq $41, %ymm13, %ymm13
  12850. vpsllq $2, %ymm14, %ymm14
  12851. vpor %ymm0, %ymm10, %ymm10
  12852. vpor %ymm1, %ymm11, %ymm11
  12853. vpor %ymm2, %ymm12, %ymm12
  12854. vpor %ymm3, %ymm13, %ymm13
  12855. vpor %ymm4, %ymm14, %ymm14
  12856. vpandn %ymm12, %ymm11, %ymm0
  12857. vpandn %ymm13, %ymm12, %ymm1
  12858. vpandn %ymm14, %ymm13, %ymm2
  12859. vpandn %ymm10, %ymm14, %ymm3
  12860. vpandn %ymm11, %ymm10, %ymm4
  12861. vpxor %ymm10, %ymm0, %ymm0
  12862. vpxor %ymm11, %ymm1, %ymm1
  12863. vpxor %ymm12, %ymm2, %ymm2
  12864. vpxor %ymm13, %ymm3, %ymm3
  12865. vpxor %ymm14, %ymm4, %ymm4
  12866. vmovdqu %ymm0, -96(%rcx)
  12867. vmovdqu %ymm1, (%rcx)
  12868. vmovdqu %ymm2, -32(%rdi)
  12869. vmovdqu %ymm3, 64(%rdi)
  12870. vmovdqu %ymm4, 64(%rax)
  12871. # Round 15
  12872. # Calc b[0..4]
  12873. vpxor %ymm15, %ymm0, %ymm10
  12874. vpxor -96(%rdi), %ymm4, %ymm14
  12875. vpxor -64(%rdi), %ymm3, %ymm13
  12876. vpxor (%rdi), %ymm1, %ymm11
  12877. vpxor 32(%rdi), %ymm14, %ymm14
  12878. vpxor 96(%rdi), %ymm2, %ymm12
  12879. vpxor 128(%rdi), %ymm11, %ymm11
  12880. vpxor -96(%rax), %ymm10, %ymm10
  12881. vpxor -64(%rax), %ymm13, %ymm13
  12882. vpxor -32(%rax), %ymm12, %ymm12
  12883. vpxor (%rax), %ymm11, %ymm11
  12884. vpxor 32(%rax), %ymm10, %ymm10
  12885. vpxor 96(%rax), %ymm12, %ymm12
  12886. vpxor 128(%rax), %ymm11, %ymm11
  12887. vpxor -64(%rcx), %ymm14, %ymm14
  12888. vpxor -32(%rcx), %ymm13, %ymm13
  12889. vpxor 32(%rcx), %ymm10, %ymm10
  12890. vpxor 64(%rcx), %ymm14, %ymm14
  12891. vpxor 96(%rcx), %ymm13, %ymm13
  12892. vpxor 128(%rcx), %ymm12, %ymm12
  12893. # Calc t[0..4]
  12894. vpsrlq $63, %ymm11, %ymm0
  12895. vpsrlq $63, %ymm12, %ymm1
  12896. vpsrlq $63, %ymm13, %ymm2
  12897. vpsrlq $63, %ymm14, %ymm3
  12898. vpsrlq $63, %ymm10, %ymm4
  12899. vpaddq %ymm11, %ymm11, %ymm5
  12900. vpaddq %ymm12, %ymm12, %ymm6
  12901. vpaddq %ymm13, %ymm13, %ymm7
  12902. vpaddq %ymm14, %ymm14, %ymm8
  12903. vpaddq %ymm10, %ymm10, %ymm9
  12904. vpor %ymm0, %ymm5, %ymm5
  12905. vpor %ymm1, %ymm6, %ymm6
  12906. vpor %ymm2, %ymm7, %ymm7
  12907. vpor %ymm3, %ymm8, %ymm8
  12908. vpor %ymm4, %ymm9, %ymm9
  12909. vpxor %ymm14, %ymm5, %ymm5
  12910. vpxor %ymm10, %ymm6, %ymm6
  12911. vpxor %ymm11, %ymm7, %ymm7
  12912. vpxor %ymm12, %ymm8, %ymm8
  12913. vpxor %ymm13, %ymm9, %ymm9
  12914. # Row Mix
  12915. # Row 0
  12916. vpxor %ymm15, %ymm5, %ymm10
  12917. vpxor 128(%rax), %ymm6, %ymm11
  12918. vpxor 96(%rdi), %ymm7, %ymm12
  12919. vpxor 96(%rcx), %ymm8, %ymm13
  12920. vpxor 64(%rax), %ymm9, %ymm14
  12921. vpsrlq $20, %ymm11, %ymm0
  12922. vpsrlq $21, %ymm12, %ymm1
  12923. vpsrlq $43, %ymm13, %ymm2
  12924. vpsrlq $50, %ymm14, %ymm3
  12925. vpsllq $44, %ymm11, %ymm11
  12926. vpsllq $43, %ymm12, %ymm12
  12927. vpsllq $21, %ymm13, %ymm13
  12928. vpsllq $14, %ymm14, %ymm14
  12929. vpor %ymm0, %ymm11, %ymm11
  12930. vpor %ymm1, %ymm12, %ymm12
  12931. vpor %ymm2, %ymm13, %ymm13
  12932. vpor %ymm3, %ymm14, %ymm14
  12933. vpandn %ymm12, %ymm11, %ymm15
  12934. vpandn %ymm13, %ymm12, %ymm1
  12935. vpandn %ymm14, %ymm13, %ymm2
  12936. vpandn %ymm10, %ymm14, %ymm3
  12937. vpandn %ymm11, %ymm10, %ymm4
  12938. vpxor %ymm10, %ymm15, %ymm15
  12939. vpxor %ymm11, %ymm1, %ymm1
  12940. vpxor %ymm12, %ymm2, %ymm2
  12941. # XOR in constant
  12942. vpxor 480(%rdx), %ymm15, %ymm15
  12943. vpxor %ymm13, %ymm3, %ymm3
  12944. vpxor %ymm14, %ymm4, %ymm4
  12945. vmovdqu %ymm1, 128(%rax)
  12946. vmovdqu %ymm2, 96(%rdi)
  12947. vmovdqu %ymm3, 96(%rcx)
  12948. vmovdqu %ymm4, 64(%rax)
  12949. # Row 1
  12950. vpxor -32(%rcx), %ymm8, %ymm10
  12951. vpxor 32(%rdi), %ymm9, %ymm11
  12952. vpxor 32(%rcx), %ymm5, %ymm12
  12953. vpxor (%rax), %ymm6, %ymm13
  12954. vpxor -32(%rdi), %ymm7, %ymm14
  12955. vpsrlq $36, %ymm10, %ymm0
  12956. vpsrlq $44, %ymm11, %ymm1
  12957. vpsrlq $61, %ymm12, %ymm2
  12958. vpsrlq $19, %ymm13, %ymm3
  12959. vpsrlq $3, %ymm14, %ymm4
  12960. vpsllq $28, %ymm10, %ymm10
  12961. vpsllq $20, %ymm11, %ymm11
  12962. vpsllq $3, %ymm12, %ymm12
  12963. vpsllq $45, %ymm13, %ymm13
  12964. vpsllq $61, %ymm14, %ymm14
  12965. vpor %ymm0, %ymm10, %ymm10
  12966. vpor %ymm1, %ymm11, %ymm11
  12967. vpor %ymm2, %ymm12, %ymm12
  12968. vpor %ymm3, %ymm13, %ymm13
  12969. vpor %ymm4, %ymm14, %ymm14
  12970. vpandn %ymm12, %ymm11, %ymm0
  12971. vpandn %ymm13, %ymm12, %ymm1
  12972. vpandn %ymm14, %ymm13, %ymm2
  12973. vpandn %ymm10, %ymm14, %ymm3
  12974. vpandn %ymm11, %ymm10, %ymm4
  12975. vpxor %ymm10, %ymm0, %ymm0
  12976. vpxor %ymm11, %ymm1, %ymm1
  12977. vpxor %ymm12, %ymm2, %ymm2
  12978. vpxor %ymm13, %ymm3, %ymm3
  12979. vpxor %ymm14, %ymm4, %ymm4
  12980. vmovdqu %ymm0, -32(%rcx)
  12981. vmovdqu %ymm1, 32(%rdi)
  12982. vmovdqu %ymm2, 32(%rcx)
  12983. vmovdqu %ymm3, (%rax)
  12984. vmovdqu %ymm4, -32(%rdi)
  12985. # Row 2
  12986. vpxor 128(%rdi), %ymm6, %ymm10
  12987. vpxor 128(%rcx), %ymm7, %ymm11
  12988. vpxor -64(%rax), %ymm8, %ymm12
  12989. vpxor -96(%rdi), %ymm9, %ymm13
  12990. vpxor -96(%rcx), %ymm5, %ymm14
  12991. vpsrlq $63, %ymm10, %ymm0
  12992. vpsrlq $58, %ymm11, %ymm1
  12993. vpsrlq $39, %ymm12, %ymm2
  12994. vpsrlq $56, %ymm13, %ymm3
  12995. vpsrlq $46, %ymm14, %ymm4
  12996. vpaddq %ymm10, %ymm10, %ymm10
  12997. vpsllq $6, %ymm11, %ymm11
  12998. vpsllq $25, %ymm12, %ymm12
  12999. vpsllq $8, %ymm13, %ymm13
  13000. vpsllq $18, %ymm14, %ymm14
  13001. vpor %ymm0, %ymm10, %ymm10
  13002. vpor %ymm1, %ymm11, %ymm11
  13003. vpor %ymm2, %ymm12, %ymm12
  13004. vpor %ymm3, %ymm13, %ymm13
  13005. vpor %ymm4, %ymm14, %ymm14
  13006. vpandn %ymm12, %ymm11, %ymm0
  13007. vpandn %ymm13, %ymm12, %ymm1
  13008. vpandn %ymm14, %ymm13, %ymm2
  13009. vpandn %ymm10, %ymm14, %ymm3
  13010. vpandn %ymm11, %ymm10, %ymm4
  13011. vpxor %ymm10, %ymm0, %ymm0
  13012. vpxor %ymm11, %ymm1, %ymm1
  13013. vpxor %ymm12, %ymm2, %ymm2
  13014. vpxor %ymm13, %ymm3, %ymm3
  13015. vpxor %ymm14, %ymm4, %ymm4
  13016. vmovdqu %ymm0, 128(%rdi)
  13017. vmovdqu %ymm1, 128(%rcx)
  13018. vmovdqu %ymm2, -64(%rax)
  13019. vmovdqu %ymm3, -96(%rdi)
  13020. vmovdqu %ymm4, -96(%rcx)
  13021. # Row 3
  13022. vpxor 64(%rcx), %ymm9, %ymm10
  13023. vpxor 32(%rax), %ymm5, %ymm11
  13024. vpxor (%rdi), %ymm6, %ymm12
  13025. vpxor 96(%rax), %ymm7, %ymm13
  13026. vpxor 64(%rdi), %ymm8, %ymm14
  13027. vpsrlq $37, %ymm10, %ymm0
  13028. vpsrlq $28, %ymm11, %ymm1
  13029. vpsrlq $54, %ymm12, %ymm2
  13030. vpsrlq $49, %ymm13, %ymm3
  13031. vpsrlq $8, %ymm14, %ymm4
  13032. vpsllq $27, %ymm10, %ymm10
  13033. vpsllq $36, %ymm11, %ymm11
  13034. vpsllq $10, %ymm12, %ymm12
  13035. vpsllq $15, %ymm13, %ymm13
  13036. vpsllq $56, %ymm14, %ymm14
  13037. vpor %ymm0, %ymm10, %ymm10
  13038. vpor %ymm1, %ymm11, %ymm11
  13039. vpor %ymm2, %ymm12, %ymm12
  13040. vpor %ymm3, %ymm13, %ymm13
  13041. vpor %ymm4, %ymm14, %ymm14
  13042. vpandn %ymm12, %ymm11, %ymm0
  13043. vpandn %ymm13, %ymm12, %ymm1
  13044. vpandn %ymm14, %ymm13, %ymm2
  13045. vpandn %ymm10, %ymm14, %ymm3
  13046. vpandn %ymm11, %ymm10, %ymm4
  13047. vpxor %ymm10, %ymm0, %ymm0
  13048. vpxor %ymm11, %ymm1, %ymm1
  13049. vpxor %ymm12, %ymm2, %ymm2
  13050. vpxor %ymm13, %ymm3, %ymm3
  13051. vpxor %ymm14, %ymm4, %ymm4
  13052. vmovdqu %ymm0, 64(%rcx)
  13053. vmovdqu %ymm1, 32(%rax)
  13054. vmovdqu %ymm2, (%rdi)
  13055. vmovdqu %ymm3, 96(%rax)
  13056. vmovdqu %ymm4, 64(%rdi)
  13057. # Row 4
  13058. vpxor -32(%rax), %ymm7, %ymm10
  13059. vpxor -64(%rdi), %ymm8, %ymm11
  13060. vpxor -64(%rcx), %ymm9, %ymm12
  13061. vpxor -96(%rax), %ymm5, %ymm13
  13062. vpxor (%rcx), %ymm6, %ymm14
  13063. vpsrlq $2, %ymm10, %ymm0
  13064. vpsrlq $9, %ymm11, %ymm1
  13065. vpsrlq $25, %ymm12, %ymm2
  13066. vpsrlq $23, %ymm13, %ymm3
  13067. vpsrlq $62, %ymm14, %ymm4
  13068. vpsllq $62, %ymm10, %ymm10
  13069. vpsllq $55, %ymm11, %ymm11
  13070. vpsllq $39, %ymm12, %ymm12
  13071. vpsllq $41, %ymm13, %ymm13
  13072. vpsllq $2, %ymm14, %ymm14
  13073. vpor %ymm0, %ymm10, %ymm10
  13074. vpor %ymm1, %ymm11, %ymm11
  13075. vpor %ymm2, %ymm12, %ymm12
  13076. vpor %ymm3, %ymm13, %ymm13
  13077. vpor %ymm4, %ymm14, %ymm14
  13078. vpandn %ymm12, %ymm11, %ymm0
  13079. vpandn %ymm13, %ymm12, %ymm1
  13080. vpandn %ymm14, %ymm13, %ymm2
  13081. vpandn %ymm10, %ymm14, %ymm3
  13082. vpandn %ymm11, %ymm10, %ymm4
  13083. vpxor %ymm10, %ymm0, %ymm0
  13084. vpxor %ymm11, %ymm1, %ymm1
  13085. vpxor %ymm12, %ymm2, %ymm2
  13086. vpxor %ymm13, %ymm3, %ymm3
  13087. vpxor %ymm14, %ymm4, %ymm4
  13088. vmovdqu %ymm0, -32(%rax)
  13089. vmovdqu %ymm1, -64(%rdi)
  13090. vmovdqu %ymm2, -64(%rcx)
  13091. vmovdqu %ymm3, -96(%rax)
  13092. vmovdqu %ymm4, (%rcx)
  13093. # Round 16
  13094. # Calc b[0..4]
  13095. vpxor %ymm15, %ymm0, %ymm10
  13096. vpxor -96(%rdi), %ymm3, %ymm13
  13097. vpxor -32(%rdi), %ymm4, %ymm14
  13098. vpxor (%rdi), %ymm2, %ymm12
  13099. vpxor 32(%rdi), %ymm1, %ymm11
  13100. vpxor 64(%rdi), %ymm14, %ymm14
  13101. vpxor 96(%rdi), %ymm12, %ymm12
  13102. vpxor 128(%rdi), %ymm10, %ymm10
  13103. vpxor -64(%rax), %ymm12, %ymm12
  13104. vpxor (%rax), %ymm13, %ymm13
  13105. vpxor 32(%rax), %ymm11, %ymm11
  13106. vpxor 64(%rax), %ymm14, %ymm14
  13107. vpxor 96(%rax), %ymm13, %ymm13
  13108. vpxor 128(%rax), %ymm11, %ymm11
  13109. vpxor -96(%rcx), %ymm14, %ymm14
  13110. vpxor -32(%rcx), %ymm10, %ymm10
  13111. vpxor 32(%rcx), %ymm12, %ymm12
  13112. vpxor 64(%rcx), %ymm10, %ymm10
  13113. vpxor 96(%rcx), %ymm13, %ymm13
  13114. vpxor 128(%rcx), %ymm11, %ymm11
  13115. # Calc t[0..4]
  13116. vpsrlq $63, %ymm11, %ymm0
  13117. vpsrlq $63, %ymm12, %ymm1
  13118. vpsrlq $63, %ymm13, %ymm2
  13119. vpsrlq $63, %ymm14, %ymm3
  13120. vpsrlq $63, %ymm10, %ymm4
  13121. vpaddq %ymm11, %ymm11, %ymm5
  13122. vpaddq %ymm12, %ymm12, %ymm6
  13123. vpaddq %ymm13, %ymm13, %ymm7
  13124. vpaddq %ymm14, %ymm14, %ymm8
  13125. vpaddq %ymm10, %ymm10, %ymm9
  13126. vpor %ymm0, %ymm5, %ymm5
  13127. vpor %ymm1, %ymm6, %ymm6
  13128. vpor %ymm2, %ymm7, %ymm7
  13129. vpor %ymm3, %ymm8, %ymm8
  13130. vpor %ymm4, %ymm9, %ymm9
  13131. vpxor %ymm14, %ymm5, %ymm5
  13132. vpxor %ymm10, %ymm6, %ymm6
  13133. vpxor %ymm11, %ymm7, %ymm7
  13134. vpxor %ymm12, %ymm8, %ymm8
  13135. vpxor %ymm13, %ymm9, %ymm9
  13136. # Row Mix
  13137. # Row 0
  13138. vpxor %ymm15, %ymm5, %ymm10
  13139. vpxor 32(%rdi), %ymm6, %ymm11
  13140. vpxor -64(%rax), %ymm7, %ymm12
  13141. vpxor 96(%rax), %ymm8, %ymm13
  13142. vpxor (%rcx), %ymm9, %ymm14
  13143. vpsrlq $20, %ymm11, %ymm0
  13144. vpsrlq $21, %ymm12, %ymm1
  13145. vpsrlq $43, %ymm13, %ymm2
  13146. vpsrlq $50, %ymm14, %ymm3
  13147. vpsllq $44, %ymm11, %ymm11
  13148. vpsllq $43, %ymm12, %ymm12
  13149. vpsllq $21, %ymm13, %ymm13
  13150. vpsllq $14, %ymm14, %ymm14
  13151. vpor %ymm0, %ymm11, %ymm11
  13152. vpor %ymm1, %ymm12, %ymm12
  13153. vpor %ymm2, %ymm13, %ymm13
  13154. vpor %ymm3, %ymm14, %ymm14
  13155. vpandn %ymm12, %ymm11, %ymm15
  13156. vpandn %ymm13, %ymm12, %ymm1
  13157. vpandn %ymm14, %ymm13, %ymm2
  13158. vpandn %ymm10, %ymm14, %ymm3
  13159. vpandn %ymm11, %ymm10, %ymm4
  13160. vpxor %ymm10, %ymm15, %ymm15
  13161. vpxor %ymm11, %ymm1, %ymm1
  13162. vpxor %ymm12, %ymm2, %ymm2
  13163. # XOR in constant
  13164. vpxor 512(%rdx), %ymm15, %ymm15
  13165. vpxor %ymm13, %ymm3, %ymm3
  13166. vpxor %ymm14, %ymm4, %ymm4
  13167. vmovdqu %ymm1, 32(%rdi)
  13168. vmovdqu %ymm2, -64(%rax)
  13169. vmovdqu %ymm3, 96(%rax)
  13170. vmovdqu %ymm4, (%rcx)
  13171. # Row 1
  13172. vpxor 96(%rcx), %ymm8, %ymm10
  13173. vpxor -32(%rdi), %ymm9, %ymm11
  13174. vpxor 128(%rdi), %ymm5, %ymm12
  13175. vpxor 32(%rax), %ymm6, %ymm13
  13176. vpxor -64(%rcx), %ymm7, %ymm14
  13177. vpsrlq $36, %ymm10, %ymm0
  13178. vpsrlq $44, %ymm11, %ymm1
  13179. vpsrlq $61, %ymm12, %ymm2
  13180. vpsrlq $19, %ymm13, %ymm3
  13181. vpsrlq $3, %ymm14, %ymm4
  13182. vpsllq $28, %ymm10, %ymm10
  13183. vpsllq $20, %ymm11, %ymm11
  13184. vpsllq $3, %ymm12, %ymm12
  13185. vpsllq $45, %ymm13, %ymm13
  13186. vpsllq $61, %ymm14, %ymm14
  13187. vpor %ymm0, %ymm10, %ymm10
  13188. vpor %ymm1, %ymm11, %ymm11
  13189. vpor %ymm2, %ymm12, %ymm12
  13190. vpor %ymm3, %ymm13, %ymm13
  13191. vpor %ymm4, %ymm14, %ymm14
  13192. vpandn %ymm12, %ymm11, %ymm0
  13193. vpandn %ymm13, %ymm12, %ymm1
  13194. vpandn %ymm14, %ymm13, %ymm2
  13195. vpandn %ymm10, %ymm14, %ymm3
  13196. vpandn %ymm11, %ymm10, %ymm4
  13197. vpxor %ymm10, %ymm0, %ymm0
  13198. vpxor %ymm11, %ymm1, %ymm1
  13199. vpxor %ymm12, %ymm2, %ymm2
  13200. vpxor %ymm13, %ymm3, %ymm3
  13201. vpxor %ymm14, %ymm4, %ymm4
  13202. vmovdqu %ymm0, 96(%rcx)
  13203. vmovdqu %ymm1, -32(%rdi)
  13204. vmovdqu %ymm2, 128(%rdi)
  13205. vmovdqu %ymm3, 32(%rax)
  13206. vmovdqu %ymm4, -64(%rcx)
  13207. # Row 2
  13208. vpxor 128(%rax), %ymm6, %ymm10
  13209. vpxor 32(%rcx), %ymm7, %ymm11
  13210. vpxor -96(%rdi), %ymm8, %ymm12
  13211. vpxor 64(%rdi), %ymm9, %ymm13
  13212. vpxor -32(%rax), %ymm5, %ymm14
  13213. vpsrlq $63, %ymm10, %ymm0
  13214. vpsrlq $58, %ymm11, %ymm1
  13215. vpsrlq $39, %ymm12, %ymm2
  13216. vpsrlq $56, %ymm13, %ymm3
  13217. vpsrlq $46, %ymm14, %ymm4
  13218. vpaddq %ymm10, %ymm10, %ymm10
  13219. vpsllq $6, %ymm11, %ymm11
  13220. vpsllq $25, %ymm12, %ymm12
  13221. vpsllq $8, %ymm13, %ymm13
  13222. vpsllq $18, %ymm14, %ymm14
  13223. vpor %ymm0, %ymm10, %ymm10
  13224. vpor %ymm1, %ymm11, %ymm11
  13225. vpor %ymm2, %ymm12, %ymm12
  13226. vpor %ymm3, %ymm13, %ymm13
  13227. vpor %ymm4, %ymm14, %ymm14
  13228. vpandn %ymm12, %ymm11, %ymm0
  13229. vpandn %ymm13, %ymm12, %ymm1
  13230. vpandn %ymm14, %ymm13, %ymm2
  13231. vpandn %ymm10, %ymm14, %ymm3
  13232. vpandn %ymm11, %ymm10, %ymm4
  13233. vpxor %ymm10, %ymm0, %ymm0
  13234. vpxor %ymm11, %ymm1, %ymm1
  13235. vpxor %ymm12, %ymm2, %ymm2
  13236. vpxor %ymm13, %ymm3, %ymm3
  13237. vpxor %ymm14, %ymm4, %ymm4
  13238. vmovdqu %ymm0, 128(%rax)
  13239. vmovdqu %ymm1, 32(%rcx)
  13240. vmovdqu %ymm2, -96(%rdi)
  13241. vmovdqu %ymm3, 64(%rdi)
  13242. vmovdqu %ymm4, -32(%rax)
  13243. # Row 3
  13244. vpxor 64(%rax), %ymm9, %ymm10
  13245. vpxor -32(%rcx), %ymm5, %ymm11
  13246. vpxor 128(%rcx), %ymm6, %ymm12
  13247. vpxor (%rdi), %ymm7, %ymm13
  13248. vpxor -96(%rax), %ymm8, %ymm14
  13249. vpsrlq $37, %ymm10, %ymm0
  13250. vpsrlq $28, %ymm11, %ymm1
  13251. vpsrlq $54, %ymm12, %ymm2
  13252. vpsrlq $49, %ymm13, %ymm3
  13253. vpsrlq $8, %ymm14, %ymm4
  13254. vpsllq $27, %ymm10, %ymm10
  13255. vpsllq $36, %ymm11, %ymm11
  13256. vpsllq $10, %ymm12, %ymm12
  13257. vpsllq $15, %ymm13, %ymm13
  13258. vpsllq $56, %ymm14, %ymm14
  13259. vpor %ymm0, %ymm10, %ymm10
  13260. vpor %ymm1, %ymm11, %ymm11
  13261. vpor %ymm2, %ymm12, %ymm12
  13262. vpor %ymm3, %ymm13, %ymm13
  13263. vpor %ymm4, %ymm14, %ymm14
  13264. vpandn %ymm12, %ymm11, %ymm0
  13265. vpandn %ymm13, %ymm12, %ymm1
  13266. vpandn %ymm14, %ymm13, %ymm2
  13267. vpandn %ymm10, %ymm14, %ymm3
  13268. vpandn %ymm11, %ymm10, %ymm4
  13269. vpxor %ymm10, %ymm0, %ymm0
  13270. vpxor %ymm11, %ymm1, %ymm1
  13271. vpxor %ymm12, %ymm2, %ymm2
  13272. vpxor %ymm13, %ymm3, %ymm3
  13273. vpxor %ymm14, %ymm4, %ymm4
  13274. vmovdqu %ymm0, 64(%rax)
  13275. vmovdqu %ymm1, -32(%rcx)
  13276. vmovdqu %ymm2, 128(%rcx)
  13277. vmovdqu %ymm3, (%rdi)
  13278. vmovdqu %ymm4, -96(%rax)
  13279. # Row 4
  13280. vpxor 96(%rdi), %ymm7, %ymm10
  13281. vpxor (%rax), %ymm8, %ymm11
  13282. vpxor -96(%rcx), %ymm9, %ymm12
  13283. vpxor 64(%rcx), %ymm5, %ymm13
  13284. vpxor -64(%rdi), %ymm6, %ymm14
  13285. vpsrlq $2, %ymm10, %ymm0
  13286. vpsrlq $9, %ymm11, %ymm1
  13287. vpsrlq $25, %ymm12, %ymm2
  13288. vpsrlq $23, %ymm13, %ymm3
  13289. vpsrlq $62, %ymm14, %ymm4
  13290. vpsllq $62, %ymm10, %ymm10
  13291. vpsllq $55, %ymm11, %ymm11
  13292. vpsllq $39, %ymm12, %ymm12
  13293. vpsllq $41, %ymm13, %ymm13
  13294. vpsllq $2, %ymm14, %ymm14
  13295. vpor %ymm0, %ymm10, %ymm10
  13296. vpor %ymm1, %ymm11, %ymm11
  13297. vpor %ymm2, %ymm12, %ymm12
  13298. vpor %ymm3, %ymm13, %ymm13
  13299. vpor %ymm4, %ymm14, %ymm14
  13300. vpandn %ymm12, %ymm11, %ymm0
  13301. vpandn %ymm13, %ymm12, %ymm1
  13302. vpandn %ymm14, %ymm13, %ymm2
  13303. vpandn %ymm10, %ymm14, %ymm3
  13304. vpandn %ymm11, %ymm10, %ymm4
  13305. vpxor %ymm10, %ymm0, %ymm0
  13306. vpxor %ymm11, %ymm1, %ymm1
  13307. vpxor %ymm12, %ymm2, %ymm2
  13308. vpxor %ymm13, %ymm3, %ymm3
  13309. vpxor %ymm14, %ymm4, %ymm4
  13310. vmovdqu %ymm0, 96(%rdi)
  13311. vmovdqu %ymm1, (%rax)
  13312. vmovdqu %ymm2, -96(%rcx)
  13313. vmovdqu %ymm3, 64(%rcx)
  13314. vmovdqu %ymm4, -64(%rdi)
  13315. # Round 17
  13316. # Calc b[0..4]
  13317. vpxor %ymm15, %ymm0, %ymm10
  13318. vpxor -96(%rdi), %ymm2, %ymm12
  13319. vpxor -32(%rdi), %ymm1, %ymm11
  13320. vpxor (%rdi), %ymm3, %ymm13
  13321. vpxor 32(%rdi), %ymm11, %ymm11
  13322. vpxor 64(%rdi), %ymm13, %ymm13
  13323. vpxor 128(%rdi), %ymm12, %ymm12
  13324. vpxor -96(%rax), %ymm4, %ymm14
  13325. vpxor -64(%rax), %ymm12, %ymm12
  13326. vpxor -32(%rax), %ymm14, %ymm14
  13327. vpxor 32(%rax), %ymm13, %ymm13
  13328. vpxor 64(%rax), %ymm10, %ymm10
  13329. vpxor 96(%rax), %ymm13, %ymm13
  13330. vpxor 128(%rax), %ymm10, %ymm10
  13331. vpxor -64(%rcx), %ymm14, %ymm14
  13332. vpxor -32(%rcx), %ymm11, %ymm11
  13333. vpxor (%rcx), %ymm14, %ymm14
  13334. vpxor 32(%rcx), %ymm11, %ymm11
  13335. vpxor 96(%rcx), %ymm10, %ymm10
  13336. vpxor 128(%rcx), %ymm12, %ymm12
  13337. # Calc t[0..4]
  13338. vpsrlq $63, %ymm11, %ymm0
  13339. vpsrlq $63, %ymm12, %ymm1
  13340. vpsrlq $63, %ymm13, %ymm2
  13341. vpsrlq $63, %ymm14, %ymm3
  13342. vpsrlq $63, %ymm10, %ymm4
  13343. vpaddq %ymm11, %ymm11, %ymm5
  13344. vpaddq %ymm12, %ymm12, %ymm6
  13345. vpaddq %ymm13, %ymm13, %ymm7
  13346. vpaddq %ymm14, %ymm14, %ymm8
  13347. vpaddq %ymm10, %ymm10, %ymm9
  13348. vpor %ymm0, %ymm5, %ymm5
  13349. vpor %ymm1, %ymm6, %ymm6
  13350. vpor %ymm2, %ymm7, %ymm7
  13351. vpor %ymm3, %ymm8, %ymm8
  13352. vpor %ymm4, %ymm9, %ymm9
  13353. vpxor %ymm14, %ymm5, %ymm5
  13354. vpxor %ymm10, %ymm6, %ymm6
  13355. vpxor %ymm11, %ymm7, %ymm7
  13356. vpxor %ymm12, %ymm8, %ymm8
  13357. vpxor %ymm13, %ymm9, %ymm9
  13358. # Row Mix
  13359. # Row 0
  13360. vpxor %ymm15, %ymm5, %ymm10
  13361. vpxor -32(%rdi), %ymm6, %ymm11
  13362. vpxor -96(%rdi), %ymm7, %ymm12
  13363. vpxor (%rdi), %ymm8, %ymm13
  13364. vpxor -64(%rdi), %ymm9, %ymm14
  13365. vpsrlq $20, %ymm11, %ymm0
  13366. vpsrlq $21, %ymm12, %ymm1
  13367. vpsrlq $43, %ymm13, %ymm2
  13368. vpsrlq $50, %ymm14, %ymm3
  13369. vpsllq $44, %ymm11, %ymm11
  13370. vpsllq $43, %ymm12, %ymm12
  13371. vpsllq $21, %ymm13, %ymm13
  13372. vpsllq $14, %ymm14, %ymm14
  13373. vpor %ymm0, %ymm11, %ymm11
  13374. vpor %ymm1, %ymm12, %ymm12
  13375. vpor %ymm2, %ymm13, %ymm13
  13376. vpor %ymm3, %ymm14, %ymm14
  13377. vpandn %ymm12, %ymm11, %ymm15
  13378. vpandn %ymm13, %ymm12, %ymm1
  13379. vpandn %ymm14, %ymm13, %ymm2
  13380. vpandn %ymm10, %ymm14, %ymm3
  13381. vpandn %ymm11, %ymm10, %ymm4
  13382. vpxor %ymm10, %ymm15, %ymm15
  13383. vpxor %ymm11, %ymm1, %ymm1
  13384. vpxor %ymm12, %ymm2, %ymm2
  13385. # XOR in constant
  13386. vpxor 544(%rdx), %ymm15, %ymm15
  13387. vpxor %ymm13, %ymm3, %ymm3
  13388. vpxor %ymm14, %ymm4, %ymm4
  13389. vmovdqu %ymm1, -32(%rdi)
  13390. vmovdqu %ymm2, -96(%rdi)
  13391. vmovdqu %ymm3, (%rdi)
  13392. vmovdqu %ymm4, -64(%rdi)
  13393. # Row 1
  13394. vpxor 96(%rax), %ymm8, %ymm10
  13395. vpxor -64(%rcx), %ymm9, %ymm11
  13396. vpxor 128(%rax), %ymm5, %ymm12
  13397. vpxor -32(%rcx), %ymm6, %ymm13
  13398. vpxor -96(%rcx), %ymm7, %ymm14
  13399. vpsrlq $36, %ymm10, %ymm0
  13400. vpsrlq $44, %ymm11, %ymm1
  13401. vpsrlq $61, %ymm12, %ymm2
  13402. vpsrlq $19, %ymm13, %ymm3
  13403. vpsrlq $3, %ymm14, %ymm4
  13404. vpsllq $28, %ymm10, %ymm10
  13405. vpsllq $20, %ymm11, %ymm11
  13406. vpsllq $3, %ymm12, %ymm12
  13407. vpsllq $45, %ymm13, %ymm13
  13408. vpsllq $61, %ymm14, %ymm14
  13409. vpor %ymm0, %ymm10, %ymm10
  13410. vpor %ymm1, %ymm11, %ymm11
  13411. vpor %ymm2, %ymm12, %ymm12
  13412. vpor %ymm3, %ymm13, %ymm13
  13413. vpor %ymm4, %ymm14, %ymm14
  13414. vpandn %ymm12, %ymm11, %ymm0
  13415. vpandn %ymm13, %ymm12, %ymm1
  13416. vpandn %ymm14, %ymm13, %ymm2
  13417. vpandn %ymm10, %ymm14, %ymm3
  13418. vpandn %ymm11, %ymm10, %ymm4
  13419. vpxor %ymm10, %ymm0, %ymm0
  13420. vpxor %ymm11, %ymm1, %ymm1
  13421. vpxor %ymm12, %ymm2, %ymm2
  13422. vpxor %ymm13, %ymm3, %ymm3
  13423. vpxor %ymm14, %ymm4, %ymm4
  13424. vmovdqu %ymm0, 96(%rax)
  13425. vmovdqu %ymm1, -64(%rcx)
  13426. vmovdqu %ymm2, 128(%rax)
  13427. vmovdqu %ymm3, -32(%rcx)
  13428. vmovdqu %ymm4, -96(%rcx)
  13429. # Row 2
  13430. vpxor 32(%rdi), %ymm6, %ymm10
  13431. vpxor 128(%rdi), %ymm7, %ymm11
  13432. vpxor 64(%rdi), %ymm8, %ymm12
  13433. vpxor -96(%rax), %ymm9, %ymm13
  13434. vpxor 96(%rdi), %ymm5, %ymm14
  13435. vpsrlq $63, %ymm10, %ymm0
  13436. vpsrlq $58, %ymm11, %ymm1
  13437. vpsrlq $39, %ymm12, %ymm2
  13438. vpsrlq $56, %ymm13, %ymm3
  13439. vpsrlq $46, %ymm14, %ymm4
  13440. vpaddq %ymm10, %ymm10, %ymm10
  13441. vpsllq $6, %ymm11, %ymm11
  13442. vpsllq $25, %ymm12, %ymm12
  13443. vpsllq $8, %ymm13, %ymm13
  13444. vpsllq $18, %ymm14, %ymm14
  13445. vpor %ymm0, %ymm10, %ymm10
  13446. vpor %ymm1, %ymm11, %ymm11
  13447. vpor %ymm2, %ymm12, %ymm12
  13448. vpor %ymm3, %ymm13, %ymm13
  13449. vpor %ymm4, %ymm14, %ymm14
  13450. vpandn %ymm12, %ymm11, %ymm0
  13451. vpandn %ymm13, %ymm12, %ymm1
  13452. vpandn %ymm14, %ymm13, %ymm2
  13453. vpandn %ymm10, %ymm14, %ymm3
  13454. vpandn %ymm11, %ymm10, %ymm4
  13455. vpxor %ymm10, %ymm0, %ymm0
  13456. vpxor %ymm11, %ymm1, %ymm1
  13457. vpxor %ymm12, %ymm2, %ymm2
  13458. vpxor %ymm13, %ymm3, %ymm3
  13459. vpxor %ymm14, %ymm4, %ymm4
  13460. vmovdqu %ymm0, 32(%rdi)
  13461. vmovdqu %ymm1, 128(%rdi)
  13462. vmovdqu %ymm2, 64(%rdi)
  13463. vmovdqu %ymm3, -96(%rax)
  13464. vmovdqu %ymm4, 96(%rdi)
  13465. # Row 3
  13466. vpxor (%rcx), %ymm9, %ymm10
  13467. vpxor 96(%rcx), %ymm5, %ymm11
  13468. vpxor 32(%rcx), %ymm6, %ymm12
  13469. vpxor 128(%rcx), %ymm7, %ymm13
  13470. vpxor 64(%rcx), %ymm8, %ymm14
  13471. vpsrlq $37, %ymm10, %ymm0
  13472. vpsrlq $28, %ymm11, %ymm1
  13473. vpsrlq $54, %ymm12, %ymm2
  13474. vpsrlq $49, %ymm13, %ymm3
  13475. vpsrlq $8, %ymm14, %ymm4
  13476. vpsllq $27, %ymm10, %ymm10
  13477. vpsllq $36, %ymm11, %ymm11
  13478. vpsllq $10, %ymm12, %ymm12
  13479. vpsllq $15, %ymm13, %ymm13
  13480. vpsllq $56, %ymm14, %ymm14
  13481. vpor %ymm0, %ymm10, %ymm10
  13482. vpor %ymm1, %ymm11, %ymm11
  13483. vpor %ymm2, %ymm12, %ymm12
  13484. vpor %ymm3, %ymm13, %ymm13
  13485. vpor %ymm4, %ymm14, %ymm14
  13486. vpandn %ymm12, %ymm11, %ymm0
  13487. vpandn %ymm13, %ymm12, %ymm1
  13488. vpandn %ymm14, %ymm13, %ymm2
  13489. vpandn %ymm10, %ymm14, %ymm3
  13490. vpandn %ymm11, %ymm10, %ymm4
  13491. vpxor %ymm10, %ymm0, %ymm0
  13492. vpxor %ymm11, %ymm1, %ymm1
  13493. vpxor %ymm12, %ymm2, %ymm2
  13494. vpxor %ymm13, %ymm3, %ymm3
  13495. vpxor %ymm14, %ymm4, %ymm4
  13496. vmovdqu %ymm0, (%rcx)
  13497. vmovdqu %ymm1, 96(%rcx)
  13498. vmovdqu %ymm2, 32(%rcx)
  13499. vmovdqu %ymm3, 128(%rcx)
  13500. vmovdqu %ymm4, 64(%rcx)
  13501. # Row 4
  13502. vpxor -64(%rax), %ymm7, %ymm10
  13503. vpxor 32(%rax), %ymm8, %ymm11
  13504. vpxor -32(%rax), %ymm9, %ymm12
  13505. vpxor 64(%rax), %ymm5, %ymm13
  13506. vpxor (%rax), %ymm6, %ymm14
  13507. vpsrlq $2, %ymm10, %ymm0
  13508. vpsrlq $9, %ymm11, %ymm1
  13509. vpsrlq $25, %ymm12, %ymm2
  13510. vpsrlq $23, %ymm13, %ymm3
  13511. vpsrlq $62, %ymm14, %ymm4
  13512. vpsllq $62, %ymm10, %ymm10
  13513. vpsllq $55, %ymm11, %ymm11
  13514. vpsllq $39, %ymm12, %ymm12
  13515. vpsllq $41, %ymm13, %ymm13
  13516. vpsllq $2, %ymm14, %ymm14
  13517. vpor %ymm0, %ymm10, %ymm10
  13518. vpor %ymm1, %ymm11, %ymm11
  13519. vpor %ymm2, %ymm12, %ymm12
  13520. vpor %ymm3, %ymm13, %ymm13
  13521. vpor %ymm4, %ymm14, %ymm14
  13522. vpandn %ymm12, %ymm11, %ymm0
  13523. vpandn %ymm13, %ymm12, %ymm1
  13524. vpandn %ymm14, %ymm13, %ymm2
  13525. vpandn %ymm10, %ymm14, %ymm3
  13526. vpandn %ymm11, %ymm10, %ymm4
  13527. vpxor %ymm10, %ymm0, %ymm0
  13528. vpxor %ymm11, %ymm1, %ymm1
  13529. vpxor %ymm12, %ymm2, %ymm2
  13530. vpxor %ymm13, %ymm3, %ymm3
  13531. vpxor %ymm14, %ymm4, %ymm4
  13532. vmovdqu %ymm0, -64(%rax)
  13533. vmovdqu %ymm1, 32(%rax)
  13534. vmovdqu %ymm2, -32(%rax)
  13535. vmovdqu %ymm3, 64(%rax)
  13536. vmovdqu %ymm4, (%rax)
  13537. # Round 18
  13538. # Calc b[0..4]
  13539. vpxor %ymm15, %ymm0, %ymm10
  13540. vpxor -96(%rdi), %ymm2, %ymm12
  13541. vpxor -64(%rdi), %ymm4, %ymm14
  13542. vpxor -32(%rdi), %ymm1, %ymm11
  13543. vpxor (%rdi), %ymm3, %ymm13
  13544. vpxor 32(%rdi), %ymm10, %ymm10
  13545. vpxor 64(%rdi), %ymm12, %ymm12
  13546. vpxor 96(%rdi), %ymm14, %ymm14
  13547. vpxor 128(%rdi), %ymm11, %ymm11
  13548. vpxor -96(%rax), %ymm13, %ymm13
  13549. vpxor 96(%rax), %ymm10, %ymm10
  13550. vpxor 128(%rax), %ymm12, %ymm12
  13551. vpxor -96(%rcx), %ymm14, %ymm14
  13552. vpxor -64(%rcx), %ymm11, %ymm11
  13553. vpxor -32(%rcx), %ymm13, %ymm13
  13554. vpxor (%rcx), %ymm10, %ymm10
  13555. vpxor 32(%rcx), %ymm12, %ymm12
  13556. vpxor 64(%rcx), %ymm14, %ymm14
  13557. vpxor 96(%rcx), %ymm11, %ymm11
  13558. vpxor 128(%rcx), %ymm13, %ymm13
  13559. # Calc t[0..4]
  13560. vpsrlq $63, %ymm11, %ymm0
  13561. vpsrlq $63, %ymm12, %ymm1
  13562. vpsrlq $63, %ymm13, %ymm2
  13563. vpsrlq $63, %ymm14, %ymm3
  13564. vpsrlq $63, %ymm10, %ymm4
  13565. vpaddq %ymm11, %ymm11, %ymm5
  13566. vpaddq %ymm12, %ymm12, %ymm6
  13567. vpaddq %ymm13, %ymm13, %ymm7
  13568. vpaddq %ymm14, %ymm14, %ymm8
  13569. vpaddq %ymm10, %ymm10, %ymm9
  13570. vpor %ymm0, %ymm5, %ymm5
  13571. vpor %ymm1, %ymm6, %ymm6
  13572. vpor %ymm2, %ymm7, %ymm7
  13573. vpor %ymm3, %ymm8, %ymm8
  13574. vpor %ymm4, %ymm9, %ymm9
  13575. vpxor %ymm14, %ymm5, %ymm5
  13576. vpxor %ymm10, %ymm6, %ymm6
  13577. vpxor %ymm11, %ymm7, %ymm7
  13578. vpxor %ymm12, %ymm8, %ymm8
  13579. vpxor %ymm13, %ymm9, %ymm9
  13580. # Row Mix
  13581. # Row 0
  13582. vpxor %ymm15, %ymm5, %ymm10
  13583. vpxor -64(%rcx), %ymm6, %ymm11
  13584. vpxor 64(%rdi), %ymm7, %ymm12
  13585. vpxor 128(%rcx), %ymm8, %ymm13
  13586. vpxor (%rax), %ymm9, %ymm14
  13587. vpsrlq $20, %ymm11, %ymm0
  13588. vpsrlq $21, %ymm12, %ymm1
  13589. vpsrlq $43, %ymm13, %ymm2
  13590. vpsrlq $50, %ymm14, %ymm3
  13591. vpsllq $44, %ymm11, %ymm11
  13592. vpsllq $43, %ymm12, %ymm12
  13593. vpsllq $21, %ymm13, %ymm13
  13594. vpsllq $14, %ymm14, %ymm14
  13595. vpor %ymm0, %ymm11, %ymm11
  13596. vpor %ymm1, %ymm12, %ymm12
  13597. vpor %ymm2, %ymm13, %ymm13
  13598. vpor %ymm3, %ymm14, %ymm14
  13599. vpandn %ymm12, %ymm11, %ymm15
  13600. vpandn %ymm13, %ymm12, %ymm1
  13601. vpandn %ymm14, %ymm13, %ymm2
  13602. vpandn %ymm10, %ymm14, %ymm3
  13603. vpandn %ymm11, %ymm10, %ymm4
  13604. vpxor %ymm10, %ymm15, %ymm15
  13605. vpxor %ymm11, %ymm1, %ymm1
  13606. vpxor %ymm12, %ymm2, %ymm2
  13607. # XOR in constant
  13608. vpxor 576(%rdx), %ymm15, %ymm15
  13609. vpxor %ymm13, %ymm3, %ymm3
  13610. vpxor %ymm14, %ymm4, %ymm4
  13611. vmovdqu %ymm1, -64(%rcx)
  13612. vmovdqu %ymm2, 64(%rdi)
  13613. vmovdqu %ymm3, 128(%rcx)
  13614. vmovdqu %ymm4, (%rax)
  13615. # Row 1
  13616. vpxor (%rdi), %ymm8, %ymm10
  13617. vpxor -96(%rcx), %ymm9, %ymm11
  13618. vpxor 32(%rdi), %ymm5, %ymm12
  13619. vpxor 96(%rcx), %ymm6, %ymm13
  13620. vpxor -32(%rax), %ymm7, %ymm14
  13621. vpsrlq $36, %ymm10, %ymm0
  13622. vpsrlq $44, %ymm11, %ymm1
  13623. vpsrlq $61, %ymm12, %ymm2
  13624. vpsrlq $19, %ymm13, %ymm3
  13625. vpsrlq $3, %ymm14, %ymm4
  13626. vpsllq $28, %ymm10, %ymm10
  13627. vpsllq $20, %ymm11, %ymm11
  13628. vpsllq $3, %ymm12, %ymm12
  13629. vpsllq $45, %ymm13, %ymm13
  13630. vpsllq $61, %ymm14, %ymm14
  13631. vpor %ymm0, %ymm10, %ymm10
  13632. vpor %ymm1, %ymm11, %ymm11
  13633. vpor %ymm2, %ymm12, %ymm12
  13634. vpor %ymm3, %ymm13, %ymm13
  13635. vpor %ymm4, %ymm14, %ymm14
  13636. vpandn %ymm12, %ymm11, %ymm0
  13637. vpandn %ymm13, %ymm12, %ymm1
  13638. vpandn %ymm14, %ymm13, %ymm2
  13639. vpandn %ymm10, %ymm14, %ymm3
  13640. vpandn %ymm11, %ymm10, %ymm4
  13641. vpxor %ymm10, %ymm0, %ymm0
  13642. vpxor %ymm11, %ymm1, %ymm1
  13643. vpxor %ymm12, %ymm2, %ymm2
  13644. vpxor %ymm13, %ymm3, %ymm3
  13645. vpxor %ymm14, %ymm4, %ymm4
  13646. vmovdqu %ymm0, (%rdi)
  13647. vmovdqu %ymm1, -96(%rcx)
  13648. vmovdqu %ymm2, 32(%rdi)
  13649. vmovdqu %ymm3, 96(%rcx)
  13650. vmovdqu %ymm4, -32(%rax)
  13651. # Row 2
  13652. vpxor -32(%rdi), %ymm6, %ymm10
  13653. vpxor 128(%rax), %ymm7, %ymm11
  13654. vpxor -96(%rax), %ymm8, %ymm12
  13655. vpxor 64(%rcx), %ymm9, %ymm13
  13656. vpxor -64(%rax), %ymm5, %ymm14
  13657. vpsrlq $63, %ymm10, %ymm0
  13658. vpsrlq $58, %ymm11, %ymm1
  13659. vpsrlq $39, %ymm12, %ymm2
  13660. vpsrlq $56, %ymm13, %ymm3
  13661. vpsrlq $46, %ymm14, %ymm4
  13662. vpaddq %ymm10, %ymm10, %ymm10
  13663. vpsllq $6, %ymm11, %ymm11
  13664. vpsllq $25, %ymm12, %ymm12
  13665. vpsllq $8, %ymm13, %ymm13
  13666. vpsllq $18, %ymm14, %ymm14
  13667. vpor %ymm0, %ymm10, %ymm10
  13668. vpor %ymm1, %ymm11, %ymm11
  13669. vpor %ymm2, %ymm12, %ymm12
  13670. vpor %ymm3, %ymm13, %ymm13
  13671. vpor %ymm4, %ymm14, %ymm14
  13672. vpandn %ymm12, %ymm11, %ymm0
  13673. vpandn %ymm13, %ymm12, %ymm1
  13674. vpandn %ymm14, %ymm13, %ymm2
  13675. vpandn %ymm10, %ymm14, %ymm3
  13676. vpandn %ymm11, %ymm10, %ymm4
  13677. vpxor %ymm10, %ymm0, %ymm0
  13678. vpxor %ymm11, %ymm1, %ymm1
  13679. vpxor %ymm12, %ymm2, %ymm2
  13680. vpxor %ymm13, %ymm3, %ymm3
  13681. vpxor %ymm14, %ymm4, %ymm4
  13682. vmovdqu %ymm0, -32(%rdi)
  13683. vmovdqu %ymm1, 128(%rax)
  13684. vmovdqu %ymm2, -96(%rax)
  13685. vmovdqu %ymm3, 64(%rcx)
  13686. vmovdqu %ymm4, -64(%rax)
  13687. # Row 3
  13688. vpxor -64(%rdi), %ymm9, %ymm10
  13689. vpxor 96(%rax), %ymm5, %ymm11
  13690. vpxor 128(%rdi), %ymm6, %ymm12
  13691. vpxor 32(%rcx), %ymm7, %ymm13
  13692. vpxor 64(%rax), %ymm8, %ymm14
  13693. vpsrlq $37, %ymm10, %ymm0
  13694. vpsrlq $28, %ymm11, %ymm1
  13695. vpsrlq $54, %ymm12, %ymm2
  13696. vpsrlq $49, %ymm13, %ymm3
  13697. vpsrlq $8, %ymm14, %ymm4
  13698. vpsllq $27, %ymm10, %ymm10
  13699. vpsllq $36, %ymm11, %ymm11
  13700. vpsllq $10, %ymm12, %ymm12
  13701. vpsllq $15, %ymm13, %ymm13
  13702. vpsllq $56, %ymm14, %ymm14
  13703. vpor %ymm0, %ymm10, %ymm10
  13704. vpor %ymm1, %ymm11, %ymm11
  13705. vpor %ymm2, %ymm12, %ymm12
  13706. vpor %ymm3, %ymm13, %ymm13
  13707. vpor %ymm4, %ymm14, %ymm14
  13708. vpandn %ymm12, %ymm11, %ymm0
  13709. vpandn %ymm13, %ymm12, %ymm1
  13710. vpandn %ymm14, %ymm13, %ymm2
  13711. vpandn %ymm10, %ymm14, %ymm3
  13712. vpandn %ymm11, %ymm10, %ymm4
  13713. vpxor %ymm10, %ymm0, %ymm0
  13714. vpxor %ymm11, %ymm1, %ymm1
  13715. vpxor %ymm12, %ymm2, %ymm2
  13716. vpxor %ymm13, %ymm3, %ymm3
  13717. vpxor %ymm14, %ymm4, %ymm4
  13718. vmovdqu %ymm0, -64(%rdi)
  13719. vmovdqu %ymm1, 96(%rax)
  13720. vmovdqu %ymm2, 128(%rdi)
  13721. vmovdqu %ymm3, 32(%rcx)
  13722. vmovdqu %ymm4, 64(%rax)
  13723. # Row 4
  13724. vpxor -96(%rdi), %ymm7, %ymm10
  13725. vpxor -32(%rcx), %ymm8, %ymm11
  13726. vpxor 96(%rdi), %ymm9, %ymm12
  13727. vpxor (%rcx), %ymm5, %ymm13
  13728. vpxor 32(%rax), %ymm6, %ymm14
  13729. vpsrlq $2, %ymm10, %ymm0
  13730. vpsrlq $9, %ymm11, %ymm1
  13731. vpsrlq $25, %ymm12, %ymm2
  13732. vpsrlq $23, %ymm13, %ymm3
  13733. vpsrlq $62, %ymm14, %ymm4
  13734. vpsllq $62, %ymm10, %ymm10
  13735. vpsllq $55, %ymm11, %ymm11
  13736. vpsllq $39, %ymm12, %ymm12
  13737. vpsllq $41, %ymm13, %ymm13
  13738. vpsllq $2, %ymm14, %ymm14
  13739. vpor %ymm0, %ymm10, %ymm10
  13740. vpor %ymm1, %ymm11, %ymm11
  13741. vpor %ymm2, %ymm12, %ymm12
  13742. vpor %ymm3, %ymm13, %ymm13
  13743. vpor %ymm4, %ymm14, %ymm14
  13744. vpandn %ymm12, %ymm11, %ymm0
  13745. vpandn %ymm13, %ymm12, %ymm1
  13746. vpandn %ymm14, %ymm13, %ymm2
  13747. vpandn %ymm10, %ymm14, %ymm3
  13748. vpandn %ymm11, %ymm10, %ymm4
  13749. vpxor %ymm10, %ymm0, %ymm0
  13750. vpxor %ymm11, %ymm1, %ymm1
  13751. vpxor %ymm12, %ymm2, %ymm2
  13752. vpxor %ymm13, %ymm3, %ymm3
  13753. vpxor %ymm14, %ymm4, %ymm4
  13754. vmovdqu %ymm0, -96(%rdi)
  13755. vmovdqu %ymm1, -32(%rcx)
  13756. vmovdqu %ymm2, 96(%rdi)
  13757. vmovdqu %ymm3, (%rcx)
  13758. vmovdqu %ymm4, 32(%rax)
  13759. # Round 19
  13760. # Calc b[0..4]
  13761. vpxor %ymm15, %ymm0, %ymm10
  13762. vpxor -64(%rdi), %ymm10, %ymm10
  13763. vpxor -32(%rdi), %ymm10, %ymm10
  13764. vpxor (%rdi), %ymm10, %ymm10
  13765. vpxor 32(%rdi), %ymm2, %ymm12
  13766. vpxor 64(%rdi), %ymm12, %ymm12
  13767. vpxor 128(%rdi), %ymm12, %ymm12
  13768. vpxor -96(%rax), %ymm12, %ymm12
  13769. vpxor -64(%rax), %ymm4, %ymm14
  13770. vpxor -32(%rax), %ymm14, %ymm14
  13771. vpxor (%rax), %ymm14, %ymm14
  13772. vpxor 64(%rax), %ymm14, %ymm14
  13773. vpxor 96(%rax), %ymm1, %ymm11
  13774. vpxor 128(%rax), %ymm11, %ymm11
  13775. vpxor -96(%rcx), %ymm11, %ymm11
  13776. vpxor -64(%rcx), %ymm11, %ymm11
  13777. vpxor 32(%rcx), %ymm3, %ymm13
  13778. vpxor 64(%rcx), %ymm13, %ymm13
  13779. vpxor 96(%rcx), %ymm13, %ymm13
  13780. vpxor 128(%rcx), %ymm13, %ymm13
  13781. # Calc t[0..4]
  13782. vpsrlq $63, %ymm11, %ymm0
  13783. vpsrlq $63, %ymm12, %ymm1
  13784. vpsrlq $63, %ymm13, %ymm2
  13785. vpsrlq $63, %ymm14, %ymm3
  13786. vpsrlq $63, %ymm10, %ymm4
  13787. vpaddq %ymm11, %ymm11, %ymm5
  13788. vpaddq %ymm12, %ymm12, %ymm6
  13789. vpaddq %ymm13, %ymm13, %ymm7
  13790. vpaddq %ymm14, %ymm14, %ymm8
  13791. vpaddq %ymm10, %ymm10, %ymm9
  13792. vpor %ymm0, %ymm5, %ymm5
  13793. vpor %ymm1, %ymm6, %ymm6
  13794. vpor %ymm2, %ymm7, %ymm7
  13795. vpor %ymm3, %ymm8, %ymm8
  13796. vpor %ymm4, %ymm9, %ymm9
  13797. vpxor %ymm14, %ymm5, %ymm5
  13798. vpxor %ymm10, %ymm6, %ymm6
  13799. vpxor %ymm11, %ymm7, %ymm7
  13800. vpxor %ymm12, %ymm8, %ymm8
  13801. vpxor %ymm13, %ymm9, %ymm9
  13802. # Row Mix
  13803. # Row 0
  13804. vpxor %ymm15, %ymm5, %ymm10
  13805. vpxor -96(%rcx), %ymm6, %ymm11
  13806. vpxor -96(%rax), %ymm7, %ymm12
  13807. vpxor 32(%rcx), %ymm8, %ymm13
  13808. vpxor 32(%rax), %ymm9, %ymm14
  13809. vpsrlq $20, %ymm11, %ymm0
  13810. vpsrlq $21, %ymm12, %ymm1
  13811. vpsrlq $43, %ymm13, %ymm2
  13812. vpsrlq $50, %ymm14, %ymm3
  13813. vpsllq $44, %ymm11, %ymm11
  13814. vpsllq $43, %ymm12, %ymm12
  13815. vpsllq $21, %ymm13, %ymm13
  13816. vpsllq $14, %ymm14, %ymm14
  13817. vpor %ymm0, %ymm11, %ymm11
  13818. vpor %ymm1, %ymm12, %ymm12
  13819. vpor %ymm2, %ymm13, %ymm13
  13820. vpor %ymm3, %ymm14, %ymm14
  13821. vpandn %ymm12, %ymm11, %ymm15
  13822. vpandn %ymm13, %ymm12, %ymm1
  13823. vpandn %ymm14, %ymm13, %ymm2
  13824. vpandn %ymm10, %ymm14, %ymm3
  13825. vpandn %ymm11, %ymm10, %ymm4
  13826. vpxor %ymm10, %ymm15, %ymm15
  13827. vpxor %ymm11, %ymm1, %ymm1
  13828. vpxor %ymm12, %ymm2, %ymm2
  13829. # XOR in constant
  13830. vpxor 608(%rdx), %ymm15, %ymm15
  13831. vpxor %ymm13, %ymm3, %ymm3
  13832. vpxor %ymm14, %ymm4, %ymm4
  13833. vmovdqu %ymm1, -96(%rcx)
  13834. vmovdqu %ymm2, -96(%rax)
  13835. vmovdqu %ymm3, 32(%rcx)
  13836. vmovdqu %ymm4, 32(%rax)
  13837. # Row 1
  13838. vpxor 128(%rcx), %ymm8, %ymm10
  13839. vpxor -32(%rax), %ymm9, %ymm11
  13840. vpxor -32(%rdi), %ymm5, %ymm12
  13841. vpxor 96(%rax), %ymm6, %ymm13
  13842. vpxor 96(%rdi), %ymm7, %ymm14
  13843. vpsrlq $36, %ymm10, %ymm0
  13844. vpsrlq $44, %ymm11, %ymm1
  13845. vpsrlq $61, %ymm12, %ymm2
  13846. vpsrlq $19, %ymm13, %ymm3
  13847. vpsrlq $3, %ymm14, %ymm4
  13848. vpsllq $28, %ymm10, %ymm10
  13849. vpsllq $20, %ymm11, %ymm11
  13850. vpsllq $3, %ymm12, %ymm12
  13851. vpsllq $45, %ymm13, %ymm13
  13852. vpsllq $61, %ymm14, %ymm14
  13853. vpor %ymm0, %ymm10, %ymm10
  13854. vpor %ymm1, %ymm11, %ymm11
  13855. vpor %ymm2, %ymm12, %ymm12
  13856. vpor %ymm3, %ymm13, %ymm13
  13857. vpor %ymm4, %ymm14, %ymm14
  13858. vpandn %ymm12, %ymm11, %ymm0
  13859. vpandn %ymm13, %ymm12, %ymm1
  13860. vpandn %ymm14, %ymm13, %ymm2
  13861. vpandn %ymm10, %ymm14, %ymm3
  13862. vpandn %ymm11, %ymm10, %ymm4
  13863. vpxor %ymm10, %ymm0, %ymm0
  13864. vpxor %ymm11, %ymm1, %ymm1
  13865. vpxor %ymm12, %ymm2, %ymm2
  13866. vpxor %ymm13, %ymm3, %ymm3
  13867. vpxor %ymm14, %ymm4, %ymm4
  13868. vmovdqu %ymm0, 128(%rcx)
  13869. vmovdqu %ymm1, -32(%rax)
  13870. vmovdqu %ymm2, -32(%rdi)
  13871. vmovdqu %ymm3, 96(%rax)
  13872. vmovdqu %ymm4, 96(%rdi)
  13873. # Row 2
  13874. vpxor -64(%rcx), %ymm6, %ymm10
  13875. vpxor 32(%rdi), %ymm7, %ymm11
  13876. vpxor 64(%rcx), %ymm8, %ymm12
  13877. vpxor 64(%rax), %ymm9, %ymm13
  13878. vpxor -96(%rdi), %ymm5, %ymm14
  13879. vpsrlq $63, %ymm10, %ymm0
  13880. vpsrlq $58, %ymm11, %ymm1
  13881. vpsrlq $39, %ymm12, %ymm2
  13882. vpsrlq $56, %ymm13, %ymm3
  13883. vpsrlq $46, %ymm14, %ymm4
  13884. vpaddq %ymm10, %ymm10, %ymm10
  13885. vpsllq $6, %ymm11, %ymm11
  13886. vpsllq $25, %ymm12, %ymm12
  13887. vpsllq $8, %ymm13, %ymm13
  13888. vpsllq $18, %ymm14, %ymm14
  13889. vpor %ymm0, %ymm10, %ymm10
  13890. vpor %ymm1, %ymm11, %ymm11
  13891. vpor %ymm2, %ymm12, %ymm12
  13892. vpor %ymm3, %ymm13, %ymm13
  13893. vpor %ymm4, %ymm14, %ymm14
  13894. vpandn %ymm12, %ymm11, %ymm0
  13895. vpandn %ymm13, %ymm12, %ymm1
  13896. vpandn %ymm14, %ymm13, %ymm2
  13897. vpandn %ymm10, %ymm14, %ymm3
  13898. vpandn %ymm11, %ymm10, %ymm4
  13899. vpxor %ymm10, %ymm0, %ymm0
  13900. vpxor %ymm11, %ymm1, %ymm1
  13901. vpxor %ymm12, %ymm2, %ymm2
  13902. vpxor %ymm13, %ymm3, %ymm3
  13903. vpxor %ymm14, %ymm4, %ymm4
  13904. vmovdqu %ymm0, -64(%rcx)
  13905. vmovdqu %ymm1, 32(%rdi)
  13906. vmovdqu %ymm2, 64(%rcx)
  13907. vmovdqu %ymm3, 64(%rax)
  13908. vmovdqu %ymm4, -96(%rdi)
  13909. # Row 3
  13910. vpxor (%rax), %ymm9, %ymm10
  13911. vpxor (%rdi), %ymm5, %ymm11
  13912. vpxor 128(%rax), %ymm6, %ymm12
  13913. vpxor 128(%rdi), %ymm7, %ymm13
  13914. vpxor (%rcx), %ymm8, %ymm14
  13915. vpsrlq $37, %ymm10, %ymm0
  13916. vpsrlq $28, %ymm11, %ymm1
  13917. vpsrlq $54, %ymm12, %ymm2
  13918. vpsrlq $49, %ymm13, %ymm3
  13919. vpsrlq $8, %ymm14, %ymm4
  13920. vpsllq $27, %ymm10, %ymm10
  13921. vpsllq $36, %ymm11, %ymm11
  13922. vpsllq $10, %ymm12, %ymm12
  13923. vpsllq $15, %ymm13, %ymm13
  13924. vpsllq $56, %ymm14, %ymm14
  13925. vpor %ymm0, %ymm10, %ymm10
  13926. vpor %ymm1, %ymm11, %ymm11
  13927. vpor %ymm2, %ymm12, %ymm12
  13928. vpor %ymm3, %ymm13, %ymm13
  13929. vpor %ymm4, %ymm14, %ymm14
  13930. vpandn %ymm12, %ymm11, %ymm0
  13931. vpandn %ymm13, %ymm12, %ymm1
  13932. vpandn %ymm14, %ymm13, %ymm2
  13933. vpandn %ymm10, %ymm14, %ymm3
  13934. vpandn %ymm11, %ymm10, %ymm4
  13935. vpxor %ymm10, %ymm0, %ymm0
  13936. vpxor %ymm11, %ymm1, %ymm1
  13937. vpxor %ymm12, %ymm2, %ymm2
  13938. vpxor %ymm13, %ymm3, %ymm3
  13939. vpxor %ymm14, %ymm4, %ymm4
  13940. vmovdqu %ymm0, (%rax)
  13941. vmovdqu %ymm1, (%rdi)
  13942. vmovdqu %ymm2, 128(%rax)
  13943. vmovdqu %ymm3, 128(%rdi)
  13944. vmovdqu %ymm4, (%rcx)
  13945. # Row 4
  13946. vpxor 64(%rdi), %ymm7, %ymm10
  13947. vpxor 96(%rcx), %ymm8, %ymm11
  13948. vpxor -64(%rax), %ymm9, %ymm12
  13949. vpxor -64(%rdi), %ymm5, %ymm13
  13950. vpxor -32(%rcx), %ymm6, %ymm14
  13951. vpsrlq $2, %ymm10, %ymm0
  13952. vpsrlq $9, %ymm11, %ymm1
  13953. vpsrlq $25, %ymm12, %ymm2
  13954. vpsrlq $23, %ymm13, %ymm3
  13955. vpsrlq $62, %ymm14, %ymm4
  13956. vpsllq $62, %ymm10, %ymm10
  13957. vpsllq $55, %ymm11, %ymm11
  13958. vpsllq $39, %ymm12, %ymm12
  13959. vpsllq $41, %ymm13, %ymm13
  13960. vpsllq $2, %ymm14, %ymm14
  13961. vpor %ymm0, %ymm10, %ymm10
  13962. vpor %ymm1, %ymm11, %ymm11
  13963. vpor %ymm2, %ymm12, %ymm12
  13964. vpor %ymm3, %ymm13, %ymm13
  13965. vpor %ymm4, %ymm14, %ymm14
  13966. vpandn %ymm12, %ymm11, %ymm0
  13967. vpandn %ymm13, %ymm12, %ymm1
  13968. vpandn %ymm14, %ymm13, %ymm2
  13969. vpandn %ymm10, %ymm14, %ymm3
  13970. vpandn %ymm11, %ymm10, %ymm4
  13971. vpxor %ymm10, %ymm0, %ymm0
  13972. vpxor %ymm11, %ymm1, %ymm1
  13973. vpxor %ymm12, %ymm2, %ymm2
  13974. vpxor %ymm13, %ymm3, %ymm3
  13975. vpxor %ymm14, %ymm4, %ymm4
  13976. vmovdqu %ymm0, 64(%rdi)
  13977. vmovdqu %ymm1, 96(%rcx)
  13978. vmovdqu %ymm2, -64(%rax)
  13979. vmovdqu %ymm3, -64(%rdi)
  13980. vmovdqu %ymm4, -32(%rcx)
  13981. # Round 20
  13982. # Calc b[0..4]
  13983. vpxor %ymm15, %ymm0, %ymm10
  13984. vpxor -96(%rdi), %ymm4, %ymm14
  13985. vpxor -32(%rdi), %ymm2, %ymm12
  13986. vpxor (%rdi), %ymm1, %ymm11
  13987. vpxor 32(%rdi), %ymm11, %ymm11
  13988. vpxor 96(%rdi), %ymm14, %ymm14
  13989. vpxor 128(%rdi), %ymm3, %ymm13
  13990. vpxor -96(%rax), %ymm12, %ymm12
  13991. vpxor -32(%rax), %ymm11, %ymm11
  13992. vpxor (%rax), %ymm10, %ymm10
  13993. vpxor 32(%rax), %ymm14, %ymm14
  13994. vpxor 64(%rax), %ymm13, %ymm13
  13995. vpxor 96(%rax), %ymm13, %ymm13
  13996. vpxor 128(%rax), %ymm12, %ymm12
  13997. vpxor -96(%rcx), %ymm11, %ymm11
  13998. vpxor -64(%rcx), %ymm10, %ymm10
  13999. vpxor (%rcx), %ymm14, %ymm14
  14000. vpxor 32(%rcx), %ymm13, %ymm13
  14001. vpxor 64(%rcx), %ymm12, %ymm12
  14002. vpxor 128(%rcx), %ymm10, %ymm10
  14003. # Calc t[0..4]
  14004. vpsrlq $63, %ymm11, %ymm0
  14005. vpsrlq $63, %ymm12, %ymm1
  14006. vpsrlq $63, %ymm13, %ymm2
  14007. vpsrlq $63, %ymm14, %ymm3
  14008. vpsrlq $63, %ymm10, %ymm4
  14009. vpaddq %ymm11, %ymm11, %ymm5
  14010. vpaddq %ymm12, %ymm12, %ymm6
  14011. vpaddq %ymm13, %ymm13, %ymm7
  14012. vpaddq %ymm14, %ymm14, %ymm8
  14013. vpaddq %ymm10, %ymm10, %ymm9
  14014. vpor %ymm0, %ymm5, %ymm5
  14015. vpor %ymm1, %ymm6, %ymm6
  14016. vpor %ymm2, %ymm7, %ymm7
  14017. vpor %ymm3, %ymm8, %ymm8
  14018. vpor %ymm4, %ymm9, %ymm9
  14019. vpxor %ymm14, %ymm5, %ymm5
  14020. vpxor %ymm10, %ymm6, %ymm6
  14021. vpxor %ymm11, %ymm7, %ymm7
  14022. vpxor %ymm12, %ymm8, %ymm8
  14023. vpxor %ymm13, %ymm9, %ymm9
  14024. # Row Mix
  14025. # Row 0
  14026. vpxor %ymm15, %ymm5, %ymm10
  14027. vpxor -32(%rax), %ymm6, %ymm11
  14028. vpxor 64(%rcx), %ymm7, %ymm12
  14029. vpxor 128(%rdi), %ymm8, %ymm13
  14030. vpxor -32(%rcx), %ymm9, %ymm14
  14031. vpsrlq $20, %ymm11, %ymm0
  14032. vpsrlq $21, %ymm12, %ymm1
  14033. vpsrlq $43, %ymm13, %ymm2
  14034. vpsrlq $50, %ymm14, %ymm3
  14035. vpsllq $44, %ymm11, %ymm11
  14036. vpsllq $43, %ymm12, %ymm12
  14037. vpsllq $21, %ymm13, %ymm13
  14038. vpsllq $14, %ymm14, %ymm14
  14039. vpor %ymm0, %ymm11, %ymm11
  14040. vpor %ymm1, %ymm12, %ymm12
  14041. vpor %ymm2, %ymm13, %ymm13
  14042. vpor %ymm3, %ymm14, %ymm14
  14043. vpandn %ymm12, %ymm11, %ymm15
  14044. vpandn %ymm13, %ymm12, %ymm1
  14045. vpandn %ymm14, %ymm13, %ymm2
  14046. vpandn %ymm10, %ymm14, %ymm3
  14047. vpandn %ymm11, %ymm10, %ymm4
  14048. vpxor %ymm10, %ymm15, %ymm15
  14049. vpxor %ymm11, %ymm1, %ymm1
  14050. vpxor %ymm12, %ymm2, %ymm2
  14051. # XOR in constant
  14052. vpxor 640(%rdx), %ymm15, %ymm15
  14053. vpxor %ymm13, %ymm3, %ymm3
  14054. vpxor %ymm14, %ymm4, %ymm4
  14055. vmovdqu %ymm1, -32(%rax)
  14056. vmovdqu %ymm2, 64(%rcx)
  14057. vmovdqu %ymm3, 128(%rdi)
  14058. vmovdqu %ymm4, -32(%rcx)
  14059. # Row 1
  14060. vpxor 32(%rcx), %ymm8, %ymm10
  14061. vpxor 96(%rdi), %ymm9, %ymm11
  14062. vpxor -64(%rcx), %ymm5, %ymm12
  14063. vpxor (%rdi), %ymm6, %ymm13
  14064. vpxor -64(%rax), %ymm7, %ymm14
  14065. vpsrlq $36, %ymm10, %ymm0
  14066. vpsrlq $44, %ymm11, %ymm1
  14067. vpsrlq $61, %ymm12, %ymm2
  14068. vpsrlq $19, %ymm13, %ymm3
  14069. vpsrlq $3, %ymm14, %ymm4
  14070. vpsllq $28, %ymm10, %ymm10
  14071. vpsllq $20, %ymm11, %ymm11
  14072. vpsllq $3, %ymm12, %ymm12
  14073. vpsllq $45, %ymm13, %ymm13
  14074. vpsllq $61, %ymm14, %ymm14
  14075. vpor %ymm0, %ymm10, %ymm10
  14076. vpor %ymm1, %ymm11, %ymm11
  14077. vpor %ymm2, %ymm12, %ymm12
  14078. vpor %ymm3, %ymm13, %ymm13
  14079. vpor %ymm4, %ymm14, %ymm14
  14080. vpandn %ymm12, %ymm11, %ymm0
  14081. vpandn %ymm13, %ymm12, %ymm1
  14082. vpandn %ymm14, %ymm13, %ymm2
  14083. vpandn %ymm10, %ymm14, %ymm3
  14084. vpandn %ymm11, %ymm10, %ymm4
  14085. vpxor %ymm10, %ymm0, %ymm0
  14086. vpxor %ymm11, %ymm1, %ymm1
  14087. vpxor %ymm12, %ymm2, %ymm2
  14088. vpxor %ymm13, %ymm3, %ymm3
  14089. vpxor %ymm14, %ymm4, %ymm4
  14090. vmovdqu %ymm0, 32(%rcx)
  14091. vmovdqu %ymm1, 96(%rdi)
  14092. vmovdqu %ymm2, -64(%rcx)
  14093. vmovdqu %ymm3, (%rdi)
  14094. vmovdqu %ymm4, -64(%rax)
  14095. # Row 2
  14096. vpxor -96(%rcx), %ymm6, %ymm10
  14097. vpxor -32(%rdi), %ymm7, %ymm11
  14098. vpxor 64(%rax), %ymm8, %ymm12
  14099. vpxor (%rcx), %ymm9, %ymm13
  14100. vpxor 64(%rdi), %ymm5, %ymm14
  14101. vpsrlq $63, %ymm10, %ymm0
  14102. vpsrlq $58, %ymm11, %ymm1
  14103. vpsrlq $39, %ymm12, %ymm2
  14104. vpsrlq $56, %ymm13, %ymm3
  14105. vpsrlq $46, %ymm14, %ymm4
  14106. vpaddq %ymm10, %ymm10, %ymm10
  14107. vpsllq $6, %ymm11, %ymm11
  14108. vpsllq $25, %ymm12, %ymm12
  14109. vpsllq $8, %ymm13, %ymm13
  14110. vpsllq $18, %ymm14, %ymm14
  14111. vpor %ymm0, %ymm10, %ymm10
  14112. vpor %ymm1, %ymm11, %ymm11
  14113. vpor %ymm2, %ymm12, %ymm12
  14114. vpor %ymm3, %ymm13, %ymm13
  14115. vpor %ymm4, %ymm14, %ymm14
  14116. vpandn %ymm12, %ymm11, %ymm0
  14117. vpandn %ymm13, %ymm12, %ymm1
  14118. vpandn %ymm14, %ymm13, %ymm2
  14119. vpandn %ymm10, %ymm14, %ymm3
  14120. vpandn %ymm11, %ymm10, %ymm4
  14121. vpxor %ymm10, %ymm0, %ymm0
  14122. vpxor %ymm11, %ymm1, %ymm1
  14123. vpxor %ymm12, %ymm2, %ymm2
  14124. vpxor %ymm13, %ymm3, %ymm3
  14125. vpxor %ymm14, %ymm4, %ymm4
  14126. vmovdqu %ymm0, -96(%rcx)
  14127. vmovdqu %ymm1, -32(%rdi)
  14128. vmovdqu %ymm2, 64(%rax)
  14129. vmovdqu %ymm3, (%rcx)
  14130. vmovdqu %ymm4, 64(%rdi)
  14131. # Row 3
  14132. vpxor 32(%rax), %ymm9, %ymm10
  14133. vpxor 128(%rcx), %ymm5, %ymm11
  14134. vpxor 32(%rdi), %ymm6, %ymm12
  14135. vpxor 128(%rax), %ymm7, %ymm13
  14136. vpxor -64(%rdi), %ymm8, %ymm14
  14137. vpsrlq $37, %ymm10, %ymm0
  14138. vpsrlq $28, %ymm11, %ymm1
  14139. vpsrlq $54, %ymm12, %ymm2
  14140. vpsrlq $49, %ymm13, %ymm3
  14141. vpsrlq $8, %ymm14, %ymm4
  14142. vpsllq $27, %ymm10, %ymm10
  14143. vpsllq $36, %ymm11, %ymm11
  14144. vpsllq $10, %ymm12, %ymm12
  14145. vpsllq $15, %ymm13, %ymm13
  14146. vpsllq $56, %ymm14, %ymm14
  14147. vpor %ymm0, %ymm10, %ymm10
  14148. vpor %ymm1, %ymm11, %ymm11
  14149. vpor %ymm2, %ymm12, %ymm12
  14150. vpor %ymm3, %ymm13, %ymm13
  14151. vpor %ymm4, %ymm14, %ymm14
  14152. vpandn %ymm12, %ymm11, %ymm0
  14153. vpandn %ymm13, %ymm12, %ymm1
  14154. vpandn %ymm14, %ymm13, %ymm2
  14155. vpandn %ymm10, %ymm14, %ymm3
  14156. vpandn %ymm11, %ymm10, %ymm4
  14157. vpxor %ymm10, %ymm0, %ymm0
  14158. vpxor %ymm11, %ymm1, %ymm1
  14159. vpxor %ymm12, %ymm2, %ymm2
  14160. vpxor %ymm13, %ymm3, %ymm3
  14161. vpxor %ymm14, %ymm4, %ymm4
  14162. vmovdqu %ymm0, 32(%rax)
  14163. vmovdqu %ymm1, 128(%rcx)
  14164. vmovdqu %ymm2, 32(%rdi)
  14165. vmovdqu %ymm3, 128(%rax)
  14166. vmovdqu %ymm4, -64(%rdi)
  14167. # Row 4
  14168. vpxor -96(%rax), %ymm7, %ymm10
  14169. vpxor 96(%rax), %ymm8, %ymm11
  14170. vpxor -96(%rdi), %ymm9, %ymm12
  14171. vpxor (%rax), %ymm5, %ymm13
  14172. vpxor 96(%rcx), %ymm6, %ymm14
  14173. vpsrlq $2, %ymm10, %ymm0
  14174. vpsrlq $9, %ymm11, %ymm1
  14175. vpsrlq $25, %ymm12, %ymm2
  14176. vpsrlq $23, %ymm13, %ymm3
  14177. vpsrlq $62, %ymm14, %ymm4
  14178. vpsllq $62, %ymm10, %ymm10
  14179. vpsllq $55, %ymm11, %ymm11
  14180. vpsllq $39, %ymm12, %ymm12
  14181. vpsllq $41, %ymm13, %ymm13
  14182. vpsllq $2, %ymm14, %ymm14
  14183. vpor %ymm0, %ymm10, %ymm10
  14184. vpor %ymm1, %ymm11, %ymm11
  14185. vpor %ymm2, %ymm12, %ymm12
  14186. vpor %ymm3, %ymm13, %ymm13
  14187. vpor %ymm4, %ymm14, %ymm14
  14188. vpandn %ymm12, %ymm11, %ymm0
  14189. vpandn %ymm13, %ymm12, %ymm1
  14190. vpandn %ymm14, %ymm13, %ymm2
  14191. vpandn %ymm10, %ymm14, %ymm3
  14192. vpandn %ymm11, %ymm10, %ymm4
  14193. vpxor %ymm10, %ymm0, %ymm0
  14194. vpxor %ymm11, %ymm1, %ymm1
  14195. vpxor %ymm12, %ymm2, %ymm2
  14196. vpxor %ymm13, %ymm3, %ymm3
  14197. vpxor %ymm14, %ymm4, %ymm4
  14198. vmovdqu %ymm0, -96(%rax)
  14199. vmovdqu %ymm1, 96(%rax)
  14200. vmovdqu %ymm2, -96(%rdi)
  14201. vmovdqu %ymm3, (%rax)
  14202. vmovdqu %ymm4, 96(%rcx)
  14203. # Round 21
  14204. # Calc b[0..4]
  14205. vpxor %ymm15, %ymm0, %ymm10
  14206. vpxor -64(%rdi), %ymm4, %ymm14
  14207. vpxor -32(%rdi), %ymm1, %ymm11
  14208. vpxor (%rdi), %ymm3, %ymm13
  14209. vpxor 32(%rdi), %ymm2, %ymm12
  14210. vpxor 64(%rdi), %ymm14, %ymm14
  14211. vpxor 96(%rdi), %ymm11, %ymm11
  14212. vpxor 128(%rdi), %ymm13, %ymm13
  14213. vpxor -64(%rax), %ymm14, %ymm14
  14214. vpxor -32(%rax), %ymm11, %ymm11
  14215. vpxor 32(%rax), %ymm10, %ymm10
  14216. vpxor 64(%rax), %ymm12, %ymm12
  14217. vpxor 128(%rax), %ymm13, %ymm13
  14218. vpxor -96(%rcx), %ymm10, %ymm10
  14219. vpxor -64(%rcx), %ymm12, %ymm12
  14220. vpxor -32(%rcx), %ymm14, %ymm14
  14221. vpxor (%rcx), %ymm13, %ymm13
  14222. vpxor 32(%rcx), %ymm10, %ymm10
  14223. vpxor 64(%rcx), %ymm12, %ymm12
  14224. vpxor 128(%rcx), %ymm11, %ymm11
  14225. # Calc t[0..4]
  14226. vpsrlq $63, %ymm11, %ymm0
  14227. vpsrlq $63, %ymm12, %ymm1
  14228. vpsrlq $63, %ymm13, %ymm2
  14229. vpsrlq $63, %ymm14, %ymm3
  14230. vpsrlq $63, %ymm10, %ymm4
  14231. vpaddq %ymm11, %ymm11, %ymm5
  14232. vpaddq %ymm12, %ymm12, %ymm6
  14233. vpaddq %ymm13, %ymm13, %ymm7
  14234. vpaddq %ymm14, %ymm14, %ymm8
  14235. vpaddq %ymm10, %ymm10, %ymm9
  14236. vpor %ymm0, %ymm5, %ymm5
  14237. vpor %ymm1, %ymm6, %ymm6
  14238. vpor %ymm2, %ymm7, %ymm7
  14239. vpor %ymm3, %ymm8, %ymm8
  14240. vpor %ymm4, %ymm9, %ymm9
  14241. vpxor %ymm14, %ymm5, %ymm5
  14242. vpxor %ymm10, %ymm6, %ymm6
  14243. vpxor %ymm11, %ymm7, %ymm7
  14244. vpxor %ymm12, %ymm8, %ymm8
  14245. vpxor %ymm13, %ymm9, %ymm9
  14246. # Row Mix
  14247. # Row 0
  14248. vpxor %ymm15, %ymm5, %ymm10
  14249. vpxor 96(%rdi), %ymm6, %ymm11
  14250. vpxor 64(%rax), %ymm7, %ymm12
  14251. vpxor 128(%rax), %ymm8, %ymm13
  14252. vpxor 96(%rcx), %ymm9, %ymm14
  14253. vpsrlq $20, %ymm11, %ymm0
  14254. vpsrlq $21, %ymm12, %ymm1
  14255. vpsrlq $43, %ymm13, %ymm2
  14256. vpsrlq $50, %ymm14, %ymm3
  14257. vpsllq $44, %ymm11, %ymm11
  14258. vpsllq $43, %ymm12, %ymm12
  14259. vpsllq $21, %ymm13, %ymm13
  14260. vpsllq $14, %ymm14, %ymm14
  14261. vpor %ymm0, %ymm11, %ymm11
  14262. vpor %ymm1, %ymm12, %ymm12
  14263. vpor %ymm2, %ymm13, %ymm13
  14264. vpor %ymm3, %ymm14, %ymm14
  14265. vpandn %ymm12, %ymm11, %ymm15
  14266. vpandn %ymm13, %ymm12, %ymm1
  14267. vpandn %ymm14, %ymm13, %ymm2
  14268. vpandn %ymm10, %ymm14, %ymm3
  14269. vpandn %ymm11, %ymm10, %ymm4
  14270. vpxor %ymm10, %ymm15, %ymm15
  14271. vpxor %ymm11, %ymm1, %ymm1
  14272. vpxor %ymm12, %ymm2, %ymm2
  14273. # XOR in constant
  14274. vpxor 672(%rdx), %ymm15, %ymm15
  14275. vpxor %ymm13, %ymm3, %ymm3
  14276. vpxor %ymm14, %ymm4, %ymm4
  14277. vmovdqu %ymm1, 96(%rdi)
  14278. vmovdqu %ymm2, 64(%rax)
  14279. vmovdqu %ymm3, 128(%rax)
  14280. vmovdqu %ymm4, 96(%rcx)
  14281. # Row 1
  14282. vpxor 128(%rdi), %ymm8, %ymm10
  14283. vpxor -64(%rax), %ymm9, %ymm11
  14284. vpxor -96(%rcx), %ymm5, %ymm12
  14285. vpxor 128(%rcx), %ymm6, %ymm13
  14286. vpxor -96(%rdi), %ymm7, %ymm14
  14287. vpsrlq $36, %ymm10, %ymm0
  14288. vpsrlq $44, %ymm11, %ymm1
  14289. vpsrlq $61, %ymm12, %ymm2
  14290. vpsrlq $19, %ymm13, %ymm3
  14291. vpsrlq $3, %ymm14, %ymm4
  14292. vpsllq $28, %ymm10, %ymm10
  14293. vpsllq $20, %ymm11, %ymm11
  14294. vpsllq $3, %ymm12, %ymm12
  14295. vpsllq $45, %ymm13, %ymm13
  14296. vpsllq $61, %ymm14, %ymm14
  14297. vpor %ymm0, %ymm10, %ymm10
  14298. vpor %ymm1, %ymm11, %ymm11
  14299. vpor %ymm2, %ymm12, %ymm12
  14300. vpor %ymm3, %ymm13, %ymm13
  14301. vpor %ymm4, %ymm14, %ymm14
  14302. vpandn %ymm12, %ymm11, %ymm0
  14303. vpandn %ymm13, %ymm12, %ymm1
  14304. vpandn %ymm14, %ymm13, %ymm2
  14305. vpandn %ymm10, %ymm14, %ymm3
  14306. vpandn %ymm11, %ymm10, %ymm4
  14307. vpxor %ymm10, %ymm0, %ymm0
  14308. vpxor %ymm11, %ymm1, %ymm1
  14309. vpxor %ymm12, %ymm2, %ymm2
  14310. vpxor %ymm13, %ymm3, %ymm3
  14311. vpxor %ymm14, %ymm4, %ymm4
  14312. vmovdqu %ymm0, 128(%rdi)
  14313. vmovdqu %ymm1, -64(%rax)
  14314. vmovdqu %ymm2, -96(%rcx)
  14315. vmovdqu %ymm3, 128(%rcx)
  14316. vmovdqu %ymm4, -96(%rdi)
  14317. # Row 2
  14318. vpxor -32(%rax), %ymm6, %ymm10
  14319. vpxor -64(%rcx), %ymm7, %ymm11
  14320. vpxor (%rcx), %ymm8, %ymm12
  14321. vpxor -64(%rdi), %ymm9, %ymm13
  14322. vpxor -96(%rax), %ymm5, %ymm14
  14323. vpsrlq $63, %ymm10, %ymm0
  14324. vpsrlq $58, %ymm11, %ymm1
  14325. vpsrlq $39, %ymm12, %ymm2
  14326. vpsrlq $56, %ymm13, %ymm3
  14327. vpsrlq $46, %ymm14, %ymm4
  14328. vpaddq %ymm10, %ymm10, %ymm10
  14329. vpsllq $6, %ymm11, %ymm11
  14330. vpsllq $25, %ymm12, %ymm12
  14331. vpsllq $8, %ymm13, %ymm13
  14332. vpsllq $18, %ymm14, %ymm14
  14333. vpor %ymm0, %ymm10, %ymm10
  14334. vpor %ymm1, %ymm11, %ymm11
  14335. vpor %ymm2, %ymm12, %ymm12
  14336. vpor %ymm3, %ymm13, %ymm13
  14337. vpor %ymm4, %ymm14, %ymm14
  14338. vpandn %ymm12, %ymm11, %ymm0
  14339. vpandn %ymm13, %ymm12, %ymm1
  14340. vpandn %ymm14, %ymm13, %ymm2
  14341. vpandn %ymm10, %ymm14, %ymm3
  14342. vpandn %ymm11, %ymm10, %ymm4
  14343. vpxor %ymm10, %ymm0, %ymm0
  14344. vpxor %ymm11, %ymm1, %ymm1
  14345. vpxor %ymm12, %ymm2, %ymm2
  14346. vpxor %ymm13, %ymm3, %ymm3
  14347. vpxor %ymm14, %ymm4, %ymm4
  14348. vmovdqu %ymm0, -32(%rax)
  14349. vmovdqu %ymm1, -64(%rcx)
  14350. vmovdqu %ymm2, (%rcx)
  14351. vmovdqu %ymm3, -64(%rdi)
  14352. vmovdqu %ymm4, -96(%rax)
  14353. # Row 3
  14354. vpxor -32(%rcx), %ymm9, %ymm10
  14355. vpxor 32(%rcx), %ymm5, %ymm11
  14356. vpxor -32(%rdi), %ymm6, %ymm12
  14357. vpxor 32(%rdi), %ymm7, %ymm13
  14358. vpxor (%rax), %ymm8, %ymm14
  14359. vpsrlq $37, %ymm10, %ymm0
  14360. vpsrlq $28, %ymm11, %ymm1
  14361. vpsrlq $54, %ymm12, %ymm2
  14362. vpsrlq $49, %ymm13, %ymm3
  14363. vpsrlq $8, %ymm14, %ymm4
  14364. vpsllq $27, %ymm10, %ymm10
  14365. vpsllq $36, %ymm11, %ymm11
  14366. vpsllq $10, %ymm12, %ymm12
  14367. vpsllq $15, %ymm13, %ymm13
  14368. vpsllq $56, %ymm14, %ymm14
  14369. vpor %ymm0, %ymm10, %ymm10
  14370. vpor %ymm1, %ymm11, %ymm11
  14371. vpor %ymm2, %ymm12, %ymm12
  14372. vpor %ymm3, %ymm13, %ymm13
  14373. vpor %ymm4, %ymm14, %ymm14
  14374. vpandn %ymm12, %ymm11, %ymm0
  14375. vpandn %ymm13, %ymm12, %ymm1
  14376. vpandn %ymm14, %ymm13, %ymm2
  14377. vpandn %ymm10, %ymm14, %ymm3
  14378. vpandn %ymm11, %ymm10, %ymm4
  14379. vpxor %ymm10, %ymm0, %ymm0
  14380. vpxor %ymm11, %ymm1, %ymm1
  14381. vpxor %ymm12, %ymm2, %ymm2
  14382. vpxor %ymm13, %ymm3, %ymm3
  14383. vpxor %ymm14, %ymm4, %ymm4
  14384. vmovdqu %ymm0, -32(%rcx)
  14385. vmovdqu %ymm1, 32(%rcx)
  14386. vmovdqu %ymm2, -32(%rdi)
  14387. vmovdqu %ymm3, 32(%rdi)
  14388. vmovdqu %ymm4, (%rax)
  14389. # Row 4
  14390. vpxor 64(%rcx), %ymm7, %ymm10
  14391. vpxor (%rdi), %ymm8, %ymm11
  14392. vpxor 64(%rdi), %ymm9, %ymm12
  14393. vpxor 32(%rax), %ymm5, %ymm13
  14394. vpxor 96(%rax), %ymm6, %ymm14
  14395. vpsrlq $2, %ymm10, %ymm0
  14396. vpsrlq $9, %ymm11, %ymm1
  14397. vpsrlq $25, %ymm12, %ymm2
  14398. vpsrlq $23, %ymm13, %ymm3
  14399. vpsrlq $62, %ymm14, %ymm4
  14400. vpsllq $62, %ymm10, %ymm10
  14401. vpsllq $55, %ymm11, %ymm11
  14402. vpsllq $39, %ymm12, %ymm12
  14403. vpsllq $41, %ymm13, %ymm13
  14404. vpsllq $2, %ymm14, %ymm14
  14405. vpor %ymm0, %ymm10, %ymm10
  14406. vpor %ymm1, %ymm11, %ymm11
  14407. vpor %ymm2, %ymm12, %ymm12
  14408. vpor %ymm3, %ymm13, %ymm13
  14409. vpor %ymm4, %ymm14, %ymm14
  14410. vpandn %ymm12, %ymm11, %ymm0
  14411. vpandn %ymm13, %ymm12, %ymm1
  14412. vpandn %ymm14, %ymm13, %ymm2
  14413. vpandn %ymm10, %ymm14, %ymm3
  14414. vpandn %ymm11, %ymm10, %ymm4
  14415. vpxor %ymm10, %ymm0, %ymm0
  14416. vpxor %ymm11, %ymm1, %ymm1
  14417. vpxor %ymm12, %ymm2, %ymm2
  14418. vpxor %ymm13, %ymm3, %ymm3
  14419. vpxor %ymm14, %ymm4, %ymm4
  14420. vmovdqu %ymm0, 64(%rcx)
  14421. vmovdqu %ymm1, (%rdi)
  14422. vmovdqu %ymm2, 64(%rdi)
  14423. vmovdqu %ymm3, 32(%rax)
  14424. vmovdqu %ymm4, 96(%rax)
  14425. # Round 22
  14426. # Calc b[0..4]
  14427. vpxor %ymm15, %ymm0, %ymm10
  14428. vpxor -96(%rdi), %ymm4, %ymm14
  14429. vpxor -64(%rdi), %ymm3, %ymm13
  14430. vpxor -32(%rdi), %ymm2, %ymm12
  14431. vpxor 32(%rdi), %ymm13, %ymm13
  14432. vpxor 96(%rdi), %ymm1, %ymm11
  14433. vpxor 128(%rdi), %ymm10, %ymm10
  14434. vpxor -96(%rax), %ymm14, %ymm14
  14435. vpxor -64(%rax), %ymm11, %ymm11
  14436. vpxor -32(%rax), %ymm10, %ymm10
  14437. vpxor (%rax), %ymm14, %ymm14
  14438. vpxor 64(%rax), %ymm12, %ymm12
  14439. vpxor 128(%rax), %ymm13, %ymm13
  14440. vpxor -96(%rcx), %ymm12, %ymm12
  14441. vpxor -64(%rcx), %ymm11, %ymm11
  14442. vpxor -32(%rcx), %ymm10, %ymm10
  14443. vpxor (%rcx), %ymm12, %ymm12
  14444. vpxor 32(%rcx), %ymm11, %ymm11
  14445. vpxor 96(%rcx), %ymm14, %ymm14
  14446. vpxor 128(%rcx), %ymm13, %ymm13
  14447. # Calc t[0..4]
  14448. vpsrlq $63, %ymm11, %ymm0
  14449. vpsrlq $63, %ymm12, %ymm1
  14450. vpsrlq $63, %ymm13, %ymm2
  14451. vpsrlq $63, %ymm14, %ymm3
  14452. vpsrlq $63, %ymm10, %ymm4
  14453. vpaddq %ymm11, %ymm11, %ymm5
  14454. vpaddq %ymm12, %ymm12, %ymm6
  14455. vpaddq %ymm13, %ymm13, %ymm7
  14456. vpaddq %ymm14, %ymm14, %ymm8
  14457. vpaddq %ymm10, %ymm10, %ymm9
  14458. vpor %ymm0, %ymm5, %ymm5
  14459. vpor %ymm1, %ymm6, %ymm6
  14460. vpor %ymm2, %ymm7, %ymm7
  14461. vpor %ymm3, %ymm8, %ymm8
  14462. vpor %ymm4, %ymm9, %ymm9
  14463. vpxor %ymm14, %ymm5, %ymm5
  14464. vpxor %ymm10, %ymm6, %ymm6
  14465. vpxor %ymm11, %ymm7, %ymm7
  14466. vpxor %ymm12, %ymm8, %ymm8
  14467. vpxor %ymm13, %ymm9, %ymm9
  14468. # Row Mix
  14469. # Row 0
  14470. vpxor %ymm15, %ymm5, %ymm10
  14471. vpxor -64(%rax), %ymm6, %ymm11
  14472. vpxor (%rcx), %ymm7, %ymm12
  14473. vpxor 32(%rdi), %ymm8, %ymm13
  14474. vpxor 96(%rax), %ymm9, %ymm14
  14475. vpsrlq $20, %ymm11, %ymm0
  14476. vpsrlq $21, %ymm12, %ymm1
  14477. vpsrlq $43, %ymm13, %ymm2
  14478. vpsrlq $50, %ymm14, %ymm3
  14479. vpsllq $44, %ymm11, %ymm11
  14480. vpsllq $43, %ymm12, %ymm12
  14481. vpsllq $21, %ymm13, %ymm13
  14482. vpsllq $14, %ymm14, %ymm14
  14483. vpor %ymm0, %ymm11, %ymm11
  14484. vpor %ymm1, %ymm12, %ymm12
  14485. vpor %ymm2, %ymm13, %ymm13
  14486. vpor %ymm3, %ymm14, %ymm14
  14487. vpandn %ymm12, %ymm11, %ymm15
  14488. vpandn %ymm13, %ymm12, %ymm1
  14489. vpandn %ymm14, %ymm13, %ymm2
  14490. vpandn %ymm10, %ymm14, %ymm3
  14491. vpandn %ymm11, %ymm10, %ymm4
  14492. vpxor %ymm10, %ymm15, %ymm15
  14493. vpxor %ymm11, %ymm1, %ymm1
  14494. vpxor %ymm12, %ymm2, %ymm2
  14495. # XOR in constant
  14496. vpxor 704(%rdx), %ymm15, %ymm15
  14497. vpxor %ymm13, %ymm3, %ymm3
  14498. vpxor %ymm14, %ymm4, %ymm4
  14499. vmovdqu %ymm1, -64(%rax)
  14500. vmovdqu %ymm2, (%rcx)
  14501. vmovdqu %ymm3, 32(%rdi)
  14502. vmovdqu %ymm4, 96(%rax)
  14503. # Row 1
  14504. vpxor 128(%rax), %ymm8, %ymm10
  14505. vpxor -96(%rdi), %ymm9, %ymm11
  14506. vpxor -32(%rax), %ymm5, %ymm12
  14507. vpxor 32(%rcx), %ymm6, %ymm13
  14508. vpxor 64(%rdi), %ymm7, %ymm14
  14509. vpsrlq $36, %ymm10, %ymm0
  14510. vpsrlq $44, %ymm11, %ymm1
  14511. vpsrlq $61, %ymm12, %ymm2
  14512. vpsrlq $19, %ymm13, %ymm3
  14513. vpsrlq $3, %ymm14, %ymm4
  14514. vpsllq $28, %ymm10, %ymm10
  14515. vpsllq $20, %ymm11, %ymm11
  14516. vpsllq $3, %ymm12, %ymm12
  14517. vpsllq $45, %ymm13, %ymm13
  14518. vpsllq $61, %ymm14, %ymm14
  14519. vpor %ymm0, %ymm10, %ymm10
  14520. vpor %ymm1, %ymm11, %ymm11
  14521. vpor %ymm2, %ymm12, %ymm12
  14522. vpor %ymm3, %ymm13, %ymm13
  14523. vpor %ymm4, %ymm14, %ymm14
  14524. vpandn %ymm12, %ymm11, %ymm0
  14525. vpandn %ymm13, %ymm12, %ymm1
  14526. vpandn %ymm14, %ymm13, %ymm2
  14527. vpandn %ymm10, %ymm14, %ymm3
  14528. vpandn %ymm11, %ymm10, %ymm4
  14529. vpxor %ymm10, %ymm0, %ymm0
  14530. vpxor %ymm11, %ymm1, %ymm1
  14531. vpxor %ymm12, %ymm2, %ymm2
  14532. vpxor %ymm13, %ymm3, %ymm3
  14533. vpxor %ymm14, %ymm4, %ymm4
  14534. vmovdqu %ymm0, 128(%rax)
  14535. vmovdqu %ymm1, -96(%rdi)
  14536. vmovdqu %ymm2, -32(%rax)
  14537. vmovdqu %ymm3, 32(%rcx)
  14538. vmovdqu %ymm4, 64(%rdi)
  14539. # Row 2
  14540. vpxor 96(%rdi), %ymm6, %ymm10
  14541. vpxor -96(%rcx), %ymm7, %ymm11
  14542. vpxor -64(%rdi), %ymm8, %ymm12
  14543. vpxor (%rax), %ymm9, %ymm13
  14544. vpxor 64(%rcx), %ymm5, %ymm14
  14545. vpsrlq $63, %ymm10, %ymm0
  14546. vpsrlq $58, %ymm11, %ymm1
  14547. vpsrlq $39, %ymm12, %ymm2
  14548. vpsrlq $56, %ymm13, %ymm3
  14549. vpsrlq $46, %ymm14, %ymm4
  14550. vpaddq %ymm10, %ymm10, %ymm10
  14551. vpsllq $6, %ymm11, %ymm11
  14552. vpsllq $25, %ymm12, %ymm12
  14553. vpsllq $8, %ymm13, %ymm13
  14554. vpsllq $18, %ymm14, %ymm14
  14555. vpor %ymm0, %ymm10, %ymm10
  14556. vpor %ymm1, %ymm11, %ymm11
  14557. vpor %ymm2, %ymm12, %ymm12
  14558. vpor %ymm3, %ymm13, %ymm13
  14559. vpor %ymm4, %ymm14, %ymm14
  14560. vpandn %ymm12, %ymm11, %ymm0
  14561. vpandn %ymm13, %ymm12, %ymm1
  14562. vpandn %ymm14, %ymm13, %ymm2
  14563. vpandn %ymm10, %ymm14, %ymm3
  14564. vpandn %ymm11, %ymm10, %ymm4
  14565. vpxor %ymm10, %ymm0, %ymm0
  14566. vpxor %ymm11, %ymm1, %ymm1
  14567. vpxor %ymm12, %ymm2, %ymm2
  14568. vpxor %ymm13, %ymm3, %ymm3
  14569. vpxor %ymm14, %ymm4, %ymm4
  14570. vmovdqu %ymm0, 96(%rdi)
  14571. vmovdqu %ymm1, -96(%rcx)
  14572. vmovdqu %ymm2, -64(%rdi)
  14573. vmovdqu %ymm3, (%rax)
  14574. vmovdqu %ymm4, 64(%rcx)
  14575. # Row 3
  14576. vpxor 96(%rcx), %ymm9, %ymm10
  14577. vpxor 128(%rdi), %ymm5, %ymm11
  14578. vpxor -64(%rcx), %ymm6, %ymm12
  14579. vpxor -32(%rdi), %ymm7, %ymm13
  14580. vpxor 32(%rax), %ymm8, %ymm14
  14581. vpsrlq $37, %ymm10, %ymm0
  14582. vpsrlq $28, %ymm11, %ymm1
  14583. vpsrlq $54, %ymm12, %ymm2
  14584. vpsrlq $49, %ymm13, %ymm3
  14585. vpsrlq $8, %ymm14, %ymm4
  14586. vpsllq $27, %ymm10, %ymm10
  14587. vpsllq $36, %ymm11, %ymm11
  14588. vpsllq $10, %ymm12, %ymm12
  14589. vpsllq $15, %ymm13, %ymm13
  14590. vpsllq $56, %ymm14, %ymm14
  14591. vpor %ymm0, %ymm10, %ymm10
  14592. vpor %ymm1, %ymm11, %ymm11
  14593. vpor %ymm2, %ymm12, %ymm12
  14594. vpor %ymm3, %ymm13, %ymm13
  14595. vpor %ymm4, %ymm14, %ymm14
  14596. vpandn %ymm12, %ymm11, %ymm0
  14597. vpandn %ymm13, %ymm12, %ymm1
  14598. vpandn %ymm14, %ymm13, %ymm2
  14599. vpandn %ymm10, %ymm14, %ymm3
  14600. vpandn %ymm11, %ymm10, %ymm4
  14601. vpxor %ymm10, %ymm0, %ymm0
  14602. vpxor %ymm11, %ymm1, %ymm1
  14603. vpxor %ymm12, %ymm2, %ymm2
  14604. vpxor %ymm13, %ymm3, %ymm3
  14605. vpxor %ymm14, %ymm4, %ymm4
  14606. vmovdqu %ymm0, 96(%rcx)
  14607. vmovdqu %ymm1, 128(%rdi)
  14608. vmovdqu %ymm2, -64(%rcx)
  14609. vmovdqu %ymm3, -32(%rdi)
  14610. vmovdqu %ymm4, 32(%rax)
  14611. # Row 4
  14612. vpxor 64(%rax), %ymm7, %ymm10
  14613. vpxor 128(%rcx), %ymm8, %ymm11
  14614. vpxor -96(%rax), %ymm9, %ymm12
  14615. vpxor -32(%rcx), %ymm5, %ymm13
  14616. vpxor (%rdi), %ymm6, %ymm14
  14617. vpsrlq $2, %ymm10, %ymm0
  14618. vpsrlq $9, %ymm11, %ymm1
  14619. vpsrlq $25, %ymm12, %ymm2
  14620. vpsrlq $23, %ymm13, %ymm3
  14621. vpsrlq $62, %ymm14, %ymm4
  14622. vpsllq $62, %ymm10, %ymm10
  14623. vpsllq $55, %ymm11, %ymm11
  14624. vpsllq $39, %ymm12, %ymm12
  14625. vpsllq $41, %ymm13, %ymm13
  14626. vpsllq $2, %ymm14, %ymm14
  14627. vpor %ymm0, %ymm10, %ymm10
  14628. vpor %ymm1, %ymm11, %ymm11
  14629. vpor %ymm2, %ymm12, %ymm12
  14630. vpor %ymm3, %ymm13, %ymm13
  14631. vpor %ymm4, %ymm14, %ymm14
  14632. vpandn %ymm12, %ymm11, %ymm0
  14633. vpandn %ymm13, %ymm12, %ymm1
  14634. vpandn %ymm14, %ymm13, %ymm2
  14635. vpandn %ymm10, %ymm14, %ymm3
  14636. vpandn %ymm11, %ymm10, %ymm4
  14637. vpxor %ymm10, %ymm0, %ymm0
  14638. vpxor %ymm11, %ymm1, %ymm1
  14639. vpxor %ymm12, %ymm2, %ymm2
  14640. vpxor %ymm13, %ymm3, %ymm3
  14641. vpxor %ymm14, %ymm4, %ymm4
  14642. vmovdqu %ymm0, 64(%rax)
  14643. vmovdqu %ymm1, 128(%rcx)
  14644. vmovdqu %ymm2, -96(%rax)
  14645. vmovdqu %ymm3, -32(%rcx)
  14646. vmovdqu %ymm4, (%rdi)
  14647. # Round 23
  14648. # Calc b[0..4]
  14649. vpxor %ymm15, %ymm0, %ymm10
  14650. vpxor -96(%rdi), %ymm1, %ymm11
  14651. vpxor -64(%rdi), %ymm2, %ymm12
  14652. vpxor -32(%rdi), %ymm3, %ymm13
  14653. vpxor 32(%rdi), %ymm13, %ymm13
  14654. vpxor 64(%rdi), %ymm4, %ymm14
  14655. vpxor 96(%rdi), %ymm10, %ymm10
  14656. vpxor 128(%rdi), %ymm11, %ymm11
  14657. vpxor -64(%rax), %ymm11, %ymm11
  14658. vpxor -32(%rax), %ymm12, %ymm12
  14659. vpxor (%rax), %ymm13, %ymm13
  14660. vpxor 32(%rax), %ymm14, %ymm14
  14661. vpxor 96(%rax), %ymm14, %ymm14
  14662. vpxor 128(%rax), %ymm10, %ymm10
  14663. vpxor -96(%rcx), %ymm11, %ymm11
  14664. vpxor -64(%rcx), %ymm12, %ymm12
  14665. vpxor (%rcx), %ymm12, %ymm12
  14666. vpxor 32(%rcx), %ymm13, %ymm13
  14667. vpxor 64(%rcx), %ymm14, %ymm14
  14668. vpxor 96(%rcx), %ymm10, %ymm10
  14669. # Calc t[0..4]
  14670. vpsrlq $63, %ymm11, %ymm0
  14671. vpsrlq $63, %ymm12, %ymm1
  14672. vpsrlq $63, %ymm13, %ymm2
  14673. vpsrlq $63, %ymm14, %ymm3
  14674. vpsrlq $63, %ymm10, %ymm4
  14675. vpaddq %ymm11, %ymm11, %ymm5
  14676. vpaddq %ymm12, %ymm12, %ymm6
  14677. vpaddq %ymm13, %ymm13, %ymm7
  14678. vpaddq %ymm14, %ymm14, %ymm8
  14679. vpaddq %ymm10, %ymm10, %ymm9
  14680. vpor %ymm0, %ymm5, %ymm5
  14681. vpor %ymm1, %ymm6, %ymm6
  14682. vpor %ymm2, %ymm7, %ymm7
  14683. vpor %ymm3, %ymm8, %ymm8
  14684. vpor %ymm4, %ymm9, %ymm9
  14685. vpxor %ymm14, %ymm5, %ymm5
  14686. vpxor %ymm10, %ymm6, %ymm6
  14687. vpxor %ymm11, %ymm7, %ymm7
  14688. vpxor %ymm12, %ymm8, %ymm8
  14689. vpxor %ymm13, %ymm9, %ymm9
  14690. # Row Mix
  14691. # Row 0
  14692. vpxor %ymm15, %ymm5, %ymm10
  14693. vpxor -96(%rdi), %ymm6, %ymm11
  14694. vpxor -64(%rdi), %ymm7, %ymm12
  14695. vpxor -32(%rdi), %ymm8, %ymm13
  14696. vpxor (%rdi), %ymm9, %ymm14
  14697. vpsrlq $20, %ymm11, %ymm0
  14698. vpsrlq $21, %ymm12, %ymm1
  14699. vpsrlq $43, %ymm13, %ymm2
  14700. vpsrlq $50, %ymm14, %ymm3
  14701. vpsllq $44, %ymm11, %ymm11
  14702. vpsllq $43, %ymm12, %ymm12
  14703. vpsllq $21, %ymm13, %ymm13
  14704. vpsllq $14, %ymm14, %ymm14
  14705. vpor %ymm0, %ymm11, %ymm11
  14706. vpor %ymm1, %ymm12, %ymm12
  14707. vpor %ymm2, %ymm13, %ymm13
  14708. vpor %ymm3, %ymm14, %ymm14
  14709. vpandn %ymm12, %ymm11, %ymm15
  14710. vpandn %ymm13, %ymm12, %ymm1
  14711. vpandn %ymm14, %ymm13, %ymm2
  14712. vpandn %ymm10, %ymm14, %ymm3
  14713. vpandn %ymm11, %ymm10, %ymm4
  14714. vpxor %ymm10, %ymm15, %ymm15
  14715. vpxor %ymm11, %ymm1, %ymm1
  14716. vpxor %ymm12, %ymm2, %ymm2
  14717. # XOR in constant
  14718. vpxor 736(%rdx), %ymm15, %ymm15
  14719. vpxor %ymm13, %ymm3, %ymm3
  14720. vpxor %ymm14, %ymm4, %ymm4
  14721. vmovdqu %ymm1, -96(%rdi)
  14722. vmovdqu %ymm2, -64(%rdi)
  14723. vmovdqu %ymm3, -32(%rdi)
  14724. vmovdqu %ymm4, (%rdi)
  14725. # Row 1
  14726. vpxor 32(%rdi), %ymm8, %ymm10
  14727. vpxor 64(%rdi), %ymm9, %ymm11
  14728. vpxor 96(%rdi), %ymm5, %ymm12
  14729. vpxor 128(%rdi), %ymm6, %ymm13
  14730. vpxor -96(%rax), %ymm7, %ymm14
  14731. vpsrlq $36, %ymm10, %ymm0
  14732. vpsrlq $44, %ymm11, %ymm1
  14733. vpsrlq $61, %ymm12, %ymm2
  14734. vpsrlq $19, %ymm13, %ymm3
  14735. vpsrlq $3, %ymm14, %ymm4
  14736. vpsllq $28, %ymm10, %ymm10
  14737. vpsllq $20, %ymm11, %ymm11
  14738. vpsllq $3, %ymm12, %ymm12
  14739. vpsllq $45, %ymm13, %ymm13
  14740. vpsllq $61, %ymm14, %ymm14
  14741. vpor %ymm0, %ymm10, %ymm10
  14742. vpor %ymm1, %ymm11, %ymm11
  14743. vpor %ymm2, %ymm12, %ymm12
  14744. vpor %ymm3, %ymm13, %ymm13
  14745. vpor %ymm4, %ymm14, %ymm14
  14746. vpandn %ymm12, %ymm11, %ymm0
  14747. vpandn %ymm13, %ymm12, %ymm1
  14748. vpandn %ymm14, %ymm13, %ymm2
  14749. vpandn %ymm10, %ymm14, %ymm3
  14750. vpandn %ymm11, %ymm10, %ymm4
  14751. vpxor %ymm10, %ymm0, %ymm0
  14752. vpxor %ymm11, %ymm1, %ymm1
  14753. vpxor %ymm12, %ymm2, %ymm2
  14754. vpxor %ymm13, %ymm3, %ymm3
  14755. vpxor %ymm14, %ymm4, %ymm4
  14756. vmovdqu %ymm0, 32(%rdi)
  14757. vmovdqu %ymm1, 64(%rdi)
  14758. vmovdqu %ymm2, 96(%rdi)
  14759. vmovdqu %ymm3, 128(%rdi)
  14760. vmovdqu %ymm4, -96(%rax)
  14761. # Row 2
  14762. vpxor -64(%rax), %ymm6, %ymm10
  14763. vpxor -32(%rax), %ymm7, %ymm11
  14764. vpxor (%rax), %ymm8, %ymm12
  14765. vpxor 32(%rax), %ymm9, %ymm13
  14766. vpxor 64(%rax), %ymm5, %ymm14
  14767. vpsrlq $63, %ymm10, %ymm0
  14768. vpsrlq $58, %ymm11, %ymm1
  14769. vpsrlq $39, %ymm12, %ymm2
  14770. vpsrlq $56, %ymm13, %ymm3
  14771. vpsrlq $46, %ymm14, %ymm4
  14772. vpaddq %ymm10, %ymm10, %ymm10
  14773. vpsllq $6, %ymm11, %ymm11
  14774. vpsllq $25, %ymm12, %ymm12
  14775. vpsllq $8, %ymm13, %ymm13
  14776. vpsllq $18, %ymm14, %ymm14
  14777. vpor %ymm0, %ymm10, %ymm10
  14778. vpor %ymm1, %ymm11, %ymm11
  14779. vpor %ymm2, %ymm12, %ymm12
  14780. vpor %ymm3, %ymm13, %ymm13
  14781. vpor %ymm4, %ymm14, %ymm14
  14782. vpandn %ymm12, %ymm11, %ymm0
  14783. vpandn %ymm13, %ymm12, %ymm1
  14784. vpandn %ymm14, %ymm13, %ymm2
  14785. vpandn %ymm10, %ymm14, %ymm3
  14786. vpandn %ymm11, %ymm10, %ymm4
  14787. vpxor %ymm10, %ymm0, %ymm0
  14788. vpxor %ymm11, %ymm1, %ymm1
  14789. vpxor %ymm12, %ymm2, %ymm2
  14790. vpxor %ymm13, %ymm3, %ymm3
  14791. vpxor %ymm14, %ymm4, %ymm4
  14792. vmovdqu %ymm0, -64(%rax)
  14793. vmovdqu %ymm1, -32(%rax)
  14794. vmovdqu %ymm2, (%rax)
  14795. vmovdqu %ymm3, 32(%rax)
  14796. vmovdqu %ymm4, 64(%rax)
  14797. # Row 3
  14798. vpxor 96(%rax), %ymm9, %ymm10
  14799. vpxor 128(%rax), %ymm5, %ymm11
  14800. vpxor -96(%rcx), %ymm6, %ymm12
  14801. vpxor -64(%rcx), %ymm7, %ymm13
  14802. vpxor -32(%rcx), %ymm8, %ymm14
  14803. vpsrlq $37, %ymm10, %ymm0
  14804. vpsrlq $28, %ymm11, %ymm1
  14805. vpsrlq $54, %ymm12, %ymm2
  14806. vpsrlq $49, %ymm13, %ymm3
  14807. vpsrlq $8, %ymm14, %ymm4
  14808. vpsllq $27, %ymm10, %ymm10
  14809. vpsllq $36, %ymm11, %ymm11
  14810. vpsllq $10, %ymm12, %ymm12
  14811. vpsllq $15, %ymm13, %ymm13
  14812. vpsllq $56, %ymm14, %ymm14
  14813. vpor %ymm0, %ymm10, %ymm10
  14814. vpor %ymm1, %ymm11, %ymm11
  14815. vpor %ymm2, %ymm12, %ymm12
  14816. vpor %ymm3, %ymm13, %ymm13
  14817. vpor %ymm4, %ymm14, %ymm14
  14818. vpandn %ymm12, %ymm11, %ymm0
  14819. vpandn %ymm13, %ymm12, %ymm1
  14820. vpandn %ymm14, %ymm13, %ymm2
  14821. vpandn %ymm10, %ymm14, %ymm3
  14822. vpandn %ymm11, %ymm10, %ymm4
  14823. vpxor %ymm10, %ymm0, %ymm0
  14824. vpxor %ymm11, %ymm1, %ymm1
  14825. vpxor %ymm12, %ymm2, %ymm2
  14826. vpxor %ymm13, %ymm3, %ymm3
  14827. vpxor %ymm14, %ymm4, %ymm4
  14828. vmovdqu %ymm0, 96(%rax)
  14829. vmovdqu %ymm1, 128(%rax)
  14830. vmovdqu %ymm2, -96(%rcx)
  14831. vmovdqu %ymm3, -64(%rcx)
  14832. vmovdqu %ymm4, -32(%rcx)
  14833. # Row 4
  14834. vpxor (%rcx), %ymm7, %ymm10
  14835. vpxor 32(%rcx), %ymm8, %ymm11
  14836. vpxor 64(%rcx), %ymm9, %ymm12
  14837. vpxor 96(%rcx), %ymm5, %ymm13
  14838. vpxor 128(%rcx), %ymm6, %ymm14
  14839. vpsrlq $2, %ymm10, %ymm0
  14840. vpsrlq $9, %ymm11, %ymm1
  14841. vpsrlq $25, %ymm12, %ymm2
  14842. vpsrlq $23, %ymm13, %ymm3
  14843. vpsrlq $62, %ymm14, %ymm4
  14844. vpsllq $62, %ymm10, %ymm10
  14845. vpsllq $55, %ymm11, %ymm11
  14846. vpsllq $39, %ymm12, %ymm12
  14847. vpsllq $41, %ymm13, %ymm13
  14848. vpsllq $2, %ymm14, %ymm14
  14849. vpor %ymm0, %ymm10, %ymm10
  14850. vpor %ymm1, %ymm11, %ymm11
  14851. vpor %ymm2, %ymm12, %ymm12
  14852. vpor %ymm3, %ymm13, %ymm13
  14853. vpor %ymm4, %ymm14, %ymm14
  14854. vpandn %ymm12, %ymm11, %ymm0
  14855. vpandn %ymm13, %ymm12, %ymm1
  14856. vpandn %ymm14, %ymm13, %ymm2
  14857. vpandn %ymm10, %ymm14, %ymm3
  14858. vpandn %ymm11, %ymm10, %ymm4
  14859. vpxor %ymm10, %ymm0, %ymm0
  14860. vpxor %ymm11, %ymm1, %ymm1
  14861. vpxor %ymm12, %ymm2, %ymm2
  14862. vpxor %ymm13, %ymm3, %ymm3
  14863. vpxor %ymm14, %ymm4, %ymm4
  14864. vmovdqu %ymm0, (%rcx)
  14865. vmovdqu %ymm1, 32(%rcx)
  14866. vmovdqu %ymm2, 64(%rcx)
  14867. vmovdqu %ymm3, 96(%rcx)
  14868. vmovdqu %ymm4, 128(%rcx)
  14869. subq $0x80, %rdi
  14870. vmovdqu %ymm15, (%rdi)
  14871. vzeroupper
  14872. repz retq
  14873. #ifndef __APPLE__
  14874. .size kyber_sha3_blocksx4_avx2,.-kyber_sha3_blocksx4_avx2
  14875. #endif /* __APPLE__ */
  14876. #endif /* HAVE_INTEL_AVX2 */
  14877. #if defined(__linux__) && defined(__ELF__)
  14878. .section .note.GNU-stack,"",%progbits
  14879. #endif