sha512_asm.S 283 KB

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