sha512_asm.S 282 KB

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