sha512_asm.S 282 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749
  1. /* sha512_asm
  2. *
  3. * Copyright (C) 2006-2022 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. #ifndef HAVE_INTEL_AVX1
  22. #define HAVE_INTEL_AVX1
  23. #endif /* HAVE_INTEL_AVX1 */
  24. #ifndef NO_AVX2_SUPPORT
  25. #define HAVE_INTEL_AVX2
  26. #endif /* NO_AVX2_SUPPORT */
  27. #ifdef HAVE_INTEL_AVX1
  28. #ifndef __APPLE__
  29. .data
  30. #else
  31. .section __DATA,__data
  32. #endif /* __APPLE__ */
  33. #ifndef __APPLE__
  34. .align 16
  35. #else
  36. .p2align 4
  37. #endif /* __APPLE__ */
  38. L_avx1_sha512_k:
  39. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  40. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  41. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  42. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  43. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  44. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  45. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  46. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  47. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  48. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  49. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  50. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  51. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  52. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  53. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  54. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  55. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  56. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  57. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  58. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  59. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  60. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  61. .quad 0xd192e819d6ef5218,0xd69906245565a910
  62. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  63. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  64. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  65. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  66. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  67. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  68. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  69. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  70. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  71. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  72. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  73. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  74. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  75. .quad 0x28db77f523047d84,0x32caab7b40c72493
  76. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  77. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  78. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  79. #ifndef __APPLE__
  80. .data
  81. #else
  82. .section __DATA,__data
  83. #endif /* __APPLE__ */
  84. #ifndef __APPLE__
  85. .align 16
  86. #else
  87. .p2align 4
  88. #endif /* __APPLE__ */
  89. L_avx1_sha512_flip_mask:
  90. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  91. #ifndef __APPLE__
  92. .text
  93. .globl Transform_Sha512_AVX1
  94. .type Transform_Sha512_AVX1,@function
  95. .align 16
  96. Transform_Sha512_AVX1:
  97. #else
  98. .section __TEXT,__text
  99. .globl _Transform_Sha512_AVX1
  100. .p2align 4
  101. _Transform_Sha512_AVX1:
  102. #endif /* __APPLE__ */
  103. pushq %rbx
  104. pushq %r12
  105. pushq %r13
  106. pushq %r14
  107. pushq %r15
  108. subq $0x88, %rsp
  109. leaq 64(%rdi), %rax
  110. vmovdqa L_avx1_sha512_flip_mask(%rip), %xmm14
  111. movq (%rdi), %r8
  112. movq 8(%rdi), %r9
  113. movq 16(%rdi), %r10
  114. movq 24(%rdi), %r11
  115. movq 32(%rdi), %r12
  116. movq 40(%rdi), %r13
  117. movq 48(%rdi), %r14
  118. movq 56(%rdi), %r15
  119. vmovdqu (%rax), %xmm0
  120. vmovdqu 16(%rax), %xmm1
  121. vpshufb %xmm14, %xmm0, %xmm0
  122. vpshufb %xmm14, %xmm1, %xmm1
  123. vmovdqu 32(%rax), %xmm2
  124. vmovdqu 48(%rax), %xmm3
  125. vpshufb %xmm14, %xmm2, %xmm2
  126. vpshufb %xmm14, %xmm3, %xmm3
  127. vmovdqu 64(%rax), %xmm4
  128. vmovdqu 80(%rax), %xmm5
  129. vpshufb %xmm14, %xmm4, %xmm4
  130. vpshufb %xmm14, %xmm5, %xmm5
  131. vmovdqu 96(%rax), %xmm6
  132. vmovdqu 112(%rax), %xmm7
  133. vpshufb %xmm14, %xmm6, %xmm6
  134. vpshufb %xmm14, %xmm7, %xmm7
  135. movl $4, 128(%rsp)
  136. leaq L_avx1_sha512_k(%rip), %rsi
  137. movq %r9, %rbx
  138. movq %r12, %rax
  139. xorq %r10, %rbx
  140. # Start of 16 rounds
  141. L_sha256_len_avx1_start:
  142. vpaddq (%rsi), %xmm0, %xmm8
  143. vpaddq 16(%rsi), %xmm1, %xmm9
  144. vmovdqu %xmm8, (%rsp)
  145. vmovdqu %xmm9, 16(%rsp)
  146. vpaddq 32(%rsi), %xmm2, %xmm8
  147. vpaddq 48(%rsi), %xmm3, %xmm9
  148. vmovdqu %xmm8, 32(%rsp)
  149. vmovdqu %xmm9, 48(%rsp)
  150. vpaddq 64(%rsi), %xmm4, %xmm8
  151. vpaddq 80(%rsi), %xmm5, %xmm9
  152. vmovdqu %xmm8, 64(%rsp)
  153. vmovdqu %xmm9, 80(%rsp)
  154. vpaddq 96(%rsi), %xmm6, %xmm8
  155. vpaddq 112(%rsi), %xmm7, %xmm9
  156. vmovdqu %xmm8, 96(%rsp)
  157. vmovdqu %xmm9, 112(%rsp)
  158. addq $0x80, %rsi
  159. # msg_sched: 0-1
  160. # rnd_0: 0 - 0
  161. rorq $23, %rax
  162. vpalignr $8, %xmm0, %xmm1, %xmm12
  163. vpalignr $8, %xmm4, %xmm5, %xmm13
  164. # rnd_0: 1 - 1
  165. movq %r8, %rdx
  166. movq %r13, %rcx
  167. addq (%rsp), %r15
  168. xorq %r14, %rcx
  169. vpsrlq $0x01, %xmm12, %xmm8
  170. vpsllq $63, %xmm12, %xmm9
  171. # rnd_0: 2 - 3
  172. xorq %r12, %rax
  173. andq %r12, %rcx
  174. rorq $4, %rax
  175. xorq %r14, %rcx
  176. vpsrlq $8, %xmm12, %xmm10
  177. vpsllq $56, %xmm12, %xmm11
  178. # rnd_0: 4 - 5
  179. xorq %r12, %rax
  180. addq %rcx, %r15
  181. rorq $14, %rax
  182. xorq %r9, %rdx
  183. vpor %xmm9, %xmm8, %xmm8
  184. vpor %xmm11, %xmm10, %xmm10
  185. # rnd_0: 6 - 7
  186. addq %rax, %r15
  187. movq %r8, %rcx
  188. andq %rdx, %rbx
  189. rorq $5, %rcx
  190. vpsrlq $7, %xmm12, %xmm11
  191. vpxor %xmm10, %xmm8, %xmm8
  192. # rnd_0: 8 - 9
  193. xorq %r8, %rcx
  194. xorq %r9, %rbx
  195. rorq $6, %rcx
  196. addq %r15, %r11
  197. vpxor %xmm11, %xmm8, %xmm8
  198. vpaddq %xmm0, %xmm13, %xmm0
  199. # rnd_0: 10 - 11
  200. xorq %r8, %rcx
  201. addq %rbx, %r15
  202. rorq $28, %rcx
  203. movq %r11, %rax
  204. addq %rcx, %r15
  205. # rnd_1: 0 - 0
  206. rorq $23, %rax
  207. vpaddq %xmm0, %xmm8, %xmm0
  208. # rnd_1: 1 - 1
  209. movq %r15, %rbx
  210. movq %r12, %rcx
  211. addq 8(%rsp), %r14
  212. xorq %r13, %rcx
  213. vpsrlq $19, %xmm7, %xmm8
  214. vpsllq $45, %xmm7, %xmm9
  215. # rnd_1: 2 - 3
  216. xorq %r11, %rax
  217. andq %r11, %rcx
  218. rorq $4, %rax
  219. xorq %r13, %rcx
  220. vpsrlq $61, %xmm7, %xmm10
  221. vpsllq $3, %xmm7, %xmm11
  222. # rnd_1: 4 - 6
  223. xorq %r11, %rax
  224. addq %rcx, %r14
  225. rorq $14, %rax
  226. xorq %r8, %rbx
  227. addq %rax, %r14
  228. movq %r15, %rcx
  229. vpor %xmm9, %xmm8, %xmm8
  230. vpor %xmm11, %xmm10, %xmm10
  231. # rnd_1: 7 - 8
  232. andq %rbx, %rdx
  233. rorq $5, %rcx
  234. xorq %r15, %rcx
  235. xorq %r8, %rdx
  236. vpxor %xmm10, %xmm8, %xmm8
  237. vpsrlq $6, %xmm7, %xmm11
  238. # rnd_1: 9 - 10
  239. rorq $6, %rcx
  240. addq %r14, %r10
  241. xorq %r15, %rcx
  242. addq %rdx, %r14
  243. vpxor %xmm11, %xmm8, %xmm8
  244. # rnd_1: 11 - 11
  245. rorq $28, %rcx
  246. movq %r10, %rax
  247. addq %rcx, %r14
  248. vpaddq %xmm0, %xmm8, %xmm0
  249. # msg_sched done: 0-3
  250. # msg_sched: 2-3
  251. # rnd_0: 0 - 0
  252. rorq $23, %rax
  253. vpalignr $8, %xmm1, %xmm2, %xmm12
  254. vpalignr $8, %xmm5, %xmm6, %xmm13
  255. # rnd_0: 1 - 1
  256. movq %r14, %rdx
  257. movq %r11, %rcx
  258. addq 16(%rsp), %r13
  259. xorq %r12, %rcx
  260. vpsrlq $0x01, %xmm12, %xmm8
  261. vpsllq $63, %xmm12, %xmm9
  262. # rnd_0: 2 - 3
  263. xorq %r10, %rax
  264. andq %r10, %rcx
  265. rorq $4, %rax
  266. xorq %r12, %rcx
  267. vpsrlq $8, %xmm12, %xmm10
  268. vpsllq $56, %xmm12, %xmm11
  269. # rnd_0: 4 - 5
  270. xorq %r10, %rax
  271. addq %rcx, %r13
  272. rorq $14, %rax
  273. xorq %r15, %rdx
  274. vpor %xmm9, %xmm8, %xmm8
  275. vpor %xmm11, %xmm10, %xmm10
  276. # rnd_0: 6 - 7
  277. addq %rax, %r13
  278. movq %r14, %rcx
  279. andq %rdx, %rbx
  280. rorq $5, %rcx
  281. vpsrlq $7, %xmm12, %xmm11
  282. vpxor %xmm10, %xmm8, %xmm8
  283. # rnd_0: 8 - 9
  284. xorq %r14, %rcx
  285. xorq %r15, %rbx
  286. rorq $6, %rcx
  287. addq %r13, %r9
  288. vpxor %xmm11, %xmm8, %xmm8
  289. vpaddq %xmm1, %xmm13, %xmm1
  290. # rnd_0: 10 - 11
  291. xorq %r14, %rcx
  292. addq %rbx, %r13
  293. rorq $28, %rcx
  294. movq %r9, %rax
  295. addq %rcx, %r13
  296. # rnd_1: 0 - 0
  297. rorq $23, %rax
  298. vpaddq %xmm1, %xmm8, %xmm1
  299. # rnd_1: 1 - 1
  300. movq %r13, %rbx
  301. movq %r10, %rcx
  302. addq 24(%rsp), %r12
  303. xorq %r11, %rcx
  304. vpsrlq $19, %xmm0, %xmm8
  305. vpsllq $45, %xmm0, %xmm9
  306. # rnd_1: 2 - 3
  307. xorq %r9, %rax
  308. andq %r9, %rcx
  309. rorq $4, %rax
  310. xorq %r11, %rcx
  311. vpsrlq $61, %xmm0, %xmm10
  312. vpsllq $3, %xmm0, %xmm11
  313. # rnd_1: 4 - 6
  314. xorq %r9, %rax
  315. addq %rcx, %r12
  316. rorq $14, %rax
  317. xorq %r14, %rbx
  318. addq %rax, %r12
  319. movq %r13, %rcx
  320. vpor %xmm9, %xmm8, %xmm8
  321. vpor %xmm11, %xmm10, %xmm10
  322. # rnd_1: 7 - 8
  323. andq %rbx, %rdx
  324. rorq $5, %rcx
  325. xorq %r13, %rcx
  326. xorq %r14, %rdx
  327. vpxor %xmm10, %xmm8, %xmm8
  328. vpsrlq $6, %xmm0, %xmm11
  329. # rnd_1: 9 - 10
  330. rorq $6, %rcx
  331. addq %r12, %r8
  332. xorq %r13, %rcx
  333. addq %rdx, %r12
  334. vpxor %xmm11, %xmm8, %xmm8
  335. # rnd_1: 11 - 11
  336. rorq $28, %rcx
  337. movq %r8, %rax
  338. addq %rcx, %r12
  339. vpaddq %xmm1, %xmm8, %xmm1
  340. # msg_sched done: 2-5
  341. # msg_sched: 4-5
  342. # rnd_0: 0 - 0
  343. rorq $23, %rax
  344. vpalignr $8, %xmm2, %xmm3, %xmm12
  345. vpalignr $8, %xmm6, %xmm7, %xmm13
  346. # rnd_0: 1 - 1
  347. movq %r12, %rdx
  348. movq %r9, %rcx
  349. addq 32(%rsp), %r11
  350. xorq %r10, %rcx
  351. vpsrlq $0x01, %xmm12, %xmm8
  352. vpsllq $63, %xmm12, %xmm9
  353. # rnd_0: 2 - 3
  354. xorq %r8, %rax
  355. andq %r8, %rcx
  356. rorq $4, %rax
  357. xorq %r10, %rcx
  358. vpsrlq $8, %xmm12, %xmm10
  359. vpsllq $56, %xmm12, %xmm11
  360. # rnd_0: 4 - 5
  361. xorq %r8, %rax
  362. addq %rcx, %r11
  363. rorq $14, %rax
  364. xorq %r13, %rdx
  365. vpor %xmm9, %xmm8, %xmm8
  366. vpor %xmm11, %xmm10, %xmm10
  367. # rnd_0: 6 - 7
  368. addq %rax, %r11
  369. movq %r12, %rcx
  370. andq %rdx, %rbx
  371. rorq $5, %rcx
  372. vpsrlq $7, %xmm12, %xmm11
  373. vpxor %xmm10, %xmm8, %xmm8
  374. # rnd_0: 8 - 9
  375. xorq %r12, %rcx
  376. xorq %r13, %rbx
  377. rorq $6, %rcx
  378. addq %r11, %r15
  379. vpxor %xmm11, %xmm8, %xmm8
  380. vpaddq %xmm2, %xmm13, %xmm2
  381. # rnd_0: 10 - 11
  382. xorq %r12, %rcx
  383. addq %rbx, %r11
  384. rorq $28, %rcx
  385. movq %r15, %rax
  386. addq %rcx, %r11
  387. # rnd_1: 0 - 0
  388. rorq $23, %rax
  389. vpaddq %xmm2, %xmm8, %xmm2
  390. # rnd_1: 1 - 1
  391. movq %r11, %rbx
  392. movq %r8, %rcx
  393. addq 40(%rsp), %r10
  394. xorq %r9, %rcx
  395. vpsrlq $19, %xmm1, %xmm8
  396. vpsllq $45, %xmm1, %xmm9
  397. # rnd_1: 2 - 3
  398. xorq %r15, %rax
  399. andq %r15, %rcx
  400. rorq $4, %rax
  401. xorq %r9, %rcx
  402. vpsrlq $61, %xmm1, %xmm10
  403. vpsllq $3, %xmm1, %xmm11
  404. # rnd_1: 4 - 6
  405. xorq %r15, %rax
  406. addq %rcx, %r10
  407. rorq $14, %rax
  408. xorq %r12, %rbx
  409. addq %rax, %r10
  410. movq %r11, %rcx
  411. vpor %xmm9, %xmm8, %xmm8
  412. vpor %xmm11, %xmm10, %xmm10
  413. # rnd_1: 7 - 8
  414. andq %rbx, %rdx
  415. rorq $5, %rcx
  416. xorq %r11, %rcx
  417. xorq %r12, %rdx
  418. vpxor %xmm10, %xmm8, %xmm8
  419. vpsrlq $6, %xmm1, %xmm11
  420. # rnd_1: 9 - 10
  421. rorq $6, %rcx
  422. addq %r10, %r14
  423. xorq %r11, %rcx
  424. addq %rdx, %r10
  425. vpxor %xmm11, %xmm8, %xmm8
  426. # rnd_1: 11 - 11
  427. rorq $28, %rcx
  428. movq %r14, %rax
  429. addq %rcx, %r10
  430. vpaddq %xmm2, %xmm8, %xmm2
  431. # msg_sched done: 4-7
  432. # msg_sched: 6-7
  433. # rnd_0: 0 - 0
  434. rorq $23, %rax
  435. vpalignr $8, %xmm3, %xmm4, %xmm12
  436. vpalignr $8, %xmm7, %xmm0, %xmm13
  437. # rnd_0: 1 - 1
  438. movq %r10, %rdx
  439. movq %r15, %rcx
  440. addq 48(%rsp), %r9
  441. xorq %r8, %rcx
  442. vpsrlq $0x01, %xmm12, %xmm8
  443. vpsllq $63, %xmm12, %xmm9
  444. # rnd_0: 2 - 3
  445. xorq %r14, %rax
  446. andq %r14, %rcx
  447. rorq $4, %rax
  448. xorq %r8, %rcx
  449. vpsrlq $8, %xmm12, %xmm10
  450. vpsllq $56, %xmm12, %xmm11
  451. # rnd_0: 4 - 5
  452. xorq %r14, %rax
  453. addq %rcx, %r9
  454. rorq $14, %rax
  455. xorq %r11, %rdx
  456. vpor %xmm9, %xmm8, %xmm8
  457. vpor %xmm11, %xmm10, %xmm10
  458. # rnd_0: 6 - 7
  459. addq %rax, %r9
  460. movq %r10, %rcx
  461. andq %rdx, %rbx
  462. rorq $5, %rcx
  463. vpsrlq $7, %xmm12, %xmm11
  464. vpxor %xmm10, %xmm8, %xmm8
  465. # rnd_0: 8 - 9
  466. xorq %r10, %rcx
  467. xorq %r11, %rbx
  468. rorq $6, %rcx
  469. addq %r9, %r13
  470. vpxor %xmm11, %xmm8, %xmm8
  471. vpaddq %xmm3, %xmm13, %xmm3
  472. # rnd_0: 10 - 11
  473. xorq %r10, %rcx
  474. addq %rbx, %r9
  475. rorq $28, %rcx
  476. movq %r13, %rax
  477. addq %rcx, %r9
  478. # rnd_1: 0 - 0
  479. rorq $23, %rax
  480. vpaddq %xmm3, %xmm8, %xmm3
  481. # rnd_1: 1 - 1
  482. movq %r9, %rbx
  483. movq %r14, %rcx
  484. addq 56(%rsp), %r8
  485. xorq %r15, %rcx
  486. vpsrlq $19, %xmm2, %xmm8
  487. vpsllq $45, %xmm2, %xmm9
  488. # rnd_1: 2 - 3
  489. xorq %r13, %rax
  490. andq %r13, %rcx
  491. rorq $4, %rax
  492. xorq %r15, %rcx
  493. vpsrlq $61, %xmm2, %xmm10
  494. vpsllq $3, %xmm2, %xmm11
  495. # rnd_1: 4 - 6
  496. xorq %r13, %rax
  497. addq %rcx, %r8
  498. rorq $14, %rax
  499. xorq %r10, %rbx
  500. addq %rax, %r8
  501. movq %r9, %rcx
  502. vpor %xmm9, %xmm8, %xmm8
  503. vpor %xmm11, %xmm10, %xmm10
  504. # rnd_1: 7 - 8
  505. andq %rbx, %rdx
  506. rorq $5, %rcx
  507. xorq %r9, %rcx
  508. xorq %r10, %rdx
  509. vpxor %xmm10, %xmm8, %xmm8
  510. vpsrlq $6, %xmm2, %xmm11
  511. # rnd_1: 9 - 10
  512. rorq $6, %rcx
  513. addq %r8, %r12
  514. xorq %r9, %rcx
  515. addq %rdx, %r8
  516. vpxor %xmm11, %xmm8, %xmm8
  517. # rnd_1: 11 - 11
  518. rorq $28, %rcx
  519. movq %r12, %rax
  520. addq %rcx, %r8
  521. vpaddq %xmm3, %xmm8, %xmm3
  522. # msg_sched done: 6-9
  523. # msg_sched: 8-9
  524. # rnd_0: 0 - 0
  525. rorq $23, %rax
  526. vpalignr $8, %xmm4, %xmm5, %xmm12
  527. vpalignr $8, %xmm0, %xmm1, %xmm13
  528. # rnd_0: 1 - 1
  529. movq %r8, %rdx
  530. movq %r13, %rcx
  531. addq 64(%rsp), %r15
  532. xorq %r14, %rcx
  533. vpsrlq $0x01, %xmm12, %xmm8
  534. vpsllq $63, %xmm12, %xmm9
  535. # rnd_0: 2 - 3
  536. xorq %r12, %rax
  537. andq %r12, %rcx
  538. rorq $4, %rax
  539. xorq %r14, %rcx
  540. vpsrlq $8, %xmm12, %xmm10
  541. vpsllq $56, %xmm12, %xmm11
  542. # rnd_0: 4 - 5
  543. xorq %r12, %rax
  544. addq %rcx, %r15
  545. rorq $14, %rax
  546. xorq %r9, %rdx
  547. vpor %xmm9, %xmm8, %xmm8
  548. vpor %xmm11, %xmm10, %xmm10
  549. # rnd_0: 6 - 7
  550. addq %rax, %r15
  551. movq %r8, %rcx
  552. andq %rdx, %rbx
  553. rorq $5, %rcx
  554. vpsrlq $7, %xmm12, %xmm11
  555. vpxor %xmm10, %xmm8, %xmm8
  556. # rnd_0: 8 - 9
  557. xorq %r8, %rcx
  558. xorq %r9, %rbx
  559. rorq $6, %rcx
  560. addq %r15, %r11
  561. vpxor %xmm11, %xmm8, %xmm8
  562. vpaddq %xmm4, %xmm13, %xmm4
  563. # rnd_0: 10 - 11
  564. xorq %r8, %rcx
  565. addq %rbx, %r15
  566. rorq $28, %rcx
  567. movq %r11, %rax
  568. addq %rcx, %r15
  569. # rnd_1: 0 - 0
  570. rorq $23, %rax
  571. vpaddq %xmm4, %xmm8, %xmm4
  572. # rnd_1: 1 - 1
  573. movq %r15, %rbx
  574. movq %r12, %rcx
  575. addq 72(%rsp), %r14
  576. xorq %r13, %rcx
  577. vpsrlq $19, %xmm3, %xmm8
  578. vpsllq $45, %xmm3, %xmm9
  579. # rnd_1: 2 - 3
  580. xorq %r11, %rax
  581. andq %r11, %rcx
  582. rorq $4, %rax
  583. xorq %r13, %rcx
  584. vpsrlq $61, %xmm3, %xmm10
  585. vpsllq $3, %xmm3, %xmm11
  586. # rnd_1: 4 - 6
  587. xorq %r11, %rax
  588. addq %rcx, %r14
  589. rorq $14, %rax
  590. xorq %r8, %rbx
  591. addq %rax, %r14
  592. movq %r15, %rcx
  593. vpor %xmm9, %xmm8, %xmm8
  594. vpor %xmm11, %xmm10, %xmm10
  595. # rnd_1: 7 - 8
  596. andq %rbx, %rdx
  597. rorq $5, %rcx
  598. xorq %r15, %rcx
  599. xorq %r8, %rdx
  600. vpxor %xmm10, %xmm8, %xmm8
  601. vpsrlq $6, %xmm3, %xmm11
  602. # rnd_1: 9 - 10
  603. rorq $6, %rcx
  604. addq %r14, %r10
  605. xorq %r15, %rcx
  606. addq %rdx, %r14
  607. vpxor %xmm11, %xmm8, %xmm8
  608. # rnd_1: 11 - 11
  609. rorq $28, %rcx
  610. movq %r10, %rax
  611. addq %rcx, %r14
  612. vpaddq %xmm4, %xmm8, %xmm4
  613. # msg_sched done: 8-11
  614. # msg_sched: 10-11
  615. # rnd_0: 0 - 0
  616. rorq $23, %rax
  617. vpalignr $8, %xmm5, %xmm6, %xmm12
  618. vpalignr $8, %xmm1, %xmm2, %xmm13
  619. # rnd_0: 1 - 1
  620. movq %r14, %rdx
  621. movq %r11, %rcx
  622. addq 80(%rsp), %r13
  623. xorq %r12, %rcx
  624. vpsrlq $0x01, %xmm12, %xmm8
  625. vpsllq $63, %xmm12, %xmm9
  626. # rnd_0: 2 - 3
  627. xorq %r10, %rax
  628. andq %r10, %rcx
  629. rorq $4, %rax
  630. xorq %r12, %rcx
  631. vpsrlq $8, %xmm12, %xmm10
  632. vpsllq $56, %xmm12, %xmm11
  633. # rnd_0: 4 - 5
  634. xorq %r10, %rax
  635. addq %rcx, %r13
  636. rorq $14, %rax
  637. xorq %r15, %rdx
  638. vpor %xmm9, %xmm8, %xmm8
  639. vpor %xmm11, %xmm10, %xmm10
  640. # rnd_0: 6 - 7
  641. addq %rax, %r13
  642. movq %r14, %rcx
  643. andq %rdx, %rbx
  644. rorq $5, %rcx
  645. vpsrlq $7, %xmm12, %xmm11
  646. vpxor %xmm10, %xmm8, %xmm8
  647. # rnd_0: 8 - 9
  648. xorq %r14, %rcx
  649. xorq %r15, %rbx
  650. rorq $6, %rcx
  651. addq %r13, %r9
  652. vpxor %xmm11, %xmm8, %xmm8
  653. vpaddq %xmm5, %xmm13, %xmm5
  654. # rnd_0: 10 - 11
  655. xorq %r14, %rcx
  656. addq %rbx, %r13
  657. rorq $28, %rcx
  658. movq %r9, %rax
  659. addq %rcx, %r13
  660. # rnd_1: 0 - 0
  661. rorq $23, %rax
  662. vpaddq %xmm5, %xmm8, %xmm5
  663. # rnd_1: 1 - 1
  664. movq %r13, %rbx
  665. movq %r10, %rcx
  666. addq 88(%rsp), %r12
  667. xorq %r11, %rcx
  668. vpsrlq $19, %xmm4, %xmm8
  669. vpsllq $45, %xmm4, %xmm9
  670. # rnd_1: 2 - 3
  671. xorq %r9, %rax
  672. andq %r9, %rcx
  673. rorq $4, %rax
  674. xorq %r11, %rcx
  675. vpsrlq $61, %xmm4, %xmm10
  676. vpsllq $3, %xmm4, %xmm11
  677. # rnd_1: 4 - 6
  678. xorq %r9, %rax
  679. addq %rcx, %r12
  680. rorq $14, %rax
  681. xorq %r14, %rbx
  682. addq %rax, %r12
  683. movq %r13, %rcx
  684. vpor %xmm9, %xmm8, %xmm8
  685. vpor %xmm11, %xmm10, %xmm10
  686. # rnd_1: 7 - 8
  687. andq %rbx, %rdx
  688. rorq $5, %rcx
  689. xorq %r13, %rcx
  690. xorq %r14, %rdx
  691. vpxor %xmm10, %xmm8, %xmm8
  692. vpsrlq $6, %xmm4, %xmm11
  693. # rnd_1: 9 - 10
  694. rorq $6, %rcx
  695. addq %r12, %r8
  696. xorq %r13, %rcx
  697. addq %rdx, %r12
  698. vpxor %xmm11, %xmm8, %xmm8
  699. # rnd_1: 11 - 11
  700. rorq $28, %rcx
  701. movq %r8, %rax
  702. addq %rcx, %r12
  703. vpaddq %xmm5, %xmm8, %xmm5
  704. # msg_sched done: 10-13
  705. # msg_sched: 12-13
  706. # rnd_0: 0 - 0
  707. rorq $23, %rax
  708. vpalignr $8, %xmm6, %xmm7, %xmm12
  709. vpalignr $8, %xmm2, %xmm3, %xmm13
  710. # rnd_0: 1 - 1
  711. movq %r12, %rdx
  712. movq %r9, %rcx
  713. addq 96(%rsp), %r11
  714. xorq %r10, %rcx
  715. vpsrlq $0x01, %xmm12, %xmm8
  716. vpsllq $63, %xmm12, %xmm9
  717. # rnd_0: 2 - 3
  718. xorq %r8, %rax
  719. andq %r8, %rcx
  720. rorq $4, %rax
  721. xorq %r10, %rcx
  722. vpsrlq $8, %xmm12, %xmm10
  723. vpsllq $56, %xmm12, %xmm11
  724. # rnd_0: 4 - 5
  725. xorq %r8, %rax
  726. addq %rcx, %r11
  727. rorq $14, %rax
  728. xorq %r13, %rdx
  729. vpor %xmm9, %xmm8, %xmm8
  730. vpor %xmm11, %xmm10, %xmm10
  731. # rnd_0: 6 - 7
  732. addq %rax, %r11
  733. movq %r12, %rcx
  734. andq %rdx, %rbx
  735. rorq $5, %rcx
  736. vpsrlq $7, %xmm12, %xmm11
  737. vpxor %xmm10, %xmm8, %xmm8
  738. # rnd_0: 8 - 9
  739. xorq %r12, %rcx
  740. xorq %r13, %rbx
  741. rorq $6, %rcx
  742. addq %r11, %r15
  743. vpxor %xmm11, %xmm8, %xmm8
  744. vpaddq %xmm6, %xmm13, %xmm6
  745. # rnd_0: 10 - 11
  746. xorq %r12, %rcx
  747. addq %rbx, %r11
  748. rorq $28, %rcx
  749. movq %r15, %rax
  750. addq %rcx, %r11
  751. # rnd_1: 0 - 0
  752. rorq $23, %rax
  753. vpaddq %xmm6, %xmm8, %xmm6
  754. # rnd_1: 1 - 1
  755. movq %r11, %rbx
  756. movq %r8, %rcx
  757. addq 104(%rsp), %r10
  758. xorq %r9, %rcx
  759. vpsrlq $19, %xmm5, %xmm8
  760. vpsllq $45, %xmm5, %xmm9
  761. # rnd_1: 2 - 3
  762. xorq %r15, %rax
  763. andq %r15, %rcx
  764. rorq $4, %rax
  765. xorq %r9, %rcx
  766. vpsrlq $61, %xmm5, %xmm10
  767. vpsllq $3, %xmm5, %xmm11
  768. # rnd_1: 4 - 6
  769. xorq %r15, %rax
  770. addq %rcx, %r10
  771. rorq $14, %rax
  772. xorq %r12, %rbx
  773. addq %rax, %r10
  774. movq %r11, %rcx
  775. vpor %xmm9, %xmm8, %xmm8
  776. vpor %xmm11, %xmm10, %xmm10
  777. # rnd_1: 7 - 8
  778. andq %rbx, %rdx
  779. rorq $5, %rcx
  780. xorq %r11, %rcx
  781. xorq %r12, %rdx
  782. vpxor %xmm10, %xmm8, %xmm8
  783. vpsrlq $6, %xmm5, %xmm11
  784. # rnd_1: 9 - 10
  785. rorq $6, %rcx
  786. addq %r10, %r14
  787. xorq %r11, %rcx
  788. addq %rdx, %r10
  789. vpxor %xmm11, %xmm8, %xmm8
  790. # rnd_1: 11 - 11
  791. rorq $28, %rcx
  792. movq %r14, %rax
  793. addq %rcx, %r10
  794. vpaddq %xmm6, %xmm8, %xmm6
  795. # msg_sched done: 12-15
  796. # msg_sched: 14-15
  797. # rnd_0: 0 - 0
  798. rorq $23, %rax
  799. vpalignr $8, %xmm7, %xmm0, %xmm12
  800. vpalignr $8, %xmm3, %xmm4, %xmm13
  801. # rnd_0: 1 - 1
  802. movq %r10, %rdx
  803. movq %r15, %rcx
  804. addq 112(%rsp), %r9
  805. xorq %r8, %rcx
  806. vpsrlq $0x01, %xmm12, %xmm8
  807. vpsllq $63, %xmm12, %xmm9
  808. # rnd_0: 2 - 3
  809. xorq %r14, %rax
  810. andq %r14, %rcx
  811. rorq $4, %rax
  812. xorq %r8, %rcx
  813. vpsrlq $8, %xmm12, %xmm10
  814. vpsllq $56, %xmm12, %xmm11
  815. # rnd_0: 4 - 5
  816. xorq %r14, %rax
  817. addq %rcx, %r9
  818. rorq $14, %rax
  819. xorq %r11, %rdx
  820. vpor %xmm9, %xmm8, %xmm8
  821. vpor %xmm11, %xmm10, %xmm10
  822. # rnd_0: 6 - 7
  823. addq %rax, %r9
  824. movq %r10, %rcx
  825. andq %rdx, %rbx
  826. rorq $5, %rcx
  827. vpsrlq $7, %xmm12, %xmm11
  828. vpxor %xmm10, %xmm8, %xmm8
  829. # rnd_0: 8 - 9
  830. xorq %r10, %rcx
  831. xorq %r11, %rbx
  832. rorq $6, %rcx
  833. addq %r9, %r13
  834. vpxor %xmm11, %xmm8, %xmm8
  835. vpaddq %xmm7, %xmm13, %xmm7
  836. # rnd_0: 10 - 11
  837. xorq %r10, %rcx
  838. addq %rbx, %r9
  839. rorq $28, %rcx
  840. movq %r13, %rax
  841. addq %rcx, %r9
  842. # rnd_1: 0 - 0
  843. rorq $23, %rax
  844. vpaddq %xmm7, %xmm8, %xmm7
  845. # rnd_1: 1 - 1
  846. movq %r9, %rbx
  847. movq %r14, %rcx
  848. addq 120(%rsp), %r8
  849. xorq %r15, %rcx
  850. vpsrlq $19, %xmm6, %xmm8
  851. vpsllq $45, %xmm6, %xmm9
  852. # rnd_1: 2 - 3
  853. xorq %r13, %rax
  854. andq %r13, %rcx
  855. rorq $4, %rax
  856. xorq %r15, %rcx
  857. vpsrlq $61, %xmm6, %xmm10
  858. vpsllq $3, %xmm6, %xmm11
  859. # rnd_1: 4 - 6
  860. xorq %r13, %rax
  861. addq %rcx, %r8
  862. rorq $14, %rax
  863. xorq %r10, %rbx
  864. addq %rax, %r8
  865. movq %r9, %rcx
  866. vpor %xmm9, %xmm8, %xmm8
  867. vpor %xmm11, %xmm10, %xmm10
  868. # rnd_1: 7 - 8
  869. andq %rbx, %rdx
  870. rorq $5, %rcx
  871. xorq %r9, %rcx
  872. xorq %r10, %rdx
  873. vpxor %xmm10, %xmm8, %xmm8
  874. vpsrlq $6, %xmm6, %xmm11
  875. # rnd_1: 9 - 10
  876. rorq $6, %rcx
  877. addq %r8, %r12
  878. xorq %r9, %rcx
  879. addq %rdx, %r8
  880. vpxor %xmm11, %xmm8, %xmm8
  881. # rnd_1: 11 - 11
  882. rorq $28, %rcx
  883. movq %r12, %rax
  884. addq %rcx, %r8
  885. vpaddq %xmm7, %xmm8, %xmm7
  886. # msg_sched done: 14-17
  887. subl $0x01, 128(%rsp)
  888. jne L_sha256_len_avx1_start
  889. vpaddq (%rsi), %xmm0, %xmm8
  890. vpaddq 16(%rsi), %xmm1, %xmm9
  891. vmovdqu %xmm8, (%rsp)
  892. vmovdqu %xmm9, 16(%rsp)
  893. vpaddq 32(%rsi), %xmm2, %xmm8
  894. vpaddq 48(%rsi), %xmm3, %xmm9
  895. vmovdqu %xmm8, 32(%rsp)
  896. vmovdqu %xmm9, 48(%rsp)
  897. vpaddq 64(%rsi), %xmm4, %xmm8
  898. vpaddq 80(%rsi), %xmm5, %xmm9
  899. vmovdqu %xmm8, 64(%rsp)
  900. vmovdqu %xmm9, 80(%rsp)
  901. vpaddq 96(%rsi), %xmm6, %xmm8
  902. vpaddq 112(%rsi), %xmm7, %xmm9
  903. vmovdqu %xmm8, 96(%rsp)
  904. vmovdqu %xmm9, 112(%rsp)
  905. # rnd_all_2: 0-1
  906. # rnd_0: 0 - 11
  907. rorq $23, %rax
  908. movq %r8, %rdx
  909. movq %r13, %rcx
  910. addq (%rsp), %r15
  911. xorq %r14, %rcx
  912. xorq %r12, %rax
  913. andq %r12, %rcx
  914. rorq $4, %rax
  915. xorq %r14, %rcx
  916. xorq %r12, %rax
  917. addq %rcx, %r15
  918. rorq $14, %rax
  919. xorq %r9, %rdx
  920. addq %rax, %r15
  921. movq %r8, %rcx
  922. andq %rdx, %rbx
  923. rorq $5, %rcx
  924. xorq %r8, %rcx
  925. xorq %r9, %rbx
  926. rorq $6, %rcx
  927. addq %r15, %r11
  928. xorq %r8, %rcx
  929. addq %rbx, %r15
  930. rorq $28, %rcx
  931. movq %r11, %rax
  932. addq %rcx, %r15
  933. # rnd_1: 0 - 11
  934. rorq $23, %rax
  935. movq %r15, %rbx
  936. movq %r12, %rcx
  937. addq 8(%rsp), %r14
  938. xorq %r13, %rcx
  939. xorq %r11, %rax
  940. andq %r11, %rcx
  941. rorq $4, %rax
  942. xorq %r13, %rcx
  943. xorq %r11, %rax
  944. addq %rcx, %r14
  945. rorq $14, %rax
  946. xorq %r8, %rbx
  947. addq %rax, %r14
  948. movq %r15, %rcx
  949. andq %rbx, %rdx
  950. rorq $5, %rcx
  951. xorq %r15, %rcx
  952. xorq %r8, %rdx
  953. rorq $6, %rcx
  954. addq %r14, %r10
  955. xorq %r15, %rcx
  956. addq %rdx, %r14
  957. rorq $28, %rcx
  958. movq %r10, %rax
  959. addq %rcx, %r14
  960. # rnd_all_2: 2-3
  961. # rnd_0: 0 - 11
  962. rorq $23, %rax
  963. movq %r14, %rdx
  964. movq %r11, %rcx
  965. addq 16(%rsp), %r13
  966. xorq %r12, %rcx
  967. xorq %r10, %rax
  968. andq %r10, %rcx
  969. rorq $4, %rax
  970. xorq %r12, %rcx
  971. xorq %r10, %rax
  972. addq %rcx, %r13
  973. rorq $14, %rax
  974. xorq %r15, %rdx
  975. addq %rax, %r13
  976. movq %r14, %rcx
  977. andq %rdx, %rbx
  978. rorq $5, %rcx
  979. xorq %r14, %rcx
  980. xorq %r15, %rbx
  981. rorq $6, %rcx
  982. addq %r13, %r9
  983. xorq %r14, %rcx
  984. addq %rbx, %r13
  985. rorq $28, %rcx
  986. movq %r9, %rax
  987. addq %rcx, %r13
  988. # rnd_1: 0 - 11
  989. rorq $23, %rax
  990. movq %r13, %rbx
  991. movq %r10, %rcx
  992. addq 24(%rsp), %r12
  993. xorq %r11, %rcx
  994. xorq %r9, %rax
  995. andq %r9, %rcx
  996. rorq $4, %rax
  997. xorq %r11, %rcx
  998. xorq %r9, %rax
  999. addq %rcx, %r12
  1000. rorq $14, %rax
  1001. xorq %r14, %rbx
  1002. addq %rax, %r12
  1003. movq %r13, %rcx
  1004. andq %rbx, %rdx
  1005. rorq $5, %rcx
  1006. xorq %r13, %rcx
  1007. xorq %r14, %rdx
  1008. rorq $6, %rcx
  1009. addq %r12, %r8
  1010. xorq %r13, %rcx
  1011. addq %rdx, %r12
  1012. rorq $28, %rcx
  1013. movq %r8, %rax
  1014. addq %rcx, %r12
  1015. # rnd_all_2: 4-5
  1016. # rnd_0: 0 - 11
  1017. rorq $23, %rax
  1018. movq %r12, %rdx
  1019. movq %r9, %rcx
  1020. addq 32(%rsp), %r11
  1021. xorq %r10, %rcx
  1022. xorq %r8, %rax
  1023. andq %r8, %rcx
  1024. rorq $4, %rax
  1025. xorq %r10, %rcx
  1026. xorq %r8, %rax
  1027. addq %rcx, %r11
  1028. rorq $14, %rax
  1029. xorq %r13, %rdx
  1030. addq %rax, %r11
  1031. movq %r12, %rcx
  1032. andq %rdx, %rbx
  1033. rorq $5, %rcx
  1034. xorq %r12, %rcx
  1035. xorq %r13, %rbx
  1036. rorq $6, %rcx
  1037. addq %r11, %r15
  1038. xorq %r12, %rcx
  1039. addq %rbx, %r11
  1040. rorq $28, %rcx
  1041. movq %r15, %rax
  1042. addq %rcx, %r11
  1043. # rnd_1: 0 - 11
  1044. rorq $23, %rax
  1045. movq %r11, %rbx
  1046. movq %r8, %rcx
  1047. addq 40(%rsp), %r10
  1048. xorq %r9, %rcx
  1049. xorq %r15, %rax
  1050. andq %r15, %rcx
  1051. rorq $4, %rax
  1052. xorq %r9, %rcx
  1053. xorq %r15, %rax
  1054. addq %rcx, %r10
  1055. rorq $14, %rax
  1056. xorq %r12, %rbx
  1057. addq %rax, %r10
  1058. movq %r11, %rcx
  1059. andq %rbx, %rdx
  1060. rorq $5, %rcx
  1061. xorq %r11, %rcx
  1062. xorq %r12, %rdx
  1063. rorq $6, %rcx
  1064. addq %r10, %r14
  1065. xorq %r11, %rcx
  1066. addq %rdx, %r10
  1067. rorq $28, %rcx
  1068. movq %r14, %rax
  1069. addq %rcx, %r10
  1070. # rnd_all_2: 6-7
  1071. # rnd_0: 0 - 11
  1072. rorq $23, %rax
  1073. movq %r10, %rdx
  1074. movq %r15, %rcx
  1075. addq 48(%rsp), %r9
  1076. xorq %r8, %rcx
  1077. xorq %r14, %rax
  1078. andq %r14, %rcx
  1079. rorq $4, %rax
  1080. xorq %r8, %rcx
  1081. xorq %r14, %rax
  1082. addq %rcx, %r9
  1083. rorq $14, %rax
  1084. xorq %r11, %rdx
  1085. addq %rax, %r9
  1086. movq %r10, %rcx
  1087. andq %rdx, %rbx
  1088. rorq $5, %rcx
  1089. xorq %r10, %rcx
  1090. xorq %r11, %rbx
  1091. rorq $6, %rcx
  1092. addq %r9, %r13
  1093. xorq %r10, %rcx
  1094. addq %rbx, %r9
  1095. rorq $28, %rcx
  1096. movq %r13, %rax
  1097. addq %rcx, %r9
  1098. # rnd_1: 0 - 11
  1099. rorq $23, %rax
  1100. movq %r9, %rbx
  1101. movq %r14, %rcx
  1102. addq 56(%rsp), %r8
  1103. xorq %r15, %rcx
  1104. xorq %r13, %rax
  1105. andq %r13, %rcx
  1106. rorq $4, %rax
  1107. xorq %r15, %rcx
  1108. xorq %r13, %rax
  1109. addq %rcx, %r8
  1110. rorq $14, %rax
  1111. xorq %r10, %rbx
  1112. addq %rax, %r8
  1113. movq %r9, %rcx
  1114. andq %rbx, %rdx
  1115. rorq $5, %rcx
  1116. xorq %r9, %rcx
  1117. xorq %r10, %rdx
  1118. rorq $6, %rcx
  1119. addq %r8, %r12
  1120. xorq %r9, %rcx
  1121. addq %rdx, %r8
  1122. rorq $28, %rcx
  1123. movq %r12, %rax
  1124. addq %rcx, %r8
  1125. # rnd_all_2: 8-9
  1126. # rnd_0: 0 - 11
  1127. rorq $23, %rax
  1128. movq %r8, %rdx
  1129. movq %r13, %rcx
  1130. addq 64(%rsp), %r15
  1131. xorq %r14, %rcx
  1132. xorq %r12, %rax
  1133. andq %r12, %rcx
  1134. rorq $4, %rax
  1135. xorq %r14, %rcx
  1136. xorq %r12, %rax
  1137. addq %rcx, %r15
  1138. rorq $14, %rax
  1139. xorq %r9, %rdx
  1140. addq %rax, %r15
  1141. movq %r8, %rcx
  1142. andq %rdx, %rbx
  1143. rorq $5, %rcx
  1144. xorq %r8, %rcx
  1145. xorq %r9, %rbx
  1146. rorq $6, %rcx
  1147. addq %r15, %r11
  1148. xorq %r8, %rcx
  1149. addq %rbx, %r15
  1150. rorq $28, %rcx
  1151. movq %r11, %rax
  1152. addq %rcx, %r15
  1153. # rnd_1: 0 - 11
  1154. rorq $23, %rax
  1155. movq %r15, %rbx
  1156. movq %r12, %rcx
  1157. addq 72(%rsp), %r14
  1158. xorq %r13, %rcx
  1159. xorq %r11, %rax
  1160. andq %r11, %rcx
  1161. rorq $4, %rax
  1162. xorq %r13, %rcx
  1163. xorq %r11, %rax
  1164. addq %rcx, %r14
  1165. rorq $14, %rax
  1166. xorq %r8, %rbx
  1167. addq %rax, %r14
  1168. movq %r15, %rcx
  1169. andq %rbx, %rdx
  1170. rorq $5, %rcx
  1171. xorq %r15, %rcx
  1172. xorq %r8, %rdx
  1173. rorq $6, %rcx
  1174. addq %r14, %r10
  1175. xorq %r15, %rcx
  1176. addq %rdx, %r14
  1177. rorq $28, %rcx
  1178. movq %r10, %rax
  1179. addq %rcx, %r14
  1180. # rnd_all_2: 10-11
  1181. # rnd_0: 0 - 11
  1182. rorq $23, %rax
  1183. movq %r14, %rdx
  1184. movq %r11, %rcx
  1185. addq 80(%rsp), %r13
  1186. xorq %r12, %rcx
  1187. xorq %r10, %rax
  1188. andq %r10, %rcx
  1189. rorq $4, %rax
  1190. xorq %r12, %rcx
  1191. xorq %r10, %rax
  1192. addq %rcx, %r13
  1193. rorq $14, %rax
  1194. xorq %r15, %rdx
  1195. addq %rax, %r13
  1196. movq %r14, %rcx
  1197. andq %rdx, %rbx
  1198. rorq $5, %rcx
  1199. xorq %r14, %rcx
  1200. xorq %r15, %rbx
  1201. rorq $6, %rcx
  1202. addq %r13, %r9
  1203. xorq %r14, %rcx
  1204. addq %rbx, %r13
  1205. rorq $28, %rcx
  1206. movq %r9, %rax
  1207. addq %rcx, %r13
  1208. # rnd_1: 0 - 11
  1209. rorq $23, %rax
  1210. movq %r13, %rbx
  1211. movq %r10, %rcx
  1212. addq 88(%rsp), %r12
  1213. xorq %r11, %rcx
  1214. xorq %r9, %rax
  1215. andq %r9, %rcx
  1216. rorq $4, %rax
  1217. xorq %r11, %rcx
  1218. xorq %r9, %rax
  1219. addq %rcx, %r12
  1220. rorq $14, %rax
  1221. xorq %r14, %rbx
  1222. addq %rax, %r12
  1223. movq %r13, %rcx
  1224. andq %rbx, %rdx
  1225. rorq $5, %rcx
  1226. xorq %r13, %rcx
  1227. xorq %r14, %rdx
  1228. rorq $6, %rcx
  1229. addq %r12, %r8
  1230. xorq %r13, %rcx
  1231. addq %rdx, %r12
  1232. rorq $28, %rcx
  1233. movq %r8, %rax
  1234. addq %rcx, %r12
  1235. # rnd_all_2: 12-13
  1236. # rnd_0: 0 - 11
  1237. rorq $23, %rax
  1238. movq %r12, %rdx
  1239. movq %r9, %rcx
  1240. addq 96(%rsp), %r11
  1241. xorq %r10, %rcx
  1242. xorq %r8, %rax
  1243. andq %r8, %rcx
  1244. rorq $4, %rax
  1245. xorq %r10, %rcx
  1246. xorq %r8, %rax
  1247. addq %rcx, %r11
  1248. rorq $14, %rax
  1249. xorq %r13, %rdx
  1250. addq %rax, %r11
  1251. movq %r12, %rcx
  1252. andq %rdx, %rbx
  1253. rorq $5, %rcx
  1254. xorq %r12, %rcx
  1255. xorq %r13, %rbx
  1256. rorq $6, %rcx
  1257. addq %r11, %r15
  1258. xorq %r12, %rcx
  1259. addq %rbx, %r11
  1260. rorq $28, %rcx
  1261. movq %r15, %rax
  1262. addq %rcx, %r11
  1263. # rnd_1: 0 - 11
  1264. rorq $23, %rax
  1265. movq %r11, %rbx
  1266. movq %r8, %rcx
  1267. addq 104(%rsp), %r10
  1268. xorq %r9, %rcx
  1269. xorq %r15, %rax
  1270. andq %r15, %rcx
  1271. rorq $4, %rax
  1272. xorq %r9, %rcx
  1273. xorq %r15, %rax
  1274. addq %rcx, %r10
  1275. rorq $14, %rax
  1276. xorq %r12, %rbx
  1277. addq %rax, %r10
  1278. movq %r11, %rcx
  1279. andq %rbx, %rdx
  1280. rorq $5, %rcx
  1281. xorq %r11, %rcx
  1282. xorq %r12, %rdx
  1283. rorq $6, %rcx
  1284. addq %r10, %r14
  1285. xorq %r11, %rcx
  1286. addq %rdx, %r10
  1287. rorq $28, %rcx
  1288. movq %r14, %rax
  1289. addq %rcx, %r10
  1290. # rnd_all_2: 14-15
  1291. # rnd_0: 0 - 11
  1292. rorq $23, %rax
  1293. movq %r10, %rdx
  1294. movq %r15, %rcx
  1295. addq 112(%rsp), %r9
  1296. xorq %r8, %rcx
  1297. xorq %r14, %rax
  1298. andq %r14, %rcx
  1299. rorq $4, %rax
  1300. xorq %r8, %rcx
  1301. xorq %r14, %rax
  1302. addq %rcx, %r9
  1303. rorq $14, %rax
  1304. xorq %r11, %rdx
  1305. addq %rax, %r9
  1306. movq %r10, %rcx
  1307. andq %rdx, %rbx
  1308. rorq $5, %rcx
  1309. xorq %r10, %rcx
  1310. xorq %r11, %rbx
  1311. rorq $6, %rcx
  1312. addq %r9, %r13
  1313. xorq %r10, %rcx
  1314. addq %rbx, %r9
  1315. rorq $28, %rcx
  1316. movq %r13, %rax
  1317. addq %rcx, %r9
  1318. # rnd_1: 0 - 11
  1319. rorq $23, %rax
  1320. movq %r9, %rbx
  1321. movq %r14, %rcx
  1322. addq 120(%rsp), %r8
  1323. xorq %r15, %rcx
  1324. xorq %r13, %rax
  1325. andq %r13, %rcx
  1326. rorq $4, %rax
  1327. xorq %r15, %rcx
  1328. xorq %r13, %rax
  1329. addq %rcx, %r8
  1330. rorq $14, %rax
  1331. xorq %r10, %rbx
  1332. addq %rax, %r8
  1333. movq %r9, %rcx
  1334. andq %rbx, %rdx
  1335. rorq $5, %rcx
  1336. xorq %r9, %rcx
  1337. xorq %r10, %rdx
  1338. rorq $6, %rcx
  1339. addq %r8, %r12
  1340. xorq %r9, %rcx
  1341. addq %rdx, %r8
  1342. rorq $28, %rcx
  1343. movq %r12, %rax
  1344. addq %rcx, %r8
  1345. addq %r8, (%rdi)
  1346. addq %r9, 8(%rdi)
  1347. addq %r10, 16(%rdi)
  1348. addq %r11, 24(%rdi)
  1349. addq %r12, 32(%rdi)
  1350. addq %r13, 40(%rdi)
  1351. addq %r14, 48(%rdi)
  1352. addq %r15, 56(%rdi)
  1353. xorq %rax, %rax
  1354. vzeroupper
  1355. addq $0x88, %rsp
  1356. popq %r15
  1357. popq %r14
  1358. popq %r13
  1359. popq %r12
  1360. popq %rbx
  1361. repz retq
  1362. #ifndef __APPLE__
  1363. .size Transform_Sha512_AVX1,.-Transform_Sha512_AVX1
  1364. #endif /* __APPLE__ */
  1365. #ifndef __APPLE__
  1366. .text
  1367. .globl Transform_Sha512_AVX1_Len
  1368. .type Transform_Sha512_AVX1_Len,@function
  1369. .align 16
  1370. Transform_Sha512_AVX1_Len:
  1371. #else
  1372. .section __TEXT,__text
  1373. .globl _Transform_Sha512_AVX1_Len
  1374. .p2align 4
  1375. _Transform_Sha512_AVX1_Len:
  1376. #endif /* __APPLE__ */
  1377. pushq %rbx
  1378. pushq %r12
  1379. pushq %r13
  1380. pushq %r14
  1381. pushq %r15
  1382. pushq %rbp
  1383. movq %rsi, %rbp
  1384. subq $0x90, %rsp
  1385. movq 224(%rdi), %rsi
  1386. leaq L_avx1_sha512_k(%rip), %rdx
  1387. vmovdqa L_avx1_sha512_flip_mask(%rip), %xmm14
  1388. movq (%rdi), %r8
  1389. movq 8(%rdi), %r9
  1390. movq 16(%rdi), %r10
  1391. movq 24(%rdi), %r11
  1392. movq 32(%rdi), %r12
  1393. movq 40(%rdi), %r13
  1394. movq 48(%rdi), %r14
  1395. movq 56(%rdi), %r15
  1396. # Start of loop processing a block
  1397. L_sha512_len_avx1_begin:
  1398. vmovdqu (%rsi), %xmm0
  1399. vmovdqu 16(%rsi), %xmm1
  1400. vpshufb %xmm14, %xmm0, %xmm0
  1401. vpshufb %xmm14, %xmm1, %xmm1
  1402. vmovdqu 32(%rsi), %xmm2
  1403. vmovdqu 48(%rsi), %xmm3
  1404. vpshufb %xmm14, %xmm2, %xmm2
  1405. vpshufb %xmm14, %xmm3, %xmm3
  1406. vmovdqu 64(%rsi), %xmm4
  1407. vmovdqu 80(%rsi), %xmm5
  1408. vpshufb %xmm14, %xmm4, %xmm4
  1409. vpshufb %xmm14, %xmm5, %xmm5
  1410. vmovdqu 96(%rsi), %xmm6
  1411. vmovdqu 112(%rsi), %xmm7
  1412. vpshufb %xmm14, %xmm6, %xmm6
  1413. vpshufb %xmm14, %xmm7, %xmm7
  1414. movl $4, 128(%rsp)
  1415. movq %r9, %rbx
  1416. movq %r12, %rax
  1417. xorq %r10, %rbx
  1418. vpaddq (%rdx), %xmm0, %xmm8
  1419. vpaddq 16(%rdx), %xmm1, %xmm9
  1420. vmovdqu %xmm8, (%rsp)
  1421. vmovdqu %xmm9, 16(%rsp)
  1422. vpaddq 32(%rdx), %xmm2, %xmm8
  1423. vpaddq 48(%rdx), %xmm3, %xmm9
  1424. vmovdqu %xmm8, 32(%rsp)
  1425. vmovdqu %xmm9, 48(%rsp)
  1426. vpaddq 64(%rdx), %xmm4, %xmm8
  1427. vpaddq 80(%rdx), %xmm5, %xmm9
  1428. vmovdqu %xmm8, 64(%rsp)
  1429. vmovdqu %xmm9, 80(%rsp)
  1430. vpaddq 96(%rdx), %xmm6, %xmm8
  1431. vpaddq 112(%rdx), %xmm7, %xmm9
  1432. vmovdqu %xmm8, 96(%rsp)
  1433. vmovdqu %xmm9, 112(%rsp)
  1434. # Start of 16 rounds
  1435. L_sha512_len_avx1_start:
  1436. addq $0x80, %rdx
  1437. movq %rdx, 136(%rsp)
  1438. # msg_sched: 0-1
  1439. # rnd_0: 0 - 0
  1440. rorq $23, %rax
  1441. vpalignr $8, %xmm0, %xmm1, %xmm12
  1442. vpalignr $8, %xmm4, %xmm5, %xmm13
  1443. # rnd_0: 1 - 1
  1444. movq %r8, %rdx
  1445. movq %r13, %rcx
  1446. addq (%rsp), %r15
  1447. xorq %r14, %rcx
  1448. vpsrlq $0x01, %xmm12, %xmm8
  1449. vpsllq $63, %xmm12, %xmm9
  1450. # rnd_0: 2 - 3
  1451. xorq %r12, %rax
  1452. andq %r12, %rcx
  1453. rorq $4, %rax
  1454. xorq %r14, %rcx
  1455. vpsrlq $8, %xmm12, %xmm10
  1456. vpsllq $56, %xmm12, %xmm11
  1457. # rnd_0: 4 - 5
  1458. xorq %r12, %rax
  1459. addq %rcx, %r15
  1460. rorq $14, %rax
  1461. xorq %r9, %rdx
  1462. vpor %xmm9, %xmm8, %xmm8
  1463. vpor %xmm11, %xmm10, %xmm10
  1464. # rnd_0: 6 - 7
  1465. addq %rax, %r15
  1466. movq %r8, %rcx
  1467. andq %rdx, %rbx
  1468. rorq $5, %rcx
  1469. vpsrlq $7, %xmm12, %xmm11
  1470. vpxor %xmm10, %xmm8, %xmm8
  1471. # rnd_0: 8 - 9
  1472. xorq %r8, %rcx
  1473. xorq %r9, %rbx
  1474. rorq $6, %rcx
  1475. addq %r15, %r11
  1476. vpxor %xmm11, %xmm8, %xmm8
  1477. vpaddq %xmm0, %xmm13, %xmm0
  1478. # rnd_0: 10 - 11
  1479. xorq %r8, %rcx
  1480. addq %rbx, %r15
  1481. rorq $28, %rcx
  1482. movq %r11, %rax
  1483. addq %rcx, %r15
  1484. # rnd_1: 0 - 0
  1485. rorq $23, %rax
  1486. vpaddq %xmm0, %xmm8, %xmm0
  1487. # rnd_1: 1 - 1
  1488. movq %r15, %rbx
  1489. movq %r12, %rcx
  1490. addq 8(%rsp), %r14
  1491. xorq %r13, %rcx
  1492. vpsrlq $19, %xmm7, %xmm8
  1493. vpsllq $45, %xmm7, %xmm9
  1494. # rnd_1: 2 - 3
  1495. xorq %r11, %rax
  1496. andq %r11, %rcx
  1497. rorq $4, %rax
  1498. xorq %r13, %rcx
  1499. vpsrlq $61, %xmm7, %xmm10
  1500. vpsllq $3, %xmm7, %xmm11
  1501. # rnd_1: 4 - 6
  1502. xorq %r11, %rax
  1503. addq %rcx, %r14
  1504. rorq $14, %rax
  1505. xorq %r8, %rbx
  1506. addq %rax, %r14
  1507. movq %r15, %rcx
  1508. vpor %xmm9, %xmm8, %xmm8
  1509. vpor %xmm11, %xmm10, %xmm10
  1510. # rnd_1: 7 - 8
  1511. andq %rbx, %rdx
  1512. rorq $5, %rcx
  1513. xorq %r15, %rcx
  1514. xorq %r8, %rdx
  1515. vpxor %xmm10, %xmm8, %xmm8
  1516. vpsrlq $6, %xmm7, %xmm11
  1517. # rnd_1: 9 - 10
  1518. rorq $6, %rcx
  1519. addq %r14, %r10
  1520. xorq %r15, %rcx
  1521. addq %rdx, %r14
  1522. vpxor %xmm11, %xmm8, %xmm8
  1523. # rnd_1: 11 - 11
  1524. rorq $28, %rcx
  1525. movq %r10, %rax
  1526. addq %rcx, %r14
  1527. vpaddq %xmm0, %xmm8, %xmm0
  1528. # msg_sched done: 0-3
  1529. # msg_sched: 2-3
  1530. # rnd_0: 0 - 0
  1531. rorq $23, %rax
  1532. vpalignr $8, %xmm1, %xmm2, %xmm12
  1533. vpalignr $8, %xmm5, %xmm6, %xmm13
  1534. # rnd_0: 1 - 1
  1535. movq %r14, %rdx
  1536. movq %r11, %rcx
  1537. addq 16(%rsp), %r13
  1538. xorq %r12, %rcx
  1539. vpsrlq $0x01, %xmm12, %xmm8
  1540. vpsllq $63, %xmm12, %xmm9
  1541. # rnd_0: 2 - 3
  1542. xorq %r10, %rax
  1543. andq %r10, %rcx
  1544. rorq $4, %rax
  1545. xorq %r12, %rcx
  1546. vpsrlq $8, %xmm12, %xmm10
  1547. vpsllq $56, %xmm12, %xmm11
  1548. # rnd_0: 4 - 5
  1549. xorq %r10, %rax
  1550. addq %rcx, %r13
  1551. rorq $14, %rax
  1552. xorq %r15, %rdx
  1553. vpor %xmm9, %xmm8, %xmm8
  1554. vpor %xmm11, %xmm10, %xmm10
  1555. # rnd_0: 6 - 7
  1556. addq %rax, %r13
  1557. movq %r14, %rcx
  1558. andq %rdx, %rbx
  1559. rorq $5, %rcx
  1560. vpsrlq $7, %xmm12, %xmm11
  1561. vpxor %xmm10, %xmm8, %xmm8
  1562. # rnd_0: 8 - 9
  1563. xorq %r14, %rcx
  1564. xorq %r15, %rbx
  1565. rorq $6, %rcx
  1566. addq %r13, %r9
  1567. vpxor %xmm11, %xmm8, %xmm8
  1568. vpaddq %xmm1, %xmm13, %xmm1
  1569. # rnd_0: 10 - 11
  1570. xorq %r14, %rcx
  1571. addq %rbx, %r13
  1572. rorq $28, %rcx
  1573. movq %r9, %rax
  1574. addq %rcx, %r13
  1575. # rnd_1: 0 - 0
  1576. rorq $23, %rax
  1577. vpaddq %xmm1, %xmm8, %xmm1
  1578. # rnd_1: 1 - 1
  1579. movq %r13, %rbx
  1580. movq %r10, %rcx
  1581. addq 24(%rsp), %r12
  1582. xorq %r11, %rcx
  1583. vpsrlq $19, %xmm0, %xmm8
  1584. vpsllq $45, %xmm0, %xmm9
  1585. # rnd_1: 2 - 3
  1586. xorq %r9, %rax
  1587. andq %r9, %rcx
  1588. rorq $4, %rax
  1589. xorq %r11, %rcx
  1590. vpsrlq $61, %xmm0, %xmm10
  1591. vpsllq $3, %xmm0, %xmm11
  1592. # rnd_1: 4 - 6
  1593. xorq %r9, %rax
  1594. addq %rcx, %r12
  1595. rorq $14, %rax
  1596. xorq %r14, %rbx
  1597. addq %rax, %r12
  1598. movq %r13, %rcx
  1599. vpor %xmm9, %xmm8, %xmm8
  1600. vpor %xmm11, %xmm10, %xmm10
  1601. # rnd_1: 7 - 8
  1602. andq %rbx, %rdx
  1603. rorq $5, %rcx
  1604. xorq %r13, %rcx
  1605. xorq %r14, %rdx
  1606. vpxor %xmm10, %xmm8, %xmm8
  1607. vpsrlq $6, %xmm0, %xmm11
  1608. # rnd_1: 9 - 10
  1609. rorq $6, %rcx
  1610. addq %r12, %r8
  1611. xorq %r13, %rcx
  1612. addq %rdx, %r12
  1613. vpxor %xmm11, %xmm8, %xmm8
  1614. # rnd_1: 11 - 11
  1615. rorq $28, %rcx
  1616. movq %r8, %rax
  1617. addq %rcx, %r12
  1618. vpaddq %xmm1, %xmm8, %xmm1
  1619. # msg_sched done: 2-5
  1620. # msg_sched: 4-5
  1621. # rnd_0: 0 - 0
  1622. rorq $23, %rax
  1623. vpalignr $8, %xmm2, %xmm3, %xmm12
  1624. vpalignr $8, %xmm6, %xmm7, %xmm13
  1625. # rnd_0: 1 - 1
  1626. movq %r12, %rdx
  1627. movq %r9, %rcx
  1628. addq 32(%rsp), %r11
  1629. xorq %r10, %rcx
  1630. vpsrlq $0x01, %xmm12, %xmm8
  1631. vpsllq $63, %xmm12, %xmm9
  1632. # rnd_0: 2 - 3
  1633. xorq %r8, %rax
  1634. andq %r8, %rcx
  1635. rorq $4, %rax
  1636. xorq %r10, %rcx
  1637. vpsrlq $8, %xmm12, %xmm10
  1638. vpsllq $56, %xmm12, %xmm11
  1639. # rnd_0: 4 - 5
  1640. xorq %r8, %rax
  1641. addq %rcx, %r11
  1642. rorq $14, %rax
  1643. xorq %r13, %rdx
  1644. vpor %xmm9, %xmm8, %xmm8
  1645. vpor %xmm11, %xmm10, %xmm10
  1646. # rnd_0: 6 - 7
  1647. addq %rax, %r11
  1648. movq %r12, %rcx
  1649. andq %rdx, %rbx
  1650. rorq $5, %rcx
  1651. vpsrlq $7, %xmm12, %xmm11
  1652. vpxor %xmm10, %xmm8, %xmm8
  1653. # rnd_0: 8 - 9
  1654. xorq %r12, %rcx
  1655. xorq %r13, %rbx
  1656. rorq $6, %rcx
  1657. addq %r11, %r15
  1658. vpxor %xmm11, %xmm8, %xmm8
  1659. vpaddq %xmm2, %xmm13, %xmm2
  1660. # rnd_0: 10 - 11
  1661. xorq %r12, %rcx
  1662. addq %rbx, %r11
  1663. rorq $28, %rcx
  1664. movq %r15, %rax
  1665. addq %rcx, %r11
  1666. # rnd_1: 0 - 0
  1667. rorq $23, %rax
  1668. vpaddq %xmm2, %xmm8, %xmm2
  1669. # rnd_1: 1 - 1
  1670. movq %r11, %rbx
  1671. movq %r8, %rcx
  1672. addq 40(%rsp), %r10
  1673. xorq %r9, %rcx
  1674. vpsrlq $19, %xmm1, %xmm8
  1675. vpsllq $45, %xmm1, %xmm9
  1676. # rnd_1: 2 - 3
  1677. xorq %r15, %rax
  1678. andq %r15, %rcx
  1679. rorq $4, %rax
  1680. xorq %r9, %rcx
  1681. vpsrlq $61, %xmm1, %xmm10
  1682. vpsllq $3, %xmm1, %xmm11
  1683. # rnd_1: 4 - 6
  1684. xorq %r15, %rax
  1685. addq %rcx, %r10
  1686. rorq $14, %rax
  1687. xorq %r12, %rbx
  1688. addq %rax, %r10
  1689. movq %r11, %rcx
  1690. vpor %xmm9, %xmm8, %xmm8
  1691. vpor %xmm11, %xmm10, %xmm10
  1692. # rnd_1: 7 - 8
  1693. andq %rbx, %rdx
  1694. rorq $5, %rcx
  1695. xorq %r11, %rcx
  1696. xorq %r12, %rdx
  1697. vpxor %xmm10, %xmm8, %xmm8
  1698. vpsrlq $6, %xmm1, %xmm11
  1699. # rnd_1: 9 - 10
  1700. rorq $6, %rcx
  1701. addq %r10, %r14
  1702. xorq %r11, %rcx
  1703. addq %rdx, %r10
  1704. vpxor %xmm11, %xmm8, %xmm8
  1705. # rnd_1: 11 - 11
  1706. rorq $28, %rcx
  1707. movq %r14, %rax
  1708. addq %rcx, %r10
  1709. vpaddq %xmm2, %xmm8, %xmm2
  1710. # msg_sched done: 4-7
  1711. # msg_sched: 6-7
  1712. # rnd_0: 0 - 0
  1713. rorq $23, %rax
  1714. vpalignr $8, %xmm3, %xmm4, %xmm12
  1715. vpalignr $8, %xmm7, %xmm0, %xmm13
  1716. # rnd_0: 1 - 1
  1717. movq %r10, %rdx
  1718. movq %r15, %rcx
  1719. addq 48(%rsp), %r9
  1720. xorq %r8, %rcx
  1721. vpsrlq $0x01, %xmm12, %xmm8
  1722. vpsllq $63, %xmm12, %xmm9
  1723. # rnd_0: 2 - 3
  1724. xorq %r14, %rax
  1725. andq %r14, %rcx
  1726. rorq $4, %rax
  1727. xorq %r8, %rcx
  1728. vpsrlq $8, %xmm12, %xmm10
  1729. vpsllq $56, %xmm12, %xmm11
  1730. # rnd_0: 4 - 5
  1731. xorq %r14, %rax
  1732. addq %rcx, %r9
  1733. rorq $14, %rax
  1734. xorq %r11, %rdx
  1735. vpor %xmm9, %xmm8, %xmm8
  1736. vpor %xmm11, %xmm10, %xmm10
  1737. # rnd_0: 6 - 7
  1738. addq %rax, %r9
  1739. movq %r10, %rcx
  1740. andq %rdx, %rbx
  1741. rorq $5, %rcx
  1742. vpsrlq $7, %xmm12, %xmm11
  1743. vpxor %xmm10, %xmm8, %xmm8
  1744. # rnd_0: 8 - 9
  1745. xorq %r10, %rcx
  1746. xorq %r11, %rbx
  1747. rorq $6, %rcx
  1748. addq %r9, %r13
  1749. vpxor %xmm11, %xmm8, %xmm8
  1750. vpaddq %xmm3, %xmm13, %xmm3
  1751. # rnd_0: 10 - 11
  1752. xorq %r10, %rcx
  1753. addq %rbx, %r9
  1754. rorq $28, %rcx
  1755. movq %r13, %rax
  1756. addq %rcx, %r9
  1757. # rnd_1: 0 - 0
  1758. rorq $23, %rax
  1759. vpaddq %xmm3, %xmm8, %xmm3
  1760. # rnd_1: 1 - 1
  1761. movq %r9, %rbx
  1762. movq %r14, %rcx
  1763. addq 56(%rsp), %r8
  1764. xorq %r15, %rcx
  1765. vpsrlq $19, %xmm2, %xmm8
  1766. vpsllq $45, %xmm2, %xmm9
  1767. # rnd_1: 2 - 3
  1768. xorq %r13, %rax
  1769. andq %r13, %rcx
  1770. rorq $4, %rax
  1771. xorq %r15, %rcx
  1772. vpsrlq $61, %xmm2, %xmm10
  1773. vpsllq $3, %xmm2, %xmm11
  1774. # rnd_1: 4 - 6
  1775. xorq %r13, %rax
  1776. addq %rcx, %r8
  1777. rorq $14, %rax
  1778. xorq %r10, %rbx
  1779. addq %rax, %r8
  1780. movq %r9, %rcx
  1781. vpor %xmm9, %xmm8, %xmm8
  1782. vpor %xmm11, %xmm10, %xmm10
  1783. # rnd_1: 7 - 8
  1784. andq %rbx, %rdx
  1785. rorq $5, %rcx
  1786. xorq %r9, %rcx
  1787. xorq %r10, %rdx
  1788. vpxor %xmm10, %xmm8, %xmm8
  1789. vpsrlq $6, %xmm2, %xmm11
  1790. # rnd_1: 9 - 10
  1791. rorq $6, %rcx
  1792. addq %r8, %r12
  1793. xorq %r9, %rcx
  1794. addq %rdx, %r8
  1795. vpxor %xmm11, %xmm8, %xmm8
  1796. # rnd_1: 11 - 11
  1797. rorq $28, %rcx
  1798. movq %r12, %rax
  1799. addq %rcx, %r8
  1800. vpaddq %xmm3, %xmm8, %xmm3
  1801. # msg_sched done: 6-9
  1802. # msg_sched: 8-9
  1803. # rnd_0: 0 - 0
  1804. rorq $23, %rax
  1805. vpalignr $8, %xmm4, %xmm5, %xmm12
  1806. vpalignr $8, %xmm0, %xmm1, %xmm13
  1807. # rnd_0: 1 - 1
  1808. movq %r8, %rdx
  1809. movq %r13, %rcx
  1810. addq 64(%rsp), %r15
  1811. xorq %r14, %rcx
  1812. vpsrlq $0x01, %xmm12, %xmm8
  1813. vpsllq $63, %xmm12, %xmm9
  1814. # rnd_0: 2 - 3
  1815. xorq %r12, %rax
  1816. andq %r12, %rcx
  1817. rorq $4, %rax
  1818. xorq %r14, %rcx
  1819. vpsrlq $8, %xmm12, %xmm10
  1820. vpsllq $56, %xmm12, %xmm11
  1821. # rnd_0: 4 - 5
  1822. xorq %r12, %rax
  1823. addq %rcx, %r15
  1824. rorq $14, %rax
  1825. xorq %r9, %rdx
  1826. vpor %xmm9, %xmm8, %xmm8
  1827. vpor %xmm11, %xmm10, %xmm10
  1828. # rnd_0: 6 - 7
  1829. addq %rax, %r15
  1830. movq %r8, %rcx
  1831. andq %rdx, %rbx
  1832. rorq $5, %rcx
  1833. vpsrlq $7, %xmm12, %xmm11
  1834. vpxor %xmm10, %xmm8, %xmm8
  1835. # rnd_0: 8 - 9
  1836. xorq %r8, %rcx
  1837. xorq %r9, %rbx
  1838. rorq $6, %rcx
  1839. addq %r15, %r11
  1840. vpxor %xmm11, %xmm8, %xmm8
  1841. vpaddq %xmm4, %xmm13, %xmm4
  1842. # rnd_0: 10 - 11
  1843. xorq %r8, %rcx
  1844. addq %rbx, %r15
  1845. rorq $28, %rcx
  1846. movq %r11, %rax
  1847. addq %rcx, %r15
  1848. # rnd_1: 0 - 0
  1849. rorq $23, %rax
  1850. vpaddq %xmm4, %xmm8, %xmm4
  1851. # rnd_1: 1 - 1
  1852. movq %r15, %rbx
  1853. movq %r12, %rcx
  1854. addq 72(%rsp), %r14
  1855. xorq %r13, %rcx
  1856. vpsrlq $19, %xmm3, %xmm8
  1857. vpsllq $45, %xmm3, %xmm9
  1858. # rnd_1: 2 - 3
  1859. xorq %r11, %rax
  1860. andq %r11, %rcx
  1861. rorq $4, %rax
  1862. xorq %r13, %rcx
  1863. vpsrlq $61, %xmm3, %xmm10
  1864. vpsllq $3, %xmm3, %xmm11
  1865. # rnd_1: 4 - 6
  1866. xorq %r11, %rax
  1867. addq %rcx, %r14
  1868. rorq $14, %rax
  1869. xorq %r8, %rbx
  1870. addq %rax, %r14
  1871. movq %r15, %rcx
  1872. vpor %xmm9, %xmm8, %xmm8
  1873. vpor %xmm11, %xmm10, %xmm10
  1874. # rnd_1: 7 - 8
  1875. andq %rbx, %rdx
  1876. rorq $5, %rcx
  1877. xorq %r15, %rcx
  1878. xorq %r8, %rdx
  1879. vpxor %xmm10, %xmm8, %xmm8
  1880. vpsrlq $6, %xmm3, %xmm11
  1881. # rnd_1: 9 - 10
  1882. rorq $6, %rcx
  1883. addq %r14, %r10
  1884. xorq %r15, %rcx
  1885. addq %rdx, %r14
  1886. vpxor %xmm11, %xmm8, %xmm8
  1887. # rnd_1: 11 - 11
  1888. rorq $28, %rcx
  1889. movq %r10, %rax
  1890. addq %rcx, %r14
  1891. vpaddq %xmm4, %xmm8, %xmm4
  1892. # msg_sched done: 8-11
  1893. # msg_sched: 10-11
  1894. # rnd_0: 0 - 0
  1895. rorq $23, %rax
  1896. vpalignr $8, %xmm5, %xmm6, %xmm12
  1897. vpalignr $8, %xmm1, %xmm2, %xmm13
  1898. # rnd_0: 1 - 1
  1899. movq %r14, %rdx
  1900. movq %r11, %rcx
  1901. addq 80(%rsp), %r13
  1902. xorq %r12, %rcx
  1903. vpsrlq $0x01, %xmm12, %xmm8
  1904. vpsllq $63, %xmm12, %xmm9
  1905. # rnd_0: 2 - 3
  1906. xorq %r10, %rax
  1907. andq %r10, %rcx
  1908. rorq $4, %rax
  1909. xorq %r12, %rcx
  1910. vpsrlq $8, %xmm12, %xmm10
  1911. vpsllq $56, %xmm12, %xmm11
  1912. # rnd_0: 4 - 5
  1913. xorq %r10, %rax
  1914. addq %rcx, %r13
  1915. rorq $14, %rax
  1916. xorq %r15, %rdx
  1917. vpor %xmm9, %xmm8, %xmm8
  1918. vpor %xmm11, %xmm10, %xmm10
  1919. # rnd_0: 6 - 7
  1920. addq %rax, %r13
  1921. movq %r14, %rcx
  1922. andq %rdx, %rbx
  1923. rorq $5, %rcx
  1924. vpsrlq $7, %xmm12, %xmm11
  1925. vpxor %xmm10, %xmm8, %xmm8
  1926. # rnd_0: 8 - 9
  1927. xorq %r14, %rcx
  1928. xorq %r15, %rbx
  1929. rorq $6, %rcx
  1930. addq %r13, %r9
  1931. vpxor %xmm11, %xmm8, %xmm8
  1932. vpaddq %xmm5, %xmm13, %xmm5
  1933. # rnd_0: 10 - 11
  1934. xorq %r14, %rcx
  1935. addq %rbx, %r13
  1936. rorq $28, %rcx
  1937. movq %r9, %rax
  1938. addq %rcx, %r13
  1939. # rnd_1: 0 - 0
  1940. rorq $23, %rax
  1941. vpaddq %xmm5, %xmm8, %xmm5
  1942. # rnd_1: 1 - 1
  1943. movq %r13, %rbx
  1944. movq %r10, %rcx
  1945. addq 88(%rsp), %r12
  1946. xorq %r11, %rcx
  1947. vpsrlq $19, %xmm4, %xmm8
  1948. vpsllq $45, %xmm4, %xmm9
  1949. # rnd_1: 2 - 3
  1950. xorq %r9, %rax
  1951. andq %r9, %rcx
  1952. rorq $4, %rax
  1953. xorq %r11, %rcx
  1954. vpsrlq $61, %xmm4, %xmm10
  1955. vpsllq $3, %xmm4, %xmm11
  1956. # rnd_1: 4 - 6
  1957. xorq %r9, %rax
  1958. addq %rcx, %r12
  1959. rorq $14, %rax
  1960. xorq %r14, %rbx
  1961. addq %rax, %r12
  1962. movq %r13, %rcx
  1963. vpor %xmm9, %xmm8, %xmm8
  1964. vpor %xmm11, %xmm10, %xmm10
  1965. # rnd_1: 7 - 8
  1966. andq %rbx, %rdx
  1967. rorq $5, %rcx
  1968. xorq %r13, %rcx
  1969. xorq %r14, %rdx
  1970. vpxor %xmm10, %xmm8, %xmm8
  1971. vpsrlq $6, %xmm4, %xmm11
  1972. # rnd_1: 9 - 10
  1973. rorq $6, %rcx
  1974. addq %r12, %r8
  1975. xorq %r13, %rcx
  1976. addq %rdx, %r12
  1977. vpxor %xmm11, %xmm8, %xmm8
  1978. # rnd_1: 11 - 11
  1979. rorq $28, %rcx
  1980. movq %r8, %rax
  1981. addq %rcx, %r12
  1982. vpaddq %xmm5, %xmm8, %xmm5
  1983. # msg_sched done: 10-13
  1984. # msg_sched: 12-13
  1985. # rnd_0: 0 - 0
  1986. rorq $23, %rax
  1987. vpalignr $8, %xmm6, %xmm7, %xmm12
  1988. vpalignr $8, %xmm2, %xmm3, %xmm13
  1989. # rnd_0: 1 - 1
  1990. movq %r12, %rdx
  1991. movq %r9, %rcx
  1992. addq 96(%rsp), %r11
  1993. xorq %r10, %rcx
  1994. vpsrlq $0x01, %xmm12, %xmm8
  1995. vpsllq $63, %xmm12, %xmm9
  1996. # rnd_0: 2 - 3
  1997. xorq %r8, %rax
  1998. andq %r8, %rcx
  1999. rorq $4, %rax
  2000. xorq %r10, %rcx
  2001. vpsrlq $8, %xmm12, %xmm10
  2002. vpsllq $56, %xmm12, %xmm11
  2003. # rnd_0: 4 - 5
  2004. xorq %r8, %rax
  2005. addq %rcx, %r11
  2006. rorq $14, %rax
  2007. xorq %r13, %rdx
  2008. vpor %xmm9, %xmm8, %xmm8
  2009. vpor %xmm11, %xmm10, %xmm10
  2010. # rnd_0: 6 - 7
  2011. addq %rax, %r11
  2012. movq %r12, %rcx
  2013. andq %rdx, %rbx
  2014. rorq $5, %rcx
  2015. vpsrlq $7, %xmm12, %xmm11
  2016. vpxor %xmm10, %xmm8, %xmm8
  2017. # rnd_0: 8 - 9
  2018. xorq %r12, %rcx
  2019. xorq %r13, %rbx
  2020. rorq $6, %rcx
  2021. addq %r11, %r15
  2022. vpxor %xmm11, %xmm8, %xmm8
  2023. vpaddq %xmm6, %xmm13, %xmm6
  2024. # rnd_0: 10 - 11
  2025. xorq %r12, %rcx
  2026. addq %rbx, %r11
  2027. rorq $28, %rcx
  2028. movq %r15, %rax
  2029. addq %rcx, %r11
  2030. # rnd_1: 0 - 0
  2031. rorq $23, %rax
  2032. vpaddq %xmm6, %xmm8, %xmm6
  2033. # rnd_1: 1 - 1
  2034. movq %r11, %rbx
  2035. movq %r8, %rcx
  2036. addq 104(%rsp), %r10
  2037. xorq %r9, %rcx
  2038. vpsrlq $19, %xmm5, %xmm8
  2039. vpsllq $45, %xmm5, %xmm9
  2040. # rnd_1: 2 - 3
  2041. xorq %r15, %rax
  2042. andq %r15, %rcx
  2043. rorq $4, %rax
  2044. xorq %r9, %rcx
  2045. vpsrlq $61, %xmm5, %xmm10
  2046. vpsllq $3, %xmm5, %xmm11
  2047. # rnd_1: 4 - 6
  2048. xorq %r15, %rax
  2049. addq %rcx, %r10
  2050. rorq $14, %rax
  2051. xorq %r12, %rbx
  2052. addq %rax, %r10
  2053. movq %r11, %rcx
  2054. vpor %xmm9, %xmm8, %xmm8
  2055. vpor %xmm11, %xmm10, %xmm10
  2056. # rnd_1: 7 - 8
  2057. andq %rbx, %rdx
  2058. rorq $5, %rcx
  2059. xorq %r11, %rcx
  2060. xorq %r12, %rdx
  2061. vpxor %xmm10, %xmm8, %xmm8
  2062. vpsrlq $6, %xmm5, %xmm11
  2063. # rnd_1: 9 - 10
  2064. rorq $6, %rcx
  2065. addq %r10, %r14
  2066. xorq %r11, %rcx
  2067. addq %rdx, %r10
  2068. vpxor %xmm11, %xmm8, %xmm8
  2069. # rnd_1: 11 - 11
  2070. rorq $28, %rcx
  2071. movq %r14, %rax
  2072. addq %rcx, %r10
  2073. vpaddq %xmm6, %xmm8, %xmm6
  2074. # msg_sched done: 12-15
  2075. # msg_sched: 14-15
  2076. # rnd_0: 0 - 0
  2077. rorq $23, %rax
  2078. vpalignr $8, %xmm7, %xmm0, %xmm12
  2079. vpalignr $8, %xmm3, %xmm4, %xmm13
  2080. # rnd_0: 1 - 1
  2081. movq %r10, %rdx
  2082. movq %r15, %rcx
  2083. addq 112(%rsp), %r9
  2084. xorq %r8, %rcx
  2085. vpsrlq $0x01, %xmm12, %xmm8
  2086. vpsllq $63, %xmm12, %xmm9
  2087. # rnd_0: 2 - 3
  2088. xorq %r14, %rax
  2089. andq %r14, %rcx
  2090. rorq $4, %rax
  2091. xorq %r8, %rcx
  2092. vpsrlq $8, %xmm12, %xmm10
  2093. vpsllq $56, %xmm12, %xmm11
  2094. # rnd_0: 4 - 5
  2095. xorq %r14, %rax
  2096. addq %rcx, %r9
  2097. rorq $14, %rax
  2098. xorq %r11, %rdx
  2099. vpor %xmm9, %xmm8, %xmm8
  2100. vpor %xmm11, %xmm10, %xmm10
  2101. # rnd_0: 6 - 7
  2102. addq %rax, %r9
  2103. movq %r10, %rcx
  2104. andq %rdx, %rbx
  2105. rorq $5, %rcx
  2106. vpsrlq $7, %xmm12, %xmm11
  2107. vpxor %xmm10, %xmm8, %xmm8
  2108. # rnd_0: 8 - 9
  2109. xorq %r10, %rcx
  2110. xorq %r11, %rbx
  2111. rorq $6, %rcx
  2112. addq %r9, %r13
  2113. vpxor %xmm11, %xmm8, %xmm8
  2114. vpaddq %xmm7, %xmm13, %xmm7
  2115. # rnd_0: 10 - 11
  2116. xorq %r10, %rcx
  2117. addq %rbx, %r9
  2118. rorq $28, %rcx
  2119. movq %r13, %rax
  2120. addq %rcx, %r9
  2121. # rnd_1: 0 - 0
  2122. rorq $23, %rax
  2123. vpaddq %xmm7, %xmm8, %xmm7
  2124. # rnd_1: 1 - 1
  2125. movq %r9, %rbx
  2126. movq %r14, %rcx
  2127. addq 120(%rsp), %r8
  2128. xorq %r15, %rcx
  2129. vpsrlq $19, %xmm6, %xmm8
  2130. vpsllq $45, %xmm6, %xmm9
  2131. # rnd_1: 2 - 3
  2132. xorq %r13, %rax
  2133. andq %r13, %rcx
  2134. rorq $4, %rax
  2135. xorq %r15, %rcx
  2136. vpsrlq $61, %xmm6, %xmm10
  2137. vpsllq $3, %xmm6, %xmm11
  2138. # rnd_1: 4 - 6
  2139. xorq %r13, %rax
  2140. addq %rcx, %r8
  2141. rorq $14, %rax
  2142. xorq %r10, %rbx
  2143. addq %rax, %r8
  2144. movq %r9, %rcx
  2145. vpor %xmm9, %xmm8, %xmm8
  2146. vpor %xmm11, %xmm10, %xmm10
  2147. # rnd_1: 7 - 8
  2148. andq %rbx, %rdx
  2149. rorq $5, %rcx
  2150. xorq %r9, %rcx
  2151. xorq %r10, %rdx
  2152. vpxor %xmm10, %xmm8, %xmm8
  2153. vpsrlq $6, %xmm6, %xmm11
  2154. # rnd_1: 9 - 10
  2155. rorq $6, %rcx
  2156. addq %r8, %r12
  2157. xorq %r9, %rcx
  2158. addq %rdx, %r8
  2159. vpxor %xmm11, %xmm8, %xmm8
  2160. # rnd_1: 11 - 11
  2161. rorq $28, %rcx
  2162. movq %r12, %rax
  2163. addq %rcx, %r8
  2164. vpaddq %xmm7, %xmm8, %xmm7
  2165. # msg_sched done: 14-17
  2166. movq 136(%rsp), %rdx
  2167. vpaddq (%rdx), %xmm0, %xmm8
  2168. vpaddq 16(%rdx), %xmm1, %xmm9
  2169. vmovdqu %xmm8, (%rsp)
  2170. vmovdqu %xmm9, 16(%rsp)
  2171. vpaddq 32(%rdx), %xmm2, %xmm8
  2172. vpaddq 48(%rdx), %xmm3, %xmm9
  2173. vmovdqu %xmm8, 32(%rsp)
  2174. vmovdqu %xmm9, 48(%rsp)
  2175. vpaddq 64(%rdx), %xmm4, %xmm8
  2176. vpaddq 80(%rdx), %xmm5, %xmm9
  2177. vmovdqu %xmm8, 64(%rsp)
  2178. vmovdqu %xmm9, 80(%rsp)
  2179. vpaddq 96(%rdx), %xmm6, %xmm8
  2180. vpaddq 112(%rdx), %xmm7, %xmm9
  2181. vmovdqu %xmm8, 96(%rsp)
  2182. vmovdqu %xmm9, 112(%rsp)
  2183. subl $0x01, 128(%rsp)
  2184. jne L_sha512_len_avx1_start
  2185. # rnd_all_2: 0-1
  2186. # rnd_0: 0 - 11
  2187. rorq $23, %rax
  2188. movq %r8, %rdx
  2189. movq %r13, %rcx
  2190. addq (%rsp), %r15
  2191. xorq %r14, %rcx
  2192. xorq %r12, %rax
  2193. andq %r12, %rcx
  2194. rorq $4, %rax
  2195. xorq %r14, %rcx
  2196. xorq %r12, %rax
  2197. addq %rcx, %r15
  2198. rorq $14, %rax
  2199. xorq %r9, %rdx
  2200. addq %rax, %r15
  2201. movq %r8, %rcx
  2202. andq %rdx, %rbx
  2203. rorq $5, %rcx
  2204. xorq %r8, %rcx
  2205. xorq %r9, %rbx
  2206. rorq $6, %rcx
  2207. addq %r15, %r11
  2208. xorq %r8, %rcx
  2209. addq %rbx, %r15
  2210. rorq $28, %rcx
  2211. movq %r11, %rax
  2212. addq %rcx, %r15
  2213. # rnd_1: 0 - 11
  2214. rorq $23, %rax
  2215. movq %r15, %rbx
  2216. movq %r12, %rcx
  2217. addq 8(%rsp), %r14
  2218. xorq %r13, %rcx
  2219. xorq %r11, %rax
  2220. andq %r11, %rcx
  2221. rorq $4, %rax
  2222. xorq %r13, %rcx
  2223. xorq %r11, %rax
  2224. addq %rcx, %r14
  2225. rorq $14, %rax
  2226. xorq %r8, %rbx
  2227. addq %rax, %r14
  2228. movq %r15, %rcx
  2229. andq %rbx, %rdx
  2230. rorq $5, %rcx
  2231. xorq %r15, %rcx
  2232. xorq %r8, %rdx
  2233. rorq $6, %rcx
  2234. addq %r14, %r10
  2235. xorq %r15, %rcx
  2236. addq %rdx, %r14
  2237. rorq $28, %rcx
  2238. movq %r10, %rax
  2239. addq %rcx, %r14
  2240. # rnd_all_2: 2-3
  2241. # rnd_0: 0 - 11
  2242. rorq $23, %rax
  2243. movq %r14, %rdx
  2244. movq %r11, %rcx
  2245. addq 16(%rsp), %r13
  2246. xorq %r12, %rcx
  2247. xorq %r10, %rax
  2248. andq %r10, %rcx
  2249. rorq $4, %rax
  2250. xorq %r12, %rcx
  2251. xorq %r10, %rax
  2252. addq %rcx, %r13
  2253. rorq $14, %rax
  2254. xorq %r15, %rdx
  2255. addq %rax, %r13
  2256. movq %r14, %rcx
  2257. andq %rdx, %rbx
  2258. rorq $5, %rcx
  2259. xorq %r14, %rcx
  2260. xorq %r15, %rbx
  2261. rorq $6, %rcx
  2262. addq %r13, %r9
  2263. xorq %r14, %rcx
  2264. addq %rbx, %r13
  2265. rorq $28, %rcx
  2266. movq %r9, %rax
  2267. addq %rcx, %r13
  2268. # rnd_1: 0 - 11
  2269. rorq $23, %rax
  2270. movq %r13, %rbx
  2271. movq %r10, %rcx
  2272. addq 24(%rsp), %r12
  2273. xorq %r11, %rcx
  2274. xorq %r9, %rax
  2275. andq %r9, %rcx
  2276. rorq $4, %rax
  2277. xorq %r11, %rcx
  2278. xorq %r9, %rax
  2279. addq %rcx, %r12
  2280. rorq $14, %rax
  2281. xorq %r14, %rbx
  2282. addq %rax, %r12
  2283. movq %r13, %rcx
  2284. andq %rbx, %rdx
  2285. rorq $5, %rcx
  2286. xorq %r13, %rcx
  2287. xorq %r14, %rdx
  2288. rorq $6, %rcx
  2289. addq %r12, %r8
  2290. xorq %r13, %rcx
  2291. addq %rdx, %r12
  2292. rorq $28, %rcx
  2293. movq %r8, %rax
  2294. addq %rcx, %r12
  2295. # rnd_all_2: 4-5
  2296. # rnd_0: 0 - 11
  2297. rorq $23, %rax
  2298. movq %r12, %rdx
  2299. movq %r9, %rcx
  2300. addq 32(%rsp), %r11
  2301. xorq %r10, %rcx
  2302. xorq %r8, %rax
  2303. andq %r8, %rcx
  2304. rorq $4, %rax
  2305. xorq %r10, %rcx
  2306. xorq %r8, %rax
  2307. addq %rcx, %r11
  2308. rorq $14, %rax
  2309. xorq %r13, %rdx
  2310. addq %rax, %r11
  2311. movq %r12, %rcx
  2312. andq %rdx, %rbx
  2313. rorq $5, %rcx
  2314. xorq %r12, %rcx
  2315. xorq %r13, %rbx
  2316. rorq $6, %rcx
  2317. addq %r11, %r15
  2318. xorq %r12, %rcx
  2319. addq %rbx, %r11
  2320. rorq $28, %rcx
  2321. movq %r15, %rax
  2322. addq %rcx, %r11
  2323. # rnd_1: 0 - 11
  2324. rorq $23, %rax
  2325. movq %r11, %rbx
  2326. movq %r8, %rcx
  2327. addq 40(%rsp), %r10
  2328. xorq %r9, %rcx
  2329. xorq %r15, %rax
  2330. andq %r15, %rcx
  2331. rorq $4, %rax
  2332. xorq %r9, %rcx
  2333. xorq %r15, %rax
  2334. addq %rcx, %r10
  2335. rorq $14, %rax
  2336. xorq %r12, %rbx
  2337. addq %rax, %r10
  2338. movq %r11, %rcx
  2339. andq %rbx, %rdx
  2340. rorq $5, %rcx
  2341. xorq %r11, %rcx
  2342. xorq %r12, %rdx
  2343. rorq $6, %rcx
  2344. addq %r10, %r14
  2345. xorq %r11, %rcx
  2346. addq %rdx, %r10
  2347. rorq $28, %rcx
  2348. movq %r14, %rax
  2349. addq %rcx, %r10
  2350. # rnd_all_2: 6-7
  2351. # rnd_0: 0 - 11
  2352. rorq $23, %rax
  2353. movq %r10, %rdx
  2354. movq %r15, %rcx
  2355. addq 48(%rsp), %r9
  2356. xorq %r8, %rcx
  2357. xorq %r14, %rax
  2358. andq %r14, %rcx
  2359. rorq $4, %rax
  2360. xorq %r8, %rcx
  2361. xorq %r14, %rax
  2362. addq %rcx, %r9
  2363. rorq $14, %rax
  2364. xorq %r11, %rdx
  2365. addq %rax, %r9
  2366. movq %r10, %rcx
  2367. andq %rdx, %rbx
  2368. rorq $5, %rcx
  2369. xorq %r10, %rcx
  2370. xorq %r11, %rbx
  2371. rorq $6, %rcx
  2372. addq %r9, %r13
  2373. xorq %r10, %rcx
  2374. addq %rbx, %r9
  2375. rorq $28, %rcx
  2376. movq %r13, %rax
  2377. addq %rcx, %r9
  2378. # rnd_1: 0 - 11
  2379. rorq $23, %rax
  2380. movq %r9, %rbx
  2381. movq %r14, %rcx
  2382. addq 56(%rsp), %r8
  2383. xorq %r15, %rcx
  2384. xorq %r13, %rax
  2385. andq %r13, %rcx
  2386. rorq $4, %rax
  2387. xorq %r15, %rcx
  2388. xorq %r13, %rax
  2389. addq %rcx, %r8
  2390. rorq $14, %rax
  2391. xorq %r10, %rbx
  2392. addq %rax, %r8
  2393. movq %r9, %rcx
  2394. andq %rbx, %rdx
  2395. rorq $5, %rcx
  2396. xorq %r9, %rcx
  2397. xorq %r10, %rdx
  2398. rorq $6, %rcx
  2399. addq %r8, %r12
  2400. xorq %r9, %rcx
  2401. addq %rdx, %r8
  2402. rorq $28, %rcx
  2403. movq %r12, %rax
  2404. addq %rcx, %r8
  2405. # rnd_all_2: 8-9
  2406. # rnd_0: 0 - 11
  2407. rorq $23, %rax
  2408. movq %r8, %rdx
  2409. movq %r13, %rcx
  2410. addq 64(%rsp), %r15
  2411. xorq %r14, %rcx
  2412. xorq %r12, %rax
  2413. andq %r12, %rcx
  2414. rorq $4, %rax
  2415. xorq %r14, %rcx
  2416. xorq %r12, %rax
  2417. addq %rcx, %r15
  2418. rorq $14, %rax
  2419. xorq %r9, %rdx
  2420. addq %rax, %r15
  2421. movq %r8, %rcx
  2422. andq %rdx, %rbx
  2423. rorq $5, %rcx
  2424. xorq %r8, %rcx
  2425. xorq %r9, %rbx
  2426. rorq $6, %rcx
  2427. addq %r15, %r11
  2428. xorq %r8, %rcx
  2429. addq %rbx, %r15
  2430. rorq $28, %rcx
  2431. movq %r11, %rax
  2432. addq %rcx, %r15
  2433. # rnd_1: 0 - 11
  2434. rorq $23, %rax
  2435. movq %r15, %rbx
  2436. movq %r12, %rcx
  2437. addq 72(%rsp), %r14
  2438. xorq %r13, %rcx
  2439. xorq %r11, %rax
  2440. andq %r11, %rcx
  2441. rorq $4, %rax
  2442. xorq %r13, %rcx
  2443. xorq %r11, %rax
  2444. addq %rcx, %r14
  2445. rorq $14, %rax
  2446. xorq %r8, %rbx
  2447. addq %rax, %r14
  2448. movq %r15, %rcx
  2449. andq %rbx, %rdx
  2450. rorq $5, %rcx
  2451. xorq %r15, %rcx
  2452. xorq %r8, %rdx
  2453. rorq $6, %rcx
  2454. addq %r14, %r10
  2455. xorq %r15, %rcx
  2456. addq %rdx, %r14
  2457. rorq $28, %rcx
  2458. movq %r10, %rax
  2459. addq %rcx, %r14
  2460. # rnd_all_2: 10-11
  2461. # rnd_0: 0 - 11
  2462. rorq $23, %rax
  2463. movq %r14, %rdx
  2464. movq %r11, %rcx
  2465. addq 80(%rsp), %r13
  2466. xorq %r12, %rcx
  2467. xorq %r10, %rax
  2468. andq %r10, %rcx
  2469. rorq $4, %rax
  2470. xorq %r12, %rcx
  2471. xorq %r10, %rax
  2472. addq %rcx, %r13
  2473. rorq $14, %rax
  2474. xorq %r15, %rdx
  2475. addq %rax, %r13
  2476. movq %r14, %rcx
  2477. andq %rdx, %rbx
  2478. rorq $5, %rcx
  2479. xorq %r14, %rcx
  2480. xorq %r15, %rbx
  2481. rorq $6, %rcx
  2482. addq %r13, %r9
  2483. xorq %r14, %rcx
  2484. addq %rbx, %r13
  2485. rorq $28, %rcx
  2486. movq %r9, %rax
  2487. addq %rcx, %r13
  2488. # rnd_1: 0 - 11
  2489. rorq $23, %rax
  2490. movq %r13, %rbx
  2491. movq %r10, %rcx
  2492. addq 88(%rsp), %r12
  2493. xorq %r11, %rcx
  2494. xorq %r9, %rax
  2495. andq %r9, %rcx
  2496. rorq $4, %rax
  2497. xorq %r11, %rcx
  2498. xorq %r9, %rax
  2499. addq %rcx, %r12
  2500. rorq $14, %rax
  2501. xorq %r14, %rbx
  2502. addq %rax, %r12
  2503. movq %r13, %rcx
  2504. andq %rbx, %rdx
  2505. rorq $5, %rcx
  2506. xorq %r13, %rcx
  2507. xorq %r14, %rdx
  2508. rorq $6, %rcx
  2509. addq %r12, %r8
  2510. xorq %r13, %rcx
  2511. addq %rdx, %r12
  2512. rorq $28, %rcx
  2513. movq %r8, %rax
  2514. addq %rcx, %r12
  2515. # rnd_all_2: 12-13
  2516. # rnd_0: 0 - 11
  2517. rorq $23, %rax
  2518. movq %r12, %rdx
  2519. movq %r9, %rcx
  2520. addq 96(%rsp), %r11
  2521. xorq %r10, %rcx
  2522. xorq %r8, %rax
  2523. andq %r8, %rcx
  2524. rorq $4, %rax
  2525. xorq %r10, %rcx
  2526. xorq %r8, %rax
  2527. addq %rcx, %r11
  2528. rorq $14, %rax
  2529. xorq %r13, %rdx
  2530. addq %rax, %r11
  2531. movq %r12, %rcx
  2532. andq %rdx, %rbx
  2533. rorq $5, %rcx
  2534. xorq %r12, %rcx
  2535. xorq %r13, %rbx
  2536. rorq $6, %rcx
  2537. addq %r11, %r15
  2538. xorq %r12, %rcx
  2539. addq %rbx, %r11
  2540. rorq $28, %rcx
  2541. movq %r15, %rax
  2542. addq %rcx, %r11
  2543. # rnd_1: 0 - 11
  2544. rorq $23, %rax
  2545. movq %r11, %rbx
  2546. movq %r8, %rcx
  2547. addq 104(%rsp), %r10
  2548. xorq %r9, %rcx
  2549. xorq %r15, %rax
  2550. andq %r15, %rcx
  2551. rorq $4, %rax
  2552. xorq %r9, %rcx
  2553. xorq %r15, %rax
  2554. addq %rcx, %r10
  2555. rorq $14, %rax
  2556. xorq %r12, %rbx
  2557. addq %rax, %r10
  2558. movq %r11, %rcx
  2559. andq %rbx, %rdx
  2560. rorq $5, %rcx
  2561. xorq %r11, %rcx
  2562. xorq %r12, %rdx
  2563. rorq $6, %rcx
  2564. addq %r10, %r14
  2565. xorq %r11, %rcx
  2566. addq %rdx, %r10
  2567. rorq $28, %rcx
  2568. movq %r14, %rax
  2569. addq %rcx, %r10
  2570. # rnd_all_2: 14-15
  2571. # rnd_0: 0 - 11
  2572. rorq $23, %rax
  2573. movq %r10, %rdx
  2574. movq %r15, %rcx
  2575. addq 112(%rsp), %r9
  2576. xorq %r8, %rcx
  2577. xorq %r14, %rax
  2578. andq %r14, %rcx
  2579. rorq $4, %rax
  2580. xorq %r8, %rcx
  2581. xorq %r14, %rax
  2582. addq %rcx, %r9
  2583. rorq $14, %rax
  2584. xorq %r11, %rdx
  2585. addq %rax, %r9
  2586. movq %r10, %rcx
  2587. andq %rdx, %rbx
  2588. rorq $5, %rcx
  2589. xorq %r10, %rcx
  2590. xorq %r11, %rbx
  2591. rorq $6, %rcx
  2592. addq %r9, %r13
  2593. xorq %r10, %rcx
  2594. addq %rbx, %r9
  2595. rorq $28, %rcx
  2596. movq %r13, %rax
  2597. addq %rcx, %r9
  2598. # rnd_1: 0 - 11
  2599. rorq $23, %rax
  2600. movq %r9, %rbx
  2601. movq %r14, %rcx
  2602. addq 120(%rsp), %r8
  2603. xorq %r15, %rcx
  2604. xorq %r13, %rax
  2605. andq %r13, %rcx
  2606. rorq $4, %rax
  2607. xorq %r15, %rcx
  2608. xorq %r13, %rax
  2609. addq %rcx, %r8
  2610. rorq $14, %rax
  2611. xorq %r10, %rbx
  2612. addq %rax, %r8
  2613. movq %r9, %rcx
  2614. andq %rbx, %rdx
  2615. rorq $5, %rcx
  2616. xorq %r9, %rcx
  2617. xorq %r10, %rdx
  2618. rorq $6, %rcx
  2619. addq %r8, %r12
  2620. xorq %r9, %rcx
  2621. addq %rdx, %r8
  2622. rorq $28, %rcx
  2623. movq %r12, %rax
  2624. addq %rcx, %r8
  2625. addq (%rdi), %r8
  2626. addq 8(%rdi), %r9
  2627. addq 16(%rdi), %r10
  2628. addq 24(%rdi), %r11
  2629. addq 32(%rdi), %r12
  2630. addq 40(%rdi), %r13
  2631. addq 48(%rdi), %r14
  2632. addq 56(%rdi), %r15
  2633. leaq L_avx1_sha512_k(%rip), %rdx
  2634. addq $0x80, %rsi
  2635. subl $0x80, %ebp
  2636. movq %r8, (%rdi)
  2637. movq %r9, 8(%rdi)
  2638. movq %r10, 16(%rdi)
  2639. movq %r11, 24(%rdi)
  2640. movq %r12, 32(%rdi)
  2641. movq %r13, 40(%rdi)
  2642. movq %r14, 48(%rdi)
  2643. movq %r15, 56(%rdi)
  2644. jnz L_sha512_len_avx1_begin
  2645. xorq %rax, %rax
  2646. vzeroupper
  2647. addq $0x90, %rsp
  2648. popq %rbp
  2649. popq %r15
  2650. popq %r14
  2651. popq %r13
  2652. popq %r12
  2653. popq %rbx
  2654. repz retq
  2655. #ifndef __APPLE__
  2656. .size Transform_Sha512_AVX1_Len,.-Transform_Sha512_AVX1_Len
  2657. #endif /* __APPLE__ */
  2658. #ifndef __APPLE__
  2659. .data
  2660. #else
  2661. .section __DATA,__data
  2662. #endif /* __APPLE__ */
  2663. #ifndef __APPLE__
  2664. .align 16
  2665. #else
  2666. .p2align 4
  2667. #endif /* __APPLE__ */
  2668. L_avx1_rorx_sha512_k:
  2669. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  2670. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  2671. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  2672. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  2673. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  2674. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  2675. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  2676. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  2677. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  2678. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  2679. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  2680. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  2681. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  2682. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  2683. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  2684. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  2685. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  2686. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  2687. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  2688. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  2689. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  2690. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  2691. .quad 0xd192e819d6ef5218,0xd69906245565a910
  2692. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  2693. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  2694. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  2695. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  2696. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  2697. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  2698. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  2699. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  2700. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  2701. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  2702. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  2703. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  2704. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  2705. .quad 0x28db77f523047d84,0x32caab7b40c72493
  2706. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  2707. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  2708. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  2709. #ifndef __APPLE__
  2710. .data
  2711. #else
  2712. .section __DATA,__data
  2713. #endif /* __APPLE__ */
  2714. #ifndef __APPLE__
  2715. .align 16
  2716. #else
  2717. .p2align 4
  2718. #endif /* __APPLE__ */
  2719. L_avx1_rorx_sha512_flip_mask:
  2720. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  2721. #ifndef __APPLE__
  2722. .text
  2723. .globl Transform_Sha512_AVX1_RORX
  2724. .type Transform_Sha512_AVX1_RORX,@function
  2725. .align 16
  2726. Transform_Sha512_AVX1_RORX:
  2727. #else
  2728. .section __TEXT,__text
  2729. .globl _Transform_Sha512_AVX1_RORX
  2730. .p2align 4
  2731. _Transform_Sha512_AVX1_RORX:
  2732. #endif /* __APPLE__ */
  2733. pushq %rbx
  2734. pushq %r12
  2735. pushq %r13
  2736. pushq %r14
  2737. pushq %r15
  2738. subq $0x88, %rsp
  2739. leaq 64(%rdi), %rax
  2740. vmovdqa L_avx1_rorx_sha512_flip_mask(%rip), %xmm14
  2741. movq (%rdi), %r8
  2742. movq 8(%rdi), %r9
  2743. movq 16(%rdi), %r10
  2744. movq 24(%rdi), %r11
  2745. movq 32(%rdi), %r12
  2746. movq 40(%rdi), %r13
  2747. movq 48(%rdi), %r14
  2748. movq 56(%rdi), %r15
  2749. vmovdqu (%rax), %xmm0
  2750. vmovdqu 16(%rax), %xmm1
  2751. vpshufb %xmm14, %xmm0, %xmm0
  2752. vpshufb %xmm14, %xmm1, %xmm1
  2753. vmovdqu 32(%rax), %xmm2
  2754. vmovdqu 48(%rax), %xmm3
  2755. vpshufb %xmm14, %xmm2, %xmm2
  2756. vpshufb %xmm14, %xmm3, %xmm3
  2757. vmovdqu 64(%rax), %xmm4
  2758. vmovdqu 80(%rax), %xmm5
  2759. vpshufb %xmm14, %xmm4, %xmm4
  2760. vpshufb %xmm14, %xmm5, %xmm5
  2761. vmovdqu 96(%rax), %xmm6
  2762. vmovdqu 112(%rax), %xmm7
  2763. vpshufb %xmm14, %xmm6, %xmm6
  2764. vpshufb %xmm14, %xmm7, %xmm7
  2765. movl $4, 128(%rsp)
  2766. leaq L_avx1_rorx_sha512_k(%rip), %rsi
  2767. movq %r9, %rbx
  2768. xorq %rdx, %rdx
  2769. xorq %r10, %rbx
  2770. vpaddq (%rsi), %xmm0, %xmm8
  2771. vpaddq 16(%rsi), %xmm1, %xmm9
  2772. vmovdqu %xmm8, (%rsp)
  2773. vmovdqu %xmm9, 16(%rsp)
  2774. vpaddq 32(%rsi), %xmm2, %xmm8
  2775. vpaddq 48(%rsi), %xmm3, %xmm9
  2776. vmovdqu %xmm8, 32(%rsp)
  2777. vmovdqu %xmm9, 48(%rsp)
  2778. vpaddq 64(%rsi), %xmm4, %xmm8
  2779. vpaddq 80(%rsi), %xmm5, %xmm9
  2780. vmovdqu %xmm8, 64(%rsp)
  2781. vmovdqu %xmm9, 80(%rsp)
  2782. vpaddq 96(%rsi), %xmm6, %xmm8
  2783. vpaddq 112(%rsi), %xmm7, %xmm9
  2784. vmovdqu %xmm8, 96(%rsp)
  2785. vmovdqu %xmm9, 112(%rsp)
  2786. # Start of 16 rounds
  2787. L_sha256_len_avx1_rorx_start:
  2788. addq $0x80, %rsi
  2789. # msg_sched: 0-1
  2790. # rnd_0: 0 - 0
  2791. rorxq $14, %r12, %rax
  2792. rorxq $18, %r12, %rcx
  2793. addq %rdx, %r8
  2794. vpalignr $8, %xmm0, %xmm1, %xmm12
  2795. vpalignr $8, %xmm4, %xmm5, %xmm13
  2796. # rnd_0: 1 - 1
  2797. addq (%rsp), %r15
  2798. movq %r13, %rdx
  2799. xorq %rax, %rcx
  2800. vpsrlq $0x01, %xmm12, %xmm8
  2801. vpsllq $63, %xmm12, %xmm9
  2802. # rnd_0: 2 - 2
  2803. xorq %r14, %rdx
  2804. rorxq $41, %r12, %rax
  2805. xorq %rcx, %rax
  2806. vpsrlq $8, %xmm12, %xmm10
  2807. vpsllq $56, %xmm12, %xmm11
  2808. # rnd_0: 3 - 3
  2809. andq %r12, %rdx
  2810. addq %rax, %r15
  2811. rorxq $28, %r8, %rax
  2812. vpor %xmm9, %xmm8, %xmm8
  2813. vpor %xmm11, %xmm10, %xmm10
  2814. # rnd_0: 4 - 4
  2815. rorxq $34, %r8, %rcx
  2816. xorq %r14, %rdx
  2817. xorq %rax, %rcx
  2818. vpsrlq $7, %xmm12, %xmm11
  2819. vpxor %xmm10, %xmm8, %xmm8
  2820. # rnd_0: 5 - 5
  2821. rorxq $39, %r8, %rax
  2822. addq %rdx, %r15
  2823. xorq %rcx, %rax
  2824. vpxor %xmm11, %xmm8, %xmm8
  2825. vpaddq %xmm0, %xmm13, %xmm0
  2826. # rnd_0: 6 - 7
  2827. movq %r9, %rdx
  2828. addq %r15, %r11
  2829. xorq %r8, %rdx
  2830. andq %rdx, %rbx
  2831. addq %rax, %r15
  2832. xorq %r9, %rbx
  2833. vpaddq %xmm0, %xmm8, %xmm0
  2834. # rnd_1: 0 - 0
  2835. rorxq $14, %r11, %rax
  2836. rorxq $18, %r11, %rcx
  2837. addq %rbx, %r15
  2838. vpsrlq $19, %xmm7, %xmm8
  2839. vpsllq $45, %xmm7, %xmm9
  2840. # rnd_1: 1 - 1
  2841. addq 8(%rsp), %r14
  2842. movq %r12, %rbx
  2843. xorq %rax, %rcx
  2844. vpsrlq $61, %xmm7, %xmm10
  2845. vpsllq $3, %xmm7, %xmm11
  2846. # rnd_1: 2 - 2
  2847. xorq %r13, %rbx
  2848. rorxq $41, %r11, %rax
  2849. xorq %rcx, %rax
  2850. vpor %xmm9, %xmm8, %xmm8
  2851. vpor %xmm11, %xmm10, %xmm10
  2852. # rnd_1: 3 - 4
  2853. andq %r11, %rbx
  2854. addq %rax, %r14
  2855. rorxq $28, %r15, %rax
  2856. rorxq $34, %r15, %rcx
  2857. xorq %r13, %rbx
  2858. xorq %rax, %rcx
  2859. vpxor %xmm10, %xmm8, %xmm8
  2860. vpsrlq $6, %xmm7, %xmm11
  2861. # rnd_1: 5 - 6
  2862. rorxq $39, %r15, %rax
  2863. addq %rbx, %r14
  2864. xorq %rcx, %rax
  2865. movq %r8, %rbx
  2866. addq %r14, %r10
  2867. xorq %r15, %rbx
  2868. vpxor %xmm11, %xmm8, %xmm8
  2869. # rnd_1: 7 - 7
  2870. andq %rbx, %rdx
  2871. addq %rax, %r14
  2872. xorq %r8, %rdx
  2873. vpaddq %xmm0, %xmm8, %xmm0
  2874. # msg_sched done: 0-3
  2875. # msg_sched: 2-3
  2876. # rnd_0: 0 - 0
  2877. rorxq $14, %r10, %rax
  2878. rorxq $18, %r10, %rcx
  2879. addq %rdx, %r14
  2880. vpalignr $8, %xmm1, %xmm2, %xmm12
  2881. vpalignr $8, %xmm5, %xmm6, %xmm13
  2882. # rnd_0: 1 - 1
  2883. addq 16(%rsp), %r13
  2884. movq %r11, %rdx
  2885. xorq %rax, %rcx
  2886. vpsrlq $0x01, %xmm12, %xmm8
  2887. vpsllq $63, %xmm12, %xmm9
  2888. # rnd_0: 2 - 2
  2889. xorq %r12, %rdx
  2890. rorxq $41, %r10, %rax
  2891. xorq %rcx, %rax
  2892. vpsrlq $8, %xmm12, %xmm10
  2893. vpsllq $56, %xmm12, %xmm11
  2894. # rnd_0: 3 - 3
  2895. andq %r10, %rdx
  2896. addq %rax, %r13
  2897. rorxq $28, %r14, %rax
  2898. vpor %xmm9, %xmm8, %xmm8
  2899. vpor %xmm11, %xmm10, %xmm10
  2900. # rnd_0: 4 - 4
  2901. rorxq $34, %r14, %rcx
  2902. xorq %r12, %rdx
  2903. xorq %rax, %rcx
  2904. vpsrlq $7, %xmm12, %xmm11
  2905. vpxor %xmm10, %xmm8, %xmm8
  2906. # rnd_0: 5 - 5
  2907. rorxq $39, %r14, %rax
  2908. addq %rdx, %r13
  2909. xorq %rcx, %rax
  2910. vpxor %xmm11, %xmm8, %xmm8
  2911. vpaddq %xmm1, %xmm13, %xmm1
  2912. # rnd_0: 6 - 7
  2913. movq %r15, %rdx
  2914. addq %r13, %r9
  2915. xorq %r14, %rdx
  2916. andq %rdx, %rbx
  2917. addq %rax, %r13
  2918. xorq %r15, %rbx
  2919. vpaddq %xmm1, %xmm8, %xmm1
  2920. # rnd_1: 0 - 0
  2921. rorxq $14, %r9, %rax
  2922. rorxq $18, %r9, %rcx
  2923. addq %rbx, %r13
  2924. vpsrlq $19, %xmm0, %xmm8
  2925. vpsllq $45, %xmm0, %xmm9
  2926. # rnd_1: 1 - 1
  2927. addq 24(%rsp), %r12
  2928. movq %r10, %rbx
  2929. xorq %rax, %rcx
  2930. vpsrlq $61, %xmm0, %xmm10
  2931. vpsllq $3, %xmm0, %xmm11
  2932. # rnd_1: 2 - 2
  2933. xorq %r11, %rbx
  2934. rorxq $41, %r9, %rax
  2935. xorq %rcx, %rax
  2936. vpor %xmm9, %xmm8, %xmm8
  2937. vpor %xmm11, %xmm10, %xmm10
  2938. # rnd_1: 3 - 4
  2939. andq %r9, %rbx
  2940. addq %rax, %r12
  2941. rorxq $28, %r13, %rax
  2942. rorxq $34, %r13, %rcx
  2943. xorq %r11, %rbx
  2944. xorq %rax, %rcx
  2945. vpxor %xmm10, %xmm8, %xmm8
  2946. vpsrlq $6, %xmm0, %xmm11
  2947. # rnd_1: 5 - 6
  2948. rorxq $39, %r13, %rax
  2949. addq %rbx, %r12
  2950. xorq %rcx, %rax
  2951. movq %r14, %rbx
  2952. addq %r12, %r8
  2953. xorq %r13, %rbx
  2954. vpxor %xmm11, %xmm8, %xmm8
  2955. # rnd_1: 7 - 7
  2956. andq %rbx, %rdx
  2957. addq %rax, %r12
  2958. xorq %r14, %rdx
  2959. vpaddq %xmm1, %xmm8, %xmm1
  2960. # msg_sched done: 2-5
  2961. # msg_sched: 4-5
  2962. # rnd_0: 0 - 0
  2963. rorxq $14, %r8, %rax
  2964. rorxq $18, %r8, %rcx
  2965. addq %rdx, %r12
  2966. vpalignr $8, %xmm2, %xmm3, %xmm12
  2967. vpalignr $8, %xmm6, %xmm7, %xmm13
  2968. # rnd_0: 1 - 1
  2969. addq 32(%rsp), %r11
  2970. movq %r9, %rdx
  2971. xorq %rax, %rcx
  2972. vpsrlq $0x01, %xmm12, %xmm8
  2973. vpsllq $63, %xmm12, %xmm9
  2974. # rnd_0: 2 - 2
  2975. xorq %r10, %rdx
  2976. rorxq $41, %r8, %rax
  2977. xorq %rcx, %rax
  2978. vpsrlq $8, %xmm12, %xmm10
  2979. vpsllq $56, %xmm12, %xmm11
  2980. # rnd_0: 3 - 3
  2981. andq %r8, %rdx
  2982. addq %rax, %r11
  2983. rorxq $28, %r12, %rax
  2984. vpor %xmm9, %xmm8, %xmm8
  2985. vpor %xmm11, %xmm10, %xmm10
  2986. # rnd_0: 4 - 4
  2987. rorxq $34, %r12, %rcx
  2988. xorq %r10, %rdx
  2989. xorq %rax, %rcx
  2990. vpsrlq $7, %xmm12, %xmm11
  2991. vpxor %xmm10, %xmm8, %xmm8
  2992. # rnd_0: 5 - 5
  2993. rorxq $39, %r12, %rax
  2994. addq %rdx, %r11
  2995. xorq %rcx, %rax
  2996. vpxor %xmm11, %xmm8, %xmm8
  2997. vpaddq %xmm2, %xmm13, %xmm2
  2998. # rnd_0: 6 - 7
  2999. movq %r13, %rdx
  3000. addq %r11, %r15
  3001. xorq %r12, %rdx
  3002. andq %rdx, %rbx
  3003. addq %rax, %r11
  3004. xorq %r13, %rbx
  3005. vpaddq %xmm2, %xmm8, %xmm2
  3006. # rnd_1: 0 - 0
  3007. rorxq $14, %r15, %rax
  3008. rorxq $18, %r15, %rcx
  3009. addq %rbx, %r11
  3010. vpsrlq $19, %xmm1, %xmm8
  3011. vpsllq $45, %xmm1, %xmm9
  3012. # rnd_1: 1 - 1
  3013. addq 40(%rsp), %r10
  3014. movq %r8, %rbx
  3015. xorq %rax, %rcx
  3016. vpsrlq $61, %xmm1, %xmm10
  3017. vpsllq $3, %xmm1, %xmm11
  3018. # rnd_1: 2 - 2
  3019. xorq %r9, %rbx
  3020. rorxq $41, %r15, %rax
  3021. xorq %rcx, %rax
  3022. vpor %xmm9, %xmm8, %xmm8
  3023. vpor %xmm11, %xmm10, %xmm10
  3024. # rnd_1: 3 - 4
  3025. andq %r15, %rbx
  3026. addq %rax, %r10
  3027. rorxq $28, %r11, %rax
  3028. rorxq $34, %r11, %rcx
  3029. xorq %r9, %rbx
  3030. xorq %rax, %rcx
  3031. vpxor %xmm10, %xmm8, %xmm8
  3032. vpsrlq $6, %xmm1, %xmm11
  3033. # rnd_1: 5 - 6
  3034. rorxq $39, %r11, %rax
  3035. addq %rbx, %r10
  3036. xorq %rcx, %rax
  3037. movq %r12, %rbx
  3038. addq %r10, %r14
  3039. xorq %r11, %rbx
  3040. vpxor %xmm11, %xmm8, %xmm8
  3041. # rnd_1: 7 - 7
  3042. andq %rbx, %rdx
  3043. addq %rax, %r10
  3044. xorq %r12, %rdx
  3045. vpaddq %xmm2, %xmm8, %xmm2
  3046. # msg_sched done: 4-7
  3047. # msg_sched: 6-7
  3048. # rnd_0: 0 - 0
  3049. rorxq $14, %r14, %rax
  3050. rorxq $18, %r14, %rcx
  3051. addq %rdx, %r10
  3052. vpalignr $8, %xmm3, %xmm4, %xmm12
  3053. vpalignr $8, %xmm7, %xmm0, %xmm13
  3054. # rnd_0: 1 - 1
  3055. addq 48(%rsp), %r9
  3056. movq %r15, %rdx
  3057. xorq %rax, %rcx
  3058. vpsrlq $0x01, %xmm12, %xmm8
  3059. vpsllq $63, %xmm12, %xmm9
  3060. # rnd_0: 2 - 2
  3061. xorq %r8, %rdx
  3062. rorxq $41, %r14, %rax
  3063. xorq %rcx, %rax
  3064. vpsrlq $8, %xmm12, %xmm10
  3065. vpsllq $56, %xmm12, %xmm11
  3066. # rnd_0: 3 - 3
  3067. andq %r14, %rdx
  3068. addq %rax, %r9
  3069. rorxq $28, %r10, %rax
  3070. vpor %xmm9, %xmm8, %xmm8
  3071. vpor %xmm11, %xmm10, %xmm10
  3072. # rnd_0: 4 - 4
  3073. rorxq $34, %r10, %rcx
  3074. xorq %r8, %rdx
  3075. xorq %rax, %rcx
  3076. vpsrlq $7, %xmm12, %xmm11
  3077. vpxor %xmm10, %xmm8, %xmm8
  3078. # rnd_0: 5 - 5
  3079. rorxq $39, %r10, %rax
  3080. addq %rdx, %r9
  3081. xorq %rcx, %rax
  3082. vpxor %xmm11, %xmm8, %xmm8
  3083. vpaddq %xmm3, %xmm13, %xmm3
  3084. # rnd_0: 6 - 7
  3085. movq %r11, %rdx
  3086. addq %r9, %r13
  3087. xorq %r10, %rdx
  3088. andq %rdx, %rbx
  3089. addq %rax, %r9
  3090. xorq %r11, %rbx
  3091. vpaddq %xmm3, %xmm8, %xmm3
  3092. # rnd_1: 0 - 0
  3093. rorxq $14, %r13, %rax
  3094. rorxq $18, %r13, %rcx
  3095. addq %rbx, %r9
  3096. vpsrlq $19, %xmm2, %xmm8
  3097. vpsllq $45, %xmm2, %xmm9
  3098. # rnd_1: 1 - 1
  3099. addq 56(%rsp), %r8
  3100. movq %r14, %rbx
  3101. xorq %rax, %rcx
  3102. vpsrlq $61, %xmm2, %xmm10
  3103. vpsllq $3, %xmm2, %xmm11
  3104. # rnd_1: 2 - 2
  3105. xorq %r15, %rbx
  3106. rorxq $41, %r13, %rax
  3107. xorq %rcx, %rax
  3108. vpor %xmm9, %xmm8, %xmm8
  3109. vpor %xmm11, %xmm10, %xmm10
  3110. # rnd_1: 3 - 4
  3111. andq %r13, %rbx
  3112. addq %rax, %r8
  3113. rorxq $28, %r9, %rax
  3114. rorxq $34, %r9, %rcx
  3115. xorq %r15, %rbx
  3116. xorq %rax, %rcx
  3117. vpxor %xmm10, %xmm8, %xmm8
  3118. vpsrlq $6, %xmm2, %xmm11
  3119. # rnd_1: 5 - 6
  3120. rorxq $39, %r9, %rax
  3121. addq %rbx, %r8
  3122. xorq %rcx, %rax
  3123. movq %r10, %rbx
  3124. addq %r8, %r12
  3125. xorq %r9, %rbx
  3126. vpxor %xmm11, %xmm8, %xmm8
  3127. # rnd_1: 7 - 7
  3128. andq %rbx, %rdx
  3129. addq %rax, %r8
  3130. xorq %r10, %rdx
  3131. vpaddq %xmm3, %xmm8, %xmm3
  3132. # msg_sched done: 6-9
  3133. # msg_sched: 8-9
  3134. # rnd_0: 0 - 0
  3135. rorxq $14, %r12, %rax
  3136. rorxq $18, %r12, %rcx
  3137. addq %rdx, %r8
  3138. vpalignr $8, %xmm4, %xmm5, %xmm12
  3139. vpalignr $8, %xmm0, %xmm1, %xmm13
  3140. # rnd_0: 1 - 1
  3141. addq 64(%rsp), %r15
  3142. movq %r13, %rdx
  3143. xorq %rax, %rcx
  3144. vpsrlq $0x01, %xmm12, %xmm8
  3145. vpsllq $63, %xmm12, %xmm9
  3146. # rnd_0: 2 - 2
  3147. xorq %r14, %rdx
  3148. rorxq $41, %r12, %rax
  3149. xorq %rcx, %rax
  3150. vpsrlq $8, %xmm12, %xmm10
  3151. vpsllq $56, %xmm12, %xmm11
  3152. # rnd_0: 3 - 3
  3153. andq %r12, %rdx
  3154. addq %rax, %r15
  3155. rorxq $28, %r8, %rax
  3156. vpor %xmm9, %xmm8, %xmm8
  3157. vpor %xmm11, %xmm10, %xmm10
  3158. # rnd_0: 4 - 4
  3159. rorxq $34, %r8, %rcx
  3160. xorq %r14, %rdx
  3161. xorq %rax, %rcx
  3162. vpsrlq $7, %xmm12, %xmm11
  3163. vpxor %xmm10, %xmm8, %xmm8
  3164. # rnd_0: 5 - 5
  3165. rorxq $39, %r8, %rax
  3166. addq %rdx, %r15
  3167. xorq %rcx, %rax
  3168. vpxor %xmm11, %xmm8, %xmm8
  3169. vpaddq %xmm4, %xmm13, %xmm4
  3170. # rnd_0: 6 - 7
  3171. movq %r9, %rdx
  3172. addq %r15, %r11
  3173. xorq %r8, %rdx
  3174. andq %rdx, %rbx
  3175. addq %rax, %r15
  3176. xorq %r9, %rbx
  3177. vpaddq %xmm4, %xmm8, %xmm4
  3178. # rnd_1: 0 - 0
  3179. rorxq $14, %r11, %rax
  3180. rorxq $18, %r11, %rcx
  3181. addq %rbx, %r15
  3182. vpsrlq $19, %xmm3, %xmm8
  3183. vpsllq $45, %xmm3, %xmm9
  3184. # rnd_1: 1 - 1
  3185. addq 72(%rsp), %r14
  3186. movq %r12, %rbx
  3187. xorq %rax, %rcx
  3188. vpsrlq $61, %xmm3, %xmm10
  3189. vpsllq $3, %xmm3, %xmm11
  3190. # rnd_1: 2 - 2
  3191. xorq %r13, %rbx
  3192. rorxq $41, %r11, %rax
  3193. xorq %rcx, %rax
  3194. vpor %xmm9, %xmm8, %xmm8
  3195. vpor %xmm11, %xmm10, %xmm10
  3196. # rnd_1: 3 - 4
  3197. andq %r11, %rbx
  3198. addq %rax, %r14
  3199. rorxq $28, %r15, %rax
  3200. rorxq $34, %r15, %rcx
  3201. xorq %r13, %rbx
  3202. xorq %rax, %rcx
  3203. vpxor %xmm10, %xmm8, %xmm8
  3204. vpsrlq $6, %xmm3, %xmm11
  3205. # rnd_1: 5 - 6
  3206. rorxq $39, %r15, %rax
  3207. addq %rbx, %r14
  3208. xorq %rcx, %rax
  3209. movq %r8, %rbx
  3210. addq %r14, %r10
  3211. xorq %r15, %rbx
  3212. vpxor %xmm11, %xmm8, %xmm8
  3213. # rnd_1: 7 - 7
  3214. andq %rbx, %rdx
  3215. addq %rax, %r14
  3216. xorq %r8, %rdx
  3217. vpaddq %xmm4, %xmm8, %xmm4
  3218. # msg_sched done: 8-11
  3219. # msg_sched: 10-11
  3220. # rnd_0: 0 - 0
  3221. rorxq $14, %r10, %rax
  3222. rorxq $18, %r10, %rcx
  3223. addq %rdx, %r14
  3224. vpalignr $8, %xmm5, %xmm6, %xmm12
  3225. vpalignr $8, %xmm1, %xmm2, %xmm13
  3226. # rnd_0: 1 - 1
  3227. addq 80(%rsp), %r13
  3228. movq %r11, %rdx
  3229. xorq %rax, %rcx
  3230. vpsrlq $0x01, %xmm12, %xmm8
  3231. vpsllq $63, %xmm12, %xmm9
  3232. # rnd_0: 2 - 2
  3233. xorq %r12, %rdx
  3234. rorxq $41, %r10, %rax
  3235. xorq %rcx, %rax
  3236. vpsrlq $8, %xmm12, %xmm10
  3237. vpsllq $56, %xmm12, %xmm11
  3238. # rnd_0: 3 - 3
  3239. andq %r10, %rdx
  3240. addq %rax, %r13
  3241. rorxq $28, %r14, %rax
  3242. vpor %xmm9, %xmm8, %xmm8
  3243. vpor %xmm11, %xmm10, %xmm10
  3244. # rnd_0: 4 - 4
  3245. rorxq $34, %r14, %rcx
  3246. xorq %r12, %rdx
  3247. xorq %rax, %rcx
  3248. vpsrlq $7, %xmm12, %xmm11
  3249. vpxor %xmm10, %xmm8, %xmm8
  3250. # rnd_0: 5 - 5
  3251. rorxq $39, %r14, %rax
  3252. addq %rdx, %r13
  3253. xorq %rcx, %rax
  3254. vpxor %xmm11, %xmm8, %xmm8
  3255. vpaddq %xmm5, %xmm13, %xmm5
  3256. # rnd_0: 6 - 7
  3257. movq %r15, %rdx
  3258. addq %r13, %r9
  3259. xorq %r14, %rdx
  3260. andq %rdx, %rbx
  3261. addq %rax, %r13
  3262. xorq %r15, %rbx
  3263. vpaddq %xmm5, %xmm8, %xmm5
  3264. # rnd_1: 0 - 0
  3265. rorxq $14, %r9, %rax
  3266. rorxq $18, %r9, %rcx
  3267. addq %rbx, %r13
  3268. vpsrlq $19, %xmm4, %xmm8
  3269. vpsllq $45, %xmm4, %xmm9
  3270. # rnd_1: 1 - 1
  3271. addq 88(%rsp), %r12
  3272. movq %r10, %rbx
  3273. xorq %rax, %rcx
  3274. vpsrlq $61, %xmm4, %xmm10
  3275. vpsllq $3, %xmm4, %xmm11
  3276. # rnd_1: 2 - 2
  3277. xorq %r11, %rbx
  3278. rorxq $41, %r9, %rax
  3279. xorq %rcx, %rax
  3280. vpor %xmm9, %xmm8, %xmm8
  3281. vpor %xmm11, %xmm10, %xmm10
  3282. # rnd_1: 3 - 4
  3283. andq %r9, %rbx
  3284. addq %rax, %r12
  3285. rorxq $28, %r13, %rax
  3286. rorxq $34, %r13, %rcx
  3287. xorq %r11, %rbx
  3288. xorq %rax, %rcx
  3289. vpxor %xmm10, %xmm8, %xmm8
  3290. vpsrlq $6, %xmm4, %xmm11
  3291. # rnd_1: 5 - 6
  3292. rorxq $39, %r13, %rax
  3293. addq %rbx, %r12
  3294. xorq %rcx, %rax
  3295. movq %r14, %rbx
  3296. addq %r12, %r8
  3297. xorq %r13, %rbx
  3298. vpxor %xmm11, %xmm8, %xmm8
  3299. # rnd_1: 7 - 7
  3300. andq %rbx, %rdx
  3301. addq %rax, %r12
  3302. xorq %r14, %rdx
  3303. vpaddq %xmm5, %xmm8, %xmm5
  3304. # msg_sched done: 10-13
  3305. # msg_sched: 12-13
  3306. # rnd_0: 0 - 0
  3307. rorxq $14, %r8, %rax
  3308. rorxq $18, %r8, %rcx
  3309. addq %rdx, %r12
  3310. vpalignr $8, %xmm6, %xmm7, %xmm12
  3311. vpalignr $8, %xmm2, %xmm3, %xmm13
  3312. # rnd_0: 1 - 1
  3313. addq 96(%rsp), %r11
  3314. movq %r9, %rdx
  3315. xorq %rax, %rcx
  3316. vpsrlq $0x01, %xmm12, %xmm8
  3317. vpsllq $63, %xmm12, %xmm9
  3318. # rnd_0: 2 - 2
  3319. xorq %r10, %rdx
  3320. rorxq $41, %r8, %rax
  3321. xorq %rcx, %rax
  3322. vpsrlq $8, %xmm12, %xmm10
  3323. vpsllq $56, %xmm12, %xmm11
  3324. # rnd_0: 3 - 3
  3325. andq %r8, %rdx
  3326. addq %rax, %r11
  3327. rorxq $28, %r12, %rax
  3328. vpor %xmm9, %xmm8, %xmm8
  3329. vpor %xmm11, %xmm10, %xmm10
  3330. # rnd_0: 4 - 4
  3331. rorxq $34, %r12, %rcx
  3332. xorq %r10, %rdx
  3333. xorq %rax, %rcx
  3334. vpsrlq $7, %xmm12, %xmm11
  3335. vpxor %xmm10, %xmm8, %xmm8
  3336. # rnd_0: 5 - 5
  3337. rorxq $39, %r12, %rax
  3338. addq %rdx, %r11
  3339. xorq %rcx, %rax
  3340. vpxor %xmm11, %xmm8, %xmm8
  3341. vpaddq %xmm6, %xmm13, %xmm6
  3342. # rnd_0: 6 - 7
  3343. movq %r13, %rdx
  3344. addq %r11, %r15
  3345. xorq %r12, %rdx
  3346. andq %rdx, %rbx
  3347. addq %rax, %r11
  3348. xorq %r13, %rbx
  3349. vpaddq %xmm6, %xmm8, %xmm6
  3350. # rnd_1: 0 - 0
  3351. rorxq $14, %r15, %rax
  3352. rorxq $18, %r15, %rcx
  3353. addq %rbx, %r11
  3354. vpsrlq $19, %xmm5, %xmm8
  3355. vpsllq $45, %xmm5, %xmm9
  3356. # rnd_1: 1 - 1
  3357. addq 104(%rsp), %r10
  3358. movq %r8, %rbx
  3359. xorq %rax, %rcx
  3360. vpsrlq $61, %xmm5, %xmm10
  3361. vpsllq $3, %xmm5, %xmm11
  3362. # rnd_1: 2 - 2
  3363. xorq %r9, %rbx
  3364. rorxq $41, %r15, %rax
  3365. xorq %rcx, %rax
  3366. vpor %xmm9, %xmm8, %xmm8
  3367. vpor %xmm11, %xmm10, %xmm10
  3368. # rnd_1: 3 - 4
  3369. andq %r15, %rbx
  3370. addq %rax, %r10
  3371. rorxq $28, %r11, %rax
  3372. rorxq $34, %r11, %rcx
  3373. xorq %r9, %rbx
  3374. xorq %rax, %rcx
  3375. vpxor %xmm10, %xmm8, %xmm8
  3376. vpsrlq $6, %xmm5, %xmm11
  3377. # rnd_1: 5 - 6
  3378. rorxq $39, %r11, %rax
  3379. addq %rbx, %r10
  3380. xorq %rcx, %rax
  3381. movq %r12, %rbx
  3382. addq %r10, %r14
  3383. xorq %r11, %rbx
  3384. vpxor %xmm11, %xmm8, %xmm8
  3385. # rnd_1: 7 - 7
  3386. andq %rbx, %rdx
  3387. addq %rax, %r10
  3388. xorq %r12, %rdx
  3389. vpaddq %xmm6, %xmm8, %xmm6
  3390. # msg_sched done: 12-15
  3391. # msg_sched: 14-15
  3392. # rnd_0: 0 - 0
  3393. rorxq $14, %r14, %rax
  3394. rorxq $18, %r14, %rcx
  3395. addq %rdx, %r10
  3396. vpalignr $8, %xmm7, %xmm0, %xmm12
  3397. vpalignr $8, %xmm3, %xmm4, %xmm13
  3398. # rnd_0: 1 - 1
  3399. addq 112(%rsp), %r9
  3400. movq %r15, %rdx
  3401. xorq %rax, %rcx
  3402. vpsrlq $0x01, %xmm12, %xmm8
  3403. vpsllq $63, %xmm12, %xmm9
  3404. # rnd_0: 2 - 2
  3405. xorq %r8, %rdx
  3406. rorxq $41, %r14, %rax
  3407. xorq %rcx, %rax
  3408. vpsrlq $8, %xmm12, %xmm10
  3409. vpsllq $56, %xmm12, %xmm11
  3410. # rnd_0: 3 - 3
  3411. andq %r14, %rdx
  3412. addq %rax, %r9
  3413. rorxq $28, %r10, %rax
  3414. vpor %xmm9, %xmm8, %xmm8
  3415. vpor %xmm11, %xmm10, %xmm10
  3416. # rnd_0: 4 - 4
  3417. rorxq $34, %r10, %rcx
  3418. xorq %r8, %rdx
  3419. xorq %rax, %rcx
  3420. vpsrlq $7, %xmm12, %xmm11
  3421. vpxor %xmm10, %xmm8, %xmm8
  3422. # rnd_0: 5 - 5
  3423. rorxq $39, %r10, %rax
  3424. addq %rdx, %r9
  3425. xorq %rcx, %rax
  3426. vpxor %xmm11, %xmm8, %xmm8
  3427. vpaddq %xmm7, %xmm13, %xmm7
  3428. # rnd_0: 6 - 7
  3429. movq %r11, %rdx
  3430. addq %r9, %r13
  3431. xorq %r10, %rdx
  3432. andq %rdx, %rbx
  3433. addq %rax, %r9
  3434. xorq %r11, %rbx
  3435. vpaddq %xmm7, %xmm8, %xmm7
  3436. # rnd_1: 0 - 0
  3437. rorxq $14, %r13, %rax
  3438. rorxq $18, %r13, %rcx
  3439. addq %rbx, %r9
  3440. vpsrlq $19, %xmm6, %xmm8
  3441. vpsllq $45, %xmm6, %xmm9
  3442. # rnd_1: 1 - 1
  3443. addq 120(%rsp), %r8
  3444. movq %r14, %rbx
  3445. xorq %rax, %rcx
  3446. vpsrlq $61, %xmm6, %xmm10
  3447. vpsllq $3, %xmm6, %xmm11
  3448. # rnd_1: 2 - 2
  3449. xorq %r15, %rbx
  3450. rorxq $41, %r13, %rax
  3451. xorq %rcx, %rax
  3452. vpor %xmm9, %xmm8, %xmm8
  3453. vpor %xmm11, %xmm10, %xmm10
  3454. # rnd_1: 3 - 4
  3455. andq %r13, %rbx
  3456. addq %rax, %r8
  3457. rorxq $28, %r9, %rax
  3458. rorxq $34, %r9, %rcx
  3459. xorq %r15, %rbx
  3460. xorq %rax, %rcx
  3461. vpxor %xmm10, %xmm8, %xmm8
  3462. vpsrlq $6, %xmm6, %xmm11
  3463. # rnd_1: 5 - 6
  3464. rorxq $39, %r9, %rax
  3465. addq %rbx, %r8
  3466. xorq %rcx, %rax
  3467. movq %r10, %rbx
  3468. addq %r8, %r12
  3469. xorq %r9, %rbx
  3470. vpxor %xmm11, %xmm8, %xmm8
  3471. # rnd_1: 7 - 7
  3472. andq %rbx, %rdx
  3473. addq %rax, %r8
  3474. xorq %r10, %rdx
  3475. vpaddq %xmm7, %xmm8, %xmm7
  3476. # msg_sched done: 14-17
  3477. vpaddq (%rsi), %xmm0, %xmm8
  3478. vpaddq 16(%rsi), %xmm1, %xmm9
  3479. vmovdqu %xmm8, (%rsp)
  3480. vmovdqu %xmm9, 16(%rsp)
  3481. vpaddq 32(%rsi), %xmm2, %xmm8
  3482. vpaddq 48(%rsi), %xmm3, %xmm9
  3483. vmovdqu %xmm8, 32(%rsp)
  3484. vmovdqu %xmm9, 48(%rsp)
  3485. vpaddq 64(%rsi), %xmm4, %xmm8
  3486. vpaddq 80(%rsi), %xmm5, %xmm9
  3487. vmovdqu %xmm8, 64(%rsp)
  3488. vmovdqu %xmm9, 80(%rsp)
  3489. vpaddq 96(%rsi), %xmm6, %xmm8
  3490. vpaddq 112(%rsi), %xmm7, %xmm9
  3491. vmovdqu %xmm8, 96(%rsp)
  3492. vmovdqu %xmm9, 112(%rsp)
  3493. subl $0x01, 128(%rsp)
  3494. jne L_sha256_len_avx1_rorx_start
  3495. # rnd_all_2: 0-1
  3496. # rnd_0: 0 - 7
  3497. rorxq $14, %r12, %rax
  3498. rorxq $18, %r12, %rcx
  3499. addq %rdx, %r8
  3500. addq (%rsp), %r15
  3501. movq %r13, %rdx
  3502. xorq %rax, %rcx
  3503. xorq %r14, %rdx
  3504. rorxq $41, %r12, %rax
  3505. xorq %rcx, %rax
  3506. andq %r12, %rdx
  3507. addq %rax, %r15
  3508. rorxq $28, %r8, %rax
  3509. rorxq $34, %r8, %rcx
  3510. xorq %r14, %rdx
  3511. xorq %rax, %rcx
  3512. rorxq $39, %r8, %rax
  3513. addq %rdx, %r15
  3514. xorq %rcx, %rax
  3515. movq %r9, %rdx
  3516. addq %r15, %r11
  3517. xorq %r8, %rdx
  3518. andq %rdx, %rbx
  3519. addq %rax, %r15
  3520. xorq %r9, %rbx
  3521. # rnd_1: 0 - 7
  3522. rorxq $14, %r11, %rax
  3523. rorxq $18, %r11, %rcx
  3524. addq %rbx, %r15
  3525. addq 8(%rsp), %r14
  3526. movq %r12, %rbx
  3527. xorq %rax, %rcx
  3528. xorq %r13, %rbx
  3529. rorxq $41, %r11, %rax
  3530. xorq %rcx, %rax
  3531. andq %r11, %rbx
  3532. addq %rax, %r14
  3533. rorxq $28, %r15, %rax
  3534. rorxq $34, %r15, %rcx
  3535. xorq %r13, %rbx
  3536. xorq %rax, %rcx
  3537. rorxq $39, %r15, %rax
  3538. addq %rbx, %r14
  3539. xorq %rcx, %rax
  3540. movq %r8, %rbx
  3541. addq %r14, %r10
  3542. xorq %r15, %rbx
  3543. andq %rbx, %rdx
  3544. addq %rax, %r14
  3545. xorq %r8, %rdx
  3546. # rnd_all_2: 2-3
  3547. # rnd_0: 0 - 7
  3548. rorxq $14, %r10, %rax
  3549. rorxq $18, %r10, %rcx
  3550. addq %rdx, %r14
  3551. addq 16(%rsp), %r13
  3552. movq %r11, %rdx
  3553. xorq %rax, %rcx
  3554. xorq %r12, %rdx
  3555. rorxq $41, %r10, %rax
  3556. xorq %rcx, %rax
  3557. andq %r10, %rdx
  3558. addq %rax, %r13
  3559. rorxq $28, %r14, %rax
  3560. rorxq $34, %r14, %rcx
  3561. xorq %r12, %rdx
  3562. xorq %rax, %rcx
  3563. rorxq $39, %r14, %rax
  3564. addq %rdx, %r13
  3565. xorq %rcx, %rax
  3566. movq %r15, %rdx
  3567. addq %r13, %r9
  3568. xorq %r14, %rdx
  3569. andq %rdx, %rbx
  3570. addq %rax, %r13
  3571. xorq %r15, %rbx
  3572. # rnd_1: 0 - 7
  3573. rorxq $14, %r9, %rax
  3574. rorxq $18, %r9, %rcx
  3575. addq %rbx, %r13
  3576. addq 24(%rsp), %r12
  3577. movq %r10, %rbx
  3578. xorq %rax, %rcx
  3579. xorq %r11, %rbx
  3580. rorxq $41, %r9, %rax
  3581. xorq %rcx, %rax
  3582. andq %r9, %rbx
  3583. addq %rax, %r12
  3584. rorxq $28, %r13, %rax
  3585. rorxq $34, %r13, %rcx
  3586. xorq %r11, %rbx
  3587. xorq %rax, %rcx
  3588. rorxq $39, %r13, %rax
  3589. addq %rbx, %r12
  3590. xorq %rcx, %rax
  3591. movq %r14, %rbx
  3592. addq %r12, %r8
  3593. xorq %r13, %rbx
  3594. andq %rbx, %rdx
  3595. addq %rax, %r12
  3596. xorq %r14, %rdx
  3597. # rnd_all_2: 4-5
  3598. # rnd_0: 0 - 7
  3599. rorxq $14, %r8, %rax
  3600. rorxq $18, %r8, %rcx
  3601. addq %rdx, %r12
  3602. addq 32(%rsp), %r11
  3603. movq %r9, %rdx
  3604. xorq %rax, %rcx
  3605. xorq %r10, %rdx
  3606. rorxq $41, %r8, %rax
  3607. xorq %rcx, %rax
  3608. andq %r8, %rdx
  3609. addq %rax, %r11
  3610. rorxq $28, %r12, %rax
  3611. rorxq $34, %r12, %rcx
  3612. xorq %r10, %rdx
  3613. xorq %rax, %rcx
  3614. rorxq $39, %r12, %rax
  3615. addq %rdx, %r11
  3616. xorq %rcx, %rax
  3617. movq %r13, %rdx
  3618. addq %r11, %r15
  3619. xorq %r12, %rdx
  3620. andq %rdx, %rbx
  3621. addq %rax, %r11
  3622. xorq %r13, %rbx
  3623. # rnd_1: 0 - 7
  3624. rorxq $14, %r15, %rax
  3625. rorxq $18, %r15, %rcx
  3626. addq %rbx, %r11
  3627. addq 40(%rsp), %r10
  3628. movq %r8, %rbx
  3629. xorq %rax, %rcx
  3630. xorq %r9, %rbx
  3631. rorxq $41, %r15, %rax
  3632. xorq %rcx, %rax
  3633. andq %r15, %rbx
  3634. addq %rax, %r10
  3635. rorxq $28, %r11, %rax
  3636. rorxq $34, %r11, %rcx
  3637. xorq %r9, %rbx
  3638. xorq %rax, %rcx
  3639. rorxq $39, %r11, %rax
  3640. addq %rbx, %r10
  3641. xorq %rcx, %rax
  3642. movq %r12, %rbx
  3643. addq %r10, %r14
  3644. xorq %r11, %rbx
  3645. andq %rbx, %rdx
  3646. addq %rax, %r10
  3647. xorq %r12, %rdx
  3648. # rnd_all_2: 6-7
  3649. # rnd_0: 0 - 7
  3650. rorxq $14, %r14, %rax
  3651. rorxq $18, %r14, %rcx
  3652. addq %rdx, %r10
  3653. addq 48(%rsp), %r9
  3654. movq %r15, %rdx
  3655. xorq %rax, %rcx
  3656. xorq %r8, %rdx
  3657. rorxq $41, %r14, %rax
  3658. xorq %rcx, %rax
  3659. andq %r14, %rdx
  3660. addq %rax, %r9
  3661. rorxq $28, %r10, %rax
  3662. rorxq $34, %r10, %rcx
  3663. xorq %r8, %rdx
  3664. xorq %rax, %rcx
  3665. rorxq $39, %r10, %rax
  3666. addq %rdx, %r9
  3667. xorq %rcx, %rax
  3668. movq %r11, %rdx
  3669. addq %r9, %r13
  3670. xorq %r10, %rdx
  3671. andq %rdx, %rbx
  3672. addq %rax, %r9
  3673. xorq %r11, %rbx
  3674. # rnd_1: 0 - 7
  3675. rorxq $14, %r13, %rax
  3676. rorxq $18, %r13, %rcx
  3677. addq %rbx, %r9
  3678. addq 56(%rsp), %r8
  3679. movq %r14, %rbx
  3680. xorq %rax, %rcx
  3681. xorq %r15, %rbx
  3682. rorxq $41, %r13, %rax
  3683. xorq %rcx, %rax
  3684. andq %r13, %rbx
  3685. addq %rax, %r8
  3686. rorxq $28, %r9, %rax
  3687. rorxq $34, %r9, %rcx
  3688. xorq %r15, %rbx
  3689. xorq %rax, %rcx
  3690. rorxq $39, %r9, %rax
  3691. addq %rbx, %r8
  3692. xorq %rcx, %rax
  3693. movq %r10, %rbx
  3694. addq %r8, %r12
  3695. xorq %r9, %rbx
  3696. andq %rbx, %rdx
  3697. addq %rax, %r8
  3698. xorq %r10, %rdx
  3699. # rnd_all_2: 8-9
  3700. # rnd_0: 0 - 7
  3701. rorxq $14, %r12, %rax
  3702. rorxq $18, %r12, %rcx
  3703. addq %rdx, %r8
  3704. addq 64(%rsp), %r15
  3705. movq %r13, %rdx
  3706. xorq %rax, %rcx
  3707. xorq %r14, %rdx
  3708. rorxq $41, %r12, %rax
  3709. xorq %rcx, %rax
  3710. andq %r12, %rdx
  3711. addq %rax, %r15
  3712. rorxq $28, %r8, %rax
  3713. rorxq $34, %r8, %rcx
  3714. xorq %r14, %rdx
  3715. xorq %rax, %rcx
  3716. rorxq $39, %r8, %rax
  3717. addq %rdx, %r15
  3718. xorq %rcx, %rax
  3719. movq %r9, %rdx
  3720. addq %r15, %r11
  3721. xorq %r8, %rdx
  3722. andq %rdx, %rbx
  3723. addq %rax, %r15
  3724. xorq %r9, %rbx
  3725. # rnd_1: 0 - 7
  3726. rorxq $14, %r11, %rax
  3727. rorxq $18, %r11, %rcx
  3728. addq %rbx, %r15
  3729. addq 72(%rsp), %r14
  3730. movq %r12, %rbx
  3731. xorq %rax, %rcx
  3732. xorq %r13, %rbx
  3733. rorxq $41, %r11, %rax
  3734. xorq %rcx, %rax
  3735. andq %r11, %rbx
  3736. addq %rax, %r14
  3737. rorxq $28, %r15, %rax
  3738. rorxq $34, %r15, %rcx
  3739. xorq %r13, %rbx
  3740. xorq %rax, %rcx
  3741. rorxq $39, %r15, %rax
  3742. addq %rbx, %r14
  3743. xorq %rcx, %rax
  3744. movq %r8, %rbx
  3745. addq %r14, %r10
  3746. xorq %r15, %rbx
  3747. andq %rbx, %rdx
  3748. addq %rax, %r14
  3749. xorq %r8, %rdx
  3750. # rnd_all_2: 10-11
  3751. # rnd_0: 0 - 7
  3752. rorxq $14, %r10, %rax
  3753. rorxq $18, %r10, %rcx
  3754. addq %rdx, %r14
  3755. addq 80(%rsp), %r13
  3756. movq %r11, %rdx
  3757. xorq %rax, %rcx
  3758. xorq %r12, %rdx
  3759. rorxq $41, %r10, %rax
  3760. xorq %rcx, %rax
  3761. andq %r10, %rdx
  3762. addq %rax, %r13
  3763. rorxq $28, %r14, %rax
  3764. rorxq $34, %r14, %rcx
  3765. xorq %r12, %rdx
  3766. xorq %rax, %rcx
  3767. rorxq $39, %r14, %rax
  3768. addq %rdx, %r13
  3769. xorq %rcx, %rax
  3770. movq %r15, %rdx
  3771. addq %r13, %r9
  3772. xorq %r14, %rdx
  3773. andq %rdx, %rbx
  3774. addq %rax, %r13
  3775. xorq %r15, %rbx
  3776. # rnd_1: 0 - 7
  3777. rorxq $14, %r9, %rax
  3778. rorxq $18, %r9, %rcx
  3779. addq %rbx, %r13
  3780. addq 88(%rsp), %r12
  3781. movq %r10, %rbx
  3782. xorq %rax, %rcx
  3783. xorq %r11, %rbx
  3784. rorxq $41, %r9, %rax
  3785. xorq %rcx, %rax
  3786. andq %r9, %rbx
  3787. addq %rax, %r12
  3788. rorxq $28, %r13, %rax
  3789. rorxq $34, %r13, %rcx
  3790. xorq %r11, %rbx
  3791. xorq %rax, %rcx
  3792. rorxq $39, %r13, %rax
  3793. addq %rbx, %r12
  3794. xorq %rcx, %rax
  3795. movq %r14, %rbx
  3796. addq %r12, %r8
  3797. xorq %r13, %rbx
  3798. andq %rbx, %rdx
  3799. addq %rax, %r12
  3800. xorq %r14, %rdx
  3801. # rnd_all_2: 12-13
  3802. # rnd_0: 0 - 7
  3803. rorxq $14, %r8, %rax
  3804. rorxq $18, %r8, %rcx
  3805. addq %rdx, %r12
  3806. addq 96(%rsp), %r11
  3807. movq %r9, %rdx
  3808. xorq %rax, %rcx
  3809. xorq %r10, %rdx
  3810. rorxq $41, %r8, %rax
  3811. xorq %rcx, %rax
  3812. andq %r8, %rdx
  3813. addq %rax, %r11
  3814. rorxq $28, %r12, %rax
  3815. rorxq $34, %r12, %rcx
  3816. xorq %r10, %rdx
  3817. xorq %rax, %rcx
  3818. rorxq $39, %r12, %rax
  3819. addq %rdx, %r11
  3820. xorq %rcx, %rax
  3821. movq %r13, %rdx
  3822. addq %r11, %r15
  3823. xorq %r12, %rdx
  3824. andq %rdx, %rbx
  3825. addq %rax, %r11
  3826. xorq %r13, %rbx
  3827. # rnd_1: 0 - 7
  3828. rorxq $14, %r15, %rax
  3829. rorxq $18, %r15, %rcx
  3830. addq %rbx, %r11
  3831. addq 104(%rsp), %r10
  3832. movq %r8, %rbx
  3833. xorq %rax, %rcx
  3834. xorq %r9, %rbx
  3835. rorxq $41, %r15, %rax
  3836. xorq %rcx, %rax
  3837. andq %r15, %rbx
  3838. addq %rax, %r10
  3839. rorxq $28, %r11, %rax
  3840. rorxq $34, %r11, %rcx
  3841. xorq %r9, %rbx
  3842. xorq %rax, %rcx
  3843. rorxq $39, %r11, %rax
  3844. addq %rbx, %r10
  3845. xorq %rcx, %rax
  3846. movq %r12, %rbx
  3847. addq %r10, %r14
  3848. xorq %r11, %rbx
  3849. andq %rbx, %rdx
  3850. addq %rax, %r10
  3851. xorq %r12, %rdx
  3852. # rnd_all_2: 14-15
  3853. # rnd_0: 0 - 7
  3854. rorxq $14, %r14, %rax
  3855. rorxq $18, %r14, %rcx
  3856. addq %rdx, %r10
  3857. addq 112(%rsp), %r9
  3858. movq %r15, %rdx
  3859. xorq %rax, %rcx
  3860. xorq %r8, %rdx
  3861. rorxq $41, %r14, %rax
  3862. xorq %rcx, %rax
  3863. andq %r14, %rdx
  3864. addq %rax, %r9
  3865. rorxq $28, %r10, %rax
  3866. rorxq $34, %r10, %rcx
  3867. xorq %r8, %rdx
  3868. xorq %rax, %rcx
  3869. rorxq $39, %r10, %rax
  3870. addq %rdx, %r9
  3871. xorq %rcx, %rax
  3872. movq %r11, %rdx
  3873. addq %r9, %r13
  3874. xorq %r10, %rdx
  3875. andq %rdx, %rbx
  3876. addq %rax, %r9
  3877. xorq %r11, %rbx
  3878. # rnd_1: 0 - 7
  3879. rorxq $14, %r13, %rax
  3880. rorxq $18, %r13, %rcx
  3881. addq %rbx, %r9
  3882. addq 120(%rsp), %r8
  3883. movq %r14, %rbx
  3884. xorq %rax, %rcx
  3885. xorq %r15, %rbx
  3886. rorxq $41, %r13, %rax
  3887. xorq %rcx, %rax
  3888. andq %r13, %rbx
  3889. addq %rax, %r8
  3890. rorxq $28, %r9, %rax
  3891. rorxq $34, %r9, %rcx
  3892. xorq %r15, %rbx
  3893. xorq %rax, %rcx
  3894. rorxq $39, %r9, %rax
  3895. addq %rbx, %r8
  3896. xorq %rcx, %rax
  3897. movq %r10, %rbx
  3898. addq %r8, %r12
  3899. xorq %r9, %rbx
  3900. andq %rbx, %rdx
  3901. addq %rax, %r8
  3902. xorq %r10, %rdx
  3903. addq %rdx, %r8
  3904. addq %r8, (%rdi)
  3905. addq %r9, 8(%rdi)
  3906. addq %r10, 16(%rdi)
  3907. addq %r11, 24(%rdi)
  3908. addq %r12, 32(%rdi)
  3909. addq %r13, 40(%rdi)
  3910. addq %r14, 48(%rdi)
  3911. addq %r15, 56(%rdi)
  3912. xorq %rax, %rax
  3913. vzeroupper
  3914. addq $0x88, %rsp
  3915. popq %r15
  3916. popq %r14
  3917. popq %r13
  3918. popq %r12
  3919. popq %rbx
  3920. repz retq
  3921. #ifndef __APPLE__
  3922. .size Transform_Sha512_AVX1_RORX,.-Transform_Sha512_AVX1_RORX
  3923. #endif /* __APPLE__ */
  3924. #ifndef __APPLE__
  3925. .text
  3926. .globl Transform_Sha512_AVX1_RORX_Len
  3927. .type Transform_Sha512_AVX1_RORX_Len,@function
  3928. .align 16
  3929. Transform_Sha512_AVX1_RORX_Len:
  3930. #else
  3931. .section __TEXT,__text
  3932. .globl _Transform_Sha512_AVX1_RORX_Len
  3933. .p2align 4
  3934. _Transform_Sha512_AVX1_RORX_Len:
  3935. #endif /* __APPLE__ */
  3936. pushq %rbx
  3937. pushq %r12
  3938. pushq %r13
  3939. pushq %r14
  3940. pushq %r15
  3941. pushq %rbp
  3942. movq %rsi, %rbp
  3943. subq $0x90, %rsp
  3944. movq 224(%rdi), %rsi
  3945. leaq L_avx1_rorx_sha512_k(%rip), %rcx
  3946. vmovdqa L_avx1_rorx_sha512_flip_mask(%rip), %xmm14
  3947. movq (%rdi), %r8
  3948. movq 8(%rdi), %r9
  3949. movq 16(%rdi), %r10
  3950. movq 24(%rdi), %r11
  3951. movq 32(%rdi), %r12
  3952. movq 40(%rdi), %r13
  3953. movq 48(%rdi), %r14
  3954. movq 56(%rdi), %r15
  3955. # Start of loop processing a block
  3956. L_sha512_len_avx1_rorx_begin:
  3957. vmovdqu (%rsi), %xmm0
  3958. vmovdqu 16(%rsi), %xmm1
  3959. vpshufb %xmm14, %xmm0, %xmm0
  3960. vpshufb %xmm14, %xmm1, %xmm1
  3961. vmovdqu 32(%rsi), %xmm2
  3962. vmovdqu 48(%rsi), %xmm3
  3963. vpshufb %xmm14, %xmm2, %xmm2
  3964. vpshufb %xmm14, %xmm3, %xmm3
  3965. vmovdqu 64(%rsi), %xmm4
  3966. vmovdqu 80(%rsi), %xmm5
  3967. vpshufb %xmm14, %xmm4, %xmm4
  3968. vpshufb %xmm14, %xmm5, %xmm5
  3969. vmovdqu 96(%rsi), %xmm6
  3970. vmovdqu 112(%rsi), %xmm7
  3971. vpshufb %xmm14, %xmm6, %xmm6
  3972. vpshufb %xmm14, %xmm7, %xmm7
  3973. movl $4, 128(%rsp)
  3974. movq %r9, %rbx
  3975. xorq %rdx, %rdx
  3976. xorq %r10, %rbx
  3977. vpaddq (%rcx), %xmm0, %xmm8
  3978. vpaddq 16(%rcx), %xmm1, %xmm9
  3979. vmovdqu %xmm8, (%rsp)
  3980. vmovdqu %xmm9, 16(%rsp)
  3981. vpaddq 32(%rcx), %xmm2, %xmm8
  3982. vpaddq 48(%rcx), %xmm3, %xmm9
  3983. vmovdqu %xmm8, 32(%rsp)
  3984. vmovdqu %xmm9, 48(%rsp)
  3985. vpaddq 64(%rcx), %xmm4, %xmm8
  3986. vpaddq 80(%rcx), %xmm5, %xmm9
  3987. vmovdqu %xmm8, 64(%rsp)
  3988. vmovdqu %xmm9, 80(%rsp)
  3989. vpaddq 96(%rcx), %xmm6, %xmm8
  3990. vpaddq 112(%rcx), %xmm7, %xmm9
  3991. vmovdqu %xmm8, 96(%rsp)
  3992. vmovdqu %xmm9, 112(%rsp)
  3993. # Start of 16 rounds
  3994. L_sha512_len_avx1_rorx_start:
  3995. addq $0x80, %rcx
  3996. movq %rcx, 136(%rsp)
  3997. # msg_sched: 0-1
  3998. # rnd_0: 0 - 0
  3999. rorxq $14, %r12, %rax
  4000. rorxq $18, %r12, %rcx
  4001. addq %rdx, %r8
  4002. vpalignr $8, %xmm0, %xmm1, %xmm12
  4003. vpalignr $8, %xmm4, %xmm5, %xmm13
  4004. # rnd_0: 1 - 1
  4005. addq (%rsp), %r15
  4006. movq %r13, %rdx
  4007. xorq %rax, %rcx
  4008. vpsrlq $0x01, %xmm12, %xmm8
  4009. vpsllq $63, %xmm12, %xmm9
  4010. # rnd_0: 2 - 2
  4011. xorq %r14, %rdx
  4012. rorxq $41, %r12, %rax
  4013. xorq %rcx, %rax
  4014. vpsrlq $8, %xmm12, %xmm10
  4015. vpsllq $56, %xmm12, %xmm11
  4016. # rnd_0: 3 - 3
  4017. andq %r12, %rdx
  4018. addq %rax, %r15
  4019. rorxq $28, %r8, %rax
  4020. vpor %xmm9, %xmm8, %xmm8
  4021. vpor %xmm11, %xmm10, %xmm10
  4022. # rnd_0: 4 - 4
  4023. rorxq $34, %r8, %rcx
  4024. xorq %r14, %rdx
  4025. xorq %rax, %rcx
  4026. vpsrlq $7, %xmm12, %xmm11
  4027. vpxor %xmm10, %xmm8, %xmm8
  4028. # rnd_0: 5 - 5
  4029. rorxq $39, %r8, %rax
  4030. addq %rdx, %r15
  4031. xorq %rcx, %rax
  4032. vpxor %xmm11, %xmm8, %xmm8
  4033. vpaddq %xmm0, %xmm13, %xmm0
  4034. # rnd_0: 6 - 7
  4035. movq %r9, %rdx
  4036. addq %r15, %r11
  4037. xorq %r8, %rdx
  4038. andq %rdx, %rbx
  4039. addq %rax, %r15
  4040. xorq %r9, %rbx
  4041. vpaddq %xmm0, %xmm8, %xmm0
  4042. # rnd_1: 0 - 0
  4043. rorxq $14, %r11, %rax
  4044. rorxq $18, %r11, %rcx
  4045. addq %rbx, %r15
  4046. vpsrlq $19, %xmm7, %xmm8
  4047. vpsllq $45, %xmm7, %xmm9
  4048. # rnd_1: 1 - 1
  4049. addq 8(%rsp), %r14
  4050. movq %r12, %rbx
  4051. xorq %rax, %rcx
  4052. vpsrlq $61, %xmm7, %xmm10
  4053. vpsllq $3, %xmm7, %xmm11
  4054. # rnd_1: 2 - 2
  4055. xorq %r13, %rbx
  4056. rorxq $41, %r11, %rax
  4057. xorq %rcx, %rax
  4058. vpor %xmm9, %xmm8, %xmm8
  4059. vpor %xmm11, %xmm10, %xmm10
  4060. # rnd_1: 3 - 4
  4061. andq %r11, %rbx
  4062. addq %rax, %r14
  4063. rorxq $28, %r15, %rax
  4064. rorxq $34, %r15, %rcx
  4065. xorq %r13, %rbx
  4066. xorq %rax, %rcx
  4067. vpxor %xmm10, %xmm8, %xmm8
  4068. vpsrlq $6, %xmm7, %xmm11
  4069. # rnd_1: 5 - 6
  4070. rorxq $39, %r15, %rax
  4071. addq %rbx, %r14
  4072. xorq %rcx, %rax
  4073. movq %r8, %rbx
  4074. addq %r14, %r10
  4075. xorq %r15, %rbx
  4076. vpxor %xmm11, %xmm8, %xmm8
  4077. # rnd_1: 7 - 7
  4078. andq %rbx, %rdx
  4079. addq %rax, %r14
  4080. xorq %r8, %rdx
  4081. vpaddq %xmm0, %xmm8, %xmm0
  4082. # msg_sched done: 0-3
  4083. # msg_sched: 2-3
  4084. # rnd_0: 0 - 0
  4085. rorxq $14, %r10, %rax
  4086. rorxq $18, %r10, %rcx
  4087. addq %rdx, %r14
  4088. vpalignr $8, %xmm1, %xmm2, %xmm12
  4089. vpalignr $8, %xmm5, %xmm6, %xmm13
  4090. # rnd_0: 1 - 1
  4091. addq 16(%rsp), %r13
  4092. movq %r11, %rdx
  4093. xorq %rax, %rcx
  4094. vpsrlq $0x01, %xmm12, %xmm8
  4095. vpsllq $63, %xmm12, %xmm9
  4096. # rnd_0: 2 - 2
  4097. xorq %r12, %rdx
  4098. rorxq $41, %r10, %rax
  4099. xorq %rcx, %rax
  4100. vpsrlq $8, %xmm12, %xmm10
  4101. vpsllq $56, %xmm12, %xmm11
  4102. # rnd_0: 3 - 3
  4103. andq %r10, %rdx
  4104. addq %rax, %r13
  4105. rorxq $28, %r14, %rax
  4106. vpor %xmm9, %xmm8, %xmm8
  4107. vpor %xmm11, %xmm10, %xmm10
  4108. # rnd_0: 4 - 4
  4109. rorxq $34, %r14, %rcx
  4110. xorq %r12, %rdx
  4111. xorq %rax, %rcx
  4112. vpsrlq $7, %xmm12, %xmm11
  4113. vpxor %xmm10, %xmm8, %xmm8
  4114. # rnd_0: 5 - 5
  4115. rorxq $39, %r14, %rax
  4116. addq %rdx, %r13
  4117. xorq %rcx, %rax
  4118. vpxor %xmm11, %xmm8, %xmm8
  4119. vpaddq %xmm1, %xmm13, %xmm1
  4120. # rnd_0: 6 - 7
  4121. movq %r15, %rdx
  4122. addq %r13, %r9
  4123. xorq %r14, %rdx
  4124. andq %rdx, %rbx
  4125. addq %rax, %r13
  4126. xorq %r15, %rbx
  4127. vpaddq %xmm1, %xmm8, %xmm1
  4128. # rnd_1: 0 - 0
  4129. rorxq $14, %r9, %rax
  4130. rorxq $18, %r9, %rcx
  4131. addq %rbx, %r13
  4132. vpsrlq $19, %xmm0, %xmm8
  4133. vpsllq $45, %xmm0, %xmm9
  4134. # rnd_1: 1 - 1
  4135. addq 24(%rsp), %r12
  4136. movq %r10, %rbx
  4137. xorq %rax, %rcx
  4138. vpsrlq $61, %xmm0, %xmm10
  4139. vpsllq $3, %xmm0, %xmm11
  4140. # rnd_1: 2 - 2
  4141. xorq %r11, %rbx
  4142. rorxq $41, %r9, %rax
  4143. xorq %rcx, %rax
  4144. vpor %xmm9, %xmm8, %xmm8
  4145. vpor %xmm11, %xmm10, %xmm10
  4146. # rnd_1: 3 - 4
  4147. andq %r9, %rbx
  4148. addq %rax, %r12
  4149. rorxq $28, %r13, %rax
  4150. rorxq $34, %r13, %rcx
  4151. xorq %r11, %rbx
  4152. xorq %rax, %rcx
  4153. vpxor %xmm10, %xmm8, %xmm8
  4154. vpsrlq $6, %xmm0, %xmm11
  4155. # rnd_1: 5 - 6
  4156. rorxq $39, %r13, %rax
  4157. addq %rbx, %r12
  4158. xorq %rcx, %rax
  4159. movq %r14, %rbx
  4160. addq %r12, %r8
  4161. xorq %r13, %rbx
  4162. vpxor %xmm11, %xmm8, %xmm8
  4163. # rnd_1: 7 - 7
  4164. andq %rbx, %rdx
  4165. addq %rax, %r12
  4166. xorq %r14, %rdx
  4167. vpaddq %xmm1, %xmm8, %xmm1
  4168. # msg_sched done: 2-5
  4169. # msg_sched: 4-5
  4170. # rnd_0: 0 - 0
  4171. rorxq $14, %r8, %rax
  4172. rorxq $18, %r8, %rcx
  4173. addq %rdx, %r12
  4174. vpalignr $8, %xmm2, %xmm3, %xmm12
  4175. vpalignr $8, %xmm6, %xmm7, %xmm13
  4176. # rnd_0: 1 - 1
  4177. addq 32(%rsp), %r11
  4178. movq %r9, %rdx
  4179. xorq %rax, %rcx
  4180. vpsrlq $0x01, %xmm12, %xmm8
  4181. vpsllq $63, %xmm12, %xmm9
  4182. # rnd_0: 2 - 2
  4183. xorq %r10, %rdx
  4184. rorxq $41, %r8, %rax
  4185. xorq %rcx, %rax
  4186. vpsrlq $8, %xmm12, %xmm10
  4187. vpsllq $56, %xmm12, %xmm11
  4188. # rnd_0: 3 - 3
  4189. andq %r8, %rdx
  4190. addq %rax, %r11
  4191. rorxq $28, %r12, %rax
  4192. vpor %xmm9, %xmm8, %xmm8
  4193. vpor %xmm11, %xmm10, %xmm10
  4194. # rnd_0: 4 - 4
  4195. rorxq $34, %r12, %rcx
  4196. xorq %r10, %rdx
  4197. xorq %rax, %rcx
  4198. vpsrlq $7, %xmm12, %xmm11
  4199. vpxor %xmm10, %xmm8, %xmm8
  4200. # rnd_0: 5 - 5
  4201. rorxq $39, %r12, %rax
  4202. addq %rdx, %r11
  4203. xorq %rcx, %rax
  4204. vpxor %xmm11, %xmm8, %xmm8
  4205. vpaddq %xmm2, %xmm13, %xmm2
  4206. # rnd_0: 6 - 7
  4207. movq %r13, %rdx
  4208. addq %r11, %r15
  4209. xorq %r12, %rdx
  4210. andq %rdx, %rbx
  4211. addq %rax, %r11
  4212. xorq %r13, %rbx
  4213. vpaddq %xmm2, %xmm8, %xmm2
  4214. # rnd_1: 0 - 0
  4215. rorxq $14, %r15, %rax
  4216. rorxq $18, %r15, %rcx
  4217. addq %rbx, %r11
  4218. vpsrlq $19, %xmm1, %xmm8
  4219. vpsllq $45, %xmm1, %xmm9
  4220. # rnd_1: 1 - 1
  4221. addq 40(%rsp), %r10
  4222. movq %r8, %rbx
  4223. xorq %rax, %rcx
  4224. vpsrlq $61, %xmm1, %xmm10
  4225. vpsllq $3, %xmm1, %xmm11
  4226. # rnd_1: 2 - 2
  4227. xorq %r9, %rbx
  4228. rorxq $41, %r15, %rax
  4229. xorq %rcx, %rax
  4230. vpor %xmm9, %xmm8, %xmm8
  4231. vpor %xmm11, %xmm10, %xmm10
  4232. # rnd_1: 3 - 4
  4233. andq %r15, %rbx
  4234. addq %rax, %r10
  4235. rorxq $28, %r11, %rax
  4236. rorxq $34, %r11, %rcx
  4237. xorq %r9, %rbx
  4238. xorq %rax, %rcx
  4239. vpxor %xmm10, %xmm8, %xmm8
  4240. vpsrlq $6, %xmm1, %xmm11
  4241. # rnd_1: 5 - 6
  4242. rorxq $39, %r11, %rax
  4243. addq %rbx, %r10
  4244. xorq %rcx, %rax
  4245. movq %r12, %rbx
  4246. addq %r10, %r14
  4247. xorq %r11, %rbx
  4248. vpxor %xmm11, %xmm8, %xmm8
  4249. # rnd_1: 7 - 7
  4250. andq %rbx, %rdx
  4251. addq %rax, %r10
  4252. xorq %r12, %rdx
  4253. vpaddq %xmm2, %xmm8, %xmm2
  4254. # msg_sched done: 4-7
  4255. # msg_sched: 6-7
  4256. # rnd_0: 0 - 0
  4257. rorxq $14, %r14, %rax
  4258. rorxq $18, %r14, %rcx
  4259. addq %rdx, %r10
  4260. vpalignr $8, %xmm3, %xmm4, %xmm12
  4261. vpalignr $8, %xmm7, %xmm0, %xmm13
  4262. # rnd_0: 1 - 1
  4263. addq 48(%rsp), %r9
  4264. movq %r15, %rdx
  4265. xorq %rax, %rcx
  4266. vpsrlq $0x01, %xmm12, %xmm8
  4267. vpsllq $63, %xmm12, %xmm9
  4268. # rnd_0: 2 - 2
  4269. xorq %r8, %rdx
  4270. rorxq $41, %r14, %rax
  4271. xorq %rcx, %rax
  4272. vpsrlq $8, %xmm12, %xmm10
  4273. vpsllq $56, %xmm12, %xmm11
  4274. # rnd_0: 3 - 3
  4275. andq %r14, %rdx
  4276. addq %rax, %r9
  4277. rorxq $28, %r10, %rax
  4278. vpor %xmm9, %xmm8, %xmm8
  4279. vpor %xmm11, %xmm10, %xmm10
  4280. # rnd_0: 4 - 4
  4281. rorxq $34, %r10, %rcx
  4282. xorq %r8, %rdx
  4283. xorq %rax, %rcx
  4284. vpsrlq $7, %xmm12, %xmm11
  4285. vpxor %xmm10, %xmm8, %xmm8
  4286. # rnd_0: 5 - 5
  4287. rorxq $39, %r10, %rax
  4288. addq %rdx, %r9
  4289. xorq %rcx, %rax
  4290. vpxor %xmm11, %xmm8, %xmm8
  4291. vpaddq %xmm3, %xmm13, %xmm3
  4292. # rnd_0: 6 - 7
  4293. movq %r11, %rdx
  4294. addq %r9, %r13
  4295. xorq %r10, %rdx
  4296. andq %rdx, %rbx
  4297. addq %rax, %r9
  4298. xorq %r11, %rbx
  4299. vpaddq %xmm3, %xmm8, %xmm3
  4300. # rnd_1: 0 - 0
  4301. rorxq $14, %r13, %rax
  4302. rorxq $18, %r13, %rcx
  4303. addq %rbx, %r9
  4304. vpsrlq $19, %xmm2, %xmm8
  4305. vpsllq $45, %xmm2, %xmm9
  4306. # rnd_1: 1 - 1
  4307. addq 56(%rsp), %r8
  4308. movq %r14, %rbx
  4309. xorq %rax, %rcx
  4310. vpsrlq $61, %xmm2, %xmm10
  4311. vpsllq $3, %xmm2, %xmm11
  4312. # rnd_1: 2 - 2
  4313. xorq %r15, %rbx
  4314. rorxq $41, %r13, %rax
  4315. xorq %rcx, %rax
  4316. vpor %xmm9, %xmm8, %xmm8
  4317. vpor %xmm11, %xmm10, %xmm10
  4318. # rnd_1: 3 - 4
  4319. andq %r13, %rbx
  4320. addq %rax, %r8
  4321. rorxq $28, %r9, %rax
  4322. rorxq $34, %r9, %rcx
  4323. xorq %r15, %rbx
  4324. xorq %rax, %rcx
  4325. vpxor %xmm10, %xmm8, %xmm8
  4326. vpsrlq $6, %xmm2, %xmm11
  4327. # rnd_1: 5 - 6
  4328. rorxq $39, %r9, %rax
  4329. addq %rbx, %r8
  4330. xorq %rcx, %rax
  4331. movq %r10, %rbx
  4332. addq %r8, %r12
  4333. xorq %r9, %rbx
  4334. vpxor %xmm11, %xmm8, %xmm8
  4335. # rnd_1: 7 - 7
  4336. andq %rbx, %rdx
  4337. addq %rax, %r8
  4338. xorq %r10, %rdx
  4339. vpaddq %xmm3, %xmm8, %xmm3
  4340. # msg_sched done: 6-9
  4341. # msg_sched: 8-9
  4342. # rnd_0: 0 - 0
  4343. rorxq $14, %r12, %rax
  4344. rorxq $18, %r12, %rcx
  4345. addq %rdx, %r8
  4346. vpalignr $8, %xmm4, %xmm5, %xmm12
  4347. vpalignr $8, %xmm0, %xmm1, %xmm13
  4348. # rnd_0: 1 - 1
  4349. addq 64(%rsp), %r15
  4350. movq %r13, %rdx
  4351. xorq %rax, %rcx
  4352. vpsrlq $0x01, %xmm12, %xmm8
  4353. vpsllq $63, %xmm12, %xmm9
  4354. # rnd_0: 2 - 2
  4355. xorq %r14, %rdx
  4356. rorxq $41, %r12, %rax
  4357. xorq %rcx, %rax
  4358. vpsrlq $8, %xmm12, %xmm10
  4359. vpsllq $56, %xmm12, %xmm11
  4360. # rnd_0: 3 - 3
  4361. andq %r12, %rdx
  4362. addq %rax, %r15
  4363. rorxq $28, %r8, %rax
  4364. vpor %xmm9, %xmm8, %xmm8
  4365. vpor %xmm11, %xmm10, %xmm10
  4366. # rnd_0: 4 - 4
  4367. rorxq $34, %r8, %rcx
  4368. xorq %r14, %rdx
  4369. xorq %rax, %rcx
  4370. vpsrlq $7, %xmm12, %xmm11
  4371. vpxor %xmm10, %xmm8, %xmm8
  4372. # rnd_0: 5 - 5
  4373. rorxq $39, %r8, %rax
  4374. addq %rdx, %r15
  4375. xorq %rcx, %rax
  4376. vpxor %xmm11, %xmm8, %xmm8
  4377. vpaddq %xmm4, %xmm13, %xmm4
  4378. # rnd_0: 6 - 7
  4379. movq %r9, %rdx
  4380. addq %r15, %r11
  4381. xorq %r8, %rdx
  4382. andq %rdx, %rbx
  4383. addq %rax, %r15
  4384. xorq %r9, %rbx
  4385. vpaddq %xmm4, %xmm8, %xmm4
  4386. # rnd_1: 0 - 0
  4387. rorxq $14, %r11, %rax
  4388. rorxq $18, %r11, %rcx
  4389. addq %rbx, %r15
  4390. vpsrlq $19, %xmm3, %xmm8
  4391. vpsllq $45, %xmm3, %xmm9
  4392. # rnd_1: 1 - 1
  4393. addq 72(%rsp), %r14
  4394. movq %r12, %rbx
  4395. xorq %rax, %rcx
  4396. vpsrlq $61, %xmm3, %xmm10
  4397. vpsllq $3, %xmm3, %xmm11
  4398. # rnd_1: 2 - 2
  4399. xorq %r13, %rbx
  4400. rorxq $41, %r11, %rax
  4401. xorq %rcx, %rax
  4402. vpor %xmm9, %xmm8, %xmm8
  4403. vpor %xmm11, %xmm10, %xmm10
  4404. # rnd_1: 3 - 4
  4405. andq %r11, %rbx
  4406. addq %rax, %r14
  4407. rorxq $28, %r15, %rax
  4408. rorxq $34, %r15, %rcx
  4409. xorq %r13, %rbx
  4410. xorq %rax, %rcx
  4411. vpxor %xmm10, %xmm8, %xmm8
  4412. vpsrlq $6, %xmm3, %xmm11
  4413. # rnd_1: 5 - 6
  4414. rorxq $39, %r15, %rax
  4415. addq %rbx, %r14
  4416. xorq %rcx, %rax
  4417. movq %r8, %rbx
  4418. addq %r14, %r10
  4419. xorq %r15, %rbx
  4420. vpxor %xmm11, %xmm8, %xmm8
  4421. # rnd_1: 7 - 7
  4422. andq %rbx, %rdx
  4423. addq %rax, %r14
  4424. xorq %r8, %rdx
  4425. vpaddq %xmm4, %xmm8, %xmm4
  4426. # msg_sched done: 8-11
  4427. # msg_sched: 10-11
  4428. # rnd_0: 0 - 0
  4429. rorxq $14, %r10, %rax
  4430. rorxq $18, %r10, %rcx
  4431. addq %rdx, %r14
  4432. vpalignr $8, %xmm5, %xmm6, %xmm12
  4433. vpalignr $8, %xmm1, %xmm2, %xmm13
  4434. # rnd_0: 1 - 1
  4435. addq 80(%rsp), %r13
  4436. movq %r11, %rdx
  4437. xorq %rax, %rcx
  4438. vpsrlq $0x01, %xmm12, %xmm8
  4439. vpsllq $63, %xmm12, %xmm9
  4440. # rnd_0: 2 - 2
  4441. xorq %r12, %rdx
  4442. rorxq $41, %r10, %rax
  4443. xorq %rcx, %rax
  4444. vpsrlq $8, %xmm12, %xmm10
  4445. vpsllq $56, %xmm12, %xmm11
  4446. # rnd_0: 3 - 3
  4447. andq %r10, %rdx
  4448. addq %rax, %r13
  4449. rorxq $28, %r14, %rax
  4450. vpor %xmm9, %xmm8, %xmm8
  4451. vpor %xmm11, %xmm10, %xmm10
  4452. # rnd_0: 4 - 4
  4453. rorxq $34, %r14, %rcx
  4454. xorq %r12, %rdx
  4455. xorq %rax, %rcx
  4456. vpsrlq $7, %xmm12, %xmm11
  4457. vpxor %xmm10, %xmm8, %xmm8
  4458. # rnd_0: 5 - 5
  4459. rorxq $39, %r14, %rax
  4460. addq %rdx, %r13
  4461. xorq %rcx, %rax
  4462. vpxor %xmm11, %xmm8, %xmm8
  4463. vpaddq %xmm5, %xmm13, %xmm5
  4464. # rnd_0: 6 - 7
  4465. movq %r15, %rdx
  4466. addq %r13, %r9
  4467. xorq %r14, %rdx
  4468. andq %rdx, %rbx
  4469. addq %rax, %r13
  4470. xorq %r15, %rbx
  4471. vpaddq %xmm5, %xmm8, %xmm5
  4472. # rnd_1: 0 - 0
  4473. rorxq $14, %r9, %rax
  4474. rorxq $18, %r9, %rcx
  4475. addq %rbx, %r13
  4476. vpsrlq $19, %xmm4, %xmm8
  4477. vpsllq $45, %xmm4, %xmm9
  4478. # rnd_1: 1 - 1
  4479. addq 88(%rsp), %r12
  4480. movq %r10, %rbx
  4481. xorq %rax, %rcx
  4482. vpsrlq $61, %xmm4, %xmm10
  4483. vpsllq $3, %xmm4, %xmm11
  4484. # rnd_1: 2 - 2
  4485. xorq %r11, %rbx
  4486. rorxq $41, %r9, %rax
  4487. xorq %rcx, %rax
  4488. vpor %xmm9, %xmm8, %xmm8
  4489. vpor %xmm11, %xmm10, %xmm10
  4490. # rnd_1: 3 - 4
  4491. andq %r9, %rbx
  4492. addq %rax, %r12
  4493. rorxq $28, %r13, %rax
  4494. rorxq $34, %r13, %rcx
  4495. xorq %r11, %rbx
  4496. xorq %rax, %rcx
  4497. vpxor %xmm10, %xmm8, %xmm8
  4498. vpsrlq $6, %xmm4, %xmm11
  4499. # rnd_1: 5 - 6
  4500. rorxq $39, %r13, %rax
  4501. addq %rbx, %r12
  4502. xorq %rcx, %rax
  4503. movq %r14, %rbx
  4504. addq %r12, %r8
  4505. xorq %r13, %rbx
  4506. vpxor %xmm11, %xmm8, %xmm8
  4507. # rnd_1: 7 - 7
  4508. andq %rbx, %rdx
  4509. addq %rax, %r12
  4510. xorq %r14, %rdx
  4511. vpaddq %xmm5, %xmm8, %xmm5
  4512. # msg_sched done: 10-13
  4513. # msg_sched: 12-13
  4514. # rnd_0: 0 - 0
  4515. rorxq $14, %r8, %rax
  4516. rorxq $18, %r8, %rcx
  4517. addq %rdx, %r12
  4518. vpalignr $8, %xmm6, %xmm7, %xmm12
  4519. vpalignr $8, %xmm2, %xmm3, %xmm13
  4520. # rnd_0: 1 - 1
  4521. addq 96(%rsp), %r11
  4522. movq %r9, %rdx
  4523. xorq %rax, %rcx
  4524. vpsrlq $0x01, %xmm12, %xmm8
  4525. vpsllq $63, %xmm12, %xmm9
  4526. # rnd_0: 2 - 2
  4527. xorq %r10, %rdx
  4528. rorxq $41, %r8, %rax
  4529. xorq %rcx, %rax
  4530. vpsrlq $8, %xmm12, %xmm10
  4531. vpsllq $56, %xmm12, %xmm11
  4532. # rnd_0: 3 - 3
  4533. andq %r8, %rdx
  4534. addq %rax, %r11
  4535. rorxq $28, %r12, %rax
  4536. vpor %xmm9, %xmm8, %xmm8
  4537. vpor %xmm11, %xmm10, %xmm10
  4538. # rnd_0: 4 - 4
  4539. rorxq $34, %r12, %rcx
  4540. xorq %r10, %rdx
  4541. xorq %rax, %rcx
  4542. vpsrlq $7, %xmm12, %xmm11
  4543. vpxor %xmm10, %xmm8, %xmm8
  4544. # rnd_0: 5 - 5
  4545. rorxq $39, %r12, %rax
  4546. addq %rdx, %r11
  4547. xorq %rcx, %rax
  4548. vpxor %xmm11, %xmm8, %xmm8
  4549. vpaddq %xmm6, %xmm13, %xmm6
  4550. # rnd_0: 6 - 7
  4551. movq %r13, %rdx
  4552. addq %r11, %r15
  4553. xorq %r12, %rdx
  4554. andq %rdx, %rbx
  4555. addq %rax, %r11
  4556. xorq %r13, %rbx
  4557. vpaddq %xmm6, %xmm8, %xmm6
  4558. # rnd_1: 0 - 0
  4559. rorxq $14, %r15, %rax
  4560. rorxq $18, %r15, %rcx
  4561. addq %rbx, %r11
  4562. vpsrlq $19, %xmm5, %xmm8
  4563. vpsllq $45, %xmm5, %xmm9
  4564. # rnd_1: 1 - 1
  4565. addq 104(%rsp), %r10
  4566. movq %r8, %rbx
  4567. xorq %rax, %rcx
  4568. vpsrlq $61, %xmm5, %xmm10
  4569. vpsllq $3, %xmm5, %xmm11
  4570. # rnd_1: 2 - 2
  4571. xorq %r9, %rbx
  4572. rorxq $41, %r15, %rax
  4573. xorq %rcx, %rax
  4574. vpor %xmm9, %xmm8, %xmm8
  4575. vpor %xmm11, %xmm10, %xmm10
  4576. # rnd_1: 3 - 4
  4577. andq %r15, %rbx
  4578. addq %rax, %r10
  4579. rorxq $28, %r11, %rax
  4580. rorxq $34, %r11, %rcx
  4581. xorq %r9, %rbx
  4582. xorq %rax, %rcx
  4583. vpxor %xmm10, %xmm8, %xmm8
  4584. vpsrlq $6, %xmm5, %xmm11
  4585. # rnd_1: 5 - 6
  4586. rorxq $39, %r11, %rax
  4587. addq %rbx, %r10
  4588. xorq %rcx, %rax
  4589. movq %r12, %rbx
  4590. addq %r10, %r14
  4591. xorq %r11, %rbx
  4592. vpxor %xmm11, %xmm8, %xmm8
  4593. # rnd_1: 7 - 7
  4594. andq %rbx, %rdx
  4595. addq %rax, %r10
  4596. xorq %r12, %rdx
  4597. vpaddq %xmm6, %xmm8, %xmm6
  4598. # msg_sched done: 12-15
  4599. # msg_sched: 14-15
  4600. # rnd_0: 0 - 0
  4601. rorxq $14, %r14, %rax
  4602. rorxq $18, %r14, %rcx
  4603. addq %rdx, %r10
  4604. vpalignr $8, %xmm7, %xmm0, %xmm12
  4605. vpalignr $8, %xmm3, %xmm4, %xmm13
  4606. # rnd_0: 1 - 1
  4607. addq 112(%rsp), %r9
  4608. movq %r15, %rdx
  4609. xorq %rax, %rcx
  4610. vpsrlq $0x01, %xmm12, %xmm8
  4611. vpsllq $63, %xmm12, %xmm9
  4612. # rnd_0: 2 - 2
  4613. xorq %r8, %rdx
  4614. rorxq $41, %r14, %rax
  4615. xorq %rcx, %rax
  4616. vpsrlq $8, %xmm12, %xmm10
  4617. vpsllq $56, %xmm12, %xmm11
  4618. # rnd_0: 3 - 3
  4619. andq %r14, %rdx
  4620. addq %rax, %r9
  4621. rorxq $28, %r10, %rax
  4622. vpor %xmm9, %xmm8, %xmm8
  4623. vpor %xmm11, %xmm10, %xmm10
  4624. # rnd_0: 4 - 4
  4625. rorxq $34, %r10, %rcx
  4626. xorq %r8, %rdx
  4627. xorq %rax, %rcx
  4628. vpsrlq $7, %xmm12, %xmm11
  4629. vpxor %xmm10, %xmm8, %xmm8
  4630. # rnd_0: 5 - 5
  4631. rorxq $39, %r10, %rax
  4632. addq %rdx, %r9
  4633. xorq %rcx, %rax
  4634. vpxor %xmm11, %xmm8, %xmm8
  4635. vpaddq %xmm7, %xmm13, %xmm7
  4636. # rnd_0: 6 - 7
  4637. movq %r11, %rdx
  4638. addq %r9, %r13
  4639. xorq %r10, %rdx
  4640. andq %rdx, %rbx
  4641. addq %rax, %r9
  4642. xorq %r11, %rbx
  4643. vpaddq %xmm7, %xmm8, %xmm7
  4644. # rnd_1: 0 - 0
  4645. rorxq $14, %r13, %rax
  4646. rorxq $18, %r13, %rcx
  4647. addq %rbx, %r9
  4648. vpsrlq $19, %xmm6, %xmm8
  4649. vpsllq $45, %xmm6, %xmm9
  4650. # rnd_1: 1 - 1
  4651. addq 120(%rsp), %r8
  4652. movq %r14, %rbx
  4653. xorq %rax, %rcx
  4654. vpsrlq $61, %xmm6, %xmm10
  4655. vpsllq $3, %xmm6, %xmm11
  4656. # rnd_1: 2 - 2
  4657. xorq %r15, %rbx
  4658. rorxq $41, %r13, %rax
  4659. xorq %rcx, %rax
  4660. vpor %xmm9, %xmm8, %xmm8
  4661. vpor %xmm11, %xmm10, %xmm10
  4662. # rnd_1: 3 - 4
  4663. andq %r13, %rbx
  4664. addq %rax, %r8
  4665. rorxq $28, %r9, %rax
  4666. rorxq $34, %r9, %rcx
  4667. xorq %r15, %rbx
  4668. xorq %rax, %rcx
  4669. vpxor %xmm10, %xmm8, %xmm8
  4670. vpsrlq $6, %xmm6, %xmm11
  4671. # rnd_1: 5 - 6
  4672. rorxq $39, %r9, %rax
  4673. addq %rbx, %r8
  4674. xorq %rcx, %rax
  4675. movq %r10, %rbx
  4676. addq %r8, %r12
  4677. xorq %r9, %rbx
  4678. vpxor %xmm11, %xmm8, %xmm8
  4679. # rnd_1: 7 - 7
  4680. andq %rbx, %rdx
  4681. addq %rax, %r8
  4682. xorq %r10, %rdx
  4683. vpaddq %xmm7, %xmm8, %xmm7
  4684. # msg_sched done: 14-17
  4685. movq 136(%rsp), %rcx
  4686. vpaddq (%rcx), %xmm0, %xmm8
  4687. vpaddq 16(%rcx), %xmm1, %xmm9
  4688. vmovdqu %xmm8, (%rsp)
  4689. vmovdqu %xmm9, 16(%rsp)
  4690. vpaddq 32(%rcx), %xmm2, %xmm8
  4691. vpaddq 48(%rcx), %xmm3, %xmm9
  4692. vmovdqu %xmm8, 32(%rsp)
  4693. vmovdqu %xmm9, 48(%rsp)
  4694. vpaddq 64(%rcx), %xmm4, %xmm8
  4695. vpaddq 80(%rcx), %xmm5, %xmm9
  4696. vmovdqu %xmm8, 64(%rsp)
  4697. vmovdqu %xmm9, 80(%rsp)
  4698. vpaddq 96(%rcx), %xmm6, %xmm8
  4699. vpaddq 112(%rcx), %xmm7, %xmm9
  4700. vmovdqu %xmm8, 96(%rsp)
  4701. vmovdqu %xmm9, 112(%rsp)
  4702. subl $0x01, 128(%rsp)
  4703. jne L_sha512_len_avx1_rorx_start
  4704. vpaddq (%rcx), %xmm0, %xmm8
  4705. vpaddq 16(%rcx), %xmm1, %xmm9
  4706. vmovdqu %xmm8, (%rsp)
  4707. vmovdqu %xmm9, 16(%rsp)
  4708. vpaddq 32(%rcx), %xmm2, %xmm8
  4709. vpaddq 48(%rcx), %xmm3, %xmm9
  4710. vmovdqu %xmm8, 32(%rsp)
  4711. vmovdqu %xmm9, 48(%rsp)
  4712. vpaddq 64(%rcx), %xmm4, %xmm8
  4713. vpaddq 80(%rcx), %xmm5, %xmm9
  4714. vmovdqu %xmm8, 64(%rsp)
  4715. vmovdqu %xmm9, 80(%rsp)
  4716. vpaddq 96(%rcx), %xmm6, %xmm8
  4717. vpaddq 112(%rcx), %xmm7, %xmm9
  4718. vmovdqu %xmm8, 96(%rsp)
  4719. vmovdqu %xmm9, 112(%rsp)
  4720. # rnd_all_2: 0-1
  4721. # rnd_0: 0 - 7
  4722. rorxq $14, %r12, %rax
  4723. rorxq $18, %r12, %rcx
  4724. addq %rdx, %r8
  4725. addq (%rsp), %r15
  4726. movq %r13, %rdx
  4727. xorq %rax, %rcx
  4728. xorq %r14, %rdx
  4729. rorxq $41, %r12, %rax
  4730. xorq %rcx, %rax
  4731. andq %r12, %rdx
  4732. addq %rax, %r15
  4733. rorxq $28, %r8, %rax
  4734. rorxq $34, %r8, %rcx
  4735. xorq %r14, %rdx
  4736. xorq %rax, %rcx
  4737. rorxq $39, %r8, %rax
  4738. addq %rdx, %r15
  4739. xorq %rcx, %rax
  4740. movq %r9, %rdx
  4741. addq %r15, %r11
  4742. xorq %r8, %rdx
  4743. andq %rdx, %rbx
  4744. addq %rax, %r15
  4745. xorq %r9, %rbx
  4746. # rnd_1: 0 - 7
  4747. rorxq $14, %r11, %rax
  4748. rorxq $18, %r11, %rcx
  4749. addq %rbx, %r15
  4750. addq 8(%rsp), %r14
  4751. movq %r12, %rbx
  4752. xorq %rax, %rcx
  4753. xorq %r13, %rbx
  4754. rorxq $41, %r11, %rax
  4755. xorq %rcx, %rax
  4756. andq %r11, %rbx
  4757. addq %rax, %r14
  4758. rorxq $28, %r15, %rax
  4759. rorxq $34, %r15, %rcx
  4760. xorq %r13, %rbx
  4761. xorq %rax, %rcx
  4762. rorxq $39, %r15, %rax
  4763. addq %rbx, %r14
  4764. xorq %rcx, %rax
  4765. movq %r8, %rbx
  4766. addq %r14, %r10
  4767. xorq %r15, %rbx
  4768. andq %rbx, %rdx
  4769. addq %rax, %r14
  4770. xorq %r8, %rdx
  4771. # rnd_all_2: 2-3
  4772. # rnd_0: 0 - 7
  4773. rorxq $14, %r10, %rax
  4774. rorxq $18, %r10, %rcx
  4775. addq %rdx, %r14
  4776. addq 16(%rsp), %r13
  4777. movq %r11, %rdx
  4778. xorq %rax, %rcx
  4779. xorq %r12, %rdx
  4780. rorxq $41, %r10, %rax
  4781. xorq %rcx, %rax
  4782. andq %r10, %rdx
  4783. addq %rax, %r13
  4784. rorxq $28, %r14, %rax
  4785. rorxq $34, %r14, %rcx
  4786. xorq %r12, %rdx
  4787. xorq %rax, %rcx
  4788. rorxq $39, %r14, %rax
  4789. addq %rdx, %r13
  4790. xorq %rcx, %rax
  4791. movq %r15, %rdx
  4792. addq %r13, %r9
  4793. xorq %r14, %rdx
  4794. andq %rdx, %rbx
  4795. addq %rax, %r13
  4796. xorq %r15, %rbx
  4797. # rnd_1: 0 - 7
  4798. rorxq $14, %r9, %rax
  4799. rorxq $18, %r9, %rcx
  4800. addq %rbx, %r13
  4801. addq 24(%rsp), %r12
  4802. movq %r10, %rbx
  4803. xorq %rax, %rcx
  4804. xorq %r11, %rbx
  4805. rorxq $41, %r9, %rax
  4806. xorq %rcx, %rax
  4807. andq %r9, %rbx
  4808. addq %rax, %r12
  4809. rorxq $28, %r13, %rax
  4810. rorxq $34, %r13, %rcx
  4811. xorq %r11, %rbx
  4812. xorq %rax, %rcx
  4813. rorxq $39, %r13, %rax
  4814. addq %rbx, %r12
  4815. xorq %rcx, %rax
  4816. movq %r14, %rbx
  4817. addq %r12, %r8
  4818. xorq %r13, %rbx
  4819. andq %rbx, %rdx
  4820. addq %rax, %r12
  4821. xorq %r14, %rdx
  4822. # rnd_all_2: 4-5
  4823. # rnd_0: 0 - 7
  4824. rorxq $14, %r8, %rax
  4825. rorxq $18, %r8, %rcx
  4826. addq %rdx, %r12
  4827. addq 32(%rsp), %r11
  4828. movq %r9, %rdx
  4829. xorq %rax, %rcx
  4830. xorq %r10, %rdx
  4831. rorxq $41, %r8, %rax
  4832. xorq %rcx, %rax
  4833. andq %r8, %rdx
  4834. addq %rax, %r11
  4835. rorxq $28, %r12, %rax
  4836. rorxq $34, %r12, %rcx
  4837. xorq %r10, %rdx
  4838. xorq %rax, %rcx
  4839. rorxq $39, %r12, %rax
  4840. addq %rdx, %r11
  4841. xorq %rcx, %rax
  4842. movq %r13, %rdx
  4843. addq %r11, %r15
  4844. xorq %r12, %rdx
  4845. andq %rdx, %rbx
  4846. addq %rax, %r11
  4847. xorq %r13, %rbx
  4848. # rnd_1: 0 - 7
  4849. rorxq $14, %r15, %rax
  4850. rorxq $18, %r15, %rcx
  4851. addq %rbx, %r11
  4852. addq 40(%rsp), %r10
  4853. movq %r8, %rbx
  4854. xorq %rax, %rcx
  4855. xorq %r9, %rbx
  4856. rorxq $41, %r15, %rax
  4857. xorq %rcx, %rax
  4858. andq %r15, %rbx
  4859. addq %rax, %r10
  4860. rorxq $28, %r11, %rax
  4861. rorxq $34, %r11, %rcx
  4862. xorq %r9, %rbx
  4863. xorq %rax, %rcx
  4864. rorxq $39, %r11, %rax
  4865. addq %rbx, %r10
  4866. xorq %rcx, %rax
  4867. movq %r12, %rbx
  4868. addq %r10, %r14
  4869. xorq %r11, %rbx
  4870. andq %rbx, %rdx
  4871. addq %rax, %r10
  4872. xorq %r12, %rdx
  4873. # rnd_all_2: 6-7
  4874. # rnd_0: 0 - 7
  4875. rorxq $14, %r14, %rax
  4876. rorxq $18, %r14, %rcx
  4877. addq %rdx, %r10
  4878. addq 48(%rsp), %r9
  4879. movq %r15, %rdx
  4880. xorq %rax, %rcx
  4881. xorq %r8, %rdx
  4882. rorxq $41, %r14, %rax
  4883. xorq %rcx, %rax
  4884. andq %r14, %rdx
  4885. addq %rax, %r9
  4886. rorxq $28, %r10, %rax
  4887. rorxq $34, %r10, %rcx
  4888. xorq %r8, %rdx
  4889. xorq %rax, %rcx
  4890. rorxq $39, %r10, %rax
  4891. addq %rdx, %r9
  4892. xorq %rcx, %rax
  4893. movq %r11, %rdx
  4894. addq %r9, %r13
  4895. xorq %r10, %rdx
  4896. andq %rdx, %rbx
  4897. addq %rax, %r9
  4898. xorq %r11, %rbx
  4899. # rnd_1: 0 - 7
  4900. rorxq $14, %r13, %rax
  4901. rorxq $18, %r13, %rcx
  4902. addq %rbx, %r9
  4903. addq 56(%rsp), %r8
  4904. movq %r14, %rbx
  4905. xorq %rax, %rcx
  4906. xorq %r15, %rbx
  4907. rorxq $41, %r13, %rax
  4908. xorq %rcx, %rax
  4909. andq %r13, %rbx
  4910. addq %rax, %r8
  4911. rorxq $28, %r9, %rax
  4912. rorxq $34, %r9, %rcx
  4913. xorq %r15, %rbx
  4914. xorq %rax, %rcx
  4915. rorxq $39, %r9, %rax
  4916. addq %rbx, %r8
  4917. xorq %rcx, %rax
  4918. movq %r10, %rbx
  4919. addq %r8, %r12
  4920. xorq %r9, %rbx
  4921. andq %rbx, %rdx
  4922. addq %rax, %r8
  4923. xorq %r10, %rdx
  4924. # rnd_all_2: 8-9
  4925. # rnd_0: 0 - 7
  4926. rorxq $14, %r12, %rax
  4927. rorxq $18, %r12, %rcx
  4928. addq %rdx, %r8
  4929. addq 64(%rsp), %r15
  4930. movq %r13, %rdx
  4931. xorq %rax, %rcx
  4932. xorq %r14, %rdx
  4933. rorxq $41, %r12, %rax
  4934. xorq %rcx, %rax
  4935. andq %r12, %rdx
  4936. addq %rax, %r15
  4937. rorxq $28, %r8, %rax
  4938. rorxq $34, %r8, %rcx
  4939. xorq %r14, %rdx
  4940. xorq %rax, %rcx
  4941. rorxq $39, %r8, %rax
  4942. addq %rdx, %r15
  4943. xorq %rcx, %rax
  4944. movq %r9, %rdx
  4945. addq %r15, %r11
  4946. xorq %r8, %rdx
  4947. andq %rdx, %rbx
  4948. addq %rax, %r15
  4949. xorq %r9, %rbx
  4950. # rnd_1: 0 - 7
  4951. rorxq $14, %r11, %rax
  4952. rorxq $18, %r11, %rcx
  4953. addq %rbx, %r15
  4954. addq 72(%rsp), %r14
  4955. movq %r12, %rbx
  4956. xorq %rax, %rcx
  4957. xorq %r13, %rbx
  4958. rorxq $41, %r11, %rax
  4959. xorq %rcx, %rax
  4960. andq %r11, %rbx
  4961. addq %rax, %r14
  4962. rorxq $28, %r15, %rax
  4963. rorxq $34, %r15, %rcx
  4964. xorq %r13, %rbx
  4965. xorq %rax, %rcx
  4966. rorxq $39, %r15, %rax
  4967. addq %rbx, %r14
  4968. xorq %rcx, %rax
  4969. movq %r8, %rbx
  4970. addq %r14, %r10
  4971. xorq %r15, %rbx
  4972. andq %rbx, %rdx
  4973. addq %rax, %r14
  4974. xorq %r8, %rdx
  4975. # rnd_all_2: 10-11
  4976. # rnd_0: 0 - 7
  4977. rorxq $14, %r10, %rax
  4978. rorxq $18, %r10, %rcx
  4979. addq %rdx, %r14
  4980. addq 80(%rsp), %r13
  4981. movq %r11, %rdx
  4982. xorq %rax, %rcx
  4983. xorq %r12, %rdx
  4984. rorxq $41, %r10, %rax
  4985. xorq %rcx, %rax
  4986. andq %r10, %rdx
  4987. addq %rax, %r13
  4988. rorxq $28, %r14, %rax
  4989. rorxq $34, %r14, %rcx
  4990. xorq %r12, %rdx
  4991. xorq %rax, %rcx
  4992. rorxq $39, %r14, %rax
  4993. addq %rdx, %r13
  4994. xorq %rcx, %rax
  4995. movq %r15, %rdx
  4996. addq %r13, %r9
  4997. xorq %r14, %rdx
  4998. andq %rdx, %rbx
  4999. addq %rax, %r13
  5000. xorq %r15, %rbx
  5001. # rnd_1: 0 - 7
  5002. rorxq $14, %r9, %rax
  5003. rorxq $18, %r9, %rcx
  5004. addq %rbx, %r13
  5005. addq 88(%rsp), %r12
  5006. movq %r10, %rbx
  5007. xorq %rax, %rcx
  5008. xorq %r11, %rbx
  5009. rorxq $41, %r9, %rax
  5010. xorq %rcx, %rax
  5011. andq %r9, %rbx
  5012. addq %rax, %r12
  5013. rorxq $28, %r13, %rax
  5014. rorxq $34, %r13, %rcx
  5015. xorq %r11, %rbx
  5016. xorq %rax, %rcx
  5017. rorxq $39, %r13, %rax
  5018. addq %rbx, %r12
  5019. xorq %rcx, %rax
  5020. movq %r14, %rbx
  5021. addq %r12, %r8
  5022. xorq %r13, %rbx
  5023. andq %rbx, %rdx
  5024. addq %rax, %r12
  5025. xorq %r14, %rdx
  5026. # rnd_all_2: 12-13
  5027. # rnd_0: 0 - 7
  5028. rorxq $14, %r8, %rax
  5029. rorxq $18, %r8, %rcx
  5030. addq %rdx, %r12
  5031. addq 96(%rsp), %r11
  5032. movq %r9, %rdx
  5033. xorq %rax, %rcx
  5034. xorq %r10, %rdx
  5035. rorxq $41, %r8, %rax
  5036. xorq %rcx, %rax
  5037. andq %r8, %rdx
  5038. addq %rax, %r11
  5039. rorxq $28, %r12, %rax
  5040. rorxq $34, %r12, %rcx
  5041. xorq %r10, %rdx
  5042. xorq %rax, %rcx
  5043. rorxq $39, %r12, %rax
  5044. addq %rdx, %r11
  5045. xorq %rcx, %rax
  5046. movq %r13, %rdx
  5047. addq %r11, %r15
  5048. xorq %r12, %rdx
  5049. andq %rdx, %rbx
  5050. addq %rax, %r11
  5051. xorq %r13, %rbx
  5052. # rnd_1: 0 - 7
  5053. rorxq $14, %r15, %rax
  5054. rorxq $18, %r15, %rcx
  5055. addq %rbx, %r11
  5056. addq 104(%rsp), %r10
  5057. movq %r8, %rbx
  5058. xorq %rax, %rcx
  5059. xorq %r9, %rbx
  5060. rorxq $41, %r15, %rax
  5061. xorq %rcx, %rax
  5062. andq %r15, %rbx
  5063. addq %rax, %r10
  5064. rorxq $28, %r11, %rax
  5065. rorxq $34, %r11, %rcx
  5066. xorq %r9, %rbx
  5067. xorq %rax, %rcx
  5068. rorxq $39, %r11, %rax
  5069. addq %rbx, %r10
  5070. xorq %rcx, %rax
  5071. movq %r12, %rbx
  5072. addq %r10, %r14
  5073. xorq %r11, %rbx
  5074. andq %rbx, %rdx
  5075. addq %rax, %r10
  5076. xorq %r12, %rdx
  5077. # rnd_all_2: 14-15
  5078. # rnd_0: 0 - 7
  5079. rorxq $14, %r14, %rax
  5080. rorxq $18, %r14, %rcx
  5081. addq %rdx, %r10
  5082. addq 112(%rsp), %r9
  5083. movq %r15, %rdx
  5084. xorq %rax, %rcx
  5085. xorq %r8, %rdx
  5086. rorxq $41, %r14, %rax
  5087. xorq %rcx, %rax
  5088. andq %r14, %rdx
  5089. addq %rax, %r9
  5090. rorxq $28, %r10, %rax
  5091. rorxq $34, %r10, %rcx
  5092. xorq %r8, %rdx
  5093. xorq %rax, %rcx
  5094. rorxq $39, %r10, %rax
  5095. addq %rdx, %r9
  5096. xorq %rcx, %rax
  5097. movq %r11, %rdx
  5098. addq %r9, %r13
  5099. xorq %r10, %rdx
  5100. andq %rdx, %rbx
  5101. addq %rax, %r9
  5102. xorq %r11, %rbx
  5103. # rnd_1: 0 - 7
  5104. rorxq $14, %r13, %rax
  5105. rorxq $18, %r13, %rcx
  5106. addq %rbx, %r9
  5107. addq 120(%rsp), %r8
  5108. movq %r14, %rbx
  5109. xorq %rax, %rcx
  5110. xorq %r15, %rbx
  5111. rorxq $41, %r13, %rax
  5112. xorq %rcx, %rax
  5113. andq %r13, %rbx
  5114. addq %rax, %r8
  5115. rorxq $28, %r9, %rax
  5116. rorxq $34, %r9, %rcx
  5117. xorq %r15, %rbx
  5118. xorq %rax, %rcx
  5119. rorxq $39, %r9, %rax
  5120. addq %rbx, %r8
  5121. xorq %rcx, %rax
  5122. movq %r10, %rbx
  5123. addq %r8, %r12
  5124. xorq %r9, %rbx
  5125. andq %rbx, %rdx
  5126. addq %rax, %r8
  5127. xorq %r10, %rdx
  5128. addq %rdx, %r8
  5129. addq (%rdi), %r8
  5130. addq 8(%rdi), %r9
  5131. addq 16(%rdi), %r10
  5132. addq 24(%rdi), %r11
  5133. addq 32(%rdi), %r12
  5134. addq 40(%rdi), %r13
  5135. addq 48(%rdi), %r14
  5136. addq 56(%rdi), %r15
  5137. leaq L_avx1_rorx_sha512_k(%rip), %rcx
  5138. addq $0x80, %rsi
  5139. subl $0x80, %ebp
  5140. movq %r8, (%rdi)
  5141. movq %r9, 8(%rdi)
  5142. movq %r10, 16(%rdi)
  5143. movq %r11, 24(%rdi)
  5144. movq %r12, 32(%rdi)
  5145. movq %r13, 40(%rdi)
  5146. movq %r14, 48(%rdi)
  5147. movq %r15, 56(%rdi)
  5148. jnz L_sha512_len_avx1_rorx_begin
  5149. xorq %rax, %rax
  5150. vzeroupper
  5151. addq $0x90, %rsp
  5152. popq %rbp
  5153. popq %r15
  5154. popq %r14
  5155. popq %r13
  5156. popq %r12
  5157. popq %rbx
  5158. repz retq
  5159. #ifndef __APPLE__
  5160. .size Transform_Sha512_AVX1_RORX_Len,.-Transform_Sha512_AVX1_RORX_Len
  5161. #endif /* __APPLE__ */
  5162. #endif /* HAVE_INTEL_AVX1 */
  5163. #ifdef HAVE_INTEL_AVX2
  5164. #ifndef __APPLE__
  5165. .data
  5166. #else
  5167. .section __DATA,__data
  5168. #endif /* __APPLE__ */
  5169. #ifndef __APPLE__
  5170. .align 16
  5171. #else
  5172. .p2align 4
  5173. #endif /* __APPLE__ */
  5174. L_avx2_sha512_k:
  5175. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  5176. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  5177. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  5178. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  5179. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  5180. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  5181. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  5182. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  5183. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  5184. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  5185. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  5186. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  5187. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  5188. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  5189. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  5190. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  5191. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  5192. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  5193. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  5194. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  5195. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  5196. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  5197. .quad 0xd192e819d6ef5218,0xd69906245565a910
  5198. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  5199. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  5200. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  5201. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  5202. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  5203. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  5204. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  5205. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  5206. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  5207. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  5208. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  5209. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  5210. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  5211. .quad 0x28db77f523047d84,0x32caab7b40c72493
  5212. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  5213. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  5214. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  5215. #ifndef __APPLE__
  5216. .data
  5217. #else
  5218. .section __DATA,__data
  5219. #endif /* __APPLE__ */
  5220. #ifndef __APPLE__
  5221. .align 16
  5222. #else
  5223. .p2align 4
  5224. #endif /* __APPLE__ */
  5225. L_avx2_sha512_k_2:
  5226. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  5227. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  5228. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  5229. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  5230. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  5231. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  5232. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  5233. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  5234. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  5235. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  5236. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  5237. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  5238. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  5239. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  5240. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  5241. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  5242. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  5243. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  5244. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  5245. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  5246. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  5247. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  5248. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  5249. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  5250. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  5251. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  5252. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  5253. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  5254. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  5255. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  5256. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  5257. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  5258. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  5259. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  5260. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  5261. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  5262. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  5263. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  5264. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  5265. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  5266. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  5267. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  5268. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  5269. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  5270. .quad 0xd192e819d6ef5218,0xd69906245565a910
  5271. .quad 0xd192e819d6ef5218,0xd69906245565a910
  5272. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  5273. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  5274. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  5275. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  5276. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  5277. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  5278. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  5279. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  5280. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  5281. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  5282. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  5283. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  5284. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  5285. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  5286. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  5287. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  5288. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  5289. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  5290. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  5291. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  5292. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  5293. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  5294. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  5295. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  5296. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  5297. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  5298. .quad 0x28db77f523047d84,0x32caab7b40c72493
  5299. .quad 0x28db77f523047d84,0x32caab7b40c72493
  5300. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  5301. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  5302. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  5303. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  5304. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  5305. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  5306. #ifndef __APPLE__
  5307. .data
  5308. #else
  5309. .section __DATA,__data
  5310. #endif /* __APPLE__ */
  5311. #ifndef __APPLE__
  5312. .align 8
  5313. #else
  5314. .p2align 3
  5315. #endif /* __APPLE__ */
  5316. L_avx2_sha512_k_2_end:
  5317. .quad 1024+L_avx2_sha512_k_2
  5318. #ifndef __APPLE__
  5319. .data
  5320. #else
  5321. .section __DATA,__data
  5322. #endif /* __APPLE__ */
  5323. #ifndef __APPLE__
  5324. .align 32
  5325. #else
  5326. .p2align 5
  5327. #endif /* __APPLE__ */
  5328. L_avx2_sha512_flip_mask:
  5329. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  5330. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  5331. #ifndef __APPLE__
  5332. .text
  5333. .globl Transform_Sha512_AVX2
  5334. .type Transform_Sha512_AVX2,@function
  5335. .align 16
  5336. Transform_Sha512_AVX2:
  5337. #else
  5338. .section __TEXT,__text
  5339. .globl _Transform_Sha512_AVX2
  5340. .p2align 4
  5341. _Transform_Sha512_AVX2:
  5342. #endif /* __APPLE__ */
  5343. pushq %rbx
  5344. pushq %r12
  5345. pushq %r13
  5346. pushq %r14
  5347. pushq %r15
  5348. subq $0x88, %rsp
  5349. leaq 64(%rdi), %rax
  5350. vmovdqa L_avx2_sha512_flip_mask(%rip), %ymm15
  5351. movq (%rdi), %r8
  5352. movq 8(%rdi), %r9
  5353. movq 16(%rdi), %r10
  5354. movq 24(%rdi), %r11
  5355. movq 32(%rdi), %r12
  5356. movq 40(%rdi), %r13
  5357. movq 48(%rdi), %r14
  5358. movq 56(%rdi), %r15
  5359. vmovdqu (%rax), %ymm0
  5360. vmovdqu 32(%rax), %ymm1
  5361. vpshufb %ymm15, %ymm0, %ymm0
  5362. vpshufb %ymm15, %ymm1, %ymm1
  5363. vmovdqu 64(%rax), %ymm2
  5364. vmovdqu 96(%rax), %ymm3
  5365. vpshufb %ymm15, %ymm2, %ymm2
  5366. vpshufb %ymm15, %ymm3, %ymm3
  5367. movl $4, 128(%rsp)
  5368. leaq L_avx2_sha512_k(%rip), %rsi
  5369. movq %r9, %rbx
  5370. movq %r12, %rax
  5371. xorq %r10, %rbx
  5372. vpaddq (%rsi), %ymm0, %ymm8
  5373. vpaddq 32(%rsi), %ymm1, %ymm9
  5374. vmovdqu %ymm8, (%rsp)
  5375. vmovdqu %ymm9, 32(%rsp)
  5376. vpaddq 64(%rsi), %ymm2, %ymm8
  5377. vpaddq 96(%rsi), %ymm3, %ymm9
  5378. vmovdqu %ymm8, 64(%rsp)
  5379. vmovdqu %ymm9, 96(%rsp)
  5380. # Start of 16 rounds
  5381. L_sha256_avx2_start:
  5382. addq $0x80, %rsi
  5383. rorq $23, %rax
  5384. vpblendd $3, %ymm1, %ymm0, %ymm12
  5385. vpblendd $3, %ymm3, %ymm2, %ymm13
  5386. movq %r8, %rdx
  5387. movq %r13, %rcx
  5388. addq (%rsp), %r15
  5389. xorq %r14, %rcx
  5390. xorq %r12, %rax
  5391. andq %r12, %rcx
  5392. vpermq $57, %ymm12, %ymm12
  5393. rorq $4, %rax
  5394. xorq %r14, %rcx
  5395. vpermq $57, %ymm13, %ymm13
  5396. xorq %r12, %rax
  5397. addq %rcx, %r15
  5398. rorq $14, %rax
  5399. xorq %r9, %rdx
  5400. vpsrlq $0x01, %ymm12, %ymm8
  5401. addq %rax, %r15
  5402. movq %r8, %rcx
  5403. vpsllq $63, %ymm12, %ymm9
  5404. andq %rdx, %rbx
  5405. rorq $5, %rcx
  5406. vpsrlq $8, %ymm12, %ymm10
  5407. xorq %r8, %rcx
  5408. xorq %r9, %rbx
  5409. vpsllq $56, %ymm12, %ymm11
  5410. rorq $6, %rcx
  5411. addq %r15, %r11
  5412. vpor %ymm9, %ymm8, %ymm8
  5413. xorq %r8, %rcx
  5414. addq %rbx, %r15
  5415. vpor %ymm11, %ymm10, %ymm10
  5416. rorq $28, %rcx
  5417. movq %r11, %rax
  5418. addq %rcx, %r15
  5419. rorq $23, %rax
  5420. vpsrlq $7, %ymm12, %ymm11
  5421. movq %r15, %rbx
  5422. movq %r12, %rcx
  5423. vpxor %ymm10, %ymm8, %ymm8
  5424. addq 8(%rsp), %r14
  5425. xorq %r13, %rcx
  5426. vpxor %ymm11, %ymm8, %ymm8
  5427. xorq %r11, %rax
  5428. andq %r11, %rcx
  5429. vpaddq %ymm0, %ymm13, %ymm0
  5430. rorq $4, %rax
  5431. xorq %r13, %rcx
  5432. vpaddq %ymm0, %ymm8, %ymm0
  5433. xorq %r11, %rax
  5434. addq %rcx, %r14
  5435. vperm2I128 $0x81, %ymm3, %ymm3, %ymm14
  5436. rorq $14, %rax
  5437. xorq %r8, %rbx
  5438. addq %rax, %r14
  5439. movq %r15, %rcx
  5440. andq %rbx, %rdx
  5441. rorq $5, %rcx
  5442. vpsrlq $19, %ymm14, %ymm8
  5443. xorq %r15, %rcx
  5444. xorq %r8, %rdx
  5445. vpsllq $45, %ymm14, %ymm9
  5446. rorq $6, %rcx
  5447. addq %r14, %r10
  5448. vpsrlq $61, %ymm14, %ymm10
  5449. xorq %r15, %rcx
  5450. addq %rdx, %r14
  5451. vpsllq $3, %ymm14, %ymm11
  5452. rorq $28, %rcx
  5453. movq %r10, %rax
  5454. addq %rcx, %r14
  5455. rorq $23, %rax
  5456. vpor %ymm9, %ymm8, %ymm8
  5457. movq %r14, %rdx
  5458. movq %r11, %rcx
  5459. addq 16(%rsp), %r13
  5460. xorq %r12, %rcx
  5461. vpor %ymm11, %ymm10, %ymm10
  5462. xorq %r10, %rax
  5463. andq %r10, %rcx
  5464. vpxor %ymm10, %ymm8, %ymm8
  5465. rorq $4, %rax
  5466. xorq %r12, %rcx
  5467. vpsrlq $6, %ymm14, %ymm11
  5468. xorq %r10, %rax
  5469. addq %rcx, %r13
  5470. vpxor %ymm11, %ymm8, %ymm8
  5471. rorq $14, %rax
  5472. xorq %r15, %rdx
  5473. vpaddq %ymm0, %ymm8, %ymm0
  5474. addq %rax, %r13
  5475. movq %r14, %rcx
  5476. andq %rdx, %rbx
  5477. rorq $5, %rcx
  5478. vperm2I128 $8, %ymm0, %ymm0, %ymm14
  5479. xorq %r14, %rcx
  5480. xorq %r15, %rbx
  5481. rorq $6, %rcx
  5482. addq %r13, %r9
  5483. vpsrlq $19, %ymm14, %ymm8
  5484. xorq %r14, %rcx
  5485. addq %rbx, %r13
  5486. vpsllq $45, %ymm14, %ymm9
  5487. rorq $28, %rcx
  5488. movq %r9, %rax
  5489. addq %rcx, %r13
  5490. rorq $23, %rax
  5491. vpsrlq $61, %ymm14, %ymm10
  5492. movq %r13, %rbx
  5493. movq %r10, %rcx
  5494. addq 24(%rsp), %r12
  5495. xorq %r11, %rcx
  5496. vpsllq $3, %ymm14, %ymm11
  5497. xorq %r9, %rax
  5498. andq %r9, %rcx
  5499. vpor %ymm9, %ymm8, %ymm8
  5500. rorq $4, %rax
  5501. xorq %r11, %rcx
  5502. vpor %ymm11, %ymm10, %ymm10
  5503. xorq %r9, %rax
  5504. addq %rcx, %r12
  5505. vpxor %ymm10, %ymm8, %ymm8
  5506. rorq $14, %rax
  5507. xorq %r14, %rbx
  5508. vpsrlq $6, %ymm14, %ymm11
  5509. addq %rax, %r12
  5510. movq %r13, %rcx
  5511. vpxor %ymm11, %ymm8, %ymm8
  5512. andq %rbx, %rdx
  5513. rorq $5, %rcx
  5514. vpaddq %ymm0, %ymm8, %ymm0
  5515. xorq %r13, %rcx
  5516. xorq %r14, %rdx
  5517. rorq $6, %rcx
  5518. addq %r12, %r8
  5519. xorq %r13, %rcx
  5520. addq %rdx, %r12
  5521. rorq $28, %rcx
  5522. movq %r8, %rax
  5523. addq %rcx, %r12
  5524. rorq $23, %rax
  5525. vpblendd $3, %ymm2, %ymm1, %ymm12
  5526. vpblendd $3, %ymm0, %ymm3, %ymm13
  5527. movq %r12, %rdx
  5528. movq %r9, %rcx
  5529. addq 32(%rsp), %r11
  5530. xorq %r10, %rcx
  5531. xorq %r8, %rax
  5532. andq %r8, %rcx
  5533. vpermq $57, %ymm12, %ymm12
  5534. rorq $4, %rax
  5535. xorq %r10, %rcx
  5536. vpermq $57, %ymm13, %ymm13
  5537. xorq %r8, %rax
  5538. addq %rcx, %r11
  5539. rorq $14, %rax
  5540. xorq %r13, %rdx
  5541. vpsrlq $0x01, %ymm12, %ymm8
  5542. addq %rax, %r11
  5543. movq %r12, %rcx
  5544. vpsllq $63, %ymm12, %ymm9
  5545. andq %rdx, %rbx
  5546. rorq $5, %rcx
  5547. vpsrlq $8, %ymm12, %ymm10
  5548. xorq %r12, %rcx
  5549. xorq %r13, %rbx
  5550. vpsllq $56, %ymm12, %ymm11
  5551. rorq $6, %rcx
  5552. addq %r11, %r15
  5553. vpor %ymm9, %ymm8, %ymm8
  5554. xorq %r12, %rcx
  5555. addq %rbx, %r11
  5556. vpor %ymm11, %ymm10, %ymm10
  5557. rorq $28, %rcx
  5558. movq %r15, %rax
  5559. addq %rcx, %r11
  5560. rorq $23, %rax
  5561. vpsrlq $7, %ymm12, %ymm11
  5562. movq %r11, %rbx
  5563. movq %r8, %rcx
  5564. vpxor %ymm10, %ymm8, %ymm8
  5565. addq 40(%rsp), %r10
  5566. xorq %r9, %rcx
  5567. vpxor %ymm11, %ymm8, %ymm8
  5568. xorq %r15, %rax
  5569. andq %r15, %rcx
  5570. vpaddq %ymm1, %ymm13, %ymm1
  5571. rorq $4, %rax
  5572. xorq %r9, %rcx
  5573. vpaddq %ymm1, %ymm8, %ymm1
  5574. xorq %r15, %rax
  5575. addq %rcx, %r10
  5576. vperm2I128 $0x81, %ymm0, %ymm0, %ymm14
  5577. rorq $14, %rax
  5578. xorq %r12, %rbx
  5579. addq %rax, %r10
  5580. movq %r11, %rcx
  5581. andq %rbx, %rdx
  5582. rorq $5, %rcx
  5583. vpsrlq $19, %ymm14, %ymm8
  5584. xorq %r11, %rcx
  5585. xorq %r12, %rdx
  5586. vpsllq $45, %ymm14, %ymm9
  5587. rorq $6, %rcx
  5588. addq %r10, %r14
  5589. vpsrlq $61, %ymm14, %ymm10
  5590. xorq %r11, %rcx
  5591. addq %rdx, %r10
  5592. vpsllq $3, %ymm14, %ymm11
  5593. rorq $28, %rcx
  5594. movq %r14, %rax
  5595. addq %rcx, %r10
  5596. rorq $23, %rax
  5597. vpor %ymm9, %ymm8, %ymm8
  5598. movq %r10, %rdx
  5599. movq %r15, %rcx
  5600. addq 48(%rsp), %r9
  5601. xorq %r8, %rcx
  5602. vpor %ymm11, %ymm10, %ymm10
  5603. xorq %r14, %rax
  5604. andq %r14, %rcx
  5605. vpxor %ymm10, %ymm8, %ymm8
  5606. rorq $4, %rax
  5607. xorq %r8, %rcx
  5608. vpsrlq $6, %ymm14, %ymm11
  5609. xorq %r14, %rax
  5610. addq %rcx, %r9
  5611. vpxor %ymm11, %ymm8, %ymm8
  5612. rorq $14, %rax
  5613. xorq %r11, %rdx
  5614. vpaddq %ymm1, %ymm8, %ymm1
  5615. addq %rax, %r9
  5616. movq %r10, %rcx
  5617. andq %rdx, %rbx
  5618. rorq $5, %rcx
  5619. vperm2I128 $8, %ymm1, %ymm1, %ymm14
  5620. xorq %r10, %rcx
  5621. xorq %r11, %rbx
  5622. rorq $6, %rcx
  5623. addq %r9, %r13
  5624. vpsrlq $19, %ymm14, %ymm8
  5625. xorq %r10, %rcx
  5626. addq %rbx, %r9
  5627. vpsllq $45, %ymm14, %ymm9
  5628. rorq $28, %rcx
  5629. movq %r13, %rax
  5630. addq %rcx, %r9
  5631. rorq $23, %rax
  5632. vpsrlq $61, %ymm14, %ymm10
  5633. movq %r9, %rbx
  5634. movq %r14, %rcx
  5635. addq 56(%rsp), %r8
  5636. xorq %r15, %rcx
  5637. vpsllq $3, %ymm14, %ymm11
  5638. xorq %r13, %rax
  5639. andq %r13, %rcx
  5640. vpor %ymm9, %ymm8, %ymm8
  5641. rorq $4, %rax
  5642. xorq %r15, %rcx
  5643. vpor %ymm11, %ymm10, %ymm10
  5644. xorq %r13, %rax
  5645. addq %rcx, %r8
  5646. vpxor %ymm10, %ymm8, %ymm8
  5647. rorq $14, %rax
  5648. xorq %r10, %rbx
  5649. vpsrlq $6, %ymm14, %ymm11
  5650. addq %rax, %r8
  5651. movq %r9, %rcx
  5652. vpxor %ymm11, %ymm8, %ymm8
  5653. andq %rbx, %rdx
  5654. rorq $5, %rcx
  5655. vpaddq %ymm1, %ymm8, %ymm1
  5656. xorq %r9, %rcx
  5657. xorq %r10, %rdx
  5658. rorq $6, %rcx
  5659. addq %r8, %r12
  5660. xorq %r9, %rcx
  5661. addq %rdx, %r8
  5662. rorq $28, %rcx
  5663. movq %r12, %rax
  5664. addq %rcx, %r8
  5665. rorq $23, %rax
  5666. vpblendd $3, %ymm3, %ymm2, %ymm12
  5667. vpblendd $3, %ymm1, %ymm0, %ymm13
  5668. movq %r8, %rdx
  5669. movq %r13, %rcx
  5670. addq 64(%rsp), %r15
  5671. xorq %r14, %rcx
  5672. xorq %r12, %rax
  5673. andq %r12, %rcx
  5674. vpermq $57, %ymm12, %ymm12
  5675. rorq $4, %rax
  5676. xorq %r14, %rcx
  5677. vpermq $57, %ymm13, %ymm13
  5678. xorq %r12, %rax
  5679. addq %rcx, %r15
  5680. rorq $14, %rax
  5681. xorq %r9, %rdx
  5682. vpsrlq $0x01, %ymm12, %ymm8
  5683. addq %rax, %r15
  5684. movq %r8, %rcx
  5685. vpsllq $63, %ymm12, %ymm9
  5686. andq %rdx, %rbx
  5687. rorq $5, %rcx
  5688. vpsrlq $8, %ymm12, %ymm10
  5689. xorq %r8, %rcx
  5690. xorq %r9, %rbx
  5691. vpsllq $56, %ymm12, %ymm11
  5692. rorq $6, %rcx
  5693. addq %r15, %r11
  5694. vpor %ymm9, %ymm8, %ymm8
  5695. xorq %r8, %rcx
  5696. addq %rbx, %r15
  5697. vpor %ymm11, %ymm10, %ymm10
  5698. rorq $28, %rcx
  5699. movq %r11, %rax
  5700. addq %rcx, %r15
  5701. rorq $23, %rax
  5702. vpsrlq $7, %ymm12, %ymm11
  5703. movq %r15, %rbx
  5704. movq %r12, %rcx
  5705. vpxor %ymm10, %ymm8, %ymm8
  5706. addq 72(%rsp), %r14
  5707. xorq %r13, %rcx
  5708. vpxor %ymm11, %ymm8, %ymm8
  5709. xorq %r11, %rax
  5710. andq %r11, %rcx
  5711. vpaddq %ymm2, %ymm13, %ymm2
  5712. rorq $4, %rax
  5713. xorq %r13, %rcx
  5714. vpaddq %ymm2, %ymm8, %ymm2
  5715. xorq %r11, %rax
  5716. addq %rcx, %r14
  5717. vperm2I128 $0x81, %ymm1, %ymm1, %ymm14
  5718. rorq $14, %rax
  5719. xorq %r8, %rbx
  5720. addq %rax, %r14
  5721. movq %r15, %rcx
  5722. andq %rbx, %rdx
  5723. rorq $5, %rcx
  5724. vpsrlq $19, %ymm14, %ymm8
  5725. xorq %r15, %rcx
  5726. xorq %r8, %rdx
  5727. vpsllq $45, %ymm14, %ymm9
  5728. rorq $6, %rcx
  5729. addq %r14, %r10
  5730. vpsrlq $61, %ymm14, %ymm10
  5731. xorq %r15, %rcx
  5732. addq %rdx, %r14
  5733. vpsllq $3, %ymm14, %ymm11
  5734. rorq $28, %rcx
  5735. movq %r10, %rax
  5736. addq %rcx, %r14
  5737. rorq $23, %rax
  5738. vpor %ymm9, %ymm8, %ymm8
  5739. movq %r14, %rdx
  5740. movq %r11, %rcx
  5741. addq 80(%rsp), %r13
  5742. xorq %r12, %rcx
  5743. vpor %ymm11, %ymm10, %ymm10
  5744. xorq %r10, %rax
  5745. andq %r10, %rcx
  5746. vpxor %ymm10, %ymm8, %ymm8
  5747. rorq $4, %rax
  5748. xorq %r12, %rcx
  5749. vpsrlq $6, %ymm14, %ymm11
  5750. xorq %r10, %rax
  5751. addq %rcx, %r13
  5752. vpxor %ymm11, %ymm8, %ymm8
  5753. rorq $14, %rax
  5754. xorq %r15, %rdx
  5755. vpaddq %ymm2, %ymm8, %ymm2
  5756. addq %rax, %r13
  5757. movq %r14, %rcx
  5758. andq %rdx, %rbx
  5759. rorq $5, %rcx
  5760. vperm2I128 $8, %ymm2, %ymm2, %ymm14
  5761. xorq %r14, %rcx
  5762. xorq %r15, %rbx
  5763. rorq $6, %rcx
  5764. addq %r13, %r9
  5765. vpsrlq $19, %ymm14, %ymm8
  5766. xorq %r14, %rcx
  5767. addq %rbx, %r13
  5768. vpsllq $45, %ymm14, %ymm9
  5769. rorq $28, %rcx
  5770. movq %r9, %rax
  5771. addq %rcx, %r13
  5772. rorq $23, %rax
  5773. vpsrlq $61, %ymm14, %ymm10
  5774. movq %r13, %rbx
  5775. movq %r10, %rcx
  5776. addq 88(%rsp), %r12
  5777. xorq %r11, %rcx
  5778. vpsllq $3, %ymm14, %ymm11
  5779. xorq %r9, %rax
  5780. andq %r9, %rcx
  5781. vpor %ymm9, %ymm8, %ymm8
  5782. rorq $4, %rax
  5783. xorq %r11, %rcx
  5784. vpor %ymm11, %ymm10, %ymm10
  5785. xorq %r9, %rax
  5786. addq %rcx, %r12
  5787. vpxor %ymm10, %ymm8, %ymm8
  5788. rorq $14, %rax
  5789. xorq %r14, %rbx
  5790. vpsrlq $6, %ymm14, %ymm11
  5791. addq %rax, %r12
  5792. movq %r13, %rcx
  5793. vpxor %ymm11, %ymm8, %ymm8
  5794. andq %rbx, %rdx
  5795. rorq $5, %rcx
  5796. vpaddq %ymm2, %ymm8, %ymm2
  5797. xorq %r13, %rcx
  5798. xorq %r14, %rdx
  5799. rorq $6, %rcx
  5800. addq %r12, %r8
  5801. xorq %r13, %rcx
  5802. addq %rdx, %r12
  5803. rorq $28, %rcx
  5804. movq %r8, %rax
  5805. addq %rcx, %r12
  5806. rorq $23, %rax
  5807. vpblendd $3, %ymm0, %ymm3, %ymm12
  5808. vpblendd $3, %ymm2, %ymm1, %ymm13
  5809. movq %r12, %rdx
  5810. movq %r9, %rcx
  5811. addq 96(%rsp), %r11
  5812. xorq %r10, %rcx
  5813. xorq %r8, %rax
  5814. andq %r8, %rcx
  5815. vpermq $57, %ymm12, %ymm12
  5816. rorq $4, %rax
  5817. xorq %r10, %rcx
  5818. vpermq $57, %ymm13, %ymm13
  5819. xorq %r8, %rax
  5820. addq %rcx, %r11
  5821. rorq $14, %rax
  5822. xorq %r13, %rdx
  5823. vpsrlq $0x01, %ymm12, %ymm8
  5824. addq %rax, %r11
  5825. movq %r12, %rcx
  5826. vpsllq $63, %ymm12, %ymm9
  5827. andq %rdx, %rbx
  5828. rorq $5, %rcx
  5829. vpsrlq $8, %ymm12, %ymm10
  5830. xorq %r12, %rcx
  5831. xorq %r13, %rbx
  5832. vpsllq $56, %ymm12, %ymm11
  5833. rorq $6, %rcx
  5834. addq %r11, %r15
  5835. vpor %ymm9, %ymm8, %ymm8
  5836. xorq %r12, %rcx
  5837. addq %rbx, %r11
  5838. vpor %ymm11, %ymm10, %ymm10
  5839. rorq $28, %rcx
  5840. movq %r15, %rax
  5841. addq %rcx, %r11
  5842. rorq $23, %rax
  5843. vpsrlq $7, %ymm12, %ymm11
  5844. movq %r11, %rbx
  5845. movq %r8, %rcx
  5846. vpxor %ymm10, %ymm8, %ymm8
  5847. addq 104(%rsp), %r10
  5848. xorq %r9, %rcx
  5849. vpxor %ymm11, %ymm8, %ymm8
  5850. xorq %r15, %rax
  5851. andq %r15, %rcx
  5852. vpaddq %ymm3, %ymm13, %ymm3
  5853. rorq $4, %rax
  5854. xorq %r9, %rcx
  5855. vpaddq %ymm3, %ymm8, %ymm3
  5856. xorq %r15, %rax
  5857. addq %rcx, %r10
  5858. vperm2I128 $0x81, %ymm2, %ymm2, %ymm14
  5859. rorq $14, %rax
  5860. xorq %r12, %rbx
  5861. addq %rax, %r10
  5862. movq %r11, %rcx
  5863. andq %rbx, %rdx
  5864. rorq $5, %rcx
  5865. vpsrlq $19, %ymm14, %ymm8
  5866. xorq %r11, %rcx
  5867. xorq %r12, %rdx
  5868. vpsllq $45, %ymm14, %ymm9
  5869. rorq $6, %rcx
  5870. addq %r10, %r14
  5871. vpsrlq $61, %ymm14, %ymm10
  5872. xorq %r11, %rcx
  5873. addq %rdx, %r10
  5874. vpsllq $3, %ymm14, %ymm11
  5875. rorq $28, %rcx
  5876. movq %r14, %rax
  5877. addq %rcx, %r10
  5878. rorq $23, %rax
  5879. vpor %ymm9, %ymm8, %ymm8
  5880. movq %r10, %rdx
  5881. movq %r15, %rcx
  5882. addq 112(%rsp), %r9
  5883. xorq %r8, %rcx
  5884. vpor %ymm11, %ymm10, %ymm10
  5885. xorq %r14, %rax
  5886. andq %r14, %rcx
  5887. vpxor %ymm10, %ymm8, %ymm8
  5888. rorq $4, %rax
  5889. xorq %r8, %rcx
  5890. vpsrlq $6, %ymm14, %ymm11
  5891. xorq %r14, %rax
  5892. addq %rcx, %r9
  5893. vpxor %ymm11, %ymm8, %ymm8
  5894. rorq $14, %rax
  5895. xorq %r11, %rdx
  5896. vpaddq %ymm3, %ymm8, %ymm3
  5897. addq %rax, %r9
  5898. movq %r10, %rcx
  5899. andq %rdx, %rbx
  5900. rorq $5, %rcx
  5901. vperm2I128 $8, %ymm3, %ymm3, %ymm14
  5902. xorq %r10, %rcx
  5903. xorq %r11, %rbx
  5904. rorq $6, %rcx
  5905. addq %r9, %r13
  5906. vpsrlq $19, %ymm14, %ymm8
  5907. xorq %r10, %rcx
  5908. addq %rbx, %r9
  5909. vpsllq $45, %ymm14, %ymm9
  5910. rorq $28, %rcx
  5911. movq %r13, %rax
  5912. addq %rcx, %r9
  5913. rorq $23, %rax
  5914. vpsrlq $61, %ymm14, %ymm10
  5915. movq %r9, %rbx
  5916. movq %r14, %rcx
  5917. addq 120(%rsp), %r8
  5918. xorq %r15, %rcx
  5919. vpsllq $3, %ymm14, %ymm11
  5920. xorq %r13, %rax
  5921. andq %r13, %rcx
  5922. vpor %ymm9, %ymm8, %ymm8
  5923. rorq $4, %rax
  5924. xorq %r15, %rcx
  5925. vpor %ymm11, %ymm10, %ymm10
  5926. xorq %r13, %rax
  5927. addq %rcx, %r8
  5928. vpxor %ymm10, %ymm8, %ymm8
  5929. rorq $14, %rax
  5930. xorq %r10, %rbx
  5931. vpsrlq $6, %ymm14, %ymm11
  5932. addq %rax, %r8
  5933. movq %r9, %rcx
  5934. vpxor %ymm11, %ymm8, %ymm8
  5935. andq %rbx, %rdx
  5936. rorq $5, %rcx
  5937. vpaddq %ymm3, %ymm8, %ymm3
  5938. xorq %r9, %rcx
  5939. xorq %r10, %rdx
  5940. rorq $6, %rcx
  5941. addq %r8, %r12
  5942. xorq %r9, %rcx
  5943. addq %rdx, %r8
  5944. rorq $28, %rcx
  5945. movq %r12, %rax
  5946. addq %rcx, %r8
  5947. vpaddq (%rsi), %ymm0, %ymm8
  5948. vpaddq 32(%rsi), %ymm1, %ymm9
  5949. vmovdqu %ymm8, (%rsp)
  5950. vmovdqu %ymm9, 32(%rsp)
  5951. vpaddq 64(%rsi), %ymm2, %ymm8
  5952. vpaddq 96(%rsi), %ymm3, %ymm9
  5953. vmovdqu %ymm8, 64(%rsp)
  5954. vmovdqu %ymm9, 96(%rsp)
  5955. subl $0x01, 128(%rsp)
  5956. jne L_sha256_avx2_start
  5957. rorq $23, %rax
  5958. movq %r8, %rdx
  5959. movq %r13, %rcx
  5960. addq (%rsp), %r15
  5961. xorq %r14, %rcx
  5962. xorq %r12, %rax
  5963. andq %r12, %rcx
  5964. rorq $4, %rax
  5965. xorq %r14, %rcx
  5966. xorq %r12, %rax
  5967. addq %rcx, %r15
  5968. rorq $14, %rax
  5969. xorq %r9, %rdx
  5970. addq %rax, %r15
  5971. movq %r8, %rcx
  5972. andq %rdx, %rbx
  5973. rorq $5, %rcx
  5974. xorq %r8, %rcx
  5975. xorq %r9, %rbx
  5976. rorq $6, %rcx
  5977. addq %r15, %r11
  5978. xorq %r8, %rcx
  5979. addq %rbx, %r15
  5980. rorq $28, %rcx
  5981. movq %r11, %rax
  5982. addq %rcx, %r15
  5983. rorq $23, %rax
  5984. movq %r15, %rbx
  5985. movq %r12, %rcx
  5986. addq 8(%rsp), %r14
  5987. xorq %r13, %rcx
  5988. xorq %r11, %rax
  5989. andq %r11, %rcx
  5990. rorq $4, %rax
  5991. xorq %r13, %rcx
  5992. xorq %r11, %rax
  5993. addq %rcx, %r14
  5994. rorq $14, %rax
  5995. xorq %r8, %rbx
  5996. addq %rax, %r14
  5997. movq %r15, %rcx
  5998. andq %rbx, %rdx
  5999. rorq $5, %rcx
  6000. xorq %r15, %rcx
  6001. xorq %r8, %rdx
  6002. rorq $6, %rcx
  6003. addq %r14, %r10
  6004. xorq %r15, %rcx
  6005. addq %rdx, %r14
  6006. rorq $28, %rcx
  6007. movq %r10, %rax
  6008. addq %rcx, %r14
  6009. rorq $23, %rax
  6010. movq %r14, %rdx
  6011. movq %r11, %rcx
  6012. addq 16(%rsp), %r13
  6013. xorq %r12, %rcx
  6014. xorq %r10, %rax
  6015. andq %r10, %rcx
  6016. rorq $4, %rax
  6017. xorq %r12, %rcx
  6018. xorq %r10, %rax
  6019. addq %rcx, %r13
  6020. rorq $14, %rax
  6021. xorq %r15, %rdx
  6022. addq %rax, %r13
  6023. movq %r14, %rcx
  6024. andq %rdx, %rbx
  6025. rorq $5, %rcx
  6026. xorq %r14, %rcx
  6027. xorq %r15, %rbx
  6028. rorq $6, %rcx
  6029. addq %r13, %r9
  6030. xorq %r14, %rcx
  6031. addq %rbx, %r13
  6032. rorq $28, %rcx
  6033. movq %r9, %rax
  6034. addq %rcx, %r13
  6035. rorq $23, %rax
  6036. movq %r13, %rbx
  6037. movq %r10, %rcx
  6038. addq 24(%rsp), %r12
  6039. xorq %r11, %rcx
  6040. xorq %r9, %rax
  6041. andq %r9, %rcx
  6042. rorq $4, %rax
  6043. xorq %r11, %rcx
  6044. xorq %r9, %rax
  6045. addq %rcx, %r12
  6046. rorq $14, %rax
  6047. xorq %r14, %rbx
  6048. addq %rax, %r12
  6049. movq %r13, %rcx
  6050. andq %rbx, %rdx
  6051. rorq $5, %rcx
  6052. xorq %r13, %rcx
  6053. xorq %r14, %rdx
  6054. rorq $6, %rcx
  6055. addq %r12, %r8
  6056. xorq %r13, %rcx
  6057. addq %rdx, %r12
  6058. rorq $28, %rcx
  6059. movq %r8, %rax
  6060. addq %rcx, %r12
  6061. rorq $23, %rax
  6062. movq %r12, %rdx
  6063. movq %r9, %rcx
  6064. addq 32(%rsp), %r11
  6065. xorq %r10, %rcx
  6066. xorq %r8, %rax
  6067. andq %r8, %rcx
  6068. rorq $4, %rax
  6069. xorq %r10, %rcx
  6070. xorq %r8, %rax
  6071. addq %rcx, %r11
  6072. rorq $14, %rax
  6073. xorq %r13, %rdx
  6074. addq %rax, %r11
  6075. movq %r12, %rcx
  6076. andq %rdx, %rbx
  6077. rorq $5, %rcx
  6078. xorq %r12, %rcx
  6079. xorq %r13, %rbx
  6080. rorq $6, %rcx
  6081. addq %r11, %r15
  6082. xorq %r12, %rcx
  6083. addq %rbx, %r11
  6084. rorq $28, %rcx
  6085. movq %r15, %rax
  6086. addq %rcx, %r11
  6087. rorq $23, %rax
  6088. movq %r11, %rbx
  6089. movq %r8, %rcx
  6090. addq 40(%rsp), %r10
  6091. xorq %r9, %rcx
  6092. xorq %r15, %rax
  6093. andq %r15, %rcx
  6094. rorq $4, %rax
  6095. xorq %r9, %rcx
  6096. xorq %r15, %rax
  6097. addq %rcx, %r10
  6098. rorq $14, %rax
  6099. xorq %r12, %rbx
  6100. addq %rax, %r10
  6101. movq %r11, %rcx
  6102. andq %rbx, %rdx
  6103. rorq $5, %rcx
  6104. xorq %r11, %rcx
  6105. xorq %r12, %rdx
  6106. rorq $6, %rcx
  6107. addq %r10, %r14
  6108. xorq %r11, %rcx
  6109. addq %rdx, %r10
  6110. rorq $28, %rcx
  6111. movq %r14, %rax
  6112. addq %rcx, %r10
  6113. rorq $23, %rax
  6114. movq %r10, %rdx
  6115. movq %r15, %rcx
  6116. addq 48(%rsp), %r9
  6117. xorq %r8, %rcx
  6118. xorq %r14, %rax
  6119. andq %r14, %rcx
  6120. rorq $4, %rax
  6121. xorq %r8, %rcx
  6122. xorq %r14, %rax
  6123. addq %rcx, %r9
  6124. rorq $14, %rax
  6125. xorq %r11, %rdx
  6126. addq %rax, %r9
  6127. movq %r10, %rcx
  6128. andq %rdx, %rbx
  6129. rorq $5, %rcx
  6130. xorq %r10, %rcx
  6131. xorq %r11, %rbx
  6132. rorq $6, %rcx
  6133. addq %r9, %r13
  6134. xorq %r10, %rcx
  6135. addq %rbx, %r9
  6136. rorq $28, %rcx
  6137. movq %r13, %rax
  6138. addq %rcx, %r9
  6139. rorq $23, %rax
  6140. movq %r9, %rbx
  6141. movq %r14, %rcx
  6142. addq 56(%rsp), %r8
  6143. xorq %r15, %rcx
  6144. xorq %r13, %rax
  6145. andq %r13, %rcx
  6146. rorq $4, %rax
  6147. xorq %r15, %rcx
  6148. xorq %r13, %rax
  6149. addq %rcx, %r8
  6150. rorq $14, %rax
  6151. xorq %r10, %rbx
  6152. addq %rax, %r8
  6153. movq %r9, %rcx
  6154. andq %rbx, %rdx
  6155. rorq $5, %rcx
  6156. xorq %r9, %rcx
  6157. xorq %r10, %rdx
  6158. rorq $6, %rcx
  6159. addq %r8, %r12
  6160. xorq %r9, %rcx
  6161. addq %rdx, %r8
  6162. rorq $28, %rcx
  6163. movq %r12, %rax
  6164. addq %rcx, %r8
  6165. rorq $23, %rax
  6166. movq %r8, %rdx
  6167. movq %r13, %rcx
  6168. addq 64(%rsp), %r15
  6169. xorq %r14, %rcx
  6170. xorq %r12, %rax
  6171. andq %r12, %rcx
  6172. rorq $4, %rax
  6173. xorq %r14, %rcx
  6174. xorq %r12, %rax
  6175. addq %rcx, %r15
  6176. rorq $14, %rax
  6177. xorq %r9, %rdx
  6178. addq %rax, %r15
  6179. movq %r8, %rcx
  6180. andq %rdx, %rbx
  6181. rorq $5, %rcx
  6182. xorq %r8, %rcx
  6183. xorq %r9, %rbx
  6184. rorq $6, %rcx
  6185. addq %r15, %r11
  6186. xorq %r8, %rcx
  6187. addq %rbx, %r15
  6188. rorq $28, %rcx
  6189. movq %r11, %rax
  6190. addq %rcx, %r15
  6191. rorq $23, %rax
  6192. movq %r15, %rbx
  6193. movq %r12, %rcx
  6194. addq 72(%rsp), %r14
  6195. xorq %r13, %rcx
  6196. xorq %r11, %rax
  6197. andq %r11, %rcx
  6198. rorq $4, %rax
  6199. xorq %r13, %rcx
  6200. xorq %r11, %rax
  6201. addq %rcx, %r14
  6202. rorq $14, %rax
  6203. xorq %r8, %rbx
  6204. addq %rax, %r14
  6205. movq %r15, %rcx
  6206. andq %rbx, %rdx
  6207. rorq $5, %rcx
  6208. xorq %r15, %rcx
  6209. xorq %r8, %rdx
  6210. rorq $6, %rcx
  6211. addq %r14, %r10
  6212. xorq %r15, %rcx
  6213. addq %rdx, %r14
  6214. rorq $28, %rcx
  6215. movq %r10, %rax
  6216. addq %rcx, %r14
  6217. rorq $23, %rax
  6218. movq %r14, %rdx
  6219. movq %r11, %rcx
  6220. addq 80(%rsp), %r13
  6221. xorq %r12, %rcx
  6222. xorq %r10, %rax
  6223. andq %r10, %rcx
  6224. rorq $4, %rax
  6225. xorq %r12, %rcx
  6226. xorq %r10, %rax
  6227. addq %rcx, %r13
  6228. rorq $14, %rax
  6229. xorq %r15, %rdx
  6230. addq %rax, %r13
  6231. movq %r14, %rcx
  6232. andq %rdx, %rbx
  6233. rorq $5, %rcx
  6234. xorq %r14, %rcx
  6235. xorq %r15, %rbx
  6236. rorq $6, %rcx
  6237. addq %r13, %r9
  6238. xorq %r14, %rcx
  6239. addq %rbx, %r13
  6240. rorq $28, %rcx
  6241. movq %r9, %rax
  6242. addq %rcx, %r13
  6243. rorq $23, %rax
  6244. movq %r13, %rbx
  6245. movq %r10, %rcx
  6246. addq 88(%rsp), %r12
  6247. xorq %r11, %rcx
  6248. xorq %r9, %rax
  6249. andq %r9, %rcx
  6250. rorq $4, %rax
  6251. xorq %r11, %rcx
  6252. xorq %r9, %rax
  6253. addq %rcx, %r12
  6254. rorq $14, %rax
  6255. xorq %r14, %rbx
  6256. addq %rax, %r12
  6257. movq %r13, %rcx
  6258. andq %rbx, %rdx
  6259. rorq $5, %rcx
  6260. xorq %r13, %rcx
  6261. xorq %r14, %rdx
  6262. rorq $6, %rcx
  6263. addq %r12, %r8
  6264. xorq %r13, %rcx
  6265. addq %rdx, %r12
  6266. rorq $28, %rcx
  6267. movq %r8, %rax
  6268. addq %rcx, %r12
  6269. rorq $23, %rax
  6270. movq %r12, %rdx
  6271. movq %r9, %rcx
  6272. addq 96(%rsp), %r11
  6273. xorq %r10, %rcx
  6274. xorq %r8, %rax
  6275. andq %r8, %rcx
  6276. rorq $4, %rax
  6277. xorq %r10, %rcx
  6278. xorq %r8, %rax
  6279. addq %rcx, %r11
  6280. rorq $14, %rax
  6281. xorq %r13, %rdx
  6282. addq %rax, %r11
  6283. movq %r12, %rcx
  6284. andq %rdx, %rbx
  6285. rorq $5, %rcx
  6286. xorq %r12, %rcx
  6287. xorq %r13, %rbx
  6288. rorq $6, %rcx
  6289. addq %r11, %r15
  6290. xorq %r12, %rcx
  6291. addq %rbx, %r11
  6292. rorq $28, %rcx
  6293. movq %r15, %rax
  6294. addq %rcx, %r11
  6295. rorq $23, %rax
  6296. movq %r11, %rbx
  6297. movq %r8, %rcx
  6298. addq 104(%rsp), %r10
  6299. xorq %r9, %rcx
  6300. xorq %r15, %rax
  6301. andq %r15, %rcx
  6302. rorq $4, %rax
  6303. xorq %r9, %rcx
  6304. xorq %r15, %rax
  6305. addq %rcx, %r10
  6306. rorq $14, %rax
  6307. xorq %r12, %rbx
  6308. addq %rax, %r10
  6309. movq %r11, %rcx
  6310. andq %rbx, %rdx
  6311. rorq $5, %rcx
  6312. xorq %r11, %rcx
  6313. xorq %r12, %rdx
  6314. rorq $6, %rcx
  6315. addq %r10, %r14
  6316. xorq %r11, %rcx
  6317. addq %rdx, %r10
  6318. rorq $28, %rcx
  6319. movq %r14, %rax
  6320. addq %rcx, %r10
  6321. rorq $23, %rax
  6322. movq %r10, %rdx
  6323. movq %r15, %rcx
  6324. addq 112(%rsp), %r9
  6325. xorq %r8, %rcx
  6326. xorq %r14, %rax
  6327. andq %r14, %rcx
  6328. rorq $4, %rax
  6329. xorq %r8, %rcx
  6330. xorq %r14, %rax
  6331. addq %rcx, %r9
  6332. rorq $14, %rax
  6333. xorq %r11, %rdx
  6334. addq %rax, %r9
  6335. movq %r10, %rcx
  6336. andq %rdx, %rbx
  6337. rorq $5, %rcx
  6338. xorq %r10, %rcx
  6339. xorq %r11, %rbx
  6340. rorq $6, %rcx
  6341. addq %r9, %r13
  6342. xorq %r10, %rcx
  6343. addq %rbx, %r9
  6344. rorq $28, %rcx
  6345. movq %r13, %rax
  6346. addq %rcx, %r9
  6347. rorq $23, %rax
  6348. movq %r9, %rbx
  6349. movq %r14, %rcx
  6350. addq 120(%rsp), %r8
  6351. xorq %r15, %rcx
  6352. xorq %r13, %rax
  6353. andq %r13, %rcx
  6354. rorq $4, %rax
  6355. xorq %r15, %rcx
  6356. xorq %r13, %rax
  6357. addq %rcx, %r8
  6358. rorq $14, %rax
  6359. xorq %r10, %rbx
  6360. addq %rax, %r8
  6361. movq %r9, %rcx
  6362. andq %rbx, %rdx
  6363. rorq $5, %rcx
  6364. xorq %r9, %rcx
  6365. xorq %r10, %rdx
  6366. rorq $6, %rcx
  6367. addq %r8, %r12
  6368. xorq %r9, %rcx
  6369. addq %rdx, %r8
  6370. rorq $28, %rcx
  6371. movq %r12, %rax
  6372. addq %rcx, %r8
  6373. addq %r8, (%rdi)
  6374. addq %r9, 8(%rdi)
  6375. addq %r10, 16(%rdi)
  6376. addq %r11, 24(%rdi)
  6377. addq %r12, 32(%rdi)
  6378. addq %r13, 40(%rdi)
  6379. addq %r14, 48(%rdi)
  6380. addq %r15, 56(%rdi)
  6381. xorq %rax, %rax
  6382. vzeroupper
  6383. addq $0x88, %rsp
  6384. popq %r15
  6385. popq %r14
  6386. popq %r13
  6387. popq %r12
  6388. popq %rbx
  6389. repz retq
  6390. #ifndef __APPLE__
  6391. .size Transform_Sha512_AVX2,.-Transform_Sha512_AVX2
  6392. #endif /* __APPLE__ */
  6393. #ifndef __APPLE__
  6394. .text
  6395. .globl Transform_Sha512_AVX2_Len
  6396. .type Transform_Sha512_AVX2_Len,@function
  6397. .align 16
  6398. Transform_Sha512_AVX2_Len:
  6399. #else
  6400. .section __TEXT,__text
  6401. .globl _Transform_Sha512_AVX2_Len
  6402. .p2align 4
  6403. _Transform_Sha512_AVX2_Len:
  6404. #endif /* __APPLE__ */
  6405. pushq %rbx
  6406. pushq %r12
  6407. pushq %r13
  6408. pushq %r14
  6409. pushq %r15
  6410. pushq %rbp
  6411. movq %rsi, %rbp
  6412. testb $0x80, %bpl
  6413. je L_sha512_len_avx2_block
  6414. movq 224(%rdi), %rcx
  6415. vmovdqu (%rcx), %ymm0
  6416. vmovdqu 32(%rcx), %ymm1
  6417. vmovdqu 64(%rcx), %ymm2
  6418. vmovdqu 96(%rcx), %ymm3
  6419. vmovups %ymm0, 64(%rdi)
  6420. vmovups %ymm1, 96(%rdi)
  6421. vmovups %ymm2, 128(%rdi)
  6422. vmovups %ymm3, 160(%rdi)
  6423. #ifndef __APPLE__
  6424. call Transform_Sha512_AVX2@plt
  6425. #else
  6426. call _Transform_Sha512_AVX2
  6427. #endif /* __APPLE__ */
  6428. addq $0x80, 224(%rdi)
  6429. subl $0x80, %ebp
  6430. jz L_sha512_len_avx2_done
  6431. L_sha512_len_avx2_block:
  6432. subq $0x548, %rsp
  6433. movq 224(%rdi), %rcx
  6434. vmovdqa L_avx2_sha512_flip_mask(%rip), %ymm15
  6435. movq (%rdi), %r8
  6436. movq 8(%rdi), %r9
  6437. movq 16(%rdi), %r10
  6438. movq 24(%rdi), %r11
  6439. movq 32(%rdi), %r12
  6440. movq 40(%rdi), %r13
  6441. movq 48(%rdi), %r14
  6442. movq 56(%rdi), %r15
  6443. movq %rbp, 1344(%rsp)
  6444. # Start of loop processing two blocks
  6445. L_sha512_len_avx2_begin:
  6446. movq %rsp, %rbp
  6447. leaq L_avx2_sha512_k_2(%rip), %rsi
  6448. movq %r9, %rbx
  6449. movq %r12, %rax
  6450. vmovdqu (%rcx), %xmm0
  6451. vmovdqu 16(%rcx), %xmm1
  6452. vinserti128 $0x01, 128(%rcx), %ymm0, %ymm0
  6453. vinserti128 $0x01, 144(%rcx), %ymm1, %ymm1
  6454. vpshufb %ymm15, %ymm0, %ymm0
  6455. vpshufb %ymm15, %ymm1, %ymm1
  6456. vmovdqu 32(%rcx), %xmm2
  6457. vmovdqu 48(%rcx), %xmm3
  6458. vinserti128 $0x01, 160(%rcx), %ymm2, %ymm2
  6459. vinserti128 $0x01, 176(%rcx), %ymm3, %ymm3
  6460. vpshufb %ymm15, %ymm2, %ymm2
  6461. vpshufb %ymm15, %ymm3, %ymm3
  6462. vmovdqu 64(%rcx), %xmm4
  6463. vmovdqu 80(%rcx), %xmm5
  6464. vinserti128 $0x01, 192(%rcx), %ymm4, %ymm4
  6465. vinserti128 $0x01, 208(%rcx), %ymm5, %ymm5
  6466. vpshufb %ymm15, %ymm4, %ymm4
  6467. vpshufb %ymm15, %ymm5, %ymm5
  6468. vmovdqu 96(%rcx), %xmm6
  6469. vmovdqu 112(%rcx), %xmm7
  6470. vinserti128 $0x01, 224(%rcx), %ymm6, %ymm6
  6471. vinserti128 $0x01, 240(%rcx), %ymm7, %ymm7
  6472. vpshufb %ymm15, %ymm6, %ymm6
  6473. vpshufb %ymm15, %ymm7, %ymm7
  6474. xorq %r10, %rbx
  6475. # Start of 16 rounds
  6476. L_sha512_len_avx2_start:
  6477. vpaddq (%rsi), %ymm0, %ymm8
  6478. vpaddq 32(%rsi), %ymm1, %ymm9
  6479. vmovdqu %ymm8, (%rbp)
  6480. vmovdqu %ymm9, 32(%rbp)
  6481. vpaddq 64(%rsi), %ymm2, %ymm8
  6482. vpaddq 96(%rsi), %ymm3, %ymm9
  6483. vmovdqu %ymm8, 64(%rbp)
  6484. vmovdqu %ymm9, 96(%rbp)
  6485. vpaddq 128(%rsi), %ymm4, %ymm8
  6486. vpaddq 160(%rsi), %ymm5, %ymm9
  6487. vmovdqu %ymm8, 128(%rbp)
  6488. vmovdqu %ymm9, 160(%rbp)
  6489. vpaddq 192(%rsi), %ymm6, %ymm8
  6490. vpaddq 224(%rsi), %ymm7, %ymm9
  6491. vmovdqu %ymm8, 192(%rbp)
  6492. vmovdqu %ymm9, 224(%rbp)
  6493. # msg_sched: 0-1
  6494. rorq $23, %rax
  6495. vpalignr $8, %ymm0, %ymm1, %ymm12
  6496. vpalignr $8, %ymm4, %ymm5, %ymm13
  6497. movq %r8, %rdx
  6498. movq %r13, %rcx
  6499. addq (%rbp), %r15
  6500. xorq %r14, %rcx
  6501. vpsrlq $0x01, %ymm12, %ymm8
  6502. vpsllq $63, %ymm12, %ymm9
  6503. xorq %r12, %rax
  6504. andq %r12, %rcx
  6505. rorq $4, %rax
  6506. xorq %r14, %rcx
  6507. vpsrlq $8, %ymm12, %ymm10
  6508. vpsllq $56, %ymm12, %ymm11
  6509. xorq %r12, %rax
  6510. addq %rcx, %r15
  6511. rorq $14, %rax
  6512. xorq %r9, %rdx
  6513. vpor %ymm9, %ymm8, %ymm8
  6514. vpor %ymm11, %ymm10, %ymm10
  6515. addq %rax, %r15
  6516. movq %r8, %rcx
  6517. andq %rdx, %rbx
  6518. rorq $5, %rcx
  6519. vpsrlq $7, %ymm12, %ymm11
  6520. vpxor %ymm10, %ymm8, %ymm8
  6521. xorq %r8, %rcx
  6522. xorq %r9, %rbx
  6523. rorq $6, %rcx
  6524. addq %r15, %r11
  6525. vpxor %ymm11, %ymm8, %ymm8
  6526. vpaddq %ymm0, %ymm13, %ymm0
  6527. xorq %r8, %rcx
  6528. addq %rbx, %r15
  6529. rorq $28, %rcx
  6530. movq %r11, %rax
  6531. addq %rcx, %r15
  6532. rorq $23, %rax
  6533. vpaddq %ymm0, %ymm8, %ymm0
  6534. movq %r15, %rbx
  6535. movq %r12, %rcx
  6536. addq 8(%rbp), %r14
  6537. xorq %r13, %rcx
  6538. vpsrlq $19, %ymm7, %ymm8
  6539. vpsllq $45, %ymm7, %ymm9
  6540. xorq %r11, %rax
  6541. andq %r11, %rcx
  6542. rorq $4, %rax
  6543. xorq %r13, %rcx
  6544. vpsrlq $61, %ymm7, %ymm10
  6545. vpsllq $3, %ymm7, %ymm11
  6546. xorq %r11, %rax
  6547. addq %rcx, %r14
  6548. rorq $14, %rax
  6549. xorq %r8, %rbx
  6550. addq %rax, %r14
  6551. movq %r15, %rcx
  6552. vpor %ymm9, %ymm8, %ymm8
  6553. vpor %ymm11, %ymm10, %ymm10
  6554. andq %rbx, %rdx
  6555. rorq $5, %rcx
  6556. xorq %r15, %rcx
  6557. xorq %r8, %rdx
  6558. vpxor %ymm10, %ymm8, %ymm8
  6559. vpsrlq $6, %ymm7, %ymm11
  6560. rorq $6, %rcx
  6561. addq %r14, %r10
  6562. xorq %r15, %rcx
  6563. addq %rdx, %r14
  6564. vpxor %ymm11, %ymm8, %ymm8
  6565. rorq $28, %rcx
  6566. movq %r10, %rax
  6567. addq %rcx, %r14
  6568. vpaddq %ymm0, %ymm8, %ymm0
  6569. # msg_sched done: 0-3
  6570. # msg_sched: 4-5
  6571. rorq $23, %rax
  6572. vpalignr $8, %ymm1, %ymm2, %ymm12
  6573. vpalignr $8, %ymm5, %ymm6, %ymm13
  6574. movq %r14, %rdx
  6575. movq %r11, %rcx
  6576. addq 32(%rbp), %r13
  6577. xorq %r12, %rcx
  6578. vpsrlq $0x01, %ymm12, %ymm8
  6579. vpsllq $63, %ymm12, %ymm9
  6580. xorq %r10, %rax
  6581. andq %r10, %rcx
  6582. rorq $4, %rax
  6583. xorq %r12, %rcx
  6584. vpsrlq $8, %ymm12, %ymm10
  6585. vpsllq $56, %ymm12, %ymm11
  6586. xorq %r10, %rax
  6587. addq %rcx, %r13
  6588. rorq $14, %rax
  6589. xorq %r15, %rdx
  6590. vpor %ymm9, %ymm8, %ymm8
  6591. vpor %ymm11, %ymm10, %ymm10
  6592. addq %rax, %r13
  6593. movq %r14, %rcx
  6594. andq %rdx, %rbx
  6595. rorq $5, %rcx
  6596. vpsrlq $7, %ymm12, %ymm11
  6597. vpxor %ymm10, %ymm8, %ymm8
  6598. xorq %r14, %rcx
  6599. xorq %r15, %rbx
  6600. rorq $6, %rcx
  6601. addq %r13, %r9
  6602. vpxor %ymm11, %ymm8, %ymm8
  6603. vpaddq %ymm1, %ymm13, %ymm1
  6604. xorq %r14, %rcx
  6605. addq %rbx, %r13
  6606. rorq $28, %rcx
  6607. movq %r9, %rax
  6608. addq %rcx, %r13
  6609. rorq $23, %rax
  6610. vpaddq %ymm1, %ymm8, %ymm1
  6611. movq %r13, %rbx
  6612. movq %r10, %rcx
  6613. addq 40(%rbp), %r12
  6614. xorq %r11, %rcx
  6615. vpsrlq $19, %ymm0, %ymm8
  6616. vpsllq $45, %ymm0, %ymm9
  6617. xorq %r9, %rax
  6618. andq %r9, %rcx
  6619. rorq $4, %rax
  6620. xorq %r11, %rcx
  6621. vpsrlq $61, %ymm0, %ymm10
  6622. vpsllq $3, %ymm0, %ymm11
  6623. xorq %r9, %rax
  6624. addq %rcx, %r12
  6625. rorq $14, %rax
  6626. xorq %r14, %rbx
  6627. addq %rax, %r12
  6628. movq %r13, %rcx
  6629. vpor %ymm9, %ymm8, %ymm8
  6630. vpor %ymm11, %ymm10, %ymm10
  6631. andq %rbx, %rdx
  6632. rorq $5, %rcx
  6633. xorq %r13, %rcx
  6634. xorq %r14, %rdx
  6635. vpxor %ymm10, %ymm8, %ymm8
  6636. vpsrlq $6, %ymm0, %ymm11
  6637. rorq $6, %rcx
  6638. addq %r12, %r8
  6639. xorq %r13, %rcx
  6640. addq %rdx, %r12
  6641. vpxor %ymm11, %ymm8, %ymm8
  6642. rorq $28, %rcx
  6643. movq %r8, %rax
  6644. addq %rcx, %r12
  6645. vpaddq %ymm1, %ymm8, %ymm1
  6646. # msg_sched done: 4-7
  6647. # msg_sched: 8-9
  6648. rorq $23, %rax
  6649. vpalignr $8, %ymm2, %ymm3, %ymm12
  6650. vpalignr $8, %ymm6, %ymm7, %ymm13
  6651. movq %r12, %rdx
  6652. movq %r9, %rcx
  6653. addq 64(%rbp), %r11
  6654. xorq %r10, %rcx
  6655. vpsrlq $0x01, %ymm12, %ymm8
  6656. vpsllq $63, %ymm12, %ymm9
  6657. xorq %r8, %rax
  6658. andq %r8, %rcx
  6659. rorq $4, %rax
  6660. xorq %r10, %rcx
  6661. vpsrlq $8, %ymm12, %ymm10
  6662. vpsllq $56, %ymm12, %ymm11
  6663. xorq %r8, %rax
  6664. addq %rcx, %r11
  6665. rorq $14, %rax
  6666. xorq %r13, %rdx
  6667. vpor %ymm9, %ymm8, %ymm8
  6668. vpor %ymm11, %ymm10, %ymm10
  6669. addq %rax, %r11
  6670. movq %r12, %rcx
  6671. andq %rdx, %rbx
  6672. rorq $5, %rcx
  6673. vpsrlq $7, %ymm12, %ymm11
  6674. vpxor %ymm10, %ymm8, %ymm8
  6675. xorq %r12, %rcx
  6676. xorq %r13, %rbx
  6677. rorq $6, %rcx
  6678. addq %r11, %r15
  6679. vpxor %ymm11, %ymm8, %ymm8
  6680. vpaddq %ymm2, %ymm13, %ymm2
  6681. xorq %r12, %rcx
  6682. addq %rbx, %r11
  6683. rorq $28, %rcx
  6684. movq %r15, %rax
  6685. addq %rcx, %r11
  6686. rorq $23, %rax
  6687. vpaddq %ymm2, %ymm8, %ymm2
  6688. movq %r11, %rbx
  6689. movq %r8, %rcx
  6690. addq 72(%rbp), %r10
  6691. xorq %r9, %rcx
  6692. vpsrlq $19, %ymm1, %ymm8
  6693. vpsllq $45, %ymm1, %ymm9
  6694. xorq %r15, %rax
  6695. andq %r15, %rcx
  6696. rorq $4, %rax
  6697. xorq %r9, %rcx
  6698. vpsrlq $61, %ymm1, %ymm10
  6699. vpsllq $3, %ymm1, %ymm11
  6700. xorq %r15, %rax
  6701. addq %rcx, %r10
  6702. rorq $14, %rax
  6703. xorq %r12, %rbx
  6704. addq %rax, %r10
  6705. movq %r11, %rcx
  6706. vpor %ymm9, %ymm8, %ymm8
  6707. vpor %ymm11, %ymm10, %ymm10
  6708. andq %rbx, %rdx
  6709. rorq $5, %rcx
  6710. xorq %r11, %rcx
  6711. xorq %r12, %rdx
  6712. vpxor %ymm10, %ymm8, %ymm8
  6713. vpsrlq $6, %ymm1, %ymm11
  6714. rorq $6, %rcx
  6715. addq %r10, %r14
  6716. xorq %r11, %rcx
  6717. addq %rdx, %r10
  6718. vpxor %ymm11, %ymm8, %ymm8
  6719. rorq $28, %rcx
  6720. movq %r14, %rax
  6721. addq %rcx, %r10
  6722. vpaddq %ymm2, %ymm8, %ymm2
  6723. # msg_sched done: 8-11
  6724. # msg_sched: 12-13
  6725. rorq $23, %rax
  6726. vpalignr $8, %ymm3, %ymm4, %ymm12
  6727. vpalignr $8, %ymm7, %ymm0, %ymm13
  6728. movq %r10, %rdx
  6729. movq %r15, %rcx
  6730. addq 96(%rbp), %r9
  6731. xorq %r8, %rcx
  6732. vpsrlq $0x01, %ymm12, %ymm8
  6733. vpsllq $63, %ymm12, %ymm9
  6734. xorq %r14, %rax
  6735. andq %r14, %rcx
  6736. rorq $4, %rax
  6737. xorq %r8, %rcx
  6738. vpsrlq $8, %ymm12, %ymm10
  6739. vpsllq $56, %ymm12, %ymm11
  6740. xorq %r14, %rax
  6741. addq %rcx, %r9
  6742. rorq $14, %rax
  6743. xorq %r11, %rdx
  6744. vpor %ymm9, %ymm8, %ymm8
  6745. vpor %ymm11, %ymm10, %ymm10
  6746. addq %rax, %r9
  6747. movq %r10, %rcx
  6748. andq %rdx, %rbx
  6749. rorq $5, %rcx
  6750. vpsrlq $7, %ymm12, %ymm11
  6751. vpxor %ymm10, %ymm8, %ymm8
  6752. xorq %r10, %rcx
  6753. xorq %r11, %rbx
  6754. rorq $6, %rcx
  6755. addq %r9, %r13
  6756. vpxor %ymm11, %ymm8, %ymm8
  6757. vpaddq %ymm3, %ymm13, %ymm3
  6758. xorq %r10, %rcx
  6759. addq %rbx, %r9
  6760. rorq $28, %rcx
  6761. movq %r13, %rax
  6762. addq %rcx, %r9
  6763. rorq $23, %rax
  6764. vpaddq %ymm3, %ymm8, %ymm3
  6765. movq %r9, %rbx
  6766. movq %r14, %rcx
  6767. addq 104(%rbp), %r8
  6768. xorq %r15, %rcx
  6769. vpsrlq $19, %ymm2, %ymm8
  6770. vpsllq $45, %ymm2, %ymm9
  6771. xorq %r13, %rax
  6772. andq %r13, %rcx
  6773. rorq $4, %rax
  6774. xorq %r15, %rcx
  6775. vpsrlq $61, %ymm2, %ymm10
  6776. vpsllq $3, %ymm2, %ymm11
  6777. xorq %r13, %rax
  6778. addq %rcx, %r8
  6779. rorq $14, %rax
  6780. xorq %r10, %rbx
  6781. addq %rax, %r8
  6782. movq %r9, %rcx
  6783. vpor %ymm9, %ymm8, %ymm8
  6784. vpor %ymm11, %ymm10, %ymm10
  6785. andq %rbx, %rdx
  6786. rorq $5, %rcx
  6787. xorq %r9, %rcx
  6788. xorq %r10, %rdx
  6789. vpxor %ymm10, %ymm8, %ymm8
  6790. vpsrlq $6, %ymm2, %ymm11
  6791. rorq $6, %rcx
  6792. addq %r8, %r12
  6793. xorq %r9, %rcx
  6794. addq %rdx, %r8
  6795. vpxor %ymm11, %ymm8, %ymm8
  6796. rorq $28, %rcx
  6797. movq %r12, %rax
  6798. addq %rcx, %r8
  6799. vpaddq %ymm3, %ymm8, %ymm3
  6800. # msg_sched done: 12-15
  6801. # msg_sched: 16-17
  6802. rorq $23, %rax
  6803. vpalignr $8, %ymm4, %ymm5, %ymm12
  6804. vpalignr $8, %ymm0, %ymm1, %ymm13
  6805. movq %r8, %rdx
  6806. movq %r13, %rcx
  6807. addq 128(%rbp), %r15
  6808. xorq %r14, %rcx
  6809. vpsrlq $0x01, %ymm12, %ymm8
  6810. vpsllq $63, %ymm12, %ymm9
  6811. xorq %r12, %rax
  6812. andq %r12, %rcx
  6813. rorq $4, %rax
  6814. xorq %r14, %rcx
  6815. vpsrlq $8, %ymm12, %ymm10
  6816. vpsllq $56, %ymm12, %ymm11
  6817. xorq %r12, %rax
  6818. addq %rcx, %r15
  6819. rorq $14, %rax
  6820. xorq %r9, %rdx
  6821. vpor %ymm9, %ymm8, %ymm8
  6822. vpor %ymm11, %ymm10, %ymm10
  6823. addq %rax, %r15
  6824. movq %r8, %rcx
  6825. andq %rdx, %rbx
  6826. rorq $5, %rcx
  6827. vpsrlq $7, %ymm12, %ymm11
  6828. vpxor %ymm10, %ymm8, %ymm8
  6829. xorq %r8, %rcx
  6830. xorq %r9, %rbx
  6831. rorq $6, %rcx
  6832. addq %r15, %r11
  6833. vpxor %ymm11, %ymm8, %ymm8
  6834. vpaddq %ymm4, %ymm13, %ymm4
  6835. xorq %r8, %rcx
  6836. addq %rbx, %r15
  6837. rorq $28, %rcx
  6838. movq %r11, %rax
  6839. addq %rcx, %r15
  6840. rorq $23, %rax
  6841. vpaddq %ymm4, %ymm8, %ymm4
  6842. movq %r15, %rbx
  6843. movq %r12, %rcx
  6844. addq 136(%rbp), %r14
  6845. xorq %r13, %rcx
  6846. vpsrlq $19, %ymm3, %ymm8
  6847. vpsllq $45, %ymm3, %ymm9
  6848. xorq %r11, %rax
  6849. andq %r11, %rcx
  6850. rorq $4, %rax
  6851. xorq %r13, %rcx
  6852. vpsrlq $61, %ymm3, %ymm10
  6853. vpsllq $3, %ymm3, %ymm11
  6854. xorq %r11, %rax
  6855. addq %rcx, %r14
  6856. rorq $14, %rax
  6857. xorq %r8, %rbx
  6858. addq %rax, %r14
  6859. movq %r15, %rcx
  6860. vpor %ymm9, %ymm8, %ymm8
  6861. vpor %ymm11, %ymm10, %ymm10
  6862. andq %rbx, %rdx
  6863. rorq $5, %rcx
  6864. xorq %r15, %rcx
  6865. xorq %r8, %rdx
  6866. vpxor %ymm10, %ymm8, %ymm8
  6867. vpsrlq $6, %ymm3, %ymm11
  6868. rorq $6, %rcx
  6869. addq %r14, %r10
  6870. xorq %r15, %rcx
  6871. addq %rdx, %r14
  6872. vpxor %ymm11, %ymm8, %ymm8
  6873. rorq $28, %rcx
  6874. movq %r10, %rax
  6875. addq %rcx, %r14
  6876. vpaddq %ymm4, %ymm8, %ymm4
  6877. # msg_sched done: 16-19
  6878. # msg_sched: 20-21
  6879. rorq $23, %rax
  6880. vpalignr $8, %ymm5, %ymm6, %ymm12
  6881. vpalignr $8, %ymm1, %ymm2, %ymm13
  6882. movq %r14, %rdx
  6883. movq %r11, %rcx
  6884. addq 160(%rbp), %r13
  6885. xorq %r12, %rcx
  6886. vpsrlq $0x01, %ymm12, %ymm8
  6887. vpsllq $63, %ymm12, %ymm9
  6888. xorq %r10, %rax
  6889. andq %r10, %rcx
  6890. rorq $4, %rax
  6891. xorq %r12, %rcx
  6892. vpsrlq $8, %ymm12, %ymm10
  6893. vpsllq $56, %ymm12, %ymm11
  6894. xorq %r10, %rax
  6895. addq %rcx, %r13
  6896. rorq $14, %rax
  6897. xorq %r15, %rdx
  6898. vpor %ymm9, %ymm8, %ymm8
  6899. vpor %ymm11, %ymm10, %ymm10
  6900. addq %rax, %r13
  6901. movq %r14, %rcx
  6902. andq %rdx, %rbx
  6903. rorq $5, %rcx
  6904. vpsrlq $7, %ymm12, %ymm11
  6905. vpxor %ymm10, %ymm8, %ymm8
  6906. xorq %r14, %rcx
  6907. xorq %r15, %rbx
  6908. rorq $6, %rcx
  6909. addq %r13, %r9
  6910. vpxor %ymm11, %ymm8, %ymm8
  6911. vpaddq %ymm5, %ymm13, %ymm5
  6912. xorq %r14, %rcx
  6913. addq %rbx, %r13
  6914. rorq $28, %rcx
  6915. movq %r9, %rax
  6916. addq %rcx, %r13
  6917. rorq $23, %rax
  6918. vpaddq %ymm5, %ymm8, %ymm5
  6919. movq %r13, %rbx
  6920. movq %r10, %rcx
  6921. addq 168(%rbp), %r12
  6922. xorq %r11, %rcx
  6923. vpsrlq $19, %ymm4, %ymm8
  6924. vpsllq $45, %ymm4, %ymm9
  6925. xorq %r9, %rax
  6926. andq %r9, %rcx
  6927. rorq $4, %rax
  6928. xorq %r11, %rcx
  6929. vpsrlq $61, %ymm4, %ymm10
  6930. vpsllq $3, %ymm4, %ymm11
  6931. xorq %r9, %rax
  6932. addq %rcx, %r12
  6933. rorq $14, %rax
  6934. xorq %r14, %rbx
  6935. addq %rax, %r12
  6936. movq %r13, %rcx
  6937. vpor %ymm9, %ymm8, %ymm8
  6938. vpor %ymm11, %ymm10, %ymm10
  6939. andq %rbx, %rdx
  6940. rorq $5, %rcx
  6941. xorq %r13, %rcx
  6942. xorq %r14, %rdx
  6943. vpxor %ymm10, %ymm8, %ymm8
  6944. vpsrlq $6, %ymm4, %ymm11
  6945. rorq $6, %rcx
  6946. addq %r12, %r8
  6947. xorq %r13, %rcx
  6948. addq %rdx, %r12
  6949. vpxor %ymm11, %ymm8, %ymm8
  6950. rorq $28, %rcx
  6951. movq %r8, %rax
  6952. addq %rcx, %r12
  6953. vpaddq %ymm5, %ymm8, %ymm5
  6954. # msg_sched done: 20-23
  6955. # msg_sched: 24-25
  6956. rorq $23, %rax
  6957. vpalignr $8, %ymm6, %ymm7, %ymm12
  6958. vpalignr $8, %ymm2, %ymm3, %ymm13
  6959. movq %r12, %rdx
  6960. movq %r9, %rcx
  6961. addq 192(%rbp), %r11
  6962. xorq %r10, %rcx
  6963. vpsrlq $0x01, %ymm12, %ymm8
  6964. vpsllq $63, %ymm12, %ymm9
  6965. xorq %r8, %rax
  6966. andq %r8, %rcx
  6967. rorq $4, %rax
  6968. xorq %r10, %rcx
  6969. vpsrlq $8, %ymm12, %ymm10
  6970. vpsllq $56, %ymm12, %ymm11
  6971. xorq %r8, %rax
  6972. addq %rcx, %r11
  6973. rorq $14, %rax
  6974. xorq %r13, %rdx
  6975. vpor %ymm9, %ymm8, %ymm8
  6976. vpor %ymm11, %ymm10, %ymm10
  6977. addq %rax, %r11
  6978. movq %r12, %rcx
  6979. andq %rdx, %rbx
  6980. rorq $5, %rcx
  6981. vpsrlq $7, %ymm12, %ymm11
  6982. vpxor %ymm10, %ymm8, %ymm8
  6983. xorq %r12, %rcx
  6984. xorq %r13, %rbx
  6985. rorq $6, %rcx
  6986. addq %r11, %r15
  6987. vpxor %ymm11, %ymm8, %ymm8
  6988. vpaddq %ymm6, %ymm13, %ymm6
  6989. xorq %r12, %rcx
  6990. addq %rbx, %r11
  6991. rorq $28, %rcx
  6992. movq %r15, %rax
  6993. addq %rcx, %r11
  6994. rorq $23, %rax
  6995. vpaddq %ymm6, %ymm8, %ymm6
  6996. movq %r11, %rbx
  6997. movq %r8, %rcx
  6998. addq 200(%rbp), %r10
  6999. xorq %r9, %rcx
  7000. vpsrlq $19, %ymm5, %ymm8
  7001. vpsllq $45, %ymm5, %ymm9
  7002. xorq %r15, %rax
  7003. andq %r15, %rcx
  7004. rorq $4, %rax
  7005. xorq %r9, %rcx
  7006. vpsrlq $61, %ymm5, %ymm10
  7007. vpsllq $3, %ymm5, %ymm11
  7008. xorq %r15, %rax
  7009. addq %rcx, %r10
  7010. rorq $14, %rax
  7011. xorq %r12, %rbx
  7012. addq %rax, %r10
  7013. movq %r11, %rcx
  7014. vpor %ymm9, %ymm8, %ymm8
  7015. vpor %ymm11, %ymm10, %ymm10
  7016. andq %rbx, %rdx
  7017. rorq $5, %rcx
  7018. xorq %r11, %rcx
  7019. xorq %r12, %rdx
  7020. vpxor %ymm10, %ymm8, %ymm8
  7021. vpsrlq $6, %ymm5, %ymm11
  7022. rorq $6, %rcx
  7023. addq %r10, %r14
  7024. xorq %r11, %rcx
  7025. addq %rdx, %r10
  7026. vpxor %ymm11, %ymm8, %ymm8
  7027. rorq $28, %rcx
  7028. movq %r14, %rax
  7029. addq %rcx, %r10
  7030. vpaddq %ymm6, %ymm8, %ymm6
  7031. # msg_sched done: 24-27
  7032. # msg_sched: 28-29
  7033. rorq $23, %rax
  7034. vpalignr $8, %ymm7, %ymm0, %ymm12
  7035. vpalignr $8, %ymm3, %ymm4, %ymm13
  7036. movq %r10, %rdx
  7037. movq %r15, %rcx
  7038. addq 224(%rbp), %r9
  7039. xorq %r8, %rcx
  7040. vpsrlq $0x01, %ymm12, %ymm8
  7041. vpsllq $63, %ymm12, %ymm9
  7042. xorq %r14, %rax
  7043. andq %r14, %rcx
  7044. rorq $4, %rax
  7045. xorq %r8, %rcx
  7046. vpsrlq $8, %ymm12, %ymm10
  7047. vpsllq $56, %ymm12, %ymm11
  7048. xorq %r14, %rax
  7049. addq %rcx, %r9
  7050. rorq $14, %rax
  7051. xorq %r11, %rdx
  7052. vpor %ymm9, %ymm8, %ymm8
  7053. vpor %ymm11, %ymm10, %ymm10
  7054. addq %rax, %r9
  7055. movq %r10, %rcx
  7056. andq %rdx, %rbx
  7057. rorq $5, %rcx
  7058. vpsrlq $7, %ymm12, %ymm11
  7059. vpxor %ymm10, %ymm8, %ymm8
  7060. xorq %r10, %rcx
  7061. xorq %r11, %rbx
  7062. rorq $6, %rcx
  7063. addq %r9, %r13
  7064. vpxor %ymm11, %ymm8, %ymm8
  7065. vpaddq %ymm7, %ymm13, %ymm7
  7066. xorq %r10, %rcx
  7067. addq %rbx, %r9
  7068. rorq $28, %rcx
  7069. movq %r13, %rax
  7070. addq %rcx, %r9
  7071. rorq $23, %rax
  7072. vpaddq %ymm7, %ymm8, %ymm7
  7073. movq %r9, %rbx
  7074. movq %r14, %rcx
  7075. addq 232(%rbp), %r8
  7076. xorq %r15, %rcx
  7077. vpsrlq $19, %ymm6, %ymm8
  7078. vpsllq $45, %ymm6, %ymm9
  7079. xorq %r13, %rax
  7080. andq %r13, %rcx
  7081. rorq $4, %rax
  7082. xorq %r15, %rcx
  7083. vpsrlq $61, %ymm6, %ymm10
  7084. vpsllq $3, %ymm6, %ymm11
  7085. xorq %r13, %rax
  7086. addq %rcx, %r8
  7087. rorq $14, %rax
  7088. xorq %r10, %rbx
  7089. addq %rax, %r8
  7090. movq %r9, %rcx
  7091. vpor %ymm9, %ymm8, %ymm8
  7092. vpor %ymm11, %ymm10, %ymm10
  7093. andq %rbx, %rdx
  7094. rorq $5, %rcx
  7095. xorq %r9, %rcx
  7096. xorq %r10, %rdx
  7097. vpxor %ymm10, %ymm8, %ymm8
  7098. vpsrlq $6, %ymm6, %ymm11
  7099. rorq $6, %rcx
  7100. addq %r8, %r12
  7101. xorq %r9, %rcx
  7102. addq %rdx, %r8
  7103. vpxor %ymm11, %ymm8, %ymm8
  7104. rorq $28, %rcx
  7105. movq %r12, %rax
  7106. addq %rcx, %r8
  7107. vpaddq %ymm7, %ymm8, %ymm7
  7108. # msg_sched done: 28-31
  7109. addq $0x100, %rsi
  7110. addq $0x100, %rbp
  7111. cmpq L_avx2_sha512_k_2_end(%rip), %rsi
  7112. jne L_sha512_len_avx2_start
  7113. vpaddq (%rsi), %ymm0, %ymm8
  7114. vpaddq 32(%rsi), %ymm1, %ymm9
  7115. vmovdqu %ymm8, (%rbp)
  7116. vmovdqu %ymm9, 32(%rbp)
  7117. vpaddq 64(%rsi), %ymm2, %ymm8
  7118. vpaddq 96(%rsi), %ymm3, %ymm9
  7119. vmovdqu %ymm8, 64(%rbp)
  7120. vmovdqu %ymm9, 96(%rbp)
  7121. vpaddq 128(%rsi), %ymm4, %ymm8
  7122. vpaddq 160(%rsi), %ymm5, %ymm9
  7123. vmovdqu %ymm8, 128(%rbp)
  7124. vmovdqu %ymm9, 160(%rbp)
  7125. vpaddq 192(%rsi), %ymm6, %ymm8
  7126. vpaddq 224(%rsi), %ymm7, %ymm9
  7127. vmovdqu %ymm8, 192(%rbp)
  7128. vmovdqu %ymm9, 224(%rbp)
  7129. rorq $23, %rax
  7130. movq %r8, %rdx
  7131. movq %r13, %rcx
  7132. addq (%rbp), %r15
  7133. xorq %r14, %rcx
  7134. xorq %r12, %rax
  7135. andq %r12, %rcx
  7136. rorq $4, %rax
  7137. xorq %r14, %rcx
  7138. xorq %r12, %rax
  7139. addq %rcx, %r15
  7140. rorq $14, %rax
  7141. xorq %r9, %rdx
  7142. addq %rax, %r15
  7143. movq %r8, %rcx
  7144. andq %rdx, %rbx
  7145. rorq $5, %rcx
  7146. xorq %r8, %rcx
  7147. xorq %r9, %rbx
  7148. rorq $6, %rcx
  7149. addq %r15, %r11
  7150. xorq %r8, %rcx
  7151. addq %rbx, %r15
  7152. rorq $28, %rcx
  7153. movq %r11, %rax
  7154. addq %rcx, %r15
  7155. rorq $23, %rax
  7156. movq %r15, %rbx
  7157. movq %r12, %rcx
  7158. addq 8(%rbp), %r14
  7159. xorq %r13, %rcx
  7160. xorq %r11, %rax
  7161. andq %r11, %rcx
  7162. rorq $4, %rax
  7163. xorq %r13, %rcx
  7164. xorq %r11, %rax
  7165. addq %rcx, %r14
  7166. rorq $14, %rax
  7167. xorq %r8, %rbx
  7168. addq %rax, %r14
  7169. movq %r15, %rcx
  7170. andq %rbx, %rdx
  7171. rorq $5, %rcx
  7172. xorq %r15, %rcx
  7173. xorq %r8, %rdx
  7174. rorq $6, %rcx
  7175. addq %r14, %r10
  7176. xorq %r15, %rcx
  7177. addq %rdx, %r14
  7178. rorq $28, %rcx
  7179. movq %r10, %rax
  7180. addq %rcx, %r14
  7181. rorq $23, %rax
  7182. movq %r14, %rdx
  7183. movq %r11, %rcx
  7184. addq 32(%rbp), %r13
  7185. xorq %r12, %rcx
  7186. xorq %r10, %rax
  7187. andq %r10, %rcx
  7188. rorq $4, %rax
  7189. xorq %r12, %rcx
  7190. xorq %r10, %rax
  7191. addq %rcx, %r13
  7192. rorq $14, %rax
  7193. xorq %r15, %rdx
  7194. addq %rax, %r13
  7195. movq %r14, %rcx
  7196. andq %rdx, %rbx
  7197. rorq $5, %rcx
  7198. xorq %r14, %rcx
  7199. xorq %r15, %rbx
  7200. rorq $6, %rcx
  7201. addq %r13, %r9
  7202. xorq %r14, %rcx
  7203. addq %rbx, %r13
  7204. rorq $28, %rcx
  7205. movq %r9, %rax
  7206. addq %rcx, %r13
  7207. rorq $23, %rax
  7208. movq %r13, %rbx
  7209. movq %r10, %rcx
  7210. addq 40(%rbp), %r12
  7211. xorq %r11, %rcx
  7212. xorq %r9, %rax
  7213. andq %r9, %rcx
  7214. rorq $4, %rax
  7215. xorq %r11, %rcx
  7216. xorq %r9, %rax
  7217. addq %rcx, %r12
  7218. rorq $14, %rax
  7219. xorq %r14, %rbx
  7220. addq %rax, %r12
  7221. movq %r13, %rcx
  7222. andq %rbx, %rdx
  7223. rorq $5, %rcx
  7224. xorq %r13, %rcx
  7225. xorq %r14, %rdx
  7226. rorq $6, %rcx
  7227. addq %r12, %r8
  7228. xorq %r13, %rcx
  7229. addq %rdx, %r12
  7230. rorq $28, %rcx
  7231. movq %r8, %rax
  7232. addq %rcx, %r12
  7233. rorq $23, %rax
  7234. movq %r12, %rdx
  7235. movq %r9, %rcx
  7236. addq 64(%rbp), %r11
  7237. xorq %r10, %rcx
  7238. xorq %r8, %rax
  7239. andq %r8, %rcx
  7240. rorq $4, %rax
  7241. xorq %r10, %rcx
  7242. xorq %r8, %rax
  7243. addq %rcx, %r11
  7244. rorq $14, %rax
  7245. xorq %r13, %rdx
  7246. addq %rax, %r11
  7247. movq %r12, %rcx
  7248. andq %rdx, %rbx
  7249. rorq $5, %rcx
  7250. xorq %r12, %rcx
  7251. xorq %r13, %rbx
  7252. rorq $6, %rcx
  7253. addq %r11, %r15
  7254. xorq %r12, %rcx
  7255. addq %rbx, %r11
  7256. rorq $28, %rcx
  7257. movq %r15, %rax
  7258. addq %rcx, %r11
  7259. rorq $23, %rax
  7260. movq %r11, %rbx
  7261. movq %r8, %rcx
  7262. addq 72(%rbp), %r10
  7263. xorq %r9, %rcx
  7264. xorq %r15, %rax
  7265. andq %r15, %rcx
  7266. rorq $4, %rax
  7267. xorq %r9, %rcx
  7268. xorq %r15, %rax
  7269. addq %rcx, %r10
  7270. rorq $14, %rax
  7271. xorq %r12, %rbx
  7272. addq %rax, %r10
  7273. movq %r11, %rcx
  7274. andq %rbx, %rdx
  7275. rorq $5, %rcx
  7276. xorq %r11, %rcx
  7277. xorq %r12, %rdx
  7278. rorq $6, %rcx
  7279. addq %r10, %r14
  7280. xorq %r11, %rcx
  7281. addq %rdx, %r10
  7282. rorq $28, %rcx
  7283. movq %r14, %rax
  7284. addq %rcx, %r10
  7285. rorq $23, %rax
  7286. movq %r10, %rdx
  7287. movq %r15, %rcx
  7288. addq 96(%rbp), %r9
  7289. xorq %r8, %rcx
  7290. xorq %r14, %rax
  7291. andq %r14, %rcx
  7292. rorq $4, %rax
  7293. xorq %r8, %rcx
  7294. xorq %r14, %rax
  7295. addq %rcx, %r9
  7296. rorq $14, %rax
  7297. xorq %r11, %rdx
  7298. addq %rax, %r9
  7299. movq %r10, %rcx
  7300. andq %rdx, %rbx
  7301. rorq $5, %rcx
  7302. xorq %r10, %rcx
  7303. xorq %r11, %rbx
  7304. rorq $6, %rcx
  7305. addq %r9, %r13
  7306. xorq %r10, %rcx
  7307. addq %rbx, %r9
  7308. rorq $28, %rcx
  7309. movq %r13, %rax
  7310. addq %rcx, %r9
  7311. rorq $23, %rax
  7312. movq %r9, %rbx
  7313. movq %r14, %rcx
  7314. addq 104(%rbp), %r8
  7315. xorq %r15, %rcx
  7316. xorq %r13, %rax
  7317. andq %r13, %rcx
  7318. rorq $4, %rax
  7319. xorq %r15, %rcx
  7320. xorq %r13, %rax
  7321. addq %rcx, %r8
  7322. rorq $14, %rax
  7323. xorq %r10, %rbx
  7324. addq %rax, %r8
  7325. movq %r9, %rcx
  7326. andq %rbx, %rdx
  7327. rorq $5, %rcx
  7328. xorq %r9, %rcx
  7329. xorq %r10, %rdx
  7330. rorq $6, %rcx
  7331. addq %r8, %r12
  7332. xorq %r9, %rcx
  7333. addq %rdx, %r8
  7334. rorq $28, %rcx
  7335. movq %r12, %rax
  7336. addq %rcx, %r8
  7337. rorq $23, %rax
  7338. movq %r8, %rdx
  7339. movq %r13, %rcx
  7340. addq 128(%rbp), %r15
  7341. xorq %r14, %rcx
  7342. xorq %r12, %rax
  7343. andq %r12, %rcx
  7344. rorq $4, %rax
  7345. xorq %r14, %rcx
  7346. xorq %r12, %rax
  7347. addq %rcx, %r15
  7348. rorq $14, %rax
  7349. xorq %r9, %rdx
  7350. addq %rax, %r15
  7351. movq %r8, %rcx
  7352. andq %rdx, %rbx
  7353. rorq $5, %rcx
  7354. xorq %r8, %rcx
  7355. xorq %r9, %rbx
  7356. rorq $6, %rcx
  7357. addq %r15, %r11
  7358. xorq %r8, %rcx
  7359. addq %rbx, %r15
  7360. rorq $28, %rcx
  7361. movq %r11, %rax
  7362. addq %rcx, %r15
  7363. rorq $23, %rax
  7364. movq %r15, %rbx
  7365. movq %r12, %rcx
  7366. addq 136(%rbp), %r14
  7367. xorq %r13, %rcx
  7368. xorq %r11, %rax
  7369. andq %r11, %rcx
  7370. rorq $4, %rax
  7371. xorq %r13, %rcx
  7372. xorq %r11, %rax
  7373. addq %rcx, %r14
  7374. rorq $14, %rax
  7375. xorq %r8, %rbx
  7376. addq %rax, %r14
  7377. movq %r15, %rcx
  7378. andq %rbx, %rdx
  7379. rorq $5, %rcx
  7380. xorq %r15, %rcx
  7381. xorq %r8, %rdx
  7382. rorq $6, %rcx
  7383. addq %r14, %r10
  7384. xorq %r15, %rcx
  7385. addq %rdx, %r14
  7386. rorq $28, %rcx
  7387. movq %r10, %rax
  7388. addq %rcx, %r14
  7389. rorq $23, %rax
  7390. movq %r14, %rdx
  7391. movq %r11, %rcx
  7392. addq 160(%rbp), %r13
  7393. xorq %r12, %rcx
  7394. xorq %r10, %rax
  7395. andq %r10, %rcx
  7396. rorq $4, %rax
  7397. xorq %r12, %rcx
  7398. xorq %r10, %rax
  7399. addq %rcx, %r13
  7400. rorq $14, %rax
  7401. xorq %r15, %rdx
  7402. addq %rax, %r13
  7403. movq %r14, %rcx
  7404. andq %rdx, %rbx
  7405. rorq $5, %rcx
  7406. xorq %r14, %rcx
  7407. xorq %r15, %rbx
  7408. rorq $6, %rcx
  7409. addq %r13, %r9
  7410. xorq %r14, %rcx
  7411. addq %rbx, %r13
  7412. rorq $28, %rcx
  7413. movq %r9, %rax
  7414. addq %rcx, %r13
  7415. rorq $23, %rax
  7416. movq %r13, %rbx
  7417. movq %r10, %rcx
  7418. addq 168(%rbp), %r12
  7419. xorq %r11, %rcx
  7420. xorq %r9, %rax
  7421. andq %r9, %rcx
  7422. rorq $4, %rax
  7423. xorq %r11, %rcx
  7424. xorq %r9, %rax
  7425. addq %rcx, %r12
  7426. rorq $14, %rax
  7427. xorq %r14, %rbx
  7428. addq %rax, %r12
  7429. movq %r13, %rcx
  7430. andq %rbx, %rdx
  7431. rorq $5, %rcx
  7432. xorq %r13, %rcx
  7433. xorq %r14, %rdx
  7434. rorq $6, %rcx
  7435. addq %r12, %r8
  7436. xorq %r13, %rcx
  7437. addq %rdx, %r12
  7438. rorq $28, %rcx
  7439. movq %r8, %rax
  7440. addq %rcx, %r12
  7441. rorq $23, %rax
  7442. movq %r12, %rdx
  7443. movq %r9, %rcx
  7444. addq 192(%rbp), %r11
  7445. xorq %r10, %rcx
  7446. xorq %r8, %rax
  7447. andq %r8, %rcx
  7448. rorq $4, %rax
  7449. xorq %r10, %rcx
  7450. xorq %r8, %rax
  7451. addq %rcx, %r11
  7452. rorq $14, %rax
  7453. xorq %r13, %rdx
  7454. addq %rax, %r11
  7455. movq %r12, %rcx
  7456. andq %rdx, %rbx
  7457. rorq $5, %rcx
  7458. xorq %r12, %rcx
  7459. xorq %r13, %rbx
  7460. rorq $6, %rcx
  7461. addq %r11, %r15
  7462. xorq %r12, %rcx
  7463. addq %rbx, %r11
  7464. rorq $28, %rcx
  7465. movq %r15, %rax
  7466. addq %rcx, %r11
  7467. rorq $23, %rax
  7468. movq %r11, %rbx
  7469. movq %r8, %rcx
  7470. addq 200(%rbp), %r10
  7471. xorq %r9, %rcx
  7472. xorq %r15, %rax
  7473. andq %r15, %rcx
  7474. rorq $4, %rax
  7475. xorq %r9, %rcx
  7476. xorq %r15, %rax
  7477. addq %rcx, %r10
  7478. rorq $14, %rax
  7479. xorq %r12, %rbx
  7480. addq %rax, %r10
  7481. movq %r11, %rcx
  7482. andq %rbx, %rdx
  7483. rorq $5, %rcx
  7484. xorq %r11, %rcx
  7485. xorq %r12, %rdx
  7486. rorq $6, %rcx
  7487. addq %r10, %r14
  7488. xorq %r11, %rcx
  7489. addq %rdx, %r10
  7490. rorq $28, %rcx
  7491. movq %r14, %rax
  7492. addq %rcx, %r10
  7493. rorq $23, %rax
  7494. movq %r10, %rdx
  7495. movq %r15, %rcx
  7496. addq 224(%rbp), %r9
  7497. xorq %r8, %rcx
  7498. xorq %r14, %rax
  7499. andq %r14, %rcx
  7500. rorq $4, %rax
  7501. xorq %r8, %rcx
  7502. xorq %r14, %rax
  7503. addq %rcx, %r9
  7504. rorq $14, %rax
  7505. xorq %r11, %rdx
  7506. addq %rax, %r9
  7507. movq %r10, %rcx
  7508. andq %rdx, %rbx
  7509. rorq $5, %rcx
  7510. xorq %r10, %rcx
  7511. xorq %r11, %rbx
  7512. rorq $6, %rcx
  7513. addq %r9, %r13
  7514. xorq %r10, %rcx
  7515. addq %rbx, %r9
  7516. rorq $28, %rcx
  7517. movq %r13, %rax
  7518. addq %rcx, %r9
  7519. rorq $23, %rax
  7520. movq %r9, %rbx
  7521. movq %r14, %rcx
  7522. addq 232(%rbp), %r8
  7523. xorq %r15, %rcx
  7524. xorq %r13, %rax
  7525. andq %r13, %rcx
  7526. rorq $4, %rax
  7527. xorq %r15, %rcx
  7528. xorq %r13, %rax
  7529. addq %rcx, %r8
  7530. rorq $14, %rax
  7531. xorq %r10, %rbx
  7532. addq %rax, %r8
  7533. movq %r9, %rcx
  7534. andq %rbx, %rdx
  7535. rorq $5, %rcx
  7536. xorq %r9, %rcx
  7537. xorq %r10, %rdx
  7538. rorq $6, %rcx
  7539. addq %r8, %r12
  7540. xorq %r9, %rcx
  7541. addq %rdx, %r8
  7542. rorq $28, %rcx
  7543. movq %r12, %rax
  7544. addq %rcx, %r8
  7545. subq $0x400, %rbp
  7546. addq (%rdi), %r8
  7547. addq 8(%rdi), %r9
  7548. addq 16(%rdi), %r10
  7549. addq 24(%rdi), %r11
  7550. addq 32(%rdi), %r12
  7551. addq 40(%rdi), %r13
  7552. addq 48(%rdi), %r14
  7553. addq 56(%rdi), %r15
  7554. movq %r8, (%rdi)
  7555. movq %r9, 8(%rdi)
  7556. movq %r10, 16(%rdi)
  7557. movq %r11, 24(%rdi)
  7558. movq %r12, 32(%rdi)
  7559. movq %r13, 40(%rdi)
  7560. movq %r14, 48(%rdi)
  7561. movq %r15, 56(%rdi)
  7562. movq %r9, %rbx
  7563. movq %r12, %rax
  7564. xorq %r10, %rbx
  7565. movq $5, %rsi
  7566. L_sha512_len_avx2_tail:
  7567. rorq $23, %rax
  7568. movq %r8, %rdx
  7569. movq %r13, %rcx
  7570. addq 16(%rbp), %r15
  7571. xorq %r14, %rcx
  7572. xorq %r12, %rax
  7573. andq %r12, %rcx
  7574. rorq $4, %rax
  7575. xorq %r14, %rcx
  7576. xorq %r12, %rax
  7577. addq %rcx, %r15
  7578. rorq $14, %rax
  7579. xorq %r9, %rdx
  7580. addq %rax, %r15
  7581. movq %r8, %rcx
  7582. andq %rdx, %rbx
  7583. rorq $5, %rcx
  7584. xorq %r8, %rcx
  7585. xorq %r9, %rbx
  7586. rorq $6, %rcx
  7587. addq %r15, %r11
  7588. xorq %r8, %rcx
  7589. addq %rbx, %r15
  7590. rorq $28, %rcx
  7591. movq %r11, %rax
  7592. addq %rcx, %r15
  7593. rorq $23, %rax
  7594. movq %r15, %rbx
  7595. movq %r12, %rcx
  7596. addq 24(%rbp), %r14
  7597. xorq %r13, %rcx
  7598. xorq %r11, %rax
  7599. andq %r11, %rcx
  7600. rorq $4, %rax
  7601. xorq %r13, %rcx
  7602. xorq %r11, %rax
  7603. addq %rcx, %r14
  7604. rorq $14, %rax
  7605. xorq %r8, %rbx
  7606. addq %rax, %r14
  7607. movq %r15, %rcx
  7608. andq %rbx, %rdx
  7609. rorq $5, %rcx
  7610. xorq %r15, %rcx
  7611. xorq %r8, %rdx
  7612. rorq $6, %rcx
  7613. addq %r14, %r10
  7614. xorq %r15, %rcx
  7615. addq %rdx, %r14
  7616. rorq $28, %rcx
  7617. movq %r10, %rax
  7618. addq %rcx, %r14
  7619. rorq $23, %rax
  7620. movq %r14, %rdx
  7621. movq %r11, %rcx
  7622. addq 48(%rbp), %r13
  7623. xorq %r12, %rcx
  7624. xorq %r10, %rax
  7625. andq %r10, %rcx
  7626. rorq $4, %rax
  7627. xorq %r12, %rcx
  7628. xorq %r10, %rax
  7629. addq %rcx, %r13
  7630. rorq $14, %rax
  7631. xorq %r15, %rdx
  7632. addq %rax, %r13
  7633. movq %r14, %rcx
  7634. andq %rdx, %rbx
  7635. rorq $5, %rcx
  7636. xorq %r14, %rcx
  7637. xorq %r15, %rbx
  7638. rorq $6, %rcx
  7639. addq %r13, %r9
  7640. xorq %r14, %rcx
  7641. addq %rbx, %r13
  7642. rorq $28, %rcx
  7643. movq %r9, %rax
  7644. addq %rcx, %r13
  7645. rorq $23, %rax
  7646. movq %r13, %rbx
  7647. movq %r10, %rcx
  7648. addq 56(%rbp), %r12
  7649. xorq %r11, %rcx
  7650. xorq %r9, %rax
  7651. andq %r9, %rcx
  7652. rorq $4, %rax
  7653. xorq %r11, %rcx
  7654. xorq %r9, %rax
  7655. addq %rcx, %r12
  7656. rorq $14, %rax
  7657. xorq %r14, %rbx
  7658. addq %rax, %r12
  7659. movq %r13, %rcx
  7660. andq %rbx, %rdx
  7661. rorq $5, %rcx
  7662. xorq %r13, %rcx
  7663. xorq %r14, %rdx
  7664. rorq $6, %rcx
  7665. addq %r12, %r8
  7666. xorq %r13, %rcx
  7667. addq %rdx, %r12
  7668. rorq $28, %rcx
  7669. movq %r8, %rax
  7670. addq %rcx, %r12
  7671. rorq $23, %rax
  7672. movq %r12, %rdx
  7673. movq %r9, %rcx
  7674. addq 80(%rbp), %r11
  7675. xorq %r10, %rcx
  7676. xorq %r8, %rax
  7677. andq %r8, %rcx
  7678. rorq $4, %rax
  7679. xorq %r10, %rcx
  7680. xorq %r8, %rax
  7681. addq %rcx, %r11
  7682. rorq $14, %rax
  7683. xorq %r13, %rdx
  7684. addq %rax, %r11
  7685. movq %r12, %rcx
  7686. andq %rdx, %rbx
  7687. rorq $5, %rcx
  7688. xorq %r12, %rcx
  7689. xorq %r13, %rbx
  7690. rorq $6, %rcx
  7691. addq %r11, %r15
  7692. xorq %r12, %rcx
  7693. addq %rbx, %r11
  7694. rorq $28, %rcx
  7695. movq %r15, %rax
  7696. addq %rcx, %r11
  7697. rorq $23, %rax
  7698. movq %r11, %rbx
  7699. movq %r8, %rcx
  7700. addq 88(%rbp), %r10
  7701. xorq %r9, %rcx
  7702. xorq %r15, %rax
  7703. andq %r15, %rcx
  7704. rorq $4, %rax
  7705. xorq %r9, %rcx
  7706. xorq %r15, %rax
  7707. addq %rcx, %r10
  7708. rorq $14, %rax
  7709. xorq %r12, %rbx
  7710. addq %rax, %r10
  7711. movq %r11, %rcx
  7712. andq %rbx, %rdx
  7713. rorq $5, %rcx
  7714. xorq %r11, %rcx
  7715. xorq %r12, %rdx
  7716. rorq $6, %rcx
  7717. addq %r10, %r14
  7718. xorq %r11, %rcx
  7719. addq %rdx, %r10
  7720. rorq $28, %rcx
  7721. movq %r14, %rax
  7722. addq %rcx, %r10
  7723. rorq $23, %rax
  7724. movq %r10, %rdx
  7725. movq %r15, %rcx
  7726. addq 112(%rbp), %r9
  7727. xorq %r8, %rcx
  7728. xorq %r14, %rax
  7729. andq %r14, %rcx
  7730. rorq $4, %rax
  7731. xorq %r8, %rcx
  7732. xorq %r14, %rax
  7733. addq %rcx, %r9
  7734. rorq $14, %rax
  7735. xorq %r11, %rdx
  7736. addq %rax, %r9
  7737. movq %r10, %rcx
  7738. andq %rdx, %rbx
  7739. rorq $5, %rcx
  7740. xorq %r10, %rcx
  7741. xorq %r11, %rbx
  7742. rorq $6, %rcx
  7743. addq %r9, %r13
  7744. xorq %r10, %rcx
  7745. addq %rbx, %r9
  7746. rorq $28, %rcx
  7747. movq %r13, %rax
  7748. addq %rcx, %r9
  7749. rorq $23, %rax
  7750. movq %r9, %rbx
  7751. movq %r14, %rcx
  7752. addq 120(%rbp), %r8
  7753. xorq %r15, %rcx
  7754. xorq %r13, %rax
  7755. andq %r13, %rcx
  7756. rorq $4, %rax
  7757. xorq %r15, %rcx
  7758. xorq %r13, %rax
  7759. addq %rcx, %r8
  7760. rorq $14, %rax
  7761. xorq %r10, %rbx
  7762. addq %rax, %r8
  7763. movq %r9, %rcx
  7764. andq %rbx, %rdx
  7765. rorq $5, %rcx
  7766. xorq %r9, %rcx
  7767. xorq %r10, %rdx
  7768. rorq $6, %rcx
  7769. addq %r8, %r12
  7770. xorq %r9, %rcx
  7771. addq %rdx, %r8
  7772. rorq $28, %rcx
  7773. movq %r12, %rax
  7774. addq %rcx, %r8
  7775. rorq $23, %rax
  7776. movq %r8, %rdx
  7777. movq %r13, %rcx
  7778. addq 144(%rbp), %r15
  7779. xorq %r14, %rcx
  7780. xorq %r12, %rax
  7781. andq %r12, %rcx
  7782. rorq $4, %rax
  7783. xorq %r14, %rcx
  7784. xorq %r12, %rax
  7785. addq %rcx, %r15
  7786. rorq $14, %rax
  7787. xorq %r9, %rdx
  7788. addq %rax, %r15
  7789. movq %r8, %rcx
  7790. andq %rdx, %rbx
  7791. rorq $5, %rcx
  7792. xorq %r8, %rcx
  7793. xorq %r9, %rbx
  7794. rorq $6, %rcx
  7795. addq %r15, %r11
  7796. xorq %r8, %rcx
  7797. addq %rbx, %r15
  7798. rorq $28, %rcx
  7799. movq %r11, %rax
  7800. addq %rcx, %r15
  7801. rorq $23, %rax
  7802. movq %r15, %rbx
  7803. movq %r12, %rcx
  7804. addq 152(%rbp), %r14
  7805. xorq %r13, %rcx
  7806. xorq %r11, %rax
  7807. andq %r11, %rcx
  7808. rorq $4, %rax
  7809. xorq %r13, %rcx
  7810. xorq %r11, %rax
  7811. addq %rcx, %r14
  7812. rorq $14, %rax
  7813. xorq %r8, %rbx
  7814. addq %rax, %r14
  7815. movq %r15, %rcx
  7816. andq %rbx, %rdx
  7817. rorq $5, %rcx
  7818. xorq %r15, %rcx
  7819. xorq %r8, %rdx
  7820. rorq $6, %rcx
  7821. addq %r14, %r10
  7822. xorq %r15, %rcx
  7823. addq %rdx, %r14
  7824. rorq $28, %rcx
  7825. movq %r10, %rax
  7826. addq %rcx, %r14
  7827. rorq $23, %rax
  7828. movq %r14, %rdx
  7829. movq %r11, %rcx
  7830. addq 176(%rbp), %r13
  7831. xorq %r12, %rcx
  7832. xorq %r10, %rax
  7833. andq %r10, %rcx
  7834. rorq $4, %rax
  7835. xorq %r12, %rcx
  7836. xorq %r10, %rax
  7837. addq %rcx, %r13
  7838. rorq $14, %rax
  7839. xorq %r15, %rdx
  7840. addq %rax, %r13
  7841. movq %r14, %rcx
  7842. andq %rdx, %rbx
  7843. rorq $5, %rcx
  7844. xorq %r14, %rcx
  7845. xorq %r15, %rbx
  7846. rorq $6, %rcx
  7847. addq %r13, %r9
  7848. xorq %r14, %rcx
  7849. addq %rbx, %r13
  7850. rorq $28, %rcx
  7851. movq %r9, %rax
  7852. addq %rcx, %r13
  7853. rorq $23, %rax
  7854. movq %r13, %rbx
  7855. movq %r10, %rcx
  7856. addq 184(%rbp), %r12
  7857. xorq %r11, %rcx
  7858. xorq %r9, %rax
  7859. andq %r9, %rcx
  7860. rorq $4, %rax
  7861. xorq %r11, %rcx
  7862. xorq %r9, %rax
  7863. addq %rcx, %r12
  7864. rorq $14, %rax
  7865. xorq %r14, %rbx
  7866. addq %rax, %r12
  7867. movq %r13, %rcx
  7868. andq %rbx, %rdx
  7869. rorq $5, %rcx
  7870. xorq %r13, %rcx
  7871. xorq %r14, %rdx
  7872. rorq $6, %rcx
  7873. addq %r12, %r8
  7874. xorq %r13, %rcx
  7875. addq %rdx, %r12
  7876. rorq $28, %rcx
  7877. movq %r8, %rax
  7878. addq %rcx, %r12
  7879. rorq $23, %rax
  7880. movq %r12, %rdx
  7881. movq %r9, %rcx
  7882. addq 208(%rbp), %r11
  7883. xorq %r10, %rcx
  7884. xorq %r8, %rax
  7885. andq %r8, %rcx
  7886. rorq $4, %rax
  7887. xorq %r10, %rcx
  7888. xorq %r8, %rax
  7889. addq %rcx, %r11
  7890. rorq $14, %rax
  7891. xorq %r13, %rdx
  7892. addq %rax, %r11
  7893. movq %r12, %rcx
  7894. andq %rdx, %rbx
  7895. rorq $5, %rcx
  7896. xorq %r12, %rcx
  7897. xorq %r13, %rbx
  7898. rorq $6, %rcx
  7899. addq %r11, %r15
  7900. xorq %r12, %rcx
  7901. addq %rbx, %r11
  7902. rorq $28, %rcx
  7903. movq %r15, %rax
  7904. addq %rcx, %r11
  7905. rorq $23, %rax
  7906. movq %r11, %rbx
  7907. movq %r8, %rcx
  7908. addq 216(%rbp), %r10
  7909. xorq %r9, %rcx
  7910. xorq %r15, %rax
  7911. andq %r15, %rcx
  7912. rorq $4, %rax
  7913. xorq %r9, %rcx
  7914. xorq %r15, %rax
  7915. addq %rcx, %r10
  7916. rorq $14, %rax
  7917. xorq %r12, %rbx
  7918. addq %rax, %r10
  7919. movq %r11, %rcx
  7920. andq %rbx, %rdx
  7921. rorq $5, %rcx
  7922. xorq %r11, %rcx
  7923. xorq %r12, %rdx
  7924. rorq $6, %rcx
  7925. addq %r10, %r14
  7926. xorq %r11, %rcx
  7927. addq %rdx, %r10
  7928. rorq $28, %rcx
  7929. movq %r14, %rax
  7930. addq %rcx, %r10
  7931. rorq $23, %rax
  7932. movq %r10, %rdx
  7933. movq %r15, %rcx
  7934. addq 240(%rbp), %r9
  7935. xorq %r8, %rcx
  7936. xorq %r14, %rax
  7937. andq %r14, %rcx
  7938. rorq $4, %rax
  7939. xorq %r8, %rcx
  7940. xorq %r14, %rax
  7941. addq %rcx, %r9
  7942. rorq $14, %rax
  7943. xorq %r11, %rdx
  7944. addq %rax, %r9
  7945. movq %r10, %rcx
  7946. andq %rdx, %rbx
  7947. rorq $5, %rcx
  7948. xorq %r10, %rcx
  7949. xorq %r11, %rbx
  7950. rorq $6, %rcx
  7951. addq %r9, %r13
  7952. xorq %r10, %rcx
  7953. addq %rbx, %r9
  7954. rorq $28, %rcx
  7955. movq %r13, %rax
  7956. addq %rcx, %r9
  7957. rorq $23, %rax
  7958. movq %r9, %rbx
  7959. movq %r14, %rcx
  7960. addq 248(%rbp), %r8
  7961. xorq %r15, %rcx
  7962. xorq %r13, %rax
  7963. andq %r13, %rcx
  7964. rorq $4, %rax
  7965. xorq %r15, %rcx
  7966. xorq %r13, %rax
  7967. addq %rcx, %r8
  7968. rorq $14, %rax
  7969. xorq %r10, %rbx
  7970. addq %rax, %r8
  7971. movq %r9, %rcx
  7972. andq %rbx, %rdx
  7973. rorq $5, %rcx
  7974. xorq %r9, %rcx
  7975. xorq %r10, %rdx
  7976. rorq $6, %rcx
  7977. addq %r8, %r12
  7978. xorq %r9, %rcx
  7979. addq %rdx, %r8
  7980. rorq $28, %rcx
  7981. movq %r12, %rax
  7982. addq %rcx, %r8
  7983. addq $0x100, %rbp
  7984. subq $0x01, %rsi
  7985. jnz L_sha512_len_avx2_tail
  7986. addq (%rdi), %r8
  7987. addq 8(%rdi), %r9
  7988. addq 16(%rdi), %r10
  7989. addq 24(%rdi), %r11
  7990. addq 32(%rdi), %r12
  7991. addq 40(%rdi), %r13
  7992. addq 48(%rdi), %r14
  7993. addq 56(%rdi), %r15
  7994. movq 224(%rdi), %rcx
  7995. addq $0x100, %rcx
  7996. subl $0x100, 1344(%rsp)
  7997. movq %rcx, 224(%rdi)
  7998. movq %r8, (%rdi)
  7999. movq %r9, 8(%rdi)
  8000. movq %r10, 16(%rdi)
  8001. movq %r11, 24(%rdi)
  8002. movq %r12, 32(%rdi)
  8003. movq %r13, 40(%rdi)
  8004. movq %r14, 48(%rdi)
  8005. movq %r15, 56(%rdi)
  8006. jnz L_sha512_len_avx2_begin
  8007. addq $0x548, %rsp
  8008. L_sha512_len_avx2_done:
  8009. xorq %rax, %rax
  8010. vzeroupper
  8011. popq %rbp
  8012. popq %r15
  8013. popq %r14
  8014. popq %r13
  8015. popq %r12
  8016. popq %rbx
  8017. repz retq
  8018. #ifndef __APPLE__
  8019. .size Transform_Sha512_AVX2_Len,.-Transform_Sha512_AVX2_Len
  8020. #endif /* __APPLE__ */
  8021. #ifndef __APPLE__
  8022. .data
  8023. #else
  8024. .section __DATA,__data
  8025. #endif /* __APPLE__ */
  8026. #ifndef __APPLE__
  8027. .align 16
  8028. #else
  8029. .p2align 4
  8030. #endif /* __APPLE__ */
  8031. L_avx2_rorx_sha512_k:
  8032. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  8033. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  8034. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  8035. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  8036. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  8037. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  8038. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  8039. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  8040. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  8041. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  8042. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  8043. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  8044. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  8045. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  8046. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  8047. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  8048. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  8049. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  8050. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  8051. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  8052. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  8053. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  8054. .quad 0xd192e819d6ef5218,0xd69906245565a910
  8055. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  8056. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  8057. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  8058. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  8059. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  8060. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  8061. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  8062. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  8063. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  8064. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  8065. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  8066. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  8067. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  8068. .quad 0x28db77f523047d84,0x32caab7b40c72493
  8069. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  8070. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  8071. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  8072. #ifndef __APPLE__
  8073. .data
  8074. #else
  8075. .section __DATA,__data
  8076. #endif /* __APPLE__ */
  8077. #ifndef __APPLE__
  8078. .align 16
  8079. #else
  8080. .p2align 4
  8081. #endif /* __APPLE__ */
  8082. L_avx2_rorx_sha512_k_2:
  8083. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  8084. .quad 0x428a2f98d728ae22,0x7137449123ef65cd
  8085. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  8086. .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  8087. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  8088. .quad 0x3956c25bf348b538,0x59f111f1b605d019
  8089. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  8090. .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  8091. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  8092. .quad 0xd807aa98a3030242,0x12835b0145706fbe
  8093. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  8094. .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  8095. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  8096. .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  8097. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  8098. .quad 0x9bdc06a725c71235,0xc19bf174cf692694
  8099. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  8100. .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  8101. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  8102. .quad 0xfc19dc68b8cd5b5,0x240ca1cc77ac9c65
  8103. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  8104. .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  8105. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  8106. .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  8107. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  8108. .quad 0x983e5152ee66dfab,0xa831c66d2db43210
  8109. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  8110. .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
  8111. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  8112. .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
  8113. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  8114. .quad 0x6ca6351e003826f,0x142929670a0e6e70
  8115. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  8116. .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
  8117. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  8118. .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  8119. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  8120. .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
  8121. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  8122. .quad 0x81c2c92e47edaee6,0x92722c851482353b
  8123. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  8124. .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
  8125. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  8126. .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
  8127. .quad 0xd192e819d6ef5218,0xd69906245565a910
  8128. .quad 0xd192e819d6ef5218,0xd69906245565a910
  8129. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  8130. .quad 0xf40e35855771202a,0x106aa07032bbd1b8
  8131. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  8132. .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  8133. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  8134. .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  8135. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  8136. .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  8137. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  8138. .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  8139. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  8140. .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
  8141. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  8142. .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
  8143. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  8144. .quad 0x90befffa23631e28,0xa4506cebde82bde9
  8145. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  8146. .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
  8147. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  8148. .quad 0xca273eceea26619c,0xd186b8c721c0c207
  8149. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  8150. .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  8151. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  8152. .quad 0x6f067aa72176fba,0xa637dc5a2c898a6
  8153. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  8154. .quad 0x113f9804bef90dae,0x1b710b35131c471b
  8155. .quad 0x28db77f523047d84,0x32caab7b40c72493
  8156. .quad 0x28db77f523047d84,0x32caab7b40c72493
  8157. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  8158. .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  8159. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  8160. .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  8161. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  8162. .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  8163. #ifndef __APPLE__
  8164. .data
  8165. #else
  8166. .section __DATA,__data
  8167. #endif /* __APPLE__ */
  8168. #ifndef __APPLE__
  8169. .align 8
  8170. #else
  8171. .p2align 3
  8172. #endif /* __APPLE__ */
  8173. L_avx2_rorx_sha512_k_2_end:
  8174. .quad 1024+L_avx2_rorx_sha512_k_2
  8175. #ifndef __APPLE__
  8176. .data
  8177. #else
  8178. .section __DATA,__data
  8179. #endif /* __APPLE__ */
  8180. #ifndef __APPLE__
  8181. .align 32
  8182. #else
  8183. .p2align 5
  8184. #endif /* __APPLE__ */
  8185. L_avx2_rorx_sha512_flip_mask:
  8186. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  8187. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  8188. #ifndef __APPLE__
  8189. .text
  8190. .globl Transform_Sha512_AVX2_RORX
  8191. .type Transform_Sha512_AVX2_RORX,@function
  8192. .align 16
  8193. Transform_Sha512_AVX2_RORX:
  8194. #else
  8195. .section __TEXT,__text
  8196. .globl _Transform_Sha512_AVX2_RORX
  8197. .p2align 4
  8198. _Transform_Sha512_AVX2_RORX:
  8199. #endif /* __APPLE__ */
  8200. pushq %rbx
  8201. pushq %r12
  8202. pushq %r13
  8203. pushq %r14
  8204. pushq %r15
  8205. subq $0x88, %rsp
  8206. leaq 64(%rdi), %rcx
  8207. vmovdqa L_avx2_rorx_sha512_flip_mask(%rip), %ymm15
  8208. movq (%rdi), %r8
  8209. movq 8(%rdi), %r9
  8210. movq 16(%rdi), %r10
  8211. movq 24(%rdi), %r11
  8212. movq 32(%rdi), %r12
  8213. movq 40(%rdi), %r13
  8214. movq 48(%rdi), %r14
  8215. movq 56(%rdi), %r15
  8216. vmovdqu (%rcx), %ymm0
  8217. vmovdqu 32(%rcx), %ymm1
  8218. vpshufb %ymm15, %ymm0, %ymm0
  8219. vpshufb %ymm15, %ymm1, %ymm1
  8220. vmovdqu 64(%rcx), %ymm2
  8221. vmovdqu 96(%rcx), %ymm3
  8222. vpshufb %ymm15, %ymm2, %ymm2
  8223. vpshufb %ymm15, %ymm3, %ymm3
  8224. movl $4, 128(%rsp)
  8225. leaq L_avx2_rorx_sha512_k(%rip), %rsi
  8226. movq %r9, %rbx
  8227. xorq %rdx, %rdx
  8228. xorq %r10, %rbx
  8229. # set_w_k: 0
  8230. vpaddq (%rsi), %ymm0, %ymm8
  8231. vpaddq 32(%rsi), %ymm1, %ymm9
  8232. vmovdqu %ymm8, (%rsp)
  8233. vmovdqu %ymm9, 32(%rsp)
  8234. vpaddq 64(%rsi), %ymm2, %ymm8
  8235. vpaddq 96(%rsi), %ymm3, %ymm9
  8236. vmovdqu %ymm8, 64(%rsp)
  8237. vmovdqu %ymm9, 96(%rsp)
  8238. # Start of 16 rounds
  8239. L_sha256_len_avx2_rorx_start:
  8240. addq $0x80, %rsi
  8241. rorxq $14, %r12, %rax
  8242. rorxq $18, %r12, %rcx
  8243. addq %rdx, %r8
  8244. vpblendd $3, %ymm1, %ymm0, %ymm12
  8245. vpblendd $3, %ymm3, %ymm2, %ymm13
  8246. addq (%rsp), %r15
  8247. movq %r13, %rdx
  8248. xorq %rax, %rcx
  8249. vpermq $57, %ymm12, %ymm12
  8250. xorq %r14, %rdx
  8251. rorxq $41, %r12, %rax
  8252. xorq %rcx, %rax
  8253. vpermq $57, %ymm13, %ymm13
  8254. andq %r12, %rdx
  8255. addq %rax, %r15
  8256. rorxq $28, %r8, %rax
  8257. vpsrlq $0x01, %ymm12, %ymm8
  8258. vpsllq $63, %ymm12, %ymm9
  8259. rorxq $34, %r8, %rcx
  8260. xorq %r14, %rdx
  8261. xorq %rax, %rcx
  8262. vpsrlq $8, %ymm12, %ymm10
  8263. vpsllq $56, %ymm12, %ymm11
  8264. vpor %ymm9, %ymm8, %ymm8
  8265. vpor %ymm11, %ymm10, %ymm10
  8266. rorxq $39, %r8, %rax
  8267. addq %rdx, %r15
  8268. xorq %rcx, %rax
  8269. vpsrlq $7, %ymm12, %ymm11
  8270. movq %r9, %rdx
  8271. addq %r15, %r11
  8272. xorq %r8, %rdx
  8273. vperm2I128 $0x81, %ymm3, %ymm3, %ymm14
  8274. andq %rdx, %rbx
  8275. addq %rax, %r15
  8276. xorq %r9, %rbx
  8277. rorxq $14, %r11, %rax
  8278. rorxq $18, %r11, %rcx
  8279. addq %rbx, %r15
  8280. vpxor %ymm10, %ymm8, %ymm8
  8281. addq 8(%rsp), %r14
  8282. movq %r12, %rbx
  8283. xorq %rax, %rcx
  8284. vpxor %ymm11, %ymm8, %ymm8
  8285. xorq %r13, %rbx
  8286. rorxq $41, %r11, %rax
  8287. xorq %rcx, %rax
  8288. vpaddq %ymm0, %ymm13, %ymm0
  8289. vpaddq %ymm0, %ymm8, %ymm0
  8290. andq %r11, %rbx
  8291. addq %rax, %r14
  8292. rorxq $28, %r15, %rax
  8293. vpsrlq $19, %ymm14, %ymm8
  8294. vpsllq $45, %ymm14, %ymm9
  8295. rorxq $34, %r15, %rcx
  8296. xorq %r13, %rbx
  8297. xorq %rax, %rcx
  8298. vpsrlq $61, %ymm14, %ymm10
  8299. vpsllq $3, %ymm14, %ymm11
  8300. vpor %ymm9, %ymm8, %ymm8
  8301. rorxq $39, %r15, %rax
  8302. addq %rbx, %r14
  8303. xorq %rcx, %rax
  8304. vpor %ymm11, %ymm10, %ymm10
  8305. movq %r8, %rbx
  8306. leaq (%r10,%r14,1), %r10
  8307. xorq %r15, %rbx
  8308. vpxor %ymm10, %ymm8, %ymm8
  8309. andq %rbx, %rdx
  8310. addq %rax, %r14
  8311. xorq %r8, %rdx
  8312. vpsrlq $6, %ymm14, %ymm11
  8313. rorxq $14, %r10, %rax
  8314. rorxq $18, %r10, %rcx
  8315. addq %rdx, %r14
  8316. vpxor %ymm11, %ymm8, %ymm8
  8317. addq 16(%rsp), %r13
  8318. movq %r11, %rdx
  8319. xorq %rax, %rcx
  8320. vpaddq %ymm0, %ymm8, %ymm0
  8321. xorq %r12, %rdx
  8322. rorxq $41, %r10, %rax
  8323. xorq %rcx, %rax
  8324. vperm2I128 $8, %ymm0, %ymm0, %ymm14
  8325. andq %r10, %rdx
  8326. addq %rax, %r13
  8327. rorxq $28, %r14, %rax
  8328. rorxq $34, %r14, %rcx
  8329. xorq %r12, %rdx
  8330. xorq %rax, %rcx
  8331. vpsrlq $19, %ymm14, %ymm8
  8332. vpsllq $45, %ymm14, %ymm9
  8333. rorxq $39, %r14, %rax
  8334. addq %rdx, %r13
  8335. xorq %rcx, %rax
  8336. vpsrlq $61, %ymm14, %ymm10
  8337. vpsllq $3, %ymm14, %ymm11
  8338. vpor %ymm9, %ymm8, %ymm8
  8339. movq %r15, %rdx
  8340. addq %r13, %r9
  8341. xorq %r14, %rdx
  8342. vpor %ymm11, %ymm10, %ymm10
  8343. andq %rdx, %rbx
  8344. addq %rax, %r13
  8345. xorq %r15, %rbx
  8346. vpxor %ymm10, %ymm8, %ymm8
  8347. rorxq $14, %r9, %rax
  8348. rorxq $18, %r9, %rcx
  8349. addq %rbx, %r13
  8350. vpsrlq $6, %ymm14, %ymm11
  8351. addq 24(%rsp), %r12
  8352. movq %r10, %rbx
  8353. xorq %rax, %rcx
  8354. xorq %r11, %rbx
  8355. rorxq $41, %r9, %rax
  8356. xorq %rcx, %rax
  8357. vpxor %ymm11, %ymm8, %ymm8
  8358. andq %r9, %rbx
  8359. addq %rax, %r12
  8360. rorxq $28, %r13, %rax
  8361. rorxq $34, %r13, %rcx
  8362. xorq %r11, %rbx
  8363. xorq %rax, %rcx
  8364. vpaddq %ymm0, %ymm8, %ymm0
  8365. rorxq $39, %r13, %rax
  8366. addq %rbx, %r12
  8367. xorq %rcx, %rax
  8368. vpaddq (%rsi), %ymm0, %ymm8
  8369. movq %r14, %rbx
  8370. leaq (%r8,%r12,1), %r8
  8371. xorq %r13, %rbx
  8372. andq %rbx, %rdx
  8373. addq %rax, %r12
  8374. xorq %r14, %rdx
  8375. vmovdqu %ymm8, (%rsp)
  8376. rorxq $14, %r8, %rax
  8377. rorxq $18, %r8, %rcx
  8378. addq %rdx, %r12
  8379. vpblendd $3, %ymm2, %ymm1, %ymm12
  8380. vpblendd $3, %ymm0, %ymm3, %ymm13
  8381. addq 32(%rsp), %r11
  8382. movq %r9, %rdx
  8383. xorq %rax, %rcx
  8384. vpermq $57, %ymm12, %ymm12
  8385. xorq %r10, %rdx
  8386. rorxq $41, %r8, %rax
  8387. xorq %rcx, %rax
  8388. vpermq $57, %ymm13, %ymm13
  8389. andq %r8, %rdx
  8390. addq %rax, %r11
  8391. rorxq $28, %r12, %rax
  8392. vpsrlq $0x01, %ymm12, %ymm8
  8393. vpsllq $63, %ymm12, %ymm9
  8394. rorxq $34, %r12, %rcx
  8395. xorq %r10, %rdx
  8396. xorq %rax, %rcx
  8397. vpsrlq $8, %ymm12, %ymm10
  8398. vpsllq $56, %ymm12, %ymm11
  8399. vpor %ymm9, %ymm8, %ymm8
  8400. vpor %ymm11, %ymm10, %ymm10
  8401. rorxq $39, %r12, %rax
  8402. addq %rdx, %r11
  8403. xorq %rcx, %rax
  8404. vpsrlq $7, %ymm12, %ymm11
  8405. movq %r13, %rdx
  8406. addq %r11, %r15
  8407. xorq %r12, %rdx
  8408. vperm2I128 $0x81, %ymm0, %ymm0, %ymm14
  8409. andq %rdx, %rbx
  8410. addq %rax, %r11
  8411. xorq %r13, %rbx
  8412. rorxq $14, %r15, %rax
  8413. rorxq $18, %r15, %rcx
  8414. addq %rbx, %r11
  8415. vpxor %ymm10, %ymm8, %ymm8
  8416. addq 40(%rsp), %r10
  8417. movq %r8, %rbx
  8418. xorq %rax, %rcx
  8419. vpxor %ymm11, %ymm8, %ymm8
  8420. xorq %r9, %rbx
  8421. rorxq $41, %r15, %rax
  8422. xorq %rcx, %rax
  8423. vpaddq %ymm1, %ymm13, %ymm1
  8424. vpaddq %ymm1, %ymm8, %ymm1
  8425. andq %r15, %rbx
  8426. addq %rax, %r10
  8427. rorxq $28, %r11, %rax
  8428. vpsrlq $19, %ymm14, %ymm8
  8429. vpsllq $45, %ymm14, %ymm9
  8430. rorxq $34, %r11, %rcx
  8431. xorq %r9, %rbx
  8432. xorq %rax, %rcx
  8433. vpsrlq $61, %ymm14, %ymm10
  8434. vpsllq $3, %ymm14, %ymm11
  8435. vpor %ymm9, %ymm8, %ymm8
  8436. rorxq $39, %r11, %rax
  8437. addq %rbx, %r10
  8438. xorq %rcx, %rax
  8439. vpor %ymm11, %ymm10, %ymm10
  8440. movq %r12, %rbx
  8441. leaq (%r14,%r10,1), %r14
  8442. xorq %r11, %rbx
  8443. vpxor %ymm10, %ymm8, %ymm8
  8444. andq %rbx, %rdx
  8445. addq %rax, %r10
  8446. xorq %r12, %rdx
  8447. vpsrlq $6, %ymm14, %ymm11
  8448. rorxq $14, %r14, %rax
  8449. rorxq $18, %r14, %rcx
  8450. addq %rdx, %r10
  8451. vpxor %ymm11, %ymm8, %ymm8
  8452. addq 48(%rsp), %r9
  8453. movq %r15, %rdx
  8454. xorq %rax, %rcx
  8455. vpaddq %ymm1, %ymm8, %ymm1
  8456. xorq %r8, %rdx
  8457. rorxq $41, %r14, %rax
  8458. xorq %rcx, %rax
  8459. vperm2I128 $8, %ymm1, %ymm1, %ymm14
  8460. andq %r14, %rdx
  8461. addq %rax, %r9
  8462. rorxq $28, %r10, %rax
  8463. rorxq $34, %r10, %rcx
  8464. xorq %r8, %rdx
  8465. xorq %rax, %rcx
  8466. vpsrlq $19, %ymm14, %ymm8
  8467. vpsllq $45, %ymm14, %ymm9
  8468. rorxq $39, %r10, %rax
  8469. addq %rdx, %r9
  8470. xorq %rcx, %rax
  8471. vpsrlq $61, %ymm14, %ymm10
  8472. vpsllq $3, %ymm14, %ymm11
  8473. vpor %ymm9, %ymm8, %ymm8
  8474. movq %r11, %rdx
  8475. addq %r9, %r13
  8476. xorq %r10, %rdx
  8477. vpor %ymm11, %ymm10, %ymm10
  8478. andq %rdx, %rbx
  8479. addq %rax, %r9
  8480. xorq %r11, %rbx
  8481. vpxor %ymm10, %ymm8, %ymm8
  8482. rorxq $14, %r13, %rax
  8483. rorxq $18, %r13, %rcx
  8484. addq %rbx, %r9
  8485. vpsrlq $6, %ymm14, %ymm11
  8486. addq 56(%rsp), %r8
  8487. movq %r14, %rbx
  8488. xorq %rax, %rcx
  8489. xorq %r15, %rbx
  8490. rorxq $41, %r13, %rax
  8491. xorq %rcx, %rax
  8492. vpxor %ymm11, %ymm8, %ymm8
  8493. andq %r13, %rbx
  8494. addq %rax, %r8
  8495. rorxq $28, %r9, %rax
  8496. rorxq $34, %r9, %rcx
  8497. xorq %r15, %rbx
  8498. xorq %rax, %rcx
  8499. vpaddq %ymm1, %ymm8, %ymm1
  8500. rorxq $39, %r9, %rax
  8501. addq %rbx, %r8
  8502. xorq %rcx, %rax
  8503. vpaddq 32(%rsi), %ymm1, %ymm8
  8504. movq %r10, %rbx
  8505. leaq (%r12,%r8,1), %r12
  8506. xorq %r9, %rbx
  8507. andq %rbx, %rdx
  8508. addq %rax, %r8
  8509. xorq %r10, %rdx
  8510. vmovdqu %ymm8, 32(%rsp)
  8511. rorxq $14, %r12, %rax
  8512. rorxq $18, %r12, %rcx
  8513. addq %rdx, %r8
  8514. vpblendd $3, %ymm3, %ymm2, %ymm12
  8515. vpblendd $3, %ymm1, %ymm0, %ymm13
  8516. addq 64(%rsp), %r15
  8517. movq %r13, %rdx
  8518. xorq %rax, %rcx
  8519. vpermq $57, %ymm12, %ymm12
  8520. xorq %r14, %rdx
  8521. rorxq $41, %r12, %rax
  8522. xorq %rcx, %rax
  8523. vpermq $57, %ymm13, %ymm13
  8524. andq %r12, %rdx
  8525. addq %rax, %r15
  8526. rorxq $28, %r8, %rax
  8527. vpsrlq $0x01, %ymm12, %ymm8
  8528. vpsllq $63, %ymm12, %ymm9
  8529. rorxq $34, %r8, %rcx
  8530. xorq %r14, %rdx
  8531. xorq %rax, %rcx
  8532. vpsrlq $8, %ymm12, %ymm10
  8533. vpsllq $56, %ymm12, %ymm11
  8534. vpor %ymm9, %ymm8, %ymm8
  8535. vpor %ymm11, %ymm10, %ymm10
  8536. rorxq $39, %r8, %rax
  8537. addq %rdx, %r15
  8538. xorq %rcx, %rax
  8539. vpsrlq $7, %ymm12, %ymm11
  8540. movq %r9, %rdx
  8541. addq %r15, %r11
  8542. xorq %r8, %rdx
  8543. vperm2I128 $0x81, %ymm1, %ymm1, %ymm14
  8544. andq %rdx, %rbx
  8545. addq %rax, %r15
  8546. xorq %r9, %rbx
  8547. rorxq $14, %r11, %rax
  8548. rorxq $18, %r11, %rcx
  8549. addq %rbx, %r15
  8550. vpxor %ymm10, %ymm8, %ymm8
  8551. addq 72(%rsp), %r14
  8552. movq %r12, %rbx
  8553. xorq %rax, %rcx
  8554. vpxor %ymm11, %ymm8, %ymm8
  8555. xorq %r13, %rbx
  8556. rorxq $41, %r11, %rax
  8557. xorq %rcx, %rax
  8558. vpaddq %ymm2, %ymm13, %ymm2
  8559. vpaddq %ymm2, %ymm8, %ymm2
  8560. andq %r11, %rbx
  8561. addq %rax, %r14
  8562. rorxq $28, %r15, %rax
  8563. vpsrlq $19, %ymm14, %ymm8
  8564. vpsllq $45, %ymm14, %ymm9
  8565. rorxq $34, %r15, %rcx
  8566. xorq %r13, %rbx
  8567. xorq %rax, %rcx
  8568. vpsrlq $61, %ymm14, %ymm10
  8569. vpsllq $3, %ymm14, %ymm11
  8570. vpor %ymm9, %ymm8, %ymm8
  8571. rorxq $39, %r15, %rax
  8572. addq %rbx, %r14
  8573. xorq %rcx, %rax
  8574. vpor %ymm11, %ymm10, %ymm10
  8575. movq %r8, %rbx
  8576. leaq (%r10,%r14,1), %r10
  8577. xorq %r15, %rbx
  8578. vpxor %ymm10, %ymm8, %ymm8
  8579. andq %rbx, %rdx
  8580. addq %rax, %r14
  8581. xorq %r8, %rdx
  8582. vpsrlq $6, %ymm14, %ymm11
  8583. rorxq $14, %r10, %rax
  8584. rorxq $18, %r10, %rcx
  8585. addq %rdx, %r14
  8586. vpxor %ymm11, %ymm8, %ymm8
  8587. addq 80(%rsp), %r13
  8588. movq %r11, %rdx
  8589. xorq %rax, %rcx
  8590. vpaddq %ymm2, %ymm8, %ymm2
  8591. xorq %r12, %rdx
  8592. rorxq $41, %r10, %rax
  8593. xorq %rcx, %rax
  8594. vperm2I128 $8, %ymm2, %ymm2, %ymm14
  8595. andq %r10, %rdx
  8596. addq %rax, %r13
  8597. rorxq $28, %r14, %rax
  8598. rorxq $34, %r14, %rcx
  8599. xorq %r12, %rdx
  8600. xorq %rax, %rcx
  8601. vpsrlq $19, %ymm14, %ymm8
  8602. vpsllq $45, %ymm14, %ymm9
  8603. rorxq $39, %r14, %rax
  8604. addq %rdx, %r13
  8605. xorq %rcx, %rax
  8606. vpsrlq $61, %ymm14, %ymm10
  8607. vpsllq $3, %ymm14, %ymm11
  8608. vpor %ymm9, %ymm8, %ymm8
  8609. movq %r15, %rdx
  8610. addq %r13, %r9
  8611. xorq %r14, %rdx
  8612. vpor %ymm11, %ymm10, %ymm10
  8613. andq %rdx, %rbx
  8614. addq %rax, %r13
  8615. xorq %r15, %rbx
  8616. vpxor %ymm10, %ymm8, %ymm8
  8617. rorxq $14, %r9, %rax
  8618. rorxq $18, %r9, %rcx
  8619. addq %rbx, %r13
  8620. vpsrlq $6, %ymm14, %ymm11
  8621. addq 88(%rsp), %r12
  8622. movq %r10, %rbx
  8623. xorq %rax, %rcx
  8624. xorq %r11, %rbx
  8625. rorxq $41, %r9, %rax
  8626. xorq %rcx, %rax
  8627. vpxor %ymm11, %ymm8, %ymm8
  8628. andq %r9, %rbx
  8629. addq %rax, %r12
  8630. rorxq $28, %r13, %rax
  8631. rorxq $34, %r13, %rcx
  8632. xorq %r11, %rbx
  8633. xorq %rax, %rcx
  8634. vpaddq %ymm2, %ymm8, %ymm2
  8635. rorxq $39, %r13, %rax
  8636. addq %rbx, %r12
  8637. xorq %rcx, %rax
  8638. vpaddq 64(%rsi), %ymm2, %ymm8
  8639. movq %r14, %rbx
  8640. leaq (%r8,%r12,1), %r8
  8641. xorq %r13, %rbx
  8642. andq %rbx, %rdx
  8643. addq %rax, %r12
  8644. xorq %r14, %rdx
  8645. vmovdqu %ymm8, 64(%rsp)
  8646. rorxq $14, %r8, %rax
  8647. rorxq $18, %r8, %rcx
  8648. addq %rdx, %r12
  8649. vpblendd $3, %ymm0, %ymm3, %ymm12
  8650. vpblendd $3, %ymm2, %ymm1, %ymm13
  8651. addq 96(%rsp), %r11
  8652. movq %r9, %rdx
  8653. xorq %rax, %rcx
  8654. vpermq $57, %ymm12, %ymm12
  8655. xorq %r10, %rdx
  8656. rorxq $41, %r8, %rax
  8657. xorq %rcx, %rax
  8658. vpermq $57, %ymm13, %ymm13
  8659. andq %r8, %rdx
  8660. addq %rax, %r11
  8661. rorxq $28, %r12, %rax
  8662. vpsrlq $0x01, %ymm12, %ymm8
  8663. vpsllq $63, %ymm12, %ymm9
  8664. rorxq $34, %r12, %rcx
  8665. xorq %r10, %rdx
  8666. xorq %rax, %rcx
  8667. vpsrlq $8, %ymm12, %ymm10
  8668. vpsllq $56, %ymm12, %ymm11
  8669. vpor %ymm9, %ymm8, %ymm8
  8670. vpor %ymm11, %ymm10, %ymm10
  8671. rorxq $39, %r12, %rax
  8672. addq %rdx, %r11
  8673. xorq %rcx, %rax
  8674. vpsrlq $7, %ymm12, %ymm11
  8675. movq %r13, %rdx
  8676. addq %r11, %r15
  8677. xorq %r12, %rdx
  8678. vperm2I128 $0x81, %ymm2, %ymm2, %ymm14
  8679. andq %rdx, %rbx
  8680. addq %rax, %r11
  8681. xorq %r13, %rbx
  8682. rorxq $14, %r15, %rax
  8683. rorxq $18, %r15, %rcx
  8684. addq %rbx, %r11
  8685. vpxor %ymm10, %ymm8, %ymm8
  8686. addq 104(%rsp), %r10
  8687. movq %r8, %rbx
  8688. xorq %rax, %rcx
  8689. vpxor %ymm11, %ymm8, %ymm8
  8690. xorq %r9, %rbx
  8691. rorxq $41, %r15, %rax
  8692. xorq %rcx, %rax
  8693. vpaddq %ymm3, %ymm13, %ymm3
  8694. vpaddq %ymm3, %ymm8, %ymm3
  8695. andq %r15, %rbx
  8696. addq %rax, %r10
  8697. rorxq $28, %r11, %rax
  8698. vpsrlq $19, %ymm14, %ymm8
  8699. vpsllq $45, %ymm14, %ymm9
  8700. rorxq $34, %r11, %rcx
  8701. xorq %r9, %rbx
  8702. xorq %rax, %rcx
  8703. vpsrlq $61, %ymm14, %ymm10
  8704. vpsllq $3, %ymm14, %ymm11
  8705. vpor %ymm9, %ymm8, %ymm8
  8706. rorxq $39, %r11, %rax
  8707. addq %rbx, %r10
  8708. xorq %rcx, %rax
  8709. vpor %ymm11, %ymm10, %ymm10
  8710. movq %r12, %rbx
  8711. leaq (%r14,%r10,1), %r14
  8712. xorq %r11, %rbx
  8713. vpxor %ymm10, %ymm8, %ymm8
  8714. andq %rbx, %rdx
  8715. addq %rax, %r10
  8716. xorq %r12, %rdx
  8717. vpsrlq $6, %ymm14, %ymm11
  8718. rorxq $14, %r14, %rax
  8719. rorxq $18, %r14, %rcx
  8720. addq %rdx, %r10
  8721. vpxor %ymm11, %ymm8, %ymm8
  8722. addq 112(%rsp), %r9
  8723. movq %r15, %rdx
  8724. xorq %rax, %rcx
  8725. vpaddq %ymm3, %ymm8, %ymm3
  8726. xorq %r8, %rdx
  8727. rorxq $41, %r14, %rax
  8728. xorq %rcx, %rax
  8729. vperm2I128 $8, %ymm3, %ymm3, %ymm14
  8730. andq %r14, %rdx
  8731. addq %rax, %r9
  8732. rorxq $28, %r10, %rax
  8733. rorxq $34, %r10, %rcx
  8734. xorq %r8, %rdx
  8735. xorq %rax, %rcx
  8736. vpsrlq $19, %ymm14, %ymm8
  8737. vpsllq $45, %ymm14, %ymm9
  8738. rorxq $39, %r10, %rax
  8739. addq %rdx, %r9
  8740. xorq %rcx, %rax
  8741. vpsrlq $61, %ymm14, %ymm10
  8742. vpsllq $3, %ymm14, %ymm11
  8743. vpor %ymm9, %ymm8, %ymm8
  8744. movq %r11, %rdx
  8745. addq %r9, %r13
  8746. xorq %r10, %rdx
  8747. vpor %ymm11, %ymm10, %ymm10
  8748. andq %rdx, %rbx
  8749. addq %rax, %r9
  8750. xorq %r11, %rbx
  8751. vpxor %ymm10, %ymm8, %ymm8
  8752. rorxq $14, %r13, %rax
  8753. rorxq $18, %r13, %rcx
  8754. addq %rbx, %r9
  8755. vpsrlq $6, %ymm14, %ymm11
  8756. addq 120(%rsp), %r8
  8757. movq %r14, %rbx
  8758. xorq %rax, %rcx
  8759. xorq %r15, %rbx
  8760. rorxq $41, %r13, %rax
  8761. xorq %rcx, %rax
  8762. vpxor %ymm11, %ymm8, %ymm8
  8763. andq %r13, %rbx
  8764. addq %rax, %r8
  8765. rorxq $28, %r9, %rax
  8766. rorxq $34, %r9, %rcx
  8767. xorq %r15, %rbx
  8768. xorq %rax, %rcx
  8769. vpaddq %ymm3, %ymm8, %ymm3
  8770. rorxq $39, %r9, %rax
  8771. addq %rbx, %r8
  8772. xorq %rcx, %rax
  8773. vpaddq 96(%rsi), %ymm3, %ymm8
  8774. movq %r10, %rbx
  8775. leaq (%r12,%r8,1), %r12
  8776. xorq %r9, %rbx
  8777. andq %rbx, %rdx
  8778. addq %rax, %r8
  8779. xorq %r10, %rdx
  8780. vmovdqu %ymm8, 96(%rsp)
  8781. subl $0x01, 128(%rsp)
  8782. jne L_sha256_len_avx2_rorx_start
  8783. # rnd_all_4: 0-3
  8784. rorxq $14, %r12, %rax
  8785. rorxq $18, %r12, %rcx
  8786. addq %rdx, %r8
  8787. addq (%rsp), %r15
  8788. movq %r13, %rdx
  8789. xorq %rax, %rcx
  8790. xorq %r14, %rdx
  8791. rorxq $41, %r12, %rax
  8792. xorq %rcx, %rax
  8793. andq %r12, %rdx
  8794. addq %rax, %r15
  8795. rorxq $28, %r8, %rax
  8796. rorxq $34, %r8, %rcx
  8797. xorq %r14, %rdx
  8798. xorq %rax, %rcx
  8799. rorxq $39, %r8, %rax
  8800. addq %rdx, %r15
  8801. xorq %rcx, %rax
  8802. movq %r9, %rdx
  8803. addq %r15, %r11
  8804. xorq %r8, %rdx
  8805. andq %rdx, %rbx
  8806. addq %rax, %r15
  8807. xorq %r9, %rbx
  8808. rorxq $14, %r11, %rax
  8809. rorxq $18, %r11, %rcx
  8810. addq %rbx, %r15
  8811. addq 8(%rsp), %r14
  8812. movq %r12, %rbx
  8813. xorq %rax, %rcx
  8814. xorq %r13, %rbx
  8815. rorxq $41, %r11, %rax
  8816. xorq %rcx, %rax
  8817. andq %r11, %rbx
  8818. addq %rax, %r14
  8819. rorxq $28, %r15, %rax
  8820. rorxq $34, %r15, %rcx
  8821. xorq %r13, %rbx
  8822. xorq %rax, %rcx
  8823. rorxq $39, %r15, %rax
  8824. addq %rbx, %r14
  8825. xorq %rcx, %rax
  8826. movq %r8, %rbx
  8827. leaq (%r10,%r14,1), %r10
  8828. xorq %r15, %rbx
  8829. andq %rbx, %rdx
  8830. addq %rax, %r14
  8831. xorq %r8, %rdx
  8832. rorxq $14, %r10, %rax
  8833. rorxq $18, %r10, %rcx
  8834. addq %rdx, %r14
  8835. addq 16(%rsp), %r13
  8836. movq %r11, %rdx
  8837. xorq %rax, %rcx
  8838. xorq %r12, %rdx
  8839. rorxq $41, %r10, %rax
  8840. xorq %rcx, %rax
  8841. andq %r10, %rdx
  8842. addq %rax, %r13
  8843. rorxq $28, %r14, %rax
  8844. rorxq $34, %r14, %rcx
  8845. xorq %r12, %rdx
  8846. xorq %rax, %rcx
  8847. rorxq $39, %r14, %rax
  8848. addq %rdx, %r13
  8849. xorq %rcx, %rax
  8850. movq %r15, %rdx
  8851. addq %r13, %r9
  8852. xorq %r14, %rdx
  8853. andq %rdx, %rbx
  8854. addq %rax, %r13
  8855. xorq %r15, %rbx
  8856. rorxq $14, %r9, %rax
  8857. rorxq $18, %r9, %rcx
  8858. addq %rbx, %r13
  8859. addq 24(%rsp), %r12
  8860. movq %r10, %rbx
  8861. xorq %rax, %rcx
  8862. xorq %r11, %rbx
  8863. rorxq $41, %r9, %rax
  8864. xorq %rcx, %rax
  8865. andq %r9, %rbx
  8866. addq %rax, %r12
  8867. rorxq $28, %r13, %rax
  8868. rorxq $34, %r13, %rcx
  8869. xorq %r11, %rbx
  8870. xorq %rax, %rcx
  8871. rorxq $39, %r13, %rax
  8872. addq %rbx, %r12
  8873. xorq %rcx, %rax
  8874. movq %r14, %rbx
  8875. leaq (%r8,%r12,1), %r8
  8876. xorq %r13, %rbx
  8877. andq %rbx, %rdx
  8878. addq %rax, %r12
  8879. xorq %r14, %rdx
  8880. # rnd_all_4: 4-7
  8881. rorxq $14, %r8, %rax
  8882. rorxq $18, %r8, %rcx
  8883. addq %rdx, %r12
  8884. addq 32(%rsp), %r11
  8885. movq %r9, %rdx
  8886. xorq %rax, %rcx
  8887. xorq %r10, %rdx
  8888. rorxq $41, %r8, %rax
  8889. xorq %rcx, %rax
  8890. andq %r8, %rdx
  8891. addq %rax, %r11
  8892. rorxq $28, %r12, %rax
  8893. rorxq $34, %r12, %rcx
  8894. xorq %r10, %rdx
  8895. xorq %rax, %rcx
  8896. rorxq $39, %r12, %rax
  8897. addq %rdx, %r11
  8898. xorq %rcx, %rax
  8899. movq %r13, %rdx
  8900. addq %r11, %r15
  8901. xorq %r12, %rdx
  8902. andq %rdx, %rbx
  8903. addq %rax, %r11
  8904. xorq %r13, %rbx
  8905. rorxq $14, %r15, %rax
  8906. rorxq $18, %r15, %rcx
  8907. addq %rbx, %r11
  8908. addq 40(%rsp), %r10
  8909. movq %r8, %rbx
  8910. xorq %rax, %rcx
  8911. xorq %r9, %rbx
  8912. rorxq $41, %r15, %rax
  8913. xorq %rcx, %rax
  8914. andq %r15, %rbx
  8915. addq %rax, %r10
  8916. rorxq $28, %r11, %rax
  8917. rorxq $34, %r11, %rcx
  8918. xorq %r9, %rbx
  8919. xorq %rax, %rcx
  8920. rorxq $39, %r11, %rax
  8921. addq %rbx, %r10
  8922. xorq %rcx, %rax
  8923. movq %r12, %rbx
  8924. leaq (%r14,%r10,1), %r14
  8925. xorq %r11, %rbx
  8926. andq %rbx, %rdx
  8927. addq %rax, %r10
  8928. xorq %r12, %rdx
  8929. rorxq $14, %r14, %rax
  8930. rorxq $18, %r14, %rcx
  8931. addq %rdx, %r10
  8932. addq 48(%rsp), %r9
  8933. movq %r15, %rdx
  8934. xorq %rax, %rcx
  8935. xorq %r8, %rdx
  8936. rorxq $41, %r14, %rax
  8937. xorq %rcx, %rax
  8938. andq %r14, %rdx
  8939. addq %rax, %r9
  8940. rorxq $28, %r10, %rax
  8941. rorxq $34, %r10, %rcx
  8942. xorq %r8, %rdx
  8943. xorq %rax, %rcx
  8944. rorxq $39, %r10, %rax
  8945. addq %rdx, %r9
  8946. xorq %rcx, %rax
  8947. movq %r11, %rdx
  8948. addq %r9, %r13
  8949. xorq %r10, %rdx
  8950. andq %rdx, %rbx
  8951. addq %rax, %r9
  8952. xorq %r11, %rbx
  8953. rorxq $14, %r13, %rax
  8954. rorxq $18, %r13, %rcx
  8955. addq %rbx, %r9
  8956. addq 56(%rsp), %r8
  8957. movq %r14, %rbx
  8958. xorq %rax, %rcx
  8959. xorq %r15, %rbx
  8960. rorxq $41, %r13, %rax
  8961. xorq %rcx, %rax
  8962. andq %r13, %rbx
  8963. addq %rax, %r8
  8964. rorxq $28, %r9, %rax
  8965. rorxq $34, %r9, %rcx
  8966. xorq %r15, %rbx
  8967. xorq %rax, %rcx
  8968. rorxq $39, %r9, %rax
  8969. addq %rbx, %r8
  8970. xorq %rcx, %rax
  8971. movq %r10, %rbx
  8972. leaq (%r12,%r8,1), %r12
  8973. xorq %r9, %rbx
  8974. andq %rbx, %rdx
  8975. addq %rax, %r8
  8976. xorq %r10, %rdx
  8977. # rnd_all_4: 8-11
  8978. rorxq $14, %r12, %rax
  8979. rorxq $18, %r12, %rcx
  8980. addq %rdx, %r8
  8981. addq 64(%rsp), %r15
  8982. movq %r13, %rdx
  8983. xorq %rax, %rcx
  8984. xorq %r14, %rdx
  8985. rorxq $41, %r12, %rax
  8986. xorq %rcx, %rax
  8987. andq %r12, %rdx
  8988. addq %rax, %r15
  8989. rorxq $28, %r8, %rax
  8990. rorxq $34, %r8, %rcx
  8991. xorq %r14, %rdx
  8992. xorq %rax, %rcx
  8993. rorxq $39, %r8, %rax
  8994. addq %rdx, %r15
  8995. xorq %rcx, %rax
  8996. movq %r9, %rdx
  8997. addq %r15, %r11
  8998. xorq %r8, %rdx
  8999. andq %rdx, %rbx
  9000. addq %rax, %r15
  9001. xorq %r9, %rbx
  9002. rorxq $14, %r11, %rax
  9003. rorxq $18, %r11, %rcx
  9004. addq %rbx, %r15
  9005. addq 72(%rsp), %r14
  9006. movq %r12, %rbx
  9007. xorq %rax, %rcx
  9008. xorq %r13, %rbx
  9009. rorxq $41, %r11, %rax
  9010. xorq %rcx, %rax
  9011. andq %r11, %rbx
  9012. addq %rax, %r14
  9013. rorxq $28, %r15, %rax
  9014. rorxq $34, %r15, %rcx
  9015. xorq %r13, %rbx
  9016. xorq %rax, %rcx
  9017. rorxq $39, %r15, %rax
  9018. addq %rbx, %r14
  9019. xorq %rcx, %rax
  9020. movq %r8, %rbx
  9021. leaq (%r10,%r14,1), %r10
  9022. xorq %r15, %rbx
  9023. andq %rbx, %rdx
  9024. addq %rax, %r14
  9025. xorq %r8, %rdx
  9026. rorxq $14, %r10, %rax
  9027. rorxq $18, %r10, %rcx
  9028. addq %rdx, %r14
  9029. addq 80(%rsp), %r13
  9030. movq %r11, %rdx
  9031. xorq %rax, %rcx
  9032. xorq %r12, %rdx
  9033. rorxq $41, %r10, %rax
  9034. xorq %rcx, %rax
  9035. andq %r10, %rdx
  9036. addq %rax, %r13
  9037. rorxq $28, %r14, %rax
  9038. rorxq $34, %r14, %rcx
  9039. xorq %r12, %rdx
  9040. xorq %rax, %rcx
  9041. rorxq $39, %r14, %rax
  9042. addq %rdx, %r13
  9043. xorq %rcx, %rax
  9044. movq %r15, %rdx
  9045. addq %r13, %r9
  9046. xorq %r14, %rdx
  9047. andq %rdx, %rbx
  9048. addq %rax, %r13
  9049. xorq %r15, %rbx
  9050. rorxq $14, %r9, %rax
  9051. rorxq $18, %r9, %rcx
  9052. addq %rbx, %r13
  9053. addq 88(%rsp), %r12
  9054. movq %r10, %rbx
  9055. xorq %rax, %rcx
  9056. xorq %r11, %rbx
  9057. rorxq $41, %r9, %rax
  9058. xorq %rcx, %rax
  9059. andq %r9, %rbx
  9060. addq %rax, %r12
  9061. rorxq $28, %r13, %rax
  9062. rorxq $34, %r13, %rcx
  9063. xorq %r11, %rbx
  9064. xorq %rax, %rcx
  9065. rorxq $39, %r13, %rax
  9066. addq %rbx, %r12
  9067. xorq %rcx, %rax
  9068. movq %r14, %rbx
  9069. leaq (%r8,%r12,1), %r8
  9070. xorq %r13, %rbx
  9071. andq %rbx, %rdx
  9072. addq %rax, %r12
  9073. xorq %r14, %rdx
  9074. # rnd_all_4: 12-15
  9075. rorxq $14, %r8, %rax
  9076. rorxq $18, %r8, %rcx
  9077. addq %rdx, %r12
  9078. addq 96(%rsp), %r11
  9079. movq %r9, %rdx
  9080. xorq %rax, %rcx
  9081. xorq %r10, %rdx
  9082. rorxq $41, %r8, %rax
  9083. xorq %rcx, %rax
  9084. andq %r8, %rdx
  9085. addq %rax, %r11
  9086. rorxq $28, %r12, %rax
  9087. rorxq $34, %r12, %rcx
  9088. xorq %r10, %rdx
  9089. xorq %rax, %rcx
  9090. rorxq $39, %r12, %rax
  9091. addq %rdx, %r11
  9092. xorq %rcx, %rax
  9093. movq %r13, %rdx
  9094. addq %r11, %r15
  9095. xorq %r12, %rdx
  9096. andq %rdx, %rbx
  9097. addq %rax, %r11
  9098. xorq %r13, %rbx
  9099. rorxq $14, %r15, %rax
  9100. rorxq $18, %r15, %rcx
  9101. addq %rbx, %r11
  9102. addq 104(%rsp), %r10
  9103. movq %r8, %rbx
  9104. xorq %rax, %rcx
  9105. xorq %r9, %rbx
  9106. rorxq $41, %r15, %rax
  9107. xorq %rcx, %rax
  9108. andq %r15, %rbx
  9109. addq %rax, %r10
  9110. rorxq $28, %r11, %rax
  9111. rorxq $34, %r11, %rcx
  9112. xorq %r9, %rbx
  9113. xorq %rax, %rcx
  9114. rorxq $39, %r11, %rax
  9115. addq %rbx, %r10
  9116. xorq %rcx, %rax
  9117. movq %r12, %rbx
  9118. leaq (%r14,%r10,1), %r14
  9119. xorq %r11, %rbx
  9120. andq %rbx, %rdx
  9121. addq %rax, %r10
  9122. xorq %r12, %rdx
  9123. rorxq $14, %r14, %rax
  9124. rorxq $18, %r14, %rcx
  9125. addq %rdx, %r10
  9126. addq 112(%rsp), %r9
  9127. movq %r15, %rdx
  9128. xorq %rax, %rcx
  9129. xorq %r8, %rdx
  9130. rorxq $41, %r14, %rax
  9131. xorq %rcx, %rax
  9132. andq %r14, %rdx
  9133. addq %rax, %r9
  9134. rorxq $28, %r10, %rax
  9135. rorxq $34, %r10, %rcx
  9136. xorq %r8, %rdx
  9137. xorq %rax, %rcx
  9138. rorxq $39, %r10, %rax
  9139. addq %rdx, %r9
  9140. xorq %rcx, %rax
  9141. movq %r11, %rdx
  9142. addq %r9, %r13
  9143. xorq %r10, %rdx
  9144. andq %rdx, %rbx
  9145. addq %rax, %r9
  9146. xorq %r11, %rbx
  9147. rorxq $14, %r13, %rax
  9148. rorxq $18, %r13, %rcx
  9149. addq %rbx, %r9
  9150. addq 120(%rsp), %r8
  9151. movq %r14, %rbx
  9152. xorq %rax, %rcx
  9153. xorq %r15, %rbx
  9154. rorxq $41, %r13, %rax
  9155. xorq %rcx, %rax
  9156. andq %r13, %rbx
  9157. addq %rax, %r8
  9158. rorxq $28, %r9, %rax
  9159. rorxq $34, %r9, %rcx
  9160. xorq %r15, %rbx
  9161. xorq %rax, %rcx
  9162. rorxq $39, %r9, %rax
  9163. addq %rbx, %r8
  9164. xorq %rcx, %rax
  9165. movq %r10, %rbx
  9166. leaq (%r12,%r8,1), %r12
  9167. xorq %r9, %rbx
  9168. andq %rbx, %rdx
  9169. addq %rax, %r8
  9170. xorq %r10, %rdx
  9171. addq %rdx, %r8
  9172. addq %r8, (%rdi)
  9173. addq %r9, 8(%rdi)
  9174. addq %r10, 16(%rdi)
  9175. addq %r11, 24(%rdi)
  9176. addq %r12, 32(%rdi)
  9177. addq %r13, 40(%rdi)
  9178. addq %r14, 48(%rdi)
  9179. addq %r15, 56(%rdi)
  9180. xorq %rax, %rax
  9181. vzeroupper
  9182. addq $0x88, %rsp
  9183. popq %r15
  9184. popq %r14
  9185. popq %r13
  9186. popq %r12
  9187. popq %rbx
  9188. repz retq
  9189. #ifndef __APPLE__
  9190. .size Transform_Sha512_AVX2_RORX,.-Transform_Sha512_AVX2_RORX
  9191. #endif /* __APPLE__ */
  9192. #ifndef __APPLE__
  9193. .text
  9194. .globl Transform_Sha512_AVX2_RORX_Len
  9195. .type Transform_Sha512_AVX2_RORX_Len,@function
  9196. .align 16
  9197. Transform_Sha512_AVX2_RORX_Len:
  9198. #else
  9199. .section __TEXT,__text
  9200. .globl _Transform_Sha512_AVX2_RORX_Len
  9201. .p2align 4
  9202. _Transform_Sha512_AVX2_RORX_Len:
  9203. #endif /* __APPLE__ */
  9204. pushq %rbx
  9205. pushq %r12
  9206. pushq %r13
  9207. pushq %r14
  9208. pushq %r15
  9209. pushq %rbp
  9210. testb $0x80, %sil
  9211. je L_sha512_len_avx2_rorx_block
  9212. movq 224(%rdi), %rax
  9213. push %rsi
  9214. vmovdqu (%rax), %ymm0
  9215. vmovdqu 32(%rax), %ymm1
  9216. vmovdqu 64(%rax), %ymm2
  9217. vmovdqu 96(%rax), %ymm3
  9218. vmovups %ymm0, 64(%rdi)
  9219. vmovups %ymm1, 96(%rdi)
  9220. vmovups %ymm2, 128(%rdi)
  9221. vmovups %ymm3, 160(%rdi)
  9222. #ifndef __APPLE__
  9223. call Transform_Sha512_AVX2_RORX@plt
  9224. #else
  9225. call _Transform_Sha512_AVX2_RORX
  9226. #endif /* __APPLE__ */
  9227. pop %rsi
  9228. addq $0x80, 224(%rdi)
  9229. subl $0x80, %esi
  9230. jz L_sha512_len_avx2_rorx_done
  9231. L_sha512_len_avx2_rorx_block:
  9232. subq $0x548, %rsp
  9233. movq 224(%rdi), %rax
  9234. vmovdqa L_avx2_rorx_sha512_flip_mask(%rip), %ymm15
  9235. movq (%rdi), %r8
  9236. movq 8(%rdi), %r9
  9237. movq 16(%rdi), %r10
  9238. movq 24(%rdi), %r11
  9239. movq 32(%rdi), %r12
  9240. movq 40(%rdi), %r13
  9241. movq 48(%rdi), %r14
  9242. movq 56(%rdi), %r15
  9243. movl %esi, 1344(%rsp)
  9244. # Start of loop processing two blocks
  9245. L_sha512_len_avx2_rorx_begin:
  9246. movq %rsp, %rsi
  9247. leaq L_avx2_rorx_sha512_k_2(%rip), %rbp
  9248. movq %r9, %rbx
  9249. xorq %rdx, %rdx
  9250. vmovdqu (%rax), %xmm0
  9251. vmovdqu 16(%rax), %xmm1
  9252. vinserti128 $0x01, 128(%rax), %ymm0, %ymm0
  9253. vinserti128 $0x01, 144(%rax), %ymm1, %ymm1
  9254. vpshufb %ymm15, %ymm0, %ymm0
  9255. vpshufb %ymm15, %ymm1, %ymm1
  9256. vmovdqu 32(%rax), %xmm2
  9257. vmovdqu 48(%rax), %xmm3
  9258. vinserti128 $0x01, 160(%rax), %ymm2, %ymm2
  9259. vinserti128 $0x01, 176(%rax), %ymm3, %ymm3
  9260. vpshufb %ymm15, %ymm2, %ymm2
  9261. vpshufb %ymm15, %ymm3, %ymm3
  9262. vmovdqu 64(%rax), %xmm4
  9263. vmovdqu 80(%rax), %xmm5
  9264. vinserti128 $0x01, 192(%rax), %ymm4, %ymm4
  9265. vinserti128 $0x01, 208(%rax), %ymm5, %ymm5
  9266. vpshufb %ymm15, %ymm4, %ymm4
  9267. vpshufb %ymm15, %ymm5, %ymm5
  9268. vmovdqu 96(%rax), %xmm6
  9269. vmovdqu 112(%rax), %xmm7
  9270. vinserti128 $0x01, 224(%rax), %ymm6, %ymm6
  9271. vinserti128 $0x01, 240(%rax), %ymm7, %ymm7
  9272. vpshufb %ymm15, %ymm6, %ymm6
  9273. vpshufb %ymm15, %ymm7, %ymm7
  9274. xorq %r10, %rbx
  9275. # Start of 16 rounds
  9276. L_sha512_len_avx2_rorx_start:
  9277. vpaddq (%rbp), %ymm0, %ymm8
  9278. vpaddq 32(%rbp), %ymm1, %ymm9
  9279. vmovdqu %ymm8, (%rsi)
  9280. vmovdqu %ymm9, 32(%rsi)
  9281. vpaddq 64(%rbp), %ymm2, %ymm8
  9282. vpaddq 96(%rbp), %ymm3, %ymm9
  9283. vmovdqu %ymm8, 64(%rsi)
  9284. vmovdqu %ymm9, 96(%rsi)
  9285. vpaddq 128(%rbp), %ymm4, %ymm8
  9286. vpaddq 160(%rbp), %ymm5, %ymm9
  9287. vmovdqu %ymm8, 128(%rsi)
  9288. vmovdqu %ymm9, 160(%rsi)
  9289. vpaddq 192(%rbp), %ymm6, %ymm8
  9290. vpaddq 224(%rbp), %ymm7, %ymm9
  9291. vmovdqu %ymm8, 192(%rsi)
  9292. vmovdqu %ymm9, 224(%rsi)
  9293. # msg_sched: 0-1
  9294. rorxq $14, %r12, %rax
  9295. rorxq $18, %r12, %rcx
  9296. addq %rdx, %r8
  9297. vpalignr $8, %ymm0, %ymm1, %ymm12
  9298. addq (%rsi), %r15
  9299. movq %r13, %rdx
  9300. xorq %rax, %rcx
  9301. vpalignr $8, %ymm4, %ymm5, %ymm13
  9302. xorq %r14, %rdx
  9303. rorxq $41, %r12, %rax
  9304. xorq %rcx, %rax
  9305. vpsrlq $0x01, %ymm12, %ymm8
  9306. vpsllq $63, %ymm12, %ymm9
  9307. andq %r12, %rdx
  9308. addq %rax, %r15
  9309. rorxq $28, %r8, %rax
  9310. vpsrlq $8, %ymm12, %ymm10
  9311. vpsllq $56, %ymm12, %ymm11
  9312. rorxq $34, %r8, %rcx
  9313. xorq %r14, %rdx
  9314. xorq %rax, %rcx
  9315. vpor %ymm9, %ymm8, %ymm8
  9316. vpor %ymm11, %ymm10, %ymm10
  9317. rorxq $39, %r8, %rax
  9318. addq %rdx, %r15
  9319. xorq %rcx, %rax
  9320. vpsrlq $7, %ymm12, %ymm11
  9321. vpxor %ymm10, %ymm8, %ymm8
  9322. movq %r9, %rdx
  9323. addq %r15, %r11
  9324. xorq %r8, %rdx
  9325. vpxor %ymm11, %ymm8, %ymm8
  9326. vpaddq %ymm0, %ymm13, %ymm0
  9327. andq %rdx, %rbx
  9328. addq %rax, %r15
  9329. xorq %r9, %rbx
  9330. vpaddq %ymm0, %ymm8, %ymm0
  9331. rorxq $14, %r11, %rax
  9332. rorxq $18, %r11, %rcx
  9333. addq %rbx, %r15
  9334. vpsrlq $19, %ymm7, %ymm8
  9335. vpsllq $45, %ymm7, %ymm9
  9336. addq 8(%rsi), %r14
  9337. movq %r12, %rbx
  9338. xorq %rax, %rcx
  9339. vpsrlq $61, %ymm7, %ymm10
  9340. vpsllq $3, %ymm7, %ymm11
  9341. xorq %r13, %rbx
  9342. rorxq $41, %r11, %rax
  9343. xorq %rcx, %rax
  9344. vpor %ymm9, %ymm8, %ymm8
  9345. vpor %ymm11, %ymm10, %ymm10
  9346. andq %r11, %rbx
  9347. addq %rax, %r14
  9348. rorxq $28, %r15, %rax
  9349. rorxq $34, %r15, %rcx
  9350. xorq %r13, %rbx
  9351. xorq %rax, %rcx
  9352. vpxor %ymm10, %ymm8, %ymm8
  9353. vpsrlq $6, %ymm7, %ymm11
  9354. rorxq $39, %r15, %rax
  9355. addq %rbx, %r14
  9356. xorq %rcx, %rax
  9357. movq %r8, %rbx
  9358. leaq (%r10,%r14,1), %r10
  9359. xorq %r15, %rbx
  9360. vpxor %ymm11, %ymm8, %ymm8
  9361. andq %rbx, %rdx
  9362. addq %rax, %r14
  9363. xorq %r8, %rdx
  9364. vpaddq %ymm0, %ymm8, %ymm0
  9365. # msg_sched done: 0-3
  9366. # msg_sched: 4-5
  9367. rorxq $14, %r10, %rax
  9368. rorxq $18, %r10, %rcx
  9369. addq %rdx, %r14
  9370. vpalignr $8, %ymm1, %ymm2, %ymm12
  9371. addq 32(%rsi), %r13
  9372. movq %r11, %rdx
  9373. xorq %rax, %rcx
  9374. vpalignr $8, %ymm5, %ymm6, %ymm13
  9375. xorq %r12, %rdx
  9376. rorxq $41, %r10, %rax
  9377. xorq %rcx, %rax
  9378. vpsrlq $0x01, %ymm12, %ymm8
  9379. vpsllq $63, %ymm12, %ymm9
  9380. andq %r10, %rdx
  9381. addq %rax, %r13
  9382. rorxq $28, %r14, %rax
  9383. vpsrlq $8, %ymm12, %ymm10
  9384. vpsllq $56, %ymm12, %ymm11
  9385. rorxq $34, %r14, %rcx
  9386. xorq %r12, %rdx
  9387. xorq %rax, %rcx
  9388. vpor %ymm9, %ymm8, %ymm8
  9389. vpor %ymm11, %ymm10, %ymm10
  9390. rorxq $39, %r14, %rax
  9391. addq %rdx, %r13
  9392. xorq %rcx, %rax
  9393. vpsrlq $7, %ymm12, %ymm11
  9394. vpxor %ymm10, %ymm8, %ymm8
  9395. movq %r15, %rdx
  9396. addq %r13, %r9
  9397. xorq %r14, %rdx
  9398. vpxor %ymm11, %ymm8, %ymm8
  9399. vpaddq %ymm1, %ymm13, %ymm1
  9400. andq %rdx, %rbx
  9401. addq %rax, %r13
  9402. xorq %r15, %rbx
  9403. vpaddq %ymm1, %ymm8, %ymm1
  9404. rorxq $14, %r9, %rax
  9405. rorxq $18, %r9, %rcx
  9406. addq %rbx, %r13
  9407. vpsrlq $19, %ymm0, %ymm8
  9408. vpsllq $45, %ymm0, %ymm9
  9409. addq 40(%rsi), %r12
  9410. movq %r10, %rbx
  9411. xorq %rax, %rcx
  9412. vpsrlq $61, %ymm0, %ymm10
  9413. vpsllq $3, %ymm0, %ymm11
  9414. xorq %r11, %rbx
  9415. rorxq $41, %r9, %rax
  9416. xorq %rcx, %rax
  9417. vpor %ymm9, %ymm8, %ymm8
  9418. vpor %ymm11, %ymm10, %ymm10
  9419. andq %r9, %rbx
  9420. addq %rax, %r12
  9421. rorxq $28, %r13, %rax
  9422. rorxq $34, %r13, %rcx
  9423. xorq %r11, %rbx
  9424. xorq %rax, %rcx
  9425. vpxor %ymm10, %ymm8, %ymm8
  9426. vpsrlq $6, %ymm0, %ymm11
  9427. rorxq $39, %r13, %rax
  9428. addq %rbx, %r12
  9429. xorq %rcx, %rax
  9430. movq %r14, %rbx
  9431. leaq (%r8,%r12,1), %r8
  9432. xorq %r13, %rbx
  9433. vpxor %ymm11, %ymm8, %ymm8
  9434. andq %rbx, %rdx
  9435. addq %rax, %r12
  9436. xorq %r14, %rdx
  9437. vpaddq %ymm1, %ymm8, %ymm1
  9438. # msg_sched done: 4-7
  9439. # msg_sched: 8-9
  9440. rorxq $14, %r8, %rax
  9441. rorxq $18, %r8, %rcx
  9442. addq %rdx, %r12
  9443. vpalignr $8, %ymm2, %ymm3, %ymm12
  9444. addq 64(%rsi), %r11
  9445. movq %r9, %rdx
  9446. xorq %rax, %rcx
  9447. vpalignr $8, %ymm6, %ymm7, %ymm13
  9448. xorq %r10, %rdx
  9449. rorxq $41, %r8, %rax
  9450. xorq %rcx, %rax
  9451. vpsrlq $0x01, %ymm12, %ymm8
  9452. vpsllq $63, %ymm12, %ymm9
  9453. andq %r8, %rdx
  9454. addq %rax, %r11
  9455. rorxq $28, %r12, %rax
  9456. vpsrlq $8, %ymm12, %ymm10
  9457. vpsllq $56, %ymm12, %ymm11
  9458. rorxq $34, %r12, %rcx
  9459. xorq %r10, %rdx
  9460. xorq %rax, %rcx
  9461. vpor %ymm9, %ymm8, %ymm8
  9462. vpor %ymm11, %ymm10, %ymm10
  9463. rorxq $39, %r12, %rax
  9464. addq %rdx, %r11
  9465. xorq %rcx, %rax
  9466. vpsrlq $7, %ymm12, %ymm11
  9467. vpxor %ymm10, %ymm8, %ymm8
  9468. movq %r13, %rdx
  9469. addq %r11, %r15
  9470. xorq %r12, %rdx
  9471. vpxor %ymm11, %ymm8, %ymm8
  9472. vpaddq %ymm2, %ymm13, %ymm2
  9473. andq %rdx, %rbx
  9474. addq %rax, %r11
  9475. xorq %r13, %rbx
  9476. vpaddq %ymm2, %ymm8, %ymm2
  9477. rorxq $14, %r15, %rax
  9478. rorxq $18, %r15, %rcx
  9479. addq %rbx, %r11
  9480. vpsrlq $19, %ymm1, %ymm8
  9481. vpsllq $45, %ymm1, %ymm9
  9482. addq 72(%rsi), %r10
  9483. movq %r8, %rbx
  9484. xorq %rax, %rcx
  9485. vpsrlq $61, %ymm1, %ymm10
  9486. vpsllq $3, %ymm1, %ymm11
  9487. xorq %r9, %rbx
  9488. rorxq $41, %r15, %rax
  9489. xorq %rcx, %rax
  9490. vpor %ymm9, %ymm8, %ymm8
  9491. vpor %ymm11, %ymm10, %ymm10
  9492. andq %r15, %rbx
  9493. addq %rax, %r10
  9494. rorxq $28, %r11, %rax
  9495. rorxq $34, %r11, %rcx
  9496. xorq %r9, %rbx
  9497. xorq %rax, %rcx
  9498. vpxor %ymm10, %ymm8, %ymm8
  9499. vpsrlq $6, %ymm1, %ymm11
  9500. rorxq $39, %r11, %rax
  9501. addq %rbx, %r10
  9502. xorq %rcx, %rax
  9503. movq %r12, %rbx
  9504. leaq (%r14,%r10,1), %r14
  9505. xorq %r11, %rbx
  9506. vpxor %ymm11, %ymm8, %ymm8
  9507. andq %rbx, %rdx
  9508. addq %rax, %r10
  9509. xorq %r12, %rdx
  9510. vpaddq %ymm2, %ymm8, %ymm2
  9511. # msg_sched done: 8-11
  9512. # msg_sched: 12-13
  9513. rorxq $14, %r14, %rax
  9514. rorxq $18, %r14, %rcx
  9515. addq %rdx, %r10
  9516. vpalignr $8, %ymm3, %ymm4, %ymm12
  9517. addq 96(%rsi), %r9
  9518. movq %r15, %rdx
  9519. xorq %rax, %rcx
  9520. vpalignr $8, %ymm7, %ymm0, %ymm13
  9521. xorq %r8, %rdx
  9522. rorxq $41, %r14, %rax
  9523. xorq %rcx, %rax
  9524. vpsrlq $0x01, %ymm12, %ymm8
  9525. vpsllq $63, %ymm12, %ymm9
  9526. andq %r14, %rdx
  9527. addq %rax, %r9
  9528. rorxq $28, %r10, %rax
  9529. vpsrlq $8, %ymm12, %ymm10
  9530. vpsllq $56, %ymm12, %ymm11
  9531. rorxq $34, %r10, %rcx
  9532. xorq %r8, %rdx
  9533. xorq %rax, %rcx
  9534. vpor %ymm9, %ymm8, %ymm8
  9535. vpor %ymm11, %ymm10, %ymm10
  9536. rorxq $39, %r10, %rax
  9537. addq %rdx, %r9
  9538. xorq %rcx, %rax
  9539. vpsrlq $7, %ymm12, %ymm11
  9540. vpxor %ymm10, %ymm8, %ymm8
  9541. movq %r11, %rdx
  9542. addq %r9, %r13
  9543. xorq %r10, %rdx
  9544. vpxor %ymm11, %ymm8, %ymm8
  9545. vpaddq %ymm3, %ymm13, %ymm3
  9546. andq %rdx, %rbx
  9547. addq %rax, %r9
  9548. xorq %r11, %rbx
  9549. vpaddq %ymm3, %ymm8, %ymm3
  9550. rorxq $14, %r13, %rax
  9551. rorxq $18, %r13, %rcx
  9552. addq %rbx, %r9
  9553. vpsrlq $19, %ymm2, %ymm8
  9554. vpsllq $45, %ymm2, %ymm9
  9555. addq 104(%rsi), %r8
  9556. movq %r14, %rbx
  9557. xorq %rax, %rcx
  9558. vpsrlq $61, %ymm2, %ymm10
  9559. vpsllq $3, %ymm2, %ymm11
  9560. xorq %r15, %rbx
  9561. rorxq $41, %r13, %rax
  9562. xorq %rcx, %rax
  9563. vpor %ymm9, %ymm8, %ymm8
  9564. vpor %ymm11, %ymm10, %ymm10
  9565. andq %r13, %rbx
  9566. addq %rax, %r8
  9567. rorxq $28, %r9, %rax
  9568. rorxq $34, %r9, %rcx
  9569. xorq %r15, %rbx
  9570. xorq %rax, %rcx
  9571. vpxor %ymm10, %ymm8, %ymm8
  9572. vpsrlq $6, %ymm2, %ymm11
  9573. rorxq $39, %r9, %rax
  9574. addq %rbx, %r8
  9575. xorq %rcx, %rax
  9576. movq %r10, %rbx
  9577. leaq (%r12,%r8,1), %r12
  9578. xorq %r9, %rbx
  9579. vpxor %ymm11, %ymm8, %ymm8
  9580. andq %rbx, %rdx
  9581. addq %rax, %r8
  9582. xorq %r10, %rdx
  9583. vpaddq %ymm3, %ymm8, %ymm3
  9584. # msg_sched done: 12-15
  9585. # msg_sched: 16-17
  9586. rorxq $14, %r12, %rax
  9587. rorxq $18, %r12, %rcx
  9588. addq %rdx, %r8
  9589. vpalignr $8, %ymm4, %ymm5, %ymm12
  9590. addq 128(%rsi), %r15
  9591. movq %r13, %rdx
  9592. xorq %rax, %rcx
  9593. vpalignr $8, %ymm0, %ymm1, %ymm13
  9594. xorq %r14, %rdx
  9595. rorxq $41, %r12, %rax
  9596. xorq %rcx, %rax
  9597. vpsrlq $0x01, %ymm12, %ymm8
  9598. vpsllq $63, %ymm12, %ymm9
  9599. andq %r12, %rdx
  9600. addq %rax, %r15
  9601. rorxq $28, %r8, %rax
  9602. vpsrlq $8, %ymm12, %ymm10
  9603. vpsllq $56, %ymm12, %ymm11
  9604. rorxq $34, %r8, %rcx
  9605. xorq %r14, %rdx
  9606. xorq %rax, %rcx
  9607. vpor %ymm9, %ymm8, %ymm8
  9608. vpor %ymm11, %ymm10, %ymm10
  9609. rorxq $39, %r8, %rax
  9610. addq %rdx, %r15
  9611. xorq %rcx, %rax
  9612. vpsrlq $7, %ymm12, %ymm11
  9613. vpxor %ymm10, %ymm8, %ymm8
  9614. movq %r9, %rdx
  9615. addq %r15, %r11
  9616. xorq %r8, %rdx
  9617. vpxor %ymm11, %ymm8, %ymm8
  9618. vpaddq %ymm4, %ymm13, %ymm4
  9619. andq %rdx, %rbx
  9620. addq %rax, %r15
  9621. xorq %r9, %rbx
  9622. vpaddq %ymm4, %ymm8, %ymm4
  9623. rorxq $14, %r11, %rax
  9624. rorxq $18, %r11, %rcx
  9625. addq %rbx, %r15
  9626. vpsrlq $19, %ymm3, %ymm8
  9627. vpsllq $45, %ymm3, %ymm9
  9628. addq 136(%rsi), %r14
  9629. movq %r12, %rbx
  9630. xorq %rax, %rcx
  9631. vpsrlq $61, %ymm3, %ymm10
  9632. vpsllq $3, %ymm3, %ymm11
  9633. xorq %r13, %rbx
  9634. rorxq $41, %r11, %rax
  9635. xorq %rcx, %rax
  9636. vpor %ymm9, %ymm8, %ymm8
  9637. vpor %ymm11, %ymm10, %ymm10
  9638. andq %r11, %rbx
  9639. addq %rax, %r14
  9640. rorxq $28, %r15, %rax
  9641. rorxq $34, %r15, %rcx
  9642. xorq %r13, %rbx
  9643. xorq %rax, %rcx
  9644. vpxor %ymm10, %ymm8, %ymm8
  9645. vpsrlq $6, %ymm3, %ymm11
  9646. rorxq $39, %r15, %rax
  9647. addq %rbx, %r14
  9648. xorq %rcx, %rax
  9649. movq %r8, %rbx
  9650. leaq (%r10,%r14,1), %r10
  9651. xorq %r15, %rbx
  9652. vpxor %ymm11, %ymm8, %ymm8
  9653. andq %rbx, %rdx
  9654. addq %rax, %r14
  9655. xorq %r8, %rdx
  9656. vpaddq %ymm4, %ymm8, %ymm4
  9657. # msg_sched done: 16-19
  9658. # msg_sched: 20-21
  9659. rorxq $14, %r10, %rax
  9660. rorxq $18, %r10, %rcx
  9661. addq %rdx, %r14
  9662. vpalignr $8, %ymm5, %ymm6, %ymm12
  9663. addq 160(%rsi), %r13
  9664. movq %r11, %rdx
  9665. xorq %rax, %rcx
  9666. vpalignr $8, %ymm1, %ymm2, %ymm13
  9667. xorq %r12, %rdx
  9668. rorxq $41, %r10, %rax
  9669. xorq %rcx, %rax
  9670. vpsrlq $0x01, %ymm12, %ymm8
  9671. vpsllq $63, %ymm12, %ymm9
  9672. andq %r10, %rdx
  9673. addq %rax, %r13
  9674. rorxq $28, %r14, %rax
  9675. vpsrlq $8, %ymm12, %ymm10
  9676. vpsllq $56, %ymm12, %ymm11
  9677. rorxq $34, %r14, %rcx
  9678. xorq %r12, %rdx
  9679. xorq %rax, %rcx
  9680. vpor %ymm9, %ymm8, %ymm8
  9681. vpor %ymm11, %ymm10, %ymm10
  9682. rorxq $39, %r14, %rax
  9683. addq %rdx, %r13
  9684. xorq %rcx, %rax
  9685. vpsrlq $7, %ymm12, %ymm11
  9686. vpxor %ymm10, %ymm8, %ymm8
  9687. movq %r15, %rdx
  9688. addq %r13, %r9
  9689. xorq %r14, %rdx
  9690. vpxor %ymm11, %ymm8, %ymm8
  9691. vpaddq %ymm5, %ymm13, %ymm5
  9692. andq %rdx, %rbx
  9693. addq %rax, %r13
  9694. xorq %r15, %rbx
  9695. vpaddq %ymm5, %ymm8, %ymm5
  9696. rorxq $14, %r9, %rax
  9697. rorxq $18, %r9, %rcx
  9698. addq %rbx, %r13
  9699. vpsrlq $19, %ymm4, %ymm8
  9700. vpsllq $45, %ymm4, %ymm9
  9701. addq 168(%rsi), %r12
  9702. movq %r10, %rbx
  9703. xorq %rax, %rcx
  9704. vpsrlq $61, %ymm4, %ymm10
  9705. vpsllq $3, %ymm4, %ymm11
  9706. xorq %r11, %rbx
  9707. rorxq $41, %r9, %rax
  9708. xorq %rcx, %rax
  9709. vpor %ymm9, %ymm8, %ymm8
  9710. vpor %ymm11, %ymm10, %ymm10
  9711. andq %r9, %rbx
  9712. addq %rax, %r12
  9713. rorxq $28, %r13, %rax
  9714. rorxq $34, %r13, %rcx
  9715. xorq %r11, %rbx
  9716. xorq %rax, %rcx
  9717. vpxor %ymm10, %ymm8, %ymm8
  9718. vpsrlq $6, %ymm4, %ymm11
  9719. rorxq $39, %r13, %rax
  9720. addq %rbx, %r12
  9721. xorq %rcx, %rax
  9722. movq %r14, %rbx
  9723. leaq (%r8,%r12,1), %r8
  9724. xorq %r13, %rbx
  9725. vpxor %ymm11, %ymm8, %ymm8
  9726. andq %rbx, %rdx
  9727. addq %rax, %r12
  9728. xorq %r14, %rdx
  9729. vpaddq %ymm5, %ymm8, %ymm5
  9730. # msg_sched done: 20-23
  9731. # msg_sched: 24-25
  9732. rorxq $14, %r8, %rax
  9733. rorxq $18, %r8, %rcx
  9734. addq %rdx, %r12
  9735. vpalignr $8, %ymm6, %ymm7, %ymm12
  9736. addq 192(%rsi), %r11
  9737. movq %r9, %rdx
  9738. xorq %rax, %rcx
  9739. vpalignr $8, %ymm2, %ymm3, %ymm13
  9740. xorq %r10, %rdx
  9741. rorxq $41, %r8, %rax
  9742. xorq %rcx, %rax
  9743. vpsrlq $0x01, %ymm12, %ymm8
  9744. vpsllq $63, %ymm12, %ymm9
  9745. andq %r8, %rdx
  9746. addq %rax, %r11
  9747. rorxq $28, %r12, %rax
  9748. vpsrlq $8, %ymm12, %ymm10
  9749. vpsllq $56, %ymm12, %ymm11
  9750. rorxq $34, %r12, %rcx
  9751. xorq %r10, %rdx
  9752. xorq %rax, %rcx
  9753. vpor %ymm9, %ymm8, %ymm8
  9754. vpor %ymm11, %ymm10, %ymm10
  9755. rorxq $39, %r12, %rax
  9756. addq %rdx, %r11
  9757. xorq %rcx, %rax
  9758. vpsrlq $7, %ymm12, %ymm11
  9759. vpxor %ymm10, %ymm8, %ymm8
  9760. movq %r13, %rdx
  9761. addq %r11, %r15
  9762. xorq %r12, %rdx
  9763. vpxor %ymm11, %ymm8, %ymm8
  9764. vpaddq %ymm6, %ymm13, %ymm6
  9765. andq %rdx, %rbx
  9766. addq %rax, %r11
  9767. xorq %r13, %rbx
  9768. vpaddq %ymm6, %ymm8, %ymm6
  9769. rorxq $14, %r15, %rax
  9770. rorxq $18, %r15, %rcx
  9771. addq %rbx, %r11
  9772. vpsrlq $19, %ymm5, %ymm8
  9773. vpsllq $45, %ymm5, %ymm9
  9774. addq 200(%rsi), %r10
  9775. movq %r8, %rbx
  9776. xorq %rax, %rcx
  9777. vpsrlq $61, %ymm5, %ymm10
  9778. vpsllq $3, %ymm5, %ymm11
  9779. xorq %r9, %rbx
  9780. rorxq $41, %r15, %rax
  9781. xorq %rcx, %rax
  9782. vpor %ymm9, %ymm8, %ymm8
  9783. vpor %ymm11, %ymm10, %ymm10
  9784. andq %r15, %rbx
  9785. addq %rax, %r10
  9786. rorxq $28, %r11, %rax
  9787. rorxq $34, %r11, %rcx
  9788. xorq %r9, %rbx
  9789. xorq %rax, %rcx
  9790. vpxor %ymm10, %ymm8, %ymm8
  9791. vpsrlq $6, %ymm5, %ymm11
  9792. rorxq $39, %r11, %rax
  9793. addq %rbx, %r10
  9794. xorq %rcx, %rax
  9795. movq %r12, %rbx
  9796. leaq (%r14,%r10,1), %r14
  9797. xorq %r11, %rbx
  9798. vpxor %ymm11, %ymm8, %ymm8
  9799. andq %rbx, %rdx
  9800. addq %rax, %r10
  9801. xorq %r12, %rdx
  9802. vpaddq %ymm6, %ymm8, %ymm6
  9803. # msg_sched done: 24-27
  9804. # msg_sched: 28-29
  9805. rorxq $14, %r14, %rax
  9806. rorxq $18, %r14, %rcx
  9807. addq %rdx, %r10
  9808. vpalignr $8, %ymm7, %ymm0, %ymm12
  9809. addq 224(%rsi), %r9
  9810. movq %r15, %rdx
  9811. xorq %rax, %rcx
  9812. vpalignr $8, %ymm3, %ymm4, %ymm13
  9813. xorq %r8, %rdx
  9814. rorxq $41, %r14, %rax
  9815. xorq %rcx, %rax
  9816. vpsrlq $0x01, %ymm12, %ymm8
  9817. vpsllq $63, %ymm12, %ymm9
  9818. andq %r14, %rdx
  9819. addq %rax, %r9
  9820. rorxq $28, %r10, %rax
  9821. vpsrlq $8, %ymm12, %ymm10
  9822. vpsllq $56, %ymm12, %ymm11
  9823. rorxq $34, %r10, %rcx
  9824. xorq %r8, %rdx
  9825. xorq %rax, %rcx
  9826. vpor %ymm9, %ymm8, %ymm8
  9827. vpor %ymm11, %ymm10, %ymm10
  9828. rorxq $39, %r10, %rax
  9829. addq %rdx, %r9
  9830. xorq %rcx, %rax
  9831. vpsrlq $7, %ymm12, %ymm11
  9832. vpxor %ymm10, %ymm8, %ymm8
  9833. movq %r11, %rdx
  9834. addq %r9, %r13
  9835. xorq %r10, %rdx
  9836. vpxor %ymm11, %ymm8, %ymm8
  9837. vpaddq %ymm7, %ymm13, %ymm7
  9838. andq %rdx, %rbx
  9839. addq %rax, %r9
  9840. xorq %r11, %rbx
  9841. vpaddq %ymm7, %ymm8, %ymm7
  9842. rorxq $14, %r13, %rax
  9843. rorxq $18, %r13, %rcx
  9844. addq %rbx, %r9
  9845. vpsrlq $19, %ymm6, %ymm8
  9846. vpsllq $45, %ymm6, %ymm9
  9847. addq 232(%rsi), %r8
  9848. movq %r14, %rbx
  9849. xorq %rax, %rcx
  9850. vpsrlq $61, %ymm6, %ymm10
  9851. vpsllq $3, %ymm6, %ymm11
  9852. xorq %r15, %rbx
  9853. rorxq $41, %r13, %rax
  9854. xorq %rcx, %rax
  9855. vpor %ymm9, %ymm8, %ymm8
  9856. vpor %ymm11, %ymm10, %ymm10
  9857. andq %r13, %rbx
  9858. addq %rax, %r8
  9859. rorxq $28, %r9, %rax
  9860. rorxq $34, %r9, %rcx
  9861. xorq %r15, %rbx
  9862. xorq %rax, %rcx
  9863. vpxor %ymm10, %ymm8, %ymm8
  9864. vpsrlq $6, %ymm6, %ymm11
  9865. rorxq $39, %r9, %rax
  9866. addq %rbx, %r8
  9867. xorq %rcx, %rax
  9868. movq %r10, %rbx
  9869. leaq (%r12,%r8,1), %r12
  9870. xorq %r9, %rbx
  9871. vpxor %ymm11, %ymm8, %ymm8
  9872. andq %rbx, %rdx
  9873. addq %rax, %r8
  9874. xorq %r10, %rdx
  9875. vpaddq %ymm7, %ymm8, %ymm7
  9876. # msg_sched done: 28-31
  9877. addq $0x100, %rbp
  9878. addq $0x100, %rsi
  9879. cmpq L_avx2_rorx_sha512_k_2_end(%rip), %rbp
  9880. jne L_sha512_len_avx2_rorx_start
  9881. vpaddq (%rbp), %ymm0, %ymm8
  9882. vpaddq 32(%rbp), %ymm1, %ymm9
  9883. vmovdqu %ymm8, (%rsi)
  9884. vmovdqu %ymm9, 32(%rsi)
  9885. vpaddq 64(%rbp), %ymm2, %ymm8
  9886. vpaddq 96(%rbp), %ymm3, %ymm9
  9887. vmovdqu %ymm8, 64(%rsi)
  9888. vmovdqu %ymm9, 96(%rsi)
  9889. vpaddq 128(%rbp), %ymm4, %ymm8
  9890. vpaddq 160(%rbp), %ymm5, %ymm9
  9891. vmovdqu %ymm8, 128(%rsi)
  9892. vmovdqu %ymm9, 160(%rsi)
  9893. vpaddq 192(%rbp), %ymm6, %ymm8
  9894. vpaddq 224(%rbp), %ymm7, %ymm9
  9895. vmovdqu %ymm8, 192(%rsi)
  9896. vmovdqu %ymm9, 224(%rsi)
  9897. # rnd_all_2: 0-1
  9898. rorxq $14, %r12, %rax
  9899. rorxq $18, %r12, %rcx
  9900. addq %rdx, %r8
  9901. addq (%rsi), %r15
  9902. movq %r13, %rdx
  9903. xorq %rax, %rcx
  9904. xorq %r14, %rdx
  9905. rorxq $41, %r12, %rax
  9906. xorq %rcx, %rax
  9907. andq %r12, %rdx
  9908. addq %rax, %r15
  9909. rorxq $28, %r8, %rax
  9910. rorxq $34, %r8, %rcx
  9911. xorq %r14, %rdx
  9912. xorq %rax, %rcx
  9913. rorxq $39, %r8, %rax
  9914. addq %rdx, %r15
  9915. xorq %rcx, %rax
  9916. movq %r9, %rdx
  9917. addq %r15, %r11
  9918. xorq %r8, %rdx
  9919. andq %rdx, %rbx
  9920. addq %rax, %r15
  9921. xorq %r9, %rbx
  9922. rorxq $14, %r11, %rax
  9923. rorxq $18, %r11, %rcx
  9924. addq %rbx, %r15
  9925. addq 8(%rsi), %r14
  9926. movq %r12, %rbx
  9927. xorq %rax, %rcx
  9928. xorq %r13, %rbx
  9929. rorxq $41, %r11, %rax
  9930. xorq %rcx, %rax
  9931. andq %r11, %rbx
  9932. addq %rax, %r14
  9933. rorxq $28, %r15, %rax
  9934. rorxq $34, %r15, %rcx
  9935. xorq %r13, %rbx
  9936. xorq %rax, %rcx
  9937. rorxq $39, %r15, %rax
  9938. addq %rbx, %r14
  9939. xorq %rcx, %rax
  9940. movq %r8, %rbx
  9941. leaq (%r10,%r14,1), %r10
  9942. xorq %r15, %rbx
  9943. andq %rbx, %rdx
  9944. addq %rax, %r14
  9945. xorq %r8, %rdx
  9946. # rnd_all_2: 4-5
  9947. rorxq $14, %r10, %rax
  9948. rorxq $18, %r10, %rcx
  9949. addq %rdx, %r14
  9950. addq 32(%rsi), %r13
  9951. movq %r11, %rdx
  9952. xorq %rax, %rcx
  9953. xorq %r12, %rdx
  9954. rorxq $41, %r10, %rax
  9955. xorq %rcx, %rax
  9956. andq %r10, %rdx
  9957. addq %rax, %r13
  9958. rorxq $28, %r14, %rax
  9959. rorxq $34, %r14, %rcx
  9960. xorq %r12, %rdx
  9961. xorq %rax, %rcx
  9962. rorxq $39, %r14, %rax
  9963. addq %rdx, %r13
  9964. xorq %rcx, %rax
  9965. movq %r15, %rdx
  9966. addq %r13, %r9
  9967. xorq %r14, %rdx
  9968. andq %rdx, %rbx
  9969. addq %rax, %r13
  9970. xorq %r15, %rbx
  9971. rorxq $14, %r9, %rax
  9972. rorxq $18, %r9, %rcx
  9973. addq %rbx, %r13
  9974. addq 40(%rsi), %r12
  9975. movq %r10, %rbx
  9976. xorq %rax, %rcx
  9977. xorq %r11, %rbx
  9978. rorxq $41, %r9, %rax
  9979. xorq %rcx, %rax
  9980. andq %r9, %rbx
  9981. addq %rax, %r12
  9982. rorxq $28, %r13, %rax
  9983. rorxq $34, %r13, %rcx
  9984. xorq %r11, %rbx
  9985. xorq %rax, %rcx
  9986. rorxq $39, %r13, %rax
  9987. addq %rbx, %r12
  9988. xorq %rcx, %rax
  9989. movq %r14, %rbx
  9990. leaq (%r8,%r12,1), %r8
  9991. xorq %r13, %rbx
  9992. andq %rbx, %rdx
  9993. addq %rax, %r12
  9994. xorq %r14, %rdx
  9995. # rnd_all_2: 8-9
  9996. rorxq $14, %r8, %rax
  9997. rorxq $18, %r8, %rcx
  9998. addq %rdx, %r12
  9999. addq 64(%rsi), %r11
  10000. movq %r9, %rdx
  10001. xorq %rax, %rcx
  10002. xorq %r10, %rdx
  10003. rorxq $41, %r8, %rax
  10004. xorq %rcx, %rax
  10005. andq %r8, %rdx
  10006. addq %rax, %r11
  10007. rorxq $28, %r12, %rax
  10008. rorxq $34, %r12, %rcx
  10009. xorq %r10, %rdx
  10010. xorq %rax, %rcx
  10011. rorxq $39, %r12, %rax
  10012. addq %rdx, %r11
  10013. xorq %rcx, %rax
  10014. movq %r13, %rdx
  10015. addq %r11, %r15
  10016. xorq %r12, %rdx
  10017. andq %rdx, %rbx
  10018. addq %rax, %r11
  10019. xorq %r13, %rbx
  10020. rorxq $14, %r15, %rax
  10021. rorxq $18, %r15, %rcx
  10022. addq %rbx, %r11
  10023. addq 72(%rsi), %r10
  10024. movq %r8, %rbx
  10025. xorq %rax, %rcx
  10026. xorq %r9, %rbx
  10027. rorxq $41, %r15, %rax
  10028. xorq %rcx, %rax
  10029. andq %r15, %rbx
  10030. addq %rax, %r10
  10031. rorxq $28, %r11, %rax
  10032. rorxq $34, %r11, %rcx
  10033. xorq %r9, %rbx
  10034. xorq %rax, %rcx
  10035. rorxq $39, %r11, %rax
  10036. addq %rbx, %r10
  10037. xorq %rcx, %rax
  10038. movq %r12, %rbx
  10039. leaq (%r14,%r10,1), %r14
  10040. xorq %r11, %rbx
  10041. andq %rbx, %rdx
  10042. addq %rax, %r10
  10043. xorq %r12, %rdx
  10044. # rnd_all_2: 12-13
  10045. rorxq $14, %r14, %rax
  10046. rorxq $18, %r14, %rcx
  10047. addq %rdx, %r10
  10048. addq 96(%rsi), %r9
  10049. movq %r15, %rdx
  10050. xorq %rax, %rcx
  10051. xorq %r8, %rdx
  10052. rorxq $41, %r14, %rax
  10053. xorq %rcx, %rax
  10054. andq %r14, %rdx
  10055. addq %rax, %r9
  10056. rorxq $28, %r10, %rax
  10057. rorxq $34, %r10, %rcx
  10058. xorq %r8, %rdx
  10059. xorq %rax, %rcx
  10060. rorxq $39, %r10, %rax
  10061. addq %rdx, %r9
  10062. xorq %rcx, %rax
  10063. movq %r11, %rdx
  10064. addq %r9, %r13
  10065. xorq %r10, %rdx
  10066. andq %rdx, %rbx
  10067. addq %rax, %r9
  10068. xorq %r11, %rbx
  10069. rorxq $14, %r13, %rax
  10070. rorxq $18, %r13, %rcx
  10071. addq %rbx, %r9
  10072. addq 104(%rsi), %r8
  10073. movq %r14, %rbx
  10074. xorq %rax, %rcx
  10075. xorq %r15, %rbx
  10076. rorxq $41, %r13, %rax
  10077. xorq %rcx, %rax
  10078. andq %r13, %rbx
  10079. addq %rax, %r8
  10080. rorxq $28, %r9, %rax
  10081. rorxq $34, %r9, %rcx
  10082. xorq %r15, %rbx
  10083. xorq %rax, %rcx
  10084. rorxq $39, %r9, %rax
  10085. addq %rbx, %r8
  10086. xorq %rcx, %rax
  10087. movq %r10, %rbx
  10088. leaq (%r12,%r8,1), %r12
  10089. xorq %r9, %rbx
  10090. andq %rbx, %rdx
  10091. addq %rax, %r8
  10092. xorq %r10, %rdx
  10093. # rnd_all_2: 16-17
  10094. rorxq $14, %r12, %rax
  10095. rorxq $18, %r12, %rcx
  10096. addq %rdx, %r8
  10097. addq 128(%rsi), %r15
  10098. movq %r13, %rdx
  10099. xorq %rax, %rcx
  10100. xorq %r14, %rdx
  10101. rorxq $41, %r12, %rax
  10102. xorq %rcx, %rax
  10103. andq %r12, %rdx
  10104. addq %rax, %r15
  10105. rorxq $28, %r8, %rax
  10106. rorxq $34, %r8, %rcx
  10107. xorq %r14, %rdx
  10108. xorq %rax, %rcx
  10109. rorxq $39, %r8, %rax
  10110. addq %rdx, %r15
  10111. xorq %rcx, %rax
  10112. movq %r9, %rdx
  10113. addq %r15, %r11
  10114. xorq %r8, %rdx
  10115. andq %rdx, %rbx
  10116. addq %rax, %r15
  10117. xorq %r9, %rbx
  10118. rorxq $14, %r11, %rax
  10119. rorxq $18, %r11, %rcx
  10120. addq %rbx, %r15
  10121. addq 136(%rsi), %r14
  10122. movq %r12, %rbx
  10123. xorq %rax, %rcx
  10124. xorq %r13, %rbx
  10125. rorxq $41, %r11, %rax
  10126. xorq %rcx, %rax
  10127. andq %r11, %rbx
  10128. addq %rax, %r14
  10129. rorxq $28, %r15, %rax
  10130. rorxq $34, %r15, %rcx
  10131. xorq %r13, %rbx
  10132. xorq %rax, %rcx
  10133. rorxq $39, %r15, %rax
  10134. addq %rbx, %r14
  10135. xorq %rcx, %rax
  10136. movq %r8, %rbx
  10137. leaq (%r10,%r14,1), %r10
  10138. xorq %r15, %rbx
  10139. andq %rbx, %rdx
  10140. addq %rax, %r14
  10141. xorq %r8, %rdx
  10142. # rnd_all_2: 20-21
  10143. rorxq $14, %r10, %rax
  10144. rorxq $18, %r10, %rcx
  10145. addq %rdx, %r14
  10146. addq 160(%rsi), %r13
  10147. movq %r11, %rdx
  10148. xorq %rax, %rcx
  10149. xorq %r12, %rdx
  10150. rorxq $41, %r10, %rax
  10151. xorq %rcx, %rax
  10152. andq %r10, %rdx
  10153. addq %rax, %r13
  10154. rorxq $28, %r14, %rax
  10155. rorxq $34, %r14, %rcx
  10156. xorq %r12, %rdx
  10157. xorq %rax, %rcx
  10158. rorxq $39, %r14, %rax
  10159. addq %rdx, %r13
  10160. xorq %rcx, %rax
  10161. movq %r15, %rdx
  10162. addq %r13, %r9
  10163. xorq %r14, %rdx
  10164. andq %rdx, %rbx
  10165. addq %rax, %r13
  10166. xorq %r15, %rbx
  10167. rorxq $14, %r9, %rax
  10168. rorxq $18, %r9, %rcx
  10169. addq %rbx, %r13
  10170. addq 168(%rsi), %r12
  10171. movq %r10, %rbx
  10172. xorq %rax, %rcx
  10173. xorq %r11, %rbx
  10174. rorxq $41, %r9, %rax
  10175. xorq %rcx, %rax
  10176. andq %r9, %rbx
  10177. addq %rax, %r12
  10178. rorxq $28, %r13, %rax
  10179. rorxq $34, %r13, %rcx
  10180. xorq %r11, %rbx
  10181. xorq %rax, %rcx
  10182. rorxq $39, %r13, %rax
  10183. addq %rbx, %r12
  10184. xorq %rcx, %rax
  10185. movq %r14, %rbx
  10186. leaq (%r8,%r12,1), %r8
  10187. xorq %r13, %rbx
  10188. andq %rbx, %rdx
  10189. addq %rax, %r12
  10190. xorq %r14, %rdx
  10191. # rnd_all_2: 24-25
  10192. rorxq $14, %r8, %rax
  10193. rorxq $18, %r8, %rcx
  10194. addq %rdx, %r12
  10195. addq 192(%rsi), %r11
  10196. movq %r9, %rdx
  10197. xorq %rax, %rcx
  10198. xorq %r10, %rdx
  10199. rorxq $41, %r8, %rax
  10200. xorq %rcx, %rax
  10201. andq %r8, %rdx
  10202. addq %rax, %r11
  10203. rorxq $28, %r12, %rax
  10204. rorxq $34, %r12, %rcx
  10205. xorq %r10, %rdx
  10206. xorq %rax, %rcx
  10207. rorxq $39, %r12, %rax
  10208. addq %rdx, %r11
  10209. xorq %rcx, %rax
  10210. movq %r13, %rdx
  10211. addq %r11, %r15
  10212. xorq %r12, %rdx
  10213. andq %rdx, %rbx
  10214. addq %rax, %r11
  10215. xorq %r13, %rbx
  10216. rorxq $14, %r15, %rax
  10217. rorxq $18, %r15, %rcx
  10218. addq %rbx, %r11
  10219. addq 200(%rsi), %r10
  10220. movq %r8, %rbx
  10221. xorq %rax, %rcx
  10222. xorq %r9, %rbx
  10223. rorxq $41, %r15, %rax
  10224. xorq %rcx, %rax
  10225. andq %r15, %rbx
  10226. addq %rax, %r10
  10227. rorxq $28, %r11, %rax
  10228. rorxq $34, %r11, %rcx
  10229. xorq %r9, %rbx
  10230. xorq %rax, %rcx
  10231. rorxq $39, %r11, %rax
  10232. addq %rbx, %r10
  10233. xorq %rcx, %rax
  10234. movq %r12, %rbx
  10235. leaq (%r14,%r10,1), %r14
  10236. xorq %r11, %rbx
  10237. andq %rbx, %rdx
  10238. addq %rax, %r10
  10239. xorq %r12, %rdx
  10240. # rnd_all_2: 28-29
  10241. rorxq $14, %r14, %rax
  10242. rorxq $18, %r14, %rcx
  10243. addq %rdx, %r10
  10244. addq 224(%rsi), %r9
  10245. movq %r15, %rdx
  10246. xorq %rax, %rcx
  10247. xorq %r8, %rdx
  10248. rorxq $41, %r14, %rax
  10249. xorq %rcx, %rax
  10250. andq %r14, %rdx
  10251. addq %rax, %r9
  10252. rorxq $28, %r10, %rax
  10253. rorxq $34, %r10, %rcx
  10254. xorq %r8, %rdx
  10255. xorq %rax, %rcx
  10256. rorxq $39, %r10, %rax
  10257. addq %rdx, %r9
  10258. xorq %rcx, %rax
  10259. movq %r11, %rdx
  10260. addq %r9, %r13
  10261. xorq %r10, %rdx
  10262. andq %rdx, %rbx
  10263. addq %rax, %r9
  10264. xorq %r11, %rbx
  10265. rorxq $14, %r13, %rax
  10266. rorxq $18, %r13, %rcx
  10267. addq %rbx, %r9
  10268. addq 232(%rsi), %r8
  10269. movq %r14, %rbx
  10270. xorq %rax, %rcx
  10271. xorq %r15, %rbx
  10272. rorxq $41, %r13, %rax
  10273. xorq %rcx, %rax
  10274. andq %r13, %rbx
  10275. addq %rax, %r8
  10276. rorxq $28, %r9, %rax
  10277. rorxq $34, %r9, %rcx
  10278. xorq %r15, %rbx
  10279. xorq %rax, %rcx
  10280. rorxq $39, %r9, %rax
  10281. addq %rbx, %r8
  10282. xorq %rcx, %rax
  10283. movq %r10, %rbx
  10284. leaq (%r12,%r8,1), %r12
  10285. xorq %r9, %rbx
  10286. andq %rbx, %rdx
  10287. addq %rax, %r8
  10288. xorq %r10, %rdx
  10289. addq %rdx, %r8
  10290. subq $0x400, %rsi
  10291. addq (%rdi), %r8
  10292. addq 8(%rdi), %r9
  10293. addq 16(%rdi), %r10
  10294. addq 24(%rdi), %r11
  10295. addq 32(%rdi), %r12
  10296. addq 40(%rdi), %r13
  10297. addq 48(%rdi), %r14
  10298. addq 56(%rdi), %r15
  10299. movq %r8, (%rdi)
  10300. movq %r9, 8(%rdi)
  10301. movq %r10, 16(%rdi)
  10302. movq %r11, 24(%rdi)
  10303. movq %r12, 32(%rdi)
  10304. movq %r13, 40(%rdi)
  10305. movq %r14, 48(%rdi)
  10306. movq %r15, 56(%rdi)
  10307. movq %r9, %rbx
  10308. xorq %rdx, %rdx
  10309. xorq %r10, %rbx
  10310. movq $5, %rbp
  10311. L_sha512_len_avx2_rorx_tail:
  10312. # rnd_all_2: 2-3
  10313. rorxq $14, %r12, %rax
  10314. rorxq $18, %r12, %rcx
  10315. addq %rdx, %r8
  10316. addq 16(%rsi), %r15
  10317. movq %r13, %rdx
  10318. xorq %rax, %rcx
  10319. xorq %r14, %rdx
  10320. rorxq $41, %r12, %rax
  10321. xorq %rcx, %rax
  10322. andq %r12, %rdx
  10323. addq %rax, %r15
  10324. rorxq $28, %r8, %rax
  10325. rorxq $34, %r8, %rcx
  10326. xorq %r14, %rdx
  10327. xorq %rax, %rcx
  10328. rorxq $39, %r8, %rax
  10329. addq %rdx, %r15
  10330. xorq %rcx, %rax
  10331. movq %r9, %rdx
  10332. addq %r15, %r11
  10333. xorq %r8, %rdx
  10334. andq %rdx, %rbx
  10335. addq %rax, %r15
  10336. xorq %r9, %rbx
  10337. rorxq $14, %r11, %rax
  10338. rorxq $18, %r11, %rcx
  10339. addq %rbx, %r15
  10340. addq 24(%rsi), %r14
  10341. movq %r12, %rbx
  10342. xorq %rax, %rcx
  10343. xorq %r13, %rbx
  10344. rorxq $41, %r11, %rax
  10345. xorq %rcx, %rax
  10346. andq %r11, %rbx
  10347. addq %rax, %r14
  10348. rorxq $28, %r15, %rax
  10349. rorxq $34, %r15, %rcx
  10350. xorq %r13, %rbx
  10351. xorq %rax, %rcx
  10352. rorxq $39, %r15, %rax
  10353. addq %rbx, %r14
  10354. xorq %rcx, %rax
  10355. movq %r8, %rbx
  10356. leaq (%r10,%r14,1), %r10
  10357. xorq %r15, %rbx
  10358. andq %rbx, %rdx
  10359. addq %rax, %r14
  10360. xorq %r8, %rdx
  10361. # rnd_all_2: 6-7
  10362. rorxq $14, %r10, %rax
  10363. rorxq $18, %r10, %rcx
  10364. addq %rdx, %r14
  10365. addq 48(%rsi), %r13
  10366. movq %r11, %rdx
  10367. xorq %rax, %rcx
  10368. xorq %r12, %rdx
  10369. rorxq $41, %r10, %rax
  10370. xorq %rcx, %rax
  10371. andq %r10, %rdx
  10372. addq %rax, %r13
  10373. rorxq $28, %r14, %rax
  10374. rorxq $34, %r14, %rcx
  10375. xorq %r12, %rdx
  10376. xorq %rax, %rcx
  10377. rorxq $39, %r14, %rax
  10378. addq %rdx, %r13
  10379. xorq %rcx, %rax
  10380. movq %r15, %rdx
  10381. addq %r13, %r9
  10382. xorq %r14, %rdx
  10383. andq %rdx, %rbx
  10384. addq %rax, %r13
  10385. xorq %r15, %rbx
  10386. rorxq $14, %r9, %rax
  10387. rorxq $18, %r9, %rcx
  10388. addq %rbx, %r13
  10389. addq 56(%rsi), %r12
  10390. movq %r10, %rbx
  10391. xorq %rax, %rcx
  10392. xorq %r11, %rbx
  10393. rorxq $41, %r9, %rax
  10394. xorq %rcx, %rax
  10395. andq %r9, %rbx
  10396. addq %rax, %r12
  10397. rorxq $28, %r13, %rax
  10398. rorxq $34, %r13, %rcx
  10399. xorq %r11, %rbx
  10400. xorq %rax, %rcx
  10401. rorxq $39, %r13, %rax
  10402. addq %rbx, %r12
  10403. xorq %rcx, %rax
  10404. movq %r14, %rbx
  10405. leaq (%r8,%r12,1), %r8
  10406. xorq %r13, %rbx
  10407. andq %rbx, %rdx
  10408. addq %rax, %r12
  10409. xorq %r14, %rdx
  10410. # rnd_all_2: 10-11
  10411. rorxq $14, %r8, %rax
  10412. rorxq $18, %r8, %rcx
  10413. addq %rdx, %r12
  10414. addq 80(%rsi), %r11
  10415. movq %r9, %rdx
  10416. xorq %rax, %rcx
  10417. xorq %r10, %rdx
  10418. rorxq $41, %r8, %rax
  10419. xorq %rcx, %rax
  10420. andq %r8, %rdx
  10421. addq %rax, %r11
  10422. rorxq $28, %r12, %rax
  10423. rorxq $34, %r12, %rcx
  10424. xorq %r10, %rdx
  10425. xorq %rax, %rcx
  10426. rorxq $39, %r12, %rax
  10427. addq %rdx, %r11
  10428. xorq %rcx, %rax
  10429. movq %r13, %rdx
  10430. addq %r11, %r15
  10431. xorq %r12, %rdx
  10432. andq %rdx, %rbx
  10433. addq %rax, %r11
  10434. xorq %r13, %rbx
  10435. rorxq $14, %r15, %rax
  10436. rorxq $18, %r15, %rcx
  10437. addq %rbx, %r11
  10438. addq 88(%rsi), %r10
  10439. movq %r8, %rbx
  10440. xorq %rax, %rcx
  10441. xorq %r9, %rbx
  10442. rorxq $41, %r15, %rax
  10443. xorq %rcx, %rax
  10444. andq %r15, %rbx
  10445. addq %rax, %r10
  10446. rorxq $28, %r11, %rax
  10447. rorxq $34, %r11, %rcx
  10448. xorq %r9, %rbx
  10449. xorq %rax, %rcx
  10450. rorxq $39, %r11, %rax
  10451. addq %rbx, %r10
  10452. xorq %rcx, %rax
  10453. movq %r12, %rbx
  10454. leaq (%r14,%r10,1), %r14
  10455. xorq %r11, %rbx
  10456. andq %rbx, %rdx
  10457. addq %rax, %r10
  10458. xorq %r12, %rdx
  10459. # rnd_all_2: 14-15
  10460. rorxq $14, %r14, %rax
  10461. rorxq $18, %r14, %rcx
  10462. addq %rdx, %r10
  10463. addq 112(%rsi), %r9
  10464. movq %r15, %rdx
  10465. xorq %rax, %rcx
  10466. xorq %r8, %rdx
  10467. rorxq $41, %r14, %rax
  10468. xorq %rcx, %rax
  10469. andq %r14, %rdx
  10470. addq %rax, %r9
  10471. rorxq $28, %r10, %rax
  10472. rorxq $34, %r10, %rcx
  10473. xorq %r8, %rdx
  10474. xorq %rax, %rcx
  10475. rorxq $39, %r10, %rax
  10476. addq %rdx, %r9
  10477. xorq %rcx, %rax
  10478. movq %r11, %rdx
  10479. addq %r9, %r13
  10480. xorq %r10, %rdx
  10481. andq %rdx, %rbx
  10482. addq %rax, %r9
  10483. xorq %r11, %rbx
  10484. rorxq $14, %r13, %rax
  10485. rorxq $18, %r13, %rcx
  10486. addq %rbx, %r9
  10487. addq 120(%rsi), %r8
  10488. movq %r14, %rbx
  10489. xorq %rax, %rcx
  10490. xorq %r15, %rbx
  10491. rorxq $41, %r13, %rax
  10492. xorq %rcx, %rax
  10493. andq %r13, %rbx
  10494. addq %rax, %r8
  10495. rorxq $28, %r9, %rax
  10496. rorxq $34, %r9, %rcx
  10497. xorq %r15, %rbx
  10498. xorq %rax, %rcx
  10499. rorxq $39, %r9, %rax
  10500. addq %rbx, %r8
  10501. xorq %rcx, %rax
  10502. movq %r10, %rbx
  10503. leaq (%r12,%r8,1), %r12
  10504. xorq %r9, %rbx
  10505. andq %rbx, %rdx
  10506. addq %rax, %r8
  10507. xorq %r10, %rdx
  10508. # rnd_all_2: 18-19
  10509. rorxq $14, %r12, %rax
  10510. rorxq $18, %r12, %rcx
  10511. addq %rdx, %r8
  10512. addq 144(%rsi), %r15
  10513. movq %r13, %rdx
  10514. xorq %rax, %rcx
  10515. xorq %r14, %rdx
  10516. rorxq $41, %r12, %rax
  10517. xorq %rcx, %rax
  10518. andq %r12, %rdx
  10519. addq %rax, %r15
  10520. rorxq $28, %r8, %rax
  10521. rorxq $34, %r8, %rcx
  10522. xorq %r14, %rdx
  10523. xorq %rax, %rcx
  10524. rorxq $39, %r8, %rax
  10525. addq %rdx, %r15
  10526. xorq %rcx, %rax
  10527. movq %r9, %rdx
  10528. addq %r15, %r11
  10529. xorq %r8, %rdx
  10530. andq %rdx, %rbx
  10531. addq %rax, %r15
  10532. xorq %r9, %rbx
  10533. rorxq $14, %r11, %rax
  10534. rorxq $18, %r11, %rcx
  10535. addq %rbx, %r15
  10536. addq 152(%rsi), %r14
  10537. movq %r12, %rbx
  10538. xorq %rax, %rcx
  10539. xorq %r13, %rbx
  10540. rorxq $41, %r11, %rax
  10541. xorq %rcx, %rax
  10542. andq %r11, %rbx
  10543. addq %rax, %r14
  10544. rorxq $28, %r15, %rax
  10545. rorxq $34, %r15, %rcx
  10546. xorq %r13, %rbx
  10547. xorq %rax, %rcx
  10548. rorxq $39, %r15, %rax
  10549. addq %rbx, %r14
  10550. xorq %rcx, %rax
  10551. movq %r8, %rbx
  10552. leaq (%r10,%r14,1), %r10
  10553. xorq %r15, %rbx
  10554. andq %rbx, %rdx
  10555. addq %rax, %r14
  10556. xorq %r8, %rdx
  10557. # rnd_all_2: 22-23
  10558. rorxq $14, %r10, %rax
  10559. rorxq $18, %r10, %rcx
  10560. addq %rdx, %r14
  10561. addq 176(%rsi), %r13
  10562. movq %r11, %rdx
  10563. xorq %rax, %rcx
  10564. xorq %r12, %rdx
  10565. rorxq $41, %r10, %rax
  10566. xorq %rcx, %rax
  10567. andq %r10, %rdx
  10568. addq %rax, %r13
  10569. rorxq $28, %r14, %rax
  10570. rorxq $34, %r14, %rcx
  10571. xorq %r12, %rdx
  10572. xorq %rax, %rcx
  10573. rorxq $39, %r14, %rax
  10574. addq %rdx, %r13
  10575. xorq %rcx, %rax
  10576. movq %r15, %rdx
  10577. addq %r13, %r9
  10578. xorq %r14, %rdx
  10579. andq %rdx, %rbx
  10580. addq %rax, %r13
  10581. xorq %r15, %rbx
  10582. rorxq $14, %r9, %rax
  10583. rorxq $18, %r9, %rcx
  10584. addq %rbx, %r13
  10585. addq 184(%rsi), %r12
  10586. movq %r10, %rbx
  10587. xorq %rax, %rcx
  10588. xorq %r11, %rbx
  10589. rorxq $41, %r9, %rax
  10590. xorq %rcx, %rax
  10591. andq %r9, %rbx
  10592. addq %rax, %r12
  10593. rorxq $28, %r13, %rax
  10594. rorxq $34, %r13, %rcx
  10595. xorq %r11, %rbx
  10596. xorq %rax, %rcx
  10597. rorxq $39, %r13, %rax
  10598. addq %rbx, %r12
  10599. xorq %rcx, %rax
  10600. movq %r14, %rbx
  10601. leaq (%r8,%r12,1), %r8
  10602. xorq %r13, %rbx
  10603. andq %rbx, %rdx
  10604. addq %rax, %r12
  10605. xorq %r14, %rdx
  10606. # rnd_all_2: 26-27
  10607. rorxq $14, %r8, %rax
  10608. rorxq $18, %r8, %rcx
  10609. addq %rdx, %r12
  10610. addq 208(%rsi), %r11
  10611. movq %r9, %rdx
  10612. xorq %rax, %rcx
  10613. xorq %r10, %rdx
  10614. rorxq $41, %r8, %rax
  10615. xorq %rcx, %rax
  10616. andq %r8, %rdx
  10617. addq %rax, %r11
  10618. rorxq $28, %r12, %rax
  10619. rorxq $34, %r12, %rcx
  10620. xorq %r10, %rdx
  10621. xorq %rax, %rcx
  10622. rorxq $39, %r12, %rax
  10623. addq %rdx, %r11
  10624. xorq %rcx, %rax
  10625. movq %r13, %rdx
  10626. addq %r11, %r15
  10627. xorq %r12, %rdx
  10628. andq %rdx, %rbx
  10629. addq %rax, %r11
  10630. xorq %r13, %rbx
  10631. rorxq $14, %r15, %rax
  10632. rorxq $18, %r15, %rcx
  10633. addq %rbx, %r11
  10634. addq 216(%rsi), %r10
  10635. movq %r8, %rbx
  10636. xorq %rax, %rcx
  10637. xorq %r9, %rbx
  10638. rorxq $41, %r15, %rax
  10639. xorq %rcx, %rax
  10640. andq %r15, %rbx
  10641. addq %rax, %r10
  10642. rorxq $28, %r11, %rax
  10643. rorxq $34, %r11, %rcx
  10644. xorq %r9, %rbx
  10645. xorq %rax, %rcx
  10646. rorxq $39, %r11, %rax
  10647. addq %rbx, %r10
  10648. xorq %rcx, %rax
  10649. movq %r12, %rbx
  10650. leaq (%r14,%r10,1), %r14
  10651. xorq %r11, %rbx
  10652. andq %rbx, %rdx
  10653. addq %rax, %r10
  10654. xorq %r12, %rdx
  10655. # rnd_all_2: 30-31
  10656. rorxq $14, %r14, %rax
  10657. rorxq $18, %r14, %rcx
  10658. addq %rdx, %r10
  10659. addq 240(%rsi), %r9
  10660. movq %r15, %rdx
  10661. xorq %rax, %rcx
  10662. xorq %r8, %rdx
  10663. rorxq $41, %r14, %rax
  10664. xorq %rcx, %rax
  10665. andq %r14, %rdx
  10666. addq %rax, %r9
  10667. rorxq $28, %r10, %rax
  10668. rorxq $34, %r10, %rcx
  10669. xorq %r8, %rdx
  10670. xorq %rax, %rcx
  10671. rorxq $39, %r10, %rax
  10672. addq %rdx, %r9
  10673. xorq %rcx, %rax
  10674. movq %r11, %rdx
  10675. addq %r9, %r13
  10676. xorq %r10, %rdx
  10677. andq %rdx, %rbx
  10678. addq %rax, %r9
  10679. xorq %r11, %rbx
  10680. rorxq $14, %r13, %rax
  10681. rorxq $18, %r13, %rcx
  10682. addq %rbx, %r9
  10683. addq 248(%rsi), %r8
  10684. movq %r14, %rbx
  10685. xorq %rax, %rcx
  10686. xorq %r15, %rbx
  10687. rorxq $41, %r13, %rax
  10688. xorq %rcx, %rax
  10689. andq %r13, %rbx
  10690. addq %rax, %r8
  10691. rorxq $28, %r9, %rax
  10692. rorxq $34, %r9, %rcx
  10693. xorq %r15, %rbx
  10694. xorq %rax, %rcx
  10695. rorxq $39, %r9, %rax
  10696. addq %rbx, %r8
  10697. xorq %rcx, %rax
  10698. movq %r10, %rbx
  10699. leaq (%r12,%r8,1), %r12
  10700. xorq %r9, %rbx
  10701. andq %rbx, %rdx
  10702. addq %rax, %r8
  10703. xorq %r10, %rdx
  10704. addq $0x100, %rsi
  10705. subq $0x01, %rbp
  10706. jnz L_sha512_len_avx2_rorx_tail
  10707. addq %rdx, %r8
  10708. addq (%rdi), %r8
  10709. addq 8(%rdi), %r9
  10710. addq 16(%rdi), %r10
  10711. addq 24(%rdi), %r11
  10712. addq 32(%rdi), %r12
  10713. addq 40(%rdi), %r13
  10714. addq 48(%rdi), %r14
  10715. addq 56(%rdi), %r15
  10716. movq 224(%rdi), %rax
  10717. addq $0x100, %rax
  10718. subl $0x100, 1344(%rsp)
  10719. movq %rax, 224(%rdi)
  10720. movq %r8, (%rdi)
  10721. movq %r9, 8(%rdi)
  10722. movq %r10, 16(%rdi)
  10723. movq %r11, 24(%rdi)
  10724. movq %r12, 32(%rdi)
  10725. movq %r13, 40(%rdi)
  10726. movq %r14, 48(%rdi)
  10727. movq %r15, 56(%rdi)
  10728. jnz L_sha512_len_avx2_rorx_begin
  10729. addq $0x548, %rsp
  10730. L_sha512_len_avx2_rorx_done:
  10731. xorq %rax, %rax
  10732. vzeroupper
  10733. popq %rbp
  10734. popq %r15
  10735. popq %r14
  10736. popq %r13
  10737. popq %r12
  10738. popq %rbx
  10739. repz retq
  10740. #ifndef __APPLE__
  10741. .size Transform_Sha512_AVX2_RORX_Len,.-Transform_Sha512_AVX2_RORX_Len
  10742. #endif /* __APPLE__ */
  10743. #endif /* HAVE_INTEL_AVX2 */
  10744. #if defined(__linux__) && defined(__ELF__)
  10745. .section .note.GNU-stack,"",%progbits
  10746. #endif