sha512-x86_64.masm 97 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670
  1. OPTION DOTNAME
  2. .text$ SEGMENT ALIGN(256) 'CODE'
  3. EXTERN OPENSSL_ia32cap_P:NEAR
  4. PUBLIC sha512_block_data_order
  5. ALIGN 16
  6. sha512_block_data_order PROC PUBLIC
  7. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  8. mov QWORD PTR[16+rsp],rsi
  9. mov rax,rsp
  10. $L$SEH_begin_sha512_block_data_order::
  11. mov rdi,rcx
  12. mov rsi,rdx
  13. mov rdx,r8
  14. lea r11,QWORD PTR[OPENSSL_ia32cap_P]
  15. mov r9d,DWORD PTR[r11]
  16. mov r10d,DWORD PTR[4+r11]
  17. mov r11d,DWORD PTR[8+r11]
  18. test r10d,2048
  19. jnz $L$xop_shortcut
  20. and r11d,296
  21. cmp r11d,296
  22. je $L$avx2_shortcut
  23. and r9d,1073741824
  24. and r10d,268435968
  25. or r10d,r9d
  26. cmp r10d,1342177792
  27. je $L$avx_shortcut
  28. mov rax,rsp
  29. push rbx
  30. push rbp
  31. push r12
  32. push r13
  33. push r14
  34. push r15
  35. shl rdx,4
  36. sub rsp,16*8+4*8
  37. lea rdx,QWORD PTR[rdx*8+rsi]
  38. and rsp,-64
  39. mov QWORD PTR[((128+0))+rsp],rdi
  40. mov QWORD PTR[((128+8))+rsp],rsi
  41. mov QWORD PTR[((128+16))+rsp],rdx
  42. mov QWORD PTR[152+rsp],rax
  43. $L$prologue::
  44. mov rax,QWORD PTR[rdi]
  45. mov rbx,QWORD PTR[8+rdi]
  46. mov rcx,QWORD PTR[16+rdi]
  47. mov rdx,QWORD PTR[24+rdi]
  48. mov r8,QWORD PTR[32+rdi]
  49. mov r9,QWORD PTR[40+rdi]
  50. mov r10,QWORD PTR[48+rdi]
  51. mov r11,QWORD PTR[56+rdi]
  52. jmp $L$loop
  53. ALIGN 16
  54. $L$loop::
  55. mov rdi,rbx
  56. lea rbp,QWORD PTR[K512]
  57. xor rdi,rcx
  58. mov r12,QWORD PTR[rsi]
  59. mov r13,r8
  60. mov r14,rax
  61. bswap r12
  62. ror r13,23
  63. mov r15,r9
  64. xor r13,r8
  65. ror r14,5
  66. xor r15,r10
  67. mov QWORD PTR[rsp],r12
  68. xor r14,rax
  69. and r15,r8
  70. ror r13,4
  71. add r12,r11
  72. xor r15,r10
  73. ror r14,6
  74. xor r13,r8
  75. add r12,r15
  76. mov r15,rax
  77. add r12,QWORD PTR[rbp]
  78. xor r14,rax
  79. xor r15,rbx
  80. ror r13,14
  81. mov r11,rbx
  82. and rdi,r15
  83. ror r14,28
  84. add r12,r13
  85. xor r11,rdi
  86. add rdx,r12
  87. add r11,r12
  88. lea rbp,QWORD PTR[8+rbp]
  89. add r11,r14
  90. mov r12,QWORD PTR[8+rsi]
  91. mov r13,rdx
  92. mov r14,r11
  93. bswap r12
  94. ror r13,23
  95. mov rdi,r8
  96. xor r13,rdx
  97. ror r14,5
  98. xor rdi,r9
  99. mov QWORD PTR[8+rsp],r12
  100. xor r14,r11
  101. and rdi,rdx
  102. ror r13,4
  103. add r12,r10
  104. xor rdi,r9
  105. ror r14,6
  106. xor r13,rdx
  107. add r12,rdi
  108. mov rdi,r11
  109. add r12,QWORD PTR[rbp]
  110. xor r14,r11
  111. xor rdi,rax
  112. ror r13,14
  113. mov r10,rax
  114. and r15,rdi
  115. ror r14,28
  116. add r12,r13
  117. xor r10,r15
  118. add rcx,r12
  119. add r10,r12
  120. lea rbp,QWORD PTR[24+rbp]
  121. add r10,r14
  122. mov r12,QWORD PTR[16+rsi]
  123. mov r13,rcx
  124. mov r14,r10
  125. bswap r12
  126. ror r13,23
  127. mov r15,rdx
  128. xor r13,rcx
  129. ror r14,5
  130. xor r15,r8
  131. mov QWORD PTR[16+rsp],r12
  132. xor r14,r10
  133. and r15,rcx
  134. ror r13,4
  135. add r12,r9
  136. xor r15,r8
  137. ror r14,6
  138. xor r13,rcx
  139. add r12,r15
  140. mov r15,r10
  141. add r12,QWORD PTR[rbp]
  142. xor r14,r10
  143. xor r15,r11
  144. ror r13,14
  145. mov r9,r11
  146. and rdi,r15
  147. ror r14,28
  148. add r12,r13
  149. xor r9,rdi
  150. add rbx,r12
  151. add r9,r12
  152. lea rbp,QWORD PTR[8+rbp]
  153. add r9,r14
  154. mov r12,QWORD PTR[24+rsi]
  155. mov r13,rbx
  156. mov r14,r9
  157. bswap r12
  158. ror r13,23
  159. mov rdi,rcx
  160. xor r13,rbx
  161. ror r14,5
  162. xor rdi,rdx
  163. mov QWORD PTR[24+rsp],r12
  164. xor r14,r9
  165. and rdi,rbx
  166. ror r13,4
  167. add r12,r8
  168. xor rdi,rdx
  169. ror r14,6
  170. xor r13,rbx
  171. add r12,rdi
  172. mov rdi,r9
  173. add r12,QWORD PTR[rbp]
  174. xor r14,r9
  175. xor rdi,r10
  176. ror r13,14
  177. mov r8,r10
  178. and r15,rdi
  179. ror r14,28
  180. add r12,r13
  181. xor r8,r15
  182. add rax,r12
  183. add r8,r12
  184. lea rbp,QWORD PTR[24+rbp]
  185. add r8,r14
  186. mov r12,QWORD PTR[32+rsi]
  187. mov r13,rax
  188. mov r14,r8
  189. bswap r12
  190. ror r13,23
  191. mov r15,rbx
  192. xor r13,rax
  193. ror r14,5
  194. xor r15,rcx
  195. mov QWORD PTR[32+rsp],r12
  196. xor r14,r8
  197. and r15,rax
  198. ror r13,4
  199. add r12,rdx
  200. xor r15,rcx
  201. ror r14,6
  202. xor r13,rax
  203. add r12,r15
  204. mov r15,r8
  205. add r12,QWORD PTR[rbp]
  206. xor r14,r8
  207. xor r15,r9
  208. ror r13,14
  209. mov rdx,r9
  210. and rdi,r15
  211. ror r14,28
  212. add r12,r13
  213. xor rdx,rdi
  214. add r11,r12
  215. add rdx,r12
  216. lea rbp,QWORD PTR[8+rbp]
  217. add rdx,r14
  218. mov r12,QWORD PTR[40+rsi]
  219. mov r13,r11
  220. mov r14,rdx
  221. bswap r12
  222. ror r13,23
  223. mov rdi,rax
  224. xor r13,r11
  225. ror r14,5
  226. xor rdi,rbx
  227. mov QWORD PTR[40+rsp],r12
  228. xor r14,rdx
  229. and rdi,r11
  230. ror r13,4
  231. add r12,rcx
  232. xor rdi,rbx
  233. ror r14,6
  234. xor r13,r11
  235. add r12,rdi
  236. mov rdi,rdx
  237. add r12,QWORD PTR[rbp]
  238. xor r14,rdx
  239. xor rdi,r8
  240. ror r13,14
  241. mov rcx,r8
  242. and r15,rdi
  243. ror r14,28
  244. add r12,r13
  245. xor rcx,r15
  246. add r10,r12
  247. add rcx,r12
  248. lea rbp,QWORD PTR[24+rbp]
  249. add rcx,r14
  250. mov r12,QWORD PTR[48+rsi]
  251. mov r13,r10
  252. mov r14,rcx
  253. bswap r12
  254. ror r13,23
  255. mov r15,r11
  256. xor r13,r10
  257. ror r14,5
  258. xor r15,rax
  259. mov QWORD PTR[48+rsp],r12
  260. xor r14,rcx
  261. and r15,r10
  262. ror r13,4
  263. add r12,rbx
  264. xor r15,rax
  265. ror r14,6
  266. xor r13,r10
  267. add r12,r15
  268. mov r15,rcx
  269. add r12,QWORD PTR[rbp]
  270. xor r14,rcx
  271. xor r15,rdx
  272. ror r13,14
  273. mov rbx,rdx
  274. and rdi,r15
  275. ror r14,28
  276. add r12,r13
  277. xor rbx,rdi
  278. add r9,r12
  279. add rbx,r12
  280. lea rbp,QWORD PTR[8+rbp]
  281. add rbx,r14
  282. mov r12,QWORD PTR[56+rsi]
  283. mov r13,r9
  284. mov r14,rbx
  285. bswap r12
  286. ror r13,23
  287. mov rdi,r10
  288. xor r13,r9
  289. ror r14,5
  290. xor rdi,r11
  291. mov QWORD PTR[56+rsp],r12
  292. xor r14,rbx
  293. and rdi,r9
  294. ror r13,4
  295. add r12,rax
  296. xor rdi,r11
  297. ror r14,6
  298. xor r13,r9
  299. add r12,rdi
  300. mov rdi,rbx
  301. add r12,QWORD PTR[rbp]
  302. xor r14,rbx
  303. xor rdi,rcx
  304. ror r13,14
  305. mov rax,rcx
  306. and r15,rdi
  307. ror r14,28
  308. add r12,r13
  309. xor rax,r15
  310. add r8,r12
  311. add rax,r12
  312. lea rbp,QWORD PTR[24+rbp]
  313. add rax,r14
  314. mov r12,QWORD PTR[64+rsi]
  315. mov r13,r8
  316. mov r14,rax
  317. bswap r12
  318. ror r13,23
  319. mov r15,r9
  320. xor r13,r8
  321. ror r14,5
  322. xor r15,r10
  323. mov QWORD PTR[64+rsp],r12
  324. xor r14,rax
  325. and r15,r8
  326. ror r13,4
  327. add r12,r11
  328. xor r15,r10
  329. ror r14,6
  330. xor r13,r8
  331. add r12,r15
  332. mov r15,rax
  333. add r12,QWORD PTR[rbp]
  334. xor r14,rax
  335. xor r15,rbx
  336. ror r13,14
  337. mov r11,rbx
  338. and rdi,r15
  339. ror r14,28
  340. add r12,r13
  341. xor r11,rdi
  342. add rdx,r12
  343. add r11,r12
  344. lea rbp,QWORD PTR[8+rbp]
  345. add r11,r14
  346. mov r12,QWORD PTR[72+rsi]
  347. mov r13,rdx
  348. mov r14,r11
  349. bswap r12
  350. ror r13,23
  351. mov rdi,r8
  352. xor r13,rdx
  353. ror r14,5
  354. xor rdi,r9
  355. mov QWORD PTR[72+rsp],r12
  356. xor r14,r11
  357. and rdi,rdx
  358. ror r13,4
  359. add r12,r10
  360. xor rdi,r9
  361. ror r14,6
  362. xor r13,rdx
  363. add r12,rdi
  364. mov rdi,r11
  365. add r12,QWORD PTR[rbp]
  366. xor r14,r11
  367. xor rdi,rax
  368. ror r13,14
  369. mov r10,rax
  370. and r15,rdi
  371. ror r14,28
  372. add r12,r13
  373. xor r10,r15
  374. add rcx,r12
  375. add r10,r12
  376. lea rbp,QWORD PTR[24+rbp]
  377. add r10,r14
  378. mov r12,QWORD PTR[80+rsi]
  379. mov r13,rcx
  380. mov r14,r10
  381. bswap r12
  382. ror r13,23
  383. mov r15,rdx
  384. xor r13,rcx
  385. ror r14,5
  386. xor r15,r8
  387. mov QWORD PTR[80+rsp],r12
  388. xor r14,r10
  389. and r15,rcx
  390. ror r13,4
  391. add r12,r9
  392. xor r15,r8
  393. ror r14,6
  394. xor r13,rcx
  395. add r12,r15
  396. mov r15,r10
  397. add r12,QWORD PTR[rbp]
  398. xor r14,r10
  399. xor r15,r11
  400. ror r13,14
  401. mov r9,r11
  402. and rdi,r15
  403. ror r14,28
  404. add r12,r13
  405. xor r9,rdi
  406. add rbx,r12
  407. add r9,r12
  408. lea rbp,QWORD PTR[8+rbp]
  409. add r9,r14
  410. mov r12,QWORD PTR[88+rsi]
  411. mov r13,rbx
  412. mov r14,r9
  413. bswap r12
  414. ror r13,23
  415. mov rdi,rcx
  416. xor r13,rbx
  417. ror r14,5
  418. xor rdi,rdx
  419. mov QWORD PTR[88+rsp],r12
  420. xor r14,r9
  421. and rdi,rbx
  422. ror r13,4
  423. add r12,r8
  424. xor rdi,rdx
  425. ror r14,6
  426. xor r13,rbx
  427. add r12,rdi
  428. mov rdi,r9
  429. add r12,QWORD PTR[rbp]
  430. xor r14,r9
  431. xor rdi,r10
  432. ror r13,14
  433. mov r8,r10
  434. and r15,rdi
  435. ror r14,28
  436. add r12,r13
  437. xor r8,r15
  438. add rax,r12
  439. add r8,r12
  440. lea rbp,QWORD PTR[24+rbp]
  441. add r8,r14
  442. mov r12,QWORD PTR[96+rsi]
  443. mov r13,rax
  444. mov r14,r8
  445. bswap r12
  446. ror r13,23
  447. mov r15,rbx
  448. xor r13,rax
  449. ror r14,5
  450. xor r15,rcx
  451. mov QWORD PTR[96+rsp],r12
  452. xor r14,r8
  453. and r15,rax
  454. ror r13,4
  455. add r12,rdx
  456. xor r15,rcx
  457. ror r14,6
  458. xor r13,rax
  459. add r12,r15
  460. mov r15,r8
  461. add r12,QWORD PTR[rbp]
  462. xor r14,r8
  463. xor r15,r9
  464. ror r13,14
  465. mov rdx,r9
  466. and rdi,r15
  467. ror r14,28
  468. add r12,r13
  469. xor rdx,rdi
  470. add r11,r12
  471. add rdx,r12
  472. lea rbp,QWORD PTR[8+rbp]
  473. add rdx,r14
  474. mov r12,QWORD PTR[104+rsi]
  475. mov r13,r11
  476. mov r14,rdx
  477. bswap r12
  478. ror r13,23
  479. mov rdi,rax
  480. xor r13,r11
  481. ror r14,5
  482. xor rdi,rbx
  483. mov QWORD PTR[104+rsp],r12
  484. xor r14,rdx
  485. and rdi,r11
  486. ror r13,4
  487. add r12,rcx
  488. xor rdi,rbx
  489. ror r14,6
  490. xor r13,r11
  491. add r12,rdi
  492. mov rdi,rdx
  493. add r12,QWORD PTR[rbp]
  494. xor r14,rdx
  495. xor rdi,r8
  496. ror r13,14
  497. mov rcx,r8
  498. and r15,rdi
  499. ror r14,28
  500. add r12,r13
  501. xor rcx,r15
  502. add r10,r12
  503. add rcx,r12
  504. lea rbp,QWORD PTR[24+rbp]
  505. add rcx,r14
  506. mov r12,QWORD PTR[112+rsi]
  507. mov r13,r10
  508. mov r14,rcx
  509. bswap r12
  510. ror r13,23
  511. mov r15,r11
  512. xor r13,r10
  513. ror r14,5
  514. xor r15,rax
  515. mov QWORD PTR[112+rsp],r12
  516. xor r14,rcx
  517. and r15,r10
  518. ror r13,4
  519. add r12,rbx
  520. xor r15,rax
  521. ror r14,6
  522. xor r13,r10
  523. add r12,r15
  524. mov r15,rcx
  525. add r12,QWORD PTR[rbp]
  526. xor r14,rcx
  527. xor r15,rdx
  528. ror r13,14
  529. mov rbx,rdx
  530. and rdi,r15
  531. ror r14,28
  532. add r12,r13
  533. xor rbx,rdi
  534. add r9,r12
  535. add rbx,r12
  536. lea rbp,QWORD PTR[8+rbp]
  537. add rbx,r14
  538. mov r12,QWORD PTR[120+rsi]
  539. mov r13,r9
  540. mov r14,rbx
  541. bswap r12
  542. ror r13,23
  543. mov rdi,r10
  544. xor r13,r9
  545. ror r14,5
  546. xor rdi,r11
  547. mov QWORD PTR[120+rsp],r12
  548. xor r14,rbx
  549. and rdi,r9
  550. ror r13,4
  551. add r12,rax
  552. xor rdi,r11
  553. ror r14,6
  554. xor r13,r9
  555. add r12,rdi
  556. mov rdi,rbx
  557. add r12,QWORD PTR[rbp]
  558. xor r14,rbx
  559. xor rdi,rcx
  560. ror r13,14
  561. mov rax,rcx
  562. and r15,rdi
  563. ror r14,28
  564. add r12,r13
  565. xor rax,r15
  566. add r8,r12
  567. add rax,r12
  568. lea rbp,QWORD PTR[24+rbp]
  569. jmp $L$rounds_16_xx
  570. ALIGN 16
  571. $L$rounds_16_xx::
  572. mov r13,QWORD PTR[8+rsp]
  573. mov r15,QWORD PTR[112+rsp]
  574. mov r12,r13
  575. ror r13,7
  576. add rax,r14
  577. mov r14,r15
  578. ror r15,42
  579. xor r13,r12
  580. shr r12,7
  581. ror r13,1
  582. xor r15,r14
  583. shr r14,6
  584. ror r15,19
  585. xor r12,r13
  586. xor r15,r14
  587. add r12,QWORD PTR[72+rsp]
  588. add r12,QWORD PTR[rsp]
  589. mov r13,r8
  590. add r12,r15
  591. mov r14,rax
  592. ror r13,23
  593. mov r15,r9
  594. xor r13,r8
  595. ror r14,5
  596. xor r15,r10
  597. mov QWORD PTR[rsp],r12
  598. xor r14,rax
  599. and r15,r8
  600. ror r13,4
  601. add r12,r11
  602. xor r15,r10
  603. ror r14,6
  604. xor r13,r8
  605. add r12,r15
  606. mov r15,rax
  607. add r12,QWORD PTR[rbp]
  608. xor r14,rax
  609. xor r15,rbx
  610. ror r13,14
  611. mov r11,rbx
  612. and rdi,r15
  613. ror r14,28
  614. add r12,r13
  615. xor r11,rdi
  616. add rdx,r12
  617. add r11,r12
  618. lea rbp,QWORD PTR[8+rbp]
  619. mov r13,QWORD PTR[16+rsp]
  620. mov rdi,QWORD PTR[120+rsp]
  621. mov r12,r13
  622. ror r13,7
  623. add r11,r14
  624. mov r14,rdi
  625. ror rdi,42
  626. xor r13,r12
  627. shr r12,7
  628. ror r13,1
  629. xor rdi,r14
  630. shr r14,6
  631. ror rdi,19
  632. xor r12,r13
  633. xor rdi,r14
  634. add r12,QWORD PTR[80+rsp]
  635. add r12,QWORD PTR[8+rsp]
  636. mov r13,rdx
  637. add r12,rdi
  638. mov r14,r11
  639. ror r13,23
  640. mov rdi,r8
  641. xor r13,rdx
  642. ror r14,5
  643. xor rdi,r9
  644. mov QWORD PTR[8+rsp],r12
  645. xor r14,r11
  646. and rdi,rdx
  647. ror r13,4
  648. add r12,r10
  649. xor rdi,r9
  650. ror r14,6
  651. xor r13,rdx
  652. add r12,rdi
  653. mov rdi,r11
  654. add r12,QWORD PTR[rbp]
  655. xor r14,r11
  656. xor rdi,rax
  657. ror r13,14
  658. mov r10,rax
  659. and r15,rdi
  660. ror r14,28
  661. add r12,r13
  662. xor r10,r15
  663. add rcx,r12
  664. add r10,r12
  665. lea rbp,QWORD PTR[24+rbp]
  666. mov r13,QWORD PTR[24+rsp]
  667. mov r15,QWORD PTR[rsp]
  668. mov r12,r13
  669. ror r13,7
  670. add r10,r14
  671. mov r14,r15
  672. ror r15,42
  673. xor r13,r12
  674. shr r12,7
  675. ror r13,1
  676. xor r15,r14
  677. shr r14,6
  678. ror r15,19
  679. xor r12,r13
  680. xor r15,r14
  681. add r12,QWORD PTR[88+rsp]
  682. add r12,QWORD PTR[16+rsp]
  683. mov r13,rcx
  684. add r12,r15
  685. mov r14,r10
  686. ror r13,23
  687. mov r15,rdx
  688. xor r13,rcx
  689. ror r14,5
  690. xor r15,r8
  691. mov QWORD PTR[16+rsp],r12
  692. xor r14,r10
  693. and r15,rcx
  694. ror r13,4
  695. add r12,r9
  696. xor r15,r8
  697. ror r14,6
  698. xor r13,rcx
  699. add r12,r15
  700. mov r15,r10
  701. add r12,QWORD PTR[rbp]
  702. xor r14,r10
  703. xor r15,r11
  704. ror r13,14
  705. mov r9,r11
  706. and rdi,r15
  707. ror r14,28
  708. add r12,r13
  709. xor r9,rdi
  710. add rbx,r12
  711. add r9,r12
  712. lea rbp,QWORD PTR[8+rbp]
  713. mov r13,QWORD PTR[32+rsp]
  714. mov rdi,QWORD PTR[8+rsp]
  715. mov r12,r13
  716. ror r13,7
  717. add r9,r14
  718. mov r14,rdi
  719. ror rdi,42
  720. xor r13,r12
  721. shr r12,7
  722. ror r13,1
  723. xor rdi,r14
  724. shr r14,6
  725. ror rdi,19
  726. xor r12,r13
  727. xor rdi,r14
  728. add r12,QWORD PTR[96+rsp]
  729. add r12,QWORD PTR[24+rsp]
  730. mov r13,rbx
  731. add r12,rdi
  732. mov r14,r9
  733. ror r13,23
  734. mov rdi,rcx
  735. xor r13,rbx
  736. ror r14,5
  737. xor rdi,rdx
  738. mov QWORD PTR[24+rsp],r12
  739. xor r14,r9
  740. and rdi,rbx
  741. ror r13,4
  742. add r12,r8
  743. xor rdi,rdx
  744. ror r14,6
  745. xor r13,rbx
  746. add r12,rdi
  747. mov rdi,r9
  748. add r12,QWORD PTR[rbp]
  749. xor r14,r9
  750. xor rdi,r10
  751. ror r13,14
  752. mov r8,r10
  753. and r15,rdi
  754. ror r14,28
  755. add r12,r13
  756. xor r8,r15
  757. add rax,r12
  758. add r8,r12
  759. lea rbp,QWORD PTR[24+rbp]
  760. mov r13,QWORD PTR[40+rsp]
  761. mov r15,QWORD PTR[16+rsp]
  762. mov r12,r13
  763. ror r13,7
  764. add r8,r14
  765. mov r14,r15
  766. ror r15,42
  767. xor r13,r12
  768. shr r12,7
  769. ror r13,1
  770. xor r15,r14
  771. shr r14,6
  772. ror r15,19
  773. xor r12,r13
  774. xor r15,r14
  775. add r12,QWORD PTR[104+rsp]
  776. add r12,QWORD PTR[32+rsp]
  777. mov r13,rax
  778. add r12,r15
  779. mov r14,r8
  780. ror r13,23
  781. mov r15,rbx
  782. xor r13,rax
  783. ror r14,5
  784. xor r15,rcx
  785. mov QWORD PTR[32+rsp],r12
  786. xor r14,r8
  787. and r15,rax
  788. ror r13,4
  789. add r12,rdx
  790. xor r15,rcx
  791. ror r14,6
  792. xor r13,rax
  793. add r12,r15
  794. mov r15,r8
  795. add r12,QWORD PTR[rbp]
  796. xor r14,r8
  797. xor r15,r9
  798. ror r13,14
  799. mov rdx,r9
  800. and rdi,r15
  801. ror r14,28
  802. add r12,r13
  803. xor rdx,rdi
  804. add r11,r12
  805. add rdx,r12
  806. lea rbp,QWORD PTR[8+rbp]
  807. mov r13,QWORD PTR[48+rsp]
  808. mov rdi,QWORD PTR[24+rsp]
  809. mov r12,r13
  810. ror r13,7
  811. add rdx,r14
  812. mov r14,rdi
  813. ror rdi,42
  814. xor r13,r12
  815. shr r12,7
  816. ror r13,1
  817. xor rdi,r14
  818. shr r14,6
  819. ror rdi,19
  820. xor r12,r13
  821. xor rdi,r14
  822. add r12,QWORD PTR[112+rsp]
  823. add r12,QWORD PTR[40+rsp]
  824. mov r13,r11
  825. add r12,rdi
  826. mov r14,rdx
  827. ror r13,23
  828. mov rdi,rax
  829. xor r13,r11
  830. ror r14,5
  831. xor rdi,rbx
  832. mov QWORD PTR[40+rsp],r12
  833. xor r14,rdx
  834. and rdi,r11
  835. ror r13,4
  836. add r12,rcx
  837. xor rdi,rbx
  838. ror r14,6
  839. xor r13,r11
  840. add r12,rdi
  841. mov rdi,rdx
  842. add r12,QWORD PTR[rbp]
  843. xor r14,rdx
  844. xor rdi,r8
  845. ror r13,14
  846. mov rcx,r8
  847. and r15,rdi
  848. ror r14,28
  849. add r12,r13
  850. xor rcx,r15
  851. add r10,r12
  852. add rcx,r12
  853. lea rbp,QWORD PTR[24+rbp]
  854. mov r13,QWORD PTR[56+rsp]
  855. mov r15,QWORD PTR[32+rsp]
  856. mov r12,r13
  857. ror r13,7
  858. add rcx,r14
  859. mov r14,r15
  860. ror r15,42
  861. xor r13,r12
  862. shr r12,7
  863. ror r13,1
  864. xor r15,r14
  865. shr r14,6
  866. ror r15,19
  867. xor r12,r13
  868. xor r15,r14
  869. add r12,QWORD PTR[120+rsp]
  870. add r12,QWORD PTR[48+rsp]
  871. mov r13,r10
  872. add r12,r15
  873. mov r14,rcx
  874. ror r13,23
  875. mov r15,r11
  876. xor r13,r10
  877. ror r14,5
  878. xor r15,rax
  879. mov QWORD PTR[48+rsp],r12
  880. xor r14,rcx
  881. and r15,r10
  882. ror r13,4
  883. add r12,rbx
  884. xor r15,rax
  885. ror r14,6
  886. xor r13,r10
  887. add r12,r15
  888. mov r15,rcx
  889. add r12,QWORD PTR[rbp]
  890. xor r14,rcx
  891. xor r15,rdx
  892. ror r13,14
  893. mov rbx,rdx
  894. and rdi,r15
  895. ror r14,28
  896. add r12,r13
  897. xor rbx,rdi
  898. add r9,r12
  899. add rbx,r12
  900. lea rbp,QWORD PTR[8+rbp]
  901. mov r13,QWORD PTR[64+rsp]
  902. mov rdi,QWORD PTR[40+rsp]
  903. mov r12,r13
  904. ror r13,7
  905. add rbx,r14
  906. mov r14,rdi
  907. ror rdi,42
  908. xor r13,r12
  909. shr r12,7
  910. ror r13,1
  911. xor rdi,r14
  912. shr r14,6
  913. ror rdi,19
  914. xor r12,r13
  915. xor rdi,r14
  916. add r12,QWORD PTR[rsp]
  917. add r12,QWORD PTR[56+rsp]
  918. mov r13,r9
  919. add r12,rdi
  920. mov r14,rbx
  921. ror r13,23
  922. mov rdi,r10
  923. xor r13,r9
  924. ror r14,5
  925. xor rdi,r11
  926. mov QWORD PTR[56+rsp],r12
  927. xor r14,rbx
  928. and rdi,r9
  929. ror r13,4
  930. add r12,rax
  931. xor rdi,r11
  932. ror r14,6
  933. xor r13,r9
  934. add r12,rdi
  935. mov rdi,rbx
  936. add r12,QWORD PTR[rbp]
  937. xor r14,rbx
  938. xor rdi,rcx
  939. ror r13,14
  940. mov rax,rcx
  941. and r15,rdi
  942. ror r14,28
  943. add r12,r13
  944. xor rax,r15
  945. add r8,r12
  946. add rax,r12
  947. lea rbp,QWORD PTR[24+rbp]
  948. mov r13,QWORD PTR[72+rsp]
  949. mov r15,QWORD PTR[48+rsp]
  950. mov r12,r13
  951. ror r13,7
  952. add rax,r14
  953. mov r14,r15
  954. ror r15,42
  955. xor r13,r12
  956. shr r12,7
  957. ror r13,1
  958. xor r15,r14
  959. shr r14,6
  960. ror r15,19
  961. xor r12,r13
  962. xor r15,r14
  963. add r12,QWORD PTR[8+rsp]
  964. add r12,QWORD PTR[64+rsp]
  965. mov r13,r8
  966. add r12,r15
  967. mov r14,rax
  968. ror r13,23
  969. mov r15,r9
  970. xor r13,r8
  971. ror r14,5
  972. xor r15,r10
  973. mov QWORD PTR[64+rsp],r12
  974. xor r14,rax
  975. and r15,r8
  976. ror r13,4
  977. add r12,r11
  978. xor r15,r10
  979. ror r14,6
  980. xor r13,r8
  981. add r12,r15
  982. mov r15,rax
  983. add r12,QWORD PTR[rbp]
  984. xor r14,rax
  985. xor r15,rbx
  986. ror r13,14
  987. mov r11,rbx
  988. and rdi,r15
  989. ror r14,28
  990. add r12,r13
  991. xor r11,rdi
  992. add rdx,r12
  993. add r11,r12
  994. lea rbp,QWORD PTR[8+rbp]
  995. mov r13,QWORD PTR[80+rsp]
  996. mov rdi,QWORD PTR[56+rsp]
  997. mov r12,r13
  998. ror r13,7
  999. add r11,r14
  1000. mov r14,rdi
  1001. ror rdi,42
  1002. xor r13,r12
  1003. shr r12,7
  1004. ror r13,1
  1005. xor rdi,r14
  1006. shr r14,6
  1007. ror rdi,19
  1008. xor r12,r13
  1009. xor rdi,r14
  1010. add r12,QWORD PTR[16+rsp]
  1011. add r12,QWORD PTR[72+rsp]
  1012. mov r13,rdx
  1013. add r12,rdi
  1014. mov r14,r11
  1015. ror r13,23
  1016. mov rdi,r8
  1017. xor r13,rdx
  1018. ror r14,5
  1019. xor rdi,r9
  1020. mov QWORD PTR[72+rsp],r12
  1021. xor r14,r11
  1022. and rdi,rdx
  1023. ror r13,4
  1024. add r12,r10
  1025. xor rdi,r9
  1026. ror r14,6
  1027. xor r13,rdx
  1028. add r12,rdi
  1029. mov rdi,r11
  1030. add r12,QWORD PTR[rbp]
  1031. xor r14,r11
  1032. xor rdi,rax
  1033. ror r13,14
  1034. mov r10,rax
  1035. and r15,rdi
  1036. ror r14,28
  1037. add r12,r13
  1038. xor r10,r15
  1039. add rcx,r12
  1040. add r10,r12
  1041. lea rbp,QWORD PTR[24+rbp]
  1042. mov r13,QWORD PTR[88+rsp]
  1043. mov r15,QWORD PTR[64+rsp]
  1044. mov r12,r13
  1045. ror r13,7
  1046. add r10,r14
  1047. mov r14,r15
  1048. ror r15,42
  1049. xor r13,r12
  1050. shr r12,7
  1051. ror r13,1
  1052. xor r15,r14
  1053. shr r14,6
  1054. ror r15,19
  1055. xor r12,r13
  1056. xor r15,r14
  1057. add r12,QWORD PTR[24+rsp]
  1058. add r12,QWORD PTR[80+rsp]
  1059. mov r13,rcx
  1060. add r12,r15
  1061. mov r14,r10
  1062. ror r13,23
  1063. mov r15,rdx
  1064. xor r13,rcx
  1065. ror r14,5
  1066. xor r15,r8
  1067. mov QWORD PTR[80+rsp],r12
  1068. xor r14,r10
  1069. and r15,rcx
  1070. ror r13,4
  1071. add r12,r9
  1072. xor r15,r8
  1073. ror r14,6
  1074. xor r13,rcx
  1075. add r12,r15
  1076. mov r15,r10
  1077. add r12,QWORD PTR[rbp]
  1078. xor r14,r10
  1079. xor r15,r11
  1080. ror r13,14
  1081. mov r9,r11
  1082. and rdi,r15
  1083. ror r14,28
  1084. add r12,r13
  1085. xor r9,rdi
  1086. add rbx,r12
  1087. add r9,r12
  1088. lea rbp,QWORD PTR[8+rbp]
  1089. mov r13,QWORD PTR[96+rsp]
  1090. mov rdi,QWORD PTR[72+rsp]
  1091. mov r12,r13
  1092. ror r13,7
  1093. add r9,r14
  1094. mov r14,rdi
  1095. ror rdi,42
  1096. xor r13,r12
  1097. shr r12,7
  1098. ror r13,1
  1099. xor rdi,r14
  1100. shr r14,6
  1101. ror rdi,19
  1102. xor r12,r13
  1103. xor rdi,r14
  1104. add r12,QWORD PTR[32+rsp]
  1105. add r12,QWORD PTR[88+rsp]
  1106. mov r13,rbx
  1107. add r12,rdi
  1108. mov r14,r9
  1109. ror r13,23
  1110. mov rdi,rcx
  1111. xor r13,rbx
  1112. ror r14,5
  1113. xor rdi,rdx
  1114. mov QWORD PTR[88+rsp],r12
  1115. xor r14,r9
  1116. and rdi,rbx
  1117. ror r13,4
  1118. add r12,r8
  1119. xor rdi,rdx
  1120. ror r14,6
  1121. xor r13,rbx
  1122. add r12,rdi
  1123. mov rdi,r9
  1124. add r12,QWORD PTR[rbp]
  1125. xor r14,r9
  1126. xor rdi,r10
  1127. ror r13,14
  1128. mov r8,r10
  1129. and r15,rdi
  1130. ror r14,28
  1131. add r12,r13
  1132. xor r8,r15
  1133. add rax,r12
  1134. add r8,r12
  1135. lea rbp,QWORD PTR[24+rbp]
  1136. mov r13,QWORD PTR[104+rsp]
  1137. mov r15,QWORD PTR[80+rsp]
  1138. mov r12,r13
  1139. ror r13,7
  1140. add r8,r14
  1141. mov r14,r15
  1142. ror r15,42
  1143. xor r13,r12
  1144. shr r12,7
  1145. ror r13,1
  1146. xor r15,r14
  1147. shr r14,6
  1148. ror r15,19
  1149. xor r12,r13
  1150. xor r15,r14
  1151. add r12,QWORD PTR[40+rsp]
  1152. add r12,QWORD PTR[96+rsp]
  1153. mov r13,rax
  1154. add r12,r15
  1155. mov r14,r8
  1156. ror r13,23
  1157. mov r15,rbx
  1158. xor r13,rax
  1159. ror r14,5
  1160. xor r15,rcx
  1161. mov QWORD PTR[96+rsp],r12
  1162. xor r14,r8
  1163. and r15,rax
  1164. ror r13,4
  1165. add r12,rdx
  1166. xor r15,rcx
  1167. ror r14,6
  1168. xor r13,rax
  1169. add r12,r15
  1170. mov r15,r8
  1171. add r12,QWORD PTR[rbp]
  1172. xor r14,r8
  1173. xor r15,r9
  1174. ror r13,14
  1175. mov rdx,r9
  1176. and rdi,r15
  1177. ror r14,28
  1178. add r12,r13
  1179. xor rdx,rdi
  1180. add r11,r12
  1181. add rdx,r12
  1182. lea rbp,QWORD PTR[8+rbp]
  1183. mov r13,QWORD PTR[112+rsp]
  1184. mov rdi,QWORD PTR[88+rsp]
  1185. mov r12,r13
  1186. ror r13,7
  1187. add rdx,r14
  1188. mov r14,rdi
  1189. ror rdi,42
  1190. xor r13,r12
  1191. shr r12,7
  1192. ror r13,1
  1193. xor rdi,r14
  1194. shr r14,6
  1195. ror rdi,19
  1196. xor r12,r13
  1197. xor rdi,r14
  1198. add r12,QWORD PTR[48+rsp]
  1199. add r12,QWORD PTR[104+rsp]
  1200. mov r13,r11
  1201. add r12,rdi
  1202. mov r14,rdx
  1203. ror r13,23
  1204. mov rdi,rax
  1205. xor r13,r11
  1206. ror r14,5
  1207. xor rdi,rbx
  1208. mov QWORD PTR[104+rsp],r12
  1209. xor r14,rdx
  1210. and rdi,r11
  1211. ror r13,4
  1212. add r12,rcx
  1213. xor rdi,rbx
  1214. ror r14,6
  1215. xor r13,r11
  1216. add r12,rdi
  1217. mov rdi,rdx
  1218. add r12,QWORD PTR[rbp]
  1219. xor r14,rdx
  1220. xor rdi,r8
  1221. ror r13,14
  1222. mov rcx,r8
  1223. and r15,rdi
  1224. ror r14,28
  1225. add r12,r13
  1226. xor rcx,r15
  1227. add r10,r12
  1228. add rcx,r12
  1229. lea rbp,QWORD PTR[24+rbp]
  1230. mov r13,QWORD PTR[120+rsp]
  1231. mov r15,QWORD PTR[96+rsp]
  1232. mov r12,r13
  1233. ror r13,7
  1234. add rcx,r14
  1235. mov r14,r15
  1236. ror r15,42
  1237. xor r13,r12
  1238. shr r12,7
  1239. ror r13,1
  1240. xor r15,r14
  1241. shr r14,6
  1242. ror r15,19
  1243. xor r12,r13
  1244. xor r15,r14
  1245. add r12,QWORD PTR[56+rsp]
  1246. add r12,QWORD PTR[112+rsp]
  1247. mov r13,r10
  1248. add r12,r15
  1249. mov r14,rcx
  1250. ror r13,23
  1251. mov r15,r11
  1252. xor r13,r10
  1253. ror r14,5
  1254. xor r15,rax
  1255. mov QWORD PTR[112+rsp],r12
  1256. xor r14,rcx
  1257. and r15,r10
  1258. ror r13,4
  1259. add r12,rbx
  1260. xor r15,rax
  1261. ror r14,6
  1262. xor r13,r10
  1263. add r12,r15
  1264. mov r15,rcx
  1265. add r12,QWORD PTR[rbp]
  1266. xor r14,rcx
  1267. xor r15,rdx
  1268. ror r13,14
  1269. mov rbx,rdx
  1270. and rdi,r15
  1271. ror r14,28
  1272. add r12,r13
  1273. xor rbx,rdi
  1274. add r9,r12
  1275. add rbx,r12
  1276. lea rbp,QWORD PTR[8+rbp]
  1277. mov r13,QWORD PTR[rsp]
  1278. mov rdi,QWORD PTR[104+rsp]
  1279. mov r12,r13
  1280. ror r13,7
  1281. add rbx,r14
  1282. mov r14,rdi
  1283. ror rdi,42
  1284. xor r13,r12
  1285. shr r12,7
  1286. ror r13,1
  1287. xor rdi,r14
  1288. shr r14,6
  1289. ror rdi,19
  1290. xor r12,r13
  1291. xor rdi,r14
  1292. add r12,QWORD PTR[64+rsp]
  1293. add r12,QWORD PTR[120+rsp]
  1294. mov r13,r9
  1295. add r12,rdi
  1296. mov r14,rbx
  1297. ror r13,23
  1298. mov rdi,r10
  1299. xor r13,r9
  1300. ror r14,5
  1301. xor rdi,r11
  1302. mov QWORD PTR[120+rsp],r12
  1303. xor r14,rbx
  1304. and rdi,r9
  1305. ror r13,4
  1306. add r12,rax
  1307. xor rdi,r11
  1308. ror r14,6
  1309. xor r13,r9
  1310. add r12,rdi
  1311. mov rdi,rbx
  1312. add r12,QWORD PTR[rbp]
  1313. xor r14,rbx
  1314. xor rdi,rcx
  1315. ror r13,14
  1316. mov rax,rcx
  1317. and r15,rdi
  1318. ror r14,28
  1319. add r12,r13
  1320. xor rax,r15
  1321. add r8,r12
  1322. add rax,r12
  1323. lea rbp,QWORD PTR[24+rbp]
  1324. cmp BYTE PTR[7+rbp],0
  1325. jnz $L$rounds_16_xx
  1326. mov rdi,QWORD PTR[((128+0))+rsp]
  1327. add rax,r14
  1328. lea rsi,QWORD PTR[128+rsi]
  1329. add rax,QWORD PTR[rdi]
  1330. add rbx,QWORD PTR[8+rdi]
  1331. add rcx,QWORD PTR[16+rdi]
  1332. add rdx,QWORD PTR[24+rdi]
  1333. add r8,QWORD PTR[32+rdi]
  1334. add r9,QWORD PTR[40+rdi]
  1335. add r10,QWORD PTR[48+rdi]
  1336. add r11,QWORD PTR[56+rdi]
  1337. cmp rsi,QWORD PTR[((128+16))+rsp]
  1338. mov QWORD PTR[rdi],rax
  1339. mov QWORD PTR[8+rdi],rbx
  1340. mov QWORD PTR[16+rdi],rcx
  1341. mov QWORD PTR[24+rdi],rdx
  1342. mov QWORD PTR[32+rdi],r8
  1343. mov QWORD PTR[40+rdi],r9
  1344. mov QWORD PTR[48+rdi],r10
  1345. mov QWORD PTR[56+rdi],r11
  1346. jb $L$loop
  1347. mov rsi,QWORD PTR[152+rsp]
  1348. mov r15,QWORD PTR[((-48))+rsi]
  1349. mov r14,QWORD PTR[((-40))+rsi]
  1350. mov r13,QWORD PTR[((-32))+rsi]
  1351. mov r12,QWORD PTR[((-24))+rsi]
  1352. mov rbp,QWORD PTR[((-16))+rsi]
  1353. mov rbx,QWORD PTR[((-8))+rsi]
  1354. lea rsp,QWORD PTR[rsi]
  1355. $L$epilogue::
  1356. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  1357. mov rsi,QWORD PTR[16+rsp]
  1358. DB 0F3h,0C3h ;repret
  1359. $L$SEH_end_sha512_block_data_order::
  1360. sha512_block_data_order ENDP
  1361. ALIGN 64
  1362. K512::
  1363. DQ 0428a2f98d728ae22h,07137449123ef65cdh
  1364. DQ 0428a2f98d728ae22h,07137449123ef65cdh
  1365. DQ 0b5c0fbcfec4d3b2fh,0e9b5dba58189dbbch
  1366. DQ 0b5c0fbcfec4d3b2fh,0e9b5dba58189dbbch
  1367. DQ 03956c25bf348b538h,059f111f1b605d019h
  1368. DQ 03956c25bf348b538h,059f111f1b605d019h
  1369. DQ 0923f82a4af194f9bh,0ab1c5ed5da6d8118h
  1370. DQ 0923f82a4af194f9bh,0ab1c5ed5da6d8118h
  1371. DQ 0d807aa98a3030242h,012835b0145706fbeh
  1372. DQ 0d807aa98a3030242h,012835b0145706fbeh
  1373. DQ 0243185be4ee4b28ch,0550c7dc3d5ffb4e2h
  1374. DQ 0243185be4ee4b28ch,0550c7dc3d5ffb4e2h
  1375. DQ 072be5d74f27b896fh,080deb1fe3b1696b1h
  1376. DQ 072be5d74f27b896fh,080deb1fe3b1696b1h
  1377. DQ 09bdc06a725c71235h,0c19bf174cf692694h
  1378. DQ 09bdc06a725c71235h,0c19bf174cf692694h
  1379. DQ 0e49b69c19ef14ad2h,0efbe4786384f25e3h
  1380. DQ 0e49b69c19ef14ad2h,0efbe4786384f25e3h
  1381. DQ 00fc19dc68b8cd5b5h,0240ca1cc77ac9c65h
  1382. DQ 00fc19dc68b8cd5b5h,0240ca1cc77ac9c65h
  1383. DQ 02de92c6f592b0275h,04a7484aa6ea6e483h
  1384. DQ 02de92c6f592b0275h,04a7484aa6ea6e483h
  1385. DQ 05cb0a9dcbd41fbd4h,076f988da831153b5h
  1386. DQ 05cb0a9dcbd41fbd4h,076f988da831153b5h
  1387. DQ 0983e5152ee66dfabh,0a831c66d2db43210h
  1388. DQ 0983e5152ee66dfabh,0a831c66d2db43210h
  1389. DQ 0b00327c898fb213fh,0bf597fc7beef0ee4h
  1390. DQ 0b00327c898fb213fh,0bf597fc7beef0ee4h
  1391. DQ 0c6e00bf33da88fc2h,0d5a79147930aa725h
  1392. DQ 0c6e00bf33da88fc2h,0d5a79147930aa725h
  1393. DQ 006ca6351e003826fh,0142929670a0e6e70h
  1394. DQ 006ca6351e003826fh,0142929670a0e6e70h
  1395. DQ 027b70a8546d22ffch,02e1b21385c26c926h
  1396. DQ 027b70a8546d22ffch,02e1b21385c26c926h
  1397. DQ 04d2c6dfc5ac42aedh,053380d139d95b3dfh
  1398. DQ 04d2c6dfc5ac42aedh,053380d139d95b3dfh
  1399. DQ 0650a73548baf63deh,0766a0abb3c77b2a8h
  1400. DQ 0650a73548baf63deh,0766a0abb3c77b2a8h
  1401. DQ 081c2c92e47edaee6h,092722c851482353bh
  1402. DQ 081c2c92e47edaee6h,092722c851482353bh
  1403. DQ 0a2bfe8a14cf10364h,0a81a664bbc423001h
  1404. DQ 0a2bfe8a14cf10364h,0a81a664bbc423001h
  1405. DQ 0c24b8b70d0f89791h,0c76c51a30654be30h
  1406. DQ 0c24b8b70d0f89791h,0c76c51a30654be30h
  1407. DQ 0d192e819d6ef5218h,0d69906245565a910h
  1408. DQ 0d192e819d6ef5218h,0d69906245565a910h
  1409. DQ 0f40e35855771202ah,0106aa07032bbd1b8h
  1410. DQ 0f40e35855771202ah,0106aa07032bbd1b8h
  1411. DQ 019a4c116b8d2d0c8h,01e376c085141ab53h
  1412. DQ 019a4c116b8d2d0c8h,01e376c085141ab53h
  1413. DQ 02748774cdf8eeb99h,034b0bcb5e19b48a8h
  1414. DQ 02748774cdf8eeb99h,034b0bcb5e19b48a8h
  1415. DQ 0391c0cb3c5c95a63h,04ed8aa4ae3418acbh
  1416. DQ 0391c0cb3c5c95a63h,04ed8aa4ae3418acbh
  1417. DQ 05b9cca4f7763e373h,0682e6ff3d6b2b8a3h
  1418. DQ 05b9cca4f7763e373h,0682e6ff3d6b2b8a3h
  1419. DQ 0748f82ee5defb2fch,078a5636f43172f60h
  1420. DQ 0748f82ee5defb2fch,078a5636f43172f60h
  1421. DQ 084c87814a1f0ab72h,08cc702081a6439ech
  1422. DQ 084c87814a1f0ab72h,08cc702081a6439ech
  1423. DQ 090befffa23631e28h,0a4506cebde82bde9h
  1424. DQ 090befffa23631e28h,0a4506cebde82bde9h
  1425. DQ 0bef9a3f7b2c67915h,0c67178f2e372532bh
  1426. DQ 0bef9a3f7b2c67915h,0c67178f2e372532bh
  1427. DQ 0ca273eceea26619ch,0d186b8c721c0c207h
  1428. DQ 0ca273eceea26619ch,0d186b8c721c0c207h
  1429. DQ 0eada7dd6cde0eb1eh,0f57d4f7fee6ed178h
  1430. DQ 0eada7dd6cde0eb1eh,0f57d4f7fee6ed178h
  1431. DQ 006f067aa72176fbah,00a637dc5a2c898a6h
  1432. DQ 006f067aa72176fbah,00a637dc5a2c898a6h
  1433. DQ 0113f9804bef90daeh,01b710b35131c471bh
  1434. DQ 0113f9804bef90daeh,01b710b35131c471bh
  1435. DQ 028db77f523047d84h,032caab7b40c72493h
  1436. DQ 028db77f523047d84h,032caab7b40c72493h
  1437. DQ 03c9ebe0a15c9bebch,0431d67c49c100d4ch
  1438. DQ 03c9ebe0a15c9bebch,0431d67c49c100d4ch
  1439. DQ 04cc5d4becb3e42b6h,0597f299cfc657e2ah
  1440. DQ 04cc5d4becb3e42b6h,0597f299cfc657e2ah
  1441. DQ 05fcb6fab3ad6faech,06c44198c4a475817h
  1442. DQ 05fcb6fab3ad6faech,06c44198c4a475817h
  1443. DQ 00001020304050607h,008090a0b0c0d0e0fh
  1444. DQ 00001020304050607h,008090a0b0c0d0e0fh
  1445. DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
  1446. DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
  1447. DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
  1448. DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
  1449. DB 111,114,103,62,0
  1450. ALIGN 64
  1451. sha512_block_data_order_xop PROC PRIVATE
  1452. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  1453. mov QWORD PTR[16+rsp],rsi
  1454. mov rax,rsp
  1455. $L$SEH_begin_sha512_block_data_order_xop::
  1456. mov rdi,rcx
  1457. mov rsi,rdx
  1458. mov rdx,r8
  1459. $L$xop_shortcut::
  1460. mov rax,rsp
  1461. push rbx
  1462. push rbp
  1463. push r12
  1464. push r13
  1465. push r14
  1466. push r15
  1467. shl rdx,4
  1468. sub rsp,256
  1469. lea rdx,QWORD PTR[rdx*8+rsi]
  1470. and rsp,-64
  1471. mov QWORD PTR[((128+0))+rsp],rdi
  1472. mov QWORD PTR[((128+8))+rsp],rsi
  1473. mov QWORD PTR[((128+16))+rsp],rdx
  1474. mov QWORD PTR[152+rsp],rax
  1475. movaps XMMWORD PTR[(128+32)+rsp],xmm6
  1476. movaps XMMWORD PTR[(128+48)+rsp],xmm7
  1477. movaps XMMWORD PTR[(128+64)+rsp],xmm8
  1478. movaps XMMWORD PTR[(128+80)+rsp],xmm9
  1479. movaps XMMWORD PTR[(128+96)+rsp],xmm10
  1480. movaps XMMWORD PTR[(128+112)+rsp],xmm11
  1481. $L$prologue_xop::
  1482. vzeroupper
  1483. mov rax,QWORD PTR[rdi]
  1484. mov rbx,QWORD PTR[8+rdi]
  1485. mov rcx,QWORD PTR[16+rdi]
  1486. mov rdx,QWORD PTR[24+rdi]
  1487. mov r8,QWORD PTR[32+rdi]
  1488. mov r9,QWORD PTR[40+rdi]
  1489. mov r10,QWORD PTR[48+rdi]
  1490. mov r11,QWORD PTR[56+rdi]
  1491. jmp $L$loop_xop
  1492. ALIGN 16
  1493. $L$loop_xop::
  1494. vmovdqa xmm11,XMMWORD PTR[((K512+1280))]
  1495. vmovdqu xmm0,XMMWORD PTR[rsi]
  1496. lea rbp,QWORD PTR[((K512+128))]
  1497. vmovdqu xmm1,XMMWORD PTR[16+rsi]
  1498. vmovdqu xmm2,XMMWORD PTR[32+rsi]
  1499. vpshufb xmm0,xmm0,xmm11
  1500. vmovdqu xmm3,XMMWORD PTR[48+rsi]
  1501. vpshufb xmm1,xmm1,xmm11
  1502. vmovdqu xmm4,XMMWORD PTR[64+rsi]
  1503. vpshufb xmm2,xmm2,xmm11
  1504. vmovdqu xmm5,XMMWORD PTR[80+rsi]
  1505. vpshufb xmm3,xmm3,xmm11
  1506. vmovdqu xmm6,XMMWORD PTR[96+rsi]
  1507. vpshufb xmm4,xmm4,xmm11
  1508. vmovdqu xmm7,XMMWORD PTR[112+rsi]
  1509. vpshufb xmm5,xmm5,xmm11
  1510. vpaddq xmm8,xmm0,XMMWORD PTR[((-128))+rbp]
  1511. vpshufb xmm6,xmm6,xmm11
  1512. vpaddq xmm9,xmm1,XMMWORD PTR[((-96))+rbp]
  1513. vpshufb xmm7,xmm7,xmm11
  1514. vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
  1515. vpaddq xmm11,xmm3,XMMWORD PTR[((-32))+rbp]
  1516. vmovdqa XMMWORD PTR[rsp],xmm8
  1517. vpaddq xmm8,xmm4,XMMWORD PTR[rbp]
  1518. vmovdqa XMMWORD PTR[16+rsp],xmm9
  1519. vpaddq xmm9,xmm5,XMMWORD PTR[32+rbp]
  1520. vmovdqa XMMWORD PTR[32+rsp],xmm10
  1521. vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
  1522. vmovdqa XMMWORD PTR[48+rsp],xmm11
  1523. vpaddq xmm11,xmm7,XMMWORD PTR[96+rbp]
  1524. vmovdqa XMMWORD PTR[64+rsp],xmm8
  1525. mov r14,rax
  1526. vmovdqa XMMWORD PTR[80+rsp],xmm9
  1527. mov rdi,rbx
  1528. vmovdqa XMMWORD PTR[96+rsp],xmm10
  1529. xor rdi,rcx
  1530. vmovdqa XMMWORD PTR[112+rsp],xmm11
  1531. mov r13,r8
  1532. jmp $L$xop_00_47
  1533. ALIGN 16
  1534. $L$xop_00_47::
  1535. add rbp,256
  1536. vpalignr xmm8,xmm1,xmm0,8
  1537. ror r13,23
  1538. mov rax,r14
  1539. vpalignr xmm11,xmm5,xmm4,8
  1540. mov r12,r9
  1541. ror r14,5
  1542. DB 143,72,120,195,200,56
  1543. xor r13,r8
  1544. xor r12,r10
  1545. vpsrlq xmm8,xmm8,7
  1546. ror r13,4
  1547. xor r14,rax
  1548. vpaddq xmm0,xmm0,xmm11
  1549. and r12,r8
  1550. xor r13,r8
  1551. add r11,QWORD PTR[rsp]
  1552. mov r15,rax
  1553. DB 143,72,120,195,209,7
  1554. xor r12,r10
  1555. ror r14,6
  1556. vpxor xmm8,xmm8,xmm9
  1557. xor r15,rbx
  1558. add r11,r12
  1559. ror r13,14
  1560. and rdi,r15
  1561. DB 143,104,120,195,223,3
  1562. xor r14,rax
  1563. add r11,r13
  1564. vpxor xmm8,xmm8,xmm10
  1565. xor rdi,rbx
  1566. ror r14,28
  1567. vpsrlq xmm10,xmm7,6
  1568. add rdx,r11
  1569. add r11,rdi
  1570. vpaddq xmm0,xmm0,xmm8
  1571. mov r13,rdx
  1572. add r14,r11
  1573. DB 143,72,120,195,203,42
  1574. ror r13,23
  1575. mov r11,r14
  1576. vpxor xmm11,xmm11,xmm10
  1577. mov r12,r8
  1578. ror r14,5
  1579. xor r13,rdx
  1580. xor r12,r9
  1581. vpxor xmm11,xmm11,xmm9
  1582. ror r13,4
  1583. xor r14,r11
  1584. and r12,rdx
  1585. xor r13,rdx
  1586. vpaddq xmm0,xmm0,xmm11
  1587. add r10,QWORD PTR[8+rsp]
  1588. mov rdi,r11
  1589. xor r12,r9
  1590. ror r14,6
  1591. vpaddq xmm10,xmm0,XMMWORD PTR[((-128))+rbp]
  1592. xor rdi,rax
  1593. add r10,r12
  1594. ror r13,14
  1595. and r15,rdi
  1596. xor r14,r11
  1597. add r10,r13
  1598. xor r15,rax
  1599. ror r14,28
  1600. add rcx,r10
  1601. add r10,r15
  1602. mov r13,rcx
  1603. add r14,r10
  1604. vmovdqa XMMWORD PTR[rsp],xmm10
  1605. vpalignr xmm8,xmm2,xmm1,8
  1606. ror r13,23
  1607. mov r10,r14
  1608. vpalignr xmm11,xmm6,xmm5,8
  1609. mov r12,rdx
  1610. ror r14,5
  1611. DB 143,72,120,195,200,56
  1612. xor r13,rcx
  1613. xor r12,r8
  1614. vpsrlq xmm8,xmm8,7
  1615. ror r13,4
  1616. xor r14,r10
  1617. vpaddq xmm1,xmm1,xmm11
  1618. and r12,rcx
  1619. xor r13,rcx
  1620. add r9,QWORD PTR[16+rsp]
  1621. mov r15,r10
  1622. DB 143,72,120,195,209,7
  1623. xor r12,r8
  1624. ror r14,6
  1625. vpxor xmm8,xmm8,xmm9
  1626. xor r15,r11
  1627. add r9,r12
  1628. ror r13,14
  1629. and rdi,r15
  1630. DB 143,104,120,195,216,3
  1631. xor r14,r10
  1632. add r9,r13
  1633. vpxor xmm8,xmm8,xmm10
  1634. xor rdi,r11
  1635. ror r14,28
  1636. vpsrlq xmm10,xmm0,6
  1637. add rbx,r9
  1638. add r9,rdi
  1639. vpaddq xmm1,xmm1,xmm8
  1640. mov r13,rbx
  1641. add r14,r9
  1642. DB 143,72,120,195,203,42
  1643. ror r13,23
  1644. mov r9,r14
  1645. vpxor xmm11,xmm11,xmm10
  1646. mov r12,rcx
  1647. ror r14,5
  1648. xor r13,rbx
  1649. xor r12,rdx
  1650. vpxor xmm11,xmm11,xmm9
  1651. ror r13,4
  1652. xor r14,r9
  1653. and r12,rbx
  1654. xor r13,rbx
  1655. vpaddq xmm1,xmm1,xmm11
  1656. add r8,QWORD PTR[24+rsp]
  1657. mov rdi,r9
  1658. xor r12,rdx
  1659. ror r14,6
  1660. vpaddq xmm10,xmm1,XMMWORD PTR[((-96))+rbp]
  1661. xor rdi,r10
  1662. add r8,r12
  1663. ror r13,14
  1664. and r15,rdi
  1665. xor r14,r9
  1666. add r8,r13
  1667. xor r15,r10
  1668. ror r14,28
  1669. add rax,r8
  1670. add r8,r15
  1671. mov r13,rax
  1672. add r14,r8
  1673. vmovdqa XMMWORD PTR[16+rsp],xmm10
  1674. vpalignr xmm8,xmm3,xmm2,8
  1675. ror r13,23
  1676. mov r8,r14
  1677. vpalignr xmm11,xmm7,xmm6,8
  1678. mov r12,rbx
  1679. ror r14,5
  1680. DB 143,72,120,195,200,56
  1681. xor r13,rax
  1682. xor r12,rcx
  1683. vpsrlq xmm8,xmm8,7
  1684. ror r13,4
  1685. xor r14,r8
  1686. vpaddq xmm2,xmm2,xmm11
  1687. and r12,rax
  1688. xor r13,rax
  1689. add rdx,QWORD PTR[32+rsp]
  1690. mov r15,r8
  1691. DB 143,72,120,195,209,7
  1692. xor r12,rcx
  1693. ror r14,6
  1694. vpxor xmm8,xmm8,xmm9
  1695. xor r15,r9
  1696. add rdx,r12
  1697. ror r13,14
  1698. and rdi,r15
  1699. DB 143,104,120,195,217,3
  1700. xor r14,r8
  1701. add rdx,r13
  1702. vpxor xmm8,xmm8,xmm10
  1703. xor rdi,r9
  1704. ror r14,28
  1705. vpsrlq xmm10,xmm1,6
  1706. add r11,rdx
  1707. add rdx,rdi
  1708. vpaddq xmm2,xmm2,xmm8
  1709. mov r13,r11
  1710. add r14,rdx
  1711. DB 143,72,120,195,203,42
  1712. ror r13,23
  1713. mov rdx,r14
  1714. vpxor xmm11,xmm11,xmm10
  1715. mov r12,rax
  1716. ror r14,5
  1717. xor r13,r11
  1718. xor r12,rbx
  1719. vpxor xmm11,xmm11,xmm9
  1720. ror r13,4
  1721. xor r14,rdx
  1722. and r12,r11
  1723. xor r13,r11
  1724. vpaddq xmm2,xmm2,xmm11
  1725. add rcx,QWORD PTR[40+rsp]
  1726. mov rdi,rdx
  1727. xor r12,rbx
  1728. ror r14,6
  1729. vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
  1730. xor rdi,r8
  1731. add rcx,r12
  1732. ror r13,14
  1733. and r15,rdi
  1734. xor r14,rdx
  1735. add rcx,r13
  1736. xor r15,r8
  1737. ror r14,28
  1738. add r10,rcx
  1739. add rcx,r15
  1740. mov r13,r10
  1741. add r14,rcx
  1742. vmovdqa XMMWORD PTR[32+rsp],xmm10
  1743. vpalignr xmm8,xmm4,xmm3,8
  1744. ror r13,23
  1745. mov rcx,r14
  1746. vpalignr xmm11,xmm0,xmm7,8
  1747. mov r12,r11
  1748. ror r14,5
  1749. DB 143,72,120,195,200,56
  1750. xor r13,r10
  1751. xor r12,rax
  1752. vpsrlq xmm8,xmm8,7
  1753. ror r13,4
  1754. xor r14,rcx
  1755. vpaddq xmm3,xmm3,xmm11
  1756. and r12,r10
  1757. xor r13,r10
  1758. add rbx,QWORD PTR[48+rsp]
  1759. mov r15,rcx
  1760. DB 143,72,120,195,209,7
  1761. xor r12,rax
  1762. ror r14,6
  1763. vpxor xmm8,xmm8,xmm9
  1764. xor r15,rdx
  1765. add rbx,r12
  1766. ror r13,14
  1767. and rdi,r15
  1768. DB 143,104,120,195,218,3
  1769. xor r14,rcx
  1770. add rbx,r13
  1771. vpxor xmm8,xmm8,xmm10
  1772. xor rdi,rdx
  1773. ror r14,28
  1774. vpsrlq xmm10,xmm2,6
  1775. add r9,rbx
  1776. add rbx,rdi
  1777. vpaddq xmm3,xmm3,xmm8
  1778. mov r13,r9
  1779. add r14,rbx
  1780. DB 143,72,120,195,203,42
  1781. ror r13,23
  1782. mov rbx,r14
  1783. vpxor xmm11,xmm11,xmm10
  1784. mov r12,r10
  1785. ror r14,5
  1786. xor r13,r9
  1787. xor r12,r11
  1788. vpxor xmm11,xmm11,xmm9
  1789. ror r13,4
  1790. xor r14,rbx
  1791. and r12,r9
  1792. xor r13,r9
  1793. vpaddq xmm3,xmm3,xmm11
  1794. add rax,QWORD PTR[56+rsp]
  1795. mov rdi,rbx
  1796. xor r12,r11
  1797. ror r14,6
  1798. vpaddq xmm10,xmm3,XMMWORD PTR[((-32))+rbp]
  1799. xor rdi,rcx
  1800. add rax,r12
  1801. ror r13,14
  1802. and r15,rdi
  1803. xor r14,rbx
  1804. add rax,r13
  1805. xor r15,rcx
  1806. ror r14,28
  1807. add r8,rax
  1808. add rax,r15
  1809. mov r13,r8
  1810. add r14,rax
  1811. vmovdqa XMMWORD PTR[48+rsp],xmm10
  1812. vpalignr xmm8,xmm5,xmm4,8
  1813. ror r13,23
  1814. mov rax,r14
  1815. vpalignr xmm11,xmm1,xmm0,8
  1816. mov r12,r9
  1817. ror r14,5
  1818. DB 143,72,120,195,200,56
  1819. xor r13,r8
  1820. xor r12,r10
  1821. vpsrlq xmm8,xmm8,7
  1822. ror r13,4
  1823. xor r14,rax
  1824. vpaddq xmm4,xmm4,xmm11
  1825. and r12,r8
  1826. xor r13,r8
  1827. add r11,QWORD PTR[64+rsp]
  1828. mov r15,rax
  1829. DB 143,72,120,195,209,7
  1830. xor r12,r10
  1831. ror r14,6
  1832. vpxor xmm8,xmm8,xmm9
  1833. xor r15,rbx
  1834. add r11,r12
  1835. ror r13,14
  1836. and rdi,r15
  1837. DB 143,104,120,195,219,3
  1838. xor r14,rax
  1839. add r11,r13
  1840. vpxor xmm8,xmm8,xmm10
  1841. xor rdi,rbx
  1842. ror r14,28
  1843. vpsrlq xmm10,xmm3,6
  1844. add rdx,r11
  1845. add r11,rdi
  1846. vpaddq xmm4,xmm4,xmm8
  1847. mov r13,rdx
  1848. add r14,r11
  1849. DB 143,72,120,195,203,42
  1850. ror r13,23
  1851. mov r11,r14
  1852. vpxor xmm11,xmm11,xmm10
  1853. mov r12,r8
  1854. ror r14,5
  1855. xor r13,rdx
  1856. xor r12,r9
  1857. vpxor xmm11,xmm11,xmm9
  1858. ror r13,4
  1859. xor r14,r11
  1860. and r12,rdx
  1861. xor r13,rdx
  1862. vpaddq xmm4,xmm4,xmm11
  1863. add r10,QWORD PTR[72+rsp]
  1864. mov rdi,r11
  1865. xor r12,r9
  1866. ror r14,6
  1867. vpaddq xmm10,xmm4,XMMWORD PTR[rbp]
  1868. xor rdi,rax
  1869. add r10,r12
  1870. ror r13,14
  1871. and r15,rdi
  1872. xor r14,r11
  1873. add r10,r13
  1874. xor r15,rax
  1875. ror r14,28
  1876. add rcx,r10
  1877. add r10,r15
  1878. mov r13,rcx
  1879. add r14,r10
  1880. vmovdqa XMMWORD PTR[64+rsp],xmm10
  1881. vpalignr xmm8,xmm6,xmm5,8
  1882. ror r13,23
  1883. mov r10,r14
  1884. vpalignr xmm11,xmm2,xmm1,8
  1885. mov r12,rdx
  1886. ror r14,5
  1887. DB 143,72,120,195,200,56
  1888. xor r13,rcx
  1889. xor r12,r8
  1890. vpsrlq xmm8,xmm8,7
  1891. ror r13,4
  1892. xor r14,r10
  1893. vpaddq xmm5,xmm5,xmm11
  1894. and r12,rcx
  1895. xor r13,rcx
  1896. add r9,QWORD PTR[80+rsp]
  1897. mov r15,r10
  1898. DB 143,72,120,195,209,7
  1899. xor r12,r8
  1900. ror r14,6
  1901. vpxor xmm8,xmm8,xmm9
  1902. xor r15,r11
  1903. add r9,r12
  1904. ror r13,14
  1905. and rdi,r15
  1906. DB 143,104,120,195,220,3
  1907. xor r14,r10
  1908. add r9,r13
  1909. vpxor xmm8,xmm8,xmm10
  1910. xor rdi,r11
  1911. ror r14,28
  1912. vpsrlq xmm10,xmm4,6
  1913. add rbx,r9
  1914. add r9,rdi
  1915. vpaddq xmm5,xmm5,xmm8
  1916. mov r13,rbx
  1917. add r14,r9
  1918. DB 143,72,120,195,203,42
  1919. ror r13,23
  1920. mov r9,r14
  1921. vpxor xmm11,xmm11,xmm10
  1922. mov r12,rcx
  1923. ror r14,5
  1924. xor r13,rbx
  1925. xor r12,rdx
  1926. vpxor xmm11,xmm11,xmm9
  1927. ror r13,4
  1928. xor r14,r9
  1929. and r12,rbx
  1930. xor r13,rbx
  1931. vpaddq xmm5,xmm5,xmm11
  1932. add r8,QWORD PTR[88+rsp]
  1933. mov rdi,r9
  1934. xor r12,rdx
  1935. ror r14,6
  1936. vpaddq xmm10,xmm5,XMMWORD PTR[32+rbp]
  1937. xor rdi,r10
  1938. add r8,r12
  1939. ror r13,14
  1940. and r15,rdi
  1941. xor r14,r9
  1942. add r8,r13
  1943. xor r15,r10
  1944. ror r14,28
  1945. add rax,r8
  1946. add r8,r15
  1947. mov r13,rax
  1948. add r14,r8
  1949. vmovdqa XMMWORD PTR[80+rsp],xmm10
  1950. vpalignr xmm8,xmm7,xmm6,8
  1951. ror r13,23
  1952. mov r8,r14
  1953. vpalignr xmm11,xmm3,xmm2,8
  1954. mov r12,rbx
  1955. ror r14,5
  1956. DB 143,72,120,195,200,56
  1957. xor r13,rax
  1958. xor r12,rcx
  1959. vpsrlq xmm8,xmm8,7
  1960. ror r13,4
  1961. xor r14,r8
  1962. vpaddq xmm6,xmm6,xmm11
  1963. and r12,rax
  1964. xor r13,rax
  1965. add rdx,QWORD PTR[96+rsp]
  1966. mov r15,r8
  1967. DB 143,72,120,195,209,7
  1968. xor r12,rcx
  1969. ror r14,6
  1970. vpxor xmm8,xmm8,xmm9
  1971. xor r15,r9
  1972. add rdx,r12
  1973. ror r13,14
  1974. and rdi,r15
  1975. DB 143,104,120,195,221,3
  1976. xor r14,r8
  1977. add rdx,r13
  1978. vpxor xmm8,xmm8,xmm10
  1979. xor rdi,r9
  1980. ror r14,28
  1981. vpsrlq xmm10,xmm5,6
  1982. add r11,rdx
  1983. add rdx,rdi
  1984. vpaddq xmm6,xmm6,xmm8
  1985. mov r13,r11
  1986. add r14,rdx
  1987. DB 143,72,120,195,203,42
  1988. ror r13,23
  1989. mov rdx,r14
  1990. vpxor xmm11,xmm11,xmm10
  1991. mov r12,rax
  1992. ror r14,5
  1993. xor r13,r11
  1994. xor r12,rbx
  1995. vpxor xmm11,xmm11,xmm9
  1996. ror r13,4
  1997. xor r14,rdx
  1998. and r12,r11
  1999. xor r13,r11
  2000. vpaddq xmm6,xmm6,xmm11
  2001. add rcx,QWORD PTR[104+rsp]
  2002. mov rdi,rdx
  2003. xor r12,rbx
  2004. ror r14,6
  2005. vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
  2006. xor rdi,r8
  2007. add rcx,r12
  2008. ror r13,14
  2009. and r15,rdi
  2010. xor r14,rdx
  2011. add rcx,r13
  2012. xor r15,r8
  2013. ror r14,28
  2014. add r10,rcx
  2015. add rcx,r15
  2016. mov r13,r10
  2017. add r14,rcx
  2018. vmovdqa XMMWORD PTR[96+rsp],xmm10
  2019. vpalignr xmm8,xmm0,xmm7,8
  2020. ror r13,23
  2021. mov rcx,r14
  2022. vpalignr xmm11,xmm4,xmm3,8
  2023. mov r12,r11
  2024. ror r14,5
  2025. DB 143,72,120,195,200,56
  2026. xor r13,r10
  2027. xor r12,rax
  2028. vpsrlq xmm8,xmm8,7
  2029. ror r13,4
  2030. xor r14,rcx
  2031. vpaddq xmm7,xmm7,xmm11
  2032. and r12,r10
  2033. xor r13,r10
  2034. add rbx,QWORD PTR[112+rsp]
  2035. mov r15,rcx
  2036. DB 143,72,120,195,209,7
  2037. xor r12,rax
  2038. ror r14,6
  2039. vpxor xmm8,xmm8,xmm9
  2040. xor r15,rdx
  2041. add rbx,r12
  2042. ror r13,14
  2043. and rdi,r15
  2044. DB 143,104,120,195,222,3
  2045. xor r14,rcx
  2046. add rbx,r13
  2047. vpxor xmm8,xmm8,xmm10
  2048. xor rdi,rdx
  2049. ror r14,28
  2050. vpsrlq xmm10,xmm6,6
  2051. add r9,rbx
  2052. add rbx,rdi
  2053. vpaddq xmm7,xmm7,xmm8
  2054. mov r13,r9
  2055. add r14,rbx
  2056. DB 143,72,120,195,203,42
  2057. ror r13,23
  2058. mov rbx,r14
  2059. vpxor xmm11,xmm11,xmm10
  2060. mov r12,r10
  2061. ror r14,5
  2062. xor r13,r9
  2063. xor r12,r11
  2064. vpxor xmm11,xmm11,xmm9
  2065. ror r13,4
  2066. xor r14,rbx
  2067. and r12,r9
  2068. xor r13,r9
  2069. vpaddq xmm7,xmm7,xmm11
  2070. add rax,QWORD PTR[120+rsp]
  2071. mov rdi,rbx
  2072. xor r12,r11
  2073. ror r14,6
  2074. vpaddq xmm10,xmm7,XMMWORD PTR[96+rbp]
  2075. xor rdi,rcx
  2076. add rax,r12
  2077. ror r13,14
  2078. and r15,rdi
  2079. xor r14,rbx
  2080. add rax,r13
  2081. xor r15,rcx
  2082. ror r14,28
  2083. add r8,rax
  2084. add rax,r15
  2085. mov r13,r8
  2086. add r14,rax
  2087. vmovdqa XMMWORD PTR[112+rsp],xmm10
  2088. cmp BYTE PTR[135+rbp],0
  2089. jne $L$xop_00_47
  2090. ror r13,23
  2091. mov rax,r14
  2092. mov r12,r9
  2093. ror r14,5
  2094. xor r13,r8
  2095. xor r12,r10
  2096. ror r13,4
  2097. xor r14,rax
  2098. and r12,r8
  2099. xor r13,r8
  2100. add r11,QWORD PTR[rsp]
  2101. mov r15,rax
  2102. xor r12,r10
  2103. ror r14,6
  2104. xor r15,rbx
  2105. add r11,r12
  2106. ror r13,14
  2107. and rdi,r15
  2108. xor r14,rax
  2109. add r11,r13
  2110. xor rdi,rbx
  2111. ror r14,28
  2112. add rdx,r11
  2113. add r11,rdi
  2114. mov r13,rdx
  2115. add r14,r11
  2116. ror r13,23
  2117. mov r11,r14
  2118. mov r12,r8
  2119. ror r14,5
  2120. xor r13,rdx
  2121. xor r12,r9
  2122. ror r13,4
  2123. xor r14,r11
  2124. and r12,rdx
  2125. xor r13,rdx
  2126. add r10,QWORD PTR[8+rsp]
  2127. mov rdi,r11
  2128. xor r12,r9
  2129. ror r14,6
  2130. xor rdi,rax
  2131. add r10,r12
  2132. ror r13,14
  2133. and r15,rdi
  2134. xor r14,r11
  2135. add r10,r13
  2136. xor r15,rax
  2137. ror r14,28
  2138. add rcx,r10
  2139. add r10,r15
  2140. mov r13,rcx
  2141. add r14,r10
  2142. ror r13,23
  2143. mov r10,r14
  2144. mov r12,rdx
  2145. ror r14,5
  2146. xor r13,rcx
  2147. xor r12,r8
  2148. ror r13,4
  2149. xor r14,r10
  2150. and r12,rcx
  2151. xor r13,rcx
  2152. add r9,QWORD PTR[16+rsp]
  2153. mov r15,r10
  2154. xor r12,r8
  2155. ror r14,6
  2156. xor r15,r11
  2157. add r9,r12
  2158. ror r13,14
  2159. and rdi,r15
  2160. xor r14,r10
  2161. add r9,r13
  2162. xor rdi,r11
  2163. ror r14,28
  2164. add rbx,r9
  2165. add r9,rdi
  2166. mov r13,rbx
  2167. add r14,r9
  2168. ror r13,23
  2169. mov r9,r14
  2170. mov r12,rcx
  2171. ror r14,5
  2172. xor r13,rbx
  2173. xor r12,rdx
  2174. ror r13,4
  2175. xor r14,r9
  2176. and r12,rbx
  2177. xor r13,rbx
  2178. add r8,QWORD PTR[24+rsp]
  2179. mov rdi,r9
  2180. xor r12,rdx
  2181. ror r14,6
  2182. xor rdi,r10
  2183. add r8,r12
  2184. ror r13,14
  2185. and r15,rdi
  2186. xor r14,r9
  2187. add r8,r13
  2188. xor r15,r10
  2189. ror r14,28
  2190. add rax,r8
  2191. add r8,r15
  2192. mov r13,rax
  2193. add r14,r8
  2194. ror r13,23
  2195. mov r8,r14
  2196. mov r12,rbx
  2197. ror r14,5
  2198. xor r13,rax
  2199. xor r12,rcx
  2200. ror r13,4
  2201. xor r14,r8
  2202. and r12,rax
  2203. xor r13,rax
  2204. add rdx,QWORD PTR[32+rsp]
  2205. mov r15,r8
  2206. xor r12,rcx
  2207. ror r14,6
  2208. xor r15,r9
  2209. add rdx,r12
  2210. ror r13,14
  2211. and rdi,r15
  2212. xor r14,r8
  2213. add rdx,r13
  2214. xor rdi,r9
  2215. ror r14,28
  2216. add r11,rdx
  2217. add rdx,rdi
  2218. mov r13,r11
  2219. add r14,rdx
  2220. ror r13,23
  2221. mov rdx,r14
  2222. mov r12,rax
  2223. ror r14,5
  2224. xor r13,r11
  2225. xor r12,rbx
  2226. ror r13,4
  2227. xor r14,rdx
  2228. and r12,r11
  2229. xor r13,r11
  2230. add rcx,QWORD PTR[40+rsp]
  2231. mov rdi,rdx
  2232. xor r12,rbx
  2233. ror r14,6
  2234. xor rdi,r8
  2235. add rcx,r12
  2236. ror r13,14
  2237. and r15,rdi
  2238. xor r14,rdx
  2239. add rcx,r13
  2240. xor r15,r8
  2241. ror r14,28
  2242. add r10,rcx
  2243. add rcx,r15
  2244. mov r13,r10
  2245. add r14,rcx
  2246. ror r13,23
  2247. mov rcx,r14
  2248. mov r12,r11
  2249. ror r14,5
  2250. xor r13,r10
  2251. xor r12,rax
  2252. ror r13,4
  2253. xor r14,rcx
  2254. and r12,r10
  2255. xor r13,r10
  2256. add rbx,QWORD PTR[48+rsp]
  2257. mov r15,rcx
  2258. xor r12,rax
  2259. ror r14,6
  2260. xor r15,rdx
  2261. add rbx,r12
  2262. ror r13,14
  2263. and rdi,r15
  2264. xor r14,rcx
  2265. add rbx,r13
  2266. xor rdi,rdx
  2267. ror r14,28
  2268. add r9,rbx
  2269. add rbx,rdi
  2270. mov r13,r9
  2271. add r14,rbx
  2272. ror r13,23
  2273. mov rbx,r14
  2274. mov r12,r10
  2275. ror r14,5
  2276. xor r13,r9
  2277. xor r12,r11
  2278. ror r13,4
  2279. xor r14,rbx
  2280. and r12,r9
  2281. xor r13,r9
  2282. add rax,QWORD PTR[56+rsp]
  2283. mov rdi,rbx
  2284. xor r12,r11
  2285. ror r14,6
  2286. xor rdi,rcx
  2287. add rax,r12
  2288. ror r13,14
  2289. and r15,rdi
  2290. xor r14,rbx
  2291. add rax,r13
  2292. xor r15,rcx
  2293. ror r14,28
  2294. add r8,rax
  2295. add rax,r15
  2296. mov r13,r8
  2297. add r14,rax
  2298. ror r13,23
  2299. mov rax,r14
  2300. mov r12,r9
  2301. ror r14,5
  2302. xor r13,r8
  2303. xor r12,r10
  2304. ror r13,4
  2305. xor r14,rax
  2306. and r12,r8
  2307. xor r13,r8
  2308. add r11,QWORD PTR[64+rsp]
  2309. mov r15,rax
  2310. xor r12,r10
  2311. ror r14,6
  2312. xor r15,rbx
  2313. add r11,r12
  2314. ror r13,14
  2315. and rdi,r15
  2316. xor r14,rax
  2317. add r11,r13
  2318. xor rdi,rbx
  2319. ror r14,28
  2320. add rdx,r11
  2321. add r11,rdi
  2322. mov r13,rdx
  2323. add r14,r11
  2324. ror r13,23
  2325. mov r11,r14
  2326. mov r12,r8
  2327. ror r14,5
  2328. xor r13,rdx
  2329. xor r12,r9
  2330. ror r13,4
  2331. xor r14,r11
  2332. and r12,rdx
  2333. xor r13,rdx
  2334. add r10,QWORD PTR[72+rsp]
  2335. mov rdi,r11
  2336. xor r12,r9
  2337. ror r14,6
  2338. xor rdi,rax
  2339. add r10,r12
  2340. ror r13,14
  2341. and r15,rdi
  2342. xor r14,r11
  2343. add r10,r13
  2344. xor r15,rax
  2345. ror r14,28
  2346. add rcx,r10
  2347. add r10,r15
  2348. mov r13,rcx
  2349. add r14,r10
  2350. ror r13,23
  2351. mov r10,r14
  2352. mov r12,rdx
  2353. ror r14,5
  2354. xor r13,rcx
  2355. xor r12,r8
  2356. ror r13,4
  2357. xor r14,r10
  2358. and r12,rcx
  2359. xor r13,rcx
  2360. add r9,QWORD PTR[80+rsp]
  2361. mov r15,r10
  2362. xor r12,r8
  2363. ror r14,6
  2364. xor r15,r11
  2365. add r9,r12
  2366. ror r13,14
  2367. and rdi,r15
  2368. xor r14,r10
  2369. add r9,r13
  2370. xor rdi,r11
  2371. ror r14,28
  2372. add rbx,r9
  2373. add r9,rdi
  2374. mov r13,rbx
  2375. add r14,r9
  2376. ror r13,23
  2377. mov r9,r14
  2378. mov r12,rcx
  2379. ror r14,5
  2380. xor r13,rbx
  2381. xor r12,rdx
  2382. ror r13,4
  2383. xor r14,r9
  2384. and r12,rbx
  2385. xor r13,rbx
  2386. add r8,QWORD PTR[88+rsp]
  2387. mov rdi,r9
  2388. xor r12,rdx
  2389. ror r14,6
  2390. xor rdi,r10
  2391. add r8,r12
  2392. ror r13,14
  2393. and r15,rdi
  2394. xor r14,r9
  2395. add r8,r13
  2396. xor r15,r10
  2397. ror r14,28
  2398. add rax,r8
  2399. add r8,r15
  2400. mov r13,rax
  2401. add r14,r8
  2402. ror r13,23
  2403. mov r8,r14
  2404. mov r12,rbx
  2405. ror r14,5
  2406. xor r13,rax
  2407. xor r12,rcx
  2408. ror r13,4
  2409. xor r14,r8
  2410. and r12,rax
  2411. xor r13,rax
  2412. add rdx,QWORD PTR[96+rsp]
  2413. mov r15,r8
  2414. xor r12,rcx
  2415. ror r14,6
  2416. xor r15,r9
  2417. add rdx,r12
  2418. ror r13,14
  2419. and rdi,r15
  2420. xor r14,r8
  2421. add rdx,r13
  2422. xor rdi,r9
  2423. ror r14,28
  2424. add r11,rdx
  2425. add rdx,rdi
  2426. mov r13,r11
  2427. add r14,rdx
  2428. ror r13,23
  2429. mov rdx,r14
  2430. mov r12,rax
  2431. ror r14,5
  2432. xor r13,r11
  2433. xor r12,rbx
  2434. ror r13,4
  2435. xor r14,rdx
  2436. and r12,r11
  2437. xor r13,r11
  2438. add rcx,QWORD PTR[104+rsp]
  2439. mov rdi,rdx
  2440. xor r12,rbx
  2441. ror r14,6
  2442. xor rdi,r8
  2443. add rcx,r12
  2444. ror r13,14
  2445. and r15,rdi
  2446. xor r14,rdx
  2447. add rcx,r13
  2448. xor r15,r8
  2449. ror r14,28
  2450. add r10,rcx
  2451. add rcx,r15
  2452. mov r13,r10
  2453. add r14,rcx
  2454. ror r13,23
  2455. mov rcx,r14
  2456. mov r12,r11
  2457. ror r14,5
  2458. xor r13,r10
  2459. xor r12,rax
  2460. ror r13,4
  2461. xor r14,rcx
  2462. and r12,r10
  2463. xor r13,r10
  2464. add rbx,QWORD PTR[112+rsp]
  2465. mov r15,rcx
  2466. xor r12,rax
  2467. ror r14,6
  2468. xor r15,rdx
  2469. add rbx,r12
  2470. ror r13,14
  2471. and rdi,r15
  2472. xor r14,rcx
  2473. add rbx,r13
  2474. xor rdi,rdx
  2475. ror r14,28
  2476. add r9,rbx
  2477. add rbx,rdi
  2478. mov r13,r9
  2479. add r14,rbx
  2480. ror r13,23
  2481. mov rbx,r14
  2482. mov r12,r10
  2483. ror r14,5
  2484. xor r13,r9
  2485. xor r12,r11
  2486. ror r13,4
  2487. xor r14,rbx
  2488. and r12,r9
  2489. xor r13,r9
  2490. add rax,QWORD PTR[120+rsp]
  2491. mov rdi,rbx
  2492. xor r12,r11
  2493. ror r14,6
  2494. xor rdi,rcx
  2495. add rax,r12
  2496. ror r13,14
  2497. and r15,rdi
  2498. xor r14,rbx
  2499. add rax,r13
  2500. xor r15,rcx
  2501. ror r14,28
  2502. add r8,rax
  2503. add rax,r15
  2504. mov r13,r8
  2505. add r14,rax
  2506. mov rdi,QWORD PTR[((128+0))+rsp]
  2507. mov rax,r14
  2508. add rax,QWORD PTR[rdi]
  2509. lea rsi,QWORD PTR[128+rsi]
  2510. add rbx,QWORD PTR[8+rdi]
  2511. add rcx,QWORD PTR[16+rdi]
  2512. add rdx,QWORD PTR[24+rdi]
  2513. add r8,QWORD PTR[32+rdi]
  2514. add r9,QWORD PTR[40+rdi]
  2515. add r10,QWORD PTR[48+rdi]
  2516. add r11,QWORD PTR[56+rdi]
  2517. cmp rsi,QWORD PTR[((128+16))+rsp]
  2518. mov QWORD PTR[rdi],rax
  2519. mov QWORD PTR[8+rdi],rbx
  2520. mov QWORD PTR[16+rdi],rcx
  2521. mov QWORD PTR[24+rdi],rdx
  2522. mov QWORD PTR[32+rdi],r8
  2523. mov QWORD PTR[40+rdi],r9
  2524. mov QWORD PTR[48+rdi],r10
  2525. mov QWORD PTR[56+rdi],r11
  2526. jb $L$loop_xop
  2527. mov rsi,QWORD PTR[152+rsp]
  2528. vzeroupper
  2529. movaps xmm6,XMMWORD PTR[((128+32))+rsp]
  2530. movaps xmm7,XMMWORD PTR[((128+48))+rsp]
  2531. movaps xmm8,XMMWORD PTR[((128+64))+rsp]
  2532. movaps xmm9,XMMWORD PTR[((128+80))+rsp]
  2533. movaps xmm10,XMMWORD PTR[((128+96))+rsp]
  2534. movaps xmm11,XMMWORD PTR[((128+112))+rsp]
  2535. mov r15,QWORD PTR[((-48))+rsi]
  2536. mov r14,QWORD PTR[((-40))+rsi]
  2537. mov r13,QWORD PTR[((-32))+rsi]
  2538. mov r12,QWORD PTR[((-24))+rsi]
  2539. mov rbp,QWORD PTR[((-16))+rsi]
  2540. mov rbx,QWORD PTR[((-8))+rsi]
  2541. lea rsp,QWORD PTR[rsi]
  2542. $L$epilogue_xop::
  2543. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  2544. mov rsi,QWORD PTR[16+rsp]
  2545. DB 0F3h,0C3h ;repret
  2546. $L$SEH_end_sha512_block_data_order_xop::
  2547. sha512_block_data_order_xop ENDP
  2548. ALIGN 64
  2549. sha512_block_data_order_avx PROC PRIVATE
  2550. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  2551. mov QWORD PTR[16+rsp],rsi
  2552. mov rax,rsp
  2553. $L$SEH_begin_sha512_block_data_order_avx::
  2554. mov rdi,rcx
  2555. mov rsi,rdx
  2556. mov rdx,r8
  2557. $L$avx_shortcut::
  2558. mov rax,rsp
  2559. push rbx
  2560. push rbp
  2561. push r12
  2562. push r13
  2563. push r14
  2564. push r15
  2565. shl rdx,4
  2566. sub rsp,256
  2567. lea rdx,QWORD PTR[rdx*8+rsi]
  2568. and rsp,-64
  2569. mov QWORD PTR[((128+0))+rsp],rdi
  2570. mov QWORD PTR[((128+8))+rsp],rsi
  2571. mov QWORD PTR[((128+16))+rsp],rdx
  2572. mov QWORD PTR[152+rsp],rax
  2573. movaps XMMWORD PTR[(128+32)+rsp],xmm6
  2574. movaps XMMWORD PTR[(128+48)+rsp],xmm7
  2575. movaps XMMWORD PTR[(128+64)+rsp],xmm8
  2576. movaps XMMWORD PTR[(128+80)+rsp],xmm9
  2577. movaps XMMWORD PTR[(128+96)+rsp],xmm10
  2578. movaps XMMWORD PTR[(128+112)+rsp],xmm11
  2579. $L$prologue_avx::
  2580. vzeroupper
  2581. mov rax,QWORD PTR[rdi]
  2582. mov rbx,QWORD PTR[8+rdi]
  2583. mov rcx,QWORD PTR[16+rdi]
  2584. mov rdx,QWORD PTR[24+rdi]
  2585. mov r8,QWORD PTR[32+rdi]
  2586. mov r9,QWORD PTR[40+rdi]
  2587. mov r10,QWORD PTR[48+rdi]
  2588. mov r11,QWORD PTR[56+rdi]
  2589. jmp $L$loop_avx
  2590. ALIGN 16
  2591. $L$loop_avx::
  2592. vmovdqa xmm11,XMMWORD PTR[((K512+1280))]
  2593. vmovdqu xmm0,XMMWORD PTR[rsi]
  2594. lea rbp,QWORD PTR[((K512+128))]
  2595. vmovdqu xmm1,XMMWORD PTR[16+rsi]
  2596. vmovdqu xmm2,XMMWORD PTR[32+rsi]
  2597. vpshufb xmm0,xmm0,xmm11
  2598. vmovdqu xmm3,XMMWORD PTR[48+rsi]
  2599. vpshufb xmm1,xmm1,xmm11
  2600. vmovdqu xmm4,XMMWORD PTR[64+rsi]
  2601. vpshufb xmm2,xmm2,xmm11
  2602. vmovdqu xmm5,XMMWORD PTR[80+rsi]
  2603. vpshufb xmm3,xmm3,xmm11
  2604. vmovdqu xmm6,XMMWORD PTR[96+rsi]
  2605. vpshufb xmm4,xmm4,xmm11
  2606. vmovdqu xmm7,XMMWORD PTR[112+rsi]
  2607. vpshufb xmm5,xmm5,xmm11
  2608. vpaddq xmm8,xmm0,XMMWORD PTR[((-128))+rbp]
  2609. vpshufb xmm6,xmm6,xmm11
  2610. vpaddq xmm9,xmm1,XMMWORD PTR[((-96))+rbp]
  2611. vpshufb xmm7,xmm7,xmm11
  2612. vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
  2613. vpaddq xmm11,xmm3,XMMWORD PTR[((-32))+rbp]
  2614. vmovdqa XMMWORD PTR[rsp],xmm8
  2615. vpaddq xmm8,xmm4,XMMWORD PTR[rbp]
  2616. vmovdqa XMMWORD PTR[16+rsp],xmm9
  2617. vpaddq xmm9,xmm5,XMMWORD PTR[32+rbp]
  2618. vmovdqa XMMWORD PTR[32+rsp],xmm10
  2619. vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
  2620. vmovdqa XMMWORD PTR[48+rsp],xmm11
  2621. vpaddq xmm11,xmm7,XMMWORD PTR[96+rbp]
  2622. vmovdqa XMMWORD PTR[64+rsp],xmm8
  2623. mov r14,rax
  2624. vmovdqa XMMWORD PTR[80+rsp],xmm9
  2625. mov rdi,rbx
  2626. vmovdqa XMMWORD PTR[96+rsp],xmm10
  2627. xor rdi,rcx
  2628. vmovdqa XMMWORD PTR[112+rsp],xmm11
  2629. mov r13,r8
  2630. jmp $L$avx_00_47
  2631. ALIGN 16
  2632. $L$avx_00_47::
  2633. add rbp,256
  2634. vpalignr xmm8,xmm1,xmm0,8
  2635. shrd r13,r13,23
  2636. mov rax,r14
  2637. vpalignr xmm11,xmm5,xmm4,8
  2638. mov r12,r9
  2639. shrd r14,r14,5
  2640. vpsrlq xmm10,xmm8,1
  2641. xor r13,r8
  2642. xor r12,r10
  2643. vpaddq xmm0,xmm0,xmm11
  2644. shrd r13,r13,4
  2645. xor r14,rax
  2646. vpsrlq xmm11,xmm8,7
  2647. and r12,r8
  2648. xor r13,r8
  2649. vpsllq xmm9,xmm8,56
  2650. add r11,QWORD PTR[rsp]
  2651. mov r15,rax
  2652. vpxor xmm8,xmm11,xmm10
  2653. xor r12,r10
  2654. shrd r14,r14,6
  2655. vpsrlq xmm10,xmm10,7
  2656. xor r15,rbx
  2657. add r11,r12
  2658. vpxor xmm8,xmm8,xmm9
  2659. shrd r13,r13,14
  2660. and rdi,r15
  2661. vpsllq xmm9,xmm9,7
  2662. xor r14,rax
  2663. add r11,r13
  2664. vpxor xmm8,xmm8,xmm10
  2665. xor rdi,rbx
  2666. shrd r14,r14,28
  2667. vpsrlq xmm11,xmm7,6
  2668. add rdx,r11
  2669. add r11,rdi
  2670. vpxor xmm8,xmm8,xmm9
  2671. mov r13,rdx
  2672. add r14,r11
  2673. vpsllq xmm10,xmm7,3
  2674. shrd r13,r13,23
  2675. mov r11,r14
  2676. vpaddq xmm0,xmm0,xmm8
  2677. mov r12,r8
  2678. shrd r14,r14,5
  2679. vpsrlq xmm9,xmm7,19
  2680. xor r13,rdx
  2681. xor r12,r9
  2682. vpxor xmm11,xmm11,xmm10
  2683. shrd r13,r13,4
  2684. xor r14,r11
  2685. vpsllq xmm10,xmm10,42
  2686. and r12,rdx
  2687. xor r13,rdx
  2688. vpxor xmm11,xmm11,xmm9
  2689. add r10,QWORD PTR[8+rsp]
  2690. mov rdi,r11
  2691. vpsrlq xmm9,xmm9,42
  2692. xor r12,r9
  2693. shrd r14,r14,6
  2694. vpxor xmm11,xmm11,xmm10
  2695. xor rdi,rax
  2696. add r10,r12
  2697. vpxor xmm11,xmm11,xmm9
  2698. shrd r13,r13,14
  2699. and r15,rdi
  2700. vpaddq xmm0,xmm0,xmm11
  2701. xor r14,r11
  2702. add r10,r13
  2703. vpaddq xmm10,xmm0,XMMWORD PTR[((-128))+rbp]
  2704. xor r15,rax
  2705. shrd r14,r14,28
  2706. add rcx,r10
  2707. add r10,r15
  2708. mov r13,rcx
  2709. add r14,r10
  2710. vmovdqa XMMWORD PTR[rsp],xmm10
  2711. vpalignr xmm8,xmm2,xmm1,8
  2712. shrd r13,r13,23
  2713. mov r10,r14
  2714. vpalignr xmm11,xmm6,xmm5,8
  2715. mov r12,rdx
  2716. shrd r14,r14,5
  2717. vpsrlq xmm10,xmm8,1
  2718. xor r13,rcx
  2719. xor r12,r8
  2720. vpaddq xmm1,xmm1,xmm11
  2721. shrd r13,r13,4
  2722. xor r14,r10
  2723. vpsrlq xmm11,xmm8,7
  2724. and r12,rcx
  2725. xor r13,rcx
  2726. vpsllq xmm9,xmm8,56
  2727. add r9,QWORD PTR[16+rsp]
  2728. mov r15,r10
  2729. vpxor xmm8,xmm11,xmm10
  2730. xor r12,r8
  2731. shrd r14,r14,6
  2732. vpsrlq xmm10,xmm10,7
  2733. xor r15,r11
  2734. add r9,r12
  2735. vpxor xmm8,xmm8,xmm9
  2736. shrd r13,r13,14
  2737. and rdi,r15
  2738. vpsllq xmm9,xmm9,7
  2739. xor r14,r10
  2740. add r9,r13
  2741. vpxor xmm8,xmm8,xmm10
  2742. xor rdi,r11
  2743. shrd r14,r14,28
  2744. vpsrlq xmm11,xmm0,6
  2745. add rbx,r9
  2746. add r9,rdi
  2747. vpxor xmm8,xmm8,xmm9
  2748. mov r13,rbx
  2749. add r14,r9
  2750. vpsllq xmm10,xmm0,3
  2751. shrd r13,r13,23
  2752. mov r9,r14
  2753. vpaddq xmm1,xmm1,xmm8
  2754. mov r12,rcx
  2755. shrd r14,r14,5
  2756. vpsrlq xmm9,xmm0,19
  2757. xor r13,rbx
  2758. xor r12,rdx
  2759. vpxor xmm11,xmm11,xmm10
  2760. shrd r13,r13,4
  2761. xor r14,r9
  2762. vpsllq xmm10,xmm10,42
  2763. and r12,rbx
  2764. xor r13,rbx
  2765. vpxor xmm11,xmm11,xmm9
  2766. add r8,QWORD PTR[24+rsp]
  2767. mov rdi,r9
  2768. vpsrlq xmm9,xmm9,42
  2769. xor r12,rdx
  2770. shrd r14,r14,6
  2771. vpxor xmm11,xmm11,xmm10
  2772. xor rdi,r10
  2773. add r8,r12
  2774. vpxor xmm11,xmm11,xmm9
  2775. shrd r13,r13,14
  2776. and r15,rdi
  2777. vpaddq xmm1,xmm1,xmm11
  2778. xor r14,r9
  2779. add r8,r13
  2780. vpaddq xmm10,xmm1,XMMWORD PTR[((-96))+rbp]
  2781. xor r15,r10
  2782. shrd r14,r14,28
  2783. add rax,r8
  2784. add r8,r15
  2785. mov r13,rax
  2786. add r14,r8
  2787. vmovdqa XMMWORD PTR[16+rsp],xmm10
  2788. vpalignr xmm8,xmm3,xmm2,8
  2789. shrd r13,r13,23
  2790. mov r8,r14
  2791. vpalignr xmm11,xmm7,xmm6,8
  2792. mov r12,rbx
  2793. shrd r14,r14,5
  2794. vpsrlq xmm10,xmm8,1
  2795. xor r13,rax
  2796. xor r12,rcx
  2797. vpaddq xmm2,xmm2,xmm11
  2798. shrd r13,r13,4
  2799. xor r14,r8
  2800. vpsrlq xmm11,xmm8,7
  2801. and r12,rax
  2802. xor r13,rax
  2803. vpsllq xmm9,xmm8,56
  2804. add rdx,QWORD PTR[32+rsp]
  2805. mov r15,r8
  2806. vpxor xmm8,xmm11,xmm10
  2807. xor r12,rcx
  2808. shrd r14,r14,6
  2809. vpsrlq xmm10,xmm10,7
  2810. xor r15,r9
  2811. add rdx,r12
  2812. vpxor xmm8,xmm8,xmm9
  2813. shrd r13,r13,14
  2814. and rdi,r15
  2815. vpsllq xmm9,xmm9,7
  2816. xor r14,r8
  2817. add rdx,r13
  2818. vpxor xmm8,xmm8,xmm10
  2819. xor rdi,r9
  2820. shrd r14,r14,28
  2821. vpsrlq xmm11,xmm1,6
  2822. add r11,rdx
  2823. add rdx,rdi
  2824. vpxor xmm8,xmm8,xmm9
  2825. mov r13,r11
  2826. add r14,rdx
  2827. vpsllq xmm10,xmm1,3
  2828. shrd r13,r13,23
  2829. mov rdx,r14
  2830. vpaddq xmm2,xmm2,xmm8
  2831. mov r12,rax
  2832. shrd r14,r14,5
  2833. vpsrlq xmm9,xmm1,19
  2834. xor r13,r11
  2835. xor r12,rbx
  2836. vpxor xmm11,xmm11,xmm10
  2837. shrd r13,r13,4
  2838. xor r14,rdx
  2839. vpsllq xmm10,xmm10,42
  2840. and r12,r11
  2841. xor r13,r11
  2842. vpxor xmm11,xmm11,xmm9
  2843. add rcx,QWORD PTR[40+rsp]
  2844. mov rdi,rdx
  2845. vpsrlq xmm9,xmm9,42
  2846. xor r12,rbx
  2847. shrd r14,r14,6
  2848. vpxor xmm11,xmm11,xmm10
  2849. xor rdi,r8
  2850. add rcx,r12
  2851. vpxor xmm11,xmm11,xmm9
  2852. shrd r13,r13,14
  2853. and r15,rdi
  2854. vpaddq xmm2,xmm2,xmm11
  2855. xor r14,rdx
  2856. add rcx,r13
  2857. vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
  2858. xor r15,r8
  2859. shrd r14,r14,28
  2860. add r10,rcx
  2861. add rcx,r15
  2862. mov r13,r10
  2863. add r14,rcx
  2864. vmovdqa XMMWORD PTR[32+rsp],xmm10
  2865. vpalignr xmm8,xmm4,xmm3,8
  2866. shrd r13,r13,23
  2867. mov rcx,r14
  2868. vpalignr xmm11,xmm0,xmm7,8
  2869. mov r12,r11
  2870. shrd r14,r14,5
  2871. vpsrlq xmm10,xmm8,1
  2872. xor r13,r10
  2873. xor r12,rax
  2874. vpaddq xmm3,xmm3,xmm11
  2875. shrd r13,r13,4
  2876. xor r14,rcx
  2877. vpsrlq xmm11,xmm8,7
  2878. and r12,r10
  2879. xor r13,r10
  2880. vpsllq xmm9,xmm8,56
  2881. add rbx,QWORD PTR[48+rsp]
  2882. mov r15,rcx
  2883. vpxor xmm8,xmm11,xmm10
  2884. xor r12,rax
  2885. shrd r14,r14,6
  2886. vpsrlq xmm10,xmm10,7
  2887. xor r15,rdx
  2888. add rbx,r12
  2889. vpxor xmm8,xmm8,xmm9
  2890. shrd r13,r13,14
  2891. and rdi,r15
  2892. vpsllq xmm9,xmm9,7
  2893. xor r14,rcx
  2894. add rbx,r13
  2895. vpxor xmm8,xmm8,xmm10
  2896. xor rdi,rdx
  2897. shrd r14,r14,28
  2898. vpsrlq xmm11,xmm2,6
  2899. add r9,rbx
  2900. add rbx,rdi
  2901. vpxor xmm8,xmm8,xmm9
  2902. mov r13,r9
  2903. add r14,rbx
  2904. vpsllq xmm10,xmm2,3
  2905. shrd r13,r13,23
  2906. mov rbx,r14
  2907. vpaddq xmm3,xmm3,xmm8
  2908. mov r12,r10
  2909. shrd r14,r14,5
  2910. vpsrlq xmm9,xmm2,19
  2911. xor r13,r9
  2912. xor r12,r11
  2913. vpxor xmm11,xmm11,xmm10
  2914. shrd r13,r13,4
  2915. xor r14,rbx
  2916. vpsllq xmm10,xmm10,42
  2917. and r12,r9
  2918. xor r13,r9
  2919. vpxor xmm11,xmm11,xmm9
  2920. add rax,QWORD PTR[56+rsp]
  2921. mov rdi,rbx
  2922. vpsrlq xmm9,xmm9,42
  2923. xor r12,r11
  2924. shrd r14,r14,6
  2925. vpxor xmm11,xmm11,xmm10
  2926. xor rdi,rcx
  2927. add rax,r12
  2928. vpxor xmm11,xmm11,xmm9
  2929. shrd r13,r13,14
  2930. and r15,rdi
  2931. vpaddq xmm3,xmm3,xmm11
  2932. xor r14,rbx
  2933. add rax,r13
  2934. vpaddq xmm10,xmm3,XMMWORD PTR[((-32))+rbp]
  2935. xor r15,rcx
  2936. shrd r14,r14,28
  2937. add r8,rax
  2938. add rax,r15
  2939. mov r13,r8
  2940. add r14,rax
  2941. vmovdqa XMMWORD PTR[48+rsp],xmm10
  2942. vpalignr xmm8,xmm5,xmm4,8
  2943. shrd r13,r13,23
  2944. mov rax,r14
  2945. vpalignr xmm11,xmm1,xmm0,8
  2946. mov r12,r9
  2947. shrd r14,r14,5
  2948. vpsrlq xmm10,xmm8,1
  2949. xor r13,r8
  2950. xor r12,r10
  2951. vpaddq xmm4,xmm4,xmm11
  2952. shrd r13,r13,4
  2953. xor r14,rax
  2954. vpsrlq xmm11,xmm8,7
  2955. and r12,r8
  2956. xor r13,r8
  2957. vpsllq xmm9,xmm8,56
  2958. add r11,QWORD PTR[64+rsp]
  2959. mov r15,rax
  2960. vpxor xmm8,xmm11,xmm10
  2961. xor r12,r10
  2962. shrd r14,r14,6
  2963. vpsrlq xmm10,xmm10,7
  2964. xor r15,rbx
  2965. add r11,r12
  2966. vpxor xmm8,xmm8,xmm9
  2967. shrd r13,r13,14
  2968. and rdi,r15
  2969. vpsllq xmm9,xmm9,7
  2970. xor r14,rax
  2971. add r11,r13
  2972. vpxor xmm8,xmm8,xmm10
  2973. xor rdi,rbx
  2974. shrd r14,r14,28
  2975. vpsrlq xmm11,xmm3,6
  2976. add rdx,r11
  2977. add r11,rdi
  2978. vpxor xmm8,xmm8,xmm9
  2979. mov r13,rdx
  2980. add r14,r11
  2981. vpsllq xmm10,xmm3,3
  2982. shrd r13,r13,23
  2983. mov r11,r14
  2984. vpaddq xmm4,xmm4,xmm8
  2985. mov r12,r8
  2986. shrd r14,r14,5
  2987. vpsrlq xmm9,xmm3,19
  2988. xor r13,rdx
  2989. xor r12,r9
  2990. vpxor xmm11,xmm11,xmm10
  2991. shrd r13,r13,4
  2992. xor r14,r11
  2993. vpsllq xmm10,xmm10,42
  2994. and r12,rdx
  2995. xor r13,rdx
  2996. vpxor xmm11,xmm11,xmm9
  2997. add r10,QWORD PTR[72+rsp]
  2998. mov rdi,r11
  2999. vpsrlq xmm9,xmm9,42
  3000. xor r12,r9
  3001. shrd r14,r14,6
  3002. vpxor xmm11,xmm11,xmm10
  3003. xor rdi,rax
  3004. add r10,r12
  3005. vpxor xmm11,xmm11,xmm9
  3006. shrd r13,r13,14
  3007. and r15,rdi
  3008. vpaddq xmm4,xmm4,xmm11
  3009. xor r14,r11
  3010. add r10,r13
  3011. vpaddq xmm10,xmm4,XMMWORD PTR[rbp]
  3012. xor r15,rax
  3013. shrd r14,r14,28
  3014. add rcx,r10
  3015. add r10,r15
  3016. mov r13,rcx
  3017. add r14,r10
  3018. vmovdqa XMMWORD PTR[64+rsp],xmm10
  3019. vpalignr xmm8,xmm6,xmm5,8
  3020. shrd r13,r13,23
  3021. mov r10,r14
  3022. vpalignr xmm11,xmm2,xmm1,8
  3023. mov r12,rdx
  3024. shrd r14,r14,5
  3025. vpsrlq xmm10,xmm8,1
  3026. xor r13,rcx
  3027. xor r12,r8
  3028. vpaddq xmm5,xmm5,xmm11
  3029. shrd r13,r13,4
  3030. xor r14,r10
  3031. vpsrlq xmm11,xmm8,7
  3032. and r12,rcx
  3033. xor r13,rcx
  3034. vpsllq xmm9,xmm8,56
  3035. add r9,QWORD PTR[80+rsp]
  3036. mov r15,r10
  3037. vpxor xmm8,xmm11,xmm10
  3038. xor r12,r8
  3039. shrd r14,r14,6
  3040. vpsrlq xmm10,xmm10,7
  3041. xor r15,r11
  3042. add r9,r12
  3043. vpxor xmm8,xmm8,xmm9
  3044. shrd r13,r13,14
  3045. and rdi,r15
  3046. vpsllq xmm9,xmm9,7
  3047. xor r14,r10
  3048. add r9,r13
  3049. vpxor xmm8,xmm8,xmm10
  3050. xor rdi,r11
  3051. shrd r14,r14,28
  3052. vpsrlq xmm11,xmm4,6
  3053. add rbx,r9
  3054. add r9,rdi
  3055. vpxor xmm8,xmm8,xmm9
  3056. mov r13,rbx
  3057. add r14,r9
  3058. vpsllq xmm10,xmm4,3
  3059. shrd r13,r13,23
  3060. mov r9,r14
  3061. vpaddq xmm5,xmm5,xmm8
  3062. mov r12,rcx
  3063. shrd r14,r14,5
  3064. vpsrlq xmm9,xmm4,19
  3065. xor r13,rbx
  3066. xor r12,rdx
  3067. vpxor xmm11,xmm11,xmm10
  3068. shrd r13,r13,4
  3069. xor r14,r9
  3070. vpsllq xmm10,xmm10,42
  3071. and r12,rbx
  3072. xor r13,rbx
  3073. vpxor xmm11,xmm11,xmm9
  3074. add r8,QWORD PTR[88+rsp]
  3075. mov rdi,r9
  3076. vpsrlq xmm9,xmm9,42
  3077. xor r12,rdx
  3078. shrd r14,r14,6
  3079. vpxor xmm11,xmm11,xmm10
  3080. xor rdi,r10
  3081. add r8,r12
  3082. vpxor xmm11,xmm11,xmm9
  3083. shrd r13,r13,14
  3084. and r15,rdi
  3085. vpaddq xmm5,xmm5,xmm11
  3086. xor r14,r9
  3087. add r8,r13
  3088. vpaddq xmm10,xmm5,XMMWORD PTR[32+rbp]
  3089. xor r15,r10
  3090. shrd r14,r14,28
  3091. add rax,r8
  3092. add r8,r15
  3093. mov r13,rax
  3094. add r14,r8
  3095. vmovdqa XMMWORD PTR[80+rsp],xmm10
  3096. vpalignr xmm8,xmm7,xmm6,8
  3097. shrd r13,r13,23
  3098. mov r8,r14
  3099. vpalignr xmm11,xmm3,xmm2,8
  3100. mov r12,rbx
  3101. shrd r14,r14,5
  3102. vpsrlq xmm10,xmm8,1
  3103. xor r13,rax
  3104. xor r12,rcx
  3105. vpaddq xmm6,xmm6,xmm11
  3106. shrd r13,r13,4
  3107. xor r14,r8
  3108. vpsrlq xmm11,xmm8,7
  3109. and r12,rax
  3110. xor r13,rax
  3111. vpsllq xmm9,xmm8,56
  3112. add rdx,QWORD PTR[96+rsp]
  3113. mov r15,r8
  3114. vpxor xmm8,xmm11,xmm10
  3115. xor r12,rcx
  3116. shrd r14,r14,6
  3117. vpsrlq xmm10,xmm10,7
  3118. xor r15,r9
  3119. add rdx,r12
  3120. vpxor xmm8,xmm8,xmm9
  3121. shrd r13,r13,14
  3122. and rdi,r15
  3123. vpsllq xmm9,xmm9,7
  3124. xor r14,r8
  3125. add rdx,r13
  3126. vpxor xmm8,xmm8,xmm10
  3127. xor rdi,r9
  3128. shrd r14,r14,28
  3129. vpsrlq xmm11,xmm5,6
  3130. add r11,rdx
  3131. add rdx,rdi
  3132. vpxor xmm8,xmm8,xmm9
  3133. mov r13,r11
  3134. add r14,rdx
  3135. vpsllq xmm10,xmm5,3
  3136. shrd r13,r13,23
  3137. mov rdx,r14
  3138. vpaddq xmm6,xmm6,xmm8
  3139. mov r12,rax
  3140. shrd r14,r14,5
  3141. vpsrlq xmm9,xmm5,19
  3142. xor r13,r11
  3143. xor r12,rbx
  3144. vpxor xmm11,xmm11,xmm10
  3145. shrd r13,r13,4
  3146. xor r14,rdx
  3147. vpsllq xmm10,xmm10,42
  3148. and r12,r11
  3149. xor r13,r11
  3150. vpxor xmm11,xmm11,xmm9
  3151. add rcx,QWORD PTR[104+rsp]
  3152. mov rdi,rdx
  3153. vpsrlq xmm9,xmm9,42
  3154. xor r12,rbx
  3155. shrd r14,r14,6
  3156. vpxor xmm11,xmm11,xmm10
  3157. xor rdi,r8
  3158. add rcx,r12
  3159. vpxor xmm11,xmm11,xmm9
  3160. shrd r13,r13,14
  3161. and r15,rdi
  3162. vpaddq xmm6,xmm6,xmm11
  3163. xor r14,rdx
  3164. add rcx,r13
  3165. vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
  3166. xor r15,r8
  3167. shrd r14,r14,28
  3168. add r10,rcx
  3169. add rcx,r15
  3170. mov r13,r10
  3171. add r14,rcx
  3172. vmovdqa XMMWORD PTR[96+rsp],xmm10
  3173. vpalignr xmm8,xmm0,xmm7,8
  3174. shrd r13,r13,23
  3175. mov rcx,r14
  3176. vpalignr xmm11,xmm4,xmm3,8
  3177. mov r12,r11
  3178. shrd r14,r14,5
  3179. vpsrlq xmm10,xmm8,1
  3180. xor r13,r10
  3181. xor r12,rax
  3182. vpaddq xmm7,xmm7,xmm11
  3183. shrd r13,r13,4
  3184. xor r14,rcx
  3185. vpsrlq xmm11,xmm8,7
  3186. and r12,r10
  3187. xor r13,r10
  3188. vpsllq xmm9,xmm8,56
  3189. add rbx,QWORD PTR[112+rsp]
  3190. mov r15,rcx
  3191. vpxor xmm8,xmm11,xmm10
  3192. xor r12,rax
  3193. shrd r14,r14,6
  3194. vpsrlq xmm10,xmm10,7
  3195. xor r15,rdx
  3196. add rbx,r12
  3197. vpxor xmm8,xmm8,xmm9
  3198. shrd r13,r13,14
  3199. and rdi,r15
  3200. vpsllq xmm9,xmm9,7
  3201. xor r14,rcx
  3202. add rbx,r13
  3203. vpxor xmm8,xmm8,xmm10
  3204. xor rdi,rdx
  3205. shrd r14,r14,28
  3206. vpsrlq xmm11,xmm6,6
  3207. add r9,rbx
  3208. add rbx,rdi
  3209. vpxor xmm8,xmm8,xmm9
  3210. mov r13,r9
  3211. add r14,rbx
  3212. vpsllq xmm10,xmm6,3
  3213. shrd r13,r13,23
  3214. mov rbx,r14
  3215. vpaddq xmm7,xmm7,xmm8
  3216. mov r12,r10
  3217. shrd r14,r14,5
  3218. vpsrlq xmm9,xmm6,19
  3219. xor r13,r9
  3220. xor r12,r11
  3221. vpxor xmm11,xmm11,xmm10
  3222. shrd r13,r13,4
  3223. xor r14,rbx
  3224. vpsllq xmm10,xmm10,42
  3225. and r12,r9
  3226. xor r13,r9
  3227. vpxor xmm11,xmm11,xmm9
  3228. add rax,QWORD PTR[120+rsp]
  3229. mov rdi,rbx
  3230. vpsrlq xmm9,xmm9,42
  3231. xor r12,r11
  3232. shrd r14,r14,6
  3233. vpxor xmm11,xmm11,xmm10
  3234. xor rdi,rcx
  3235. add rax,r12
  3236. vpxor xmm11,xmm11,xmm9
  3237. shrd r13,r13,14
  3238. and r15,rdi
  3239. vpaddq xmm7,xmm7,xmm11
  3240. xor r14,rbx
  3241. add rax,r13
  3242. vpaddq xmm10,xmm7,XMMWORD PTR[96+rbp]
  3243. xor r15,rcx
  3244. shrd r14,r14,28
  3245. add r8,rax
  3246. add rax,r15
  3247. mov r13,r8
  3248. add r14,rax
  3249. vmovdqa XMMWORD PTR[112+rsp],xmm10
  3250. cmp BYTE PTR[135+rbp],0
  3251. jne $L$avx_00_47
  3252. shrd r13,r13,23
  3253. mov rax,r14
  3254. mov r12,r9
  3255. shrd r14,r14,5
  3256. xor r13,r8
  3257. xor r12,r10
  3258. shrd r13,r13,4
  3259. xor r14,rax
  3260. and r12,r8
  3261. xor r13,r8
  3262. add r11,QWORD PTR[rsp]
  3263. mov r15,rax
  3264. xor r12,r10
  3265. shrd r14,r14,6
  3266. xor r15,rbx
  3267. add r11,r12
  3268. shrd r13,r13,14
  3269. and rdi,r15
  3270. xor r14,rax
  3271. add r11,r13
  3272. xor rdi,rbx
  3273. shrd r14,r14,28
  3274. add rdx,r11
  3275. add r11,rdi
  3276. mov r13,rdx
  3277. add r14,r11
  3278. shrd r13,r13,23
  3279. mov r11,r14
  3280. mov r12,r8
  3281. shrd r14,r14,5
  3282. xor r13,rdx
  3283. xor r12,r9
  3284. shrd r13,r13,4
  3285. xor r14,r11
  3286. and r12,rdx
  3287. xor r13,rdx
  3288. add r10,QWORD PTR[8+rsp]
  3289. mov rdi,r11
  3290. xor r12,r9
  3291. shrd r14,r14,6
  3292. xor rdi,rax
  3293. add r10,r12
  3294. shrd r13,r13,14
  3295. and r15,rdi
  3296. xor r14,r11
  3297. add r10,r13
  3298. xor r15,rax
  3299. shrd r14,r14,28
  3300. add rcx,r10
  3301. add r10,r15
  3302. mov r13,rcx
  3303. add r14,r10
  3304. shrd r13,r13,23
  3305. mov r10,r14
  3306. mov r12,rdx
  3307. shrd r14,r14,5
  3308. xor r13,rcx
  3309. xor r12,r8
  3310. shrd r13,r13,4
  3311. xor r14,r10
  3312. and r12,rcx
  3313. xor r13,rcx
  3314. add r9,QWORD PTR[16+rsp]
  3315. mov r15,r10
  3316. xor r12,r8
  3317. shrd r14,r14,6
  3318. xor r15,r11
  3319. add r9,r12
  3320. shrd r13,r13,14
  3321. and rdi,r15
  3322. xor r14,r10
  3323. add r9,r13
  3324. xor rdi,r11
  3325. shrd r14,r14,28
  3326. add rbx,r9
  3327. add r9,rdi
  3328. mov r13,rbx
  3329. add r14,r9
  3330. shrd r13,r13,23
  3331. mov r9,r14
  3332. mov r12,rcx
  3333. shrd r14,r14,5
  3334. xor r13,rbx
  3335. xor r12,rdx
  3336. shrd r13,r13,4
  3337. xor r14,r9
  3338. and r12,rbx
  3339. xor r13,rbx
  3340. add r8,QWORD PTR[24+rsp]
  3341. mov rdi,r9
  3342. xor r12,rdx
  3343. shrd r14,r14,6
  3344. xor rdi,r10
  3345. add r8,r12
  3346. shrd r13,r13,14
  3347. and r15,rdi
  3348. xor r14,r9
  3349. add r8,r13
  3350. xor r15,r10
  3351. shrd r14,r14,28
  3352. add rax,r8
  3353. add r8,r15
  3354. mov r13,rax
  3355. add r14,r8
  3356. shrd r13,r13,23
  3357. mov r8,r14
  3358. mov r12,rbx
  3359. shrd r14,r14,5
  3360. xor r13,rax
  3361. xor r12,rcx
  3362. shrd r13,r13,4
  3363. xor r14,r8
  3364. and r12,rax
  3365. xor r13,rax
  3366. add rdx,QWORD PTR[32+rsp]
  3367. mov r15,r8
  3368. xor r12,rcx
  3369. shrd r14,r14,6
  3370. xor r15,r9
  3371. add rdx,r12
  3372. shrd r13,r13,14
  3373. and rdi,r15
  3374. xor r14,r8
  3375. add rdx,r13
  3376. xor rdi,r9
  3377. shrd r14,r14,28
  3378. add r11,rdx
  3379. add rdx,rdi
  3380. mov r13,r11
  3381. add r14,rdx
  3382. shrd r13,r13,23
  3383. mov rdx,r14
  3384. mov r12,rax
  3385. shrd r14,r14,5
  3386. xor r13,r11
  3387. xor r12,rbx
  3388. shrd r13,r13,4
  3389. xor r14,rdx
  3390. and r12,r11
  3391. xor r13,r11
  3392. add rcx,QWORD PTR[40+rsp]
  3393. mov rdi,rdx
  3394. xor r12,rbx
  3395. shrd r14,r14,6
  3396. xor rdi,r8
  3397. add rcx,r12
  3398. shrd r13,r13,14
  3399. and r15,rdi
  3400. xor r14,rdx
  3401. add rcx,r13
  3402. xor r15,r8
  3403. shrd r14,r14,28
  3404. add r10,rcx
  3405. add rcx,r15
  3406. mov r13,r10
  3407. add r14,rcx
  3408. shrd r13,r13,23
  3409. mov rcx,r14
  3410. mov r12,r11
  3411. shrd r14,r14,5
  3412. xor r13,r10
  3413. xor r12,rax
  3414. shrd r13,r13,4
  3415. xor r14,rcx
  3416. and r12,r10
  3417. xor r13,r10
  3418. add rbx,QWORD PTR[48+rsp]
  3419. mov r15,rcx
  3420. xor r12,rax
  3421. shrd r14,r14,6
  3422. xor r15,rdx
  3423. add rbx,r12
  3424. shrd r13,r13,14
  3425. and rdi,r15
  3426. xor r14,rcx
  3427. add rbx,r13
  3428. xor rdi,rdx
  3429. shrd r14,r14,28
  3430. add r9,rbx
  3431. add rbx,rdi
  3432. mov r13,r9
  3433. add r14,rbx
  3434. shrd r13,r13,23
  3435. mov rbx,r14
  3436. mov r12,r10
  3437. shrd r14,r14,5
  3438. xor r13,r9
  3439. xor r12,r11
  3440. shrd r13,r13,4
  3441. xor r14,rbx
  3442. and r12,r9
  3443. xor r13,r9
  3444. add rax,QWORD PTR[56+rsp]
  3445. mov rdi,rbx
  3446. xor r12,r11
  3447. shrd r14,r14,6
  3448. xor rdi,rcx
  3449. add rax,r12
  3450. shrd r13,r13,14
  3451. and r15,rdi
  3452. xor r14,rbx
  3453. add rax,r13
  3454. xor r15,rcx
  3455. shrd r14,r14,28
  3456. add r8,rax
  3457. add rax,r15
  3458. mov r13,r8
  3459. add r14,rax
  3460. shrd r13,r13,23
  3461. mov rax,r14
  3462. mov r12,r9
  3463. shrd r14,r14,5
  3464. xor r13,r8
  3465. xor r12,r10
  3466. shrd r13,r13,4
  3467. xor r14,rax
  3468. and r12,r8
  3469. xor r13,r8
  3470. add r11,QWORD PTR[64+rsp]
  3471. mov r15,rax
  3472. xor r12,r10
  3473. shrd r14,r14,6
  3474. xor r15,rbx
  3475. add r11,r12
  3476. shrd r13,r13,14
  3477. and rdi,r15
  3478. xor r14,rax
  3479. add r11,r13
  3480. xor rdi,rbx
  3481. shrd r14,r14,28
  3482. add rdx,r11
  3483. add r11,rdi
  3484. mov r13,rdx
  3485. add r14,r11
  3486. shrd r13,r13,23
  3487. mov r11,r14
  3488. mov r12,r8
  3489. shrd r14,r14,5
  3490. xor r13,rdx
  3491. xor r12,r9
  3492. shrd r13,r13,4
  3493. xor r14,r11
  3494. and r12,rdx
  3495. xor r13,rdx
  3496. add r10,QWORD PTR[72+rsp]
  3497. mov rdi,r11
  3498. xor r12,r9
  3499. shrd r14,r14,6
  3500. xor rdi,rax
  3501. add r10,r12
  3502. shrd r13,r13,14
  3503. and r15,rdi
  3504. xor r14,r11
  3505. add r10,r13
  3506. xor r15,rax
  3507. shrd r14,r14,28
  3508. add rcx,r10
  3509. add r10,r15
  3510. mov r13,rcx
  3511. add r14,r10
  3512. shrd r13,r13,23
  3513. mov r10,r14
  3514. mov r12,rdx
  3515. shrd r14,r14,5
  3516. xor r13,rcx
  3517. xor r12,r8
  3518. shrd r13,r13,4
  3519. xor r14,r10
  3520. and r12,rcx
  3521. xor r13,rcx
  3522. add r9,QWORD PTR[80+rsp]
  3523. mov r15,r10
  3524. xor r12,r8
  3525. shrd r14,r14,6
  3526. xor r15,r11
  3527. add r9,r12
  3528. shrd r13,r13,14
  3529. and rdi,r15
  3530. xor r14,r10
  3531. add r9,r13
  3532. xor rdi,r11
  3533. shrd r14,r14,28
  3534. add rbx,r9
  3535. add r9,rdi
  3536. mov r13,rbx
  3537. add r14,r9
  3538. shrd r13,r13,23
  3539. mov r9,r14
  3540. mov r12,rcx
  3541. shrd r14,r14,5
  3542. xor r13,rbx
  3543. xor r12,rdx
  3544. shrd r13,r13,4
  3545. xor r14,r9
  3546. and r12,rbx
  3547. xor r13,rbx
  3548. add r8,QWORD PTR[88+rsp]
  3549. mov rdi,r9
  3550. xor r12,rdx
  3551. shrd r14,r14,6
  3552. xor rdi,r10
  3553. add r8,r12
  3554. shrd r13,r13,14
  3555. and r15,rdi
  3556. xor r14,r9
  3557. add r8,r13
  3558. xor r15,r10
  3559. shrd r14,r14,28
  3560. add rax,r8
  3561. add r8,r15
  3562. mov r13,rax
  3563. add r14,r8
  3564. shrd r13,r13,23
  3565. mov r8,r14
  3566. mov r12,rbx
  3567. shrd r14,r14,5
  3568. xor r13,rax
  3569. xor r12,rcx
  3570. shrd r13,r13,4
  3571. xor r14,r8
  3572. and r12,rax
  3573. xor r13,rax
  3574. add rdx,QWORD PTR[96+rsp]
  3575. mov r15,r8
  3576. xor r12,rcx
  3577. shrd r14,r14,6
  3578. xor r15,r9
  3579. add rdx,r12
  3580. shrd r13,r13,14
  3581. and rdi,r15
  3582. xor r14,r8
  3583. add rdx,r13
  3584. xor rdi,r9
  3585. shrd r14,r14,28
  3586. add r11,rdx
  3587. add rdx,rdi
  3588. mov r13,r11
  3589. add r14,rdx
  3590. shrd r13,r13,23
  3591. mov rdx,r14
  3592. mov r12,rax
  3593. shrd r14,r14,5
  3594. xor r13,r11
  3595. xor r12,rbx
  3596. shrd r13,r13,4
  3597. xor r14,rdx
  3598. and r12,r11
  3599. xor r13,r11
  3600. add rcx,QWORD PTR[104+rsp]
  3601. mov rdi,rdx
  3602. xor r12,rbx
  3603. shrd r14,r14,6
  3604. xor rdi,r8
  3605. add rcx,r12
  3606. shrd r13,r13,14
  3607. and r15,rdi
  3608. xor r14,rdx
  3609. add rcx,r13
  3610. xor r15,r8
  3611. shrd r14,r14,28
  3612. add r10,rcx
  3613. add rcx,r15
  3614. mov r13,r10
  3615. add r14,rcx
  3616. shrd r13,r13,23
  3617. mov rcx,r14
  3618. mov r12,r11
  3619. shrd r14,r14,5
  3620. xor r13,r10
  3621. xor r12,rax
  3622. shrd r13,r13,4
  3623. xor r14,rcx
  3624. and r12,r10
  3625. xor r13,r10
  3626. add rbx,QWORD PTR[112+rsp]
  3627. mov r15,rcx
  3628. xor r12,rax
  3629. shrd r14,r14,6
  3630. xor r15,rdx
  3631. add rbx,r12
  3632. shrd r13,r13,14
  3633. and rdi,r15
  3634. xor r14,rcx
  3635. add rbx,r13
  3636. xor rdi,rdx
  3637. shrd r14,r14,28
  3638. add r9,rbx
  3639. add rbx,rdi
  3640. mov r13,r9
  3641. add r14,rbx
  3642. shrd r13,r13,23
  3643. mov rbx,r14
  3644. mov r12,r10
  3645. shrd r14,r14,5
  3646. xor r13,r9
  3647. xor r12,r11
  3648. shrd r13,r13,4
  3649. xor r14,rbx
  3650. and r12,r9
  3651. xor r13,r9
  3652. add rax,QWORD PTR[120+rsp]
  3653. mov rdi,rbx
  3654. xor r12,r11
  3655. shrd r14,r14,6
  3656. xor rdi,rcx
  3657. add rax,r12
  3658. shrd r13,r13,14
  3659. and r15,rdi
  3660. xor r14,rbx
  3661. add rax,r13
  3662. xor r15,rcx
  3663. shrd r14,r14,28
  3664. add r8,rax
  3665. add rax,r15
  3666. mov r13,r8
  3667. add r14,rax
  3668. mov rdi,QWORD PTR[((128+0))+rsp]
  3669. mov rax,r14
  3670. add rax,QWORD PTR[rdi]
  3671. lea rsi,QWORD PTR[128+rsi]
  3672. add rbx,QWORD PTR[8+rdi]
  3673. add rcx,QWORD PTR[16+rdi]
  3674. add rdx,QWORD PTR[24+rdi]
  3675. add r8,QWORD PTR[32+rdi]
  3676. add r9,QWORD PTR[40+rdi]
  3677. add r10,QWORD PTR[48+rdi]
  3678. add r11,QWORD PTR[56+rdi]
  3679. cmp rsi,QWORD PTR[((128+16))+rsp]
  3680. mov QWORD PTR[rdi],rax
  3681. mov QWORD PTR[8+rdi],rbx
  3682. mov QWORD PTR[16+rdi],rcx
  3683. mov QWORD PTR[24+rdi],rdx
  3684. mov QWORD PTR[32+rdi],r8
  3685. mov QWORD PTR[40+rdi],r9
  3686. mov QWORD PTR[48+rdi],r10
  3687. mov QWORD PTR[56+rdi],r11
  3688. jb $L$loop_avx
  3689. mov rsi,QWORD PTR[152+rsp]
  3690. vzeroupper
  3691. movaps xmm6,XMMWORD PTR[((128+32))+rsp]
  3692. movaps xmm7,XMMWORD PTR[((128+48))+rsp]
  3693. movaps xmm8,XMMWORD PTR[((128+64))+rsp]
  3694. movaps xmm9,XMMWORD PTR[((128+80))+rsp]
  3695. movaps xmm10,XMMWORD PTR[((128+96))+rsp]
  3696. movaps xmm11,XMMWORD PTR[((128+112))+rsp]
  3697. mov r15,QWORD PTR[((-48))+rsi]
  3698. mov r14,QWORD PTR[((-40))+rsi]
  3699. mov r13,QWORD PTR[((-32))+rsi]
  3700. mov r12,QWORD PTR[((-24))+rsi]
  3701. mov rbp,QWORD PTR[((-16))+rsi]
  3702. mov rbx,QWORD PTR[((-8))+rsi]
  3703. lea rsp,QWORD PTR[rsi]
  3704. $L$epilogue_avx::
  3705. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  3706. mov rsi,QWORD PTR[16+rsp]
  3707. DB 0F3h,0C3h ;repret
  3708. $L$SEH_end_sha512_block_data_order_avx::
  3709. sha512_block_data_order_avx ENDP
  3710. ALIGN 64
  3711. sha512_block_data_order_avx2 PROC PRIVATE
  3712. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  3713. mov QWORD PTR[16+rsp],rsi
  3714. mov rax,rsp
  3715. $L$SEH_begin_sha512_block_data_order_avx2::
  3716. mov rdi,rcx
  3717. mov rsi,rdx
  3718. mov rdx,r8
  3719. $L$avx2_shortcut::
  3720. mov rax,rsp
  3721. push rbx
  3722. push rbp
  3723. push r12
  3724. push r13
  3725. push r14
  3726. push r15
  3727. sub rsp,1408
  3728. shl rdx,4
  3729. and rsp,-256*8
  3730. lea rdx,QWORD PTR[rdx*8+rsi]
  3731. add rsp,1152
  3732. mov QWORD PTR[((128+0))+rsp],rdi
  3733. mov QWORD PTR[((128+8))+rsp],rsi
  3734. mov QWORD PTR[((128+16))+rsp],rdx
  3735. mov QWORD PTR[152+rsp],rax
  3736. movaps XMMWORD PTR[(128+32)+rsp],xmm6
  3737. movaps XMMWORD PTR[(128+48)+rsp],xmm7
  3738. movaps XMMWORD PTR[(128+64)+rsp],xmm8
  3739. movaps XMMWORD PTR[(128+80)+rsp],xmm9
  3740. movaps XMMWORD PTR[(128+96)+rsp],xmm10
  3741. movaps XMMWORD PTR[(128+112)+rsp],xmm11
  3742. $L$prologue_avx2::
  3743. vzeroupper
  3744. sub rsi,-16*8
  3745. mov rax,QWORD PTR[rdi]
  3746. mov r12,rsi
  3747. mov rbx,QWORD PTR[8+rdi]
  3748. cmp rsi,rdx
  3749. mov rcx,QWORD PTR[16+rdi]
  3750. cmove r12,rsp
  3751. mov rdx,QWORD PTR[24+rdi]
  3752. mov r8,QWORD PTR[32+rdi]
  3753. mov r9,QWORD PTR[40+rdi]
  3754. mov r10,QWORD PTR[48+rdi]
  3755. mov r11,QWORD PTR[56+rdi]
  3756. jmp $L$oop_avx2
  3757. ALIGN 16
  3758. $L$oop_avx2::
  3759. vmovdqu xmm0,XMMWORD PTR[((-128))+rsi]
  3760. vmovdqu xmm1,XMMWORD PTR[((-128+16))+rsi]
  3761. vmovdqu xmm2,XMMWORD PTR[((-128+32))+rsi]
  3762. lea rbp,QWORD PTR[((K512+128))]
  3763. vmovdqu xmm3,XMMWORD PTR[((-128+48))+rsi]
  3764. vmovdqu xmm4,XMMWORD PTR[((-128+64))+rsi]
  3765. vmovdqu xmm5,XMMWORD PTR[((-128+80))+rsi]
  3766. vmovdqu xmm6,XMMWORD PTR[((-128+96))+rsi]
  3767. vmovdqu xmm7,XMMWORD PTR[((-128+112))+rsi]
  3768. vmovdqa ymm10,YMMWORD PTR[1152+rbp]
  3769. vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
  3770. vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
  3771. vpshufb ymm0,ymm0,ymm10
  3772. vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
  3773. vpshufb ymm1,ymm1,ymm10
  3774. vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
  3775. vpshufb ymm2,ymm2,ymm10
  3776. vinserti128 ymm4,ymm4,XMMWORD PTR[64+r12],1
  3777. vpshufb ymm3,ymm3,ymm10
  3778. vinserti128 ymm5,ymm5,XMMWORD PTR[80+r12],1
  3779. vpshufb ymm4,ymm4,ymm10
  3780. vinserti128 ymm6,ymm6,XMMWORD PTR[96+r12],1
  3781. vpshufb ymm5,ymm5,ymm10
  3782. vinserti128 ymm7,ymm7,XMMWORD PTR[112+r12],1
  3783. vpaddq ymm8,ymm0,YMMWORD PTR[((-128))+rbp]
  3784. vpshufb ymm6,ymm6,ymm10
  3785. vpaddq ymm9,ymm1,YMMWORD PTR[((-96))+rbp]
  3786. vpshufb ymm7,ymm7,ymm10
  3787. vpaddq ymm10,ymm2,YMMWORD PTR[((-64))+rbp]
  3788. vpaddq ymm11,ymm3,YMMWORD PTR[((-32))+rbp]
  3789. vmovdqa YMMWORD PTR[rsp],ymm8
  3790. vpaddq ymm8,ymm4,YMMWORD PTR[rbp]
  3791. vmovdqa YMMWORD PTR[32+rsp],ymm9
  3792. vpaddq ymm9,ymm5,YMMWORD PTR[32+rbp]
  3793. vmovdqa YMMWORD PTR[64+rsp],ymm10
  3794. vpaddq ymm10,ymm6,YMMWORD PTR[64+rbp]
  3795. vmovdqa YMMWORD PTR[96+rsp],ymm11
  3796. lea rsp,QWORD PTR[((-128))+rsp]
  3797. vpaddq ymm11,ymm7,YMMWORD PTR[96+rbp]
  3798. vmovdqa YMMWORD PTR[rsp],ymm8
  3799. xor r14,r14
  3800. vmovdqa YMMWORD PTR[32+rsp],ymm9
  3801. mov rdi,rbx
  3802. vmovdqa YMMWORD PTR[64+rsp],ymm10
  3803. xor rdi,rcx
  3804. vmovdqa YMMWORD PTR[96+rsp],ymm11
  3805. mov r12,r9
  3806. add rbp,16*2*8
  3807. jmp $L$avx2_00_47
  3808. ALIGN 16
  3809. $L$avx2_00_47::
  3810. lea rsp,QWORD PTR[((-128))+rsp]
  3811. vpalignr ymm8,ymm1,ymm0,8
  3812. add r11,QWORD PTR[((0+256))+rsp]
  3813. and r12,r8
  3814. rorx r13,r8,41
  3815. vpalignr ymm11,ymm5,ymm4,8
  3816. rorx r15,r8,18
  3817. lea rax,QWORD PTR[r14*1+rax]
  3818. lea r11,QWORD PTR[r12*1+r11]
  3819. vpsrlq ymm10,ymm8,1
  3820. andn r12,r8,r10
  3821. xor r13,r15
  3822. rorx r14,r8,14
  3823. vpaddq ymm0,ymm0,ymm11
  3824. vpsrlq ymm11,ymm8,7
  3825. lea r11,QWORD PTR[r12*1+r11]
  3826. xor r13,r14
  3827. mov r15,rax
  3828. vpsllq ymm9,ymm8,56
  3829. vpxor ymm8,ymm11,ymm10
  3830. rorx r12,rax,39
  3831. lea r11,QWORD PTR[r13*1+r11]
  3832. xor r15,rbx
  3833. vpsrlq ymm10,ymm10,7
  3834. vpxor ymm8,ymm8,ymm9
  3835. rorx r14,rax,34
  3836. rorx r13,rax,28
  3837. lea rdx,QWORD PTR[r11*1+rdx]
  3838. vpsllq ymm9,ymm9,7
  3839. vpxor ymm8,ymm8,ymm10
  3840. and rdi,r15
  3841. xor r14,r12
  3842. xor rdi,rbx
  3843. vpsrlq ymm11,ymm7,6
  3844. vpxor ymm8,ymm8,ymm9
  3845. xor r14,r13
  3846. lea r11,QWORD PTR[rdi*1+r11]
  3847. mov r12,r8
  3848. vpsllq ymm10,ymm7,3
  3849. vpaddq ymm0,ymm0,ymm8
  3850. add r10,QWORD PTR[((8+256))+rsp]
  3851. and r12,rdx
  3852. rorx r13,rdx,41
  3853. vpsrlq ymm9,ymm7,19
  3854. vpxor ymm11,ymm11,ymm10
  3855. rorx rdi,rdx,18
  3856. lea r11,QWORD PTR[r14*1+r11]
  3857. lea r10,QWORD PTR[r12*1+r10]
  3858. vpsllq ymm10,ymm10,42
  3859. vpxor ymm11,ymm11,ymm9
  3860. andn r12,rdx,r9
  3861. xor r13,rdi
  3862. rorx r14,rdx,14
  3863. vpsrlq ymm9,ymm9,42
  3864. vpxor ymm11,ymm11,ymm10
  3865. lea r10,QWORD PTR[r12*1+r10]
  3866. xor r13,r14
  3867. mov rdi,r11
  3868. vpxor ymm11,ymm11,ymm9
  3869. rorx r12,r11,39
  3870. lea r10,QWORD PTR[r13*1+r10]
  3871. xor rdi,rax
  3872. vpaddq ymm0,ymm0,ymm11
  3873. rorx r14,r11,34
  3874. rorx r13,r11,28
  3875. lea rcx,QWORD PTR[r10*1+rcx]
  3876. vpaddq ymm10,ymm0,YMMWORD PTR[((-128))+rbp]
  3877. and r15,rdi
  3878. xor r14,r12
  3879. xor r15,rax
  3880. xor r14,r13
  3881. lea r10,QWORD PTR[r15*1+r10]
  3882. mov r12,rdx
  3883. vmovdqa YMMWORD PTR[rsp],ymm10
  3884. vpalignr ymm8,ymm2,ymm1,8
  3885. add r9,QWORD PTR[((32+256))+rsp]
  3886. and r12,rcx
  3887. rorx r13,rcx,41
  3888. vpalignr ymm11,ymm6,ymm5,8
  3889. rorx r15,rcx,18
  3890. lea r10,QWORD PTR[r14*1+r10]
  3891. lea r9,QWORD PTR[r12*1+r9]
  3892. vpsrlq ymm10,ymm8,1
  3893. andn r12,rcx,r8
  3894. xor r13,r15
  3895. rorx r14,rcx,14
  3896. vpaddq ymm1,ymm1,ymm11
  3897. vpsrlq ymm11,ymm8,7
  3898. lea r9,QWORD PTR[r12*1+r9]
  3899. xor r13,r14
  3900. mov r15,r10
  3901. vpsllq ymm9,ymm8,56
  3902. vpxor ymm8,ymm11,ymm10
  3903. rorx r12,r10,39
  3904. lea r9,QWORD PTR[r13*1+r9]
  3905. xor r15,r11
  3906. vpsrlq ymm10,ymm10,7
  3907. vpxor ymm8,ymm8,ymm9
  3908. rorx r14,r10,34
  3909. rorx r13,r10,28
  3910. lea rbx,QWORD PTR[r9*1+rbx]
  3911. vpsllq ymm9,ymm9,7
  3912. vpxor ymm8,ymm8,ymm10
  3913. and rdi,r15
  3914. xor r14,r12
  3915. xor rdi,r11
  3916. vpsrlq ymm11,ymm0,6
  3917. vpxor ymm8,ymm8,ymm9
  3918. xor r14,r13
  3919. lea r9,QWORD PTR[rdi*1+r9]
  3920. mov r12,rcx
  3921. vpsllq ymm10,ymm0,3
  3922. vpaddq ymm1,ymm1,ymm8
  3923. add r8,QWORD PTR[((40+256))+rsp]
  3924. and r12,rbx
  3925. rorx r13,rbx,41
  3926. vpsrlq ymm9,ymm0,19
  3927. vpxor ymm11,ymm11,ymm10
  3928. rorx rdi,rbx,18
  3929. lea r9,QWORD PTR[r14*1+r9]
  3930. lea r8,QWORD PTR[r12*1+r8]
  3931. vpsllq ymm10,ymm10,42
  3932. vpxor ymm11,ymm11,ymm9
  3933. andn r12,rbx,rdx
  3934. xor r13,rdi
  3935. rorx r14,rbx,14
  3936. vpsrlq ymm9,ymm9,42
  3937. vpxor ymm11,ymm11,ymm10
  3938. lea r8,QWORD PTR[r12*1+r8]
  3939. xor r13,r14
  3940. mov rdi,r9
  3941. vpxor ymm11,ymm11,ymm9
  3942. rorx r12,r9,39
  3943. lea r8,QWORD PTR[r13*1+r8]
  3944. xor rdi,r10
  3945. vpaddq ymm1,ymm1,ymm11
  3946. rorx r14,r9,34
  3947. rorx r13,r9,28
  3948. lea rax,QWORD PTR[r8*1+rax]
  3949. vpaddq ymm10,ymm1,YMMWORD PTR[((-96))+rbp]
  3950. and r15,rdi
  3951. xor r14,r12
  3952. xor r15,r10
  3953. xor r14,r13
  3954. lea r8,QWORD PTR[r15*1+r8]
  3955. mov r12,rbx
  3956. vmovdqa YMMWORD PTR[32+rsp],ymm10
  3957. vpalignr ymm8,ymm3,ymm2,8
  3958. add rdx,QWORD PTR[((64+256))+rsp]
  3959. and r12,rax
  3960. rorx r13,rax,41
  3961. vpalignr ymm11,ymm7,ymm6,8
  3962. rorx r15,rax,18
  3963. lea r8,QWORD PTR[r14*1+r8]
  3964. lea rdx,QWORD PTR[r12*1+rdx]
  3965. vpsrlq ymm10,ymm8,1
  3966. andn r12,rax,rcx
  3967. xor r13,r15
  3968. rorx r14,rax,14
  3969. vpaddq ymm2,ymm2,ymm11
  3970. vpsrlq ymm11,ymm8,7
  3971. lea rdx,QWORD PTR[r12*1+rdx]
  3972. xor r13,r14
  3973. mov r15,r8
  3974. vpsllq ymm9,ymm8,56
  3975. vpxor ymm8,ymm11,ymm10
  3976. rorx r12,r8,39
  3977. lea rdx,QWORD PTR[r13*1+rdx]
  3978. xor r15,r9
  3979. vpsrlq ymm10,ymm10,7
  3980. vpxor ymm8,ymm8,ymm9
  3981. rorx r14,r8,34
  3982. rorx r13,r8,28
  3983. lea r11,QWORD PTR[rdx*1+r11]
  3984. vpsllq ymm9,ymm9,7
  3985. vpxor ymm8,ymm8,ymm10
  3986. and rdi,r15
  3987. xor r14,r12
  3988. xor rdi,r9
  3989. vpsrlq ymm11,ymm1,6
  3990. vpxor ymm8,ymm8,ymm9
  3991. xor r14,r13
  3992. lea rdx,QWORD PTR[rdi*1+rdx]
  3993. mov r12,rax
  3994. vpsllq ymm10,ymm1,3
  3995. vpaddq ymm2,ymm2,ymm8
  3996. add rcx,QWORD PTR[((72+256))+rsp]
  3997. and r12,r11
  3998. rorx r13,r11,41
  3999. vpsrlq ymm9,ymm1,19
  4000. vpxor ymm11,ymm11,ymm10
  4001. rorx rdi,r11,18
  4002. lea rdx,QWORD PTR[r14*1+rdx]
  4003. lea rcx,QWORD PTR[r12*1+rcx]
  4004. vpsllq ymm10,ymm10,42
  4005. vpxor ymm11,ymm11,ymm9
  4006. andn r12,r11,rbx
  4007. xor r13,rdi
  4008. rorx r14,r11,14
  4009. vpsrlq ymm9,ymm9,42
  4010. vpxor ymm11,ymm11,ymm10
  4011. lea rcx,QWORD PTR[r12*1+rcx]
  4012. xor r13,r14
  4013. mov rdi,rdx
  4014. vpxor ymm11,ymm11,ymm9
  4015. rorx r12,rdx,39
  4016. lea rcx,QWORD PTR[r13*1+rcx]
  4017. xor rdi,r8
  4018. vpaddq ymm2,ymm2,ymm11
  4019. rorx r14,rdx,34
  4020. rorx r13,rdx,28
  4021. lea r10,QWORD PTR[rcx*1+r10]
  4022. vpaddq ymm10,ymm2,YMMWORD PTR[((-64))+rbp]
  4023. and r15,rdi
  4024. xor r14,r12
  4025. xor r15,r8
  4026. xor r14,r13
  4027. lea rcx,QWORD PTR[r15*1+rcx]
  4028. mov r12,r11
  4029. vmovdqa YMMWORD PTR[64+rsp],ymm10
  4030. vpalignr ymm8,ymm4,ymm3,8
  4031. add rbx,QWORD PTR[((96+256))+rsp]
  4032. and r12,r10
  4033. rorx r13,r10,41
  4034. vpalignr ymm11,ymm0,ymm7,8
  4035. rorx r15,r10,18
  4036. lea rcx,QWORD PTR[r14*1+rcx]
  4037. lea rbx,QWORD PTR[r12*1+rbx]
  4038. vpsrlq ymm10,ymm8,1
  4039. andn r12,r10,rax
  4040. xor r13,r15
  4041. rorx r14,r10,14
  4042. vpaddq ymm3,ymm3,ymm11
  4043. vpsrlq ymm11,ymm8,7
  4044. lea rbx,QWORD PTR[r12*1+rbx]
  4045. xor r13,r14
  4046. mov r15,rcx
  4047. vpsllq ymm9,ymm8,56
  4048. vpxor ymm8,ymm11,ymm10
  4049. rorx r12,rcx,39
  4050. lea rbx,QWORD PTR[r13*1+rbx]
  4051. xor r15,rdx
  4052. vpsrlq ymm10,ymm10,7
  4053. vpxor ymm8,ymm8,ymm9
  4054. rorx r14,rcx,34
  4055. rorx r13,rcx,28
  4056. lea r9,QWORD PTR[rbx*1+r9]
  4057. vpsllq ymm9,ymm9,7
  4058. vpxor ymm8,ymm8,ymm10
  4059. and rdi,r15
  4060. xor r14,r12
  4061. xor rdi,rdx
  4062. vpsrlq ymm11,ymm2,6
  4063. vpxor ymm8,ymm8,ymm9
  4064. xor r14,r13
  4065. lea rbx,QWORD PTR[rdi*1+rbx]
  4066. mov r12,r10
  4067. vpsllq ymm10,ymm2,3
  4068. vpaddq ymm3,ymm3,ymm8
  4069. add rax,QWORD PTR[((104+256))+rsp]
  4070. and r12,r9
  4071. rorx r13,r9,41
  4072. vpsrlq ymm9,ymm2,19
  4073. vpxor ymm11,ymm11,ymm10
  4074. rorx rdi,r9,18
  4075. lea rbx,QWORD PTR[r14*1+rbx]
  4076. lea rax,QWORD PTR[r12*1+rax]
  4077. vpsllq ymm10,ymm10,42
  4078. vpxor ymm11,ymm11,ymm9
  4079. andn r12,r9,r11
  4080. xor r13,rdi
  4081. rorx r14,r9,14
  4082. vpsrlq ymm9,ymm9,42
  4083. vpxor ymm11,ymm11,ymm10
  4084. lea rax,QWORD PTR[r12*1+rax]
  4085. xor r13,r14
  4086. mov rdi,rbx
  4087. vpxor ymm11,ymm11,ymm9
  4088. rorx r12,rbx,39
  4089. lea rax,QWORD PTR[r13*1+rax]
  4090. xor rdi,rcx
  4091. vpaddq ymm3,ymm3,ymm11
  4092. rorx r14,rbx,34
  4093. rorx r13,rbx,28
  4094. lea r8,QWORD PTR[rax*1+r8]
  4095. vpaddq ymm10,ymm3,YMMWORD PTR[((-32))+rbp]
  4096. and r15,rdi
  4097. xor r14,r12
  4098. xor r15,rcx
  4099. xor r14,r13
  4100. lea rax,QWORD PTR[r15*1+rax]
  4101. mov r12,r9
  4102. vmovdqa YMMWORD PTR[96+rsp],ymm10
  4103. lea rsp,QWORD PTR[((-128))+rsp]
  4104. vpalignr ymm8,ymm5,ymm4,8
  4105. add r11,QWORD PTR[((0+256))+rsp]
  4106. and r12,r8
  4107. rorx r13,r8,41
  4108. vpalignr ymm11,ymm1,ymm0,8
  4109. rorx r15,r8,18
  4110. lea rax,QWORD PTR[r14*1+rax]
  4111. lea r11,QWORD PTR[r12*1+r11]
  4112. vpsrlq ymm10,ymm8,1
  4113. andn r12,r8,r10
  4114. xor r13,r15
  4115. rorx r14,r8,14
  4116. vpaddq ymm4,ymm4,ymm11
  4117. vpsrlq ymm11,ymm8,7
  4118. lea r11,QWORD PTR[r12*1+r11]
  4119. xor r13,r14
  4120. mov r15,rax
  4121. vpsllq ymm9,ymm8,56
  4122. vpxor ymm8,ymm11,ymm10
  4123. rorx r12,rax,39
  4124. lea r11,QWORD PTR[r13*1+r11]
  4125. xor r15,rbx
  4126. vpsrlq ymm10,ymm10,7
  4127. vpxor ymm8,ymm8,ymm9
  4128. rorx r14,rax,34
  4129. rorx r13,rax,28
  4130. lea rdx,QWORD PTR[r11*1+rdx]
  4131. vpsllq ymm9,ymm9,7
  4132. vpxor ymm8,ymm8,ymm10
  4133. and rdi,r15
  4134. xor r14,r12
  4135. xor rdi,rbx
  4136. vpsrlq ymm11,ymm3,6
  4137. vpxor ymm8,ymm8,ymm9
  4138. xor r14,r13
  4139. lea r11,QWORD PTR[rdi*1+r11]
  4140. mov r12,r8
  4141. vpsllq ymm10,ymm3,3
  4142. vpaddq ymm4,ymm4,ymm8
  4143. add r10,QWORD PTR[((8+256))+rsp]
  4144. and r12,rdx
  4145. rorx r13,rdx,41
  4146. vpsrlq ymm9,ymm3,19
  4147. vpxor ymm11,ymm11,ymm10
  4148. rorx rdi,rdx,18
  4149. lea r11,QWORD PTR[r14*1+r11]
  4150. lea r10,QWORD PTR[r12*1+r10]
  4151. vpsllq ymm10,ymm10,42
  4152. vpxor ymm11,ymm11,ymm9
  4153. andn r12,rdx,r9
  4154. xor r13,rdi
  4155. rorx r14,rdx,14
  4156. vpsrlq ymm9,ymm9,42
  4157. vpxor ymm11,ymm11,ymm10
  4158. lea r10,QWORD PTR[r12*1+r10]
  4159. xor r13,r14
  4160. mov rdi,r11
  4161. vpxor ymm11,ymm11,ymm9
  4162. rorx r12,r11,39
  4163. lea r10,QWORD PTR[r13*1+r10]
  4164. xor rdi,rax
  4165. vpaddq ymm4,ymm4,ymm11
  4166. rorx r14,r11,34
  4167. rorx r13,r11,28
  4168. lea rcx,QWORD PTR[r10*1+rcx]
  4169. vpaddq ymm10,ymm4,YMMWORD PTR[rbp]
  4170. and r15,rdi
  4171. xor r14,r12
  4172. xor r15,rax
  4173. xor r14,r13
  4174. lea r10,QWORD PTR[r15*1+r10]
  4175. mov r12,rdx
  4176. vmovdqa YMMWORD PTR[rsp],ymm10
  4177. vpalignr ymm8,ymm6,ymm5,8
  4178. add r9,QWORD PTR[((32+256))+rsp]
  4179. and r12,rcx
  4180. rorx r13,rcx,41
  4181. vpalignr ymm11,ymm2,ymm1,8
  4182. rorx r15,rcx,18
  4183. lea r10,QWORD PTR[r14*1+r10]
  4184. lea r9,QWORD PTR[r12*1+r9]
  4185. vpsrlq ymm10,ymm8,1
  4186. andn r12,rcx,r8
  4187. xor r13,r15
  4188. rorx r14,rcx,14
  4189. vpaddq ymm5,ymm5,ymm11
  4190. vpsrlq ymm11,ymm8,7
  4191. lea r9,QWORD PTR[r12*1+r9]
  4192. xor r13,r14
  4193. mov r15,r10
  4194. vpsllq ymm9,ymm8,56
  4195. vpxor ymm8,ymm11,ymm10
  4196. rorx r12,r10,39
  4197. lea r9,QWORD PTR[r13*1+r9]
  4198. xor r15,r11
  4199. vpsrlq ymm10,ymm10,7
  4200. vpxor ymm8,ymm8,ymm9
  4201. rorx r14,r10,34
  4202. rorx r13,r10,28
  4203. lea rbx,QWORD PTR[r9*1+rbx]
  4204. vpsllq ymm9,ymm9,7
  4205. vpxor ymm8,ymm8,ymm10
  4206. and rdi,r15
  4207. xor r14,r12
  4208. xor rdi,r11
  4209. vpsrlq ymm11,ymm4,6
  4210. vpxor ymm8,ymm8,ymm9
  4211. xor r14,r13
  4212. lea r9,QWORD PTR[rdi*1+r9]
  4213. mov r12,rcx
  4214. vpsllq ymm10,ymm4,3
  4215. vpaddq ymm5,ymm5,ymm8
  4216. add r8,QWORD PTR[((40+256))+rsp]
  4217. and r12,rbx
  4218. rorx r13,rbx,41
  4219. vpsrlq ymm9,ymm4,19
  4220. vpxor ymm11,ymm11,ymm10
  4221. rorx rdi,rbx,18
  4222. lea r9,QWORD PTR[r14*1+r9]
  4223. lea r8,QWORD PTR[r12*1+r8]
  4224. vpsllq ymm10,ymm10,42
  4225. vpxor ymm11,ymm11,ymm9
  4226. andn r12,rbx,rdx
  4227. xor r13,rdi
  4228. rorx r14,rbx,14
  4229. vpsrlq ymm9,ymm9,42
  4230. vpxor ymm11,ymm11,ymm10
  4231. lea r8,QWORD PTR[r12*1+r8]
  4232. xor r13,r14
  4233. mov rdi,r9
  4234. vpxor ymm11,ymm11,ymm9
  4235. rorx r12,r9,39
  4236. lea r8,QWORD PTR[r13*1+r8]
  4237. xor rdi,r10
  4238. vpaddq ymm5,ymm5,ymm11
  4239. rorx r14,r9,34
  4240. rorx r13,r9,28
  4241. lea rax,QWORD PTR[r8*1+rax]
  4242. vpaddq ymm10,ymm5,YMMWORD PTR[32+rbp]
  4243. and r15,rdi
  4244. xor r14,r12
  4245. xor r15,r10
  4246. xor r14,r13
  4247. lea r8,QWORD PTR[r15*1+r8]
  4248. mov r12,rbx
  4249. vmovdqa YMMWORD PTR[32+rsp],ymm10
  4250. vpalignr ymm8,ymm7,ymm6,8
  4251. add rdx,QWORD PTR[((64+256))+rsp]
  4252. and r12,rax
  4253. rorx r13,rax,41
  4254. vpalignr ymm11,ymm3,ymm2,8
  4255. rorx r15,rax,18
  4256. lea r8,QWORD PTR[r14*1+r8]
  4257. lea rdx,QWORD PTR[r12*1+rdx]
  4258. vpsrlq ymm10,ymm8,1
  4259. andn r12,rax,rcx
  4260. xor r13,r15
  4261. rorx r14,rax,14
  4262. vpaddq ymm6,ymm6,ymm11
  4263. vpsrlq ymm11,ymm8,7
  4264. lea rdx,QWORD PTR[r12*1+rdx]
  4265. xor r13,r14
  4266. mov r15,r8
  4267. vpsllq ymm9,ymm8,56
  4268. vpxor ymm8,ymm11,ymm10
  4269. rorx r12,r8,39
  4270. lea rdx,QWORD PTR[r13*1+rdx]
  4271. xor r15,r9
  4272. vpsrlq ymm10,ymm10,7
  4273. vpxor ymm8,ymm8,ymm9
  4274. rorx r14,r8,34
  4275. rorx r13,r8,28
  4276. lea r11,QWORD PTR[rdx*1+r11]
  4277. vpsllq ymm9,ymm9,7
  4278. vpxor ymm8,ymm8,ymm10
  4279. and rdi,r15
  4280. xor r14,r12
  4281. xor rdi,r9
  4282. vpsrlq ymm11,ymm5,6
  4283. vpxor ymm8,ymm8,ymm9
  4284. xor r14,r13
  4285. lea rdx,QWORD PTR[rdi*1+rdx]
  4286. mov r12,rax
  4287. vpsllq ymm10,ymm5,3
  4288. vpaddq ymm6,ymm6,ymm8
  4289. add rcx,QWORD PTR[((72+256))+rsp]
  4290. and r12,r11
  4291. rorx r13,r11,41
  4292. vpsrlq ymm9,ymm5,19
  4293. vpxor ymm11,ymm11,ymm10
  4294. rorx rdi,r11,18
  4295. lea rdx,QWORD PTR[r14*1+rdx]
  4296. lea rcx,QWORD PTR[r12*1+rcx]
  4297. vpsllq ymm10,ymm10,42
  4298. vpxor ymm11,ymm11,ymm9
  4299. andn r12,r11,rbx
  4300. xor r13,rdi
  4301. rorx r14,r11,14
  4302. vpsrlq ymm9,ymm9,42
  4303. vpxor ymm11,ymm11,ymm10
  4304. lea rcx,QWORD PTR[r12*1+rcx]
  4305. xor r13,r14
  4306. mov rdi,rdx
  4307. vpxor ymm11,ymm11,ymm9
  4308. rorx r12,rdx,39
  4309. lea rcx,QWORD PTR[r13*1+rcx]
  4310. xor rdi,r8
  4311. vpaddq ymm6,ymm6,ymm11
  4312. rorx r14,rdx,34
  4313. rorx r13,rdx,28
  4314. lea r10,QWORD PTR[rcx*1+r10]
  4315. vpaddq ymm10,ymm6,YMMWORD PTR[64+rbp]
  4316. and r15,rdi
  4317. xor r14,r12
  4318. xor r15,r8
  4319. xor r14,r13
  4320. lea rcx,QWORD PTR[r15*1+rcx]
  4321. mov r12,r11
  4322. vmovdqa YMMWORD PTR[64+rsp],ymm10
  4323. vpalignr ymm8,ymm0,ymm7,8
  4324. add rbx,QWORD PTR[((96+256))+rsp]
  4325. and r12,r10
  4326. rorx r13,r10,41
  4327. vpalignr ymm11,ymm4,ymm3,8
  4328. rorx r15,r10,18
  4329. lea rcx,QWORD PTR[r14*1+rcx]
  4330. lea rbx,QWORD PTR[r12*1+rbx]
  4331. vpsrlq ymm10,ymm8,1
  4332. andn r12,r10,rax
  4333. xor r13,r15
  4334. rorx r14,r10,14
  4335. vpaddq ymm7,ymm7,ymm11
  4336. vpsrlq ymm11,ymm8,7
  4337. lea rbx,QWORD PTR[r12*1+rbx]
  4338. xor r13,r14
  4339. mov r15,rcx
  4340. vpsllq ymm9,ymm8,56
  4341. vpxor ymm8,ymm11,ymm10
  4342. rorx r12,rcx,39
  4343. lea rbx,QWORD PTR[r13*1+rbx]
  4344. xor r15,rdx
  4345. vpsrlq ymm10,ymm10,7
  4346. vpxor ymm8,ymm8,ymm9
  4347. rorx r14,rcx,34
  4348. rorx r13,rcx,28
  4349. lea r9,QWORD PTR[rbx*1+r9]
  4350. vpsllq ymm9,ymm9,7
  4351. vpxor ymm8,ymm8,ymm10
  4352. and rdi,r15
  4353. xor r14,r12
  4354. xor rdi,rdx
  4355. vpsrlq ymm11,ymm6,6
  4356. vpxor ymm8,ymm8,ymm9
  4357. xor r14,r13
  4358. lea rbx,QWORD PTR[rdi*1+rbx]
  4359. mov r12,r10
  4360. vpsllq ymm10,ymm6,3
  4361. vpaddq ymm7,ymm7,ymm8
  4362. add rax,QWORD PTR[((104+256))+rsp]
  4363. and r12,r9
  4364. rorx r13,r9,41
  4365. vpsrlq ymm9,ymm6,19
  4366. vpxor ymm11,ymm11,ymm10
  4367. rorx rdi,r9,18
  4368. lea rbx,QWORD PTR[r14*1+rbx]
  4369. lea rax,QWORD PTR[r12*1+rax]
  4370. vpsllq ymm10,ymm10,42
  4371. vpxor ymm11,ymm11,ymm9
  4372. andn r12,r9,r11
  4373. xor r13,rdi
  4374. rorx r14,r9,14
  4375. vpsrlq ymm9,ymm9,42
  4376. vpxor ymm11,ymm11,ymm10
  4377. lea rax,QWORD PTR[r12*1+rax]
  4378. xor r13,r14
  4379. mov rdi,rbx
  4380. vpxor ymm11,ymm11,ymm9
  4381. rorx r12,rbx,39
  4382. lea rax,QWORD PTR[r13*1+rax]
  4383. xor rdi,rcx
  4384. vpaddq ymm7,ymm7,ymm11
  4385. rorx r14,rbx,34
  4386. rorx r13,rbx,28
  4387. lea r8,QWORD PTR[rax*1+r8]
  4388. vpaddq ymm10,ymm7,YMMWORD PTR[96+rbp]
  4389. and r15,rdi
  4390. xor r14,r12
  4391. xor r15,rcx
  4392. xor r14,r13
  4393. lea rax,QWORD PTR[r15*1+rax]
  4394. mov r12,r9
  4395. vmovdqa YMMWORD PTR[96+rsp],ymm10
  4396. lea rbp,QWORD PTR[256+rbp]
  4397. cmp BYTE PTR[((-121))+rbp],0
  4398. jne $L$avx2_00_47
  4399. add r11,QWORD PTR[((0+128))+rsp]
  4400. and r12,r8
  4401. rorx r13,r8,41
  4402. rorx r15,r8,18
  4403. lea rax,QWORD PTR[r14*1+rax]
  4404. lea r11,QWORD PTR[r12*1+r11]
  4405. andn r12,r8,r10
  4406. xor r13,r15
  4407. rorx r14,r8,14
  4408. lea r11,QWORD PTR[r12*1+r11]
  4409. xor r13,r14
  4410. mov r15,rax
  4411. rorx r12,rax,39
  4412. lea r11,QWORD PTR[r13*1+r11]
  4413. xor r15,rbx
  4414. rorx r14,rax,34
  4415. rorx r13,rax,28
  4416. lea rdx,QWORD PTR[r11*1+rdx]
  4417. and rdi,r15
  4418. xor r14,r12
  4419. xor rdi,rbx
  4420. xor r14,r13
  4421. lea r11,QWORD PTR[rdi*1+r11]
  4422. mov r12,r8
  4423. add r10,QWORD PTR[((8+128))+rsp]
  4424. and r12,rdx
  4425. rorx r13,rdx,41
  4426. rorx rdi,rdx,18
  4427. lea r11,QWORD PTR[r14*1+r11]
  4428. lea r10,QWORD PTR[r12*1+r10]
  4429. andn r12,rdx,r9
  4430. xor r13,rdi
  4431. rorx r14,rdx,14
  4432. lea r10,QWORD PTR[r12*1+r10]
  4433. xor r13,r14
  4434. mov rdi,r11
  4435. rorx r12,r11,39
  4436. lea r10,QWORD PTR[r13*1+r10]
  4437. xor rdi,rax
  4438. rorx r14,r11,34
  4439. rorx r13,r11,28
  4440. lea rcx,QWORD PTR[r10*1+rcx]
  4441. and r15,rdi
  4442. xor r14,r12
  4443. xor r15,rax
  4444. xor r14,r13
  4445. lea r10,QWORD PTR[r15*1+r10]
  4446. mov r12,rdx
  4447. add r9,QWORD PTR[((32+128))+rsp]
  4448. and r12,rcx
  4449. rorx r13,rcx,41
  4450. rorx r15,rcx,18
  4451. lea r10,QWORD PTR[r14*1+r10]
  4452. lea r9,QWORD PTR[r12*1+r9]
  4453. andn r12,rcx,r8
  4454. xor r13,r15
  4455. rorx r14,rcx,14
  4456. lea r9,QWORD PTR[r12*1+r9]
  4457. xor r13,r14
  4458. mov r15,r10
  4459. rorx r12,r10,39
  4460. lea r9,QWORD PTR[r13*1+r9]
  4461. xor r15,r11
  4462. rorx r14,r10,34
  4463. rorx r13,r10,28
  4464. lea rbx,QWORD PTR[r9*1+rbx]
  4465. and rdi,r15
  4466. xor r14,r12
  4467. xor rdi,r11
  4468. xor r14,r13
  4469. lea r9,QWORD PTR[rdi*1+r9]
  4470. mov r12,rcx
  4471. add r8,QWORD PTR[((40+128))+rsp]
  4472. and r12,rbx
  4473. rorx r13,rbx,41
  4474. rorx rdi,rbx,18
  4475. lea r9,QWORD PTR[r14*1+r9]
  4476. lea r8,QWORD PTR[r12*1+r8]
  4477. andn r12,rbx,rdx
  4478. xor r13,rdi
  4479. rorx r14,rbx,14
  4480. lea r8,QWORD PTR[r12*1+r8]
  4481. xor r13,r14
  4482. mov rdi,r9
  4483. rorx r12,r9,39
  4484. lea r8,QWORD PTR[r13*1+r8]
  4485. xor rdi,r10
  4486. rorx r14,r9,34
  4487. rorx r13,r9,28
  4488. lea rax,QWORD PTR[r8*1+rax]
  4489. and r15,rdi
  4490. xor r14,r12
  4491. xor r15,r10
  4492. xor r14,r13
  4493. lea r8,QWORD PTR[r15*1+r8]
  4494. mov r12,rbx
  4495. add rdx,QWORD PTR[((64+128))+rsp]
  4496. and r12,rax
  4497. rorx r13,rax,41
  4498. rorx r15,rax,18
  4499. lea r8,QWORD PTR[r14*1+r8]
  4500. lea rdx,QWORD PTR[r12*1+rdx]
  4501. andn r12,rax,rcx
  4502. xor r13,r15
  4503. rorx r14,rax,14
  4504. lea rdx,QWORD PTR[r12*1+rdx]
  4505. xor r13,r14
  4506. mov r15,r8
  4507. rorx r12,r8,39
  4508. lea rdx,QWORD PTR[r13*1+rdx]
  4509. xor r15,r9
  4510. rorx r14,r8,34
  4511. rorx r13,r8,28
  4512. lea r11,QWORD PTR[rdx*1+r11]
  4513. and rdi,r15
  4514. xor r14,r12
  4515. xor rdi,r9
  4516. xor r14,r13
  4517. lea rdx,QWORD PTR[rdi*1+rdx]
  4518. mov r12,rax
  4519. add rcx,QWORD PTR[((72+128))+rsp]
  4520. and r12,r11
  4521. rorx r13,r11,41
  4522. rorx rdi,r11,18
  4523. lea rdx,QWORD PTR[r14*1+rdx]
  4524. lea rcx,QWORD PTR[r12*1+rcx]
  4525. andn r12,r11,rbx
  4526. xor r13,rdi
  4527. rorx r14,r11,14
  4528. lea rcx,QWORD PTR[r12*1+rcx]
  4529. xor r13,r14
  4530. mov rdi,rdx
  4531. rorx r12,rdx,39
  4532. lea rcx,QWORD PTR[r13*1+rcx]
  4533. xor rdi,r8
  4534. rorx r14,rdx,34
  4535. rorx r13,rdx,28
  4536. lea r10,QWORD PTR[rcx*1+r10]
  4537. and r15,rdi
  4538. xor r14,r12
  4539. xor r15,r8
  4540. xor r14,r13
  4541. lea rcx,QWORD PTR[r15*1+rcx]
  4542. mov r12,r11
  4543. add rbx,QWORD PTR[((96+128))+rsp]
  4544. and r12,r10
  4545. rorx r13,r10,41
  4546. rorx r15,r10,18
  4547. lea rcx,QWORD PTR[r14*1+rcx]
  4548. lea rbx,QWORD PTR[r12*1+rbx]
  4549. andn r12,r10,rax
  4550. xor r13,r15
  4551. rorx r14,r10,14
  4552. lea rbx,QWORD PTR[r12*1+rbx]
  4553. xor r13,r14
  4554. mov r15,rcx
  4555. rorx r12,rcx,39
  4556. lea rbx,QWORD PTR[r13*1+rbx]
  4557. xor r15,rdx
  4558. rorx r14,rcx,34
  4559. rorx r13,rcx,28
  4560. lea r9,QWORD PTR[rbx*1+r9]
  4561. and rdi,r15
  4562. xor r14,r12
  4563. xor rdi,rdx
  4564. xor r14,r13
  4565. lea rbx,QWORD PTR[rdi*1+rbx]
  4566. mov r12,r10
  4567. add rax,QWORD PTR[((104+128))+rsp]
  4568. and r12,r9
  4569. rorx r13,r9,41
  4570. rorx rdi,r9,18
  4571. lea rbx,QWORD PTR[r14*1+rbx]
  4572. lea rax,QWORD PTR[r12*1+rax]
  4573. andn r12,r9,r11
  4574. xor r13,rdi
  4575. rorx r14,r9,14
  4576. lea rax,QWORD PTR[r12*1+rax]
  4577. xor r13,r14
  4578. mov rdi,rbx
  4579. rorx r12,rbx,39
  4580. lea rax,QWORD PTR[r13*1+rax]
  4581. xor rdi,rcx
  4582. rorx r14,rbx,34
  4583. rorx r13,rbx,28
  4584. lea r8,QWORD PTR[rax*1+r8]
  4585. and r15,rdi
  4586. xor r14,r12
  4587. xor r15,rcx
  4588. xor r14,r13
  4589. lea rax,QWORD PTR[r15*1+rax]
  4590. mov r12,r9
  4591. add r11,QWORD PTR[rsp]
  4592. and r12,r8
  4593. rorx r13,r8,41
  4594. rorx r15,r8,18
  4595. lea rax,QWORD PTR[r14*1+rax]
  4596. lea r11,QWORD PTR[r12*1+r11]
  4597. andn r12,r8,r10
  4598. xor r13,r15
  4599. rorx r14,r8,14
  4600. lea r11,QWORD PTR[r12*1+r11]
  4601. xor r13,r14
  4602. mov r15,rax
  4603. rorx r12,rax,39
  4604. lea r11,QWORD PTR[r13*1+r11]
  4605. xor r15,rbx
  4606. rorx r14,rax,34
  4607. rorx r13,rax,28
  4608. lea rdx,QWORD PTR[r11*1+rdx]
  4609. and rdi,r15
  4610. xor r14,r12
  4611. xor rdi,rbx
  4612. xor r14,r13
  4613. lea r11,QWORD PTR[rdi*1+r11]
  4614. mov r12,r8
  4615. add r10,QWORD PTR[8+rsp]
  4616. and r12,rdx
  4617. rorx r13,rdx,41
  4618. rorx rdi,rdx,18
  4619. lea r11,QWORD PTR[r14*1+r11]
  4620. lea r10,QWORD PTR[r12*1+r10]
  4621. andn r12,rdx,r9
  4622. xor r13,rdi
  4623. rorx r14,rdx,14
  4624. lea r10,QWORD PTR[r12*1+r10]
  4625. xor r13,r14
  4626. mov rdi,r11
  4627. rorx r12,r11,39
  4628. lea r10,QWORD PTR[r13*1+r10]
  4629. xor rdi,rax
  4630. rorx r14,r11,34
  4631. rorx r13,r11,28
  4632. lea rcx,QWORD PTR[r10*1+rcx]
  4633. and r15,rdi
  4634. xor r14,r12
  4635. xor r15,rax
  4636. xor r14,r13
  4637. lea r10,QWORD PTR[r15*1+r10]
  4638. mov r12,rdx
  4639. add r9,QWORD PTR[32+rsp]
  4640. and r12,rcx
  4641. rorx r13,rcx,41
  4642. rorx r15,rcx,18
  4643. lea r10,QWORD PTR[r14*1+r10]
  4644. lea r9,QWORD PTR[r12*1+r9]
  4645. andn r12,rcx,r8
  4646. xor r13,r15
  4647. rorx r14,rcx,14
  4648. lea r9,QWORD PTR[r12*1+r9]
  4649. xor r13,r14
  4650. mov r15,r10
  4651. rorx r12,r10,39
  4652. lea r9,QWORD PTR[r13*1+r9]
  4653. xor r15,r11
  4654. rorx r14,r10,34
  4655. rorx r13,r10,28
  4656. lea rbx,QWORD PTR[r9*1+rbx]
  4657. and rdi,r15
  4658. xor r14,r12
  4659. xor rdi,r11
  4660. xor r14,r13
  4661. lea r9,QWORD PTR[rdi*1+r9]
  4662. mov r12,rcx
  4663. add r8,QWORD PTR[40+rsp]
  4664. and r12,rbx
  4665. rorx r13,rbx,41
  4666. rorx rdi,rbx,18
  4667. lea r9,QWORD PTR[r14*1+r9]
  4668. lea r8,QWORD PTR[r12*1+r8]
  4669. andn r12,rbx,rdx
  4670. xor r13,rdi
  4671. rorx r14,rbx,14
  4672. lea r8,QWORD PTR[r12*1+r8]
  4673. xor r13,r14
  4674. mov rdi,r9
  4675. rorx r12,r9,39
  4676. lea r8,QWORD PTR[r13*1+r8]
  4677. xor rdi,r10
  4678. rorx r14,r9,34
  4679. rorx r13,r9,28
  4680. lea rax,QWORD PTR[r8*1+rax]
  4681. and r15,rdi
  4682. xor r14,r12
  4683. xor r15,r10
  4684. xor r14,r13
  4685. lea r8,QWORD PTR[r15*1+r8]
  4686. mov r12,rbx
  4687. add rdx,QWORD PTR[64+rsp]
  4688. and r12,rax
  4689. rorx r13,rax,41
  4690. rorx r15,rax,18
  4691. lea r8,QWORD PTR[r14*1+r8]
  4692. lea rdx,QWORD PTR[r12*1+rdx]
  4693. andn r12,rax,rcx
  4694. xor r13,r15
  4695. rorx r14,rax,14
  4696. lea rdx,QWORD PTR[r12*1+rdx]
  4697. xor r13,r14
  4698. mov r15,r8
  4699. rorx r12,r8,39
  4700. lea rdx,QWORD PTR[r13*1+rdx]
  4701. xor r15,r9
  4702. rorx r14,r8,34
  4703. rorx r13,r8,28
  4704. lea r11,QWORD PTR[rdx*1+r11]
  4705. and rdi,r15
  4706. xor r14,r12
  4707. xor rdi,r9
  4708. xor r14,r13
  4709. lea rdx,QWORD PTR[rdi*1+rdx]
  4710. mov r12,rax
  4711. add rcx,QWORD PTR[72+rsp]
  4712. and r12,r11
  4713. rorx r13,r11,41
  4714. rorx rdi,r11,18
  4715. lea rdx,QWORD PTR[r14*1+rdx]
  4716. lea rcx,QWORD PTR[r12*1+rcx]
  4717. andn r12,r11,rbx
  4718. xor r13,rdi
  4719. rorx r14,r11,14
  4720. lea rcx,QWORD PTR[r12*1+rcx]
  4721. xor r13,r14
  4722. mov rdi,rdx
  4723. rorx r12,rdx,39
  4724. lea rcx,QWORD PTR[r13*1+rcx]
  4725. xor rdi,r8
  4726. rorx r14,rdx,34
  4727. rorx r13,rdx,28
  4728. lea r10,QWORD PTR[rcx*1+r10]
  4729. and r15,rdi
  4730. xor r14,r12
  4731. xor r15,r8
  4732. xor r14,r13
  4733. lea rcx,QWORD PTR[r15*1+rcx]
  4734. mov r12,r11
  4735. add rbx,QWORD PTR[96+rsp]
  4736. and r12,r10
  4737. rorx r13,r10,41
  4738. rorx r15,r10,18
  4739. lea rcx,QWORD PTR[r14*1+rcx]
  4740. lea rbx,QWORD PTR[r12*1+rbx]
  4741. andn r12,r10,rax
  4742. xor r13,r15
  4743. rorx r14,r10,14
  4744. lea rbx,QWORD PTR[r12*1+rbx]
  4745. xor r13,r14
  4746. mov r15,rcx
  4747. rorx r12,rcx,39
  4748. lea rbx,QWORD PTR[r13*1+rbx]
  4749. xor r15,rdx
  4750. rorx r14,rcx,34
  4751. rorx r13,rcx,28
  4752. lea r9,QWORD PTR[rbx*1+r9]
  4753. and rdi,r15
  4754. xor r14,r12
  4755. xor rdi,rdx
  4756. xor r14,r13
  4757. lea rbx,QWORD PTR[rdi*1+rbx]
  4758. mov r12,r10
  4759. add rax,QWORD PTR[104+rsp]
  4760. and r12,r9
  4761. rorx r13,r9,41
  4762. rorx rdi,r9,18
  4763. lea rbx,QWORD PTR[r14*1+rbx]
  4764. lea rax,QWORD PTR[r12*1+rax]
  4765. andn r12,r9,r11
  4766. xor r13,rdi
  4767. rorx r14,r9,14
  4768. lea rax,QWORD PTR[r12*1+rax]
  4769. xor r13,r14
  4770. mov rdi,rbx
  4771. rorx r12,rbx,39
  4772. lea rax,QWORD PTR[r13*1+rax]
  4773. xor rdi,rcx
  4774. rorx r14,rbx,34
  4775. rorx r13,rbx,28
  4776. lea r8,QWORD PTR[rax*1+r8]
  4777. and r15,rdi
  4778. xor r14,r12
  4779. xor r15,rcx
  4780. xor r14,r13
  4781. lea rax,QWORD PTR[r15*1+rax]
  4782. mov r12,r9
  4783. mov rdi,QWORD PTR[1280+rsp]
  4784. add rax,r14
  4785. lea rbp,QWORD PTR[1152+rsp]
  4786. add rax,QWORD PTR[rdi]
  4787. add rbx,QWORD PTR[8+rdi]
  4788. add rcx,QWORD PTR[16+rdi]
  4789. add rdx,QWORD PTR[24+rdi]
  4790. add r8,QWORD PTR[32+rdi]
  4791. add r9,QWORD PTR[40+rdi]
  4792. add r10,QWORD PTR[48+rdi]
  4793. add r11,QWORD PTR[56+rdi]
  4794. mov QWORD PTR[rdi],rax
  4795. mov QWORD PTR[8+rdi],rbx
  4796. mov QWORD PTR[16+rdi],rcx
  4797. mov QWORD PTR[24+rdi],rdx
  4798. mov QWORD PTR[32+rdi],r8
  4799. mov QWORD PTR[40+rdi],r9
  4800. mov QWORD PTR[48+rdi],r10
  4801. mov QWORD PTR[56+rdi],r11
  4802. cmp rsi,QWORD PTR[144+rbp]
  4803. je $L$done_avx2
  4804. xor r14,r14
  4805. mov rdi,rbx
  4806. xor rdi,rcx
  4807. mov r12,r9
  4808. jmp $L$ower_avx2
  4809. ALIGN 16
  4810. $L$ower_avx2::
  4811. add r11,QWORD PTR[((0+16))+rbp]
  4812. and r12,r8
  4813. rorx r13,r8,41
  4814. rorx r15,r8,18
  4815. lea rax,QWORD PTR[r14*1+rax]
  4816. lea r11,QWORD PTR[r12*1+r11]
  4817. andn r12,r8,r10
  4818. xor r13,r15
  4819. rorx r14,r8,14
  4820. lea r11,QWORD PTR[r12*1+r11]
  4821. xor r13,r14
  4822. mov r15,rax
  4823. rorx r12,rax,39
  4824. lea r11,QWORD PTR[r13*1+r11]
  4825. xor r15,rbx
  4826. rorx r14,rax,34
  4827. rorx r13,rax,28
  4828. lea rdx,QWORD PTR[r11*1+rdx]
  4829. and rdi,r15
  4830. xor r14,r12
  4831. xor rdi,rbx
  4832. xor r14,r13
  4833. lea r11,QWORD PTR[rdi*1+r11]
  4834. mov r12,r8
  4835. add r10,QWORD PTR[((8+16))+rbp]
  4836. and r12,rdx
  4837. rorx r13,rdx,41
  4838. rorx rdi,rdx,18
  4839. lea r11,QWORD PTR[r14*1+r11]
  4840. lea r10,QWORD PTR[r12*1+r10]
  4841. andn r12,rdx,r9
  4842. xor r13,rdi
  4843. rorx r14,rdx,14
  4844. lea r10,QWORD PTR[r12*1+r10]
  4845. xor r13,r14
  4846. mov rdi,r11
  4847. rorx r12,r11,39
  4848. lea r10,QWORD PTR[r13*1+r10]
  4849. xor rdi,rax
  4850. rorx r14,r11,34
  4851. rorx r13,r11,28
  4852. lea rcx,QWORD PTR[r10*1+rcx]
  4853. and r15,rdi
  4854. xor r14,r12
  4855. xor r15,rax
  4856. xor r14,r13
  4857. lea r10,QWORD PTR[r15*1+r10]
  4858. mov r12,rdx
  4859. add r9,QWORD PTR[((32+16))+rbp]
  4860. and r12,rcx
  4861. rorx r13,rcx,41
  4862. rorx r15,rcx,18
  4863. lea r10,QWORD PTR[r14*1+r10]
  4864. lea r9,QWORD PTR[r12*1+r9]
  4865. andn r12,rcx,r8
  4866. xor r13,r15
  4867. rorx r14,rcx,14
  4868. lea r9,QWORD PTR[r12*1+r9]
  4869. xor r13,r14
  4870. mov r15,r10
  4871. rorx r12,r10,39
  4872. lea r9,QWORD PTR[r13*1+r9]
  4873. xor r15,r11
  4874. rorx r14,r10,34
  4875. rorx r13,r10,28
  4876. lea rbx,QWORD PTR[r9*1+rbx]
  4877. and rdi,r15
  4878. xor r14,r12
  4879. xor rdi,r11
  4880. xor r14,r13
  4881. lea r9,QWORD PTR[rdi*1+r9]
  4882. mov r12,rcx
  4883. add r8,QWORD PTR[((40+16))+rbp]
  4884. and r12,rbx
  4885. rorx r13,rbx,41
  4886. rorx rdi,rbx,18
  4887. lea r9,QWORD PTR[r14*1+r9]
  4888. lea r8,QWORD PTR[r12*1+r8]
  4889. andn r12,rbx,rdx
  4890. xor r13,rdi
  4891. rorx r14,rbx,14
  4892. lea r8,QWORD PTR[r12*1+r8]
  4893. xor r13,r14
  4894. mov rdi,r9
  4895. rorx r12,r9,39
  4896. lea r8,QWORD PTR[r13*1+r8]
  4897. xor rdi,r10
  4898. rorx r14,r9,34
  4899. rorx r13,r9,28
  4900. lea rax,QWORD PTR[r8*1+rax]
  4901. and r15,rdi
  4902. xor r14,r12
  4903. xor r15,r10
  4904. xor r14,r13
  4905. lea r8,QWORD PTR[r15*1+r8]
  4906. mov r12,rbx
  4907. add rdx,QWORD PTR[((64+16))+rbp]
  4908. and r12,rax
  4909. rorx r13,rax,41
  4910. rorx r15,rax,18
  4911. lea r8,QWORD PTR[r14*1+r8]
  4912. lea rdx,QWORD PTR[r12*1+rdx]
  4913. andn r12,rax,rcx
  4914. xor r13,r15
  4915. rorx r14,rax,14
  4916. lea rdx,QWORD PTR[r12*1+rdx]
  4917. xor r13,r14
  4918. mov r15,r8
  4919. rorx r12,r8,39
  4920. lea rdx,QWORD PTR[r13*1+rdx]
  4921. xor r15,r9
  4922. rorx r14,r8,34
  4923. rorx r13,r8,28
  4924. lea r11,QWORD PTR[rdx*1+r11]
  4925. and rdi,r15
  4926. xor r14,r12
  4927. xor rdi,r9
  4928. xor r14,r13
  4929. lea rdx,QWORD PTR[rdi*1+rdx]
  4930. mov r12,rax
  4931. add rcx,QWORD PTR[((72+16))+rbp]
  4932. and r12,r11
  4933. rorx r13,r11,41
  4934. rorx rdi,r11,18
  4935. lea rdx,QWORD PTR[r14*1+rdx]
  4936. lea rcx,QWORD PTR[r12*1+rcx]
  4937. andn r12,r11,rbx
  4938. xor r13,rdi
  4939. rorx r14,r11,14
  4940. lea rcx,QWORD PTR[r12*1+rcx]
  4941. xor r13,r14
  4942. mov rdi,rdx
  4943. rorx r12,rdx,39
  4944. lea rcx,QWORD PTR[r13*1+rcx]
  4945. xor rdi,r8
  4946. rorx r14,rdx,34
  4947. rorx r13,rdx,28
  4948. lea r10,QWORD PTR[rcx*1+r10]
  4949. and r15,rdi
  4950. xor r14,r12
  4951. xor r15,r8
  4952. xor r14,r13
  4953. lea rcx,QWORD PTR[r15*1+rcx]
  4954. mov r12,r11
  4955. add rbx,QWORD PTR[((96+16))+rbp]
  4956. and r12,r10
  4957. rorx r13,r10,41
  4958. rorx r15,r10,18
  4959. lea rcx,QWORD PTR[r14*1+rcx]
  4960. lea rbx,QWORD PTR[r12*1+rbx]
  4961. andn r12,r10,rax
  4962. xor r13,r15
  4963. rorx r14,r10,14
  4964. lea rbx,QWORD PTR[r12*1+rbx]
  4965. xor r13,r14
  4966. mov r15,rcx
  4967. rorx r12,rcx,39
  4968. lea rbx,QWORD PTR[r13*1+rbx]
  4969. xor r15,rdx
  4970. rorx r14,rcx,34
  4971. rorx r13,rcx,28
  4972. lea r9,QWORD PTR[rbx*1+r9]
  4973. and rdi,r15
  4974. xor r14,r12
  4975. xor rdi,rdx
  4976. xor r14,r13
  4977. lea rbx,QWORD PTR[rdi*1+rbx]
  4978. mov r12,r10
  4979. add rax,QWORD PTR[((104+16))+rbp]
  4980. and r12,r9
  4981. rorx r13,r9,41
  4982. rorx rdi,r9,18
  4983. lea rbx,QWORD PTR[r14*1+rbx]
  4984. lea rax,QWORD PTR[r12*1+rax]
  4985. andn r12,r9,r11
  4986. xor r13,rdi
  4987. rorx r14,r9,14
  4988. lea rax,QWORD PTR[r12*1+rax]
  4989. xor r13,r14
  4990. mov rdi,rbx
  4991. rorx r12,rbx,39
  4992. lea rax,QWORD PTR[r13*1+rax]
  4993. xor rdi,rcx
  4994. rorx r14,rbx,34
  4995. rorx r13,rbx,28
  4996. lea r8,QWORD PTR[rax*1+r8]
  4997. and r15,rdi
  4998. xor r14,r12
  4999. xor r15,rcx
  5000. xor r14,r13
  5001. lea rax,QWORD PTR[r15*1+rax]
  5002. mov r12,r9
  5003. lea rbp,QWORD PTR[((-128))+rbp]
  5004. cmp rbp,rsp
  5005. jae $L$ower_avx2
  5006. mov rdi,QWORD PTR[1280+rsp]
  5007. add rax,r14
  5008. lea rsp,QWORD PTR[1152+rsp]
  5009. add rax,QWORD PTR[rdi]
  5010. add rbx,QWORD PTR[8+rdi]
  5011. add rcx,QWORD PTR[16+rdi]
  5012. add rdx,QWORD PTR[24+rdi]
  5013. add r8,QWORD PTR[32+rdi]
  5014. add r9,QWORD PTR[40+rdi]
  5015. lea rsi,QWORD PTR[256+rsi]
  5016. add r10,QWORD PTR[48+rdi]
  5017. mov r12,rsi
  5018. add r11,QWORD PTR[56+rdi]
  5019. cmp rsi,QWORD PTR[((128+16))+rsp]
  5020. mov QWORD PTR[rdi],rax
  5021. cmove r12,rsp
  5022. mov QWORD PTR[8+rdi],rbx
  5023. mov QWORD PTR[16+rdi],rcx
  5024. mov QWORD PTR[24+rdi],rdx
  5025. mov QWORD PTR[32+rdi],r8
  5026. mov QWORD PTR[40+rdi],r9
  5027. mov QWORD PTR[48+rdi],r10
  5028. mov QWORD PTR[56+rdi],r11
  5029. jbe $L$oop_avx2
  5030. lea rbp,QWORD PTR[rsp]
  5031. $L$done_avx2::
  5032. mov rsi,QWORD PTR[152+rbp]
  5033. vzeroupper
  5034. movaps xmm6,XMMWORD PTR[((128+32))+rbp]
  5035. movaps xmm7,XMMWORD PTR[((128+48))+rbp]
  5036. movaps xmm8,XMMWORD PTR[((128+64))+rbp]
  5037. movaps xmm9,XMMWORD PTR[((128+80))+rbp]
  5038. movaps xmm10,XMMWORD PTR[((128+96))+rbp]
  5039. movaps xmm11,XMMWORD PTR[((128+112))+rbp]
  5040. mov r15,QWORD PTR[((-48))+rsi]
  5041. mov r14,QWORD PTR[((-40))+rsi]
  5042. mov r13,QWORD PTR[((-32))+rsi]
  5043. mov r12,QWORD PTR[((-24))+rsi]
  5044. mov rbp,QWORD PTR[((-16))+rsi]
  5045. mov rbx,QWORD PTR[((-8))+rsi]
  5046. lea rsp,QWORD PTR[rsi]
  5047. $L$epilogue_avx2::
  5048. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  5049. mov rsi,QWORD PTR[16+rsp]
  5050. DB 0F3h,0C3h ;repret
  5051. $L$SEH_end_sha512_block_data_order_avx2::
  5052. sha512_block_data_order_avx2 ENDP
  5053. EXTERN __imp_RtlVirtualUnwind:NEAR
  5054. ALIGN 16
  5055. se_handler PROC PRIVATE
  5056. push rsi
  5057. push rdi
  5058. push rbx
  5059. push rbp
  5060. push r12
  5061. push r13
  5062. push r14
  5063. push r15
  5064. pushfq
  5065. sub rsp,64
  5066. mov rax,QWORD PTR[120+r8]
  5067. mov rbx,QWORD PTR[248+r8]
  5068. mov rsi,QWORD PTR[8+r9]
  5069. mov r11,QWORD PTR[56+r9]
  5070. mov r10d,DWORD PTR[r11]
  5071. lea r10,QWORD PTR[r10*1+rsi]
  5072. cmp rbx,r10
  5073. jb $L$in_prologue
  5074. mov rax,QWORD PTR[152+r8]
  5075. mov r10d,DWORD PTR[4+r11]
  5076. lea r10,QWORD PTR[r10*1+rsi]
  5077. cmp rbx,r10
  5078. jae $L$in_prologue
  5079. lea r10,QWORD PTR[$L$avx2_shortcut]
  5080. cmp rbx,r10
  5081. jb $L$not_in_avx2
  5082. and rax,-256*8
  5083. add rax,1152
  5084. $L$not_in_avx2::
  5085. mov rsi,rax
  5086. mov rax,QWORD PTR[((128+24))+rax]
  5087. mov rbx,QWORD PTR[((-8))+rax]
  5088. mov rbp,QWORD PTR[((-16))+rax]
  5089. mov r12,QWORD PTR[((-24))+rax]
  5090. mov r13,QWORD PTR[((-32))+rax]
  5091. mov r14,QWORD PTR[((-40))+rax]
  5092. mov r15,QWORD PTR[((-48))+rax]
  5093. mov QWORD PTR[144+r8],rbx
  5094. mov QWORD PTR[160+r8],rbp
  5095. mov QWORD PTR[216+r8],r12
  5096. mov QWORD PTR[224+r8],r13
  5097. mov QWORD PTR[232+r8],r14
  5098. mov QWORD PTR[240+r8],r15
  5099. lea r10,QWORD PTR[$L$epilogue]
  5100. cmp rbx,r10
  5101. jb $L$in_prologue
  5102. lea rsi,QWORD PTR[((128+32))+rsi]
  5103. lea rdi,QWORD PTR[512+r8]
  5104. mov ecx,12
  5105. DD 0a548f3fch
  5106. $L$in_prologue::
  5107. mov rdi,QWORD PTR[8+rax]
  5108. mov rsi,QWORD PTR[16+rax]
  5109. mov QWORD PTR[152+r8],rax
  5110. mov QWORD PTR[168+r8],rsi
  5111. mov QWORD PTR[176+r8],rdi
  5112. mov rdi,QWORD PTR[40+r9]
  5113. mov rsi,r8
  5114. mov ecx,154
  5115. DD 0a548f3fch
  5116. mov rsi,r9
  5117. xor rcx,rcx
  5118. mov rdx,QWORD PTR[8+rsi]
  5119. mov r8,QWORD PTR[rsi]
  5120. mov r9,QWORD PTR[16+rsi]
  5121. mov r10,QWORD PTR[40+rsi]
  5122. lea r11,QWORD PTR[56+rsi]
  5123. lea r12,QWORD PTR[24+rsi]
  5124. mov QWORD PTR[32+rsp],r10
  5125. mov QWORD PTR[40+rsp],r11
  5126. mov QWORD PTR[48+rsp],r12
  5127. mov QWORD PTR[56+rsp],rcx
  5128. call QWORD PTR[__imp_RtlVirtualUnwind]
  5129. mov eax,1
  5130. add rsp,64
  5131. popfq
  5132. pop r15
  5133. pop r14
  5134. pop r13
  5135. pop r12
  5136. pop rbp
  5137. pop rbx
  5138. pop rdi
  5139. pop rsi
  5140. DB 0F3h,0C3h ;repret
  5141. se_handler ENDP
  5142. .text$ ENDS
  5143. .pdata SEGMENT READONLY ALIGN(4)
  5144. ALIGN 4
  5145. DD imagerel $L$SEH_begin_sha512_block_data_order
  5146. DD imagerel $L$SEH_end_sha512_block_data_order
  5147. DD imagerel $L$SEH_info_sha512_block_data_order
  5148. DD imagerel $L$SEH_begin_sha512_block_data_order_xop
  5149. DD imagerel $L$SEH_end_sha512_block_data_order_xop
  5150. DD imagerel $L$SEH_info_sha512_block_data_order_xop
  5151. DD imagerel $L$SEH_begin_sha512_block_data_order_avx
  5152. DD imagerel $L$SEH_end_sha512_block_data_order_avx
  5153. DD imagerel $L$SEH_info_sha512_block_data_order_avx
  5154. DD imagerel $L$SEH_begin_sha512_block_data_order_avx2
  5155. DD imagerel $L$SEH_end_sha512_block_data_order_avx2
  5156. DD imagerel $L$SEH_info_sha512_block_data_order_avx2
  5157. .pdata ENDS
  5158. .xdata SEGMENT READONLY ALIGN(8)
  5159. ALIGN 8
  5160. $L$SEH_info_sha512_block_data_order::
  5161. DB 9,0,0,0
  5162. DD imagerel se_handler
  5163. DD imagerel $L$prologue,imagerel $L$epilogue
  5164. $L$SEH_info_sha512_block_data_order_xop::
  5165. DB 9,0,0,0
  5166. DD imagerel se_handler
  5167. DD imagerel $L$prologue_xop,imagerel $L$epilogue_xop
  5168. $L$SEH_info_sha512_block_data_order_avx::
  5169. DB 9,0,0,0
  5170. DD imagerel se_handler
  5171. DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
  5172. $L$SEH_info_sha512_block_data_order_avx2::
  5173. DB 9,0,0,0
  5174. DD imagerel se_handler
  5175. DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
  5176. .xdata ENDS
  5177. END