sha256_asm.S 589 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678
  1. /* sha256_asm
  2. *
  3. * Copyright (C) 2006-2022 wolfSSL Inc.
  4. *
  5. * This file is part of wolfSSL.
  6. *
  7. * wolfSSL is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * wolfSSL is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
  20. */
  21. #ifdef WOLFSSL_USER_SETTINGS
  22. #ifdef WOLFSSL_USER_SETTINGS_ASM
  23. /*
  24. * user_settings_asm.h is a file generated by the script user_settings_asm.sh.
  25. * The script takes in a user_settings.h and produces user_settings_asm.h, which
  26. * is a stripped down version of user_settings.h containing only preprocessor
  27. * directives. This makes the header safe to include in assembly (.S) files.
  28. */
  29. #include "user_settings_asm.h"
  30. #else
  31. /*
  32. * Note: if user_settings.h contains any C code (e.g. a typedef or function
  33. * prototype), including it here in an assembly (.S) file will cause an
  34. * assembler failure. See user_settings_asm.h above.
  35. */
  36. #include "user_settings.h"
  37. #endif /* WOLFSSL_USER_SETTINGS_ASM */
  38. #endif /* WOLFSSL_USER_SETTINGS */
  39. #ifndef HAVE_INTEL_AVX1
  40. #define HAVE_INTEL_AVX1
  41. #endif /* HAVE_INTEL_AVX1 */
  42. #ifndef NO_AVX2_SUPPORT
  43. #define HAVE_INTEL_AVX2
  44. #endif /* NO_AVX2_SUPPORT */
  45. #ifdef WOLFSSL_X86_64_BUILD
  46. #ifdef HAVE_INTEL_AVX1
  47. #ifndef __APPLE__
  48. .data
  49. #else
  50. .section __DATA,__data
  51. #endif /* __APPLE__ */
  52. L_avx1_sha256_k:
  53. .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  54. .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  55. .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  56. .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  57. .long 0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc
  58. .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  59. .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  60. .long 0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967
  61. .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  62. .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  63. .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  64. .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  65. .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  66. .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  67. .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  68. .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  69. #ifndef __APPLE__
  70. .data
  71. #else
  72. .section __DATA,__data
  73. #endif /* __APPLE__ */
  74. #ifndef __APPLE__
  75. .align 16
  76. #else
  77. .p2align 4
  78. #endif /* __APPLE__ */
  79. L_avx1_sha256_shuf_00BA:
  80. .quad 0xb0a090803020100, 0xffffffffffffffff
  81. #ifndef __APPLE__
  82. .data
  83. #else
  84. .section __DATA,__data
  85. #endif /* __APPLE__ */
  86. #ifndef __APPLE__
  87. .align 16
  88. #else
  89. .p2align 4
  90. #endif /* __APPLE__ */
  91. L_avx1_sha256_shuf_DC00:
  92. .quad 0xffffffffffffffff, 0xb0a090803020100
  93. #ifndef __APPLE__
  94. .data
  95. #else
  96. .section __DATA,__data
  97. #endif /* __APPLE__ */
  98. #ifndef __APPLE__
  99. .align 16
  100. #else
  101. .p2align 4
  102. #endif /* __APPLE__ */
  103. L_avx1_sha256_flip_mask:
  104. .quad 0x405060700010203, 0xc0d0e0f08090a0b
  105. #ifndef __APPLE__
  106. .text
  107. .globl Transform_Sha256_AVX1
  108. .type Transform_Sha256_AVX1,@function
  109. .align 16
  110. Transform_Sha256_AVX1:
  111. #else
  112. .section __TEXT,__text
  113. .globl _Transform_Sha256_AVX1
  114. .p2align 4
  115. _Transform_Sha256_AVX1:
  116. #endif /* __APPLE__ */
  117. pushq %rbx
  118. pushq %r12
  119. pushq %r13
  120. pushq %r14
  121. pushq %r15
  122. subq $0x40, %rsp
  123. leaq 32(%rdi), %rax
  124. vmovdqa L_avx1_sha256_flip_mask(%rip), %xmm13
  125. vmovdqa L_avx1_sha256_shuf_00BA(%rip), %xmm11
  126. vmovdqa L_avx1_sha256_shuf_DC00(%rip), %xmm12
  127. movl (%rdi), %r8d
  128. movl 4(%rdi), %r9d
  129. movl 8(%rdi), %r10d
  130. movl 12(%rdi), %r11d
  131. movl 16(%rdi), %r12d
  132. movl 20(%rdi), %r13d
  133. movl 24(%rdi), %r14d
  134. movl 28(%rdi), %r15d
  135. # X0, X1, X2, X3 = W[0..15]
  136. vmovdqu (%rax), %xmm0
  137. vmovdqu 16(%rax), %xmm1
  138. vpshufb %xmm13, %xmm0, %xmm0
  139. vpshufb %xmm13, %xmm1, %xmm1
  140. vmovdqu 32(%rax), %xmm2
  141. vmovdqu 48(%rax), %xmm3
  142. vpshufb %xmm13, %xmm2, %xmm2
  143. vpshufb %xmm13, %xmm3, %xmm3
  144. movl %r9d, %ebx
  145. movl %r12d, %edx
  146. xorl %r10d, %ebx
  147. # set_w_k_xfer_4: 0
  148. vpaddd 0+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  149. vpaddd 16+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  150. vmovdqu %xmm4, (%rsp)
  151. vmovdqu %xmm5, 16(%rsp)
  152. vpaddd 32+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  153. vpaddd 48+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  154. vmovdqu %xmm6, 32(%rsp)
  155. vmovdqu %xmm7, 48(%rsp)
  156. # msg_sched: 0-3
  157. # rnd_0: 0 - 0
  158. rorl $14, %edx
  159. vpalignr $4, %xmm0, %xmm1, %xmm5
  160. vpalignr $4, %xmm2, %xmm3, %xmm4
  161. # rnd_0: 1 - 2
  162. movl %r9d, %eax
  163. movl %r13d, %ecx
  164. addl (%rsp), %r15d
  165. xorl %r14d, %ecx
  166. xorl %r12d, %edx
  167. andl %r12d, %ecx
  168. vpsrld $7, %xmm5, %xmm6
  169. vpslld $25, %xmm5, %xmm7
  170. # rnd_0: 3 - 4
  171. rorl $5, %edx
  172. xorl %r14d, %ecx
  173. xorl %r12d, %edx
  174. addl %ecx, %r15d
  175. rorl $6, %edx
  176. xorl %r8d, %eax
  177. addl %edx, %r15d
  178. movl %r8d, %ecx
  179. vpsrld $18, %xmm5, %xmm8
  180. vpslld $14, %xmm5, %xmm9
  181. # rnd_0: 5 - 6
  182. andl %eax, %ebx
  183. rorl $9, %ecx
  184. xorl %r8d, %ecx
  185. xorl %r9d, %ebx
  186. rorl $11, %ecx
  187. addl %r15d, %r11d
  188. xorl %r8d, %ecx
  189. addl %ebx, %r15d
  190. vpor %xmm6, %xmm7, %xmm6
  191. vpor %xmm8, %xmm9, %xmm8
  192. # rnd_0: 7 - 7
  193. rorl $2, %ecx
  194. movl %r11d, %edx
  195. addl %ecx, %r15d
  196. # rnd_1: 0 - 1
  197. rorl $14, %edx
  198. movl %r8d, %ebx
  199. movl %r12d, %ecx
  200. addl 4(%rsp), %r14d
  201. xorl %r13d, %ecx
  202. vpsrld $3, %xmm5, %xmm9
  203. vpxor %xmm6, %xmm8, %xmm6
  204. # rnd_1: 2 - 3
  205. xorl %r11d, %edx
  206. andl %r11d, %ecx
  207. rorl $5, %edx
  208. xorl %r13d, %ecx
  209. xorl %r11d, %edx
  210. addl %ecx, %r14d
  211. vpxor %xmm6, %xmm9, %xmm5
  212. vpshufd $0xfa, %xmm3, %xmm6
  213. # rnd_1: 4 - 5
  214. rorl $6, %edx
  215. xorl %r15d, %ebx
  216. addl %edx, %r14d
  217. movl %r15d, %ecx
  218. andl %ebx, %eax
  219. rorl $9, %ecx
  220. xorl %r15d, %ecx
  221. xorl %r8d, %eax
  222. vpsrld $10, %xmm6, %xmm8
  223. vpsrlq $19, %xmm6, %xmm7
  224. # rnd_1: 6 - 7
  225. rorl $11, %ecx
  226. addl %r14d, %r10d
  227. xorl %r15d, %ecx
  228. addl %eax, %r14d
  229. rorl $2, %ecx
  230. movl %r10d, %edx
  231. addl %ecx, %r14d
  232. # rnd_0: 0 - 0
  233. rorl $14, %edx
  234. vpsrlq $0x11, %xmm6, %xmm6
  235. vpaddd %xmm0, %xmm4, %xmm4
  236. # rnd_0: 1 - 3
  237. movl %r15d, %eax
  238. movl %r11d, %ecx
  239. addl 8(%rsp), %r13d
  240. xorl %r12d, %ecx
  241. xorl %r10d, %edx
  242. andl %r10d, %ecx
  243. rorl $5, %edx
  244. xorl %r12d, %ecx
  245. xorl %r10d, %edx
  246. addl %ecx, %r13d
  247. vpxor %xmm6, %xmm7, %xmm6
  248. vpaddd %xmm5, %xmm4, %xmm4
  249. # rnd_0: 4 - 4
  250. rorl $6, %edx
  251. xorl %r14d, %eax
  252. addl %edx, %r13d
  253. movl %r14d, %ecx
  254. vpxor %xmm6, %xmm8, %xmm8
  255. # rnd_0: 5 - 5
  256. andl %eax, %ebx
  257. rorl $9, %ecx
  258. xorl %r14d, %ecx
  259. xorl %r15d, %ebx
  260. vpshufb %xmm11, %xmm8, %xmm8
  261. # rnd_0: 6 - 6
  262. rorl $11, %ecx
  263. addl %r13d, %r9d
  264. xorl %r14d, %ecx
  265. addl %ebx, %r13d
  266. vpaddd %xmm8, %xmm4, %xmm4
  267. # rnd_0: 7 - 7
  268. rorl $2, %ecx
  269. movl %r9d, %edx
  270. addl %ecx, %r13d
  271. # rnd_1: 0 - 0
  272. rorl $14, %edx
  273. vpshufd $0x50, %xmm4, %xmm6
  274. # rnd_1: 1 - 1
  275. movl %r14d, %ebx
  276. movl %r10d, %ecx
  277. addl 12(%rsp), %r12d
  278. xorl %r11d, %ecx
  279. vpsrlq $0x11, %xmm6, %xmm8
  280. vpsrlq $19, %xmm6, %xmm7
  281. # rnd_1: 2 - 3
  282. xorl %r9d, %edx
  283. andl %r9d, %ecx
  284. rorl $5, %edx
  285. xorl %r11d, %ecx
  286. xorl %r9d, %edx
  287. addl %ecx, %r12d
  288. vpsrld $10, %xmm6, %xmm9
  289. vpxor %xmm8, %xmm7, %xmm8
  290. # rnd_1: 4 - 5
  291. rorl $6, %edx
  292. xorl %r13d, %ebx
  293. addl %edx, %r12d
  294. movl %r13d, %ecx
  295. andl %ebx, %eax
  296. rorl $9, %ecx
  297. xorl %r13d, %ecx
  298. xorl %r14d, %eax
  299. vpxor %xmm9, %xmm8, %xmm9
  300. # rnd_1: 6 - 6
  301. rorl $11, %ecx
  302. addl %r12d, %r8d
  303. xorl %r13d, %ecx
  304. addl %eax, %r12d
  305. vpshufb %xmm12, %xmm9, %xmm9
  306. # rnd_1: 7 - 7
  307. rorl $2, %ecx
  308. movl %r8d, %edx
  309. addl %ecx, %r12d
  310. vpaddd %xmm4, %xmm9, %xmm0
  311. # msg_sched done: 0-3
  312. # msg_sched: 4-7
  313. # rnd_0: 0 - 0
  314. rorl $14, %edx
  315. vpalignr $4, %xmm1, %xmm2, %xmm5
  316. vpalignr $4, %xmm3, %xmm0, %xmm4
  317. # rnd_0: 1 - 2
  318. movl %r13d, %eax
  319. movl %r9d, %ecx
  320. addl 16(%rsp), %r11d
  321. xorl %r10d, %ecx
  322. xorl %r8d, %edx
  323. andl %r8d, %ecx
  324. vpsrld $7, %xmm5, %xmm6
  325. vpslld $25, %xmm5, %xmm7
  326. # rnd_0: 3 - 4
  327. rorl $5, %edx
  328. xorl %r10d, %ecx
  329. xorl %r8d, %edx
  330. addl %ecx, %r11d
  331. rorl $6, %edx
  332. xorl %r12d, %eax
  333. addl %edx, %r11d
  334. movl %r12d, %ecx
  335. vpsrld $18, %xmm5, %xmm8
  336. vpslld $14, %xmm5, %xmm9
  337. # rnd_0: 5 - 6
  338. andl %eax, %ebx
  339. rorl $9, %ecx
  340. xorl %r12d, %ecx
  341. xorl %r13d, %ebx
  342. rorl $11, %ecx
  343. addl %r11d, %r15d
  344. xorl %r12d, %ecx
  345. addl %ebx, %r11d
  346. vpor %xmm6, %xmm7, %xmm6
  347. vpor %xmm8, %xmm9, %xmm8
  348. # rnd_0: 7 - 7
  349. rorl $2, %ecx
  350. movl %r15d, %edx
  351. addl %ecx, %r11d
  352. # rnd_1: 0 - 1
  353. rorl $14, %edx
  354. movl %r12d, %ebx
  355. movl %r8d, %ecx
  356. addl 20(%rsp), %r10d
  357. xorl %r9d, %ecx
  358. vpsrld $3, %xmm5, %xmm9
  359. vpxor %xmm6, %xmm8, %xmm6
  360. # rnd_1: 2 - 3
  361. xorl %r15d, %edx
  362. andl %r15d, %ecx
  363. rorl $5, %edx
  364. xorl %r9d, %ecx
  365. xorl %r15d, %edx
  366. addl %ecx, %r10d
  367. vpxor %xmm6, %xmm9, %xmm5
  368. vpshufd $0xfa, %xmm0, %xmm6
  369. # rnd_1: 4 - 5
  370. rorl $6, %edx
  371. xorl %r11d, %ebx
  372. addl %edx, %r10d
  373. movl %r11d, %ecx
  374. andl %ebx, %eax
  375. rorl $9, %ecx
  376. xorl %r11d, %ecx
  377. xorl %r12d, %eax
  378. vpsrld $10, %xmm6, %xmm8
  379. vpsrlq $19, %xmm6, %xmm7
  380. # rnd_1: 6 - 7
  381. rorl $11, %ecx
  382. addl %r10d, %r14d
  383. xorl %r11d, %ecx
  384. addl %eax, %r10d
  385. rorl $2, %ecx
  386. movl %r14d, %edx
  387. addl %ecx, %r10d
  388. # rnd_0: 0 - 0
  389. rorl $14, %edx
  390. vpsrlq $0x11, %xmm6, %xmm6
  391. vpaddd %xmm1, %xmm4, %xmm4
  392. # rnd_0: 1 - 3
  393. movl %r11d, %eax
  394. movl %r15d, %ecx
  395. addl 24(%rsp), %r9d
  396. xorl %r8d, %ecx
  397. xorl %r14d, %edx
  398. andl %r14d, %ecx
  399. rorl $5, %edx
  400. xorl %r8d, %ecx
  401. xorl %r14d, %edx
  402. addl %ecx, %r9d
  403. vpxor %xmm6, %xmm7, %xmm6
  404. vpaddd %xmm5, %xmm4, %xmm4
  405. # rnd_0: 4 - 4
  406. rorl $6, %edx
  407. xorl %r10d, %eax
  408. addl %edx, %r9d
  409. movl %r10d, %ecx
  410. vpxor %xmm6, %xmm8, %xmm8
  411. # rnd_0: 5 - 5
  412. andl %eax, %ebx
  413. rorl $9, %ecx
  414. xorl %r10d, %ecx
  415. xorl %r11d, %ebx
  416. vpshufb %xmm11, %xmm8, %xmm8
  417. # rnd_0: 6 - 6
  418. rorl $11, %ecx
  419. addl %r9d, %r13d
  420. xorl %r10d, %ecx
  421. addl %ebx, %r9d
  422. vpaddd %xmm8, %xmm4, %xmm4
  423. # rnd_0: 7 - 7
  424. rorl $2, %ecx
  425. movl %r13d, %edx
  426. addl %ecx, %r9d
  427. # rnd_1: 0 - 0
  428. rorl $14, %edx
  429. vpshufd $0x50, %xmm4, %xmm6
  430. # rnd_1: 1 - 1
  431. movl %r10d, %ebx
  432. movl %r14d, %ecx
  433. addl 28(%rsp), %r8d
  434. xorl %r15d, %ecx
  435. vpsrlq $0x11, %xmm6, %xmm8
  436. vpsrlq $19, %xmm6, %xmm7
  437. # rnd_1: 2 - 3
  438. xorl %r13d, %edx
  439. andl %r13d, %ecx
  440. rorl $5, %edx
  441. xorl %r15d, %ecx
  442. xorl %r13d, %edx
  443. addl %ecx, %r8d
  444. vpsrld $10, %xmm6, %xmm9
  445. vpxor %xmm8, %xmm7, %xmm8
  446. # rnd_1: 4 - 5
  447. rorl $6, %edx
  448. xorl %r9d, %ebx
  449. addl %edx, %r8d
  450. movl %r9d, %ecx
  451. andl %ebx, %eax
  452. rorl $9, %ecx
  453. xorl %r9d, %ecx
  454. xorl %r10d, %eax
  455. vpxor %xmm9, %xmm8, %xmm9
  456. # rnd_1: 6 - 6
  457. rorl $11, %ecx
  458. addl %r8d, %r12d
  459. xorl %r9d, %ecx
  460. addl %eax, %r8d
  461. vpshufb %xmm12, %xmm9, %xmm9
  462. # rnd_1: 7 - 7
  463. rorl $2, %ecx
  464. movl %r12d, %edx
  465. addl %ecx, %r8d
  466. vpaddd %xmm4, %xmm9, %xmm1
  467. # msg_sched done: 4-7
  468. # msg_sched: 8-11
  469. # rnd_0: 0 - 0
  470. rorl $14, %edx
  471. vpalignr $4, %xmm2, %xmm3, %xmm5
  472. vpalignr $4, %xmm0, %xmm1, %xmm4
  473. # rnd_0: 1 - 2
  474. movl %r9d, %eax
  475. movl %r13d, %ecx
  476. addl 32(%rsp), %r15d
  477. xorl %r14d, %ecx
  478. xorl %r12d, %edx
  479. andl %r12d, %ecx
  480. vpsrld $7, %xmm5, %xmm6
  481. vpslld $25, %xmm5, %xmm7
  482. # rnd_0: 3 - 4
  483. rorl $5, %edx
  484. xorl %r14d, %ecx
  485. xorl %r12d, %edx
  486. addl %ecx, %r15d
  487. rorl $6, %edx
  488. xorl %r8d, %eax
  489. addl %edx, %r15d
  490. movl %r8d, %ecx
  491. vpsrld $18, %xmm5, %xmm8
  492. vpslld $14, %xmm5, %xmm9
  493. # rnd_0: 5 - 6
  494. andl %eax, %ebx
  495. rorl $9, %ecx
  496. xorl %r8d, %ecx
  497. xorl %r9d, %ebx
  498. rorl $11, %ecx
  499. addl %r15d, %r11d
  500. xorl %r8d, %ecx
  501. addl %ebx, %r15d
  502. vpor %xmm6, %xmm7, %xmm6
  503. vpor %xmm8, %xmm9, %xmm8
  504. # rnd_0: 7 - 7
  505. rorl $2, %ecx
  506. movl %r11d, %edx
  507. addl %ecx, %r15d
  508. # rnd_1: 0 - 1
  509. rorl $14, %edx
  510. movl %r8d, %ebx
  511. movl %r12d, %ecx
  512. addl 36(%rsp), %r14d
  513. xorl %r13d, %ecx
  514. vpsrld $3, %xmm5, %xmm9
  515. vpxor %xmm6, %xmm8, %xmm6
  516. # rnd_1: 2 - 3
  517. xorl %r11d, %edx
  518. andl %r11d, %ecx
  519. rorl $5, %edx
  520. xorl %r13d, %ecx
  521. xorl %r11d, %edx
  522. addl %ecx, %r14d
  523. vpxor %xmm6, %xmm9, %xmm5
  524. vpshufd $0xfa, %xmm1, %xmm6
  525. # rnd_1: 4 - 5
  526. rorl $6, %edx
  527. xorl %r15d, %ebx
  528. addl %edx, %r14d
  529. movl %r15d, %ecx
  530. andl %ebx, %eax
  531. rorl $9, %ecx
  532. xorl %r15d, %ecx
  533. xorl %r8d, %eax
  534. vpsrld $10, %xmm6, %xmm8
  535. vpsrlq $19, %xmm6, %xmm7
  536. # rnd_1: 6 - 7
  537. rorl $11, %ecx
  538. addl %r14d, %r10d
  539. xorl %r15d, %ecx
  540. addl %eax, %r14d
  541. rorl $2, %ecx
  542. movl %r10d, %edx
  543. addl %ecx, %r14d
  544. # rnd_0: 0 - 0
  545. rorl $14, %edx
  546. vpsrlq $0x11, %xmm6, %xmm6
  547. vpaddd %xmm2, %xmm4, %xmm4
  548. # rnd_0: 1 - 3
  549. movl %r15d, %eax
  550. movl %r11d, %ecx
  551. addl 40(%rsp), %r13d
  552. xorl %r12d, %ecx
  553. xorl %r10d, %edx
  554. andl %r10d, %ecx
  555. rorl $5, %edx
  556. xorl %r12d, %ecx
  557. xorl %r10d, %edx
  558. addl %ecx, %r13d
  559. vpxor %xmm6, %xmm7, %xmm6
  560. vpaddd %xmm5, %xmm4, %xmm4
  561. # rnd_0: 4 - 4
  562. rorl $6, %edx
  563. xorl %r14d, %eax
  564. addl %edx, %r13d
  565. movl %r14d, %ecx
  566. vpxor %xmm6, %xmm8, %xmm8
  567. # rnd_0: 5 - 5
  568. andl %eax, %ebx
  569. rorl $9, %ecx
  570. xorl %r14d, %ecx
  571. xorl %r15d, %ebx
  572. vpshufb %xmm11, %xmm8, %xmm8
  573. # rnd_0: 6 - 6
  574. rorl $11, %ecx
  575. addl %r13d, %r9d
  576. xorl %r14d, %ecx
  577. addl %ebx, %r13d
  578. vpaddd %xmm8, %xmm4, %xmm4
  579. # rnd_0: 7 - 7
  580. rorl $2, %ecx
  581. movl %r9d, %edx
  582. addl %ecx, %r13d
  583. # rnd_1: 0 - 0
  584. rorl $14, %edx
  585. vpshufd $0x50, %xmm4, %xmm6
  586. # rnd_1: 1 - 1
  587. movl %r14d, %ebx
  588. movl %r10d, %ecx
  589. addl 44(%rsp), %r12d
  590. xorl %r11d, %ecx
  591. vpsrlq $0x11, %xmm6, %xmm8
  592. vpsrlq $19, %xmm6, %xmm7
  593. # rnd_1: 2 - 3
  594. xorl %r9d, %edx
  595. andl %r9d, %ecx
  596. rorl $5, %edx
  597. xorl %r11d, %ecx
  598. xorl %r9d, %edx
  599. addl %ecx, %r12d
  600. vpsrld $10, %xmm6, %xmm9
  601. vpxor %xmm8, %xmm7, %xmm8
  602. # rnd_1: 4 - 5
  603. rorl $6, %edx
  604. xorl %r13d, %ebx
  605. addl %edx, %r12d
  606. movl %r13d, %ecx
  607. andl %ebx, %eax
  608. rorl $9, %ecx
  609. xorl %r13d, %ecx
  610. xorl %r14d, %eax
  611. vpxor %xmm9, %xmm8, %xmm9
  612. # rnd_1: 6 - 6
  613. rorl $11, %ecx
  614. addl %r12d, %r8d
  615. xorl %r13d, %ecx
  616. addl %eax, %r12d
  617. vpshufb %xmm12, %xmm9, %xmm9
  618. # rnd_1: 7 - 7
  619. rorl $2, %ecx
  620. movl %r8d, %edx
  621. addl %ecx, %r12d
  622. vpaddd %xmm4, %xmm9, %xmm2
  623. # msg_sched done: 8-11
  624. # msg_sched: 12-15
  625. # rnd_0: 0 - 0
  626. rorl $14, %edx
  627. vpalignr $4, %xmm3, %xmm0, %xmm5
  628. vpalignr $4, %xmm1, %xmm2, %xmm4
  629. # rnd_0: 1 - 2
  630. movl %r13d, %eax
  631. movl %r9d, %ecx
  632. addl 48(%rsp), %r11d
  633. xorl %r10d, %ecx
  634. xorl %r8d, %edx
  635. andl %r8d, %ecx
  636. vpsrld $7, %xmm5, %xmm6
  637. vpslld $25, %xmm5, %xmm7
  638. # rnd_0: 3 - 4
  639. rorl $5, %edx
  640. xorl %r10d, %ecx
  641. xorl %r8d, %edx
  642. addl %ecx, %r11d
  643. rorl $6, %edx
  644. xorl %r12d, %eax
  645. addl %edx, %r11d
  646. movl %r12d, %ecx
  647. vpsrld $18, %xmm5, %xmm8
  648. vpslld $14, %xmm5, %xmm9
  649. # rnd_0: 5 - 6
  650. andl %eax, %ebx
  651. rorl $9, %ecx
  652. xorl %r12d, %ecx
  653. xorl %r13d, %ebx
  654. rorl $11, %ecx
  655. addl %r11d, %r15d
  656. xorl %r12d, %ecx
  657. addl %ebx, %r11d
  658. vpor %xmm6, %xmm7, %xmm6
  659. vpor %xmm8, %xmm9, %xmm8
  660. # rnd_0: 7 - 7
  661. rorl $2, %ecx
  662. movl %r15d, %edx
  663. addl %ecx, %r11d
  664. # rnd_1: 0 - 1
  665. rorl $14, %edx
  666. movl %r12d, %ebx
  667. movl %r8d, %ecx
  668. addl 52(%rsp), %r10d
  669. xorl %r9d, %ecx
  670. vpsrld $3, %xmm5, %xmm9
  671. vpxor %xmm6, %xmm8, %xmm6
  672. # rnd_1: 2 - 3
  673. xorl %r15d, %edx
  674. andl %r15d, %ecx
  675. rorl $5, %edx
  676. xorl %r9d, %ecx
  677. xorl %r15d, %edx
  678. addl %ecx, %r10d
  679. vpxor %xmm6, %xmm9, %xmm5
  680. vpshufd $0xfa, %xmm2, %xmm6
  681. # rnd_1: 4 - 5
  682. rorl $6, %edx
  683. xorl %r11d, %ebx
  684. addl %edx, %r10d
  685. movl %r11d, %ecx
  686. andl %ebx, %eax
  687. rorl $9, %ecx
  688. xorl %r11d, %ecx
  689. xorl %r12d, %eax
  690. vpsrld $10, %xmm6, %xmm8
  691. vpsrlq $19, %xmm6, %xmm7
  692. # rnd_1: 6 - 7
  693. rorl $11, %ecx
  694. addl %r10d, %r14d
  695. xorl %r11d, %ecx
  696. addl %eax, %r10d
  697. rorl $2, %ecx
  698. movl %r14d, %edx
  699. addl %ecx, %r10d
  700. # rnd_0: 0 - 0
  701. rorl $14, %edx
  702. vpsrlq $0x11, %xmm6, %xmm6
  703. vpaddd %xmm3, %xmm4, %xmm4
  704. # rnd_0: 1 - 3
  705. movl %r11d, %eax
  706. movl %r15d, %ecx
  707. addl 56(%rsp), %r9d
  708. xorl %r8d, %ecx
  709. xorl %r14d, %edx
  710. andl %r14d, %ecx
  711. rorl $5, %edx
  712. xorl %r8d, %ecx
  713. xorl %r14d, %edx
  714. addl %ecx, %r9d
  715. vpxor %xmm6, %xmm7, %xmm6
  716. vpaddd %xmm5, %xmm4, %xmm4
  717. # rnd_0: 4 - 4
  718. rorl $6, %edx
  719. xorl %r10d, %eax
  720. addl %edx, %r9d
  721. movl %r10d, %ecx
  722. vpxor %xmm6, %xmm8, %xmm8
  723. # rnd_0: 5 - 5
  724. andl %eax, %ebx
  725. rorl $9, %ecx
  726. xorl %r10d, %ecx
  727. xorl %r11d, %ebx
  728. vpshufb %xmm11, %xmm8, %xmm8
  729. # rnd_0: 6 - 6
  730. rorl $11, %ecx
  731. addl %r9d, %r13d
  732. xorl %r10d, %ecx
  733. addl %ebx, %r9d
  734. vpaddd %xmm8, %xmm4, %xmm4
  735. # rnd_0: 7 - 7
  736. rorl $2, %ecx
  737. movl %r13d, %edx
  738. addl %ecx, %r9d
  739. # rnd_1: 0 - 0
  740. rorl $14, %edx
  741. vpshufd $0x50, %xmm4, %xmm6
  742. # rnd_1: 1 - 1
  743. movl %r10d, %ebx
  744. movl %r14d, %ecx
  745. addl 60(%rsp), %r8d
  746. xorl %r15d, %ecx
  747. vpsrlq $0x11, %xmm6, %xmm8
  748. vpsrlq $19, %xmm6, %xmm7
  749. # rnd_1: 2 - 3
  750. xorl %r13d, %edx
  751. andl %r13d, %ecx
  752. rorl $5, %edx
  753. xorl %r15d, %ecx
  754. xorl %r13d, %edx
  755. addl %ecx, %r8d
  756. vpsrld $10, %xmm6, %xmm9
  757. vpxor %xmm8, %xmm7, %xmm8
  758. # rnd_1: 4 - 5
  759. rorl $6, %edx
  760. xorl %r9d, %ebx
  761. addl %edx, %r8d
  762. movl %r9d, %ecx
  763. andl %ebx, %eax
  764. rorl $9, %ecx
  765. xorl %r9d, %ecx
  766. xorl %r10d, %eax
  767. vpxor %xmm9, %xmm8, %xmm9
  768. # rnd_1: 6 - 6
  769. rorl $11, %ecx
  770. addl %r8d, %r12d
  771. xorl %r9d, %ecx
  772. addl %eax, %r8d
  773. vpshufb %xmm12, %xmm9, %xmm9
  774. # rnd_1: 7 - 7
  775. rorl $2, %ecx
  776. movl %r12d, %edx
  777. addl %ecx, %r8d
  778. vpaddd %xmm4, %xmm9, %xmm3
  779. # msg_sched done: 12-15
  780. # set_w_k_xfer_4: 4
  781. vpaddd 64+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  782. vpaddd 80+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  783. vmovdqu %xmm4, (%rsp)
  784. vmovdqu %xmm5, 16(%rsp)
  785. vpaddd 96+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  786. vpaddd 112+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  787. vmovdqu %xmm6, 32(%rsp)
  788. vmovdqu %xmm7, 48(%rsp)
  789. # msg_sched: 0-3
  790. # rnd_0: 0 - 0
  791. rorl $14, %edx
  792. vpalignr $4, %xmm0, %xmm1, %xmm5
  793. vpalignr $4, %xmm2, %xmm3, %xmm4
  794. # rnd_0: 1 - 2
  795. movl %r9d, %eax
  796. movl %r13d, %ecx
  797. addl (%rsp), %r15d
  798. xorl %r14d, %ecx
  799. xorl %r12d, %edx
  800. andl %r12d, %ecx
  801. vpsrld $7, %xmm5, %xmm6
  802. vpslld $25, %xmm5, %xmm7
  803. # rnd_0: 3 - 4
  804. rorl $5, %edx
  805. xorl %r14d, %ecx
  806. xorl %r12d, %edx
  807. addl %ecx, %r15d
  808. rorl $6, %edx
  809. xorl %r8d, %eax
  810. addl %edx, %r15d
  811. movl %r8d, %ecx
  812. vpsrld $18, %xmm5, %xmm8
  813. vpslld $14, %xmm5, %xmm9
  814. # rnd_0: 5 - 6
  815. andl %eax, %ebx
  816. rorl $9, %ecx
  817. xorl %r8d, %ecx
  818. xorl %r9d, %ebx
  819. rorl $11, %ecx
  820. addl %r15d, %r11d
  821. xorl %r8d, %ecx
  822. addl %ebx, %r15d
  823. vpor %xmm6, %xmm7, %xmm6
  824. vpor %xmm8, %xmm9, %xmm8
  825. # rnd_0: 7 - 7
  826. rorl $2, %ecx
  827. movl %r11d, %edx
  828. addl %ecx, %r15d
  829. # rnd_1: 0 - 1
  830. rorl $14, %edx
  831. movl %r8d, %ebx
  832. movl %r12d, %ecx
  833. addl 4(%rsp), %r14d
  834. xorl %r13d, %ecx
  835. vpsrld $3, %xmm5, %xmm9
  836. vpxor %xmm6, %xmm8, %xmm6
  837. # rnd_1: 2 - 3
  838. xorl %r11d, %edx
  839. andl %r11d, %ecx
  840. rorl $5, %edx
  841. xorl %r13d, %ecx
  842. xorl %r11d, %edx
  843. addl %ecx, %r14d
  844. vpxor %xmm6, %xmm9, %xmm5
  845. vpshufd $0xfa, %xmm3, %xmm6
  846. # rnd_1: 4 - 5
  847. rorl $6, %edx
  848. xorl %r15d, %ebx
  849. addl %edx, %r14d
  850. movl %r15d, %ecx
  851. andl %ebx, %eax
  852. rorl $9, %ecx
  853. xorl %r15d, %ecx
  854. xorl %r8d, %eax
  855. vpsrld $10, %xmm6, %xmm8
  856. vpsrlq $19, %xmm6, %xmm7
  857. # rnd_1: 6 - 7
  858. rorl $11, %ecx
  859. addl %r14d, %r10d
  860. xorl %r15d, %ecx
  861. addl %eax, %r14d
  862. rorl $2, %ecx
  863. movl %r10d, %edx
  864. addl %ecx, %r14d
  865. # rnd_0: 0 - 0
  866. rorl $14, %edx
  867. vpsrlq $0x11, %xmm6, %xmm6
  868. vpaddd %xmm0, %xmm4, %xmm4
  869. # rnd_0: 1 - 3
  870. movl %r15d, %eax
  871. movl %r11d, %ecx
  872. addl 8(%rsp), %r13d
  873. xorl %r12d, %ecx
  874. xorl %r10d, %edx
  875. andl %r10d, %ecx
  876. rorl $5, %edx
  877. xorl %r12d, %ecx
  878. xorl %r10d, %edx
  879. addl %ecx, %r13d
  880. vpxor %xmm6, %xmm7, %xmm6
  881. vpaddd %xmm5, %xmm4, %xmm4
  882. # rnd_0: 4 - 4
  883. rorl $6, %edx
  884. xorl %r14d, %eax
  885. addl %edx, %r13d
  886. movl %r14d, %ecx
  887. vpxor %xmm6, %xmm8, %xmm8
  888. # rnd_0: 5 - 5
  889. andl %eax, %ebx
  890. rorl $9, %ecx
  891. xorl %r14d, %ecx
  892. xorl %r15d, %ebx
  893. vpshufb %xmm11, %xmm8, %xmm8
  894. # rnd_0: 6 - 6
  895. rorl $11, %ecx
  896. addl %r13d, %r9d
  897. xorl %r14d, %ecx
  898. addl %ebx, %r13d
  899. vpaddd %xmm8, %xmm4, %xmm4
  900. # rnd_0: 7 - 7
  901. rorl $2, %ecx
  902. movl %r9d, %edx
  903. addl %ecx, %r13d
  904. # rnd_1: 0 - 0
  905. rorl $14, %edx
  906. vpshufd $0x50, %xmm4, %xmm6
  907. # rnd_1: 1 - 1
  908. movl %r14d, %ebx
  909. movl %r10d, %ecx
  910. addl 12(%rsp), %r12d
  911. xorl %r11d, %ecx
  912. vpsrlq $0x11, %xmm6, %xmm8
  913. vpsrlq $19, %xmm6, %xmm7
  914. # rnd_1: 2 - 3
  915. xorl %r9d, %edx
  916. andl %r9d, %ecx
  917. rorl $5, %edx
  918. xorl %r11d, %ecx
  919. xorl %r9d, %edx
  920. addl %ecx, %r12d
  921. vpsrld $10, %xmm6, %xmm9
  922. vpxor %xmm8, %xmm7, %xmm8
  923. # rnd_1: 4 - 5
  924. rorl $6, %edx
  925. xorl %r13d, %ebx
  926. addl %edx, %r12d
  927. movl %r13d, %ecx
  928. andl %ebx, %eax
  929. rorl $9, %ecx
  930. xorl %r13d, %ecx
  931. xorl %r14d, %eax
  932. vpxor %xmm9, %xmm8, %xmm9
  933. # rnd_1: 6 - 6
  934. rorl $11, %ecx
  935. addl %r12d, %r8d
  936. xorl %r13d, %ecx
  937. addl %eax, %r12d
  938. vpshufb %xmm12, %xmm9, %xmm9
  939. # rnd_1: 7 - 7
  940. rorl $2, %ecx
  941. movl %r8d, %edx
  942. addl %ecx, %r12d
  943. vpaddd %xmm4, %xmm9, %xmm0
  944. # msg_sched done: 0-3
  945. # msg_sched: 4-7
  946. # rnd_0: 0 - 0
  947. rorl $14, %edx
  948. vpalignr $4, %xmm1, %xmm2, %xmm5
  949. vpalignr $4, %xmm3, %xmm0, %xmm4
  950. # rnd_0: 1 - 2
  951. movl %r13d, %eax
  952. movl %r9d, %ecx
  953. addl 16(%rsp), %r11d
  954. xorl %r10d, %ecx
  955. xorl %r8d, %edx
  956. andl %r8d, %ecx
  957. vpsrld $7, %xmm5, %xmm6
  958. vpslld $25, %xmm5, %xmm7
  959. # rnd_0: 3 - 4
  960. rorl $5, %edx
  961. xorl %r10d, %ecx
  962. xorl %r8d, %edx
  963. addl %ecx, %r11d
  964. rorl $6, %edx
  965. xorl %r12d, %eax
  966. addl %edx, %r11d
  967. movl %r12d, %ecx
  968. vpsrld $18, %xmm5, %xmm8
  969. vpslld $14, %xmm5, %xmm9
  970. # rnd_0: 5 - 6
  971. andl %eax, %ebx
  972. rorl $9, %ecx
  973. xorl %r12d, %ecx
  974. xorl %r13d, %ebx
  975. rorl $11, %ecx
  976. addl %r11d, %r15d
  977. xorl %r12d, %ecx
  978. addl %ebx, %r11d
  979. vpor %xmm6, %xmm7, %xmm6
  980. vpor %xmm8, %xmm9, %xmm8
  981. # rnd_0: 7 - 7
  982. rorl $2, %ecx
  983. movl %r15d, %edx
  984. addl %ecx, %r11d
  985. # rnd_1: 0 - 1
  986. rorl $14, %edx
  987. movl %r12d, %ebx
  988. movl %r8d, %ecx
  989. addl 20(%rsp), %r10d
  990. xorl %r9d, %ecx
  991. vpsrld $3, %xmm5, %xmm9
  992. vpxor %xmm6, %xmm8, %xmm6
  993. # rnd_1: 2 - 3
  994. xorl %r15d, %edx
  995. andl %r15d, %ecx
  996. rorl $5, %edx
  997. xorl %r9d, %ecx
  998. xorl %r15d, %edx
  999. addl %ecx, %r10d
  1000. vpxor %xmm6, %xmm9, %xmm5
  1001. vpshufd $0xfa, %xmm0, %xmm6
  1002. # rnd_1: 4 - 5
  1003. rorl $6, %edx
  1004. xorl %r11d, %ebx
  1005. addl %edx, %r10d
  1006. movl %r11d, %ecx
  1007. andl %ebx, %eax
  1008. rorl $9, %ecx
  1009. xorl %r11d, %ecx
  1010. xorl %r12d, %eax
  1011. vpsrld $10, %xmm6, %xmm8
  1012. vpsrlq $19, %xmm6, %xmm7
  1013. # rnd_1: 6 - 7
  1014. rorl $11, %ecx
  1015. addl %r10d, %r14d
  1016. xorl %r11d, %ecx
  1017. addl %eax, %r10d
  1018. rorl $2, %ecx
  1019. movl %r14d, %edx
  1020. addl %ecx, %r10d
  1021. # rnd_0: 0 - 0
  1022. rorl $14, %edx
  1023. vpsrlq $0x11, %xmm6, %xmm6
  1024. vpaddd %xmm1, %xmm4, %xmm4
  1025. # rnd_0: 1 - 3
  1026. movl %r11d, %eax
  1027. movl %r15d, %ecx
  1028. addl 24(%rsp), %r9d
  1029. xorl %r8d, %ecx
  1030. xorl %r14d, %edx
  1031. andl %r14d, %ecx
  1032. rorl $5, %edx
  1033. xorl %r8d, %ecx
  1034. xorl %r14d, %edx
  1035. addl %ecx, %r9d
  1036. vpxor %xmm6, %xmm7, %xmm6
  1037. vpaddd %xmm5, %xmm4, %xmm4
  1038. # rnd_0: 4 - 4
  1039. rorl $6, %edx
  1040. xorl %r10d, %eax
  1041. addl %edx, %r9d
  1042. movl %r10d, %ecx
  1043. vpxor %xmm6, %xmm8, %xmm8
  1044. # rnd_0: 5 - 5
  1045. andl %eax, %ebx
  1046. rorl $9, %ecx
  1047. xorl %r10d, %ecx
  1048. xorl %r11d, %ebx
  1049. vpshufb %xmm11, %xmm8, %xmm8
  1050. # rnd_0: 6 - 6
  1051. rorl $11, %ecx
  1052. addl %r9d, %r13d
  1053. xorl %r10d, %ecx
  1054. addl %ebx, %r9d
  1055. vpaddd %xmm8, %xmm4, %xmm4
  1056. # rnd_0: 7 - 7
  1057. rorl $2, %ecx
  1058. movl %r13d, %edx
  1059. addl %ecx, %r9d
  1060. # rnd_1: 0 - 0
  1061. rorl $14, %edx
  1062. vpshufd $0x50, %xmm4, %xmm6
  1063. # rnd_1: 1 - 1
  1064. movl %r10d, %ebx
  1065. movl %r14d, %ecx
  1066. addl 28(%rsp), %r8d
  1067. xorl %r15d, %ecx
  1068. vpsrlq $0x11, %xmm6, %xmm8
  1069. vpsrlq $19, %xmm6, %xmm7
  1070. # rnd_1: 2 - 3
  1071. xorl %r13d, %edx
  1072. andl %r13d, %ecx
  1073. rorl $5, %edx
  1074. xorl %r15d, %ecx
  1075. xorl %r13d, %edx
  1076. addl %ecx, %r8d
  1077. vpsrld $10, %xmm6, %xmm9
  1078. vpxor %xmm8, %xmm7, %xmm8
  1079. # rnd_1: 4 - 5
  1080. rorl $6, %edx
  1081. xorl %r9d, %ebx
  1082. addl %edx, %r8d
  1083. movl %r9d, %ecx
  1084. andl %ebx, %eax
  1085. rorl $9, %ecx
  1086. xorl %r9d, %ecx
  1087. xorl %r10d, %eax
  1088. vpxor %xmm9, %xmm8, %xmm9
  1089. # rnd_1: 6 - 6
  1090. rorl $11, %ecx
  1091. addl %r8d, %r12d
  1092. xorl %r9d, %ecx
  1093. addl %eax, %r8d
  1094. vpshufb %xmm12, %xmm9, %xmm9
  1095. # rnd_1: 7 - 7
  1096. rorl $2, %ecx
  1097. movl %r12d, %edx
  1098. addl %ecx, %r8d
  1099. vpaddd %xmm4, %xmm9, %xmm1
  1100. # msg_sched done: 4-7
  1101. # msg_sched: 8-11
  1102. # rnd_0: 0 - 0
  1103. rorl $14, %edx
  1104. vpalignr $4, %xmm2, %xmm3, %xmm5
  1105. vpalignr $4, %xmm0, %xmm1, %xmm4
  1106. # rnd_0: 1 - 2
  1107. movl %r9d, %eax
  1108. movl %r13d, %ecx
  1109. addl 32(%rsp), %r15d
  1110. xorl %r14d, %ecx
  1111. xorl %r12d, %edx
  1112. andl %r12d, %ecx
  1113. vpsrld $7, %xmm5, %xmm6
  1114. vpslld $25, %xmm5, %xmm7
  1115. # rnd_0: 3 - 4
  1116. rorl $5, %edx
  1117. xorl %r14d, %ecx
  1118. xorl %r12d, %edx
  1119. addl %ecx, %r15d
  1120. rorl $6, %edx
  1121. xorl %r8d, %eax
  1122. addl %edx, %r15d
  1123. movl %r8d, %ecx
  1124. vpsrld $18, %xmm5, %xmm8
  1125. vpslld $14, %xmm5, %xmm9
  1126. # rnd_0: 5 - 6
  1127. andl %eax, %ebx
  1128. rorl $9, %ecx
  1129. xorl %r8d, %ecx
  1130. xorl %r9d, %ebx
  1131. rorl $11, %ecx
  1132. addl %r15d, %r11d
  1133. xorl %r8d, %ecx
  1134. addl %ebx, %r15d
  1135. vpor %xmm6, %xmm7, %xmm6
  1136. vpor %xmm8, %xmm9, %xmm8
  1137. # rnd_0: 7 - 7
  1138. rorl $2, %ecx
  1139. movl %r11d, %edx
  1140. addl %ecx, %r15d
  1141. # rnd_1: 0 - 1
  1142. rorl $14, %edx
  1143. movl %r8d, %ebx
  1144. movl %r12d, %ecx
  1145. addl 36(%rsp), %r14d
  1146. xorl %r13d, %ecx
  1147. vpsrld $3, %xmm5, %xmm9
  1148. vpxor %xmm6, %xmm8, %xmm6
  1149. # rnd_1: 2 - 3
  1150. xorl %r11d, %edx
  1151. andl %r11d, %ecx
  1152. rorl $5, %edx
  1153. xorl %r13d, %ecx
  1154. xorl %r11d, %edx
  1155. addl %ecx, %r14d
  1156. vpxor %xmm6, %xmm9, %xmm5
  1157. vpshufd $0xfa, %xmm1, %xmm6
  1158. # rnd_1: 4 - 5
  1159. rorl $6, %edx
  1160. xorl %r15d, %ebx
  1161. addl %edx, %r14d
  1162. movl %r15d, %ecx
  1163. andl %ebx, %eax
  1164. rorl $9, %ecx
  1165. xorl %r15d, %ecx
  1166. xorl %r8d, %eax
  1167. vpsrld $10, %xmm6, %xmm8
  1168. vpsrlq $19, %xmm6, %xmm7
  1169. # rnd_1: 6 - 7
  1170. rorl $11, %ecx
  1171. addl %r14d, %r10d
  1172. xorl %r15d, %ecx
  1173. addl %eax, %r14d
  1174. rorl $2, %ecx
  1175. movl %r10d, %edx
  1176. addl %ecx, %r14d
  1177. # rnd_0: 0 - 0
  1178. rorl $14, %edx
  1179. vpsrlq $0x11, %xmm6, %xmm6
  1180. vpaddd %xmm2, %xmm4, %xmm4
  1181. # rnd_0: 1 - 3
  1182. movl %r15d, %eax
  1183. movl %r11d, %ecx
  1184. addl 40(%rsp), %r13d
  1185. xorl %r12d, %ecx
  1186. xorl %r10d, %edx
  1187. andl %r10d, %ecx
  1188. rorl $5, %edx
  1189. xorl %r12d, %ecx
  1190. xorl %r10d, %edx
  1191. addl %ecx, %r13d
  1192. vpxor %xmm6, %xmm7, %xmm6
  1193. vpaddd %xmm5, %xmm4, %xmm4
  1194. # rnd_0: 4 - 4
  1195. rorl $6, %edx
  1196. xorl %r14d, %eax
  1197. addl %edx, %r13d
  1198. movl %r14d, %ecx
  1199. vpxor %xmm6, %xmm8, %xmm8
  1200. # rnd_0: 5 - 5
  1201. andl %eax, %ebx
  1202. rorl $9, %ecx
  1203. xorl %r14d, %ecx
  1204. xorl %r15d, %ebx
  1205. vpshufb %xmm11, %xmm8, %xmm8
  1206. # rnd_0: 6 - 6
  1207. rorl $11, %ecx
  1208. addl %r13d, %r9d
  1209. xorl %r14d, %ecx
  1210. addl %ebx, %r13d
  1211. vpaddd %xmm8, %xmm4, %xmm4
  1212. # rnd_0: 7 - 7
  1213. rorl $2, %ecx
  1214. movl %r9d, %edx
  1215. addl %ecx, %r13d
  1216. # rnd_1: 0 - 0
  1217. rorl $14, %edx
  1218. vpshufd $0x50, %xmm4, %xmm6
  1219. # rnd_1: 1 - 1
  1220. movl %r14d, %ebx
  1221. movl %r10d, %ecx
  1222. addl 44(%rsp), %r12d
  1223. xorl %r11d, %ecx
  1224. vpsrlq $0x11, %xmm6, %xmm8
  1225. vpsrlq $19, %xmm6, %xmm7
  1226. # rnd_1: 2 - 3
  1227. xorl %r9d, %edx
  1228. andl %r9d, %ecx
  1229. rorl $5, %edx
  1230. xorl %r11d, %ecx
  1231. xorl %r9d, %edx
  1232. addl %ecx, %r12d
  1233. vpsrld $10, %xmm6, %xmm9
  1234. vpxor %xmm8, %xmm7, %xmm8
  1235. # rnd_1: 4 - 5
  1236. rorl $6, %edx
  1237. xorl %r13d, %ebx
  1238. addl %edx, %r12d
  1239. movl %r13d, %ecx
  1240. andl %ebx, %eax
  1241. rorl $9, %ecx
  1242. xorl %r13d, %ecx
  1243. xorl %r14d, %eax
  1244. vpxor %xmm9, %xmm8, %xmm9
  1245. # rnd_1: 6 - 6
  1246. rorl $11, %ecx
  1247. addl %r12d, %r8d
  1248. xorl %r13d, %ecx
  1249. addl %eax, %r12d
  1250. vpshufb %xmm12, %xmm9, %xmm9
  1251. # rnd_1: 7 - 7
  1252. rorl $2, %ecx
  1253. movl %r8d, %edx
  1254. addl %ecx, %r12d
  1255. vpaddd %xmm4, %xmm9, %xmm2
  1256. # msg_sched done: 8-11
  1257. # msg_sched: 12-15
  1258. # rnd_0: 0 - 0
  1259. rorl $14, %edx
  1260. vpalignr $4, %xmm3, %xmm0, %xmm5
  1261. vpalignr $4, %xmm1, %xmm2, %xmm4
  1262. # rnd_0: 1 - 2
  1263. movl %r13d, %eax
  1264. movl %r9d, %ecx
  1265. addl 48(%rsp), %r11d
  1266. xorl %r10d, %ecx
  1267. xorl %r8d, %edx
  1268. andl %r8d, %ecx
  1269. vpsrld $7, %xmm5, %xmm6
  1270. vpslld $25, %xmm5, %xmm7
  1271. # rnd_0: 3 - 4
  1272. rorl $5, %edx
  1273. xorl %r10d, %ecx
  1274. xorl %r8d, %edx
  1275. addl %ecx, %r11d
  1276. rorl $6, %edx
  1277. xorl %r12d, %eax
  1278. addl %edx, %r11d
  1279. movl %r12d, %ecx
  1280. vpsrld $18, %xmm5, %xmm8
  1281. vpslld $14, %xmm5, %xmm9
  1282. # rnd_0: 5 - 6
  1283. andl %eax, %ebx
  1284. rorl $9, %ecx
  1285. xorl %r12d, %ecx
  1286. xorl %r13d, %ebx
  1287. rorl $11, %ecx
  1288. addl %r11d, %r15d
  1289. xorl %r12d, %ecx
  1290. addl %ebx, %r11d
  1291. vpor %xmm6, %xmm7, %xmm6
  1292. vpor %xmm8, %xmm9, %xmm8
  1293. # rnd_0: 7 - 7
  1294. rorl $2, %ecx
  1295. movl %r15d, %edx
  1296. addl %ecx, %r11d
  1297. # rnd_1: 0 - 1
  1298. rorl $14, %edx
  1299. movl %r12d, %ebx
  1300. movl %r8d, %ecx
  1301. addl 52(%rsp), %r10d
  1302. xorl %r9d, %ecx
  1303. vpsrld $3, %xmm5, %xmm9
  1304. vpxor %xmm6, %xmm8, %xmm6
  1305. # rnd_1: 2 - 3
  1306. xorl %r15d, %edx
  1307. andl %r15d, %ecx
  1308. rorl $5, %edx
  1309. xorl %r9d, %ecx
  1310. xorl %r15d, %edx
  1311. addl %ecx, %r10d
  1312. vpxor %xmm6, %xmm9, %xmm5
  1313. vpshufd $0xfa, %xmm2, %xmm6
  1314. # rnd_1: 4 - 5
  1315. rorl $6, %edx
  1316. xorl %r11d, %ebx
  1317. addl %edx, %r10d
  1318. movl %r11d, %ecx
  1319. andl %ebx, %eax
  1320. rorl $9, %ecx
  1321. xorl %r11d, %ecx
  1322. xorl %r12d, %eax
  1323. vpsrld $10, %xmm6, %xmm8
  1324. vpsrlq $19, %xmm6, %xmm7
  1325. # rnd_1: 6 - 7
  1326. rorl $11, %ecx
  1327. addl %r10d, %r14d
  1328. xorl %r11d, %ecx
  1329. addl %eax, %r10d
  1330. rorl $2, %ecx
  1331. movl %r14d, %edx
  1332. addl %ecx, %r10d
  1333. # rnd_0: 0 - 0
  1334. rorl $14, %edx
  1335. vpsrlq $0x11, %xmm6, %xmm6
  1336. vpaddd %xmm3, %xmm4, %xmm4
  1337. # rnd_0: 1 - 3
  1338. movl %r11d, %eax
  1339. movl %r15d, %ecx
  1340. addl 56(%rsp), %r9d
  1341. xorl %r8d, %ecx
  1342. xorl %r14d, %edx
  1343. andl %r14d, %ecx
  1344. rorl $5, %edx
  1345. xorl %r8d, %ecx
  1346. xorl %r14d, %edx
  1347. addl %ecx, %r9d
  1348. vpxor %xmm6, %xmm7, %xmm6
  1349. vpaddd %xmm5, %xmm4, %xmm4
  1350. # rnd_0: 4 - 4
  1351. rorl $6, %edx
  1352. xorl %r10d, %eax
  1353. addl %edx, %r9d
  1354. movl %r10d, %ecx
  1355. vpxor %xmm6, %xmm8, %xmm8
  1356. # rnd_0: 5 - 5
  1357. andl %eax, %ebx
  1358. rorl $9, %ecx
  1359. xorl %r10d, %ecx
  1360. xorl %r11d, %ebx
  1361. vpshufb %xmm11, %xmm8, %xmm8
  1362. # rnd_0: 6 - 6
  1363. rorl $11, %ecx
  1364. addl %r9d, %r13d
  1365. xorl %r10d, %ecx
  1366. addl %ebx, %r9d
  1367. vpaddd %xmm8, %xmm4, %xmm4
  1368. # rnd_0: 7 - 7
  1369. rorl $2, %ecx
  1370. movl %r13d, %edx
  1371. addl %ecx, %r9d
  1372. # rnd_1: 0 - 0
  1373. rorl $14, %edx
  1374. vpshufd $0x50, %xmm4, %xmm6
  1375. # rnd_1: 1 - 1
  1376. movl %r10d, %ebx
  1377. movl %r14d, %ecx
  1378. addl 60(%rsp), %r8d
  1379. xorl %r15d, %ecx
  1380. vpsrlq $0x11, %xmm6, %xmm8
  1381. vpsrlq $19, %xmm6, %xmm7
  1382. # rnd_1: 2 - 3
  1383. xorl %r13d, %edx
  1384. andl %r13d, %ecx
  1385. rorl $5, %edx
  1386. xorl %r15d, %ecx
  1387. xorl %r13d, %edx
  1388. addl %ecx, %r8d
  1389. vpsrld $10, %xmm6, %xmm9
  1390. vpxor %xmm8, %xmm7, %xmm8
  1391. # rnd_1: 4 - 5
  1392. rorl $6, %edx
  1393. xorl %r9d, %ebx
  1394. addl %edx, %r8d
  1395. movl %r9d, %ecx
  1396. andl %ebx, %eax
  1397. rorl $9, %ecx
  1398. xorl %r9d, %ecx
  1399. xorl %r10d, %eax
  1400. vpxor %xmm9, %xmm8, %xmm9
  1401. # rnd_1: 6 - 6
  1402. rorl $11, %ecx
  1403. addl %r8d, %r12d
  1404. xorl %r9d, %ecx
  1405. addl %eax, %r8d
  1406. vpshufb %xmm12, %xmm9, %xmm9
  1407. # rnd_1: 7 - 7
  1408. rorl $2, %ecx
  1409. movl %r12d, %edx
  1410. addl %ecx, %r8d
  1411. vpaddd %xmm4, %xmm9, %xmm3
  1412. # msg_sched done: 12-15
  1413. # set_w_k_xfer_4: 8
  1414. vpaddd 128+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  1415. vpaddd 144+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  1416. vmovdqu %xmm4, (%rsp)
  1417. vmovdqu %xmm5, 16(%rsp)
  1418. vpaddd 160+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  1419. vpaddd 176+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  1420. vmovdqu %xmm6, 32(%rsp)
  1421. vmovdqu %xmm7, 48(%rsp)
  1422. # msg_sched: 0-3
  1423. # rnd_0: 0 - 0
  1424. rorl $14, %edx
  1425. vpalignr $4, %xmm0, %xmm1, %xmm5
  1426. vpalignr $4, %xmm2, %xmm3, %xmm4
  1427. # rnd_0: 1 - 2
  1428. movl %r9d, %eax
  1429. movl %r13d, %ecx
  1430. addl (%rsp), %r15d
  1431. xorl %r14d, %ecx
  1432. xorl %r12d, %edx
  1433. andl %r12d, %ecx
  1434. vpsrld $7, %xmm5, %xmm6
  1435. vpslld $25, %xmm5, %xmm7
  1436. # rnd_0: 3 - 4
  1437. rorl $5, %edx
  1438. xorl %r14d, %ecx
  1439. xorl %r12d, %edx
  1440. addl %ecx, %r15d
  1441. rorl $6, %edx
  1442. xorl %r8d, %eax
  1443. addl %edx, %r15d
  1444. movl %r8d, %ecx
  1445. vpsrld $18, %xmm5, %xmm8
  1446. vpslld $14, %xmm5, %xmm9
  1447. # rnd_0: 5 - 6
  1448. andl %eax, %ebx
  1449. rorl $9, %ecx
  1450. xorl %r8d, %ecx
  1451. xorl %r9d, %ebx
  1452. rorl $11, %ecx
  1453. addl %r15d, %r11d
  1454. xorl %r8d, %ecx
  1455. addl %ebx, %r15d
  1456. vpor %xmm6, %xmm7, %xmm6
  1457. vpor %xmm8, %xmm9, %xmm8
  1458. # rnd_0: 7 - 7
  1459. rorl $2, %ecx
  1460. movl %r11d, %edx
  1461. addl %ecx, %r15d
  1462. # rnd_1: 0 - 1
  1463. rorl $14, %edx
  1464. movl %r8d, %ebx
  1465. movl %r12d, %ecx
  1466. addl 4(%rsp), %r14d
  1467. xorl %r13d, %ecx
  1468. vpsrld $3, %xmm5, %xmm9
  1469. vpxor %xmm6, %xmm8, %xmm6
  1470. # rnd_1: 2 - 3
  1471. xorl %r11d, %edx
  1472. andl %r11d, %ecx
  1473. rorl $5, %edx
  1474. xorl %r13d, %ecx
  1475. xorl %r11d, %edx
  1476. addl %ecx, %r14d
  1477. vpxor %xmm6, %xmm9, %xmm5
  1478. vpshufd $0xfa, %xmm3, %xmm6
  1479. # rnd_1: 4 - 5
  1480. rorl $6, %edx
  1481. xorl %r15d, %ebx
  1482. addl %edx, %r14d
  1483. movl %r15d, %ecx
  1484. andl %ebx, %eax
  1485. rorl $9, %ecx
  1486. xorl %r15d, %ecx
  1487. xorl %r8d, %eax
  1488. vpsrld $10, %xmm6, %xmm8
  1489. vpsrlq $19, %xmm6, %xmm7
  1490. # rnd_1: 6 - 7
  1491. rorl $11, %ecx
  1492. addl %r14d, %r10d
  1493. xorl %r15d, %ecx
  1494. addl %eax, %r14d
  1495. rorl $2, %ecx
  1496. movl %r10d, %edx
  1497. addl %ecx, %r14d
  1498. # rnd_0: 0 - 0
  1499. rorl $14, %edx
  1500. vpsrlq $0x11, %xmm6, %xmm6
  1501. vpaddd %xmm0, %xmm4, %xmm4
  1502. # rnd_0: 1 - 3
  1503. movl %r15d, %eax
  1504. movl %r11d, %ecx
  1505. addl 8(%rsp), %r13d
  1506. xorl %r12d, %ecx
  1507. xorl %r10d, %edx
  1508. andl %r10d, %ecx
  1509. rorl $5, %edx
  1510. xorl %r12d, %ecx
  1511. xorl %r10d, %edx
  1512. addl %ecx, %r13d
  1513. vpxor %xmm6, %xmm7, %xmm6
  1514. vpaddd %xmm5, %xmm4, %xmm4
  1515. # rnd_0: 4 - 4
  1516. rorl $6, %edx
  1517. xorl %r14d, %eax
  1518. addl %edx, %r13d
  1519. movl %r14d, %ecx
  1520. vpxor %xmm6, %xmm8, %xmm8
  1521. # rnd_0: 5 - 5
  1522. andl %eax, %ebx
  1523. rorl $9, %ecx
  1524. xorl %r14d, %ecx
  1525. xorl %r15d, %ebx
  1526. vpshufb %xmm11, %xmm8, %xmm8
  1527. # rnd_0: 6 - 6
  1528. rorl $11, %ecx
  1529. addl %r13d, %r9d
  1530. xorl %r14d, %ecx
  1531. addl %ebx, %r13d
  1532. vpaddd %xmm8, %xmm4, %xmm4
  1533. # rnd_0: 7 - 7
  1534. rorl $2, %ecx
  1535. movl %r9d, %edx
  1536. addl %ecx, %r13d
  1537. # rnd_1: 0 - 0
  1538. rorl $14, %edx
  1539. vpshufd $0x50, %xmm4, %xmm6
  1540. # rnd_1: 1 - 1
  1541. movl %r14d, %ebx
  1542. movl %r10d, %ecx
  1543. addl 12(%rsp), %r12d
  1544. xorl %r11d, %ecx
  1545. vpsrlq $0x11, %xmm6, %xmm8
  1546. vpsrlq $19, %xmm6, %xmm7
  1547. # rnd_1: 2 - 3
  1548. xorl %r9d, %edx
  1549. andl %r9d, %ecx
  1550. rorl $5, %edx
  1551. xorl %r11d, %ecx
  1552. xorl %r9d, %edx
  1553. addl %ecx, %r12d
  1554. vpsrld $10, %xmm6, %xmm9
  1555. vpxor %xmm8, %xmm7, %xmm8
  1556. # rnd_1: 4 - 5
  1557. rorl $6, %edx
  1558. xorl %r13d, %ebx
  1559. addl %edx, %r12d
  1560. movl %r13d, %ecx
  1561. andl %ebx, %eax
  1562. rorl $9, %ecx
  1563. xorl %r13d, %ecx
  1564. xorl %r14d, %eax
  1565. vpxor %xmm9, %xmm8, %xmm9
  1566. # rnd_1: 6 - 6
  1567. rorl $11, %ecx
  1568. addl %r12d, %r8d
  1569. xorl %r13d, %ecx
  1570. addl %eax, %r12d
  1571. vpshufb %xmm12, %xmm9, %xmm9
  1572. # rnd_1: 7 - 7
  1573. rorl $2, %ecx
  1574. movl %r8d, %edx
  1575. addl %ecx, %r12d
  1576. vpaddd %xmm4, %xmm9, %xmm0
  1577. # msg_sched done: 0-3
  1578. # msg_sched: 4-7
  1579. # rnd_0: 0 - 0
  1580. rorl $14, %edx
  1581. vpalignr $4, %xmm1, %xmm2, %xmm5
  1582. vpalignr $4, %xmm3, %xmm0, %xmm4
  1583. # rnd_0: 1 - 2
  1584. movl %r13d, %eax
  1585. movl %r9d, %ecx
  1586. addl 16(%rsp), %r11d
  1587. xorl %r10d, %ecx
  1588. xorl %r8d, %edx
  1589. andl %r8d, %ecx
  1590. vpsrld $7, %xmm5, %xmm6
  1591. vpslld $25, %xmm5, %xmm7
  1592. # rnd_0: 3 - 4
  1593. rorl $5, %edx
  1594. xorl %r10d, %ecx
  1595. xorl %r8d, %edx
  1596. addl %ecx, %r11d
  1597. rorl $6, %edx
  1598. xorl %r12d, %eax
  1599. addl %edx, %r11d
  1600. movl %r12d, %ecx
  1601. vpsrld $18, %xmm5, %xmm8
  1602. vpslld $14, %xmm5, %xmm9
  1603. # rnd_0: 5 - 6
  1604. andl %eax, %ebx
  1605. rorl $9, %ecx
  1606. xorl %r12d, %ecx
  1607. xorl %r13d, %ebx
  1608. rorl $11, %ecx
  1609. addl %r11d, %r15d
  1610. xorl %r12d, %ecx
  1611. addl %ebx, %r11d
  1612. vpor %xmm6, %xmm7, %xmm6
  1613. vpor %xmm8, %xmm9, %xmm8
  1614. # rnd_0: 7 - 7
  1615. rorl $2, %ecx
  1616. movl %r15d, %edx
  1617. addl %ecx, %r11d
  1618. # rnd_1: 0 - 1
  1619. rorl $14, %edx
  1620. movl %r12d, %ebx
  1621. movl %r8d, %ecx
  1622. addl 20(%rsp), %r10d
  1623. xorl %r9d, %ecx
  1624. vpsrld $3, %xmm5, %xmm9
  1625. vpxor %xmm6, %xmm8, %xmm6
  1626. # rnd_1: 2 - 3
  1627. xorl %r15d, %edx
  1628. andl %r15d, %ecx
  1629. rorl $5, %edx
  1630. xorl %r9d, %ecx
  1631. xorl %r15d, %edx
  1632. addl %ecx, %r10d
  1633. vpxor %xmm6, %xmm9, %xmm5
  1634. vpshufd $0xfa, %xmm0, %xmm6
  1635. # rnd_1: 4 - 5
  1636. rorl $6, %edx
  1637. xorl %r11d, %ebx
  1638. addl %edx, %r10d
  1639. movl %r11d, %ecx
  1640. andl %ebx, %eax
  1641. rorl $9, %ecx
  1642. xorl %r11d, %ecx
  1643. xorl %r12d, %eax
  1644. vpsrld $10, %xmm6, %xmm8
  1645. vpsrlq $19, %xmm6, %xmm7
  1646. # rnd_1: 6 - 7
  1647. rorl $11, %ecx
  1648. addl %r10d, %r14d
  1649. xorl %r11d, %ecx
  1650. addl %eax, %r10d
  1651. rorl $2, %ecx
  1652. movl %r14d, %edx
  1653. addl %ecx, %r10d
  1654. # rnd_0: 0 - 0
  1655. rorl $14, %edx
  1656. vpsrlq $0x11, %xmm6, %xmm6
  1657. vpaddd %xmm1, %xmm4, %xmm4
  1658. # rnd_0: 1 - 3
  1659. movl %r11d, %eax
  1660. movl %r15d, %ecx
  1661. addl 24(%rsp), %r9d
  1662. xorl %r8d, %ecx
  1663. xorl %r14d, %edx
  1664. andl %r14d, %ecx
  1665. rorl $5, %edx
  1666. xorl %r8d, %ecx
  1667. xorl %r14d, %edx
  1668. addl %ecx, %r9d
  1669. vpxor %xmm6, %xmm7, %xmm6
  1670. vpaddd %xmm5, %xmm4, %xmm4
  1671. # rnd_0: 4 - 4
  1672. rorl $6, %edx
  1673. xorl %r10d, %eax
  1674. addl %edx, %r9d
  1675. movl %r10d, %ecx
  1676. vpxor %xmm6, %xmm8, %xmm8
  1677. # rnd_0: 5 - 5
  1678. andl %eax, %ebx
  1679. rorl $9, %ecx
  1680. xorl %r10d, %ecx
  1681. xorl %r11d, %ebx
  1682. vpshufb %xmm11, %xmm8, %xmm8
  1683. # rnd_0: 6 - 6
  1684. rorl $11, %ecx
  1685. addl %r9d, %r13d
  1686. xorl %r10d, %ecx
  1687. addl %ebx, %r9d
  1688. vpaddd %xmm8, %xmm4, %xmm4
  1689. # rnd_0: 7 - 7
  1690. rorl $2, %ecx
  1691. movl %r13d, %edx
  1692. addl %ecx, %r9d
  1693. # rnd_1: 0 - 0
  1694. rorl $14, %edx
  1695. vpshufd $0x50, %xmm4, %xmm6
  1696. # rnd_1: 1 - 1
  1697. movl %r10d, %ebx
  1698. movl %r14d, %ecx
  1699. addl 28(%rsp), %r8d
  1700. xorl %r15d, %ecx
  1701. vpsrlq $0x11, %xmm6, %xmm8
  1702. vpsrlq $19, %xmm6, %xmm7
  1703. # rnd_1: 2 - 3
  1704. xorl %r13d, %edx
  1705. andl %r13d, %ecx
  1706. rorl $5, %edx
  1707. xorl %r15d, %ecx
  1708. xorl %r13d, %edx
  1709. addl %ecx, %r8d
  1710. vpsrld $10, %xmm6, %xmm9
  1711. vpxor %xmm8, %xmm7, %xmm8
  1712. # rnd_1: 4 - 5
  1713. rorl $6, %edx
  1714. xorl %r9d, %ebx
  1715. addl %edx, %r8d
  1716. movl %r9d, %ecx
  1717. andl %ebx, %eax
  1718. rorl $9, %ecx
  1719. xorl %r9d, %ecx
  1720. xorl %r10d, %eax
  1721. vpxor %xmm9, %xmm8, %xmm9
  1722. # rnd_1: 6 - 6
  1723. rorl $11, %ecx
  1724. addl %r8d, %r12d
  1725. xorl %r9d, %ecx
  1726. addl %eax, %r8d
  1727. vpshufb %xmm12, %xmm9, %xmm9
  1728. # rnd_1: 7 - 7
  1729. rorl $2, %ecx
  1730. movl %r12d, %edx
  1731. addl %ecx, %r8d
  1732. vpaddd %xmm4, %xmm9, %xmm1
  1733. # msg_sched done: 4-7
  1734. # msg_sched: 8-11
  1735. # rnd_0: 0 - 0
  1736. rorl $14, %edx
  1737. vpalignr $4, %xmm2, %xmm3, %xmm5
  1738. vpalignr $4, %xmm0, %xmm1, %xmm4
  1739. # rnd_0: 1 - 2
  1740. movl %r9d, %eax
  1741. movl %r13d, %ecx
  1742. addl 32(%rsp), %r15d
  1743. xorl %r14d, %ecx
  1744. xorl %r12d, %edx
  1745. andl %r12d, %ecx
  1746. vpsrld $7, %xmm5, %xmm6
  1747. vpslld $25, %xmm5, %xmm7
  1748. # rnd_0: 3 - 4
  1749. rorl $5, %edx
  1750. xorl %r14d, %ecx
  1751. xorl %r12d, %edx
  1752. addl %ecx, %r15d
  1753. rorl $6, %edx
  1754. xorl %r8d, %eax
  1755. addl %edx, %r15d
  1756. movl %r8d, %ecx
  1757. vpsrld $18, %xmm5, %xmm8
  1758. vpslld $14, %xmm5, %xmm9
  1759. # rnd_0: 5 - 6
  1760. andl %eax, %ebx
  1761. rorl $9, %ecx
  1762. xorl %r8d, %ecx
  1763. xorl %r9d, %ebx
  1764. rorl $11, %ecx
  1765. addl %r15d, %r11d
  1766. xorl %r8d, %ecx
  1767. addl %ebx, %r15d
  1768. vpor %xmm6, %xmm7, %xmm6
  1769. vpor %xmm8, %xmm9, %xmm8
  1770. # rnd_0: 7 - 7
  1771. rorl $2, %ecx
  1772. movl %r11d, %edx
  1773. addl %ecx, %r15d
  1774. # rnd_1: 0 - 1
  1775. rorl $14, %edx
  1776. movl %r8d, %ebx
  1777. movl %r12d, %ecx
  1778. addl 36(%rsp), %r14d
  1779. xorl %r13d, %ecx
  1780. vpsrld $3, %xmm5, %xmm9
  1781. vpxor %xmm6, %xmm8, %xmm6
  1782. # rnd_1: 2 - 3
  1783. xorl %r11d, %edx
  1784. andl %r11d, %ecx
  1785. rorl $5, %edx
  1786. xorl %r13d, %ecx
  1787. xorl %r11d, %edx
  1788. addl %ecx, %r14d
  1789. vpxor %xmm6, %xmm9, %xmm5
  1790. vpshufd $0xfa, %xmm1, %xmm6
  1791. # rnd_1: 4 - 5
  1792. rorl $6, %edx
  1793. xorl %r15d, %ebx
  1794. addl %edx, %r14d
  1795. movl %r15d, %ecx
  1796. andl %ebx, %eax
  1797. rorl $9, %ecx
  1798. xorl %r15d, %ecx
  1799. xorl %r8d, %eax
  1800. vpsrld $10, %xmm6, %xmm8
  1801. vpsrlq $19, %xmm6, %xmm7
  1802. # rnd_1: 6 - 7
  1803. rorl $11, %ecx
  1804. addl %r14d, %r10d
  1805. xorl %r15d, %ecx
  1806. addl %eax, %r14d
  1807. rorl $2, %ecx
  1808. movl %r10d, %edx
  1809. addl %ecx, %r14d
  1810. # rnd_0: 0 - 0
  1811. rorl $14, %edx
  1812. vpsrlq $0x11, %xmm6, %xmm6
  1813. vpaddd %xmm2, %xmm4, %xmm4
  1814. # rnd_0: 1 - 3
  1815. movl %r15d, %eax
  1816. movl %r11d, %ecx
  1817. addl 40(%rsp), %r13d
  1818. xorl %r12d, %ecx
  1819. xorl %r10d, %edx
  1820. andl %r10d, %ecx
  1821. rorl $5, %edx
  1822. xorl %r12d, %ecx
  1823. xorl %r10d, %edx
  1824. addl %ecx, %r13d
  1825. vpxor %xmm6, %xmm7, %xmm6
  1826. vpaddd %xmm5, %xmm4, %xmm4
  1827. # rnd_0: 4 - 4
  1828. rorl $6, %edx
  1829. xorl %r14d, %eax
  1830. addl %edx, %r13d
  1831. movl %r14d, %ecx
  1832. vpxor %xmm6, %xmm8, %xmm8
  1833. # rnd_0: 5 - 5
  1834. andl %eax, %ebx
  1835. rorl $9, %ecx
  1836. xorl %r14d, %ecx
  1837. xorl %r15d, %ebx
  1838. vpshufb %xmm11, %xmm8, %xmm8
  1839. # rnd_0: 6 - 6
  1840. rorl $11, %ecx
  1841. addl %r13d, %r9d
  1842. xorl %r14d, %ecx
  1843. addl %ebx, %r13d
  1844. vpaddd %xmm8, %xmm4, %xmm4
  1845. # rnd_0: 7 - 7
  1846. rorl $2, %ecx
  1847. movl %r9d, %edx
  1848. addl %ecx, %r13d
  1849. # rnd_1: 0 - 0
  1850. rorl $14, %edx
  1851. vpshufd $0x50, %xmm4, %xmm6
  1852. # rnd_1: 1 - 1
  1853. movl %r14d, %ebx
  1854. movl %r10d, %ecx
  1855. addl 44(%rsp), %r12d
  1856. xorl %r11d, %ecx
  1857. vpsrlq $0x11, %xmm6, %xmm8
  1858. vpsrlq $19, %xmm6, %xmm7
  1859. # rnd_1: 2 - 3
  1860. xorl %r9d, %edx
  1861. andl %r9d, %ecx
  1862. rorl $5, %edx
  1863. xorl %r11d, %ecx
  1864. xorl %r9d, %edx
  1865. addl %ecx, %r12d
  1866. vpsrld $10, %xmm6, %xmm9
  1867. vpxor %xmm8, %xmm7, %xmm8
  1868. # rnd_1: 4 - 5
  1869. rorl $6, %edx
  1870. xorl %r13d, %ebx
  1871. addl %edx, %r12d
  1872. movl %r13d, %ecx
  1873. andl %ebx, %eax
  1874. rorl $9, %ecx
  1875. xorl %r13d, %ecx
  1876. xorl %r14d, %eax
  1877. vpxor %xmm9, %xmm8, %xmm9
  1878. # rnd_1: 6 - 6
  1879. rorl $11, %ecx
  1880. addl %r12d, %r8d
  1881. xorl %r13d, %ecx
  1882. addl %eax, %r12d
  1883. vpshufb %xmm12, %xmm9, %xmm9
  1884. # rnd_1: 7 - 7
  1885. rorl $2, %ecx
  1886. movl %r8d, %edx
  1887. addl %ecx, %r12d
  1888. vpaddd %xmm4, %xmm9, %xmm2
  1889. # msg_sched done: 8-11
  1890. # msg_sched: 12-15
  1891. # rnd_0: 0 - 0
  1892. rorl $14, %edx
  1893. vpalignr $4, %xmm3, %xmm0, %xmm5
  1894. vpalignr $4, %xmm1, %xmm2, %xmm4
  1895. # rnd_0: 1 - 2
  1896. movl %r13d, %eax
  1897. movl %r9d, %ecx
  1898. addl 48(%rsp), %r11d
  1899. xorl %r10d, %ecx
  1900. xorl %r8d, %edx
  1901. andl %r8d, %ecx
  1902. vpsrld $7, %xmm5, %xmm6
  1903. vpslld $25, %xmm5, %xmm7
  1904. # rnd_0: 3 - 4
  1905. rorl $5, %edx
  1906. xorl %r10d, %ecx
  1907. xorl %r8d, %edx
  1908. addl %ecx, %r11d
  1909. rorl $6, %edx
  1910. xorl %r12d, %eax
  1911. addl %edx, %r11d
  1912. movl %r12d, %ecx
  1913. vpsrld $18, %xmm5, %xmm8
  1914. vpslld $14, %xmm5, %xmm9
  1915. # rnd_0: 5 - 6
  1916. andl %eax, %ebx
  1917. rorl $9, %ecx
  1918. xorl %r12d, %ecx
  1919. xorl %r13d, %ebx
  1920. rorl $11, %ecx
  1921. addl %r11d, %r15d
  1922. xorl %r12d, %ecx
  1923. addl %ebx, %r11d
  1924. vpor %xmm6, %xmm7, %xmm6
  1925. vpor %xmm8, %xmm9, %xmm8
  1926. # rnd_0: 7 - 7
  1927. rorl $2, %ecx
  1928. movl %r15d, %edx
  1929. addl %ecx, %r11d
  1930. # rnd_1: 0 - 1
  1931. rorl $14, %edx
  1932. movl %r12d, %ebx
  1933. movl %r8d, %ecx
  1934. addl 52(%rsp), %r10d
  1935. xorl %r9d, %ecx
  1936. vpsrld $3, %xmm5, %xmm9
  1937. vpxor %xmm6, %xmm8, %xmm6
  1938. # rnd_1: 2 - 3
  1939. xorl %r15d, %edx
  1940. andl %r15d, %ecx
  1941. rorl $5, %edx
  1942. xorl %r9d, %ecx
  1943. xorl %r15d, %edx
  1944. addl %ecx, %r10d
  1945. vpxor %xmm6, %xmm9, %xmm5
  1946. vpshufd $0xfa, %xmm2, %xmm6
  1947. # rnd_1: 4 - 5
  1948. rorl $6, %edx
  1949. xorl %r11d, %ebx
  1950. addl %edx, %r10d
  1951. movl %r11d, %ecx
  1952. andl %ebx, %eax
  1953. rorl $9, %ecx
  1954. xorl %r11d, %ecx
  1955. xorl %r12d, %eax
  1956. vpsrld $10, %xmm6, %xmm8
  1957. vpsrlq $19, %xmm6, %xmm7
  1958. # rnd_1: 6 - 7
  1959. rorl $11, %ecx
  1960. addl %r10d, %r14d
  1961. xorl %r11d, %ecx
  1962. addl %eax, %r10d
  1963. rorl $2, %ecx
  1964. movl %r14d, %edx
  1965. addl %ecx, %r10d
  1966. # rnd_0: 0 - 0
  1967. rorl $14, %edx
  1968. vpsrlq $0x11, %xmm6, %xmm6
  1969. vpaddd %xmm3, %xmm4, %xmm4
  1970. # rnd_0: 1 - 3
  1971. movl %r11d, %eax
  1972. movl %r15d, %ecx
  1973. addl 56(%rsp), %r9d
  1974. xorl %r8d, %ecx
  1975. xorl %r14d, %edx
  1976. andl %r14d, %ecx
  1977. rorl $5, %edx
  1978. xorl %r8d, %ecx
  1979. xorl %r14d, %edx
  1980. addl %ecx, %r9d
  1981. vpxor %xmm6, %xmm7, %xmm6
  1982. vpaddd %xmm5, %xmm4, %xmm4
  1983. # rnd_0: 4 - 4
  1984. rorl $6, %edx
  1985. xorl %r10d, %eax
  1986. addl %edx, %r9d
  1987. movl %r10d, %ecx
  1988. vpxor %xmm6, %xmm8, %xmm8
  1989. # rnd_0: 5 - 5
  1990. andl %eax, %ebx
  1991. rorl $9, %ecx
  1992. xorl %r10d, %ecx
  1993. xorl %r11d, %ebx
  1994. vpshufb %xmm11, %xmm8, %xmm8
  1995. # rnd_0: 6 - 6
  1996. rorl $11, %ecx
  1997. addl %r9d, %r13d
  1998. xorl %r10d, %ecx
  1999. addl %ebx, %r9d
  2000. vpaddd %xmm8, %xmm4, %xmm4
  2001. # rnd_0: 7 - 7
  2002. rorl $2, %ecx
  2003. movl %r13d, %edx
  2004. addl %ecx, %r9d
  2005. # rnd_1: 0 - 0
  2006. rorl $14, %edx
  2007. vpshufd $0x50, %xmm4, %xmm6
  2008. # rnd_1: 1 - 1
  2009. movl %r10d, %ebx
  2010. movl %r14d, %ecx
  2011. addl 60(%rsp), %r8d
  2012. xorl %r15d, %ecx
  2013. vpsrlq $0x11, %xmm6, %xmm8
  2014. vpsrlq $19, %xmm6, %xmm7
  2015. # rnd_1: 2 - 3
  2016. xorl %r13d, %edx
  2017. andl %r13d, %ecx
  2018. rorl $5, %edx
  2019. xorl %r15d, %ecx
  2020. xorl %r13d, %edx
  2021. addl %ecx, %r8d
  2022. vpsrld $10, %xmm6, %xmm9
  2023. vpxor %xmm8, %xmm7, %xmm8
  2024. # rnd_1: 4 - 5
  2025. rorl $6, %edx
  2026. xorl %r9d, %ebx
  2027. addl %edx, %r8d
  2028. movl %r9d, %ecx
  2029. andl %ebx, %eax
  2030. rorl $9, %ecx
  2031. xorl %r9d, %ecx
  2032. xorl %r10d, %eax
  2033. vpxor %xmm9, %xmm8, %xmm9
  2034. # rnd_1: 6 - 6
  2035. rorl $11, %ecx
  2036. addl %r8d, %r12d
  2037. xorl %r9d, %ecx
  2038. addl %eax, %r8d
  2039. vpshufb %xmm12, %xmm9, %xmm9
  2040. # rnd_1: 7 - 7
  2041. rorl $2, %ecx
  2042. movl %r12d, %edx
  2043. addl %ecx, %r8d
  2044. vpaddd %xmm4, %xmm9, %xmm3
  2045. # msg_sched done: 12-15
  2046. # set_w_k_xfer_4: 12
  2047. vpaddd 192+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  2048. vpaddd 208+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  2049. vmovdqu %xmm4, (%rsp)
  2050. vmovdqu %xmm5, 16(%rsp)
  2051. vpaddd 224+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  2052. vpaddd 240+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  2053. vmovdqu %xmm6, 32(%rsp)
  2054. vmovdqu %xmm7, 48(%rsp)
  2055. # rnd_all_4: 0-3
  2056. addl (%rsp), %r15d
  2057. movl %r13d, %ecx
  2058. movl %r9d, %eax
  2059. xorl %r14d, %ecx
  2060. rorl $14, %edx
  2061. andl %r12d, %ecx
  2062. xorl %r12d, %edx
  2063. xorl %r14d, %ecx
  2064. rorl $5, %edx
  2065. addl %ecx, %r15d
  2066. xorl %r12d, %edx
  2067. xorl %r8d, %eax
  2068. rorl $6, %edx
  2069. movl %r8d, %ecx
  2070. addl %edx, %r15d
  2071. rorl $9, %ecx
  2072. andl %eax, %ebx
  2073. xorl %r8d, %ecx
  2074. xorl %r9d, %ebx
  2075. rorl $11, %ecx
  2076. addl %r15d, %r11d
  2077. xorl %r8d, %ecx
  2078. addl %ebx, %r15d
  2079. rorl $2, %ecx
  2080. movl %r11d, %edx
  2081. addl %ecx, %r15d
  2082. addl 4(%rsp), %r14d
  2083. movl %r12d, %ecx
  2084. movl %r8d, %ebx
  2085. xorl %r13d, %ecx
  2086. rorl $14, %edx
  2087. andl %r11d, %ecx
  2088. xorl %r11d, %edx
  2089. xorl %r13d, %ecx
  2090. rorl $5, %edx
  2091. addl %ecx, %r14d
  2092. xorl %r11d, %edx
  2093. xorl %r15d, %ebx
  2094. rorl $6, %edx
  2095. movl %r15d, %ecx
  2096. addl %edx, %r14d
  2097. rorl $9, %ecx
  2098. andl %ebx, %eax
  2099. xorl %r15d, %ecx
  2100. xorl %r8d, %eax
  2101. rorl $11, %ecx
  2102. addl %r14d, %r10d
  2103. xorl %r15d, %ecx
  2104. addl %eax, %r14d
  2105. rorl $2, %ecx
  2106. movl %r10d, %edx
  2107. addl %ecx, %r14d
  2108. addl 8(%rsp), %r13d
  2109. movl %r11d, %ecx
  2110. movl %r15d, %eax
  2111. xorl %r12d, %ecx
  2112. rorl $14, %edx
  2113. andl %r10d, %ecx
  2114. xorl %r10d, %edx
  2115. xorl %r12d, %ecx
  2116. rorl $5, %edx
  2117. addl %ecx, %r13d
  2118. xorl %r10d, %edx
  2119. xorl %r14d, %eax
  2120. rorl $6, %edx
  2121. movl %r14d, %ecx
  2122. addl %edx, %r13d
  2123. rorl $9, %ecx
  2124. andl %eax, %ebx
  2125. xorl %r14d, %ecx
  2126. xorl %r15d, %ebx
  2127. rorl $11, %ecx
  2128. addl %r13d, %r9d
  2129. xorl %r14d, %ecx
  2130. addl %ebx, %r13d
  2131. rorl $2, %ecx
  2132. movl %r9d, %edx
  2133. addl %ecx, %r13d
  2134. addl 12(%rsp), %r12d
  2135. movl %r10d, %ecx
  2136. movl %r14d, %ebx
  2137. xorl %r11d, %ecx
  2138. rorl $14, %edx
  2139. andl %r9d, %ecx
  2140. xorl %r9d, %edx
  2141. xorl %r11d, %ecx
  2142. rorl $5, %edx
  2143. addl %ecx, %r12d
  2144. xorl %r9d, %edx
  2145. xorl %r13d, %ebx
  2146. rorl $6, %edx
  2147. movl %r13d, %ecx
  2148. addl %edx, %r12d
  2149. rorl $9, %ecx
  2150. andl %ebx, %eax
  2151. xorl %r13d, %ecx
  2152. xorl %r14d, %eax
  2153. rorl $11, %ecx
  2154. addl %r12d, %r8d
  2155. xorl %r13d, %ecx
  2156. addl %eax, %r12d
  2157. rorl $2, %ecx
  2158. movl %r8d, %edx
  2159. addl %ecx, %r12d
  2160. # rnd_all_4: 1-4
  2161. addl 16(%rsp), %r11d
  2162. movl %r9d, %ecx
  2163. movl %r13d, %eax
  2164. xorl %r10d, %ecx
  2165. rorl $14, %edx
  2166. andl %r8d, %ecx
  2167. xorl %r8d, %edx
  2168. xorl %r10d, %ecx
  2169. rorl $5, %edx
  2170. addl %ecx, %r11d
  2171. xorl %r8d, %edx
  2172. xorl %r12d, %eax
  2173. rorl $6, %edx
  2174. movl %r12d, %ecx
  2175. addl %edx, %r11d
  2176. rorl $9, %ecx
  2177. andl %eax, %ebx
  2178. xorl %r12d, %ecx
  2179. xorl %r13d, %ebx
  2180. rorl $11, %ecx
  2181. addl %r11d, %r15d
  2182. xorl %r12d, %ecx
  2183. addl %ebx, %r11d
  2184. rorl $2, %ecx
  2185. movl %r15d, %edx
  2186. addl %ecx, %r11d
  2187. addl 20(%rsp), %r10d
  2188. movl %r8d, %ecx
  2189. movl %r12d, %ebx
  2190. xorl %r9d, %ecx
  2191. rorl $14, %edx
  2192. andl %r15d, %ecx
  2193. xorl %r15d, %edx
  2194. xorl %r9d, %ecx
  2195. rorl $5, %edx
  2196. addl %ecx, %r10d
  2197. xorl %r15d, %edx
  2198. xorl %r11d, %ebx
  2199. rorl $6, %edx
  2200. movl %r11d, %ecx
  2201. addl %edx, %r10d
  2202. rorl $9, %ecx
  2203. andl %ebx, %eax
  2204. xorl %r11d, %ecx
  2205. xorl %r12d, %eax
  2206. rorl $11, %ecx
  2207. addl %r10d, %r14d
  2208. xorl %r11d, %ecx
  2209. addl %eax, %r10d
  2210. rorl $2, %ecx
  2211. movl %r14d, %edx
  2212. addl %ecx, %r10d
  2213. addl 24(%rsp), %r9d
  2214. movl %r15d, %ecx
  2215. movl %r11d, %eax
  2216. xorl %r8d, %ecx
  2217. rorl $14, %edx
  2218. andl %r14d, %ecx
  2219. xorl %r14d, %edx
  2220. xorl %r8d, %ecx
  2221. rorl $5, %edx
  2222. addl %ecx, %r9d
  2223. xorl %r14d, %edx
  2224. xorl %r10d, %eax
  2225. rorl $6, %edx
  2226. movl %r10d, %ecx
  2227. addl %edx, %r9d
  2228. rorl $9, %ecx
  2229. andl %eax, %ebx
  2230. xorl %r10d, %ecx
  2231. xorl %r11d, %ebx
  2232. rorl $11, %ecx
  2233. addl %r9d, %r13d
  2234. xorl %r10d, %ecx
  2235. addl %ebx, %r9d
  2236. rorl $2, %ecx
  2237. movl %r13d, %edx
  2238. addl %ecx, %r9d
  2239. addl 28(%rsp), %r8d
  2240. movl %r14d, %ecx
  2241. movl %r10d, %ebx
  2242. xorl %r15d, %ecx
  2243. rorl $14, %edx
  2244. andl %r13d, %ecx
  2245. xorl %r13d, %edx
  2246. xorl %r15d, %ecx
  2247. rorl $5, %edx
  2248. addl %ecx, %r8d
  2249. xorl %r13d, %edx
  2250. xorl %r9d, %ebx
  2251. rorl $6, %edx
  2252. movl %r9d, %ecx
  2253. addl %edx, %r8d
  2254. rorl $9, %ecx
  2255. andl %ebx, %eax
  2256. xorl %r9d, %ecx
  2257. xorl %r10d, %eax
  2258. rorl $11, %ecx
  2259. addl %r8d, %r12d
  2260. xorl %r9d, %ecx
  2261. addl %eax, %r8d
  2262. rorl $2, %ecx
  2263. movl %r12d, %edx
  2264. addl %ecx, %r8d
  2265. # rnd_all_4: 2-5
  2266. addl 32(%rsp), %r15d
  2267. movl %r13d, %ecx
  2268. movl %r9d, %eax
  2269. xorl %r14d, %ecx
  2270. rorl $14, %edx
  2271. andl %r12d, %ecx
  2272. xorl %r12d, %edx
  2273. xorl %r14d, %ecx
  2274. rorl $5, %edx
  2275. addl %ecx, %r15d
  2276. xorl %r12d, %edx
  2277. xorl %r8d, %eax
  2278. rorl $6, %edx
  2279. movl %r8d, %ecx
  2280. addl %edx, %r15d
  2281. rorl $9, %ecx
  2282. andl %eax, %ebx
  2283. xorl %r8d, %ecx
  2284. xorl %r9d, %ebx
  2285. rorl $11, %ecx
  2286. addl %r15d, %r11d
  2287. xorl %r8d, %ecx
  2288. addl %ebx, %r15d
  2289. rorl $2, %ecx
  2290. movl %r11d, %edx
  2291. addl %ecx, %r15d
  2292. addl 36(%rsp), %r14d
  2293. movl %r12d, %ecx
  2294. movl %r8d, %ebx
  2295. xorl %r13d, %ecx
  2296. rorl $14, %edx
  2297. andl %r11d, %ecx
  2298. xorl %r11d, %edx
  2299. xorl %r13d, %ecx
  2300. rorl $5, %edx
  2301. addl %ecx, %r14d
  2302. xorl %r11d, %edx
  2303. xorl %r15d, %ebx
  2304. rorl $6, %edx
  2305. movl %r15d, %ecx
  2306. addl %edx, %r14d
  2307. rorl $9, %ecx
  2308. andl %ebx, %eax
  2309. xorl %r15d, %ecx
  2310. xorl %r8d, %eax
  2311. rorl $11, %ecx
  2312. addl %r14d, %r10d
  2313. xorl %r15d, %ecx
  2314. addl %eax, %r14d
  2315. rorl $2, %ecx
  2316. movl %r10d, %edx
  2317. addl %ecx, %r14d
  2318. addl 40(%rsp), %r13d
  2319. movl %r11d, %ecx
  2320. movl %r15d, %eax
  2321. xorl %r12d, %ecx
  2322. rorl $14, %edx
  2323. andl %r10d, %ecx
  2324. xorl %r10d, %edx
  2325. xorl %r12d, %ecx
  2326. rorl $5, %edx
  2327. addl %ecx, %r13d
  2328. xorl %r10d, %edx
  2329. xorl %r14d, %eax
  2330. rorl $6, %edx
  2331. movl %r14d, %ecx
  2332. addl %edx, %r13d
  2333. rorl $9, %ecx
  2334. andl %eax, %ebx
  2335. xorl %r14d, %ecx
  2336. xorl %r15d, %ebx
  2337. rorl $11, %ecx
  2338. addl %r13d, %r9d
  2339. xorl %r14d, %ecx
  2340. addl %ebx, %r13d
  2341. rorl $2, %ecx
  2342. movl %r9d, %edx
  2343. addl %ecx, %r13d
  2344. addl 44(%rsp), %r12d
  2345. movl %r10d, %ecx
  2346. movl %r14d, %ebx
  2347. xorl %r11d, %ecx
  2348. rorl $14, %edx
  2349. andl %r9d, %ecx
  2350. xorl %r9d, %edx
  2351. xorl %r11d, %ecx
  2352. rorl $5, %edx
  2353. addl %ecx, %r12d
  2354. xorl %r9d, %edx
  2355. xorl %r13d, %ebx
  2356. rorl $6, %edx
  2357. movl %r13d, %ecx
  2358. addl %edx, %r12d
  2359. rorl $9, %ecx
  2360. andl %ebx, %eax
  2361. xorl %r13d, %ecx
  2362. xorl %r14d, %eax
  2363. rorl $11, %ecx
  2364. addl %r12d, %r8d
  2365. xorl %r13d, %ecx
  2366. addl %eax, %r12d
  2367. rorl $2, %ecx
  2368. movl %r8d, %edx
  2369. addl %ecx, %r12d
  2370. # rnd_all_4: 3-6
  2371. addl 48(%rsp), %r11d
  2372. movl %r9d, %ecx
  2373. movl %r13d, %eax
  2374. xorl %r10d, %ecx
  2375. rorl $14, %edx
  2376. andl %r8d, %ecx
  2377. xorl %r8d, %edx
  2378. xorl %r10d, %ecx
  2379. rorl $5, %edx
  2380. addl %ecx, %r11d
  2381. xorl %r8d, %edx
  2382. xorl %r12d, %eax
  2383. rorl $6, %edx
  2384. movl %r12d, %ecx
  2385. addl %edx, %r11d
  2386. rorl $9, %ecx
  2387. andl %eax, %ebx
  2388. xorl %r12d, %ecx
  2389. xorl %r13d, %ebx
  2390. rorl $11, %ecx
  2391. addl %r11d, %r15d
  2392. xorl %r12d, %ecx
  2393. addl %ebx, %r11d
  2394. rorl $2, %ecx
  2395. movl %r15d, %edx
  2396. addl %ecx, %r11d
  2397. addl 52(%rsp), %r10d
  2398. movl %r8d, %ecx
  2399. movl %r12d, %ebx
  2400. xorl %r9d, %ecx
  2401. rorl $14, %edx
  2402. andl %r15d, %ecx
  2403. xorl %r15d, %edx
  2404. xorl %r9d, %ecx
  2405. rorl $5, %edx
  2406. addl %ecx, %r10d
  2407. xorl %r15d, %edx
  2408. xorl %r11d, %ebx
  2409. rorl $6, %edx
  2410. movl %r11d, %ecx
  2411. addl %edx, %r10d
  2412. rorl $9, %ecx
  2413. andl %ebx, %eax
  2414. xorl %r11d, %ecx
  2415. xorl %r12d, %eax
  2416. rorl $11, %ecx
  2417. addl %r10d, %r14d
  2418. xorl %r11d, %ecx
  2419. addl %eax, %r10d
  2420. rorl $2, %ecx
  2421. movl %r14d, %edx
  2422. addl %ecx, %r10d
  2423. addl 56(%rsp), %r9d
  2424. movl %r15d, %ecx
  2425. movl %r11d, %eax
  2426. xorl %r8d, %ecx
  2427. rorl $14, %edx
  2428. andl %r14d, %ecx
  2429. xorl %r14d, %edx
  2430. xorl %r8d, %ecx
  2431. rorl $5, %edx
  2432. addl %ecx, %r9d
  2433. xorl %r14d, %edx
  2434. xorl %r10d, %eax
  2435. rorl $6, %edx
  2436. movl %r10d, %ecx
  2437. addl %edx, %r9d
  2438. rorl $9, %ecx
  2439. andl %eax, %ebx
  2440. xorl %r10d, %ecx
  2441. xorl %r11d, %ebx
  2442. rorl $11, %ecx
  2443. addl %r9d, %r13d
  2444. xorl %r10d, %ecx
  2445. addl %ebx, %r9d
  2446. rorl $2, %ecx
  2447. movl %r13d, %edx
  2448. addl %ecx, %r9d
  2449. addl 60(%rsp), %r8d
  2450. movl %r14d, %ecx
  2451. movl %r10d, %ebx
  2452. xorl %r15d, %ecx
  2453. rorl $14, %edx
  2454. andl %r13d, %ecx
  2455. xorl %r13d, %edx
  2456. xorl %r15d, %ecx
  2457. rorl $5, %edx
  2458. addl %ecx, %r8d
  2459. xorl %r13d, %edx
  2460. xorl %r9d, %ebx
  2461. rorl $6, %edx
  2462. movl %r9d, %ecx
  2463. addl %edx, %r8d
  2464. rorl $9, %ecx
  2465. andl %ebx, %eax
  2466. xorl %r9d, %ecx
  2467. xorl %r10d, %eax
  2468. rorl $11, %ecx
  2469. addl %r8d, %r12d
  2470. xorl %r9d, %ecx
  2471. addl %eax, %r8d
  2472. rorl $2, %ecx
  2473. movl %r12d, %edx
  2474. addl %ecx, %r8d
  2475. addl %r8d, (%rdi)
  2476. addl %r9d, 4(%rdi)
  2477. addl %r10d, 8(%rdi)
  2478. addl %r11d, 12(%rdi)
  2479. addl %r12d, 16(%rdi)
  2480. addl %r13d, 20(%rdi)
  2481. addl %r14d, 24(%rdi)
  2482. addl %r15d, 28(%rdi)
  2483. xorq %rax, %rax
  2484. vzeroupper
  2485. addq $0x40, %rsp
  2486. popq %r15
  2487. popq %r14
  2488. popq %r13
  2489. popq %r12
  2490. popq %rbx
  2491. repz retq
  2492. #ifndef __APPLE__
  2493. .size Transform_Sha256_AVX1,.-Transform_Sha256_AVX1
  2494. #endif /* __APPLE__ */
  2495. #ifndef __APPLE__
  2496. .text
  2497. .globl Transform_Sha256_AVX1_Len
  2498. .type Transform_Sha256_AVX1_Len,@function
  2499. .align 16
  2500. Transform_Sha256_AVX1_Len:
  2501. #else
  2502. .section __TEXT,__text
  2503. .globl _Transform_Sha256_AVX1_Len
  2504. .p2align 4
  2505. _Transform_Sha256_AVX1_Len:
  2506. #endif /* __APPLE__ */
  2507. pushq %rbx
  2508. pushq %r12
  2509. pushq %r13
  2510. pushq %r14
  2511. pushq %r15
  2512. pushq %rbp
  2513. movq %rsi, %rbp
  2514. movq %rdx, %rsi
  2515. subq $0x40, %rsp
  2516. vmovdqa L_avx1_sha256_flip_mask(%rip), %xmm13
  2517. vmovdqa L_avx1_sha256_shuf_00BA(%rip), %xmm11
  2518. vmovdqa L_avx1_sha256_shuf_DC00(%rip), %xmm12
  2519. movl (%rdi), %r8d
  2520. movl 4(%rdi), %r9d
  2521. movl 8(%rdi), %r10d
  2522. movl 12(%rdi), %r11d
  2523. movl 16(%rdi), %r12d
  2524. movl 20(%rdi), %r13d
  2525. movl 24(%rdi), %r14d
  2526. movl 28(%rdi), %r15d
  2527. # Start of loop processing a block
  2528. L_sha256_len_avx1_start:
  2529. # X0, X1, X2, X3 = W[0..15]
  2530. vmovdqu (%rbp), %xmm0
  2531. vmovdqu 16(%rbp), %xmm1
  2532. vpshufb %xmm13, %xmm0, %xmm0
  2533. vpshufb %xmm13, %xmm1, %xmm1
  2534. vmovdqu 32(%rbp), %xmm2
  2535. vmovdqu 48(%rbp), %xmm3
  2536. vpshufb %xmm13, %xmm2, %xmm2
  2537. vpshufb %xmm13, %xmm3, %xmm3
  2538. movl %r9d, %ebx
  2539. movl %r12d, %edx
  2540. xorl %r10d, %ebx
  2541. # set_w_k_xfer_4: 0
  2542. vpaddd 0+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  2543. vpaddd 16+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  2544. vmovdqu %xmm4, (%rsp)
  2545. vmovdqu %xmm5, 16(%rsp)
  2546. vpaddd 32+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  2547. vpaddd 48+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  2548. vmovdqu %xmm6, 32(%rsp)
  2549. vmovdqu %xmm7, 48(%rsp)
  2550. # msg_sched: 0-3
  2551. # rnd_0: 0 - 0
  2552. rorl $14, %edx
  2553. vpalignr $4, %xmm0, %xmm1, %xmm5
  2554. vpalignr $4, %xmm2, %xmm3, %xmm4
  2555. # rnd_0: 1 - 2
  2556. movl %r9d, %eax
  2557. movl %r13d, %ecx
  2558. addl (%rsp), %r15d
  2559. xorl %r14d, %ecx
  2560. xorl %r12d, %edx
  2561. andl %r12d, %ecx
  2562. vpsrld $7, %xmm5, %xmm6
  2563. vpslld $25, %xmm5, %xmm7
  2564. # rnd_0: 3 - 4
  2565. rorl $5, %edx
  2566. xorl %r14d, %ecx
  2567. xorl %r12d, %edx
  2568. addl %ecx, %r15d
  2569. rorl $6, %edx
  2570. xorl %r8d, %eax
  2571. addl %edx, %r15d
  2572. movl %r8d, %ecx
  2573. vpsrld $18, %xmm5, %xmm8
  2574. vpslld $14, %xmm5, %xmm9
  2575. # rnd_0: 5 - 6
  2576. andl %eax, %ebx
  2577. rorl $9, %ecx
  2578. xorl %r8d, %ecx
  2579. xorl %r9d, %ebx
  2580. rorl $11, %ecx
  2581. addl %r15d, %r11d
  2582. xorl %r8d, %ecx
  2583. addl %ebx, %r15d
  2584. vpor %xmm6, %xmm7, %xmm6
  2585. vpor %xmm8, %xmm9, %xmm8
  2586. # rnd_0: 7 - 7
  2587. rorl $2, %ecx
  2588. movl %r11d, %edx
  2589. addl %ecx, %r15d
  2590. # rnd_1: 0 - 1
  2591. rorl $14, %edx
  2592. movl %r8d, %ebx
  2593. movl %r12d, %ecx
  2594. addl 4(%rsp), %r14d
  2595. xorl %r13d, %ecx
  2596. vpsrld $3, %xmm5, %xmm9
  2597. vpxor %xmm6, %xmm8, %xmm6
  2598. # rnd_1: 2 - 3
  2599. xorl %r11d, %edx
  2600. andl %r11d, %ecx
  2601. rorl $5, %edx
  2602. xorl %r13d, %ecx
  2603. xorl %r11d, %edx
  2604. addl %ecx, %r14d
  2605. vpxor %xmm6, %xmm9, %xmm5
  2606. vpshufd $0xfa, %xmm3, %xmm6
  2607. # rnd_1: 4 - 5
  2608. rorl $6, %edx
  2609. xorl %r15d, %ebx
  2610. addl %edx, %r14d
  2611. movl %r15d, %ecx
  2612. andl %ebx, %eax
  2613. rorl $9, %ecx
  2614. xorl %r15d, %ecx
  2615. xorl %r8d, %eax
  2616. vpsrld $10, %xmm6, %xmm8
  2617. vpsrlq $19, %xmm6, %xmm7
  2618. # rnd_1: 6 - 7
  2619. rorl $11, %ecx
  2620. addl %r14d, %r10d
  2621. xorl %r15d, %ecx
  2622. addl %eax, %r14d
  2623. rorl $2, %ecx
  2624. movl %r10d, %edx
  2625. addl %ecx, %r14d
  2626. # rnd_0: 0 - 0
  2627. rorl $14, %edx
  2628. vpsrlq $0x11, %xmm6, %xmm6
  2629. vpaddd %xmm0, %xmm4, %xmm4
  2630. # rnd_0: 1 - 3
  2631. movl %r15d, %eax
  2632. movl %r11d, %ecx
  2633. addl 8(%rsp), %r13d
  2634. xorl %r12d, %ecx
  2635. xorl %r10d, %edx
  2636. andl %r10d, %ecx
  2637. rorl $5, %edx
  2638. xorl %r12d, %ecx
  2639. xorl %r10d, %edx
  2640. addl %ecx, %r13d
  2641. vpxor %xmm6, %xmm7, %xmm6
  2642. vpaddd %xmm5, %xmm4, %xmm4
  2643. # rnd_0: 4 - 4
  2644. rorl $6, %edx
  2645. xorl %r14d, %eax
  2646. addl %edx, %r13d
  2647. movl %r14d, %ecx
  2648. vpxor %xmm6, %xmm8, %xmm8
  2649. # rnd_0: 5 - 5
  2650. andl %eax, %ebx
  2651. rorl $9, %ecx
  2652. xorl %r14d, %ecx
  2653. xorl %r15d, %ebx
  2654. vpshufb %xmm11, %xmm8, %xmm8
  2655. # rnd_0: 6 - 6
  2656. rorl $11, %ecx
  2657. addl %r13d, %r9d
  2658. xorl %r14d, %ecx
  2659. addl %ebx, %r13d
  2660. vpaddd %xmm8, %xmm4, %xmm4
  2661. # rnd_0: 7 - 7
  2662. rorl $2, %ecx
  2663. movl %r9d, %edx
  2664. addl %ecx, %r13d
  2665. # rnd_1: 0 - 0
  2666. rorl $14, %edx
  2667. vpshufd $0x50, %xmm4, %xmm6
  2668. # rnd_1: 1 - 1
  2669. movl %r14d, %ebx
  2670. movl %r10d, %ecx
  2671. addl 12(%rsp), %r12d
  2672. xorl %r11d, %ecx
  2673. vpsrlq $0x11, %xmm6, %xmm8
  2674. vpsrlq $19, %xmm6, %xmm7
  2675. # rnd_1: 2 - 3
  2676. xorl %r9d, %edx
  2677. andl %r9d, %ecx
  2678. rorl $5, %edx
  2679. xorl %r11d, %ecx
  2680. xorl %r9d, %edx
  2681. addl %ecx, %r12d
  2682. vpsrld $10, %xmm6, %xmm9
  2683. vpxor %xmm8, %xmm7, %xmm8
  2684. # rnd_1: 4 - 5
  2685. rorl $6, %edx
  2686. xorl %r13d, %ebx
  2687. addl %edx, %r12d
  2688. movl %r13d, %ecx
  2689. andl %ebx, %eax
  2690. rorl $9, %ecx
  2691. xorl %r13d, %ecx
  2692. xorl %r14d, %eax
  2693. vpxor %xmm9, %xmm8, %xmm9
  2694. # rnd_1: 6 - 6
  2695. rorl $11, %ecx
  2696. addl %r12d, %r8d
  2697. xorl %r13d, %ecx
  2698. addl %eax, %r12d
  2699. vpshufb %xmm12, %xmm9, %xmm9
  2700. # rnd_1: 7 - 7
  2701. rorl $2, %ecx
  2702. movl %r8d, %edx
  2703. addl %ecx, %r12d
  2704. vpaddd %xmm4, %xmm9, %xmm0
  2705. # msg_sched done: 0-3
  2706. # msg_sched: 4-7
  2707. # rnd_0: 0 - 0
  2708. rorl $14, %edx
  2709. vpalignr $4, %xmm1, %xmm2, %xmm5
  2710. vpalignr $4, %xmm3, %xmm0, %xmm4
  2711. # rnd_0: 1 - 2
  2712. movl %r13d, %eax
  2713. movl %r9d, %ecx
  2714. addl 16(%rsp), %r11d
  2715. xorl %r10d, %ecx
  2716. xorl %r8d, %edx
  2717. andl %r8d, %ecx
  2718. vpsrld $7, %xmm5, %xmm6
  2719. vpslld $25, %xmm5, %xmm7
  2720. # rnd_0: 3 - 4
  2721. rorl $5, %edx
  2722. xorl %r10d, %ecx
  2723. xorl %r8d, %edx
  2724. addl %ecx, %r11d
  2725. rorl $6, %edx
  2726. xorl %r12d, %eax
  2727. addl %edx, %r11d
  2728. movl %r12d, %ecx
  2729. vpsrld $18, %xmm5, %xmm8
  2730. vpslld $14, %xmm5, %xmm9
  2731. # rnd_0: 5 - 6
  2732. andl %eax, %ebx
  2733. rorl $9, %ecx
  2734. xorl %r12d, %ecx
  2735. xorl %r13d, %ebx
  2736. rorl $11, %ecx
  2737. addl %r11d, %r15d
  2738. xorl %r12d, %ecx
  2739. addl %ebx, %r11d
  2740. vpor %xmm6, %xmm7, %xmm6
  2741. vpor %xmm8, %xmm9, %xmm8
  2742. # rnd_0: 7 - 7
  2743. rorl $2, %ecx
  2744. movl %r15d, %edx
  2745. addl %ecx, %r11d
  2746. # rnd_1: 0 - 1
  2747. rorl $14, %edx
  2748. movl %r12d, %ebx
  2749. movl %r8d, %ecx
  2750. addl 20(%rsp), %r10d
  2751. xorl %r9d, %ecx
  2752. vpsrld $3, %xmm5, %xmm9
  2753. vpxor %xmm6, %xmm8, %xmm6
  2754. # rnd_1: 2 - 3
  2755. xorl %r15d, %edx
  2756. andl %r15d, %ecx
  2757. rorl $5, %edx
  2758. xorl %r9d, %ecx
  2759. xorl %r15d, %edx
  2760. addl %ecx, %r10d
  2761. vpxor %xmm6, %xmm9, %xmm5
  2762. vpshufd $0xfa, %xmm0, %xmm6
  2763. # rnd_1: 4 - 5
  2764. rorl $6, %edx
  2765. xorl %r11d, %ebx
  2766. addl %edx, %r10d
  2767. movl %r11d, %ecx
  2768. andl %ebx, %eax
  2769. rorl $9, %ecx
  2770. xorl %r11d, %ecx
  2771. xorl %r12d, %eax
  2772. vpsrld $10, %xmm6, %xmm8
  2773. vpsrlq $19, %xmm6, %xmm7
  2774. # rnd_1: 6 - 7
  2775. rorl $11, %ecx
  2776. addl %r10d, %r14d
  2777. xorl %r11d, %ecx
  2778. addl %eax, %r10d
  2779. rorl $2, %ecx
  2780. movl %r14d, %edx
  2781. addl %ecx, %r10d
  2782. # rnd_0: 0 - 0
  2783. rorl $14, %edx
  2784. vpsrlq $0x11, %xmm6, %xmm6
  2785. vpaddd %xmm1, %xmm4, %xmm4
  2786. # rnd_0: 1 - 3
  2787. movl %r11d, %eax
  2788. movl %r15d, %ecx
  2789. addl 24(%rsp), %r9d
  2790. xorl %r8d, %ecx
  2791. xorl %r14d, %edx
  2792. andl %r14d, %ecx
  2793. rorl $5, %edx
  2794. xorl %r8d, %ecx
  2795. xorl %r14d, %edx
  2796. addl %ecx, %r9d
  2797. vpxor %xmm6, %xmm7, %xmm6
  2798. vpaddd %xmm5, %xmm4, %xmm4
  2799. # rnd_0: 4 - 4
  2800. rorl $6, %edx
  2801. xorl %r10d, %eax
  2802. addl %edx, %r9d
  2803. movl %r10d, %ecx
  2804. vpxor %xmm6, %xmm8, %xmm8
  2805. # rnd_0: 5 - 5
  2806. andl %eax, %ebx
  2807. rorl $9, %ecx
  2808. xorl %r10d, %ecx
  2809. xorl %r11d, %ebx
  2810. vpshufb %xmm11, %xmm8, %xmm8
  2811. # rnd_0: 6 - 6
  2812. rorl $11, %ecx
  2813. addl %r9d, %r13d
  2814. xorl %r10d, %ecx
  2815. addl %ebx, %r9d
  2816. vpaddd %xmm8, %xmm4, %xmm4
  2817. # rnd_0: 7 - 7
  2818. rorl $2, %ecx
  2819. movl %r13d, %edx
  2820. addl %ecx, %r9d
  2821. # rnd_1: 0 - 0
  2822. rorl $14, %edx
  2823. vpshufd $0x50, %xmm4, %xmm6
  2824. # rnd_1: 1 - 1
  2825. movl %r10d, %ebx
  2826. movl %r14d, %ecx
  2827. addl 28(%rsp), %r8d
  2828. xorl %r15d, %ecx
  2829. vpsrlq $0x11, %xmm6, %xmm8
  2830. vpsrlq $19, %xmm6, %xmm7
  2831. # rnd_1: 2 - 3
  2832. xorl %r13d, %edx
  2833. andl %r13d, %ecx
  2834. rorl $5, %edx
  2835. xorl %r15d, %ecx
  2836. xorl %r13d, %edx
  2837. addl %ecx, %r8d
  2838. vpsrld $10, %xmm6, %xmm9
  2839. vpxor %xmm8, %xmm7, %xmm8
  2840. # rnd_1: 4 - 5
  2841. rorl $6, %edx
  2842. xorl %r9d, %ebx
  2843. addl %edx, %r8d
  2844. movl %r9d, %ecx
  2845. andl %ebx, %eax
  2846. rorl $9, %ecx
  2847. xorl %r9d, %ecx
  2848. xorl %r10d, %eax
  2849. vpxor %xmm9, %xmm8, %xmm9
  2850. # rnd_1: 6 - 6
  2851. rorl $11, %ecx
  2852. addl %r8d, %r12d
  2853. xorl %r9d, %ecx
  2854. addl %eax, %r8d
  2855. vpshufb %xmm12, %xmm9, %xmm9
  2856. # rnd_1: 7 - 7
  2857. rorl $2, %ecx
  2858. movl %r12d, %edx
  2859. addl %ecx, %r8d
  2860. vpaddd %xmm4, %xmm9, %xmm1
  2861. # msg_sched done: 4-7
  2862. # msg_sched: 8-11
  2863. # rnd_0: 0 - 0
  2864. rorl $14, %edx
  2865. vpalignr $4, %xmm2, %xmm3, %xmm5
  2866. vpalignr $4, %xmm0, %xmm1, %xmm4
  2867. # rnd_0: 1 - 2
  2868. movl %r9d, %eax
  2869. movl %r13d, %ecx
  2870. addl 32(%rsp), %r15d
  2871. xorl %r14d, %ecx
  2872. xorl %r12d, %edx
  2873. andl %r12d, %ecx
  2874. vpsrld $7, %xmm5, %xmm6
  2875. vpslld $25, %xmm5, %xmm7
  2876. # rnd_0: 3 - 4
  2877. rorl $5, %edx
  2878. xorl %r14d, %ecx
  2879. xorl %r12d, %edx
  2880. addl %ecx, %r15d
  2881. rorl $6, %edx
  2882. xorl %r8d, %eax
  2883. addl %edx, %r15d
  2884. movl %r8d, %ecx
  2885. vpsrld $18, %xmm5, %xmm8
  2886. vpslld $14, %xmm5, %xmm9
  2887. # rnd_0: 5 - 6
  2888. andl %eax, %ebx
  2889. rorl $9, %ecx
  2890. xorl %r8d, %ecx
  2891. xorl %r9d, %ebx
  2892. rorl $11, %ecx
  2893. addl %r15d, %r11d
  2894. xorl %r8d, %ecx
  2895. addl %ebx, %r15d
  2896. vpor %xmm6, %xmm7, %xmm6
  2897. vpor %xmm8, %xmm9, %xmm8
  2898. # rnd_0: 7 - 7
  2899. rorl $2, %ecx
  2900. movl %r11d, %edx
  2901. addl %ecx, %r15d
  2902. # rnd_1: 0 - 1
  2903. rorl $14, %edx
  2904. movl %r8d, %ebx
  2905. movl %r12d, %ecx
  2906. addl 36(%rsp), %r14d
  2907. xorl %r13d, %ecx
  2908. vpsrld $3, %xmm5, %xmm9
  2909. vpxor %xmm6, %xmm8, %xmm6
  2910. # rnd_1: 2 - 3
  2911. xorl %r11d, %edx
  2912. andl %r11d, %ecx
  2913. rorl $5, %edx
  2914. xorl %r13d, %ecx
  2915. xorl %r11d, %edx
  2916. addl %ecx, %r14d
  2917. vpxor %xmm6, %xmm9, %xmm5
  2918. vpshufd $0xfa, %xmm1, %xmm6
  2919. # rnd_1: 4 - 5
  2920. rorl $6, %edx
  2921. xorl %r15d, %ebx
  2922. addl %edx, %r14d
  2923. movl %r15d, %ecx
  2924. andl %ebx, %eax
  2925. rorl $9, %ecx
  2926. xorl %r15d, %ecx
  2927. xorl %r8d, %eax
  2928. vpsrld $10, %xmm6, %xmm8
  2929. vpsrlq $19, %xmm6, %xmm7
  2930. # rnd_1: 6 - 7
  2931. rorl $11, %ecx
  2932. addl %r14d, %r10d
  2933. xorl %r15d, %ecx
  2934. addl %eax, %r14d
  2935. rorl $2, %ecx
  2936. movl %r10d, %edx
  2937. addl %ecx, %r14d
  2938. # rnd_0: 0 - 0
  2939. rorl $14, %edx
  2940. vpsrlq $0x11, %xmm6, %xmm6
  2941. vpaddd %xmm2, %xmm4, %xmm4
  2942. # rnd_0: 1 - 3
  2943. movl %r15d, %eax
  2944. movl %r11d, %ecx
  2945. addl 40(%rsp), %r13d
  2946. xorl %r12d, %ecx
  2947. xorl %r10d, %edx
  2948. andl %r10d, %ecx
  2949. rorl $5, %edx
  2950. xorl %r12d, %ecx
  2951. xorl %r10d, %edx
  2952. addl %ecx, %r13d
  2953. vpxor %xmm6, %xmm7, %xmm6
  2954. vpaddd %xmm5, %xmm4, %xmm4
  2955. # rnd_0: 4 - 4
  2956. rorl $6, %edx
  2957. xorl %r14d, %eax
  2958. addl %edx, %r13d
  2959. movl %r14d, %ecx
  2960. vpxor %xmm6, %xmm8, %xmm8
  2961. # rnd_0: 5 - 5
  2962. andl %eax, %ebx
  2963. rorl $9, %ecx
  2964. xorl %r14d, %ecx
  2965. xorl %r15d, %ebx
  2966. vpshufb %xmm11, %xmm8, %xmm8
  2967. # rnd_0: 6 - 6
  2968. rorl $11, %ecx
  2969. addl %r13d, %r9d
  2970. xorl %r14d, %ecx
  2971. addl %ebx, %r13d
  2972. vpaddd %xmm8, %xmm4, %xmm4
  2973. # rnd_0: 7 - 7
  2974. rorl $2, %ecx
  2975. movl %r9d, %edx
  2976. addl %ecx, %r13d
  2977. # rnd_1: 0 - 0
  2978. rorl $14, %edx
  2979. vpshufd $0x50, %xmm4, %xmm6
  2980. # rnd_1: 1 - 1
  2981. movl %r14d, %ebx
  2982. movl %r10d, %ecx
  2983. addl 44(%rsp), %r12d
  2984. xorl %r11d, %ecx
  2985. vpsrlq $0x11, %xmm6, %xmm8
  2986. vpsrlq $19, %xmm6, %xmm7
  2987. # rnd_1: 2 - 3
  2988. xorl %r9d, %edx
  2989. andl %r9d, %ecx
  2990. rorl $5, %edx
  2991. xorl %r11d, %ecx
  2992. xorl %r9d, %edx
  2993. addl %ecx, %r12d
  2994. vpsrld $10, %xmm6, %xmm9
  2995. vpxor %xmm8, %xmm7, %xmm8
  2996. # rnd_1: 4 - 5
  2997. rorl $6, %edx
  2998. xorl %r13d, %ebx
  2999. addl %edx, %r12d
  3000. movl %r13d, %ecx
  3001. andl %ebx, %eax
  3002. rorl $9, %ecx
  3003. xorl %r13d, %ecx
  3004. xorl %r14d, %eax
  3005. vpxor %xmm9, %xmm8, %xmm9
  3006. # rnd_1: 6 - 6
  3007. rorl $11, %ecx
  3008. addl %r12d, %r8d
  3009. xorl %r13d, %ecx
  3010. addl %eax, %r12d
  3011. vpshufb %xmm12, %xmm9, %xmm9
  3012. # rnd_1: 7 - 7
  3013. rorl $2, %ecx
  3014. movl %r8d, %edx
  3015. addl %ecx, %r12d
  3016. vpaddd %xmm4, %xmm9, %xmm2
  3017. # msg_sched done: 8-11
  3018. # msg_sched: 12-15
  3019. # rnd_0: 0 - 0
  3020. rorl $14, %edx
  3021. vpalignr $4, %xmm3, %xmm0, %xmm5
  3022. vpalignr $4, %xmm1, %xmm2, %xmm4
  3023. # rnd_0: 1 - 2
  3024. movl %r13d, %eax
  3025. movl %r9d, %ecx
  3026. addl 48(%rsp), %r11d
  3027. xorl %r10d, %ecx
  3028. xorl %r8d, %edx
  3029. andl %r8d, %ecx
  3030. vpsrld $7, %xmm5, %xmm6
  3031. vpslld $25, %xmm5, %xmm7
  3032. # rnd_0: 3 - 4
  3033. rorl $5, %edx
  3034. xorl %r10d, %ecx
  3035. xorl %r8d, %edx
  3036. addl %ecx, %r11d
  3037. rorl $6, %edx
  3038. xorl %r12d, %eax
  3039. addl %edx, %r11d
  3040. movl %r12d, %ecx
  3041. vpsrld $18, %xmm5, %xmm8
  3042. vpslld $14, %xmm5, %xmm9
  3043. # rnd_0: 5 - 6
  3044. andl %eax, %ebx
  3045. rorl $9, %ecx
  3046. xorl %r12d, %ecx
  3047. xorl %r13d, %ebx
  3048. rorl $11, %ecx
  3049. addl %r11d, %r15d
  3050. xorl %r12d, %ecx
  3051. addl %ebx, %r11d
  3052. vpor %xmm6, %xmm7, %xmm6
  3053. vpor %xmm8, %xmm9, %xmm8
  3054. # rnd_0: 7 - 7
  3055. rorl $2, %ecx
  3056. movl %r15d, %edx
  3057. addl %ecx, %r11d
  3058. # rnd_1: 0 - 1
  3059. rorl $14, %edx
  3060. movl %r12d, %ebx
  3061. movl %r8d, %ecx
  3062. addl 52(%rsp), %r10d
  3063. xorl %r9d, %ecx
  3064. vpsrld $3, %xmm5, %xmm9
  3065. vpxor %xmm6, %xmm8, %xmm6
  3066. # rnd_1: 2 - 3
  3067. xorl %r15d, %edx
  3068. andl %r15d, %ecx
  3069. rorl $5, %edx
  3070. xorl %r9d, %ecx
  3071. xorl %r15d, %edx
  3072. addl %ecx, %r10d
  3073. vpxor %xmm6, %xmm9, %xmm5
  3074. vpshufd $0xfa, %xmm2, %xmm6
  3075. # rnd_1: 4 - 5
  3076. rorl $6, %edx
  3077. xorl %r11d, %ebx
  3078. addl %edx, %r10d
  3079. movl %r11d, %ecx
  3080. andl %ebx, %eax
  3081. rorl $9, %ecx
  3082. xorl %r11d, %ecx
  3083. xorl %r12d, %eax
  3084. vpsrld $10, %xmm6, %xmm8
  3085. vpsrlq $19, %xmm6, %xmm7
  3086. # rnd_1: 6 - 7
  3087. rorl $11, %ecx
  3088. addl %r10d, %r14d
  3089. xorl %r11d, %ecx
  3090. addl %eax, %r10d
  3091. rorl $2, %ecx
  3092. movl %r14d, %edx
  3093. addl %ecx, %r10d
  3094. # rnd_0: 0 - 0
  3095. rorl $14, %edx
  3096. vpsrlq $0x11, %xmm6, %xmm6
  3097. vpaddd %xmm3, %xmm4, %xmm4
  3098. # rnd_0: 1 - 3
  3099. movl %r11d, %eax
  3100. movl %r15d, %ecx
  3101. addl 56(%rsp), %r9d
  3102. xorl %r8d, %ecx
  3103. xorl %r14d, %edx
  3104. andl %r14d, %ecx
  3105. rorl $5, %edx
  3106. xorl %r8d, %ecx
  3107. xorl %r14d, %edx
  3108. addl %ecx, %r9d
  3109. vpxor %xmm6, %xmm7, %xmm6
  3110. vpaddd %xmm5, %xmm4, %xmm4
  3111. # rnd_0: 4 - 4
  3112. rorl $6, %edx
  3113. xorl %r10d, %eax
  3114. addl %edx, %r9d
  3115. movl %r10d, %ecx
  3116. vpxor %xmm6, %xmm8, %xmm8
  3117. # rnd_0: 5 - 5
  3118. andl %eax, %ebx
  3119. rorl $9, %ecx
  3120. xorl %r10d, %ecx
  3121. xorl %r11d, %ebx
  3122. vpshufb %xmm11, %xmm8, %xmm8
  3123. # rnd_0: 6 - 6
  3124. rorl $11, %ecx
  3125. addl %r9d, %r13d
  3126. xorl %r10d, %ecx
  3127. addl %ebx, %r9d
  3128. vpaddd %xmm8, %xmm4, %xmm4
  3129. # rnd_0: 7 - 7
  3130. rorl $2, %ecx
  3131. movl %r13d, %edx
  3132. addl %ecx, %r9d
  3133. # rnd_1: 0 - 0
  3134. rorl $14, %edx
  3135. vpshufd $0x50, %xmm4, %xmm6
  3136. # rnd_1: 1 - 1
  3137. movl %r10d, %ebx
  3138. movl %r14d, %ecx
  3139. addl 60(%rsp), %r8d
  3140. xorl %r15d, %ecx
  3141. vpsrlq $0x11, %xmm6, %xmm8
  3142. vpsrlq $19, %xmm6, %xmm7
  3143. # rnd_1: 2 - 3
  3144. xorl %r13d, %edx
  3145. andl %r13d, %ecx
  3146. rorl $5, %edx
  3147. xorl %r15d, %ecx
  3148. xorl %r13d, %edx
  3149. addl %ecx, %r8d
  3150. vpsrld $10, %xmm6, %xmm9
  3151. vpxor %xmm8, %xmm7, %xmm8
  3152. # rnd_1: 4 - 5
  3153. rorl $6, %edx
  3154. xorl %r9d, %ebx
  3155. addl %edx, %r8d
  3156. movl %r9d, %ecx
  3157. andl %ebx, %eax
  3158. rorl $9, %ecx
  3159. xorl %r9d, %ecx
  3160. xorl %r10d, %eax
  3161. vpxor %xmm9, %xmm8, %xmm9
  3162. # rnd_1: 6 - 6
  3163. rorl $11, %ecx
  3164. addl %r8d, %r12d
  3165. xorl %r9d, %ecx
  3166. addl %eax, %r8d
  3167. vpshufb %xmm12, %xmm9, %xmm9
  3168. # rnd_1: 7 - 7
  3169. rorl $2, %ecx
  3170. movl %r12d, %edx
  3171. addl %ecx, %r8d
  3172. vpaddd %xmm4, %xmm9, %xmm3
  3173. # msg_sched done: 12-15
  3174. # set_w_k_xfer_4: 4
  3175. vpaddd 64+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  3176. vpaddd 80+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  3177. vmovdqu %xmm4, (%rsp)
  3178. vmovdqu %xmm5, 16(%rsp)
  3179. vpaddd 96+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  3180. vpaddd 112+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  3181. vmovdqu %xmm6, 32(%rsp)
  3182. vmovdqu %xmm7, 48(%rsp)
  3183. # msg_sched: 0-3
  3184. # rnd_0: 0 - 0
  3185. rorl $14, %edx
  3186. vpalignr $4, %xmm0, %xmm1, %xmm5
  3187. vpalignr $4, %xmm2, %xmm3, %xmm4
  3188. # rnd_0: 1 - 2
  3189. movl %r9d, %eax
  3190. movl %r13d, %ecx
  3191. addl (%rsp), %r15d
  3192. xorl %r14d, %ecx
  3193. xorl %r12d, %edx
  3194. andl %r12d, %ecx
  3195. vpsrld $7, %xmm5, %xmm6
  3196. vpslld $25, %xmm5, %xmm7
  3197. # rnd_0: 3 - 4
  3198. rorl $5, %edx
  3199. xorl %r14d, %ecx
  3200. xorl %r12d, %edx
  3201. addl %ecx, %r15d
  3202. rorl $6, %edx
  3203. xorl %r8d, %eax
  3204. addl %edx, %r15d
  3205. movl %r8d, %ecx
  3206. vpsrld $18, %xmm5, %xmm8
  3207. vpslld $14, %xmm5, %xmm9
  3208. # rnd_0: 5 - 6
  3209. andl %eax, %ebx
  3210. rorl $9, %ecx
  3211. xorl %r8d, %ecx
  3212. xorl %r9d, %ebx
  3213. rorl $11, %ecx
  3214. addl %r15d, %r11d
  3215. xorl %r8d, %ecx
  3216. addl %ebx, %r15d
  3217. vpor %xmm6, %xmm7, %xmm6
  3218. vpor %xmm8, %xmm9, %xmm8
  3219. # rnd_0: 7 - 7
  3220. rorl $2, %ecx
  3221. movl %r11d, %edx
  3222. addl %ecx, %r15d
  3223. # rnd_1: 0 - 1
  3224. rorl $14, %edx
  3225. movl %r8d, %ebx
  3226. movl %r12d, %ecx
  3227. addl 4(%rsp), %r14d
  3228. xorl %r13d, %ecx
  3229. vpsrld $3, %xmm5, %xmm9
  3230. vpxor %xmm6, %xmm8, %xmm6
  3231. # rnd_1: 2 - 3
  3232. xorl %r11d, %edx
  3233. andl %r11d, %ecx
  3234. rorl $5, %edx
  3235. xorl %r13d, %ecx
  3236. xorl %r11d, %edx
  3237. addl %ecx, %r14d
  3238. vpxor %xmm6, %xmm9, %xmm5
  3239. vpshufd $0xfa, %xmm3, %xmm6
  3240. # rnd_1: 4 - 5
  3241. rorl $6, %edx
  3242. xorl %r15d, %ebx
  3243. addl %edx, %r14d
  3244. movl %r15d, %ecx
  3245. andl %ebx, %eax
  3246. rorl $9, %ecx
  3247. xorl %r15d, %ecx
  3248. xorl %r8d, %eax
  3249. vpsrld $10, %xmm6, %xmm8
  3250. vpsrlq $19, %xmm6, %xmm7
  3251. # rnd_1: 6 - 7
  3252. rorl $11, %ecx
  3253. addl %r14d, %r10d
  3254. xorl %r15d, %ecx
  3255. addl %eax, %r14d
  3256. rorl $2, %ecx
  3257. movl %r10d, %edx
  3258. addl %ecx, %r14d
  3259. # rnd_0: 0 - 0
  3260. rorl $14, %edx
  3261. vpsrlq $0x11, %xmm6, %xmm6
  3262. vpaddd %xmm0, %xmm4, %xmm4
  3263. # rnd_0: 1 - 3
  3264. movl %r15d, %eax
  3265. movl %r11d, %ecx
  3266. addl 8(%rsp), %r13d
  3267. xorl %r12d, %ecx
  3268. xorl %r10d, %edx
  3269. andl %r10d, %ecx
  3270. rorl $5, %edx
  3271. xorl %r12d, %ecx
  3272. xorl %r10d, %edx
  3273. addl %ecx, %r13d
  3274. vpxor %xmm6, %xmm7, %xmm6
  3275. vpaddd %xmm5, %xmm4, %xmm4
  3276. # rnd_0: 4 - 4
  3277. rorl $6, %edx
  3278. xorl %r14d, %eax
  3279. addl %edx, %r13d
  3280. movl %r14d, %ecx
  3281. vpxor %xmm6, %xmm8, %xmm8
  3282. # rnd_0: 5 - 5
  3283. andl %eax, %ebx
  3284. rorl $9, %ecx
  3285. xorl %r14d, %ecx
  3286. xorl %r15d, %ebx
  3287. vpshufb %xmm11, %xmm8, %xmm8
  3288. # rnd_0: 6 - 6
  3289. rorl $11, %ecx
  3290. addl %r13d, %r9d
  3291. xorl %r14d, %ecx
  3292. addl %ebx, %r13d
  3293. vpaddd %xmm8, %xmm4, %xmm4
  3294. # rnd_0: 7 - 7
  3295. rorl $2, %ecx
  3296. movl %r9d, %edx
  3297. addl %ecx, %r13d
  3298. # rnd_1: 0 - 0
  3299. rorl $14, %edx
  3300. vpshufd $0x50, %xmm4, %xmm6
  3301. # rnd_1: 1 - 1
  3302. movl %r14d, %ebx
  3303. movl %r10d, %ecx
  3304. addl 12(%rsp), %r12d
  3305. xorl %r11d, %ecx
  3306. vpsrlq $0x11, %xmm6, %xmm8
  3307. vpsrlq $19, %xmm6, %xmm7
  3308. # rnd_1: 2 - 3
  3309. xorl %r9d, %edx
  3310. andl %r9d, %ecx
  3311. rorl $5, %edx
  3312. xorl %r11d, %ecx
  3313. xorl %r9d, %edx
  3314. addl %ecx, %r12d
  3315. vpsrld $10, %xmm6, %xmm9
  3316. vpxor %xmm8, %xmm7, %xmm8
  3317. # rnd_1: 4 - 5
  3318. rorl $6, %edx
  3319. xorl %r13d, %ebx
  3320. addl %edx, %r12d
  3321. movl %r13d, %ecx
  3322. andl %ebx, %eax
  3323. rorl $9, %ecx
  3324. xorl %r13d, %ecx
  3325. xorl %r14d, %eax
  3326. vpxor %xmm9, %xmm8, %xmm9
  3327. # rnd_1: 6 - 6
  3328. rorl $11, %ecx
  3329. addl %r12d, %r8d
  3330. xorl %r13d, %ecx
  3331. addl %eax, %r12d
  3332. vpshufb %xmm12, %xmm9, %xmm9
  3333. # rnd_1: 7 - 7
  3334. rorl $2, %ecx
  3335. movl %r8d, %edx
  3336. addl %ecx, %r12d
  3337. vpaddd %xmm4, %xmm9, %xmm0
  3338. # msg_sched done: 0-3
  3339. # msg_sched: 4-7
  3340. # rnd_0: 0 - 0
  3341. rorl $14, %edx
  3342. vpalignr $4, %xmm1, %xmm2, %xmm5
  3343. vpalignr $4, %xmm3, %xmm0, %xmm4
  3344. # rnd_0: 1 - 2
  3345. movl %r13d, %eax
  3346. movl %r9d, %ecx
  3347. addl 16(%rsp), %r11d
  3348. xorl %r10d, %ecx
  3349. xorl %r8d, %edx
  3350. andl %r8d, %ecx
  3351. vpsrld $7, %xmm5, %xmm6
  3352. vpslld $25, %xmm5, %xmm7
  3353. # rnd_0: 3 - 4
  3354. rorl $5, %edx
  3355. xorl %r10d, %ecx
  3356. xorl %r8d, %edx
  3357. addl %ecx, %r11d
  3358. rorl $6, %edx
  3359. xorl %r12d, %eax
  3360. addl %edx, %r11d
  3361. movl %r12d, %ecx
  3362. vpsrld $18, %xmm5, %xmm8
  3363. vpslld $14, %xmm5, %xmm9
  3364. # rnd_0: 5 - 6
  3365. andl %eax, %ebx
  3366. rorl $9, %ecx
  3367. xorl %r12d, %ecx
  3368. xorl %r13d, %ebx
  3369. rorl $11, %ecx
  3370. addl %r11d, %r15d
  3371. xorl %r12d, %ecx
  3372. addl %ebx, %r11d
  3373. vpor %xmm6, %xmm7, %xmm6
  3374. vpor %xmm8, %xmm9, %xmm8
  3375. # rnd_0: 7 - 7
  3376. rorl $2, %ecx
  3377. movl %r15d, %edx
  3378. addl %ecx, %r11d
  3379. # rnd_1: 0 - 1
  3380. rorl $14, %edx
  3381. movl %r12d, %ebx
  3382. movl %r8d, %ecx
  3383. addl 20(%rsp), %r10d
  3384. xorl %r9d, %ecx
  3385. vpsrld $3, %xmm5, %xmm9
  3386. vpxor %xmm6, %xmm8, %xmm6
  3387. # rnd_1: 2 - 3
  3388. xorl %r15d, %edx
  3389. andl %r15d, %ecx
  3390. rorl $5, %edx
  3391. xorl %r9d, %ecx
  3392. xorl %r15d, %edx
  3393. addl %ecx, %r10d
  3394. vpxor %xmm6, %xmm9, %xmm5
  3395. vpshufd $0xfa, %xmm0, %xmm6
  3396. # rnd_1: 4 - 5
  3397. rorl $6, %edx
  3398. xorl %r11d, %ebx
  3399. addl %edx, %r10d
  3400. movl %r11d, %ecx
  3401. andl %ebx, %eax
  3402. rorl $9, %ecx
  3403. xorl %r11d, %ecx
  3404. xorl %r12d, %eax
  3405. vpsrld $10, %xmm6, %xmm8
  3406. vpsrlq $19, %xmm6, %xmm7
  3407. # rnd_1: 6 - 7
  3408. rorl $11, %ecx
  3409. addl %r10d, %r14d
  3410. xorl %r11d, %ecx
  3411. addl %eax, %r10d
  3412. rorl $2, %ecx
  3413. movl %r14d, %edx
  3414. addl %ecx, %r10d
  3415. # rnd_0: 0 - 0
  3416. rorl $14, %edx
  3417. vpsrlq $0x11, %xmm6, %xmm6
  3418. vpaddd %xmm1, %xmm4, %xmm4
  3419. # rnd_0: 1 - 3
  3420. movl %r11d, %eax
  3421. movl %r15d, %ecx
  3422. addl 24(%rsp), %r9d
  3423. xorl %r8d, %ecx
  3424. xorl %r14d, %edx
  3425. andl %r14d, %ecx
  3426. rorl $5, %edx
  3427. xorl %r8d, %ecx
  3428. xorl %r14d, %edx
  3429. addl %ecx, %r9d
  3430. vpxor %xmm6, %xmm7, %xmm6
  3431. vpaddd %xmm5, %xmm4, %xmm4
  3432. # rnd_0: 4 - 4
  3433. rorl $6, %edx
  3434. xorl %r10d, %eax
  3435. addl %edx, %r9d
  3436. movl %r10d, %ecx
  3437. vpxor %xmm6, %xmm8, %xmm8
  3438. # rnd_0: 5 - 5
  3439. andl %eax, %ebx
  3440. rorl $9, %ecx
  3441. xorl %r10d, %ecx
  3442. xorl %r11d, %ebx
  3443. vpshufb %xmm11, %xmm8, %xmm8
  3444. # rnd_0: 6 - 6
  3445. rorl $11, %ecx
  3446. addl %r9d, %r13d
  3447. xorl %r10d, %ecx
  3448. addl %ebx, %r9d
  3449. vpaddd %xmm8, %xmm4, %xmm4
  3450. # rnd_0: 7 - 7
  3451. rorl $2, %ecx
  3452. movl %r13d, %edx
  3453. addl %ecx, %r9d
  3454. # rnd_1: 0 - 0
  3455. rorl $14, %edx
  3456. vpshufd $0x50, %xmm4, %xmm6
  3457. # rnd_1: 1 - 1
  3458. movl %r10d, %ebx
  3459. movl %r14d, %ecx
  3460. addl 28(%rsp), %r8d
  3461. xorl %r15d, %ecx
  3462. vpsrlq $0x11, %xmm6, %xmm8
  3463. vpsrlq $19, %xmm6, %xmm7
  3464. # rnd_1: 2 - 3
  3465. xorl %r13d, %edx
  3466. andl %r13d, %ecx
  3467. rorl $5, %edx
  3468. xorl %r15d, %ecx
  3469. xorl %r13d, %edx
  3470. addl %ecx, %r8d
  3471. vpsrld $10, %xmm6, %xmm9
  3472. vpxor %xmm8, %xmm7, %xmm8
  3473. # rnd_1: 4 - 5
  3474. rorl $6, %edx
  3475. xorl %r9d, %ebx
  3476. addl %edx, %r8d
  3477. movl %r9d, %ecx
  3478. andl %ebx, %eax
  3479. rorl $9, %ecx
  3480. xorl %r9d, %ecx
  3481. xorl %r10d, %eax
  3482. vpxor %xmm9, %xmm8, %xmm9
  3483. # rnd_1: 6 - 6
  3484. rorl $11, %ecx
  3485. addl %r8d, %r12d
  3486. xorl %r9d, %ecx
  3487. addl %eax, %r8d
  3488. vpshufb %xmm12, %xmm9, %xmm9
  3489. # rnd_1: 7 - 7
  3490. rorl $2, %ecx
  3491. movl %r12d, %edx
  3492. addl %ecx, %r8d
  3493. vpaddd %xmm4, %xmm9, %xmm1
  3494. # msg_sched done: 4-7
  3495. # msg_sched: 8-11
  3496. # rnd_0: 0 - 0
  3497. rorl $14, %edx
  3498. vpalignr $4, %xmm2, %xmm3, %xmm5
  3499. vpalignr $4, %xmm0, %xmm1, %xmm4
  3500. # rnd_0: 1 - 2
  3501. movl %r9d, %eax
  3502. movl %r13d, %ecx
  3503. addl 32(%rsp), %r15d
  3504. xorl %r14d, %ecx
  3505. xorl %r12d, %edx
  3506. andl %r12d, %ecx
  3507. vpsrld $7, %xmm5, %xmm6
  3508. vpslld $25, %xmm5, %xmm7
  3509. # rnd_0: 3 - 4
  3510. rorl $5, %edx
  3511. xorl %r14d, %ecx
  3512. xorl %r12d, %edx
  3513. addl %ecx, %r15d
  3514. rorl $6, %edx
  3515. xorl %r8d, %eax
  3516. addl %edx, %r15d
  3517. movl %r8d, %ecx
  3518. vpsrld $18, %xmm5, %xmm8
  3519. vpslld $14, %xmm5, %xmm9
  3520. # rnd_0: 5 - 6
  3521. andl %eax, %ebx
  3522. rorl $9, %ecx
  3523. xorl %r8d, %ecx
  3524. xorl %r9d, %ebx
  3525. rorl $11, %ecx
  3526. addl %r15d, %r11d
  3527. xorl %r8d, %ecx
  3528. addl %ebx, %r15d
  3529. vpor %xmm6, %xmm7, %xmm6
  3530. vpor %xmm8, %xmm9, %xmm8
  3531. # rnd_0: 7 - 7
  3532. rorl $2, %ecx
  3533. movl %r11d, %edx
  3534. addl %ecx, %r15d
  3535. # rnd_1: 0 - 1
  3536. rorl $14, %edx
  3537. movl %r8d, %ebx
  3538. movl %r12d, %ecx
  3539. addl 36(%rsp), %r14d
  3540. xorl %r13d, %ecx
  3541. vpsrld $3, %xmm5, %xmm9
  3542. vpxor %xmm6, %xmm8, %xmm6
  3543. # rnd_1: 2 - 3
  3544. xorl %r11d, %edx
  3545. andl %r11d, %ecx
  3546. rorl $5, %edx
  3547. xorl %r13d, %ecx
  3548. xorl %r11d, %edx
  3549. addl %ecx, %r14d
  3550. vpxor %xmm6, %xmm9, %xmm5
  3551. vpshufd $0xfa, %xmm1, %xmm6
  3552. # rnd_1: 4 - 5
  3553. rorl $6, %edx
  3554. xorl %r15d, %ebx
  3555. addl %edx, %r14d
  3556. movl %r15d, %ecx
  3557. andl %ebx, %eax
  3558. rorl $9, %ecx
  3559. xorl %r15d, %ecx
  3560. xorl %r8d, %eax
  3561. vpsrld $10, %xmm6, %xmm8
  3562. vpsrlq $19, %xmm6, %xmm7
  3563. # rnd_1: 6 - 7
  3564. rorl $11, %ecx
  3565. addl %r14d, %r10d
  3566. xorl %r15d, %ecx
  3567. addl %eax, %r14d
  3568. rorl $2, %ecx
  3569. movl %r10d, %edx
  3570. addl %ecx, %r14d
  3571. # rnd_0: 0 - 0
  3572. rorl $14, %edx
  3573. vpsrlq $0x11, %xmm6, %xmm6
  3574. vpaddd %xmm2, %xmm4, %xmm4
  3575. # rnd_0: 1 - 3
  3576. movl %r15d, %eax
  3577. movl %r11d, %ecx
  3578. addl 40(%rsp), %r13d
  3579. xorl %r12d, %ecx
  3580. xorl %r10d, %edx
  3581. andl %r10d, %ecx
  3582. rorl $5, %edx
  3583. xorl %r12d, %ecx
  3584. xorl %r10d, %edx
  3585. addl %ecx, %r13d
  3586. vpxor %xmm6, %xmm7, %xmm6
  3587. vpaddd %xmm5, %xmm4, %xmm4
  3588. # rnd_0: 4 - 4
  3589. rorl $6, %edx
  3590. xorl %r14d, %eax
  3591. addl %edx, %r13d
  3592. movl %r14d, %ecx
  3593. vpxor %xmm6, %xmm8, %xmm8
  3594. # rnd_0: 5 - 5
  3595. andl %eax, %ebx
  3596. rorl $9, %ecx
  3597. xorl %r14d, %ecx
  3598. xorl %r15d, %ebx
  3599. vpshufb %xmm11, %xmm8, %xmm8
  3600. # rnd_0: 6 - 6
  3601. rorl $11, %ecx
  3602. addl %r13d, %r9d
  3603. xorl %r14d, %ecx
  3604. addl %ebx, %r13d
  3605. vpaddd %xmm8, %xmm4, %xmm4
  3606. # rnd_0: 7 - 7
  3607. rorl $2, %ecx
  3608. movl %r9d, %edx
  3609. addl %ecx, %r13d
  3610. # rnd_1: 0 - 0
  3611. rorl $14, %edx
  3612. vpshufd $0x50, %xmm4, %xmm6
  3613. # rnd_1: 1 - 1
  3614. movl %r14d, %ebx
  3615. movl %r10d, %ecx
  3616. addl 44(%rsp), %r12d
  3617. xorl %r11d, %ecx
  3618. vpsrlq $0x11, %xmm6, %xmm8
  3619. vpsrlq $19, %xmm6, %xmm7
  3620. # rnd_1: 2 - 3
  3621. xorl %r9d, %edx
  3622. andl %r9d, %ecx
  3623. rorl $5, %edx
  3624. xorl %r11d, %ecx
  3625. xorl %r9d, %edx
  3626. addl %ecx, %r12d
  3627. vpsrld $10, %xmm6, %xmm9
  3628. vpxor %xmm8, %xmm7, %xmm8
  3629. # rnd_1: 4 - 5
  3630. rorl $6, %edx
  3631. xorl %r13d, %ebx
  3632. addl %edx, %r12d
  3633. movl %r13d, %ecx
  3634. andl %ebx, %eax
  3635. rorl $9, %ecx
  3636. xorl %r13d, %ecx
  3637. xorl %r14d, %eax
  3638. vpxor %xmm9, %xmm8, %xmm9
  3639. # rnd_1: 6 - 6
  3640. rorl $11, %ecx
  3641. addl %r12d, %r8d
  3642. xorl %r13d, %ecx
  3643. addl %eax, %r12d
  3644. vpshufb %xmm12, %xmm9, %xmm9
  3645. # rnd_1: 7 - 7
  3646. rorl $2, %ecx
  3647. movl %r8d, %edx
  3648. addl %ecx, %r12d
  3649. vpaddd %xmm4, %xmm9, %xmm2
  3650. # msg_sched done: 8-11
  3651. # msg_sched: 12-15
  3652. # rnd_0: 0 - 0
  3653. rorl $14, %edx
  3654. vpalignr $4, %xmm3, %xmm0, %xmm5
  3655. vpalignr $4, %xmm1, %xmm2, %xmm4
  3656. # rnd_0: 1 - 2
  3657. movl %r13d, %eax
  3658. movl %r9d, %ecx
  3659. addl 48(%rsp), %r11d
  3660. xorl %r10d, %ecx
  3661. xorl %r8d, %edx
  3662. andl %r8d, %ecx
  3663. vpsrld $7, %xmm5, %xmm6
  3664. vpslld $25, %xmm5, %xmm7
  3665. # rnd_0: 3 - 4
  3666. rorl $5, %edx
  3667. xorl %r10d, %ecx
  3668. xorl %r8d, %edx
  3669. addl %ecx, %r11d
  3670. rorl $6, %edx
  3671. xorl %r12d, %eax
  3672. addl %edx, %r11d
  3673. movl %r12d, %ecx
  3674. vpsrld $18, %xmm5, %xmm8
  3675. vpslld $14, %xmm5, %xmm9
  3676. # rnd_0: 5 - 6
  3677. andl %eax, %ebx
  3678. rorl $9, %ecx
  3679. xorl %r12d, %ecx
  3680. xorl %r13d, %ebx
  3681. rorl $11, %ecx
  3682. addl %r11d, %r15d
  3683. xorl %r12d, %ecx
  3684. addl %ebx, %r11d
  3685. vpor %xmm6, %xmm7, %xmm6
  3686. vpor %xmm8, %xmm9, %xmm8
  3687. # rnd_0: 7 - 7
  3688. rorl $2, %ecx
  3689. movl %r15d, %edx
  3690. addl %ecx, %r11d
  3691. # rnd_1: 0 - 1
  3692. rorl $14, %edx
  3693. movl %r12d, %ebx
  3694. movl %r8d, %ecx
  3695. addl 52(%rsp), %r10d
  3696. xorl %r9d, %ecx
  3697. vpsrld $3, %xmm5, %xmm9
  3698. vpxor %xmm6, %xmm8, %xmm6
  3699. # rnd_1: 2 - 3
  3700. xorl %r15d, %edx
  3701. andl %r15d, %ecx
  3702. rorl $5, %edx
  3703. xorl %r9d, %ecx
  3704. xorl %r15d, %edx
  3705. addl %ecx, %r10d
  3706. vpxor %xmm6, %xmm9, %xmm5
  3707. vpshufd $0xfa, %xmm2, %xmm6
  3708. # rnd_1: 4 - 5
  3709. rorl $6, %edx
  3710. xorl %r11d, %ebx
  3711. addl %edx, %r10d
  3712. movl %r11d, %ecx
  3713. andl %ebx, %eax
  3714. rorl $9, %ecx
  3715. xorl %r11d, %ecx
  3716. xorl %r12d, %eax
  3717. vpsrld $10, %xmm6, %xmm8
  3718. vpsrlq $19, %xmm6, %xmm7
  3719. # rnd_1: 6 - 7
  3720. rorl $11, %ecx
  3721. addl %r10d, %r14d
  3722. xorl %r11d, %ecx
  3723. addl %eax, %r10d
  3724. rorl $2, %ecx
  3725. movl %r14d, %edx
  3726. addl %ecx, %r10d
  3727. # rnd_0: 0 - 0
  3728. rorl $14, %edx
  3729. vpsrlq $0x11, %xmm6, %xmm6
  3730. vpaddd %xmm3, %xmm4, %xmm4
  3731. # rnd_0: 1 - 3
  3732. movl %r11d, %eax
  3733. movl %r15d, %ecx
  3734. addl 56(%rsp), %r9d
  3735. xorl %r8d, %ecx
  3736. xorl %r14d, %edx
  3737. andl %r14d, %ecx
  3738. rorl $5, %edx
  3739. xorl %r8d, %ecx
  3740. xorl %r14d, %edx
  3741. addl %ecx, %r9d
  3742. vpxor %xmm6, %xmm7, %xmm6
  3743. vpaddd %xmm5, %xmm4, %xmm4
  3744. # rnd_0: 4 - 4
  3745. rorl $6, %edx
  3746. xorl %r10d, %eax
  3747. addl %edx, %r9d
  3748. movl %r10d, %ecx
  3749. vpxor %xmm6, %xmm8, %xmm8
  3750. # rnd_0: 5 - 5
  3751. andl %eax, %ebx
  3752. rorl $9, %ecx
  3753. xorl %r10d, %ecx
  3754. xorl %r11d, %ebx
  3755. vpshufb %xmm11, %xmm8, %xmm8
  3756. # rnd_0: 6 - 6
  3757. rorl $11, %ecx
  3758. addl %r9d, %r13d
  3759. xorl %r10d, %ecx
  3760. addl %ebx, %r9d
  3761. vpaddd %xmm8, %xmm4, %xmm4
  3762. # rnd_0: 7 - 7
  3763. rorl $2, %ecx
  3764. movl %r13d, %edx
  3765. addl %ecx, %r9d
  3766. # rnd_1: 0 - 0
  3767. rorl $14, %edx
  3768. vpshufd $0x50, %xmm4, %xmm6
  3769. # rnd_1: 1 - 1
  3770. movl %r10d, %ebx
  3771. movl %r14d, %ecx
  3772. addl 60(%rsp), %r8d
  3773. xorl %r15d, %ecx
  3774. vpsrlq $0x11, %xmm6, %xmm8
  3775. vpsrlq $19, %xmm6, %xmm7
  3776. # rnd_1: 2 - 3
  3777. xorl %r13d, %edx
  3778. andl %r13d, %ecx
  3779. rorl $5, %edx
  3780. xorl %r15d, %ecx
  3781. xorl %r13d, %edx
  3782. addl %ecx, %r8d
  3783. vpsrld $10, %xmm6, %xmm9
  3784. vpxor %xmm8, %xmm7, %xmm8
  3785. # rnd_1: 4 - 5
  3786. rorl $6, %edx
  3787. xorl %r9d, %ebx
  3788. addl %edx, %r8d
  3789. movl %r9d, %ecx
  3790. andl %ebx, %eax
  3791. rorl $9, %ecx
  3792. xorl %r9d, %ecx
  3793. xorl %r10d, %eax
  3794. vpxor %xmm9, %xmm8, %xmm9
  3795. # rnd_1: 6 - 6
  3796. rorl $11, %ecx
  3797. addl %r8d, %r12d
  3798. xorl %r9d, %ecx
  3799. addl %eax, %r8d
  3800. vpshufb %xmm12, %xmm9, %xmm9
  3801. # rnd_1: 7 - 7
  3802. rorl $2, %ecx
  3803. movl %r12d, %edx
  3804. addl %ecx, %r8d
  3805. vpaddd %xmm4, %xmm9, %xmm3
  3806. # msg_sched done: 12-15
  3807. # set_w_k_xfer_4: 8
  3808. vpaddd 128+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  3809. vpaddd 144+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  3810. vmovdqu %xmm4, (%rsp)
  3811. vmovdqu %xmm5, 16(%rsp)
  3812. vpaddd 160+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  3813. vpaddd 176+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  3814. vmovdqu %xmm6, 32(%rsp)
  3815. vmovdqu %xmm7, 48(%rsp)
  3816. # msg_sched: 0-3
  3817. # rnd_0: 0 - 0
  3818. rorl $14, %edx
  3819. vpalignr $4, %xmm0, %xmm1, %xmm5
  3820. vpalignr $4, %xmm2, %xmm3, %xmm4
  3821. # rnd_0: 1 - 2
  3822. movl %r9d, %eax
  3823. movl %r13d, %ecx
  3824. addl (%rsp), %r15d
  3825. xorl %r14d, %ecx
  3826. xorl %r12d, %edx
  3827. andl %r12d, %ecx
  3828. vpsrld $7, %xmm5, %xmm6
  3829. vpslld $25, %xmm5, %xmm7
  3830. # rnd_0: 3 - 4
  3831. rorl $5, %edx
  3832. xorl %r14d, %ecx
  3833. xorl %r12d, %edx
  3834. addl %ecx, %r15d
  3835. rorl $6, %edx
  3836. xorl %r8d, %eax
  3837. addl %edx, %r15d
  3838. movl %r8d, %ecx
  3839. vpsrld $18, %xmm5, %xmm8
  3840. vpslld $14, %xmm5, %xmm9
  3841. # rnd_0: 5 - 6
  3842. andl %eax, %ebx
  3843. rorl $9, %ecx
  3844. xorl %r8d, %ecx
  3845. xorl %r9d, %ebx
  3846. rorl $11, %ecx
  3847. addl %r15d, %r11d
  3848. xorl %r8d, %ecx
  3849. addl %ebx, %r15d
  3850. vpor %xmm6, %xmm7, %xmm6
  3851. vpor %xmm8, %xmm9, %xmm8
  3852. # rnd_0: 7 - 7
  3853. rorl $2, %ecx
  3854. movl %r11d, %edx
  3855. addl %ecx, %r15d
  3856. # rnd_1: 0 - 1
  3857. rorl $14, %edx
  3858. movl %r8d, %ebx
  3859. movl %r12d, %ecx
  3860. addl 4(%rsp), %r14d
  3861. xorl %r13d, %ecx
  3862. vpsrld $3, %xmm5, %xmm9
  3863. vpxor %xmm6, %xmm8, %xmm6
  3864. # rnd_1: 2 - 3
  3865. xorl %r11d, %edx
  3866. andl %r11d, %ecx
  3867. rorl $5, %edx
  3868. xorl %r13d, %ecx
  3869. xorl %r11d, %edx
  3870. addl %ecx, %r14d
  3871. vpxor %xmm6, %xmm9, %xmm5
  3872. vpshufd $0xfa, %xmm3, %xmm6
  3873. # rnd_1: 4 - 5
  3874. rorl $6, %edx
  3875. xorl %r15d, %ebx
  3876. addl %edx, %r14d
  3877. movl %r15d, %ecx
  3878. andl %ebx, %eax
  3879. rorl $9, %ecx
  3880. xorl %r15d, %ecx
  3881. xorl %r8d, %eax
  3882. vpsrld $10, %xmm6, %xmm8
  3883. vpsrlq $19, %xmm6, %xmm7
  3884. # rnd_1: 6 - 7
  3885. rorl $11, %ecx
  3886. addl %r14d, %r10d
  3887. xorl %r15d, %ecx
  3888. addl %eax, %r14d
  3889. rorl $2, %ecx
  3890. movl %r10d, %edx
  3891. addl %ecx, %r14d
  3892. # rnd_0: 0 - 0
  3893. rorl $14, %edx
  3894. vpsrlq $0x11, %xmm6, %xmm6
  3895. vpaddd %xmm0, %xmm4, %xmm4
  3896. # rnd_0: 1 - 3
  3897. movl %r15d, %eax
  3898. movl %r11d, %ecx
  3899. addl 8(%rsp), %r13d
  3900. xorl %r12d, %ecx
  3901. xorl %r10d, %edx
  3902. andl %r10d, %ecx
  3903. rorl $5, %edx
  3904. xorl %r12d, %ecx
  3905. xorl %r10d, %edx
  3906. addl %ecx, %r13d
  3907. vpxor %xmm6, %xmm7, %xmm6
  3908. vpaddd %xmm5, %xmm4, %xmm4
  3909. # rnd_0: 4 - 4
  3910. rorl $6, %edx
  3911. xorl %r14d, %eax
  3912. addl %edx, %r13d
  3913. movl %r14d, %ecx
  3914. vpxor %xmm6, %xmm8, %xmm8
  3915. # rnd_0: 5 - 5
  3916. andl %eax, %ebx
  3917. rorl $9, %ecx
  3918. xorl %r14d, %ecx
  3919. xorl %r15d, %ebx
  3920. vpshufb %xmm11, %xmm8, %xmm8
  3921. # rnd_0: 6 - 6
  3922. rorl $11, %ecx
  3923. addl %r13d, %r9d
  3924. xorl %r14d, %ecx
  3925. addl %ebx, %r13d
  3926. vpaddd %xmm8, %xmm4, %xmm4
  3927. # rnd_0: 7 - 7
  3928. rorl $2, %ecx
  3929. movl %r9d, %edx
  3930. addl %ecx, %r13d
  3931. # rnd_1: 0 - 0
  3932. rorl $14, %edx
  3933. vpshufd $0x50, %xmm4, %xmm6
  3934. # rnd_1: 1 - 1
  3935. movl %r14d, %ebx
  3936. movl %r10d, %ecx
  3937. addl 12(%rsp), %r12d
  3938. xorl %r11d, %ecx
  3939. vpsrlq $0x11, %xmm6, %xmm8
  3940. vpsrlq $19, %xmm6, %xmm7
  3941. # rnd_1: 2 - 3
  3942. xorl %r9d, %edx
  3943. andl %r9d, %ecx
  3944. rorl $5, %edx
  3945. xorl %r11d, %ecx
  3946. xorl %r9d, %edx
  3947. addl %ecx, %r12d
  3948. vpsrld $10, %xmm6, %xmm9
  3949. vpxor %xmm8, %xmm7, %xmm8
  3950. # rnd_1: 4 - 5
  3951. rorl $6, %edx
  3952. xorl %r13d, %ebx
  3953. addl %edx, %r12d
  3954. movl %r13d, %ecx
  3955. andl %ebx, %eax
  3956. rorl $9, %ecx
  3957. xorl %r13d, %ecx
  3958. xorl %r14d, %eax
  3959. vpxor %xmm9, %xmm8, %xmm9
  3960. # rnd_1: 6 - 6
  3961. rorl $11, %ecx
  3962. addl %r12d, %r8d
  3963. xorl %r13d, %ecx
  3964. addl %eax, %r12d
  3965. vpshufb %xmm12, %xmm9, %xmm9
  3966. # rnd_1: 7 - 7
  3967. rorl $2, %ecx
  3968. movl %r8d, %edx
  3969. addl %ecx, %r12d
  3970. vpaddd %xmm4, %xmm9, %xmm0
  3971. # msg_sched done: 0-3
  3972. # msg_sched: 4-7
  3973. # rnd_0: 0 - 0
  3974. rorl $14, %edx
  3975. vpalignr $4, %xmm1, %xmm2, %xmm5
  3976. vpalignr $4, %xmm3, %xmm0, %xmm4
  3977. # rnd_0: 1 - 2
  3978. movl %r13d, %eax
  3979. movl %r9d, %ecx
  3980. addl 16(%rsp), %r11d
  3981. xorl %r10d, %ecx
  3982. xorl %r8d, %edx
  3983. andl %r8d, %ecx
  3984. vpsrld $7, %xmm5, %xmm6
  3985. vpslld $25, %xmm5, %xmm7
  3986. # rnd_0: 3 - 4
  3987. rorl $5, %edx
  3988. xorl %r10d, %ecx
  3989. xorl %r8d, %edx
  3990. addl %ecx, %r11d
  3991. rorl $6, %edx
  3992. xorl %r12d, %eax
  3993. addl %edx, %r11d
  3994. movl %r12d, %ecx
  3995. vpsrld $18, %xmm5, %xmm8
  3996. vpslld $14, %xmm5, %xmm9
  3997. # rnd_0: 5 - 6
  3998. andl %eax, %ebx
  3999. rorl $9, %ecx
  4000. xorl %r12d, %ecx
  4001. xorl %r13d, %ebx
  4002. rorl $11, %ecx
  4003. addl %r11d, %r15d
  4004. xorl %r12d, %ecx
  4005. addl %ebx, %r11d
  4006. vpor %xmm6, %xmm7, %xmm6
  4007. vpor %xmm8, %xmm9, %xmm8
  4008. # rnd_0: 7 - 7
  4009. rorl $2, %ecx
  4010. movl %r15d, %edx
  4011. addl %ecx, %r11d
  4012. # rnd_1: 0 - 1
  4013. rorl $14, %edx
  4014. movl %r12d, %ebx
  4015. movl %r8d, %ecx
  4016. addl 20(%rsp), %r10d
  4017. xorl %r9d, %ecx
  4018. vpsrld $3, %xmm5, %xmm9
  4019. vpxor %xmm6, %xmm8, %xmm6
  4020. # rnd_1: 2 - 3
  4021. xorl %r15d, %edx
  4022. andl %r15d, %ecx
  4023. rorl $5, %edx
  4024. xorl %r9d, %ecx
  4025. xorl %r15d, %edx
  4026. addl %ecx, %r10d
  4027. vpxor %xmm6, %xmm9, %xmm5
  4028. vpshufd $0xfa, %xmm0, %xmm6
  4029. # rnd_1: 4 - 5
  4030. rorl $6, %edx
  4031. xorl %r11d, %ebx
  4032. addl %edx, %r10d
  4033. movl %r11d, %ecx
  4034. andl %ebx, %eax
  4035. rorl $9, %ecx
  4036. xorl %r11d, %ecx
  4037. xorl %r12d, %eax
  4038. vpsrld $10, %xmm6, %xmm8
  4039. vpsrlq $19, %xmm6, %xmm7
  4040. # rnd_1: 6 - 7
  4041. rorl $11, %ecx
  4042. addl %r10d, %r14d
  4043. xorl %r11d, %ecx
  4044. addl %eax, %r10d
  4045. rorl $2, %ecx
  4046. movl %r14d, %edx
  4047. addl %ecx, %r10d
  4048. # rnd_0: 0 - 0
  4049. rorl $14, %edx
  4050. vpsrlq $0x11, %xmm6, %xmm6
  4051. vpaddd %xmm1, %xmm4, %xmm4
  4052. # rnd_0: 1 - 3
  4053. movl %r11d, %eax
  4054. movl %r15d, %ecx
  4055. addl 24(%rsp), %r9d
  4056. xorl %r8d, %ecx
  4057. xorl %r14d, %edx
  4058. andl %r14d, %ecx
  4059. rorl $5, %edx
  4060. xorl %r8d, %ecx
  4061. xorl %r14d, %edx
  4062. addl %ecx, %r9d
  4063. vpxor %xmm6, %xmm7, %xmm6
  4064. vpaddd %xmm5, %xmm4, %xmm4
  4065. # rnd_0: 4 - 4
  4066. rorl $6, %edx
  4067. xorl %r10d, %eax
  4068. addl %edx, %r9d
  4069. movl %r10d, %ecx
  4070. vpxor %xmm6, %xmm8, %xmm8
  4071. # rnd_0: 5 - 5
  4072. andl %eax, %ebx
  4073. rorl $9, %ecx
  4074. xorl %r10d, %ecx
  4075. xorl %r11d, %ebx
  4076. vpshufb %xmm11, %xmm8, %xmm8
  4077. # rnd_0: 6 - 6
  4078. rorl $11, %ecx
  4079. addl %r9d, %r13d
  4080. xorl %r10d, %ecx
  4081. addl %ebx, %r9d
  4082. vpaddd %xmm8, %xmm4, %xmm4
  4083. # rnd_0: 7 - 7
  4084. rorl $2, %ecx
  4085. movl %r13d, %edx
  4086. addl %ecx, %r9d
  4087. # rnd_1: 0 - 0
  4088. rorl $14, %edx
  4089. vpshufd $0x50, %xmm4, %xmm6
  4090. # rnd_1: 1 - 1
  4091. movl %r10d, %ebx
  4092. movl %r14d, %ecx
  4093. addl 28(%rsp), %r8d
  4094. xorl %r15d, %ecx
  4095. vpsrlq $0x11, %xmm6, %xmm8
  4096. vpsrlq $19, %xmm6, %xmm7
  4097. # rnd_1: 2 - 3
  4098. xorl %r13d, %edx
  4099. andl %r13d, %ecx
  4100. rorl $5, %edx
  4101. xorl %r15d, %ecx
  4102. xorl %r13d, %edx
  4103. addl %ecx, %r8d
  4104. vpsrld $10, %xmm6, %xmm9
  4105. vpxor %xmm8, %xmm7, %xmm8
  4106. # rnd_1: 4 - 5
  4107. rorl $6, %edx
  4108. xorl %r9d, %ebx
  4109. addl %edx, %r8d
  4110. movl %r9d, %ecx
  4111. andl %ebx, %eax
  4112. rorl $9, %ecx
  4113. xorl %r9d, %ecx
  4114. xorl %r10d, %eax
  4115. vpxor %xmm9, %xmm8, %xmm9
  4116. # rnd_1: 6 - 6
  4117. rorl $11, %ecx
  4118. addl %r8d, %r12d
  4119. xorl %r9d, %ecx
  4120. addl %eax, %r8d
  4121. vpshufb %xmm12, %xmm9, %xmm9
  4122. # rnd_1: 7 - 7
  4123. rorl $2, %ecx
  4124. movl %r12d, %edx
  4125. addl %ecx, %r8d
  4126. vpaddd %xmm4, %xmm9, %xmm1
  4127. # msg_sched done: 4-7
  4128. # msg_sched: 8-11
  4129. # rnd_0: 0 - 0
  4130. rorl $14, %edx
  4131. vpalignr $4, %xmm2, %xmm3, %xmm5
  4132. vpalignr $4, %xmm0, %xmm1, %xmm4
  4133. # rnd_0: 1 - 2
  4134. movl %r9d, %eax
  4135. movl %r13d, %ecx
  4136. addl 32(%rsp), %r15d
  4137. xorl %r14d, %ecx
  4138. xorl %r12d, %edx
  4139. andl %r12d, %ecx
  4140. vpsrld $7, %xmm5, %xmm6
  4141. vpslld $25, %xmm5, %xmm7
  4142. # rnd_0: 3 - 4
  4143. rorl $5, %edx
  4144. xorl %r14d, %ecx
  4145. xorl %r12d, %edx
  4146. addl %ecx, %r15d
  4147. rorl $6, %edx
  4148. xorl %r8d, %eax
  4149. addl %edx, %r15d
  4150. movl %r8d, %ecx
  4151. vpsrld $18, %xmm5, %xmm8
  4152. vpslld $14, %xmm5, %xmm9
  4153. # rnd_0: 5 - 6
  4154. andl %eax, %ebx
  4155. rorl $9, %ecx
  4156. xorl %r8d, %ecx
  4157. xorl %r9d, %ebx
  4158. rorl $11, %ecx
  4159. addl %r15d, %r11d
  4160. xorl %r8d, %ecx
  4161. addl %ebx, %r15d
  4162. vpor %xmm6, %xmm7, %xmm6
  4163. vpor %xmm8, %xmm9, %xmm8
  4164. # rnd_0: 7 - 7
  4165. rorl $2, %ecx
  4166. movl %r11d, %edx
  4167. addl %ecx, %r15d
  4168. # rnd_1: 0 - 1
  4169. rorl $14, %edx
  4170. movl %r8d, %ebx
  4171. movl %r12d, %ecx
  4172. addl 36(%rsp), %r14d
  4173. xorl %r13d, %ecx
  4174. vpsrld $3, %xmm5, %xmm9
  4175. vpxor %xmm6, %xmm8, %xmm6
  4176. # rnd_1: 2 - 3
  4177. xorl %r11d, %edx
  4178. andl %r11d, %ecx
  4179. rorl $5, %edx
  4180. xorl %r13d, %ecx
  4181. xorl %r11d, %edx
  4182. addl %ecx, %r14d
  4183. vpxor %xmm6, %xmm9, %xmm5
  4184. vpshufd $0xfa, %xmm1, %xmm6
  4185. # rnd_1: 4 - 5
  4186. rorl $6, %edx
  4187. xorl %r15d, %ebx
  4188. addl %edx, %r14d
  4189. movl %r15d, %ecx
  4190. andl %ebx, %eax
  4191. rorl $9, %ecx
  4192. xorl %r15d, %ecx
  4193. xorl %r8d, %eax
  4194. vpsrld $10, %xmm6, %xmm8
  4195. vpsrlq $19, %xmm6, %xmm7
  4196. # rnd_1: 6 - 7
  4197. rorl $11, %ecx
  4198. addl %r14d, %r10d
  4199. xorl %r15d, %ecx
  4200. addl %eax, %r14d
  4201. rorl $2, %ecx
  4202. movl %r10d, %edx
  4203. addl %ecx, %r14d
  4204. # rnd_0: 0 - 0
  4205. rorl $14, %edx
  4206. vpsrlq $0x11, %xmm6, %xmm6
  4207. vpaddd %xmm2, %xmm4, %xmm4
  4208. # rnd_0: 1 - 3
  4209. movl %r15d, %eax
  4210. movl %r11d, %ecx
  4211. addl 40(%rsp), %r13d
  4212. xorl %r12d, %ecx
  4213. xorl %r10d, %edx
  4214. andl %r10d, %ecx
  4215. rorl $5, %edx
  4216. xorl %r12d, %ecx
  4217. xorl %r10d, %edx
  4218. addl %ecx, %r13d
  4219. vpxor %xmm6, %xmm7, %xmm6
  4220. vpaddd %xmm5, %xmm4, %xmm4
  4221. # rnd_0: 4 - 4
  4222. rorl $6, %edx
  4223. xorl %r14d, %eax
  4224. addl %edx, %r13d
  4225. movl %r14d, %ecx
  4226. vpxor %xmm6, %xmm8, %xmm8
  4227. # rnd_0: 5 - 5
  4228. andl %eax, %ebx
  4229. rorl $9, %ecx
  4230. xorl %r14d, %ecx
  4231. xorl %r15d, %ebx
  4232. vpshufb %xmm11, %xmm8, %xmm8
  4233. # rnd_0: 6 - 6
  4234. rorl $11, %ecx
  4235. addl %r13d, %r9d
  4236. xorl %r14d, %ecx
  4237. addl %ebx, %r13d
  4238. vpaddd %xmm8, %xmm4, %xmm4
  4239. # rnd_0: 7 - 7
  4240. rorl $2, %ecx
  4241. movl %r9d, %edx
  4242. addl %ecx, %r13d
  4243. # rnd_1: 0 - 0
  4244. rorl $14, %edx
  4245. vpshufd $0x50, %xmm4, %xmm6
  4246. # rnd_1: 1 - 1
  4247. movl %r14d, %ebx
  4248. movl %r10d, %ecx
  4249. addl 44(%rsp), %r12d
  4250. xorl %r11d, %ecx
  4251. vpsrlq $0x11, %xmm6, %xmm8
  4252. vpsrlq $19, %xmm6, %xmm7
  4253. # rnd_1: 2 - 3
  4254. xorl %r9d, %edx
  4255. andl %r9d, %ecx
  4256. rorl $5, %edx
  4257. xorl %r11d, %ecx
  4258. xorl %r9d, %edx
  4259. addl %ecx, %r12d
  4260. vpsrld $10, %xmm6, %xmm9
  4261. vpxor %xmm8, %xmm7, %xmm8
  4262. # rnd_1: 4 - 5
  4263. rorl $6, %edx
  4264. xorl %r13d, %ebx
  4265. addl %edx, %r12d
  4266. movl %r13d, %ecx
  4267. andl %ebx, %eax
  4268. rorl $9, %ecx
  4269. xorl %r13d, %ecx
  4270. xorl %r14d, %eax
  4271. vpxor %xmm9, %xmm8, %xmm9
  4272. # rnd_1: 6 - 6
  4273. rorl $11, %ecx
  4274. addl %r12d, %r8d
  4275. xorl %r13d, %ecx
  4276. addl %eax, %r12d
  4277. vpshufb %xmm12, %xmm9, %xmm9
  4278. # rnd_1: 7 - 7
  4279. rorl $2, %ecx
  4280. movl %r8d, %edx
  4281. addl %ecx, %r12d
  4282. vpaddd %xmm4, %xmm9, %xmm2
  4283. # msg_sched done: 8-11
  4284. # msg_sched: 12-15
  4285. # rnd_0: 0 - 0
  4286. rorl $14, %edx
  4287. vpalignr $4, %xmm3, %xmm0, %xmm5
  4288. vpalignr $4, %xmm1, %xmm2, %xmm4
  4289. # rnd_0: 1 - 2
  4290. movl %r13d, %eax
  4291. movl %r9d, %ecx
  4292. addl 48(%rsp), %r11d
  4293. xorl %r10d, %ecx
  4294. xorl %r8d, %edx
  4295. andl %r8d, %ecx
  4296. vpsrld $7, %xmm5, %xmm6
  4297. vpslld $25, %xmm5, %xmm7
  4298. # rnd_0: 3 - 4
  4299. rorl $5, %edx
  4300. xorl %r10d, %ecx
  4301. xorl %r8d, %edx
  4302. addl %ecx, %r11d
  4303. rorl $6, %edx
  4304. xorl %r12d, %eax
  4305. addl %edx, %r11d
  4306. movl %r12d, %ecx
  4307. vpsrld $18, %xmm5, %xmm8
  4308. vpslld $14, %xmm5, %xmm9
  4309. # rnd_0: 5 - 6
  4310. andl %eax, %ebx
  4311. rorl $9, %ecx
  4312. xorl %r12d, %ecx
  4313. xorl %r13d, %ebx
  4314. rorl $11, %ecx
  4315. addl %r11d, %r15d
  4316. xorl %r12d, %ecx
  4317. addl %ebx, %r11d
  4318. vpor %xmm6, %xmm7, %xmm6
  4319. vpor %xmm8, %xmm9, %xmm8
  4320. # rnd_0: 7 - 7
  4321. rorl $2, %ecx
  4322. movl %r15d, %edx
  4323. addl %ecx, %r11d
  4324. # rnd_1: 0 - 1
  4325. rorl $14, %edx
  4326. movl %r12d, %ebx
  4327. movl %r8d, %ecx
  4328. addl 52(%rsp), %r10d
  4329. xorl %r9d, %ecx
  4330. vpsrld $3, %xmm5, %xmm9
  4331. vpxor %xmm6, %xmm8, %xmm6
  4332. # rnd_1: 2 - 3
  4333. xorl %r15d, %edx
  4334. andl %r15d, %ecx
  4335. rorl $5, %edx
  4336. xorl %r9d, %ecx
  4337. xorl %r15d, %edx
  4338. addl %ecx, %r10d
  4339. vpxor %xmm6, %xmm9, %xmm5
  4340. vpshufd $0xfa, %xmm2, %xmm6
  4341. # rnd_1: 4 - 5
  4342. rorl $6, %edx
  4343. xorl %r11d, %ebx
  4344. addl %edx, %r10d
  4345. movl %r11d, %ecx
  4346. andl %ebx, %eax
  4347. rorl $9, %ecx
  4348. xorl %r11d, %ecx
  4349. xorl %r12d, %eax
  4350. vpsrld $10, %xmm6, %xmm8
  4351. vpsrlq $19, %xmm6, %xmm7
  4352. # rnd_1: 6 - 7
  4353. rorl $11, %ecx
  4354. addl %r10d, %r14d
  4355. xorl %r11d, %ecx
  4356. addl %eax, %r10d
  4357. rorl $2, %ecx
  4358. movl %r14d, %edx
  4359. addl %ecx, %r10d
  4360. # rnd_0: 0 - 0
  4361. rorl $14, %edx
  4362. vpsrlq $0x11, %xmm6, %xmm6
  4363. vpaddd %xmm3, %xmm4, %xmm4
  4364. # rnd_0: 1 - 3
  4365. movl %r11d, %eax
  4366. movl %r15d, %ecx
  4367. addl 56(%rsp), %r9d
  4368. xorl %r8d, %ecx
  4369. xorl %r14d, %edx
  4370. andl %r14d, %ecx
  4371. rorl $5, %edx
  4372. xorl %r8d, %ecx
  4373. xorl %r14d, %edx
  4374. addl %ecx, %r9d
  4375. vpxor %xmm6, %xmm7, %xmm6
  4376. vpaddd %xmm5, %xmm4, %xmm4
  4377. # rnd_0: 4 - 4
  4378. rorl $6, %edx
  4379. xorl %r10d, %eax
  4380. addl %edx, %r9d
  4381. movl %r10d, %ecx
  4382. vpxor %xmm6, %xmm8, %xmm8
  4383. # rnd_0: 5 - 5
  4384. andl %eax, %ebx
  4385. rorl $9, %ecx
  4386. xorl %r10d, %ecx
  4387. xorl %r11d, %ebx
  4388. vpshufb %xmm11, %xmm8, %xmm8
  4389. # rnd_0: 6 - 6
  4390. rorl $11, %ecx
  4391. addl %r9d, %r13d
  4392. xorl %r10d, %ecx
  4393. addl %ebx, %r9d
  4394. vpaddd %xmm8, %xmm4, %xmm4
  4395. # rnd_0: 7 - 7
  4396. rorl $2, %ecx
  4397. movl %r13d, %edx
  4398. addl %ecx, %r9d
  4399. # rnd_1: 0 - 0
  4400. rorl $14, %edx
  4401. vpshufd $0x50, %xmm4, %xmm6
  4402. # rnd_1: 1 - 1
  4403. movl %r10d, %ebx
  4404. movl %r14d, %ecx
  4405. addl 60(%rsp), %r8d
  4406. xorl %r15d, %ecx
  4407. vpsrlq $0x11, %xmm6, %xmm8
  4408. vpsrlq $19, %xmm6, %xmm7
  4409. # rnd_1: 2 - 3
  4410. xorl %r13d, %edx
  4411. andl %r13d, %ecx
  4412. rorl $5, %edx
  4413. xorl %r15d, %ecx
  4414. xorl %r13d, %edx
  4415. addl %ecx, %r8d
  4416. vpsrld $10, %xmm6, %xmm9
  4417. vpxor %xmm8, %xmm7, %xmm8
  4418. # rnd_1: 4 - 5
  4419. rorl $6, %edx
  4420. xorl %r9d, %ebx
  4421. addl %edx, %r8d
  4422. movl %r9d, %ecx
  4423. andl %ebx, %eax
  4424. rorl $9, %ecx
  4425. xorl %r9d, %ecx
  4426. xorl %r10d, %eax
  4427. vpxor %xmm9, %xmm8, %xmm9
  4428. # rnd_1: 6 - 6
  4429. rorl $11, %ecx
  4430. addl %r8d, %r12d
  4431. xorl %r9d, %ecx
  4432. addl %eax, %r8d
  4433. vpshufb %xmm12, %xmm9, %xmm9
  4434. # rnd_1: 7 - 7
  4435. rorl $2, %ecx
  4436. movl %r12d, %edx
  4437. addl %ecx, %r8d
  4438. vpaddd %xmm4, %xmm9, %xmm3
  4439. # msg_sched done: 12-15
  4440. # set_w_k_xfer_4: 12
  4441. vpaddd 192+L_avx1_sha256_k(%rip), %xmm0, %xmm4
  4442. vpaddd 208+L_avx1_sha256_k(%rip), %xmm1, %xmm5
  4443. vmovdqu %xmm4, (%rsp)
  4444. vmovdqu %xmm5, 16(%rsp)
  4445. vpaddd 224+L_avx1_sha256_k(%rip), %xmm2, %xmm6
  4446. vpaddd 240+L_avx1_sha256_k(%rip), %xmm3, %xmm7
  4447. vmovdqu %xmm6, 32(%rsp)
  4448. vmovdqu %xmm7, 48(%rsp)
  4449. # rnd_all_4: 0-3
  4450. addl (%rsp), %r15d
  4451. movl %r13d, %ecx
  4452. movl %r9d, %eax
  4453. xorl %r14d, %ecx
  4454. rorl $14, %edx
  4455. andl %r12d, %ecx
  4456. xorl %r12d, %edx
  4457. xorl %r14d, %ecx
  4458. rorl $5, %edx
  4459. addl %ecx, %r15d
  4460. xorl %r12d, %edx
  4461. xorl %r8d, %eax
  4462. rorl $6, %edx
  4463. movl %r8d, %ecx
  4464. addl %edx, %r15d
  4465. rorl $9, %ecx
  4466. andl %eax, %ebx
  4467. xorl %r8d, %ecx
  4468. xorl %r9d, %ebx
  4469. rorl $11, %ecx
  4470. addl %r15d, %r11d
  4471. xorl %r8d, %ecx
  4472. addl %ebx, %r15d
  4473. rorl $2, %ecx
  4474. movl %r11d, %edx
  4475. addl %ecx, %r15d
  4476. addl 4(%rsp), %r14d
  4477. movl %r12d, %ecx
  4478. movl %r8d, %ebx
  4479. xorl %r13d, %ecx
  4480. rorl $14, %edx
  4481. andl %r11d, %ecx
  4482. xorl %r11d, %edx
  4483. xorl %r13d, %ecx
  4484. rorl $5, %edx
  4485. addl %ecx, %r14d
  4486. xorl %r11d, %edx
  4487. xorl %r15d, %ebx
  4488. rorl $6, %edx
  4489. movl %r15d, %ecx
  4490. addl %edx, %r14d
  4491. rorl $9, %ecx
  4492. andl %ebx, %eax
  4493. xorl %r15d, %ecx
  4494. xorl %r8d, %eax
  4495. rorl $11, %ecx
  4496. addl %r14d, %r10d
  4497. xorl %r15d, %ecx
  4498. addl %eax, %r14d
  4499. rorl $2, %ecx
  4500. movl %r10d, %edx
  4501. addl %ecx, %r14d
  4502. addl 8(%rsp), %r13d
  4503. movl %r11d, %ecx
  4504. movl %r15d, %eax
  4505. xorl %r12d, %ecx
  4506. rorl $14, %edx
  4507. andl %r10d, %ecx
  4508. xorl %r10d, %edx
  4509. xorl %r12d, %ecx
  4510. rorl $5, %edx
  4511. addl %ecx, %r13d
  4512. xorl %r10d, %edx
  4513. xorl %r14d, %eax
  4514. rorl $6, %edx
  4515. movl %r14d, %ecx
  4516. addl %edx, %r13d
  4517. rorl $9, %ecx
  4518. andl %eax, %ebx
  4519. xorl %r14d, %ecx
  4520. xorl %r15d, %ebx
  4521. rorl $11, %ecx
  4522. addl %r13d, %r9d
  4523. xorl %r14d, %ecx
  4524. addl %ebx, %r13d
  4525. rorl $2, %ecx
  4526. movl %r9d, %edx
  4527. addl %ecx, %r13d
  4528. addl 12(%rsp), %r12d
  4529. movl %r10d, %ecx
  4530. movl %r14d, %ebx
  4531. xorl %r11d, %ecx
  4532. rorl $14, %edx
  4533. andl %r9d, %ecx
  4534. xorl %r9d, %edx
  4535. xorl %r11d, %ecx
  4536. rorl $5, %edx
  4537. addl %ecx, %r12d
  4538. xorl %r9d, %edx
  4539. xorl %r13d, %ebx
  4540. rorl $6, %edx
  4541. movl %r13d, %ecx
  4542. addl %edx, %r12d
  4543. rorl $9, %ecx
  4544. andl %ebx, %eax
  4545. xorl %r13d, %ecx
  4546. xorl %r14d, %eax
  4547. rorl $11, %ecx
  4548. addl %r12d, %r8d
  4549. xorl %r13d, %ecx
  4550. addl %eax, %r12d
  4551. rorl $2, %ecx
  4552. movl %r8d, %edx
  4553. addl %ecx, %r12d
  4554. # rnd_all_4: 1-4
  4555. addl 16(%rsp), %r11d
  4556. movl %r9d, %ecx
  4557. movl %r13d, %eax
  4558. xorl %r10d, %ecx
  4559. rorl $14, %edx
  4560. andl %r8d, %ecx
  4561. xorl %r8d, %edx
  4562. xorl %r10d, %ecx
  4563. rorl $5, %edx
  4564. addl %ecx, %r11d
  4565. xorl %r8d, %edx
  4566. xorl %r12d, %eax
  4567. rorl $6, %edx
  4568. movl %r12d, %ecx
  4569. addl %edx, %r11d
  4570. rorl $9, %ecx
  4571. andl %eax, %ebx
  4572. xorl %r12d, %ecx
  4573. xorl %r13d, %ebx
  4574. rorl $11, %ecx
  4575. addl %r11d, %r15d
  4576. xorl %r12d, %ecx
  4577. addl %ebx, %r11d
  4578. rorl $2, %ecx
  4579. movl %r15d, %edx
  4580. addl %ecx, %r11d
  4581. addl 20(%rsp), %r10d
  4582. movl %r8d, %ecx
  4583. movl %r12d, %ebx
  4584. xorl %r9d, %ecx
  4585. rorl $14, %edx
  4586. andl %r15d, %ecx
  4587. xorl %r15d, %edx
  4588. xorl %r9d, %ecx
  4589. rorl $5, %edx
  4590. addl %ecx, %r10d
  4591. xorl %r15d, %edx
  4592. xorl %r11d, %ebx
  4593. rorl $6, %edx
  4594. movl %r11d, %ecx
  4595. addl %edx, %r10d
  4596. rorl $9, %ecx
  4597. andl %ebx, %eax
  4598. xorl %r11d, %ecx
  4599. xorl %r12d, %eax
  4600. rorl $11, %ecx
  4601. addl %r10d, %r14d
  4602. xorl %r11d, %ecx
  4603. addl %eax, %r10d
  4604. rorl $2, %ecx
  4605. movl %r14d, %edx
  4606. addl %ecx, %r10d
  4607. addl 24(%rsp), %r9d
  4608. movl %r15d, %ecx
  4609. movl %r11d, %eax
  4610. xorl %r8d, %ecx
  4611. rorl $14, %edx
  4612. andl %r14d, %ecx
  4613. xorl %r14d, %edx
  4614. xorl %r8d, %ecx
  4615. rorl $5, %edx
  4616. addl %ecx, %r9d
  4617. xorl %r14d, %edx
  4618. xorl %r10d, %eax
  4619. rorl $6, %edx
  4620. movl %r10d, %ecx
  4621. addl %edx, %r9d
  4622. rorl $9, %ecx
  4623. andl %eax, %ebx
  4624. xorl %r10d, %ecx
  4625. xorl %r11d, %ebx
  4626. rorl $11, %ecx
  4627. addl %r9d, %r13d
  4628. xorl %r10d, %ecx
  4629. addl %ebx, %r9d
  4630. rorl $2, %ecx
  4631. movl %r13d, %edx
  4632. addl %ecx, %r9d
  4633. addl 28(%rsp), %r8d
  4634. movl %r14d, %ecx
  4635. movl %r10d, %ebx
  4636. xorl %r15d, %ecx
  4637. rorl $14, %edx
  4638. andl %r13d, %ecx
  4639. xorl %r13d, %edx
  4640. xorl %r15d, %ecx
  4641. rorl $5, %edx
  4642. addl %ecx, %r8d
  4643. xorl %r13d, %edx
  4644. xorl %r9d, %ebx
  4645. rorl $6, %edx
  4646. movl %r9d, %ecx
  4647. addl %edx, %r8d
  4648. rorl $9, %ecx
  4649. andl %ebx, %eax
  4650. xorl %r9d, %ecx
  4651. xorl %r10d, %eax
  4652. rorl $11, %ecx
  4653. addl %r8d, %r12d
  4654. xorl %r9d, %ecx
  4655. addl %eax, %r8d
  4656. rorl $2, %ecx
  4657. movl %r12d, %edx
  4658. addl %ecx, %r8d
  4659. # rnd_all_4: 2-5
  4660. addl 32(%rsp), %r15d
  4661. movl %r13d, %ecx
  4662. movl %r9d, %eax
  4663. xorl %r14d, %ecx
  4664. rorl $14, %edx
  4665. andl %r12d, %ecx
  4666. xorl %r12d, %edx
  4667. xorl %r14d, %ecx
  4668. rorl $5, %edx
  4669. addl %ecx, %r15d
  4670. xorl %r12d, %edx
  4671. xorl %r8d, %eax
  4672. rorl $6, %edx
  4673. movl %r8d, %ecx
  4674. addl %edx, %r15d
  4675. rorl $9, %ecx
  4676. andl %eax, %ebx
  4677. xorl %r8d, %ecx
  4678. xorl %r9d, %ebx
  4679. rorl $11, %ecx
  4680. addl %r15d, %r11d
  4681. xorl %r8d, %ecx
  4682. addl %ebx, %r15d
  4683. rorl $2, %ecx
  4684. movl %r11d, %edx
  4685. addl %ecx, %r15d
  4686. addl 36(%rsp), %r14d
  4687. movl %r12d, %ecx
  4688. movl %r8d, %ebx
  4689. xorl %r13d, %ecx
  4690. rorl $14, %edx
  4691. andl %r11d, %ecx
  4692. xorl %r11d, %edx
  4693. xorl %r13d, %ecx
  4694. rorl $5, %edx
  4695. addl %ecx, %r14d
  4696. xorl %r11d, %edx
  4697. xorl %r15d, %ebx
  4698. rorl $6, %edx
  4699. movl %r15d, %ecx
  4700. addl %edx, %r14d
  4701. rorl $9, %ecx
  4702. andl %ebx, %eax
  4703. xorl %r15d, %ecx
  4704. xorl %r8d, %eax
  4705. rorl $11, %ecx
  4706. addl %r14d, %r10d
  4707. xorl %r15d, %ecx
  4708. addl %eax, %r14d
  4709. rorl $2, %ecx
  4710. movl %r10d, %edx
  4711. addl %ecx, %r14d
  4712. addl 40(%rsp), %r13d
  4713. movl %r11d, %ecx
  4714. movl %r15d, %eax
  4715. xorl %r12d, %ecx
  4716. rorl $14, %edx
  4717. andl %r10d, %ecx
  4718. xorl %r10d, %edx
  4719. xorl %r12d, %ecx
  4720. rorl $5, %edx
  4721. addl %ecx, %r13d
  4722. xorl %r10d, %edx
  4723. xorl %r14d, %eax
  4724. rorl $6, %edx
  4725. movl %r14d, %ecx
  4726. addl %edx, %r13d
  4727. rorl $9, %ecx
  4728. andl %eax, %ebx
  4729. xorl %r14d, %ecx
  4730. xorl %r15d, %ebx
  4731. rorl $11, %ecx
  4732. addl %r13d, %r9d
  4733. xorl %r14d, %ecx
  4734. addl %ebx, %r13d
  4735. rorl $2, %ecx
  4736. movl %r9d, %edx
  4737. addl %ecx, %r13d
  4738. addl 44(%rsp), %r12d
  4739. movl %r10d, %ecx
  4740. movl %r14d, %ebx
  4741. xorl %r11d, %ecx
  4742. rorl $14, %edx
  4743. andl %r9d, %ecx
  4744. xorl %r9d, %edx
  4745. xorl %r11d, %ecx
  4746. rorl $5, %edx
  4747. addl %ecx, %r12d
  4748. xorl %r9d, %edx
  4749. xorl %r13d, %ebx
  4750. rorl $6, %edx
  4751. movl %r13d, %ecx
  4752. addl %edx, %r12d
  4753. rorl $9, %ecx
  4754. andl %ebx, %eax
  4755. xorl %r13d, %ecx
  4756. xorl %r14d, %eax
  4757. rorl $11, %ecx
  4758. addl %r12d, %r8d
  4759. xorl %r13d, %ecx
  4760. addl %eax, %r12d
  4761. rorl $2, %ecx
  4762. movl %r8d, %edx
  4763. addl %ecx, %r12d
  4764. # rnd_all_4: 3-6
  4765. addl 48(%rsp), %r11d
  4766. movl %r9d, %ecx
  4767. movl %r13d, %eax
  4768. xorl %r10d, %ecx
  4769. rorl $14, %edx
  4770. andl %r8d, %ecx
  4771. xorl %r8d, %edx
  4772. xorl %r10d, %ecx
  4773. rorl $5, %edx
  4774. addl %ecx, %r11d
  4775. xorl %r8d, %edx
  4776. xorl %r12d, %eax
  4777. rorl $6, %edx
  4778. movl %r12d, %ecx
  4779. addl %edx, %r11d
  4780. rorl $9, %ecx
  4781. andl %eax, %ebx
  4782. xorl %r12d, %ecx
  4783. xorl %r13d, %ebx
  4784. rorl $11, %ecx
  4785. addl %r11d, %r15d
  4786. xorl %r12d, %ecx
  4787. addl %ebx, %r11d
  4788. rorl $2, %ecx
  4789. movl %r15d, %edx
  4790. addl %ecx, %r11d
  4791. addl 52(%rsp), %r10d
  4792. movl %r8d, %ecx
  4793. movl %r12d, %ebx
  4794. xorl %r9d, %ecx
  4795. rorl $14, %edx
  4796. andl %r15d, %ecx
  4797. xorl %r15d, %edx
  4798. xorl %r9d, %ecx
  4799. rorl $5, %edx
  4800. addl %ecx, %r10d
  4801. xorl %r15d, %edx
  4802. xorl %r11d, %ebx
  4803. rorl $6, %edx
  4804. movl %r11d, %ecx
  4805. addl %edx, %r10d
  4806. rorl $9, %ecx
  4807. andl %ebx, %eax
  4808. xorl %r11d, %ecx
  4809. xorl %r12d, %eax
  4810. rorl $11, %ecx
  4811. addl %r10d, %r14d
  4812. xorl %r11d, %ecx
  4813. addl %eax, %r10d
  4814. rorl $2, %ecx
  4815. movl %r14d, %edx
  4816. addl %ecx, %r10d
  4817. addl 56(%rsp), %r9d
  4818. movl %r15d, %ecx
  4819. movl %r11d, %eax
  4820. xorl %r8d, %ecx
  4821. rorl $14, %edx
  4822. andl %r14d, %ecx
  4823. xorl %r14d, %edx
  4824. xorl %r8d, %ecx
  4825. rorl $5, %edx
  4826. addl %ecx, %r9d
  4827. xorl %r14d, %edx
  4828. xorl %r10d, %eax
  4829. rorl $6, %edx
  4830. movl %r10d, %ecx
  4831. addl %edx, %r9d
  4832. rorl $9, %ecx
  4833. andl %eax, %ebx
  4834. xorl %r10d, %ecx
  4835. xorl %r11d, %ebx
  4836. rorl $11, %ecx
  4837. addl %r9d, %r13d
  4838. xorl %r10d, %ecx
  4839. addl %ebx, %r9d
  4840. rorl $2, %ecx
  4841. movl %r13d, %edx
  4842. addl %ecx, %r9d
  4843. addl 60(%rsp), %r8d
  4844. movl %r14d, %ecx
  4845. movl %r10d, %ebx
  4846. xorl %r15d, %ecx
  4847. rorl $14, %edx
  4848. andl %r13d, %ecx
  4849. xorl %r13d, %edx
  4850. xorl %r15d, %ecx
  4851. rorl $5, %edx
  4852. addl %ecx, %r8d
  4853. xorl %r13d, %edx
  4854. xorl %r9d, %ebx
  4855. rorl $6, %edx
  4856. movl %r9d, %ecx
  4857. addl %edx, %r8d
  4858. rorl $9, %ecx
  4859. andl %ebx, %eax
  4860. xorl %r9d, %ecx
  4861. xorl %r10d, %eax
  4862. rorl $11, %ecx
  4863. addl %r8d, %r12d
  4864. xorl %r9d, %ecx
  4865. addl %eax, %r8d
  4866. rorl $2, %ecx
  4867. movl %r12d, %edx
  4868. addl %ecx, %r8d
  4869. addl (%rdi), %r8d
  4870. addl 4(%rdi), %r9d
  4871. addl 8(%rdi), %r10d
  4872. addl 12(%rdi), %r11d
  4873. addl 16(%rdi), %r12d
  4874. addl 20(%rdi), %r13d
  4875. addl 24(%rdi), %r14d
  4876. addl 28(%rdi), %r15d
  4877. addq $0x40, %rbp
  4878. subl $0x40, %esi
  4879. movl %r8d, (%rdi)
  4880. movl %r9d, 4(%rdi)
  4881. movl %r10d, 8(%rdi)
  4882. movl %r11d, 12(%rdi)
  4883. movl %r12d, 16(%rdi)
  4884. movl %r13d, 20(%rdi)
  4885. movl %r14d, 24(%rdi)
  4886. movl %r15d, 28(%rdi)
  4887. jnz L_sha256_len_avx1_start
  4888. xorq %rax, %rax
  4889. vzeroupper
  4890. addq $0x40, %rsp
  4891. popq %rbp
  4892. popq %r15
  4893. popq %r14
  4894. popq %r13
  4895. popq %r12
  4896. popq %rbx
  4897. repz retq
  4898. #ifndef __APPLE__
  4899. .size Transform_Sha256_AVX1_Len,.-Transform_Sha256_AVX1_Len
  4900. #endif /* __APPLE__ */
  4901. #ifndef __APPLE__
  4902. .data
  4903. #else
  4904. .section __DATA,__data
  4905. #endif /* __APPLE__ */
  4906. L_avx1_rorx_sha256_k:
  4907. .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  4908. .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  4909. .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  4910. .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  4911. .long 0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc
  4912. .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  4913. .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  4914. .long 0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967
  4915. .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  4916. .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  4917. .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  4918. .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  4919. .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  4920. .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  4921. .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  4922. .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  4923. #ifndef __APPLE__
  4924. .data
  4925. #else
  4926. .section __DATA,__data
  4927. #endif /* __APPLE__ */
  4928. #ifndef __APPLE__
  4929. .align 16
  4930. #else
  4931. .p2align 4
  4932. #endif /* __APPLE__ */
  4933. L_avx1_rorx_sha256_shuf_00BA:
  4934. .quad 0xb0a090803020100, 0xffffffffffffffff
  4935. #ifndef __APPLE__
  4936. .data
  4937. #else
  4938. .section __DATA,__data
  4939. #endif /* __APPLE__ */
  4940. #ifndef __APPLE__
  4941. .align 16
  4942. #else
  4943. .p2align 4
  4944. #endif /* __APPLE__ */
  4945. L_avx1_rorx_sha256_shuf_DC00:
  4946. .quad 0xffffffffffffffff, 0xb0a090803020100
  4947. #ifndef __APPLE__
  4948. .data
  4949. #else
  4950. .section __DATA,__data
  4951. #endif /* __APPLE__ */
  4952. #ifndef __APPLE__
  4953. .align 16
  4954. #else
  4955. .p2align 4
  4956. #endif /* __APPLE__ */
  4957. L_avx1_rorx_sha256_flip_mask:
  4958. .quad 0x405060700010203, 0xc0d0e0f08090a0b
  4959. #ifndef __APPLE__
  4960. .text
  4961. .globl Transform_Sha256_AVX1_RORX
  4962. .type Transform_Sha256_AVX1_RORX,@function
  4963. .align 16
  4964. Transform_Sha256_AVX1_RORX:
  4965. #else
  4966. .section __TEXT,__text
  4967. .globl _Transform_Sha256_AVX1_RORX
  4968. .p2align 4
  4969. _Transform_Sha256_AVX1_RORX:
  4970. #endif /* __APPLE__ */
  4971. pushq %rbx
  4972. pushq %r12
  4973. pushq %r13
  4974. pushq %r14
  4975. pushq %r15
  4976. subq $0x40, %rsp
  4977. vmovdqa L_avx1_rorx_sha256_flip_mask(%rip), %xmm13
  4978. vmovdqa L_avx1_rorx_sha256_shuf_00BA(%rip), %xmm11
  4979. vmovdqa L_avx1_rorx_sha256_shuf_DC00(%rip), %xmm12
  4980. leaq 32(%rdi), %rax
  4981. # X0, X1, X2, X3 = W[0..15]
  4982. vmovdqu (%rax), %xmm0
  4983. vmovdqu 16(%rax), %xmm1
  4984. vpshufb %xmm13, %xmm0, %xmm0
  4985. vpshufb %xmm13, %xmm1, %xmm1
  4986. vmovdqu 32(%rax), %xmm2
  4987. vmovdqu 48(%rax), %xmm3
  4988. vpshufb %xmm13, %xmm2, %xmm2
  4989. vpshufb %xmm13, %xmm3, %xmm3
  4990. movl (%rdi), %r8d
  4991. movl 4(%rdi), %r9d
  4992. movl 8(%rdi), %r10d
  4993. movl 12(%rdi), %r11d
  4994. movl 16(%rdi), %r12d
  4995. movl 20(%rdi), %r13d
  4996. movl 24(%rdi), %r14d
  4997. movl 28(%rdi), %r15d
  4998. # set_w_k_xfer_4: 0
  4999. vpaddd 0+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  5000. vpaddd 16+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  5001. vmovdqu %xmm4, (%rsp)
  5002. vmovdqu %xmm5, 16(%rsp)
  5003. vpaddd 32+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  5004. vpaddd 48+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  5005. vmovdqu %xmm6, 32(%rsp)
  5006. vmovdqu %xmm7, 48(%rsp)
  5007. movl %r9d, %ebx
  5008. rorxl $6, %r12d, %edx
  5009. xorl %r10d, %ebx
  5010. # msg_sched: 0-3
  5011. # rnd_0: 0 - 0
  5012. movl %r13d, %eax
  5013. rorxl $11, %r12d, %ecx
  5014. addl (%rsp), %r15d
  5015. vpalignr $4, %xmm2, %xmm3, %xmm4
  5016. vpalignr $4, %xmm0, %xmm1, %xmm5
  5017. # rnd_0: 1 - 2
  5018. xorl %edx, %ecx
  5019. xorl %r14d, %eax
  5020. rorxl $25, %r12d, %edx
  5021. andl %r12d, %eax
  5022. xorl %ecx, %edx
  5023. rorxl $13, %r8d, %ecx
  5024. vpsrld $7, %xmm5, %xmm6
  5025. vpslld $25, %xmm5, %xmm7
  5026. # rnd_0: 3 - 4
  5027. addl %edx, %r15d
  5028. rorxl $2, %r8d, %edx
  5029. xorl %r14d, %eax
  5030. xorl %edx, %ecx
  5031. rorxl $22, %r8d, %edx
  5032. addl %eax, %r15d
  5033. vpsrld $3, %xmm5, %xmm8
  5034. vpor %xmm6, %xmm7, %xmm7
  5035. # rnd_0: 5 - 7
  5036. xorl %ecx, %edx
  5037. movl %r9d, %eax
  5038. addl %r15d, %r11d
  5039. xorl %r8d, %eax
  5040. addl %edx, %r15d
  5041. andl %eax, %ebx
  5042. xorl %r9d, %ebx
  5043. rorxl $6, %r11d, %edx
  5044. addl %ebx, %r15d
  5045. # rnd_1: 0 - 0
  5046. movl %r12d, %ebx
  5047. rorxl $11, %r11d, %ecx
  5048. addl 4(%rsp), %r14d
  5049. vpsrld $18, %xmm5, %xmm6
  5050. # rnd_1: 1 - 1
  5051. xorl %edx, %ecx
  5052. xorl %r13d, %ebx
  5053. rorxl $25, %r11d, %edx
  5054. vpslld $14, %xmm5, %xmm5
  5055. # rnd_1: 2 - 2
  5056. andl %r11d, %ebx
  5057. xorl %ecx, %edx
  5058. rorxl $13, %r15d, %ecx
  5059. vpxor %xmm5, %xmm7, %xmm7
  5060. # rnd_1: 3 - 3
  5061. addl %edx, %r14d
  5062. rorxl $2, %r15d, %edx
  5063. xorl %r13d, %ebx
  5064. vpxor %xmm6, %xmm7, %xmm7
  5065. # rnd_1: 4 - 4
  5066. xorl %edx, %ecx
  5067. rorxl $22, %r15d, %edx
  5068. addl %ebx, %r14d
  5069. vpshufd $0xfa, %xmm3, %xmm6
  5070. # rnd_1: 5 - 5
  5071. xorl %ecx, %edx
  5072. movl %r8d, %ebx
  5073. addl %r14d, %r10d
  5074. vpxor %xmm8, %xmm7, %xmm5
  5075. # rnd_1: 6 - 6
  5076. xorl %r15d, %ebx
  5077. addl %edx, %r14d
  5078. andl %ebx, %eax
  5079. vpsrld $10, %xmm6, %xmm8
  5080. # rnd_1: 7 - 7
  5081. xorl %r8d, %eax
  5082. rorxl $6, %r10d, %edx
  5083. addl %eax, %r14d
  5084. # rnd_0: 0 - 0
  5085. movl %r11d, %eax
  5086. rorxl $11, %r10d, %ecx
  5087. addl 8(%rsp), %r13d
  5088. vpsrlq $19, %xmm6, %xmm7
  5089. # rnd_0: 1 - 1
  5090. xorl %edx, %ecx
  5091. xorl %r12d, %eax
  5092. rorxl $25, %r10d, %edx
  5093. vpsrlq $0x11, %xmm6, %xmm6
  5094. vpaddd %xmm0, %xmm4, %xmm4
  5095. # rnd_0: 2 - 2
  5096. andl %r10d, %eax
  5097. xorl %ecx, %edx
  5098. rorxl $13, %r14d, %ecx
  5099. vpaddd %xmm5, %xmm4, %xmm4
  5100. # rnd_0: 3 - 3
  5101. addl %edx, %r13d
  5102. rorxl $2, %r14d, %edx
  5103. xorl %r12d, %eax
  5104. vpxor %xmm7, %xmm6, %xmm6
  5105. # rnd_0: 4 - 4
  5106. xorl %edx, %ecx
  5107. rorxl $22, %r14d, %edx
  5108. addl %eax, %r13d
  5109. vpxor %xmm6, %xmm8, %xmm8
  5110. # rnd_0: 5 - 5
  5111. xorl %ecx, %edx
  5112. movl %r15d, %eax
  5113. addl %r13d, %r9d
  5114. vpshufb %xmm11, %xmm8, %xmm8
  5115. # rnd_0: 6 - 6
  5116. xorl %r14d, %eax
  5117. addl %edx, %r13d
  5118. andl %eax, %ebx
  5119. vpaddd %xmm8, %xmm4, %xmm4
  5120. # rnd_0: 7 - 7
  5121. xorl %r15d, %ebx
  5122. rorxl $6, %r9d, %edx
  5123. addl %ebx, %r13d
  5124. # rnd_1: 0 - 0
  5125. movl %r10d, %ebx
  5126. rorxl $11, %r9d, %ecx
  5127. addl 12(%rsp), %r12d
  5128. vpshufd $0x50, %xmm4, %xmm6
  5129. # rnd_1: 1 - 1
  5130. xorl %edx, %ecx
  5131. xorl %r11d, %ebx
  5132. rorxl $25, %r9d, %edx
  5133. vpsrld $10, %xmm6, %xmm9
  5134. # rnd_1: 2 - 2
  5135. andl %r9d, %ebx
  5136. xorl %ecx, %edx
  5137. rorxl $13, %r13d, %ecx
  5138. vpsrlq $19, %xmm6, %xmm7
  5139. # rnd_1: 3 - 3
  5140. addl %edx, %r12d
  5141. rorxl $2, %r13d, %edx
  5142. xorl %r11d, %ebx
  5143. vpsrlq $0x11, %xmm6, %xmm6
  5144. # rnd_1: 4 - 4
  5145. xorl %edx, %ecx
  5146. rorxl $22, %r13d, %edx
  5147. addl %ebx, %r12d
  5148. vpxor %xmm7, %xmm6, %xmm6
  5149. # rnd_1: 5 - 5
  5150. xorl %ecx, %edx
  5151. movl %r14d, %ebx
  5152. addl %r12d, %r8d
  5153. vpxor %xmm6, %xmm9, %xmm9
  5154. # rnd_1: 6 - 6
  5155. xorl %r13d, %ebx
  5156. addl %edx, %r12d
  5157. andl %ebx, %eax
  5158. vpshufb %xmm12, %xmm9, %xmm9
  5159. # rnd_1: 7 - 7
  5160. xorl %r14d, %eax
  5161. rorxl $6, %r8d, %edx
  5162. addl %eax, %r12d
  5163. vpaddd %xmm4, %xmm9, %xmm0
  5164. # msg_sched done: 0-3
  5165. # msg_sched: 4-7
  5166. # rnd_0: 0 - 0
  5167. movl %r9d, %eax
  5168. rorxl $11, %r8d, %ecx
  5169. addl 16(%rsp), %r11d
  5170. vpalignr $4, %xmm3, %xmm0, %xmm4
  5171. vpalignr $4, %xmm1, %xmm2, %xmm5
  5172. # rnd_0: 1 - 2
  5173. xorl %edx, %ecx
  5174. xorl %r10d, %eax
  5175. rorxl $25, %r8d, %edx
  5176. andl %r8d, %eax
  5177. xorl %ecx, %edx
  5178. rorxl $13, %r12d, %ecx
  5179. vpsrld $7, %xmm5, %xmm6
  5180. vpslld $25, %xmm5, %xmm7
  5181. # rnd_0: 3 - 4
  5182. addl %edx, %r11d
  5183. rorxl $2, %r12d, %edx
  5184. xorl %r10d, %eax
  5185. xorl %edx, %ecx
  5186. rorxl $22, %r12d, %edx
  5187. addl %eax, %r11d
  5188. vpsrld $3, %xmm5, %xmm8
  5189. vpor %xmm6, %xmm7, %xmm7
  5190. # rnd_0: 5 - 7
  5191. xorl %ecx, %edx
  5192. movl %r13d, %eax
  5193. addl %r11d, %r15d
  5194. xorl %r12d, %eax
  5195. addl %edx, %r11d
  5196. andl %eax, %ebx
  5197. xorl %r13d, %ebx
  5198. rorxl $6, %r15d, %edx
  5199. addl %ebx, %r11d
  5200. # rnd_1: 0 - 0
  5201. movl %r8d, %ebx
  5202. rorxl $11, %r15d, %ecx
  5203. addl 20(%rsp), %r10d
  5204. vpsrld $18, %xmm5, %xmm6
  5205. # rnd_1: 1 - 1
  5206. xorl %edx, %ecx
  5207. xorl %r9d, %ebx
  5208. rorxl $25, %r15d, %edx
  5209. vpslld $14, %xmm5, %xmm5
  5210. # rnd_1: 2 - 2
  5211. andl %r15d, %ebx
  5212. xorl %ecx, %edx
  5213. rorxl $13, %r11d, %ecx
  5214. vpxor %xmm5, %xmm7, %xmm7
  5215. # rnd_1: 3 - 3
  5216. addl %edx, %r10d
  5217. rorxl $2, %r11d, %edx
  5218. xorl %r9d, %ebx
  5219. vpxor %xmm6, %xmm7, %xmm7
  5220. # rnd_1: 4 - 4
  5221. xorl %edx, %ecx
  5222. rorxl $22, %r11d, %edx
  5223. addl %ebx, %r10d
  5224. vpshufd $0xfa, %xmm0, %xmm6
  5225. # rnd_1: 5 - 5
  5226. xorl %ecx, %edx
  5227. movl %r12d, %ebx
  5228. addl %r10d, %r14d
  5229. vpxor %xmm8, %xmm7, %xmm5
  5230. # rnd_1: 6 - 6
  5231. xorl %r11d, %ebx
  5232. addl %edx, %r10d
  5233. andl %ebx, %eax
  5234. vpsrld $10, %xmm6, %xmm8
  5235. # rnd_1: 7 - 7
  5236. xorl %r12d, %eax
  5237. rorxl $6, %r14d, %edx
  5238. addl %eax, %r10d
  5239. # rnd_0: 0 - 0
  5240. movl %r15d, %eax
  5241. rorxl $11, %r14d, %ecx
  5242. addl 24(%rsp), %r9d
  5243. vpsrlq $19, %xmm6, %xmm7
  5244. # rnd_0: 1 - 1
  5245. xorl %edx, %ecx
  5246. xorl %r8d, %eax
  5247. rorxl $25, %r14d, %edx
  5248. vpsrlq $0x11, %xmm6, %xmm6
  5249. vpaddd %xmm1, %xmm4, %xmm4
  5250. # rnd_0: 2 - 2
  5251. andl %r14d, %eax
  5252. xorl %ecx, %edx
  5253. rorxl $13, %r10d, %ecx
  5254. vpaddd %xmm5, %xmm4, %xmm4
  5255. # rnd_0: 3 - 3
  5256. addl %edx, %r9d
  5257. rorxl $2, %r10d, %edx
  5258. xorl %r8d, %eax
  5259. vpxor %xmm7, %xmm6, %xmm6
  5260. # rnd_0: 4 - 4
  5261. xorl %edx, %ecx
  5262. rorxl $22, %r10d, %edx
  5263. addl %eax, %r9d
  5264. vpxor %xmm6, %xmm8, %xmm8
  5265. # rnd_0: 5 - 5
  5266. xorl %ecx, %edx
  5267. movl %r11d, %eax
  5268. addl %r9d, %r13d
  5269. vpshufb %xmm11, %xmm8, %xmm8
  5270. # rnd_0: 6 - 6
  5271. xorl %r10d, %eax
  5272. addl %edx, %r9d
  5273. andl %eax, %ebx
  5274. vpaddd %xmm8, %xmm4, %xmm4
  5275. # rnd_0: 7 - 7
  5276. xorl %r11d, %ebx
  5277. rorxl $6, %r13d, %edx
  5278. addl %ebx, %r9d
  5279. # rnd_1: 0 - 0
  5280. movl %r14d, %ebx
  5281. rorxl $11, %r13d, %ecx
  5282. addl 28(%rsp), %r8d
  5283. vpshufd $0x50, %xmm4, %xmm6
  5284. # rnd_1: 1 - 1
  5285. xorl %edx, %ecx
  5286. xorl %r15d, %ebx
  5287. rorxl $25, %r13d, %edx
  5288. vpsrld $10, %xmm6, %xmm9
  5289. # rnd_1: 2 - 2
  5290. andl %r13d, %ebx
  5291. xorl %ecx, %edx
  5292. rorxl $13, %r9d, %ecx
  5293. vpsrlq $19, %xmm6, %xmm7
  5294. # rnd_1: 3 - 3
  5295. addl %edx, %r8d
  5296. rorxl $2, %r9d, %edx
  5297. xorl %r15d, %ebx
  5298. vpsrlq $0x11, %xmm6, %xmm6
  5299. # rnd_1: 4 - 4
  5300. xorl %edx, %ecx
  5301. rorxl $22, %r9d, %edx
  5302. addl %ebx, %r8d
  5303. vpxor %xmm7, %xmm6, %xmm6
  5304. # rnd_1: 5 - 5
  5305. xorl %ecx, %edx
  5306. movl %r10d, %ebx
  5307. addl %r8d, %r12d
  5308. vpxor %xmm6, %xmm9, %xmm9
  5309. # rnd_1: 6 - 6
  5310. xorl %r9d, %ebx
  5311. addl %edx, %r8d
  5312. andl %ebx, %eax
  5313. vpshufb %xmm12, %xmm9, %xmm9
  5314. # rnd_1: 7 - 7
  5315. xorl %r10d, %eax
  5316. rorxl $6, %r12d, %edx
  5317. addl %eax, %r8d
  5318. vpaddd %xmm4, %xmm9, %xmm1
  5319. # msg_sched done: 4-7
  5320. # msg_sched: 8-11
  5321. # rnd_0: 0 - 0
  5322. movl %r13d, %eax
  5323. rorxl $11, %r12d, %ecx
  5324. addl 32(%rsp), %r15d
  5325. vpalignr $4, %xmm0, %xmm1, %xmm4
  5326. vpalignr $4, %xmm2, %xmm3, %xmm5
  5327. # rnd_0: 1 - 2
  5328. xorl %edx, %ecx
  5329. xorl %r14d, %eax
  5330. rorxl $25, %r12d, %edx
  5331. andl %r12d, %eax
  5332. xorl %ecx, %edx
  5333. rorxl $13, %r8d, %ecx
  5334. vpsrld $7, %xmm5, %xmm6
  5335. vpslld $25, %xmm5, %xmm7
  5336. # rnd_0: 3 - 4
  5337. addl %edx, %r15d
  5338. rorxl $2, %r8d, %edx
  5339. xorl %r14d, %eax
  5340. xorl %edx, %ecx
  5341. rorxl $22, %r8d, %edx
  5342. addl %eax, %r15d
  5343. vpsrld $3, %xmm5, %xmm8
  5344. vpor %xmm6, %xmm7, %xmm7
  5345. # rnd_0: 5 - 7
  5346. xorl %ecx, %edx
  5347. movl %r9d, %eax
  5348. addl %r15d, %r11d
  5349. xorl %r8d, %eax
  5350. addl %edx, %r15d
  5351. andl %eax, %ebx
  5352. xorl %r9d, %ebx
  5353. rorxl $6, %r11d, %edx
  5354. addl %ebx, %r15d
  5355. # rnd_1: 0 - 0
  5356. movl %r12d, %ebx
  5357. rorxl $11, %r11d, %ecx
  5358. addl 36(%rsp), %r14d
  5359. vpsrld $18, %xmm5, %xmm6
  5360. # rnd_1: 1 - 1
  5361. xorl %edx, %ecx
  5362. xorl %r13d, %ebx
  5363. rorxl $25, %r11d, %edx
  5364. vpslld $14, %xmm5, %xmm5
  5365. # rnd_1: 2 - 2
  5366. andl %r11d, %ebx
  5367. xorl %ecx, %edx
  5368. rorxl $13, %r15d, %ecx
  5369. vpxor %xmm5, %xmm7, %xmm7
  5370. # rnd_1: 3 - 3
  5371. addl %edx, %r14d
  5372. rorxl $2, %r15d, %edx
  5373. xorl %r13d, %ebx
  5374. vpxor %xmm6, %xmm7, %xmm7
  5375. # rnd_1: 4 - 4
  5376. xorl %edx, %ecx
  5377. rorxl $22, %r15d, %edx
  5378. addl %ebx, %r14d
  5379. vpshufd $0xfa, %xmm1, %xmm6
  5380. # rnd_1: 5 - 5
  5381. xorl %ecx, %edx
  5382. movl %r8d, %ebx
  5383. addl %r14d, %r10d
  5384. vpxor %xmm8, %xmm7, %xmm5
  5385. # rnd_1: 6 - 6
  5386. xorl %r15d, %ebx
  5387. addl %edx, %r14d
  5388. andl %ebx, %eax
  5389. vpsrld $10, %xmm6, %xmm8
  5390. # rnd_1: 7 - 7
  5391. xorl %r8d, %eax
  5392. rorxl $6, %r10d, %edx
  5393. addl %eax, %r14d
  5394. # rnd_0: 0 - 0
  5395. movl %r11d, %eax
  5396. rorxl $11, %r10d, %ecx
  5397. addl 40(%rsp), %r13d
  5398. vpsrlq $19, %xmm6, %xmm7
  5399. # rnd_0: 1 - 1
  5400. xorl %edx, %ecx
  5401. xorl %r12d, %eax
  5402. rorxl $25, %r10d, %edx
  5403. vpsrlq $0x11, %xmm6, %xmm6
  5404. vpaddd %xmm2, %xmm4, %xmm4
  5405. # rnd_0: 2 - 2
  5406. andl %r10d, %eax
  5407. xorl %ecx, %edx
  5408. rorxl $13, %r14d, %ecx
  5409. vpaddd %xmm5, %xmm4, %xmm4
  5410. # rnd_0: 3 - 3
  5411. addl %edx, %r13d
  5412. rorxl $2, %r14d, %edx
  5413. xorl %r12d, %eax
  5414. vpxor %xmm7, %xmm6, %xmm6
  5415. # rnd_0: 4 - 4
  5416. xorl %edx, %ecx
  5417. rorxl $22, %r14d, %edx
  5418. addl %eax, %r13d
  5419. vpxor %xmm6, %xmm8, %xmm8
  5420. # rnd_0: 5 - 5
  5421. xorl %ecx, %edx
  5422. movl %r15d, %eax
  5423. addl %r13d, %r9d
  5424. vpshufb %xmm11, %xmm8, %xmm8
  5425. # rnd_0: 6 - 6
  5426. xorl %r14d, %eax
  5427. addl %edx, %r13d
  5428. andl %eax, %ebx
  5429. vpaddd %xmm8, %xmm4, %xmm4
  5430. # rnd_0: 7 - 7
  5431. xorl %r15d, %ebx
  5432. rorxl $6, %r9d, %edx
  5433. addl %ebx, %r13d
  5434. # rnd_1: 0 - 0
  5435. movl %r10d, %ebx
  5436. rorxl $11, %r9d, %ecx
  5437. addl 44(%rsp), %r12d
  5438. vpshufd $0x50, %xmm4, %xmm6
  5439. # rnd_1: 1 - 1
  5440. xorl %edx, %ecx
  5441. xorl %r11d, %ebx
  5442. rorxl $25, %r9d, %edx
  5443. vpsrld $10, %xmm6, %xmm9
  5444. # rnd_1: 2 - 2
  5445. andl %r9d, %ebx
  5446. xorl %ecx, %edx
  5447. rorxl $13, %r13d, %ecx
  5448. vpsrlq $19, %xmm6, %xmm7
  5449. # rnd_1: 3 - 3
  5450. addl %edx, %r12d
  5451. rorxl $2, %r13d, %edx
  5452. xorl %r11d, %ebx
  5453. vpsrlq $0x11, %xmm6, %xmm6
  5454. # rnd_1: 4 - 4
  5455. xorl %edx, %ecx
  5456. rorxl $22, %r13d, %edx
  5457. addl %ebx, %r12d
  5458. vpxor %xmm7, %xmm6, %xmm6
  5459. # rnd_1: 5 - 5
  5460. xorl %ecx, %edx
  5461. movl %r14d, %ebx
  5462. addl %r12d, %r8d
  5463. vpxor %xmm6, %xmm9, %xmm9
  5464. # rnd_1: 6 - 6
  5465. xorl %r13d, %ebx
  5466. addl %edx, %r12d
  5467. andl %ebx, %eax
  5468. vpshufb %xmm12, %xmm9, %xmm9
  5469. # rnd_1: 7 - 7
  5470. xorl %r14d, %eax
  5471. rorxl $6, %r8d, %edx
  5472. addl %eax, %r12d
  5473. vpaddd %xmm4, %xmm9, %xmm2
  5474. # msg_sched done: 8-11
  5475. # msg_sched: 12-15
  5476. # rnd_0: 0 - 0
  5477. movl %r9d, %eax
  5478. rorxl $11, %r8d, %ecx
  5479. addl 48(%rsp), %r11d
  5480. vpalignr $4, %xmm1, %xmm2, %xmm4
  5481. vpalignr $4, %xmm3, %xmm0, %xmm5
  5482. # rnd_0: 1 - 2
  5483. xorl %edx, %ecx
  5484. xorl %r10d, %eax
  5485. rorxl $25, %r8d, %edx
  5486. andl %r8d, %eax
  5487. xorl %ecx, %edx
  5488. rorxl $13, %r12d, %ecx
  5489. vpsrld $7, %xmm5, %xmm6
  5490. vpslld $25, %xmm5, %xmm7
  5491. # rnd_0: 3 - 4
  5492. addl %edx, %r11d
  5493. rorxl $2, %r12d, %edx
  5494. xorl %r10d, %eax
  5495. xorl %edx, %ecx
  5496. rorxl $22, %r12d, %edx
  5497. addl %eax, %r11d
  5498. vpsrld $3, %xmm5, %xmm8
  5499. vpor %xmm6, %xmm7, %xmm7
  5500. # rnd_0: 5 - 7
  5501. xorl %ecx, %edx
  5502. movl %r13d, %eax
  5503. addl %r11d, %r15d
  5504. xorl %r12d, %eax
  5505. addl %edx, %r11d
  5506. andl %eax, %ebx
  5507. xorl %r13d, %ebx
  5508. rorxl $6, %r15d, %edx
  5509. addl %ebx, %r11d
  5510. # rnd_1: 0 - 0
  5511. movl %r8d, %ebx
  5512. rorxl $11, %r15d, %ecx
  5513. addl 52(%rsp), %r10d
  5514. vpsrld $18, %xmm5, %xmm6
  5515. # rnd_1: 1 - 1
  5516. xorl %edx, %ecx
  5517. xorl %r9d, %ebx
  5518. rorxl $25, %r15d, %edx
  5519. vpslld $14, %xmm5, %xmm5
  5520. # rnd_1: 2 - 2
  5521. andl %r15d, %ebx
  5522. xorl %ecx, %edx
  5523. rorxl $13, %r11d, %ecx
  5524. vpxor %xmm5, %xmm7, %xmm7
  5525. # rnd_1: 3 - 3
  5526. addl %edx, %r10d
  5527. rorxl $2, %r11d, %edx
  5528. xorl %r9d, %ebx
  5529. vpxor %xmm6, %xmm7, %xmm7
  5530. # rnd_1: 4 - 4
  5531. xorl %edx, %ecx
  5532. rorxl $22, %r11d, %edx
  5533. addl %ebx, %r10d
  5534. vpshufd $0xfa, %xmm2, %xmm6
  5535. # rnd_1: 5 - 5
  5536. xorl %ecx, %edx
  5537. movl %r12d, %ebx
  5538. addl %r10d, %r14d
  5539. vpxor %xmm8, %xmm7, %xmm5
  5540. # rnd_1: 6 - 6
  5541. xorl %r11d, %ebx
  5542. addl %edx, %r10d
  5543. andl %ebx, %eax
  5544. vpsrld $10, %xmm6, %xmm8
  5545. # rnd_1: 7 - 7
  5546. xorl %r12d, %eax
  5547. rorxl $6, %r14d, %edx
  5548. addl %eax, %r10d
  5549. # rnd_0: 0 - 0
  5550. movl %r15d, %eax
  5551. rorxl $11, %r14d, %ecx
  5552. addl 56(%rsp), %r9d
  5553. vpsrlq $19, %xmm6, %xmm7
  5554. # rnd_0: 1 - 1
  5555. xorl %edx, %ecx
  5556. xorl %r8d, %eax
  5557. rorxl $25, %r14d, %edx
  5558. vpsrlq $0x11, %xmm6, %xmm6
  5559. vpaddd %xmm3, %xmm4, %xmm4
  5560. # rnd_0: 2 - 2
  5561. andl %r14d, %eax
  5562. xorl %ecx, %edx
  5563. rorxl $13, %r10d, %ecx
  5564. vpaddd %xmm5, %xmm4, %xmm4
  5565. # rnd_0: 3 - 3
  5566. addl %edx, %r9d
  5567. rorxl $2, %r10d, %edx
  5568. xorl %r8d, %eax
  5569. vpxor %xmm7, %xmm6, %xmm6
  5570. # rnd_0: 4 - 4
  5571. xorl %edx, %ecx
  5572. rorxl $22, %r10d, %edx
  5573. addl %eax, %r9d
  5574. vpxor %xmm6, %xmm8, %xmm8
  5575. # rnd_0: 5 - 5
  5576. xorl %ecx, %edx
  5577. movl %r11d, %eax
  5578. addl %r9d, %r13d
  5579. vpshufb %xmm11, %xmm8, %xmm8
  5580. # rnd_0: 6 - 6
  5581. xorl %r10d, %eax
  5582. addl %edx, %r9d
  5583. andl %eax, %ebx
  5584. vpaddd %xmm8, %xmm4, %xmm4
  5585. # rnd_0: 7 - 7
  5586. xorl %r11d, %ebx
  5587. rorxl $6, %r13d, %edx
  5588. addl %ebx, %r9d
  5589. # rnd_1: 0 - 0
  5590. movl %r14d, %ebx
  5591. rorxl $11, %r13d, %ecx
  5592. addl 60(%rsp), %r8d
  5593. vpshufd $0x50, %xmm4, %xmm6
  5594. # rnd_1: 1 - 1
  5595. xorl %edx, %ecx
  5596. xorl %r15d, %ebx
  5597. rorxl $25, %r13d, %edx
  5598. vpsrld $10, %xmm6, %xmm9
  5599. # rnd_1: 2 - 2
  5600. andl %r13d, %ebx
  5601. xorl %ecx, %edx
  5602. rorxl $13, %r9d, %ecx
  5603. vpsrlq $19, %xmm6, %xmm7
  5604. # rnd_1: 3 - 3
  5605. addl %edx, %r8d
  5606. rorxl $2, %r9d, %edx
  5607. xorl %r15d, %ebx
  5608. vpsrlq $0x11, %xmm6, %xmm6
  5609. # rnd_1: 4 - 4
  5610. xorl %edx, %ecx
  5611. rorxl $22, %r9d, %edx
  5612. addl %ebx, %r8d
  5613. vpxor %xmm7, %xmm6, %xmm6
  5614. # rnd_1: 5 - 5
  5615. xorl %ecx, %edx
  5616. movl %r10d, %ebx
  5617. addl %r8d, %r12d
  5618. vpxor %xmm6, %xmm9, %xmm9
  5619. # rnd_1: 6 - 6
  5620. xorl %r9d, %ebx
  5621. addl %edx, %r8d
  5622. andl %ebx, %eax
  5623. vpshufb %xmm12, %xmm9, %xmm9
  5624. # rnd_1: 7 - 7
  5625. xorl %r10d, %eax
  5626. rorxl $6, %r12d, %edx
  5627. addl %eax, %r8d
  5628. vpaddd %xmm4, %xmm9, %xmm3
  5629. # msg_sched done: 12-15
  5630. # set_w_k_xfer_4: 4
  5631. vpaddd 64+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  5632. vpaddd 80+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  5633. vmovdqu %xmm4, (%rsp)
  5634. vmovdqu %xmm5, 16(%rsp)
  5635. vpaddd 96+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  5636. vpaddd 112+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  5637. vmovdqu %xmm6, 32(%rsp)
  5638. vmovdqu %xmm7, 48(%rsp)
  5639. # msg_sched: 0-3
  5640. # rnd_0: 0 - 0
  5641. movl %r13d, %eax
  5642. rorxl $11, %r12d, %ecx
  5643. addl (%rsp), %r15d
  5644. vpalignr $4, %xmm2, %xmm3, %xmm4
  5645. vpalignr $4, %xmm0, %xmm1, %xmm5
  5646. # rnd_0: 1 - 2
  5647. xorl %edx, %ecx
  5648. xorl %r14d, %eax
  5649. rorxl $25, %r12d, %edx
  5650. andl %r12d, %eax
  5651. xorl %ecx, %edx
  5652. rorxl $13, %r8d, %ecx
  5653. vpsrld $7, %xmm5, %xmm6
  5654. vpslld $25, %xmm5, %xmm7
  5655. # rnd_0: 3 - 4
  5656. addl %edx, %r15d
  5657. rorxl $2, %r8d, %edx
  5658. xorl %r14d, %eax
  5659. xorl %edx, %ecx
  5660. rorxl $22, %r8d, %edx
  5661. addl %eax, %r15d
  5662. vpsrld $3, %xmm5, %xmm8
  5663. vpor %xmm6, %xmm7, %xmm7
  5664. # rnd_0: 5 - 7
  5665. xorl %ecx, %edx
  5666. movl %r9d, %eax
  5667. addl %r15d, %r11d
  5668. xorl %r8d, %eax
  5669. addl %edx, %r15d
  5670. andl %eax, %ebx
  5671. xorl %r9d, %ebx
  5672. rorxl $6, %r11d, %edx
  5673. addl %ebx, %r15d
  5674. # rnd_1: 0 - 0
  5675. movl %r12d, %ebx
  5676. rorxl $11, %r11d, %ecx
  5677. addl 4(%rsp), %r14d
  5678. vpsrld $18, %xmm5, %xmm6
  5679. # rnd_1: 1 - 1
  5680. xorl %edx, %ecx
  5681. xorl %r13d, %ebx
  5682. rorxl $25, %r11d, %edx
  5683. vpslld $14, %xmm5, %xmm5
  5684. # rnd_1: 2 - 2
  5685. andl %r11d, %ebx
  5686. xorl %ecx, %edx
  5687. rorxl $13, %r15d, %ecx
  5688. vpxor %xmm5, %xmm7, %xmm7
  5689. # rnd_1: 3 - 3
  5690. addl %edx, %r14d
  5691. rorxl $2, %r15d, %edx
  5692. xorl %r13d, %ebx
  5693. vpxor %xmm6, %xmm7, %xmm7
  5694. # rnd_1: 4 - 4
  5695. xorl %edx, %ecx
  5696. rorxl $22, %r15d, %edx
  5697. addl %ebx, %r14d
  5698. vpshufd $0xfa, %xmm3, %xmm6
  5699. # rnd_1: 5 - 5
  5700. xorl %ecx, %edx
  5701. movl %r8d, %ebx
  5702. addl %r14d, %r10d
  5703. vpxor %xmm8, %xmm7, %xmm5
  5704. # rnd_1: 6 - 6
  5705. xorl %r15d, %ebx
  5706. addl %edx, %r14d
  5707. andl %ebx, %eax
  5708. vpsrld $10, %xmm6, %xmm8
  5709. # rnd_1: 7 - 7
  5710. xorl %r8d, %eax
  5711. rorxl $6, %r10d, %edx
  5712. addl %eax, %r14d
  5713. # rnd_0: 0 - 0
  5714. movl %r11d, %eax
  5715. rorxl $11, %r10d, %ecx
  5716. addl 8(%rsp), %r13d
  5717. vpsrlq $19, %xmm6, %xmm7
  5718. # rnd_0: 1 - 1
  5719. xorl %edx, %ecx
  5720. xorl %r12d, %eax
  5721. rorxl $25, %r10d, %edx
  5722. vpsrlq $0x11, %xmm6, %xmm6
  5723. vpaddd %xmm0, %xmm4, %xmm4
  5724. # rnd_0: 2 - 2
  5725. andl %r10d, %eax
  5726. xorl %ecx, %edx
  5727. rorxl $13, %r14d, %ecx
  5728. vpaddd %xmm5, %xmm4, %xmm4
  5729. # rnd_0: 3 - 3
  5730. addl %edx, %r13d
  5731. rorxl $2, %r14d, %edx
  5732. xorl %r12d, %eax
  5733. vpxor %xmm7, %xmm6, %xmm6
  5734. # rnd_0: 4 - 4
  5735. xorl %edx, %ecx
  5736. rorxl $22, %r14d, %edx
  5737. addl %eax, %r13d
  5738. vpxor %xmm6, %xmm8, %xmm8
  5739. # rnd_0: 5 - 5
  5740. xorl %ecx, %edx
  5741. movl %r15d, %eax
  5742. addl %r13d, %r9d
  5743. vpshufb %xmm11, %xmm8, %xmm8
  5744. # rnd_0: 6 - 6
  5745. xorl %r14d, %eax
  5746. addl %edx, %r13d
  5747. andl %eax, %ebx
  5748. vpaddd %xmm8, %xmm4, %xmm4
  5749. # rnd_0: 7 - 7
  5750. xorl %r15d, %ebx
  5751. rorxl $6, %r9d, %edx
  5752. addl %ebx, %r13d
  5753. # rnd_1: 0 - 0
  5754. movl %r10d, %ebx
  5755. rorxl $11, %r9d, %ecx
  5756. addl 12(%rsp), %r12d
  5757. vpshufd $0x50, %xmm4, %xmm6
  5758. # rnd_1: 1 - 1
  5759. xorl %edx, %ecx
  5760. xorl %r11d, %ebx
  5761. rorxl $25, %r9d, %edx
  5762. vpsrld $10, %xmm6, %xmm9
  5763. # rnd_1: 2 - 2
  5764. andl %r9d, %ebx
  5765. xorl %ecx, %edx
  5766. rorxl $13, %r13d, %ecx
  5767. vpsrlq $19, %xmm6, %xmm7
  5768. # rnd_1: 3 - 3
  5769. addl %edx, %r12d
  5770. rorxl $2, %r13d, %edx
  5771. xorl %r11d, %ebx
  5772. vpsrlq $0x11, %xmm6, %xmm6
  5773. # rnd_1: 4 - 4
  5774. xorl %edx, %ecx
  5775. rorxl $22, %r13d, %edx
  5776. addl %ebx, %r12d
  5777. vpxor %xmm7, %xmm6, %xmm6
  5778. # rnd_1: 5 - 5
  5779. xorl %ecx, %edx
  5780. movl %r14d, %ebx
  5781. addl %r12d, %r8d
  5782. vpxor %xmm6, %xmm9, %xmm9
  5783. # rnd_1: 6 - 6
  5784. xorl %r13d, %ebx
  5785. addl %edx, %r12d
  5786. andl %ebx, %eax
  5787. vpshufb %xmm12, %xmm9, %xmm9
  5788. # rnd_1: 7 - 7
  5789. xorl %r14d, %eax
  5790. rorxl $6, %r8d, %edx
  5791. addl %eax, %r12d
  5792. vpaddd %xmm4, %xmm9, %xmm0
  5793. # msg_sched done: 0-3
  5794. # msg_sched: 4-7
  5795. # rnd_0: 0 - 0
  5796. movl %r9d, %eax
  5797. rorxl $11, %r8d, %ecx
  5798. addl 16(%rsp), %r11d
  5799. vpalignr $4, %xmm3, %xmm0, %xmm4
  5800. vpalignr $4, %xmm1, %xmm2, %xmm5
  5801. # rnd_0: 1 - 2
  5802. xorl %edx, %ecx
  5803. xorl %r10d, %eax
  5804. rorxl $25, %r8d, %edx
  5805. andl %r8d, %eax
  5806. xorl %ecx, %edx
  5807. rorxl $13, %r12d, %ecx
  5808. vpsrld $7, %xmm5, %xmm6
  5809. vpslld $25, %xmm5, %xmm7
  5810. # rnd_0: 3 - 4
  5811. addl %edx, %r11d
  5812. rorxl $2, %r12d, %edx
  5813. xorl %r10d, %eax
  5814. xorl %edx, %ecx
  5815. rorxl $22, %r12d, %edx
  5816. addl %eax, %r11d
  5817. vpsrld $3, %xmm5, %xmm8
  5818. vpor %xmm6, %xmm7, %xmm7
  5819. # rnd_0: 5 - 7
  5820. xorl %ecx, %edx
  5821. movl %r13d, %eax
  5822. addl %r11d, %r15d
  5823. xorl %r12d, %eax
  5824. addl %edx, %r11d
  5825. andl %eax, %ebx
  5826. xorl %r13d, %ebx
  5827. rorxl $6, %r15d, %edx
  5828. addl %ebx, %r11d
  5829. # rnd_1: 0 - 0
  5830. movl %r8d, %ebx
  5831. rorxl $11, %r15d, %ecx
  5832. addl 20(%rsp), %r10d
  5833. vpsrld $18, %xmm5, %xmm6
  5834. # rnd_1: 1 - 1
  5835. xorl %edx, %ecx
  5836. xorl %r9d, %ebx
  5837. rorxl $25, %r15d, %edx
  5838. vpslld $14, %xmm5, %xmm5
  5839. # rnd_1: 2 - 2
  5840. andl %r15d, %ebx
  5841. xorl %ecx, %edx
  5842. rorxl $13, %r11d, %ecx
  5843. vpxor %xmm5, %xmm7, %xmm7
  5844. # rnd_1: 3 - 3
  5845. addl %edx, %r10d
  5846. rorxl $2, %r11d, %edx
  5847. xorl %r9d, %ebx
  5848. vpxor %xmm6, %xmm7, %xmm7
  5849. # rnd_1: 4 - 4
  5850. xorl %edx, %ecx
  5851. rorxl $22, %r11d, %edx
  5852. addl %ebx, %r10d
  5853. vpshufd $0xfa, %xmm0, %xmm6
  5854. # rnd_1: 5 - 5
  5855. xorl %ecx, %edx
  5856. movl %r12d, %ebx
  5857. addl %r10d, %r14d
  5858. vpxor %xmm8, %xmm7, %xmm5
  5859. # rnd_1: 6 - 6
  5860. xorl %r11d, %ebx
  5861. addl %edx, %r10d
  5862. andl %ebx, %eax
  5863. vpsrld $10, %xmm6, %xmm8
  5864. # rnd_1: 7 - 7
  5865. xorl %r12d, %eax
  5866. rorxl $6, %r14d, %edx
  5867. addl %eax, %r10d
  5868. # rnd_0: 0 - 0
  5869. movl %r15d, %eax
  5870. rorxl $11, %r14d, %ecx
  5871. addl 24(%rsp), %r9d
  5872. vpsrlq $19, %xmm6, %xmm7
  5873. # rnd_0: 1 - 1
  5874. xorl %edx, %ecx
  5875. xorl %r8d, %eax
  5876. rorxl $25, %r14d, %edx
  5877. vpsrlq $0x11, %xmm6, %xmm6
  5878. vpaddd %xmm1, %xmm4, %xmm4
  5879. # rnd_0: 2 - 2
  5880. andl %r14d, %eax
  5881. xorl %ecx, %edx
  5882. rorxl $13, %r10d, %ecx
  5883. vpaddd %xmm5, %xmm4, %xmm4
  5884. # rnd_0: 3 - 3
  5885. addl %edx, %r9d
  5886. rorxl $2, %r10d, %edx
  5887. xorl %r8d, %eax
  5888. vpxor %xmm7, %xmm6, %xmm6
  5889. # rnd_0: 4 - 4
  5890. xorl %edx, %ecx
  5891. rorxl $22, %r10d, %edx
  5892. addl %eax, %r9d
  5893. vpxor %xmm6, %xmm8, %xmm8
  5894. # rnd_0: 5 - 5
  5895. xorl %ecx, %edx
  5896. movl %r11d, %eax
  5897. addl %r9d, %r13d
  5898. vpshufb %xmm11, %xmm8, %xmm8
  5899. # rnd_0: 6 - 6
  5900. xorl %r10d, %eax
  5901. addl %edx, %r9d
  5902. andl %eax, %ebx
  5903. vpaddd %xmm8, %xmm4, %xmm4
  5904. # rnd_0: 7 - 7
  5905. xorl %r11d, %ebx
  5906. rorxl $6, %r13d, %edx
  5907. addl %ebx, %r9d
  5908. # rnd_1: 0 - 0
  5909. movl %r14d, %ebx
  5910. rorxl $11, %r13d, %ecx
  5911. addl 28(%rsp), %r8d
  5912. vpshufd $0x50, %xmm4, %xmm6
  5913. # rnd_1: 1 - 1
  5914. xorl %edx, %ecx
  5915. xorl %r15d, %ebx
  5916. rorxl $25, %r13d, %edx
  5917. vpsrld $10, %xmm6, %xmm9
  5918. # rnd_1: 2 - 2
  5919. andl %r13d, %ebx
  5920. xorl %ecx, %edx
  5921. rorxl $13, %r9d, %ecx
  5922. vpsrlq $19, %xmm6, %xmm7
  5923. # rnd_1: 3 - 3
  5924. addl %edx, %r8d
  5925. rorxl $2, %r9d, %edx
  5926. xorl %r15d, %ebx
  5927. vpsrlq $0x11, %xmm6, %xmm6
  5928. # rnd_1: 4 - 4
  5929. xorl %edx, %ecx
  5930. rorxl $22, %r9d, %edx
  5931. addl %ebx, %r8d
  5932. vpxor %xmm7, %xmm6, %xmm6
  5933. # rnd_1: 5 - 5
  5934. xorl %ecx, %edx
  5935. movl %r10d, %ebx
  5936. addl %r8d, %r12d
  5937. vpxor %xmm6, %xmm9, %xmm9
  5938. # rnd_1: 6 - 6
  5939. xorl %r9d, %ebx
  5940. addl %edx, %r8d
  5941. andl %ebx, %eax
  5942. vpshufb %xmm12, %xmm9, %xmm9
  5943. # rnd_1: 7 - 7
  5944. xorl %r10d, %eax
  5945. rorxl $6, %r12d, %edx
  5946. addl %eax, %r8d
  5947. vpaddd %xmm4, %xmm9, %xmm1
  5948. # msg_sched done: 4-7
  5949. # msg_sched: 8-11
  5950. # rnd_0: 0 - 0
  5951. movl %r13d, %eax
  5952. rorxl $11, %r12d, %ecx
  5953. addl 32(%rsp), %r15d
  5954. vpalignr $4, %xmm0, %xmm1, %xmm4
  5955. vpalignr $4, %xmm2, %xmm3, %xmm5
  5956. # rnd_0: 1 - 2
  5957. xorl %edx, %ecx
  5958. xorl %r14d, %eax
  5959. rorxl $25, %r12d, %edx
  5960. andl %r12d, %eax
  5961. xorl %ecx, %edx
  5962. rorxl $13, %r8d, %ecx
  5963. vpsrld $7, %xmm5, %xmm6
  5964. vpslld $25, %xmm5, %xmm7
  5965. # rnd_0: 3 - 4
  5966. addl %edx, %r15d
  5967. rorxl $2, %r8d, %edx
  5968. xorl %r14d, %eax
  5969. xorl %edx, %ecx
  5970. rorxl $22, %r8d, %edx
  5971. addl %eax, %r15d
  5972. vpsrld $3, %xmm5, %xmm8
  5973. vpor %xmm6, %xmm7, %xmm7
  5974. # rnd_0: 5 - 7
  5975. xorl %ecx, %edx
  5976. movl %r9d, %eax
  5977. addl %r15d, %r11d
  5978. xorl %r8d, %eax
  5979. addl %edx, %r15d
  5980. andl %eax, %ebx
  5981. xorl %r9d, %ebx
  5982. rorxl $6, %r11d, %edx
  5983. addl %ebx, %r15d
  5984. # rnd_1: 0 - 0
  5985. movl %r12d, %ebx
  5986. rorxl $11, %r11d, %ecx
  5987. addl 36(%rsp), %r14d
  5988. vpsrld $18, %xmm5, %xmm6
  5989. # rnd_1: 1 - 1
  5990. xorl %edx, %ecx
  5991. xorl %r13d, %ebx
  5992. rorxl $25, %r11d, %edx
  5993. vpslld $14, %xmm5, %xmm5
  5994. # rnd_1: 2 - 2
  5995. andl %r11d, %ebx
  5996. xorl %ecx, %edx
  5997. rorxl $13, %r15d, %ecx
  5998. vpxor %xmm5, %xmm7, %xmm7
  5999. # rnd_1: 3 - 3
  6000. addl %edx, %r14d
  6001. rorxl $2, %r15d, %edx
  6002. xorl %r13d, %ebx
  6003. vpxor %xmm6, %xmm7, %xmm7
  6004. # rnd_1: 4 - 4
  6005. xorl %edx, %ecx
  6006. rorxl $22, %r15d, %edx
  6007. addl %ebx, %r14d
  6008. vpshufd $0xfa, %xmm1, %xmm6
  6009. # rnd_1: 5 - 5
  6010. xorl %ecx, %edx
  6011. movl %r8d, %ebx
  6012. addl %r14d, %r10d
  6013. vpxor %xmm8, %xmm7, %xmm5
  6014. # rnd_1: 6 - 6
  6015. xorl %r15d, %ebx
  6016. addl %edx, %r14d
  6017. andl %ebx, %eax
  6018. vpsrld $10, %xmm6, %xmm8
  6019. # rnd_1: 7 - 7
  6020. xorl %r8d, %eax
  6021. rorxl $6, %r10d, %edx
  6022. addl %eax, %r14d
  6023. # rnd_0: 0 - 0
  6024. movl %r11d, %eax
  6025. rorxl $11, %r10d, %ecx
  6026. addl 40(%rsp), %r13d
  6027. vpsrlq $19, %xmm6, %xmm7
  6028. # rnd_0: 1 - 1
  6029. xorl %edx, %ecx
  6030. xorl %r12d, %eax
  6031. rorxl $25, %r10d, %edx
  6032. vpsrlq $0x11, %xmm6, %xmm6
  6033. vpaddd %xmm2, %xmm4, %xmm4
  6034. # rnd_0: 2 - 2
  6035. andl %r10d, %eax
  6036. xorl %ecx, %edx
  6037. rorxl $13, %r14d, %ecx
  6038. vpaddd %xmm5, %xmm4, %xmm4
  6039. # rnd_0: 3 - 3
  6040. addl %edx, %r13d
  6041. rorxl $2, %r14d, %edx
  6042. xorl %r12d, %eax
  6043. vpxor %xmm7, %xmm6, %xmm6
  6044. # rnd_0: 4 - 4
  6045. xorl %edx, %ecx
  6046. rorxl $22, %r14d, %edx
  6047. addl %eax, %r13d
  6048. vpxor %xmm6, %xmm8, %xmm8
  6049. # rnd_0: 5 - 5
  6050. xorl %ecx, %edx
  6051. movl %r15d, %eax
  6052. addl %r13d, %r9d
  6053. vpshufb %xmm11, %xmm8, %xmm8
  6054. # rnd_0: 6 - 6
  6055. xorl %r14d, %eax
  6056. addl %edx, %r13d
  6057. andl %eax, %ebx
  6058. vpaddd %xmm8, %xmm4, %xmm4
  6059. # rnd_0: 7 - 7
  6060. xorl %r15d, %ebx
  6061. rorxl $6, %r9d, %edx
  6062. addl %ebx, %r13d
  6063. # rnd_1: 0 - 0
  6064. movl %r10d, %ebx
  6065. rorxl $11, %r9d, %ecx
  6066. addl 44(%rsp), %r12d
  6067. vpshufd $0x50, %xmm4, %xmm6
  6068. # rnd_1: 1 - 1
  6069. xorl %edx, %ecx
  6070. xorl %r11d, %ebx
  6071. rorxl $25, %r9d, %edx
  6072. vpsrld $10, %xmm6, %xmm9
  6073. # rnd_1: 2 - 2
  6074. andl %r9d, %ebx
  6075. xorl %ecx, %edx
  6076. rorxl $13, %r13d, %ecx
  6077. vpsrlq $19, %xmm6, %xmm7
  6078. # rnd_1: 3 - 3
  6079. addl %edx, %r12d
  6080. rorxl $2, %r13d, %edx
  6081. xorl %r11d, %ebx
  6082. vpsrlq $0x11, %xmm6, %xmm6
  6083. # rnd_1: 4 - 4
  6084. xorl %edx, %ecx
  6085. rorxl $22, %r13d, %edx
  6086. addl %ebx, %r12d
  6087. vpxor %xmm7, %xmm6, %xmm6
  6088. # rnd_1: 5 - 5
  6089. xorl %ecx, %edx
  6090. movl %r14d, %ebx
  6091. addl %r12d, %r8d
  6092. vpxor %xmm6, %xmm9, %xmm9
  6093. # rnd_1: 6 - 6
  6094. xorl %r13d, %ebx
  6095. addl %edx, %r12d
  6096. andl %ebx, %eax
  6097. vpshufb %xmm12, %xmm9, %xmm9
  6098. # rnd_1: 7 - 7
  6099. xorl %r14d, %eax
  6100. rorxl $6, %r8d, %edx
  6101. addl %eax, %r12d
  6102. vpaddd %xmm4, %xmm9, %xmm2
  6103. # msg_sched done: 8-11
  6104. # msg_sched: 12-15
  6105. # rnd_0: 0 - 0
  6106. movl %r9d, %eax
  6107. rorxl $11, %r8d, %ecx
  6108. addl 48(%rsp), %r11d
  6109. vpalignr $4, %xmm1, %xmm2, %xmm4
  6110. vpalignr $4, %xmm3, %xmm0, %xmm5
  6111. # rnd_0: 1 - 2
  6112. xorl %edx, %ecx
  6113. xorl %r10d, %eax
  6114. rorxl $25, %r8d, %edx
  6115. andl %r8d, %eax
  6116. xorl %ecx, %edx
  6117. rorxl $13, %r12d, %ecx
  6118. vpsrld $7, %xmm5, %xmm6
  6119. vpslld $25, %xmm5, %xmm7
  6120. # rnd_0: 3 - 4
  6121. addl %edx, %r11d
  6122. rorxl $2, %r12d, %edx
  6123. xorl %r10d, %eax
  6124. xorl %edx, %ecx
  6125. rorxl $22, %r12d, %edx
  6126. addl %eax, %r11d
  6127. vpsrld $3, %xmm5, %xmm8
  6128. vpor %xmm6, %xmm7, %xmm7
  6129. # rnd_0: 5 - 7
  6130. xorl %ecx, %edx
  6131. movl %r13d, %eax
  6132. addl %r11d, %r15d
  6133. xorl %r12d, %eax
  6134. addl %edx, %r11d
  6135. andl %eax, %ebx
  6136. xorl %r13d, %ebx
  6137. rorxl $6, %r15d, %edx
  6138. addl %ebx, %r11d
  6139. # rnd_1: 0 - 0
  6140. movl %r8d, %ebx
  6141. rorxl $11, %r15d, %ecx
  6142. addl 52(%rsp), %r10d
  6143. vpsrld $18, %xmm5, %xmm6
  6144. # rnd_1: 1 - 1
  6145. xorl %edx, %ecx
  6146. xorl %r9d, %ebx
  6147. rorxl $25, %r15d, %edx
  6148. vpslld $14, %xmm5, %xmm5
  6149. # rnd_1: 2 - 2
  6150. andl %r15d, %ebx
  6151. xorl %ecx, %edx
  6152. rorxl $13, %r11d, %ecx
  6153. vpxor %xmm5, %xmm7, %xmm7
  6154. # rnd_1: 3 - 3
  6155. addl %edx, %r10d
  6156. rorxl $2, %r11d, %edx
  6157. xorl %r9d, %ebx
  6158. vpxor %xmm6, %xmm7, %xmm7
  6159. # rnd_1: 4 - 4
  6160. xorl %edx, %ecx
  6161. rorxl $22, %r11d, %edx
  6162. addl %ebx, %r10d
  6163. vpshufd $0xfa, %xmm2, %xmm6
  6164. # rnd_1: 5 - 5
  6165. xorl %ecx, %edx
  6166. movl %r12d, %ebx
  6167. addl %r10d, %r14d
  6168. vpxor %xmm8, %xmm7, %xmm5
  6169. # rnd_1: 6 - 6
  6170. xorl %r11d, %ebx
  6171. addl %edx, %r10d
  6172. andl %ebx, %eax
  6173. vpsrld $10, %xmm6, %xmm8
  6174. # rnd_1: 7 - 7
  6175. xorl %r12d, %eax
  6176. rorxl $6, %r14d, %edx
  6177. addl %eax, %r10d
  6178. # rnd_0: 0 - 0
  6179. movl %r15d, %eax
  6180. rorxl $11, %r14d, %ecx
  6181. addl 56(%rsp), %r9d
  6182. vpsrlq $19, %xmm6, %xmm7
  6183. # rnd_0: 1 - 1
  6184. xorl %edx, %ecx
  6185. xorl %r8d, %eax
  6186. rorxl $25, %r14d, %edx
  6187. vpsrlq $0x11, %xmm6, %xmm6
  6188. vpaddd %xmm3, %xmm4, %xmm4
  6189. # rnd_0: 2 - 2
  6190. andl %r14d, %eax
  6191. xorl %ecx, %edx
  6192. rorxl $13, %r10d, %ecx
  6193. vpaddd %xmm5, %xmm4, %xmm4
  6194. # rnd_0: 3 - 3
  6195. addl %edx, %r9d
  6196. rorxl $2, %r10d, %edx
  6197. xorl %r8d, %eax
  6198. vpxor %xmm7, %xmm6, %xmm6
  6199. # rnd_0: 4 - 4
  6200. xorl %edx, %ecx
  6201. rorxl $22, %r10d, %edx
  6202. addl %eax, %r9d
  6203. vpxor %xmm6, %xmm8, %xmm8
  6204. # rnd_0: 5 - 5
  6205. xorl %ecx, %edx
  6206. movl %r11d, %eax
  6207. addl %r9d, %r13d
  6208. vpshufb %xmm11, %xmm8, %xmm8
  6209. # rnd_0: 6 - 6
  6210. xorl %r10d, %eax
  6211. addl %edx, %r9d
  6212. andl %eax, %ebx
  6213. vpaddd %xmm8, %xmm4, %xmm4
  6214. # rnd_0: 7 - 7
  6215. xorl %r11d, %ebx
  6216. rorxl $6, %r13d, %edx
  6217. addl %ebx, %r9d
  6218. # rnd_1: 0 - 0
  6219. movl %r14d, %ebx
  6220. rorxl $11, %r13d, %ecx
  6221. addl 60(%rsp), %r8d
  6222. vpshufd $0x50, %xmm4, %xmm6
  6223. # rnd_1: 1 - 1
  6224. xorl %edx, %ecx
  6225. xorl %r15d, %ebx
  6226. rorxl $25, %r13d, %edx
  6227. vpsrld $10, %xmm6, %xmm9
  6228. # rnd_1: 2 - 2
  6229. andl %r13d, %ebx
  6230. xorl %ecx, %edx
  6231. rorxl $13, %r9d, %ecx
  6232. vpsrlq $19, %xmm6, %xmm7
  6233. # rnd_1: 3 - 3
  6234. addl %edx, %r8d
  6235. rorxl $2, %r9d, %edx
  6236. xorl %r15d, %ebx
  6237. vpsrlq $0x11, %xmm6, %xmm6
  6238. # rnd_1: 4 - 4
  6239. xorl %edx, %ecx
  6240. rorxl $22, %r9d, %edx
  6241. addl %ebx, %r8d
  6242. vpxor %xmm7, %xmm6, %xmm6
  6243. # rnd_1: 5 - 5
  6244. xorl %ecx, %edx
  6245. movl %r10d, %ebx
  6246. addl %r8d, %r12d
  6247. vpxor %xmm6, %xmm9, %xmm9
  6248. # rnd_1: 6 - 6
  6249. xorl %r9d, %ebx
  6250. addl %edx, %r8d
  6251. andl %ebx, %eax
  6252. vpshufb %xmm12, %xmm9, %xmm9
  6253. # rnd_1: 7 - 7
  6254. xorl %r10d, %eax
  6255. rorxl $6, %r12d, %edx
  6256. addl %eax, %r8d
  6257. vpaddd %xmm4, %xmm9, %xmm3
  6258. # msg_sched done: 12-15
  6259. # set_w_k_xfer_4: 8
  6260. vpaddd 128+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  6261. vpaddd 144+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  6262. vmovdqu %xmm4, (%rsp)
  6263. vmovdqu %xmm5, 16(%rsp)
  6264. vpaddd 160+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  6265. vpaddd 176+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  6266. vmovdqu %xmm6, 32(%rsp)
  6267. vmovdqu %xmm7, 48(%rsp)
  6268. # msg_sched: 0-3
  6269. # rnd_0: 0 - 0
  6270. movl %r13d, %eax
  6271. rorxl $11, %r12d, %ecx
  6272. addl (%rsp), %r15d
  6273. vpalignr $4, %xmm2, %xmm3, %xmm4
  6274. vpalignr $4, %xmm0, %xmm1, %xmm5
  6275. # rnd_0: 1 - 2
  6276. xorl %edx, %ecx
  6277. xorl %r14d, %eax
  6278. rorxl $25, %r12d, %edx
  6279. andl %r12d, %eax
  6280. xorl %ecx, %edx
  6281. rorxl $13, %r8d, %ecx
  6282. vpsrld $7, %xmm5, %xmm6
  6283. vpslld $25, %xmm5, %xmm7
  6284. # rnd_0: 3 - 4
  6285. addl %edx, %r15d
  6286. rorxl $2, %r8d, %edx
  6287. xorl %r14d, %eax
  6288. xorl %edx, %ecx
  6289. rorxl $22, %r8d, %edx
  6290. addl %eax, %r15d
  6291. vpsrld $3, %xmm5, %xmm8
  6292. vpor %xmm6, %xmm7, %xmm7
  6293. # rnd_0: 5 - 7
  6294. xorl %ecx, %edx
  6295. movl %r9d, %eax
  6296. addl %r15d, %r11d
  6297. xorl %r8d, %eax
  6298. addl %edx, %r15d
  6299. andl %eax, %ebx
  6300. xorl %r9d, %ebx
  6301. rorxl $6, %r11d, %edx
  6302. addl %ebx, %r15d
  6303. # rnd_1: 0 - 0
  6304. movl %r12d, %ebx
  6305. rorxl $11, %r11d, %ecx
  6306. addl 4(%rsp), %r14d
  6307. vpsrld $18, %xmm5, %xmm6
  6308. # rnd_1: 1 - 1
  6309. xorl %edx, %ecx
  6310. xorl %r13d, %ebx
  6311. rorxl $25, %r11d, %edx
  6312. vpslld $14, %xmm5, %xmm5
  6313. # rnd_1: 2 - 2
  6314. andl %r11d, %ebx
  6315. xorl %ecx, %edx
  6316. rorxl $13, %r15d, %ecx
  6317. vpxor %xmm5, %xmm7, %xmm7
  6318. # rnd_1: 3 - 3
  6319. addl %edx, %r14d
  6320. rorxl $2, %r15d, %edx
  6321. xorl %r13d, %ebx
  6322. vpxor %xmm6, %xmm7, %xmm7
  6323. # rnd_1: 4 - 4
  6324. xorl %edx, %ecx
  6325. rorxl $22, %r15d, %edx
  6326. addl %ebx, %r14d
  6327. vpshufd $0xfa, %xmm3, %xmm6
  6328. # rnd_1: 5 - 5
  6329. xorl %ecx, %edx
  6330. movl %r8d, %ebx
  6331. addl %r14d, %r10d
  6332. vpxor %xmm8, %xmm7, %xmm5
  6333. # rnd_1: 6 - 6
  6334. xorl %r15d, %ebx
  6335. addl %edx, %r14d
  6336. andl %ebx, %eax
  6337. vpsrld $10, %xmm6, %xmm8
  6338. # rnd_1: 7 - 7
  6339. xorl %r8d, %eax
  6340. rorxl $6, %r10d, %edx
  6341. addl %eax, %r14d
  6342. # rnd_0: 0 - 0
  6343. movl %r11d, %eax
  6344. rorxl $11, %r10d, %ecx
  6345. addl 8(%rsp), %r13d
  6346. vpsrlq $19, %xmm6, %xmm7
  6347. # rnd_0: 1 - 1
  6348. xorl %edx, %ecx
  6349. xorl %r12d, %eax
  6350. rorxl $25, %r10d, %edx
  6351. vpsrlq $0x11, %xmm6, %xmm6
  6352. vpaddd %xmm0, %xmm4, %xmm4
  6353. # rnd_0: 2 - 2
  6354. andl %r10d, %eax
  6355. xorl %ecx, %edx
  6356. rorxl $13, %r14d, %ecx
  6357. vpaddd %xmm5, %xmm4, %xmm4
  6358. # rnd_0: 3 - 3
  6359. addl %edx, %r13d
  6360. rorxl $2, %r14d, %edx
  6361. xorl %r12d, %eax
  6362. vpxor %xmm7, %xmm6, %xmm6
  6363. # rnd_0: 4 - 4
  6364. xorl %edx, %ecx
  6365. rorxl $22, %r14d, %edx
  6366. addl %eax, %r13d
  6367. vpxor %xmm6, %xmm8, %xmm8
  6368. # rnd_0: 5 - 5
  6369. xorl %ecx, %edx
  6370. movl %r15d, %eax
  6371. addl %r13d, %r9d
  6372. vpshufb %xmm11, %xmm8, %xmm8
  6373. # rnd_0: 6 - 6
  6374. xorl %r14d, %eax
  6375. addl %edx, %r13d
  6376. andl %eax, %ebx
  6377. vpaddd %xmm8, %xmm4, %xmm4
  6378. # rnd_0: 7 - 7
  6379. xorl %r15d, %ebx
  6380. rorxl $6, %r9d, %edx
  6381. addl %ebx, %r13d
  6382. # rnd_1: 0 - 0
  6383. movl %r10d, %ebx
  6384. rorxl $11, %r9d, %ecx
  6385. addl 12(%rsp), %r12d
  6386. vpshufd $0x50, %xmm4, %xmm6
  6387. # rnd_1: 1 - 1
  6388. xorl %edx, %ecx
  6389. xorl %r11d, %ebx
  6390. rorxl $25, %r9d, %edx
  6391. vpsrld $10, %xmm6, %xmm9
  6392. # rnd_1: 2 - 2
  6393. andl %r9d, %ebx
  6394. xorl %ecx, %edx
  6395. rorxl $13, %r13d, %ecx
  6396. vpsrlq $19, %xmm6, %xmm7
  6397. # rnd_1: 3 - 3
  6398. addl %edx, %r12d
  6399. rorxl $2, %r13d, %edx
  6400. xorl %r11d, %ebx
  6401. vpsrlq $0x11, %xmm6, %xmm6
  6402. # rnd_1: 4 - 4
  6403. xorl %edx, %ecx
  6404. rorxl $22, %r13d, %edx
  6405. addl %ebx, %r12d
  6406. vpxor %xmm7, %xmm6, %xmm6
  6407. # rnd_1: 5 - 5
  6408. xorl %ecx, %edx
  6409. movl %r14d, %ebx
  6410. addl %r12d, %r8d
  6411. vpxor %xmm6, %xmm9, %xmm9
  6412. # rnd_1: 6 - 6
  6413. xorl %r13d, %ebx
  6414. addl %edx, %r12d
  6415. andl %ebx, %eax
  6416. vpshufb %xmm12, %xmm9, %xmm9
  6417. # rnd_1: 7 - 7
  6418. xorl %r14d, %eax
  6419. rorxl $6, %r8d, %edx
  6420. addl %eax, %r12d
  6421. vpaddd %xmm4, %xmm9, %xmm0
  6422. # msg_sched done: 0-3
  6423. # msg_sched: 4-7
  6424. # rnd_0: 0 - 0
  6425. movl %r9d, %eax
  6426. rorxl $11, %r8d, %ecx
  6427. addl 16(%rsp), %r11d
  6428. vpalignr $4, %xmm3, %xmm0, %xmm4
  6429. vpalignr $4, %xmm1, %xmm2, %xmm5
  6430. # rnd_0: 1 - 2
  6431. xorl %edx, %ecx
  6432. xorl %r10d, %eax
  6433. rorxl $25, %r8d, %edx
  6434. andl %r8d, %eax
  6435. xorl %ecx, %edx
  6436. rorxl $13, %r12d, %ecx
  6437. vpsrld $7, %xmm5, %xmm6
  6438. vpslld $25, %xmm5, %xmm7
  6439. # rnd_0: 3 - 4
  6440. addl %edx, %r11d
  6441. rorxl $2, %r12d, %edx
  6442. xorl %r10d, %eax
  6443. xorl %edx, %ecx
  6444. rorxl $22, %r12d, %edx
  6445. addl %eax, %r11d
  6446. vpsrld $3, %xmm5, %xmm8
  6447. vpor %xmm6, %xmm7, %xmm7
  6448. # rnd_0: 5 - 7
  6449. xorl %ecx, %edx
  6450. movl %r13d, %eax
  6451. addl %r11d, %r15d
  6452. xorl %r12d, %eax
  6453. addl %edx, %r11d
  6454. andl %eax, %ebx
  6455. xorl %r13d, %ebx
  6456. rorxl $6, %r15d, %edx
  6457. addl %ebx, %r11d
  6458. # rnd_1: 0 - 0
  6459. movl %r8d, %ebx
  6460. rorxl $11, %r15d, %ecx
  6461. addl 20(%rsp), %r10d
  6462. vpsrld $18, %xmm5, %xmm6
  6463. # rnd_1: 1 - 1
  6464. xorl %edx, %ecx
  6465. xorl %r9d, %ebx
  6466. rorxl $25, %r15d, %edx
  6467. vpslld $14, %xmm5, %xmm5
  6468. # rnd_1: 2 - 2
  6469. andl %r15d, %ebx
  6470. xorl %ecx, %edx
  6471. rorxl $13, %r11d, %ecx
  6472. vpxor %xmm5, %xmm7, %xmm7
  6473. # rnd_1: 3 - 3
  6474. addl %edx, %r10d
  6475. rorxl $2, %r11d, %edx
  6476. xorl %r9d, %ebx
  6477. vpxor %xmm6, %xmm7, %xmm7
  6478. # rnd_1: 4 - 4
  6479. xorl %edx, %ecx
  6480. rorxl $22, %r11d, %edx
  6481. addl %ebx, %r10d
  6482. vpshufd $0xfa, %xmm0, %xmm6
  6483. # rnd_1: 5 - 5
  6484. xorl %ecx, %edx
  6485. movl %r12d, %ebx
  6486. addl %r10d, %r14d
  6487. vpxor %xmm8, %xmm7, %xmm5
  6488. # rnd_1: 6 - 6
  6489. xorl %r11d, %ebx
  6490. addl %edx, %r10d
  6491. andl %ebx, %eax
  6492. vpsrld $10, %xmm6, %xmm8
  6493. # rnd_1: 7 - 7
  6494. xorl %r12d, %eax
  6495. rorxl $6, %r14d, %edx
  6496. addl %eax, %r10d
  6497. # rnd_0: 0 - 0
  6498. movl %r15d, %eax
  6499. rorxl $11, %r14d, %ecx
  6500. addl 24(%rsp), %r9d
  6501. vpsrlq $19, %xmm6, %xmm7
  6502. # rnd_0: 1 - 1
  6503. xorl %edx, %ecx
  6504. xorl %r8d, %eax
  6505. rorxl $25, %r14d, %edx
  6506. vpsrlq $0x11, %xmm6, %xmm6
  6507. vpaddd %xmm1, %xmm4, %xmm4
  6508. # rnd_0: 2 - 2
  6509. andl %r14d, %eax
  6510. xorl %ecx, %edx
  6511. rorxl $13, %r10d, %ecx
  6512. vpaddd %xmm5, %xmm4, %xmm4
  6513. # rnd_0: 3 - 3
  6514. addl %edx, %r9d
  6515. rorxl $2, %r10d, %edx
  6516. xorl %r8d, %eax
  6517. vpxor %xmm7, %xmm6, %xmm6
  6518. # rnd_0: 4 - 4
  6519. xorl %edx, %ecx
  6520. rorxl $22, %r10d, %edx
  6521. addl %eax, %r9d
  6522. vpxor %xmm6, %xmm8, %xmm8
  6523. # rnd_0: 5 - 5
  6524. xorl %ecx, %edx
  6525. movl %r11d, %eax
  6526. addl %r9d, %r13d
  6527. vpshufb %xmm11, %xmm8, %xmm8
  6528. # rnd_0: 6 - 6
  6529. xorl %r10d, %eax
  6530. addl %edx, %r9d
  6531. andl %eax, %ebx
  6532. vpaddd %xmm8, %xmm4, %xmm4
  6533. # rnd_0: 7 - 7
  6534. xorl %r11d, %ebx
  6535. rorxl $6, %r13d, %edx
  6536. addl %ebx, %r9d
  6537. # rnd_1: 0 - 0
  6538. movl %r14d, %ebx
  6539. rorxl $11, %r13d, %ecx
  6540. addl 28(%rsp), %r8d
  6541. vpshufd $0x50, %xmm4, %xmm6
  6542. # rnd_1: 1 - 1
  6543. xorl %edx, %ecx
  6544. xorl %r15d, %ebx
  6545. rorxl $25, %r13d, %edx
  6546. vpsrld $10, %xmm6, %xmm9
  6547. # rnd_1: 2 - 2
  6548. andl %r13d, %ebx
  6549. xorl %ecx, %edx
  6550. rorxl $13, %r9d, %ecx
  6551. vpsrlq $19, %xmm6, %xmm7
  6552. # rnd_1: 3 - 3
  6553. addl %edx, %r8d
  6554. rorxl $2, %r9d, %edx
  6555. xorl %r15d, %ebx
  6556. vpsrlq $0x11, %xmm6, %xmm6
  6557. # rnd_1: 4 - 4
  6558. xorl %edx, %ecx
  6559. rorxl $22, %r9d, %edx
  6560. addl %ebx, %r8d
  6561. vpxor %xmm7, %xmm6, %xmm6
  6562. # rnd_1: 5 - 5
  6563. xorl %ecx, %edx
  6564. movl %r10d, %ebx
  6565. addl %r8d, %r12d
  6566. vpxor %xmm6, %xmm9, %xmm9
  6567. # rnd_1: 6 - 6
  6568. xorl %r9d, %ebx
  6569. addl %edx, %r8d
  6570. andl %ebx, %eax
  6571. vpshufb %xmm12, %xmm9, %xmm9
  6572. # rnd_1: 7 - 7
  6573. xorl %r10d, %eax
  6574. rorxl $6, %r12d, %edx
  6575. addl %eax, %r8d
  6576. vpaddd %xmm4, %xmm9, %xmm1
  6577. # msg_sched done: 4-7
  6578. # msg_sched: 8-11
  6579. # rnd_0: 0 - 0
  6580. movl %r13d, %eax
  6581. rorxl $11, %r12d, %ecx
  6582. addl 32(%rsp), %r15d
  6583. vpalignr $4, %xmm0, %xmm1, %xmm4
  6584. vpalignr $4, %xmm2, %xmm3, %xmm5
  6585. # rnd_0: 1 - 2
  6586. xorl %edx, %ecx
  6587. xorl %r14d, %eax
  6588. rorxl $25, %r12d, %edx
  6589. andl %r12d, %eax
  6590. xorl %ecx, %edx
  6591. rorxl $13, %r8d, %ecx
  6592. vpsrld $7, %xmm5, %xmm6
  6593. vpslld $25, %xmm5, %xmm7
  6594. # rnd_0: 3 - 4
  6595. addl %edx, %r15d
  6596. rorxl $2, %r8d, %edx
  6597. xorl %r14d, %eax
  6598. xorl %edx, %ecx
  6599. rorxl $22, %r8d, %edx
  6600. addl %eax, %r15d
  6601. vpsrld $3, %xmm5, %xmm8
  6602. vpor %xmm6, %xmm7, %xmm7
  6603. # rnd_0: 5 - 7
  6604. xorl %ecx, %edx
  6605. movl %r9d, %eax
  6606. addl %r15d, %r11d
  6607. xorl %r8d, %eax
  6608. addl %edx, %r15d
  6609. andl %eax, %ebx
  6610. xorl %r9d, %ebx
  6611. rorxl $6, %r11d, %edx
  6612. addl %ebx, %r15d
  6613. # rnd_1: 0 - 0
  6614. movl %r12d, %ebx
  6615. rorxl $11, %r11d, %ecx
  6616. addl 36(%rsp), %r14d
  6617. vpsrld $18, %xmm5, %xmm6
  6618. # rnd_1: 1 - 1
  6619. xorl %edx, %ecx
  6620. xorl %r13d, %ebx
  6621. rorxl $25, %r11d, %edx
  6622. vpslld $14, %xmm5, %xmm5
  6623. # rnd_1: 2 - 2
  6624. andl %r11d, %ebx
  6625. xorl %ecx, %edx
  6626. rorxl $13, %r15d, %ecx
  6627. vpxor %xmm5, %xmm7, %xmm7
  6628. # rnd_1: 3 - 3
  6629. addl %edx, %r14d
  6630. rorxl $2, %r15d, %edx
  6631. xorl %r13d, %ebx
  6632. vpxor %xmm6, %xmm7, %xmm7
  6633. # rnd_1: 4 - 4
  6634. xorl %edx, %ecx
  6635. rorxl $22, %r15d, %edx
  6636. addl %ebx, %r14d
  6637. vpshufd $0xfa, %xmm1, %xmm6
  6638. # rnd_1: 5 - 5
  6639. xorl %ecx, %edx
  6640. movl %r8d, %ebx
  6641. addl %r14d, %r10d
  6642. vpxor %xmm8, %xmm7, %xmm5
  6643. # rnd_1: 6 - 6
  6644. xorl %r15d, %ebx
  6645. addl %edx, %r14d
  6646. andl %ebx, %eax
  6647. vpsrld $10, %xmm6, %xmm8
  6648. # rnd_1: 7 - 7
  6649. xorl %r8d, %eax
  6650. rorxl $6, %r10d, %edx
  6651. addl %eax, %r14d
  6652. # rnd_0: 0 - 0
  6653. movl %r11d, %eax
  6654. rorxl $11, %r10d, %ecx
  6655. addl 40(%rsp), %r13d
  6656. vpsrlq $19, %xmm6, %xmm7
  6657. # rnd_0: 1 - 1
  6658. xorl %edx, %ecx
  6659. xorl %r12d, %eax
  6660. rorxl $25, %r10d, %edx
  6661. vpsrlq $0x11, %xmm6, %xmm6
  6662. vpaddd %xmm2, %xmm4, %xmm4
  6663. # rnd_0: 2 - 2
  6664. andl %r10d, %eax
  6665. xorl %ecx, %edx
  6666. rorxl $13, %r14d, %ecx
  6667. vpaddd %xmm5, %xmm4, %xmm4
  6668. # rnd_0: 3 - 3
  6669. addl %edx, %r13d
  6670. rorxl $2, %r14d, %edx
  6671. xorl %r12d, %eax
  6672. vpxor %xmm7, %xmm6, %xmm6
  6673. # rnd_0: 4 - 4
  6674. xorl %edx, %ecx
  6675. rorxl $22, %r14d, %edx
  6676. addl %eax, %r13d
  6677. vpxor %xmm6, %xmm8, %xmm8
  6678. # rnd_0: 5 - 5
  6679. xorl %ecx, %edx
  6680. movl %r15d, %eax
  6681. addl %r13d, %r9d
  6682. vpshufb %xmm11, %xmm8, %xmm8
  6683. # rnd_0: 6 - 6
  6684. xorl %r14d, %eax
  6685. addl %edx, %r13d
  6686. andl %eax, %ebx
  6687. vpaddd %xmm8, %xmm4, %xmm4
  6688. # rnd_0: 7 - 7
  6689. xorl %r15d, %ebx
  6690. rorxl $6, %r9d, %edx
  6691. addl %ebx, %r13d
  6692. # rnd_1: 0 - 0
  6693. movl %r10d, %ebx
  6694. rorxl $11, %r9d, %ecx
  6695. addl 44(%rsp), %r12d
  6696. vpshufd $0x50, %xmm4, %xmm6
  6697. # rnd_1: 1 - 1
  6698. xorl %edx, %ecx
  6699. xorl %r11d, %ebx
  6700. rorxl $25, %r9d, %edx
  6701. vpsrld $10, %xmm6, %xmm9
  6702. # rnd_1: 2 - 2
  6703. andl %r9d, %ebx
  6704. xorl %ecx, %edx
  6705. rorxl $13, %r13d, %ecx
  6706. vpsrlq $19, %xmm6, %xmm7
  6707. # rnd_1: 3 - 3
  6708. addl %edx, %r12d
  6709. rorxl $2, %r13d, %edx
  6710. xorl %r11d, %ebx
  6711. vpsrlq $0x11, %xmm6, %xmm6
  6712. # rnd_1: 4 - 4
  6713. xorl %edx, %ecx
  6714. rorxl $22, %r13d, %edx
  6715. addl %ebx, %r12d
  6716. vpxor %xmm7, %xmm6, %xmm6
  6717. # rnd_1: 5 - 5
  6718. xorl %ecx, %edx
  6719. movl %r14d, %ebx
  6720. addl %r12d, %r8d
  6721. vpxor %xmm6, %xmm9, %xmm9
  6722. # rnd_1: 6 - 6
  6723. xorl %r13d, %ebx
  6724. addl %edx, %r12d
  6725. andl %ebx, %eax
  6726. vpshufb %xmm12, %xmm9, %xmm9
  6727. # rnd_1: 7 - 7
  6728. xorl %r14d, %eax
  6729. rorxl $6, %r8d, %edx
  6730. addl %eax, %r12d
  6731. vpaddd %xmm4, %xmm9, %xmm2
  6732. # msg_sched done: 8-11
  6733. # msg_sched: 12-15
  6734. # rnd_0: 0 - 0
  6735. movl %r9d, %eax
  6736. rorxl $11, %r8d, %ecx
  6737. addl 48(%rsp), %r11d
  6738. vpalignr $4, %xmm1, %xmm2, %xmm4
  6739. vpalignr $4, %xmm3, %xmm0, %xmm5
  6740. # rnd_0: 1 - 2
  6741. xorl %edx, %ecx
  6742. xorl %r10d, %eax
  6743. rorxl $25, %r8d, %edx
  6744. andl %r8d, %eax
  6745. xorl %ecx, %edx
  6746. rorxl $13, %r12d, %ecx
  6747. vpsrld $7, %xmm5, %xmm6
  6748. vpslld $25, %xmm5, %xmm7
  6749. # rnd_0: 3 - 4
  6750. addl %edx, %r11d
  6751. rorxl $2, %r12d, %edx
  6752. xorl %r10d, %eax
  6753. xorl %edx, %ecx
  6754. rorxl $22, %r12d, %edx
  6755. addl %eax, %r11d
  6756. vpsrld $3, %xmm5, %xmm8
  6757. vpor %xmm6, %xmm7, %xmm7
  6758. # rnd_0: 5 - 7
  6759. xorl %ecx, %edx
  6760. movl %r13d, %eax
  6761. addl %r11d, %r15d
  6762. xorl %r12d, %eax
  6763. addl %edx, %r11d
  6764. andl %eax, %ebx
  6765. xorl %r13d, %ebx
  6766. rorxl $6, %r15d, %edx
  6767. addl %ebx, %r11d
  6768. # rnd_1: 0 - 0
  6769. movl %r8d, %ebx
  6770. rorxl $11, %r15d, %ecx
  6771. addl 52(%rsp), %r10d
  6772. vpsrld $18, %xmm5, %xmm6
  6773. # rnd_1: 1 - 1
  6774. xorl %edx, %ecx
  6775. xorl %r9d, %ebx
  6776. rorxl $25, %r15d, %edx
  6777. vpslld $14, %xmm5, %xmm5
  6778. # rnd_1: 2 - 2
  6779. andl %r15d, %ebx
  6780. xorl %ecx, %edx
  6781. rorxl $13, %r11d, %ecx
  6782. vpxor %xmm5, %xmm7, %xmm7
  6783. # rnd_1: 3 - 3
  6784. addl %edx, %r10d
  6785. rorxl $2, %r11d, %edx
  6786. xorl %r9d, %ebx
  6787. vpxor %xmm6, %xmm7, %xmm7
  6788. # rnd_1: 4 - 4
  6789. xorl %edx, %ecx
  6790. rorxl $22, %r11d, %edx
  6791. addl %ebx, %r10d
  6792. vpshufd $0xfa, %xmm2, %xmm6
  6793. # rnd_1: 5 - 5
  6794. xorl %ecx, %edx
  6795. movl %r12d, %ebx
  6796. addl %r10d, %r14d
  6797. vpxor %xmm8, %xmm7, %xmm5
  6798. # rnd_1: 6 - 6
  6799. xorl %r11d, %ebx
  6800. addl %edx, %r10d
  6801. andl %ebx, %eax
  6802. vpsrld $10, %xmm6, %xmm8
  6803. # rnd_1: 7 - 7
  6804. xorl %r12d, %eax
  6805. rorxl $6, %r14d, %edx
  6806. addl %eax, %r10d
  6807. # rnd_0: 0 - 0
  6808. movl %r15d, %eax
  6809. rorxl $11, %r14d, %ecx
  6810. addl 56(%rsp), %r9d
  6811. vpsrlq $19, %xmm6, %xmm7
  6812. # rnd_0: 1 - 1
  6813. xorl %edx, %ecx
  6814. xorl %r8d, %eax
  6815. rorxl $25, %r14d, %edx
  6816. vpsrlq $0x11, %xmm6, %xmm6
  6817. vpaddd %xmm3, %xmm4, %xmm4
  6818. # rnd_0: 2 - 2
  6819. andl %r14d, %eax
  6820. xorl %ecx, %edx
  6821. rorxl $13, %r10d, %ecx
  6822. vpaddd %xmm5, %xmm4, %xmm4
  6823. # rnd_0: 3 - 3
  6824. addl %edx, %r9d
  6825. rorxl $2, %r10d, %edx
  6826. xorl %r8d, %eax
  6827. vpxor %xmm7, %xmm6, %xmm6
  6828. # rnd_0: 4 - 4
  6829. xorl %edx, %ecx
  6830. rorxl $22, %r10d, %edx
  6831. addl %eax, %r9d
  6832. vpxor %xmm6, %xmm8, %xmm8
  6833. # rnd_0: 5 - 5
  6834. xorl %ecx, %edx
  6835. movl %r11d, %eax
  6836. addl %r9d, %r13d
  6837. vpshufb %xmm11, %xmm8, %xmm8
  6838. # rnd_0: 6 - 6
  6839. xorl %r10d, %eax
  6840. addl %edx, %r9d
  6841. andl %eax, %ebx
  6842. vpaddd %xmm8, %xmm4, %xmm4
  6843. # rnd_0: 7 - 7
  6844. xorl %r11d, %ebx
  6845. rorxl $6, %r13d, %edx
  6846. addl %ebx, %r9d
  6847. # rnd_1: 0 - 0
  6848. movl %r14d, %ebx
  6849. rorxl $11, %r13d, %ecx
  6850. addl 60(%rsp), %r8d
  6851. vpshufd $0x50, %xmm4, %xmm6
  6852. # rnd_1: 1 - 1
  6853. xorl %edx, %ecx
  6854. xorl %r15d, %ebx
  6855. rorxl $25, %r13d, %edx
  6856. vpsrld $10, %xmm6, %xmm9
  6857. # rnd_1: 2 - 2
  6858. andl %r13d, %ebx
  6859. xorl %ecx, %edx
  6860. rorxl $13, %r9d, %ecx
  6861. vpsrlq $19, %xmm6, %xmm7
  6862. # rnd_1: 3 - 3
  6863. addl %edx, %r8d
  6864. rorxl $2, %r9d, %edx
  6865. xorl %r15d, %ebx
  6866. vpsrlq $0x11, %xmm6, %xmm6
  6867. # rnd_1: 4 - 4
  6868. xorl %edx, %ecx
  6869. rorxl $22, %r9d, %edx
  6870. addl %ebx, %r8d
  6871. vpxor %xmm7, %xmm6, %xmm6
  6872. # rnd_1: 5 - 5
  6873. xorl %ecx, %edx
  6874. movl %r10d, %ebx
  6875. addl %r8d, %r12d
  6876. vpxor %xmm6, %xmm9, %xmm9
  6877. # rnd_1: 6 - 6
  6878. xorl %r9d, %ebx
  6879. addl %edx, %r8d
  6880. andl %ebx, %eax
  6881. vpshufb %xmm12, %xmm9, %xmm9
  6882. # rnd_1: 7 - 7
  6883. xorl %r10d, %eax
  6884. rorxl $6, %r12d, %edx
  6885. addl %eax, %r8d
  6886. vpaddd %xmm4, %xmm9, %xmm3
  6887. # msg_sched done: 12-15
  6888. # set_w_k_xfer_4: 12
  6889. vpaddd 192+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  6890. vpaddd 208+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  6891. vmovdqu %xmm4, (%rsp)
  6892. vmovdqu %xmm5, 16(%rsp)
  6893. vpaddd 224+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  6894. vpaddd 240+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  6895. vmovdqu %xmm6, 32(%rsp)
  6896. vmovdqu %xmm7, 48(%rsp)
  6897. xorl %eax, %eax
  6898. # rnd_all_4: 0-3
  6899. rorxl $6, %r12d, %edx
  6900. rorxl $11, %r12d, %ecx
  6901. addl %eax, %r8d
  6902. addl (%rsp), %r15d
  6903. movl %r13d, %eax
  6904. xorl %edx, %ecx
  6905. xorl %r14d, %eax
  6906. rorxl $25, %r12d, %edx
  6907. xorl %ecx, %edx
  6908. andl %r12d, %eax
  6909. addl %edx, %r15d
  6910. rorxl $2, %r8d, %edx
  6911. rorxl $13, %r8d, %ecx
  6912. xorl %r14d, %eax
  6913. xorl %edx, %ecx
  6914. rorxl $22, %r8d, %edx
  6915. addl %eax, %r15d
  6916. xorl %ecx, %edx
  6917. movl %r9d, %eax
  6918. addl %r15d, %r11d
  6919. xorl %r8d, %eax
  6920. andl %eax, %ebx
  6921. addl %edx, %r15d
  6922. xorl %r9d, %ebx
  6923. rorxl $6, %r11d, %edx
  6924. rorxl $11, %r11d, %ecx
  6925. addl %ebx, %r15d
  6926. addl 4(%rsp), %r14d
  6927. movl %r12d, %ebx
  6928. xorl %edx, %ecx
  6929. xorl %r13d, %ebx
  6930. rorxl $25, %r11d, %edx
  6931. xorl %ecx, %edx
  6932. andl %r11d, %ebx
  6933. addl %edx, %r14d
  6934. rorxl $2, %r15d, %edx
  6935. rorxl $13, %r15d, %ecx
  6936. xorl %r13d, %ebx
  6937. xorl %edx, %ecx
  6938. rorxl $22, %r15d, %edx
  6939. addl %ebx, %r14d
  6940. xorl %ecx, %edx
  6941. movl %r8d, %ebx
  6942. addl %r14d, %r10d
  6943. xorl %r15d, %ebx
  6944. andl %ebx, %eax
  6945. addl %edx, %r14d
  6946. xorl %r8d, %eax
  6947. rorxl $6, %r10d, %edx
  6948. rorxl $11, %r10d, %ecx
  6949. addl %eax, %r14d
  6950. addl 8(%rsp), %r13d
  6951. movl %r11d, %eax
  6952. xorl %edx, %ecx
  6953. xorl %r12d, %eax
  6954. rorxl $25, %r10d, %edx
  6955. xorl %ecx, %edx
  6956. andl %r10d, %eax
  6957. addl %edx, %r13d
  6958. rorxl $2, %r14d, %edx
  6959. rorxl $13, %r14d, %ecx
  6960. xorl %r12d, %eax
  6961. xorl %edx, %ecx
  6962. rorxl $22, %r14d, %edx
  6963. addl %eax, %r13d
  6964. xorl %ecx, %edx
  6965. movl %r15d, %eax
  6966. addl %r13d, %r9d
  6967. xorl %r14d, %eax
  6968. andl %eax, %ebx
  6969. addl %edx, %r13d
  6970. xorl %r15d, %ebx
  6971. rorxl $6, %r9d, %edx
  6972. rorxl $11, %r9d, %ecx
  6973. addl %ebx, %r13d
  6974. addl 12(%rsp), %r12d
  6975. movl %r10d, %ebx
  6976. xorl %edx, %ecx
  6977. xorl %r11d, %ebx
  6978. rorxl $25, %r9d, %edx
  6979. xorl %ecx, %edx
  6980. andl %r9d, %ebx
  6981. addl %edx, %r12d
  6982. rorxl $2, %r13d, %edx
  6983. rorxl $13, %r13d, %ecx
  6984. xorl %r11d, %ebx
  6985. xorl %edx, %ecx
  6986. rorxl $22, %r13d, %edx
  6987. addl %ebx, %r12d
  6988. xorl %ecx, %edx
  6989. movl %r14d, %ebx
  6990. addl %r12d, %r8d
  6991. xorl %r13d, %ebx
  6992. andl %ebx, %eax
  6993. addl %edx, %r12d
  6994. xorl %r14d, %eax
  6995. # rnd_all_4: 1-4
  6996. rorxl $6, %r8d, %edx
  6997. rorxl $11, %r8d, %ecx
  6998. addl %eax, %r12d
  6999. addl 16(%rsp), %r11d
  7000. movl %r9d, %eax
  7001. xorl %edx, %ecx
  7002. xorl %r10d, %eax
  7003. rorxl $25, %r8d, %edx
  7004. xorl %ecx, %edx
  7005. andl %r8d, %eax
  7006. addl %edx, %r11d
  7007. rorxl $2, %r12d, %edx
  7008. rorxl $13, %r12d, %ecx
  7009. xorl %r10d, %eax
  7010. xorl %edx, %ecx
  7011. rorxl $22, %r12d, %edx
  7012. addl %eax, %r11d
  7013. xorl %ecx, %edx
  7014. movl %r13d, %eax
  7015. addl %r11d, %r15d
  7016. xorl %r12d, %eax
  7017. andl %eax, %ebx
  7018. addl %edx, %r11d
  7019. xorl %r13d, %ebx
  7020. rorxl $6, %r15d, %edx
  7021. rorxl $11, %r15d, %ecx
  7022. addl %ebx, %r11d
  7023. addl 20(%rsp), %r10d
  7024. movl %r8d, %ebx
  7025. xorl %edx, %ecx
  7026. xorl %r9d, %ebx
  7027. rorxl $25, %r15d, %edx
  7028. xorl %ecx, %edx
  7029. andl %r15d, %ebx
  7030. addl %edx, %r10d
  7031. rorxl $2, %r11d, %edx
  7032. rorxl $13, %r11d, %ecx
  7033. xorl %r9d, %ebx
  7034. xorl %edx, %ecx
  7035. rorxl $22, %r11d, %edx
  7036. addl %ebx, %r10d
  7037. xorl %ecx, %edx
  7038. movl %r12d, %ebx
  7039. addl %r10d, %r14d
  7040. xorl %r11d, %ebx
  7041. andl %ebx, %eax
  7042. addl %edx, %r10d
  7043. xorl %r12d, %eax
  7044. rorxl $6, %r14d, %edx
  7045. rorxl $11, %r14d, %ecx
  7046. addl %eax, %r10d
  7047. addl 24(%rsp), %r9d
  7048. movl %r15d, %eax
  7049. xorl %edx, %ecx
  7050. xorl %r8d, %eax
  7051. rorxl $25, %r14d, %edx
  7052. xorl %ecx, %edx
  7053. andl %r14d, %eax
  7054. addl %edx, %r9d
  7055. rorxl $2, %r10d, %edx
  7056. rorxl $13, %r10d, %ecx
  7057. xorl %r8d, %eax
  7058. xorl %edx, %ecx
  7059. rorxl $22, %r10d, %edx
  7060. addl %eax, %r9d
  7061. xorl %ecx, %edx
  7062. movl %r11d, %eax
  7063. addl %r9d, %r13d
  7064. xorl %r10d, %eax
  7065. andl %eax, %ebx
  7066. addl %edx, %r9d
  7067. xorl %r11d, %ebx
  7068. rorxl $6, %r13d, %edx
  7069. rorxl $11, %r13d, %ecx
  7070. addl %ebx, %r9d
  7071. addl 28(%rsp), %r8d
  7072. movl %r14d, %ebx
  7073. xorl %edx, %ecx
  7074. xorl %r15d, %ebx
  7075. rorxl $25, %r13d, %edx
  7076. xorl %ecx, %edx
  7077. andl %r13d, %ebx
  7078. addl %edx, %r8d
  7079. rorxl $2, %r9d, %edx
  7080. rorxl $13, %r9d, %ecx
  7081. xorl %r15d, %ebx
  7082. xorl %edx, %ecx
  7083. rorxl $22, %r9d, %edx
  7084. addl %ebx, %r8d
  7085. xorl %ecx, %edx
  7086. movl %r10d, %ebx
  7087. addl %r8d, %r12d
  7088. xorl %r9d, %ebx
  7089. andl %ebx, %eax
  7090. addl %edx, %r8d
  7091. xorl %r10d, %eax
  7092. # rnd_all_4: 2-5
  7093. rorxl $6, %r12d, %edx
  7094. rorxl $11, %r12d, %ecx
  7095. addl %eax, %r8d
  7096. addl 32(%rsp), %r15d
  7097. movl %r13d, %eax
  7098. xorl %edx, %ecx
  7099. xorl %r14d, %eax
  7100. rorxl $25, %r12d, %edx
  7101. xorl %ecx, %edx
  7102. andl %r12d, %eax
  7103. addl %edx, %r15d
  7104. rorxl $2, %r8d, %edx
  7105. rorxl $13, %r8d, %ecx
  7106. xorl %r14d, %eax
  7107. xorl %edx, %ecx
  7108. rorxl $22, %r8d, %edx
  7109. addl %eax, %r15d
  7110. xorl %ecx, %edx
  7111. movl %r9d, %eax
  7112. addl %r15d, %r11d
  7113. xorl %r8d, %eax
  7114. andl %eax, %ebx
  7115. addl %edx, %r15d
  7116. xorl %r9d, %ebx
  7117. rorxl $6, %r11d, %edx
  7118. rorxl $11, %r11d, %ecx
  7119. addl %ebx, %r15d
  7120. addl 36(%rsp), %r14d
  7121. movl %r12d, %ebx
  7122. xorl %edx, %ecx
  7123. xorl %r13d, %ebx
  7124. rorxl $25, %r11d, %edx
  7125. xorl %ecx, %edx
  7126. andl %r11d, %ebx
  7127. addl %edx, %r14d
  7128. rorxl $2, %r15d, %edx
  7129. rorxl $13, %r15d, %ecx
  7130. xorl %r13d, %ebx
  7131. xorl %edx, %ecx
  7132. rorxl $22, %r15d, %edx
  7133. addl %ebx, %r14d
  7134. xorl %ecx, %edx
  7135. movl %r8d, %ebx
  7136. addl %r14d, %r10d
  7137. xorl %r15d, %ebx
  7138. andl %ebx, %eax
  7139. addl %edx, %r14d
  7140. xorl %r8d, %eax
  7141. rorxl $6, %r10d, %edx
  7142. rorxl $11, %r10d, %ecx
  7143. addl %eax, %r14d
  7144. addl 40(%rsp), %r13d
  7145. movl %r11d, %eax
  7146. xorl %edx, %ecx
  7147. xorl %r12d, %eax
  7148. rorxl $25, %r10d, %edx
  7149. xorl %ecx, %edx
  7150. andl %r10d, %eax
  7151. addl %edx, %r13d
  7152. rorxl $2, %r14d, %edx
  7153. rorxl $13, %r14d, %ecx
  7154. xorl %r12d, %eax
  7155. xorl %edx, %ecx
  7156. rorxl $22, %r14d, %edx
  7157. addl %eax, %r13d
  7158. xorl %ecx, %edx
  7159. movl %r15d, %eax
  7160. addl %r13d, %r9d
  7161. xorl %r14d, %eax
  7162. andl %eax, %ebx
  7163. addl %edx, %r13d
  7164. xorl %r15d, %ebx
  7165. rorxl $6, %r9d, %edx
  7166. rorxl $11, %r9d, %ecx
  7167. addl %ebx, %r13d
  7168. addl 44(%rsp), %r12d
  7169. movl %r10d, %ebx
  7170. xorl %edx, %ecx
  7171. xorl %r11d, %ebx
  7172. rorxl $25, %r9d, %edx
  7173. xorl %ecx, %edx
  7174. andl %r9d, %ebx
  7175. addl %edx, %r12d
  7176. rorxl $2, %r13d, %edx
  7177. rorxl $13, %r13d, %ecx
  7178. xorl %r11d, %ebx
  7179. xorl %edx, %ecx
  7180. rorxl $22, %r13d, %edx
  7181. addl %ebx, %r12d
  7182. xorl %ecx, %edx
  7183. movl %r14d, %ebx
  7184. addl %r12d, %r8d
  7185. xorl %r13d, %ebx
  7186. andl %ebx, %eax
  7187. addl %edx, %r12d
  7188. xorl %r14d, %eax
  7189. # rnd_all_4: 3-6
  7190. rorxl $6, %r8d, %edx
  7191. rorxl $11, %r8d, %ecx
  7192. addl %eax, %r12d
  7193. addl 48(%rsp), %r11d
  7194. movl %r9d, %eax
  7195. xorl %edx, %ecx
  7196. xorl %r10d, %eax
  7197. rorxl $25, %r8d, %edx
  7198. xorl %ecx, %edx
  7199. andl %r8d, %eax
  7200. addl %edx, %r11d
  7201. rorxl $2, %r12d, %edx
  7202. rorxl $13, %r12d, %ecx
  7203. xorl %r10d, %eax
  7204. xorl %edx, %ecx
  7205. rorxl $22, %r12d, %edx
  7206. addl %eax, %r11d
  7207. xorl %ecx, %edx
  7208. movl %r13d, %eax
  7209. addl %r11d, %r15d
  7210. xorl %r12d, %eax
  7211. andl %eax, %ebx
  7212. addl %edx, %r11d
  7213. xorl %r13d, %ebx
  7214. rorxl $6, %r15d, %edx
  7215. rorxl $11, %r15d, %ecx
  7216. addl %ebx, %r11d
  7217. addl 52(%rsp), %r10d
  7218. movl %r8d, %ebx
  7219. xorl %edx, %ecx
  7220. xorl %r9d, %ebx
  7221. rorxl $25, %r15d, %edx
  7222. xorl %ecx, %edx
  7223. andl %r15d, %ebx
  7224. addl %edx, %r10d
  7225. rorxl $2, %r11d, %edx
  7226. rorxl $13, %r11d, %ecx
  7227. xorl %r9d, %ebx
  7228. xorl %edx, %ecx
  7229. rorxl $22, %r11d, %edx
  7230. addl %ebx, %r10d
  7231. xorl %ecx, %edx
  7232. movl %r12d, %ebx
  7233. addl %r10d, %r14d
  7234. xorl %r11d, %ebx
  7235. andl %ebx, %eax
  7236. addl %edx, %r10d
  7237. xorl %r12d, %eax
  7238. rorxl $6, %r14d, %edx
  7239. rorxl $11, %r14d, %ecx
  7240. addl %eax, %r10d
  7241. addl 56(%rsp), %r9d
  7242. movl %r15d, %eax
  7243. xorl %edx, %ecx
  7244. xorl %r8d, %eax
  7245. rorxl $25, %r14d, %edx
  7246. xorl %ecx, %edx
  7247. andl %r14d, %eax
  7248. addl %edx, %r9d
  7249. rorxl $2, %r10d, %edx
  7250. rorxl $13, %r10d, %ecx
  7251. xorl %r8d, %eax
  7252. xorl %edx, %ecx
  7253. rorxl $22, %r10d, %edx
  7254. addl %eax, %r9d
  7255. xorl %ecx, %edx
  7256. movl %r11d, %eax
  7257. addl %r9d, %r13d
  7258. xorl %r10d, %eax
  7259. andl %eax, %ebx
  7260. addl %edx, %r9d
  7261. xorl %r11d, %ebx
  7262. rorxl $6, %r13d, %edx
  7263. rorxl $11, %r13d, %ecx
  7264. addl %ebx, %r9d
  7265. addl 60(%rsp), %r8d
  7266. movl %r14d, %ebx
  7267. xorl %edx, %ecx
  7268. xorl %r15d, %ebx
  7269. rorxl $25, %r13d, %edx
  7270. xorl %ecx, %edx
  7271. andl %r13d, %ebx
  7272. addl %edx, %r8d
  7273. rorxl $2, %r9d, %edx
  7274. rorxl $13, %r9d, %ecx
  7275. xorl %r15d, %ebx
  7276. xorl %edx, %ecx
  7277. rorxl $22, %r9d, %edx
  7278. addl %ebx, %r8d
  7279. xorl %ecx, %edx
  7280. movl %r10d, %ebx
  7281. addl %r8d, %r12d
  7282. xorl %r9d, %ebx
  7283. andl %ebx, %eax
  7284. addl %edx, %r8d
  7285. xorl %r10d, %eax
  7286. addl %eax, %r8d
  7287. addl %r8d, (%rdi)
  7288. addl %r9d, 4(%rdi)
  7289. addl %r10d, 8(%rdi)
  7290. addl %r11d, 12(%rdi)
  7291. addl %r12d, 16(%rdi)
  7292. addl %r13d, 20(%rdi)
  7293. addl %r14d, 24(%rdi)
  7294. addl %r15d, 28(%rdi)
  7295. xorq %rax, %rax
  7296. vzeroupper
  7297. addq $0x40, %rsp
  7298. popq %r15
  7299. popq %r14
  7300. popq %r13
  7301. popq %r12
  7302. popq %rbx
  7303. repz retq
  7304. #ifndef __APPLE__
  7305. .size Transform_Sha256_AVX1_RORX,.-Transform_Sha256_AVX1_RORX
  7306. #endif /* __APPLE__ */
  7307. #ifndef __APPLE__
  7308. .text
  7309. .globl Transform_Sha256_AVX1_RORX_Len
  7310. .type Transform_Sha256_AVX1_RORX_Len,@function
  7311. .align 16
  7312. Transform_Sha256_AVX1_RORX_Len:
  7313. #else
  7314. .section __TEXT,__text
  7315. .globl _Transform_Sha256_AVX1_RORX_Len
  7316. .p2align 4
  7317. _Transform_Sha256_AVX1_RORX_Len:
  7318. #endif /* __APPLE__ */
  7319. pushq %rbx
  7320. pushq %r12
  7321. pushq %r13
  7322. pushq %r14
  7323. pushq %r15
  7324. pushq %rbp
  7325. movq %rsi, %rbp
  7326. movq %rdx, %rsi
  7327. subq $0x40, %rsp
  7328. vmovdqa L_avx1_rorx_sha256_flip_mask(%rip), %xmm13
  7329. vmovdqa L_avx1_rorx_sha256_shuf_00BA(%rip), %xmm11
  7330. vmovdqa L_avx1_rorx_sha256_shuf_DC00(%rip), %xmm12
  7331. movl (%rdi), %r8d
  7332. movl 4(%rdi), %r9d
  7333. movl 8(%rdi), %r10d
  7334. movl 12(%rdi), %r11d
  7335. movl 16(%rdi), %r12d
  7336. movl 20(%rdi), %r13d
  7337. movl 24(%rdi), %r14d
  7338. movl 28(%rdi), %r15d
  7339. # Start of loop processing a block
  7340. L_sha256_len_avx1_len_rorx_start:
  7341. # X0, X1, X2, X3 = W[0..15]
  7342. vmovdqu (%rbp), %xmm0
  7343. vmovdqu 16(%rbp), %xmm1
  7344. vpshufb %xmm13, %xmm0, %xmm0
  7345. vpshufb %xmm13, %xmm1, %xmm1
  7346. vmovdqu 32(%rbp), %xmm2
  7347. vmovdqu 48(%rbp), %xmm3
  7348. vpshufb %xmm13, %xmm2, %xmm2
  7349. vpshufb %xmm13, %xmm3, %xmm3
  7350. # set_w_k_xfer_4: 0
  7351. vpaddd 0+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  7352. vpaddd 16+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  7353. vmovdqu %xmm4, (%rsp)
  7354. vmovdqu %xmm5, 16(%rsp)
  7355. vpaddd 32+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  7356. vpaddd 48+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  7357. vmovdqu %xmm6, 32(%rsp)
  7358. vmovdqu %xmm7, 48(%rsp)
  7359. movl %r9d, %ebx
  7360. rorxl $6, %r12d, %edx
  7361. xorl %r10d, %ebx
  7362. # msg_sched: 0-3
  7363. # rnd_0: 0 - 0
  7364. movl %r13d, %eax
  7365. rorxl $11, %r12d, %ecx
  7366. addl (%rsp), %r15d
  7367. vpalignr $4, %xmm2, %xmm3, %xmm4
  7368. vpalignr $4, %xmm0, %xmm1, %xmm5
  7369. # rnd_0: 1 - 2
  7370. xorl %edx, %ecx
  7371. xorl %r14d, %eax
  7372. rorxl $25, %r12d, %edx
  7373. andl %r12d, %eax
  7374. xorl %ecx, %edx
  7375. rorxl $13, %r8d, %ecx
  7376. vpsrld $7, %xmm5, %xmm6
  7377. vpslld $25, %xmm5, %xmm7
  7378. # rnd_0: 3 - 4
  7379. addl %edx, %r15d
  7380. rorxl $2, %r8d, %edx
  7381. xorl %r14d, %eax
  7382. xorl %edx, %ecx
  7383. rorxl $22, %r8d, %edx
  7384. addl %eax, %r15d
  7385. vpsrld $3, %xmm5, %xmm8
  7386. vpor %xmm6, %xmm7, %xmm7
  7387. # rnd_0: 5 - 7
  7388. xorl %ecx, %edx
  7389. movl %r9d, %eax
  7390. addl %r15d, %r11d
  7391. xorl %r8d, %eax
  7392. addl %edx, %r15d
  7393. andl %eax, %ebx
  7394. xorl %r9d, %ebx
  7395. rorxl $6, %r11d, %edx
  7396. addl %ebx, %r15d
  7397. # rnd_1: 0 - 0
  7398. movl %r12d, %ebx
  7399. rorxl $11, %r11d, %ecx
  7400. addl 4(%rsp), %r14d
  7401. vpsrld $18, %xmm5, %xmm6
  7402. # rnd_1: 1 - 1
  7403. xorl %edx, %ecx
  7404. xorl %r13d, %ebx
  7405. rorxl $25, %r11d, %edx
  7406. vpslld $14, %xmm5, %xmm5
  7407. # rnd_1: 2 - 2
  7408. andl %r11d, %ebx
  7409. xorl %ecx, %edx
  7410. rorxl $13, %r15d, %ecx
  7411. vpxor %xmm5, %xmm7, %xmm7
  7412. # rnd_1: 3 - 3
  7413. addl %edx, %r14d
  7414. rorxl $2, %r15d, %edx
  7415. xorl %r13d, %ebx
  7416. vpxor %xmm6, %xmm7, %xmm7
  7417. # rnd_1: 4 - 4
  7418. xorl %edx, %ecx
  7419. rorxl $22, %r15d, %edx
  7420. addl %ebx, %r14d
  7421. vpshufd $0xfa, %xmm3, %xmm6
  7422. # rnd_1: 5 - 5
  7423. xorl %ecx, %edx
  7424. movl %r8d, %ebx
  7425. addl %r14d, %r10d
  7426. vpxor %xmm8, %xmm7, %xmm5
  7427. # rnd_1: 6 - 6
  7428. xorl %r15d, %ebx
  7429. addl %edx, %r14d
  7430. andl %ebx, %eax
  7431. vpsrld $10, %xmm6, %xmm8
  7432. # rnd_1: 7 - 7
  7433. xorl %r8d, %eax
  7434. rorxl $6, %r10d, %edx
  7435. addl %eax, %r14d
  7436. # rnd_0: 0 - 0
  7437. movl %r11d, %eax
  7438. rorxl $11, %r10d, %ecx
  7439. addl 8(%rsp), %r13d
  7440. vpsrlq $19, %xmm6, %xmm7
  7441. # rnd_0: 1 - 1
  7442. xorl %edx, %ecx
  7443. xorl %r12d, %eax
  7444. rorxl $25, %r10d, %edx
  7445. vpsrlq $0x11, %xmm6, %xmm6
  7446. vpaddd %xmm0, %xmm4, %xmm4
  7447. # rnd_0: 2 - 2
  7448. andl %r10d, %eax
  7449. xorl %ecx, %edx
  7450. rorxl $13, %r14d, %ecx
  7451. vpaddd %xmm5, %xmm4, %xmm4
  7452. # rnd_0: 3 - 3
  7453. addl %edx, %r13d
  7454. rorxl $2, %r14d, %edx
  7455. xorl %r12d, %eax
  7456. vpxor %xmm7, %xmm6, %xmm6
  7457. # rnd_0: 4 - 4
  7458. xorl %edx, %ecx
  7459. rorxl $22, %r14d, %edx
  7460. addl %eax, %r13d
  7461. vpxor %xmm6, %xmm8, %xmm8
  7462. # rnd_0: 5 - 5
  7463. xorl %ecx, %edx
  7464. movl %r15d, %eax
  7465. addl %r13d, %r9d
  7466. vpshufb %xmm11, %xmm8, %xmm8
  7467. # rnd_0: 6 - 6
  7468. xorl %r14d, %eax
  7469. addl %edx, %r13d
  7470. andl %eax, %ebx
  7471. vpaddd %xmm8, %xmm4, %xmm4
  7472. # rnd_0: 7 - 7
  7473. xorl %r15d, %ebx
  7474. rorxl $6, %r9d, %edx
  7475. addl %ebx, %r13d
  7476. # rnd_1: 0 - 0
  7477. movl %r10d, %ebx
  7478. rorxl $11, %r9d, %ecx
  7479. addl 12(%rsp), %r12d
  7480. vpshufd $0x50, %xmm4, %xmm6
  7481. # rnd_1: 1 - 1
  7482. xorl %edx, %ecx
  7483. xorl %r11d, %ebx
  7484. rorxl $25, %r9d, %edx
  7485. vpsrld $10, %xmm6, %xmm9
  7486. # rnd_1: 2 - 2
  7487. andl %r9d, %ebx
  7488. xorl %ecx, %edx
  7489. rorxl $13, %r13d, %ecx
  7490. vpsrlq $19, %xmm6, %xmm7
  7491. # rnd_1: 3 - 3
  7492. addl %edx, %r12d
  7493. rorxl $2, %r13d, %edx
  7494. xorl %r11d, %ebx
  7495. vpsrlq $0x11, %xmm6, %xmm6
  7496. # rnd_1: 4 - 4
  7497. xorl %edx, %ecx
  7498. rorxl $22, %r13d, %edx
  7499. addl %ebx, %r12d
  7500. vpxor %xmm7, %xmm6, %xmm6
  7501. # rnd_1: 5 - 5
  7502. xorl %ecx, %edx
  7503. movl %r14d, %ebx
  7504. addl %r12d, %r8d
  7505. vpxor %xmm6, %xmm9, %xmm9
  7506. # rnd_1: 6 - 6
  7507. xorl %r13d, %ebx
  7508. addl %edx, %r12d
  7509. andl %ebx, %eax
  7510. vpshufb %xmm12, %xmm9, %xmm9
  7511. # rnd_1: 7 - 7
  7512. xorl %r14d, %eax
  7513. rorxl $6, %r8d, %edx
  7514. addl %eax, %r12d
  7515. vpaddd %xmm4, %xmm9, %xmm0
  7516. # msg_sched done: 0-3
  7517. # msg_sched: 4-7
  7518. # rnd_0: 0 - 0
  7519. movl %r9d, %eax
  7520. rorxl $11, %r8d, %ecx
  7521. addl 16(%rsp), %r11d
  7522. vpalignr $4, %xmm3, %xmm0, %xmm4
  7523. vpalignr $4, %xmm1, %xmm2, %xmm5
  7524. # rnd_0: 1 - 2
  7525. xorl %edx, %ecx
  7526. xorl %r10d, %eax
  7527. rorxl $25, %r8d, %edx
  7528. andl %r8d, %eax
  7529. xorl %ecx, %edx
  7530. rorxl $13, %r12d, %ecx
  7531. vpsrld $7, %xmm5, %xmm6
  7532. vpslld $25, %xmm5, %xmm7
  7533. # rnd_0: 3 - 4
  7534. addl %edx, %r11d
  7535. rorxl $2, %r12d, %edx
  7536. xorl %r10d, %eax
  7537. xorl %edx, %ecx
  7538. rorxl $22, %r12d, %edx
  7539. addl %eax, %r11d
  7540. vpsrld $3, %xmm5, %xmm8
  7541. vpor %xmm6, %xmm7, %xmm7
  7542. # rnd_0: 5 - 7
  7543. xorl %ecx, %edx
  7544. movl %r13d, %eax
  7545. addl %r11d, %r15d
  7546. xorl %r12d, %eax
  7547. addl %edx, %r11d
  7548. andl %eax, %ebx
  7549. xorl %r13d, %ebx
  7550. rorxl $6, %r15d, %edx
  7551. addl %ebx, %r11d
  7552. # rnd_1: 0 - 0
  7553. movl %r8d, %ebx
  7554. rorxl $11, %r15d, %ecx
  7555. addl 20(%rsp), %r10d
  7556. vpsrld $18, %xmm5, %xmm6
  7557. # rnd_1: 1 - 1
  7558. xorl %edx, %ecx
  7559. xorl %r9d, %ebx
  7560. rorxl $25, %r15d, %edx
  7561. vpslld $14, %xmm5, %xmm5
  7562. # rnd_1: 2 - 2
  7563. andl %r15d, %ebx
  7564. xorl %ecx, %edx
  7565. rorxl $13, %r11d, %ecx
  7566. vpxor %xmm5, %xmm7, %xmm7
  7567. # rnd_1: 3 - 3
  7568. addl %edx, %r10d
  7569. rorxl $2, %r11d, %edx
  7570. xorl %r9d, %ebx
  7571. vpxor %xmm6, %xmm7, %xmm7
  7572. # rnd_1: 4 - 4
  7573. xorl %edx, %ecx
  7574. rorxl $22, %r11d, %edx
  7575. addl %ebx, %r10d
  7576. vpshufd $0xfa, %xmm0, %xmm6
  7577. # rnd_1: 5 - 5
  7578. xorl %ecx, %edx
  7579. movl %r12d, %ebx
  7580. addl %r10d, %r14d
  7581. vpxor %xmm8, %xmm7, %xmm5
  7582. # rnd_1: 6 - 6
  7583. xorl %r11d, %ebx
  7584. addl %edx, %r10d
  7585. andl %ebx, %eax
  7586. vpsrld $10, %xmm6, %xmm8
  7587. # rnd_1: 7 - 7
  7588. xorl %r12d, %eax
  7589. rorxl $6, %r14d, %edx
  7590. addl %eax, %r10d
  7591. # rnd_0: 0 - 0
  7592. movl %r15d, %eax
  7593. rorxl $11, %r14d, %ecx
  7594. addl 24(%rsp), %r9d
  7595. vpsrlq $19, %xmm6, %xmm7
  7596. # rnd_0: 1 - 1
  7597. xorl %edx, %ecx
  7598. xorl %r8d, %eax
  7599. rorxl $25, %r14d, %edx
  7600. vpsrlq $0x11, %xmm6, %xmm6
  7601. vpaddd %xmm1, %xmm4, %xmm4
  7602. # rnd_0: 2 - 2
  7603. andl %r14d, %eax
  7604. xorl %ecx, %edx
  7605. rorxl $13, %r10d, %ecx
  7606. vpaddd %xmm5, %xmm4, %xmm4
  7607. # rnd_0: 3 - 3
  7608. addl %edx, %r9d
  7609. rorxl $2, %r10d, %edx
  7610. xorl %r8d, %eax
  7611. vpxor %xmm7, %xmm6, %xmm6
  7612. # rnd_0: 4 - 4
  7613. xorl %edx, %ecx
  7614. rorxl $22, %r10d, %edx
  7615. addl %eax, %r9d
  7616. vpxor %xmm6, %xmm8, %xmm8
  7617. # rnd_0: 5 - 5
  7618. xorl %ecx, %edx
  7619. movl %r11d, %eax
  7620. addl %r9d, %r13d
  7621. vpshufb %xmm11, %xmm8, %xmm8
  7622. # rnd_0: 6 - 6
  7623. xorl %r10d, %eax
  7624. addl %edx, %r9d
  7625. andl %eax, %ebx
  7626. vpaddd %xmm8, %xmm4, %xmm4
  7627. # rnd_0: 7 - 7
  7628. xorl %r11d, %ebx
  7629. rorxl $6, %r13d, %edx
  7630. addl %ebx, %r9d
  7631. # rnd_1: 0 - 0
  7632. movl %r14d, %ebx
  7633. rorxl $11, %r13d, %ecx
  7634. addl 28(%rsp), %r8d
  7635. vpshufd $0x50, %xmm4, %xmm6
  7636. # rnd_1: 1 - 1
  7637. xorl %edx, %ecx
  7638. xorl %r15d, %ebx
  7639. rorxl $25, %r13d, %edx
  7640. vpsrld $10, %xmm6, %xmm9
  7641. # rnd_1: 2 - 2
  7642. andl %r13d, %ebx
  7643. xorl %ecx, %edx
  7644. rorxl $13, %r9d, %ecx
  7645. vpsrlq $19, %xmm6, %xmm7
  7646. # rnd_1: 3 - 3
  7647. addl %edx, %r8d
  7648. rorxl $2, %r9d, %edx
  7649. xorl %r15d, %ebx
  7650. vpsrlq $0x11, %xmm6, %xmm6
  7651. # rnd_1: 4 - 4
  7652. xorl %edx, %ecx
  7653. rorxl $22, %r9d, %edx
  7654. addl %ebx, %r8d
  7655. vpxor %xmm7, %xmm6, %xmm6
  7656. # rnd_1: 5 - 5
  7657. xorl %ecx, %edx
  7658. movl %r10d, %ebx
  7659. addl %r8d, %r12d
  7660. vpxor %xmm6, %xmm9, %xmm9
  7661. # rnd_1: 6 - 6
  7662. xorl %r9d, %ebx
  7663. addl %edx, %r8d
  7664. andl %ebx, %eax
  7665. vpshufb %xmm12, %xmm9, %xmm9
  7666. # rnd_1: 7 - 7
  7667. xorl %r10d, %eax
  7668. rorxl $6, %r12d, %edx
  7669. addl %eax, %r8d
  7670. vpaddd %xmm4, %xmm9, %xmm1
  7671. # msg_sched done: 4-7
  7672. # msg_sched: 8-11
  7673. # rnd_0: 0 - 0
  7674. movl %r13d, %eax
  7675. rorxl $11, %r12d, %ecx
  7676. addl 32(%rsp), %r15d
  7677. vpalignr $4, %xmm0, %xmm1, %xmm4
  7678. vpalignr $4, %xmm2, %xmm3, %xmm5
  7679. # rnd_0: 1 - 2
  7680. xorl %edx, %ecx
  7681. xorl %r14d, %eax
  7682. rorxl $25, %r12d, %edx
  7683. andl %r12d, %eax
  7684. xorl %ecx, %edx
  7685. rorxl $13, %r8d, %ecx
  7686. vpsrld $7, %xmm5, %xmm6
  7687. vpslld $25, %xmm5, %xmm7
  7688. # rnd_0: 3 - 4
  7689. addl %edx, %r15d
  7690. rorxl $2, %r8d, %edx
  7691. xorl %r14d, %eax
  7692. xorl %edx, %ecx
  7693. rorxl $22, %r8d, %edx
  7694. addl %eax, %r15d
  7695. vpsrld $3, %xmm5, %xmm8
  7696. vpor %xmm6, %xmm7, %xmm7
  7697. # rnd_0: 5 - 7
  7698. xorl %ecx, %edx
  7699. movl %r9d, %eax
  7700. addl %r15d, %r11d
  7701. xorl %r8d, %eax
  7702. addl %edx, %r15d
  7703. andl %eax, %ebx
  7704. xorl %r9d, %ebx
  7705. rorxl $6, %r11d, %edx
  7706. addl %ebx, %r15d
  7707. # rnd_1: 0 - 0
  7708. movl %r12d, %ebx
  7709. rorxl $11, %r11d, %ecx
  7710. addl 36(%rsp), %r14d
  7711. vpsrld $18, %xmm5, %xmm6
  7712. # rnd_1: 1 - 1
  7713. xorl %edx, %ecx
  7714. xorl %r13d, %ebx
  7715. rorxl $25, %r11d, %edx
  7716. vpslld $14, %xmm5, %xmm5
  7717. # rnd_1: 2 - 2
  7718. andl %r11d, %ebx
  7719. xorl %ecx, %edx
  7720. rorxl $13, %r15d, %ecx
  7721. vpxor %xmm5, %xmm7, %xmm7
  7722. # rnd_1: 3 - 3
  7723. addl %edx, %r14d
  7724. rorxl $2, %r15d, %edx
  7725. xorl %r13d, %ebx
  7726. vpxor %xmm6, %xmm7, %xmm7
  7727. # rnd_1: 4 - 4
  7728. xorl %edx, %ecx
  7729. rorxl $22, %r15d, %edx
  7730. addl %ebx, %r14d
  7731. vpshufd $0xfa, %xmm1, %xmm6
  7732. # rnd_1: 5 - 5
  7733. xorl %ecx, %edx
  7734. movl %r8d, %ebx
  7735. addl %r14d, %r10d
  7736. vpxor %xmm8, %xmm7, %xmm5
  7737. # rnd_1: 6 - 6
  7738. xorl %r15d, %ebx
  7739. addl %edx, %r14d
  7740. andl %ebx, %eax
  7741. vpsrld $10, %xmm6, %xmm8
  7742. # rnd_1: 7 - 7
  7743. xorl %r8d, %eax
  7744. rorxl $6, %r10d, %edx
  7745. addl %eax, %r14d
  7746. # rnd_0: 0 - 0
  7747. movl %r11d, %eax
  7748. rorxl $11, %r10d, %ecx
  7749. addl 40(%rsp), %r13d
  7750. vpsrlq $19, %xmm6, %xmm7
  7751. # rnd_0: 1 - 1
  7752. xorl %edx, %ecx
  7753. xorl %r12d, %eax
  7754. rorxl $25, %r10d, %edx
  7755. vpsrlq $0x11, %xmm6, %xmm6
  7756. vpaddd %xmm2, %xmm4, %xmm4
  7757. # rnd_0: 2 - 2
  7758. andl %r10d, %eax
  7759. xorl %ecx, %edx
  7760. rorxl $13, %r14d, %ecx
  7761. vpaddd %xmm5, %xmm4, %xmm4
  7762. # rnd_0: 3 - 3
  7763. addl %edx, %r13d
  7764. rorxl $2, %r14d, %edx
  7765. xorl %r12d, %eax
  7766. vpxor %xmm7, %xmm6, %xmm6
  7767. # rnd_0: 4 - 4
  7768. xorl %edx, %ecx
  7769. rorxl $22, %r14d, %edx
  7770. addl %eax, %r13d
  7771. vpxor %xmm6, %xmm8, %xmm8
  7772. # rnd_0: 5 - 5
  7773. xorl %ecx, %edx
  7774. movl %r15d, %eax
  7775. addl %r13d, %r9d
  7776. vpshufb %xmm11, %xmm8, %xmm8
  7777. # rnd_0: 6 - 6
  7778. xorl %r14d, %eax
  7779. addl %edx, %r13d
  7780. andl %eax, %ebx
  7781. vpaddd %xmm8, %xmm4, %xmm4
  7782. # rnd_0: 7 - 7
  7783. xorl %r15d, %ebx
  7784. rorxl $6, %r9d, %edx
  7785. addl %ebx, %r13d
  7786. # rnd_1: 0 - 0
  7787. movl %r10d, %ebx
  7788. rorxl $11, %r9d, %ecx
  7789. addl 44(%rsp), %r12d
  7790. vpshufd $0x50, %xmm4, %xmm6
  7791. # rnd_1: 1 - 1
  7792. xorl %edx, %ecx
  7793. xorl %r11d, %ebx
  7794. rorxl $25, %r9d, %edx
  7795. vpsrld $10, %xmm6, %xmm9
  7796. # rnd_1: 2 - 2
  7797. andl %r9d, %ebx
  7798. xorl %ecx, %edx
  7799. rorxl $13, %r13d, %ecx
  7800. vpsrlq $19, %xmm6, %xmm7
  7801. # rnd_1: 3 - 3
  7802. addl %edx, %r12d
  7803. rorxl $2, %r13d, %edx
  7804. xorl %r11d, %ebx
  7805. vpsrlq $0x11, %xmm6, %xmm6
  7806. # rnd_1: 4 - 4
  7807. xorl %edx, %ecx
  7808. rorxl $22, %r13d, %edx
  7809. addl %ebx, %r12d
  7810. vpxor %xmm7, %xmm6, %xmm6
  7811. # rnd_1: 5 - 5
  7812. xorl %ecx, %edx
  7813. movl %r14d, %ebx
  7814. addl %r12d, %r8d
  7815. vpxor %xmm6, %xmm9, %xmm9
  7816. # rnd_1: 6 - 6
  7817. xorl %r13d, %ebx
  7818. addl %edx, %r12d
  7819. andl %ebx, %eax
  7820. vpshufb %xmm12, %xmm9, %xmm9
  7821. # rnd_1: 7 - 7
  7822. xorl %r14d, %eax
  7823. rorxl $6, %r8d, %edx
  7824. addl %eax, %r12d
  7825. vpaddd %xmm4, %xmm9, %xmm2
  7826. # msg_sched done: 8-11
  7827. # msg_sched: 12-15
  7828. # rnd_0: 0 - 0
  7829. movl %r9d, %eax
  7830. rorxl $11, %r8d, %ecx
  7831. addl 48(%rsp), %r11d
  7832. vpalignr $4, %xmm1, %xmm2, %xmm4
  7833. vpalignr $4, %xmm3, %xmm0, %xmm5
  7834. # rnd_0: 1 - 2
  7835. xorl %edx, %ecx
  7836. xorl %r10d, %eax
  7837. rorxl $25, %r8d, %edx
  7838. andl %r8d, %eax
  7839. xorl %ecx, %edx
  7840. rorxl $13, %r12d, %ecx
  7841. vpsrld $7, %xmm5, %xmm6
  7842. vpslld $25, %xmm5, %xmm7
  7843. # rnd_0: 3 - 4
  7844. addl %edx, %r11d
  7845. rorxl $2, %r12d, %edx
  7846. xorl %r10d, %eax
  7847. xorl %edx, %ecx
  7848. rorxl $22, %r12d, %edx
  7849. addl %eax, %r11d
  7850. vpsrld $3, %xmm5, %xmm8
  7851. vpor %xmm6, %xmm7, %xmm7
  7852. # rnd_0: 5 - 7
  7853. xorl %ecx, %edx
  7854. movl %r13d, %eax
  7855. addl %r11d, %r15d
  7856. xorl %r12d, %eax
  7857. addl %edx, %r11d
  7858. andl %eax, %ebx
  7859. xorl %r13d, %ebx
  7860. rorxl $6, %r15d, %edx
  7861. addl %ebx, %r11d
  7862. # rnd_1: 0 - 0
  7863. movl %r8d, %ebx
  7864. rorxl $11, %r15d, %ecx
  7865. addl 52(%rsp), %r10d
  7866. vpsrld $18, %xmm5, %xmm6
  7867. # rnd_1: 1 - 1
  7868. xorl %edx, %ecx
  7869. xorl %r9d, %ebx
  7870. rorxl $25, %r15d, %edx
  7871. vpslld $14, %xmm5, %xmm5
  7872. # rnd_1: 2 - 2
  7873. andl %r15d, %ebx
  7874. xorl %ecx, %edx
  7875. rorxl $13, %r11d, %ecx
  7876. vpxor %xmm5, %xmm7, %xmm7
  7877. # rnd_1: 3 - 3
  7878. addl %edx, %r10d
  7879. rorxl $2, %r11d, %edx
  7880. xorl %r9d, %ebx
  7881. vpxor %xmm6, %xmm7, %xmm7
  7882. # rnd_1: 4 - 4
  7883. xorl %edx, %ecx
  7884. rorxl $22, %r11d, %edx
  7885. addl %ebx, %r10d
  7886. vpshufd $0xfa, %xmm2, %xmm6
  7887. # rnd_1: 5 - 5
  7888. xorl %ecx, %edx
  7889. movl %r12d, %ebx
  7890. addl %r10d, %r14d
  7891. vpxor %xmm8, %xmm7, %xmm5
  7892. # rnd_1: 6 - 6
  7893. xorl %r11d, %ebx
  7894. addl %edx, %r10d
  7895. andl %ebx, %eax
  7896. vpsrld $10, %xmm6, %xmm8
  7897. # rnd_1: 7 - 7
  7898. xorl %r12d, %eax
  7899. rorxl $6, %r14d, %edx
  7900. addl %eax, %r10d
  7901. # rnd_0: 0 - 0
  7902. movl %r15d, %eax
  7903. rorxl $11, %r14d, %ecx
  7904. addl 56(%rsp), %r9d
  7905. vpsrlq $19, %xmm6, %xmm7
  7906. # rnd_0: 1 - 1
  7907. xorl %edx, %ecx
  7908. xorl %r8d, %eax
  7909. rorxl $25, %r14d, %edx
  7910. vpsrlq $0x11, %xmm6, %xmm6
  7911. vpaddd %xmm3, %xmm4, %xmm4
  7912. # rnd_0: 2 - 2
  7913. andl %r14d, %eax
  7914. xorl %ecx, %edx
  7915. rorxl $13, %r10d, %ecx
  7916. vpaddd %xmm5, %xmm4, %xmm4
  7917. # rnd_0: 3 - 3
  7918. addl %edx, %r9d
  7919. rorxl $2, %r10d, %edx
  7920. xorl %r8d, %eax
  7921. vpxor %xmm7, %xmm6, %xmm6
  7922. # rnd_0: 4 - 4
  7923. xorl %edx, %ecx
  7924. rorxl $22, %r10d, %edx
  7925. addl %eax, %r9d
  7926. vpxor %xmm6, %xmm8, %xmm8
  7927. # rnd_0: 5 - 5
  7928. xorl %ecx, %edx
  7929. movl %r11d, %eax
  7930. addl %r9d, %r13d
  7931. vpshufb %xmm11, %xmm8, %xmm8
  7932. # rnd_0: 6 - 6
  7933. xorl %r10d, %eax
  7934. addl %edx, %r9d
  7935. andl %eax, %ebx
  7936. vpaddd %xmm8, %xmm4, %xmm4
  7937. # rnd_0: 7 - 7
  7938. xorl %r11d, %ebx
  7939. rorxl $6, %r13d, %edx
  7940. addl %ebx, %r9d
  7941. # rnd_1: 0 - 0
  7942. movl %r14d, %ebx
  7943. rorxl $11, %r13d, %ecx
  7944. addl 60(%rsp), %r8d
  7945. vpshufd $0x50, %xmm4, %xmm6
  7946. # rnd_1: 1 - 1
  7947. xorl %edx, %ecx
  7948. xorl %r15d, %ebx
  7949. rorxl $25, %r13d, %edx
  7950. vpsrld $10, %xmm6, %xmm9
  7951. # rnd_1: 2 - 2
  7952. andl %r13d, %ebx
  7953. xorl %ecx, %edx
  7954. rorxl $13, %r9d, %ecx
  7955. vpsrlq $19, %xmm6, %xmm7
  7956. # rnd_1: 3 - 3
  7957. addl %edx, %r8d
  7958. rorxl $2, %r9d, %edx
  7959. xorl %r15d, %ebx
  7960. vpsrlq $0x11, %xmm6, %xmm6
  7961. # rnd_1: 4 - 4
  7962. xorl %edx, %ecx
  7963. rorxl $22, %r9d, %edx
  7964. addl %ebx, %r8d
  7965. vpxor %xmm7, %xmm6, %xmm6
  7966. # rnd_1: 5 - 5
  7967. xorl %ecx, %edx
  7968. movl %r10d, %ebx
  7969. addl %r8d, %r12d
  7970. vpxor %xmm6, %xmm9, %xmm9
  7971. # rnd_1: 6 - 6
  7972. xorl %r9d, %ebx
  7973. addl %edx, %r8d
  7974. andl %ebx, %eax
  7975. vpshufb %xmm12, %xmm9, %xmm9
  7976. # rnd_1: 7 - 7
  7977. xorl %r10d, %eax
  7978. rorxl $6, %r12d, %edx
  7979. addl %eax, %r8d
  7980. vpaddd %xmm4, %xmm9, %xmm3
  7981. # msg_sched done: 12-15
  7982. # set_w_k_xfer_4: 4
  7983. vpaddd 64+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  7984. vpaddd 80+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  7985. vmovdqu %xmm4, (%rsp)
  7986. vmovdqu %xmm5, 16(%rsp)
  7987. vpaddd 96+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  7988. vpaddd 112+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  7989. vmovdqu %xmm6, 32(%rsp)
  7990. vmovdqu %xmm7, 48(%rsp)
  7991. # msg_sched: 0-3
  7992. # rnd_0: 0 - 0
  7993. movl %r13d, %eax
  7994. rorxl $11, %r12d, %ecx
  7995. addl (%rsp), %r15d
  7996. vpalignr $4, %xmm2, %xmm3, %xmm4
  7997. vpalignr $4, %xmm0, %xmm1, %xmm5
  7998. # rnd_0: 1 - 2
  7999. xorl %edx, %ecx
  8000. xorl %r14d, %eax
  8001. rorxl $25, %r12d, %edx
  8002. andl %r12d, %eax
  8003. xorl %ecx, %edx
  8004. rorxl $13, %r8d, %ecx
  8005. vpsrld $7, %xmm5, %xmm6
  8006. vpslld $25, %xmm5, %xmm7
  8007. # rnd_0: 3 - 4
  8008. addl %edx, %r15d
  8009. rorxl $2, %r8d, %edx
  8010. xorl %r14d, %eax
  8011. xorl %edx, %ecx
  8012. rorxl $22, %r8d, %edx
  8013. addl %eax, %r15d
  8014. vpsrld $3, %xmm5, %xmm8
  8015. vpor %xmm6, %xmm7, %xmm7
  8016. # rnd_0: 5 - 7
  8017. xorl %ecx, %edx
  8018. movl %r9d, %eax
  8019. addl %r15d, %r11d
  8020. xorl %r8d, %eax
  8021. addl %edx, %r15d
  8022. andl %eax, %ebx
  8023. xorl %r9d, %ebx
  8024. rorxl $6, %r11d, %edx
  8025. addl %ebx, %r15d
  8026. # rnd_1: 0 - 0
  8027. movl %r12d, %ebx
  8028. rorxl $11, %r11d, %ecx
  8029. addl 4(%rsp), %r14d
  8030. vpsrld $18, %xmm5, %xmm6
  8031. # rnd_1: 1 - 1
  8032. xorl %edx, %ecx
  8033. xorl %r13d, %ebx
  8034. rorxl $25, %r11d, %edx
  8035. vpslld $14, %xmm5, %xmm5
  8036. # rnd_1: 2 - 2
  8037. andl %r11d, %ebx
  8038. xorl %ecx, %edx
  8039. rorxl $13, %r15d, %ecx
  8040. vpxor %xmm5, %xmm7, %xmm7
  8041. # rnd_1: 3 - 3
  8042. addl %edx, %r14d
  8043. rorxl $2, %r15d, %edx
  8044. xorl %r13d, %ebx
  8045. vpxor %xmm6, %xmm7, %xmm7
  8046. # rnd_1: 4 - 4
  8047. xorl %edx, %ecx
  8048. rorxl $22, %r15d, %edx
  8049. addl %ebx, %r14d
  8050. vpshufd $0xfa, %xmm3, %xmm6
  8051. # rnd_1: 5 - 5
  8052. xorl %ecx, %edx
  8053. movl %r8d, %ebx
  8054. addl %r14d, %r10d
  8055. vpxor %xmm8, %xmm7, %xmm5
  8056. # rnd_1: 6 - 6
  8057. xorl %r15d, %ebx
  8058. addl %edx, %r14d
  8059. andl %ebx, %eax
  8060. vpsrld $10, %xmm6, %xmm8
  8061. # rnd_1: 7 - 7
  8062. xorl %r8d, %eax
  8063. rorxl $6, %r10d, %edx
  8064. addl %eax, %r14d
  8065. # rnd_0: 0 - 0
  8066. movl %r11d, %eax
  8067. rorxl $11, %r10d, %ecx
  8068. addl 8(%rsp), %r13d
  8069. vpsrlq $19, %xmm6, %xmm7
  8070. # rnd_0: 1 - 1
  8071. xorl %edx, %ecx
  8072. xorl %r12d, %eax
  8073. rorxl $25, %r10d, %edx
  8074. vpsrlq $0x11, %xmm6, %xmm6
  8075. vpaddd %xmm0, %xmm4, %xmm4
  8076. # rnd_0: 2 - 2
  8077. andl %r10d, %eax
  8078. xorl %ecx, %edx
  8079. rorxl $13, %r14d, %ecx
  8080. vpaddd %xmm5, %xmm4, %xmm4
  8081. # rnd_0: 3 - 3
  8082. addl %edx, %r13d
  8083. rorxl $2, %r14d, %edx
  8084. xorl %r12d, %eax
  8085. vpxor %xmm7, %xmm6, %xmm6
  8086. # rnd_0: 4 - 4
  8087. xorl %edx, %ecx
  8088. rorxl $22, %r14d, %edx
  8089. addl %eax, %r13d
  8090. vpxor %xmm6, %xmm8, %xmm8
  8091. # rnd_0: 5 - 5
  8092. xorl %ecx, %edx
  8093. movl %r15d, %eax
  8094. addl %r13d, %r9d
  8095. vpshufb %xmm11, %xmm8, %xmm8
  8096. # rnd_0: 6 - 6
  8097. xorl %r14d, %eax
  8098. addl %edx, %r13d
  8099. andl %eax, %ebx
  8100. vpaddd %xmm8, %xmm4, %xmm4
  8101. # rnd_0: 7 - 7
  8102. xorl %r15d, %ebx
  8103. rorxl $6, %r9d, %edx
  8104. addl %ebx, %r13d
  8105. # rnd_1: 0 - 0
  8106. movl %r10d, %ebx
  8107. rorxl $11, %r9d, %ecx
  8108. addl 12(%rsp), %r12d
  8109. vpshufd $0x50, %xmm4, %xmm6
  8110. # rnd_1: 1 - 1
  8111. xorl %edx, %ecx
  8112. xorl %r11d, %ebx
  8113. rorxl $25, %r9d, %edx
  8114. vpsrld $10, %xmm6, %xmm9
  8115. # rnd_1: 2 - 2
  8116. andl %r9d, %ebx
  8117. xorl %ecx, %edx
  8118. rorxl $13, %r13d, %ecx
  8119. vpsrlq $19, %xmm6, %xmm7
  8120. # rnd_1: 3 - 3
  8121. addl %edx, %r12d
  8122. rorxl $2, %r13d, %edx
  8123. xorl %r11d, %ebx
  8124. vpsrlq $0x11, %xmm6, %xmm6
  8125. # rnd_1: 4 - 4
  8126. xorl %edx, %ecx
  8127. rorxl $22, %r13d, %edx
  8128. addl %ebx, %r12d
  8129. vpxor %xmm7, %xmm6, %xmm6
  8130. # rnd_1: 5 - 5
  8131. xorl %ecx, %edx
  8132. movl %r14d, %ebx
  8133. addl %r12d, %r8d
  8134. vpxor %xmm6, %xmm9, %xmm9
  8135. # rnd_1: 6 - 6
  8136. xorl %r13d, %ebx
  8137. addl %edx, %r12d
  8138. andl %ebx, %eax
  8139. vpshufb %xmm12, %xmm9, %xmm9
  8140. # rnd_1: 7 - 7
  8141. xorl %r14d, %eax
  8142. rorxl $6, %r8d, %edx
  8143. addl %eax, %r12d
  8144. vpaddd %xmm4, %xmm9, %xmm0
  8145. # msg_sched done: 0-3
  8146. # msg_sched: 4-7
  8147. # rnd_0: 0 - 0
  8148. movl %r9d, %eax
  8149. rorxl $11, %r8d, %ecx
  8150. addl 16(%rsp), %r11d
  8151. vpalignr $4, %xmm3, %xmm0, %xmm4
  8152. vpalignr $4, %xmm1, %xmm2, %xmm5
  8153. # rnd_0: 1 - 2
  8154. xorl %edx, %ecx
  8155. xorl %r10d, %eax
  8156. rorxl $25, %r8d, %edx
  8157. andl %r8d, %eax
  8158. xorl %ecx, %edx
  8159. rorxl $13, %r12d, %ecx
  8160. vpsrld $7, %xmm5, %xmm6
  8161. vpslld $25, %xmm5, %xmm7
  8162. # rnd_0: 3 - 4
  8163. addl %edx, %r11d
  8164. rorxl $2, %r12d, %edx
  8165. xorl %r10d, %eax
  8166. xorl %edx, %ecx
  8167. rorxl $22, %r12d, %edx
  8168. addl %eax, %r11d
  8169. vpsrld $3, %xmm5, %xmm8
  8170. vpor %xmm6, %xmm7, %xmm7
  8171. # rnd_0: 5 - 7
  8172. xorl %ecx, %edx
  8173. movl %r13d, %eax
  8174. addl %r11d, %r15d
  8175. xorl %r12d, %eax
  8176. addl %edx, %r11d
  8177. andl %eax, %ebx
  8178. xorl %r13d, %ebx
  8179. rorxl $6, %r15d, %edx
  8180. addl %ebx, %r11d
  8181. # rnd_1: 0 - 0
  8182. movl %r8d, %ebx
  8183. rorxl $11, %r15d, %ecx
  8184. addl 20(%rsp), %r10d
  8185. vpsrld $18, %xmm5, %xmm6
  8186. # rnd_1: 1 - 1
  8187. xorl %edx, %ecx
  8188. xorl %r9d, %ebx
  8189. rorxl $25, %r15d, %edx
  8190. vpslld $14, %xmm5, %xmm5
  8191. # rnd_1: 2 - 2
  8192. andl %r15d, %ebx
  8193. xorl %ecx, %edx
  8194. rorxl $13, %r11d, %ecx
  8195. vpxor %xmm5, %xmm7, %xmm7
  8196. # rnd_1: 3 - 3
  8197. addl %edx, %r10d
  8198. rorxl $2, %r11d, %edx
  8199. xorl %r9d, %ebx
  8200. vpxor %xmm6, %xmm7, %xmm7
  8201. # rnd_1: 4 - 4
  8202. xorl %edx, %ecx
  8203. rorxl $22, %r11d, %edx
  8204. addl %ebx, %r10d
  8205. vpshufd $0xfa, %xmm0, %xmm6
  8206. # rnd_1: 5 - 5
  8207. xorl %ecx, %edx
  8208. movl %r12d, %ebx
  8209. addl %r10d, %r14d
  8210. vpxor %xmm8, %xmm7, %xmm5
  8211. # rnd_1: 6 - 6
  8212. xorl %r11d, %ebx
  8213. addl %edx, %r10d
  8214. andl %ebx, %eax
  8215. vpsrld $10, %xmm6, %xmm8
  8216. # rnd_1: 7 - 7
  8217. xorl %r12d, %eax
  8218. rorxl $6, %r14d, %edx
  8219. addl %eax, %r10d
  8220. # rnd_0: 0 - 0
  8221. movl %r15d, %eax
  8222. rorxl $11, %r14d, %ecx
  8223. addl 24(%rsp), %r9d
  8224. vpsrlq $19, %xmm6, %xmm7
  8225. # rnd_0: 1 - 1
  8226. xorl %edx, %ecx
  8227. xorl %r8d, %eax
  8228. rorxl $25, %r14d, %edx
  8229. vpsrlq $0x11, %xmm6, %xmm6
  8230. vpaddd %xmm1, %xmm4, %xmm4
  8231. # rnd_0: 2 - 2
  8232. andl %r14d, %eax
  8233. xorl %ecx, %edx
  8234. rorxl $13, %r10d, %ecx
  8235. vpaddd %xmm5, %xmm4, %xmm4
  8236. # rnd_0: 3 - 3
  8237. addl %edx, %r9d
  8238. rorxl $2, %r10d, %edx
  8239. xorl %r8d, %eax
  8240. vpxor %xmm7, %xmm6, %xmm6
  8241. # rnd_0: 4 - 4
  8242. xorl %edx, %ecx
  8243. rorxl $22, %r10d, %edx
  8244. addl %eax, %r9d
  8245. vpxor %xmm6, %xmm8, %xmm8
  8246. # rnd_0: 5 - 5
  8247. xorl %ecx, %edx
  8248. movl %r11d, %eax
  8249. addl %r9d, %r13d
  8250. vpshufb %xmm11, %xmm8, %xmm8
  8251. # rnd_0: 6 - 6
  8252. xorl %r10d, %eax
  8253. addl %edx, %r9d
  8254. andl %eax, %ebx
  8255. vpaddd %xmm8, %xmm4, %xmm4
  8256. # rnd_0: 7 - 7
  8257. xorl %r11d, %ebx
  8258. rorxl $6, %r13d, %edx
  8259. addl %ebx, %r9d
  8260. # rnd_1: 0 - 0
  8261. movl %r14d, %ebx
  8262. rorxl $11, %r13d, %ecx
  8263. addl 28(%rsp), %r8d
  8264. vpshufd $0x50, %xmm4, %xmm6
  8265. # rnd_1: 1 - 1
  8266. xorl %edx, %ecx
  8267. xorl %r15d, %ebx
  8268. rorxl $25, %r13d, %edx
  8269. vpsrld $10, %xmm6, %xmm9
  8270. # rnd_1: 2 - 2
  8271. andl %r13d, %ebx
  8272. xorl %ecx, %edx
  8273. rorxl $13, %r9d, %ecx
  8274. vpsrlq $19, %xmm6, %xmm7
  8275. # rnd_1: 3 - 3
  8276. addl %edx, %r8d
  8277. rorxl $2, %r9d, %edx
  8278. xorl %r15d, %ebx
  8279. vpsrlq $0x11, %xmm6, %xmm6
  8280. # rnd_1: 4 - 4
  8281. xorl %edx, %ecx
  8282. rorxl $22, %r9d, %edx
  8283. addl %ebx, %r8d
  8284. vpxor %xmm7, %xmm6, %xmm6
  8285. # rnd_1: 5 - 5
  8286. xorl %ecx, %edx
  8287. movl %r10d, %ebx
  8288. addl %r8d, %r12d
  8289. vpxor %xmm6, %xmm9, %xmm9
  8290. # rnd_1: 6 - 6
  8291. xorl %r9d, %ebx
  8292. addl %edx, %r8d
  8293. andl %ebx, %eax
  8294. vpshufb %xmm12, %xmm9, %xmm9
  8295. # rnd_1: 7 - 7
  8296. xorl %r10d, %eax
  8297. rorxl $6, %r12d, %edx
  8298. addl %eax, %r8d
  8299. vpaddd %xmm4, %xmm9, %xmm1
  8300. # msg_sched done: 4-7
  8301. # msg_sched: 8-11
  8302. # rnd_0: 0 - 0
  8303. movl %r13d, %eax
  8304. rorxl $11, %r12d, %ecx
  8305. addl 32(%rsp), %r15d
  8306. vpalignr $4, %xmm0, %xmm1, %xmm4
  8307. vpalignr $4, %xmm2, %xmm3, %xmm5
  8308. # rnd_0: 1 - 2
  8309. xorl %edx, %ecx
  8310. xorl %r14d, %eax
  8311. rorxl $25, %r12d, %edx
  8312. andl %r12d, %eax
  8313. xorl %ecx, %edx
  8314. rorxl $13, %r8d, %ecx
  8315. vpsrld $7, %xmm5, %xmm6
  8316. vpslld $25, %xmm5, %xmm7
  8317. # rnd_0: 3 - 4
  8318. addl %edx, %r15d
  8319. rorxl $2, %r8d, %edx
  8320. xorl %r14d, %eax
  8321. xorl %edx, %ecx
  8322. rorxl $22, %r8d, %edx
  8323. addl %eax, %r15d
  8324. vpsrld $3, %xmm5, %xmm8
  8325. vpor %xmm6, %xmm7, %xmm7
  8326. # rnd_0: 5 - 7
  8327. xorl %ecx, %edx
  8328. movl %r9d, %eax
  8329. addl %r15d, %r11d
  8330. xorl %r8d, %eax
  8331. addl %edx, %r15d
  8332. andl %eax, %ebx
  8333. xorl %r9d, %ebx
  8334. rorxl $6, %r11d, %edx
  8335. addl %ebx, %r15d
  8336. # rnd_1: 0 - 0
  8337. movl %r12d, %ebx
  8338. rorxl $11, %r11d, %ecx
  8339. addl 36(%rsp), %r14d
  8340. vpsrld $18, %xmm5, %xmm6
  8341. # rnd_1: 1 - 1
  8342. xorl %edx, %ecx
  8343. xorl %r13d, %ebx
  8344. rorxl $25, %r11d, %edx
  8345. vpslld $14, %xmm5, %xmm5
  8346. # rnd_1: 2 - 2
  8347. andl %r11d, %ebx
  8348. xorl %ecx, %edx
  8349. rorxl $13, %r15d, %ecx
  8350. vpxor %xmm5, %xmm7, %xmm7
  8351. # rnd_1: 3 - 3
  8352. addl %edx, %r14d
  8353. rorxl $2, %r15d, %edx
  8354. xorl %r13d, %ebx
  8355. vpxor %xmm6, %xmm7, %xmm7
  8356. # rnd_1: 4 - 4
  8357. xorl %edx, %ecx
  8358. rorxl $22, %r15d, %edx
  8359. addl %ebx, %r14d
  8360. vpshufd $0xfa, %xmm1, %xmm6
  8361. # rnd_1: 5 - 5
  8362. xorl %ecx, %edx
  8363. movl %r8d, %ebx
  8364. addl %r14d, %r10d
  8365. vpxor %xmm8, %xmm7, %xmm5
  8366. # rnd_1: 6 - 6
  8367. xorl %r15d, %ebx
  8368. addl %edx, %r14d
  8369. andl %ebx, %eax
  8370. vpsrld $10, %xmm6, %xmm8
  8371. # rnd_1: 7 - 7
  8372. xorl %r8d, %eax
  8373. rorxl $6, %r10d, %edx
  8374. addl %eax, %r14d
  8375. # rnd_0: 0 - 0
  8376. movl %r11d, %eax
  8377. rorxl $11, %r10d, %ecx
  8378. addl 40(%rsp), %r13d
  8379. vpsrlq $19, %xmm6, %xmm7
  8380. # rnd_0: 1 - 1
  8381. xorl %edx, %ecx
  8382. xorl %r12d, %eax
  8383. rorxl $25, %r10d, %edx
  8384. vpsrlq $0x11, %xmm6, %xmm6
  8385. vpaddd %xmm2, %xmm4, %xmm4
  8386. # rnd_0: 2 - 2
  8387. andl %r10d, %eax
  8388. xorl %ecx, %edx
  8389. rorxl $13, %r14d, %ecx
  8390. vpaddd %xmm5, %xmm4, %xmm4
  8391. # rnd_0: 3 - 3
  8392. addl %edx, %r13d
  8393. rorxl $2, %r14d, %edx
  8394. xorl %r12d, %eax
  8395. vpxor %xmm7, %xmm6, %xmm6
  8396. # rnd_0: 4 - 4
  8397. xorl %edx, %ecx
  8398. rorxl $22, %r14d, %edx
  8399. addl %eax, %r13d
  8400. vpxor %xmm6, %xmm8, %xmm8
  8401. # rnd_0: 5 - 5
  8402. xorl %ecx, %edx
  8403. movl %r15d, %eax
  8404. addl %r13d, %r9d
  8405. vpshufb %xmm11, %xmm8, %xmm8
  8406. # rnd_0: 6 - 6
  8407. xorl %r14d, %eax
  8408. addl %edx, %r13d
  8409. andl %eax, %ebx
  8410. vpaddd %xmm8, %xmm4, %xmm4
  8411. # rnd_0: 7 - 7
  8412. xorl %r15d, %ebx
  8413. rorxl $6, %r9d, %edx
  8414. addl %ebx, %r13d
  8415. # rnd_1: 0 - 0
  8416. movl %r10d, %ebx
  8417. rorxl $11, %r9d, %ecx
  8418. addl 44(%rsp), %r12d
  8419. vpshufd $0x50, %xmm4, %xmm6
  8420. # rnd_1: 1 - 1
  8421. xorl %edx, %ecx
  8422. xorl %r11d, %ebx
  8423. rorxl $25, %r9d, %edx
  8424. vpsrld $10, %xmm6, %xmm9
  8425. # rnd_1: 2 - 2
  8426. andl %r9d, %ebx
  8427. xorl %ecx, %edx
  8428. rorxl $13, %r13d, %ecx
  8429. vpsrlq $19, %xmm6, %xmm7
  8430. # rnd_1: 3 - 3
  8431. addl %edx, %r12d
  8432. rorxl $2, %r13d, %edx
  8433. xorl %r11d, %ebx
  8434. vpsrlq $0x11, %xmm6, %xmm6
  8435. # rnd_1: 4 - 4
  8436. xorl %edx, %ecx
  8437. rorxl $22, %r13d, %edx
  8438. addl %ebx, %r12d
  8439. vpxor %xmm7, %xmm6, %xmm6
  8440. # rnd_1: 5 - 5
  8441. xorl %ecx, %edx
  8442. movl %r14d, %ebx
  8443. addl %r12d, %r8d
  8444. vpxor %xmm6, %xmm9, %xmm9
  8445. # rnd_1: 6 - 6
  8446. xorl %r13d, %ebx
  8447. addl %edx, %r12d
  8448. andl %ebx, %eax
  8449. vpshufb %xmm12, %xmm9, %xmm9
  8450. # rnd_1: 7 - 7
  8451. xorl %r14d, %eax
  8452. rorxl $6, %r8d, %edx
  8453. addl %eax, %r12d
  8454. vpaddd %xmm4, %xmm9, %xmm2
  8455. # msg_sched done: 8-11
  8456. # msg_sched: 12-15
  8457. # rnd_0: 0 - 0
  8458. movl %r9d, %eax
  8459. rorxl $11, %r8d, %ecx
  8460. addl 48(%rsp), %r11d
  8461. vpalignr $4, %xmm1, %xmm2, %xmm4
  8462. vpalignr $4, %xmm3, %xmm0, %xmm5
  8463. # rnd_0: 1 - 2
  8464. xorl %edx, %ecx
  8465. xorl %r10d, %eax
  8466. rorxl $25, %r8d, %edx
  8467. andl %r8d, %eax
  8468. xorl %ecx, %edx
  8469. rorxl $13, %r12d, %ecx
  8470. vpsrld $7, %xmm5, %xmm6
  8471. vpslld $25, %xmm5, %xmm7
  8472. # rnd_0: 3 - 4
  8473. addl %edx, %r11d
  8474. rorxl $2, %r12d, %edx
  8475. xorl %r10d, %eax
  8476. xorl %edx, %ecx
  8477. rorxl $22, %r12d, %edx
  8478. addl %eax, %r11d
  8479. vpsrld $3, %xmm5, %xmm8
  8480. vpor %xmm6, %xmm7, %xmm7
  8481. # rnd_0: 5 - 7
  8482. xorl %ecx, %edx
  8483. movl %r13d, %eax
  8484. addl %r11d, %r15d
  8485. xorl %r12d, %eax
  8486. addl %edx, %r11d
  8487. andl %eax, %ebx
  8488. xorl %r13d, %ebx
  8489. rorxl $6, %r15d, %edx
  8490. addl %ebx, %r11d
  8491. # rnd_1: 0 - 0
  8492. movl %r8d, %ebx
  8493. rorxl $11, %r15d, %ecx
  8494. addl 52(%rsp), %r10d
  8495. vpsrld $18, %xmm5, %xmm6
  8496. # rnd_1: 1 - 1
  8497. xorl %edx, %ecx
  8498. xorl %r9d, %ebx
  8499. rorxl $25, %r15d, %edx
  8500. vpslld $14, %xmm5, %xmm5
  8501. # rnd_1: 2 - 2
  8502. andl %r15d, %ebx
  8503. xorl %ecx, %edx
  8504. rorxl $13, %r11d, %ecx
  8505. vpxor %xmm5, %xmm7, %xmm7
  8506. # rnd_1: 3 - 3
  8507. addl %edx, %r10d
  8508. rorxl $2, %r11d, %edx
  8509. xorl %r9d, %ebx
  8510. vpxor %xmm6, %xmm7, %xmm7
  8511. # rnd_1: 4 - 4
  8512. xorl %edx, %ecx
  8513. rorxl $22, %r11d, %edx
  8514. addl %ebx, %r10d
  8515. vpshufd $0xfa, %xmm2, %xmm6
  8516. # rnd_1: 5 - 5
  8517. xorl %ecx, %edx
  8518. movl %r12d, %ebx
  8519. addl %r10d, %r14d
  8520. vpxor %xmm8, %xmm7, %xmm5
  8521. # rnd_1: 6 - 6
  8522. xorl %r11d, %ebx
  8523. addl %edx, %r10d
  8524. andl %ebx, %eax
  8525. vpsrld $10, %xmm6, %xmm8
  8526. # rnd_1: 7 - 7
  8527. xorl %r12d, %eax
  8528. rorxl $6, %r14d, %edx
  8529. addl %eax, %r10d
  8530. # rnd_0: 0 - 0
  8531. movl %r15d, %eax
  8532. rorxl $11, %r14d, %ecx
  8533. addl 56(%rsp), %r9d
  8534. vpsrlq $19, %xmm6, %xmm7
  8535. # rnd_0: 1 - 1
  8536. xorl %edx, %ecx
  8537. xorl %r8d, %eax
  8538. rorxl $25, %r14d, %edx
  8539. vpsrlq $0x11, %xmm6, %xmm6
  8540. vpaddd %xmm3, %xmm4, %xmm4
  8541. # rnd_0: 2 - 2
  8542. andl %r14d, %eax
  8543. xorl %ecx, %edx
  8544. rorxl $13, %r10d, %ecx
  8545. vpaddd %xmm5, %xmm4, %xmm4
  8546. # rnd_0: 3 - 3
  8547. addl %edx, %r9d
  8548. rorxl $2, %r10d, %edx
  8549. xorl %r8d, %eax
  8550. vpxor %xmm7, %xmm6, %xmm6
  8551. # rnd_0: 4 - 4
  8552. xorl %edx, %ecx
  8553. rorxl $22, %r10d, %edx
  8554. addl %eax, %r9d
  8555. vpxor %xmm6, %xmm8, %xmm8
  8556. # rnd_0: 5 - 5
  8557. xorl %ecx, %edx
  8558. movl %r11d, %eax
  8559. addl %r9d, %r13d
  8560. vpshufb %xmm11, %xmm8, %xmm8
  8561. # rnd_0: 6 - 6
  8562. xorl %r10d, %eax
  8563. addl %edx, %r9d
  8564. andl %eax, %ebx
  8565. vpaddd %xmm8, %xmm4, %xmm4
  8566. # rnd_0: 7 - 7
  8567. xorl %r11d, %ebx
  8568. rorxl $6, %r13d, %edx
  8569. addl %ebx, %r9d
  8570. # rnd_1: 0 - 0
  8571. movl %r14d, %ebx
  8572. rorxl $11, %r13d, %ecx
  8573. addl 60(%rsp), %r8d
  8574. vpshufd $0x50, %xmm4, %xmm6
  8575. # rnd_1: 1 - 1
  8576. xorl %edx, %ecx
  8577. xorl %r15d, %ebx
  8578. rorxl $25, %r13d, %edx
  8579. vpsrld $10, %xmm6, %xmm9
  8580. # rnd_1: 2 - 2
  8581. andl %r13d, %ebx
  8582. xorl %ecx, %edx
  8583. rorxl $13, %r9d, %ecx
  8584. vpsrlq $19, %xmm6, %xmm7
  8585. # rnd_1: 3 - 3
  8586. addl %edx, %r8d
  8587. rorxl $2, %r9d, %edx
  8588. xorl %r15d, %ebx
  8589. vpsrlq $0x11, %xmm6, %xmm6
  8590. # rnd_1: 4 - 4
  8591. xorl %edx, %ecx
  8592. rorxl $22, %r9d, %edx
  8593. addl %ebx, %r8d
  8594. vpxor %xmm7, %xmm6, %xmm6
  8595. # rnd_1: 5 - 5
  8596. xorl %ecx, %edx
  8597. movl %r10d, %ebx
  8598. addl %r8d, %r12d
  8599. vpxor %xmm6, %xmm9, %xmm9
  8600. # rnd_1: 6 - 6
  8601. xorl %r9d, %ebx
  8602. addl %edx, %r8d
  8603. andl %ebx, %eax
  8604. vpshufb %xmm12, %xmm9, %xmm9
  8605. # rnd_1: 7 - 7
  8606. xorl %r10d, %eax
  8607. rorxl $6, %r12d, %edx
  8608. addl %eax, %r8d
  8609. vpaddd %xmm4, %xmm9, %xmm3
  8610. # msg_sched done: 12-15
  8611. # set_w_k_xfer_4: 8
  8612. vpaddd 128+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  8613. vpaddd 144+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  8614. vmovdqu %xmm4, (%rsp)
  8615. vmovdqu %xmm5, 16(%rsp)
  8616. vpaddd 160+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  8617. vpaddd 176+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  8618. vmovdqu %xmm6, 32(%rsp)
  8619. vmovdqu %xmm7, 48(%rsp)
  8620. # msg_sched: 0-3
  8621. # rnd_0: 0 - 0
  8622. movl %r13d, %eax
  8623. rorxl $11, %r12d, %ecx
  8624. addl (%rsp), %r15d
  8625. vpalignr $4, %xmm2, %xmm3, %xmm4
  8626. vpalignr $4, %xmm0, %xmm1, %xmm5
  8627. # rnd_0: 1 - 2
  8628. xorl %edx, %ecx
  8629. xorl %r14d, %eax
  8630. rorxl $25, %r12d, %edx
  8631. andl %r12d, %eax
  8632. xorl %ecx, %edx
  8633. rorxl $13, %r8d, %ecx
  8634. vpsrld $7, %xmm5, %xmm6
  8635. vpslld $25, %xmm5, %xmm7
  8636. # rnd_0: 3 - 4
  8637. addl %edx, %r15d
  8638. rorxl $2, %r8d, %edx
  8639. xorl %r14d, %eax
  8640. xorl %edx, %ecx
  8641. rorxl $22, %r8d, %edx
  8642. addl %eax, %r15d
  8643. vpsrld $3, %xmm5, %xmm8
  8644. vpor %xmm6, %xmm7, %xmm7
  8645. # rnd_0: 5 - 7
  8646. xorl %ecx, %edx
  8647. movl %r9d, %eax
  8648. addl %r15d, %r11d
  8649. xorl %r8d, %eax
  8650. addl %edx, %r15d
  8651. andl %eax, %ebx
  8652. xorl %r9d, %ebx
  8653. rorxl $6, %r11d, %edx
  8654. addl %ebx, %r15d
  8655. # rnd_1: 0 - 0
  8656. movl %r12d, %ebx
  8657. rorxl $11, %r11d, %ecx
  8658. addl 4(%rsp), %r14d
  8659. vpsrld $18, %xmm5, %xmm6
  8660. # rnd_1: 1 - 1
  8661. xorl %edx, %ecx
  8662. xorl %r13d, %ebx
  8663. rorxl $25, %r11d, %edx
  8664. vpslld $14, %xmm5, %xmm5
  8665. # rnd_1: 2 - 2
  8666. andl %r11d, %ebx
  8667. xorl %ecx, %edx
  8668. rorxl $13, %r15d, %ecx
  8669. vpxor %xmm5, %xmm7, %xmm7
  8670. # rnd_1: 3 - 3
  8671. addl %edx, %r14d
  8672. rorxl $2, %r15d, %edx
  8673. xorl %r13d, %ebx
  8674. vpxor %xmm6, %xmm7, %xmm7
  8675. # rnd_1: 4 - 4
  8676. xorl %edx, %ecx
  8677. rorxl $22, %r15d, %edx
  8678. addl %ebx, %r14d
  8679. vpshufd $0xfa, %xmm3, %xmm6
  8680. # rnd_1: 5 - 5
  8681. xorl %ecx, %edx
  8682. movl %r8d, %ebx
  8683. addl %r14d, %r10d
  8684. vpxor %xmm8, %xmm7, %xmm5
  8685. # rnd_1: 6 - 6
  8686. xorl %r15d, %ebx
  8687. addl %edx, %r14d
  8688. andl %ebx, %eax
  8689. vpsrld $10, %xmm6, %xmm8
  8690. # rnd_1: 7 - 7
  8691. xorl %r8d, %eax
  8692. rorxl $6, %r10d, %edx
  8693. addl %eax, %r14d
  8694. # rnd_0: 0 - 0
  8695. movl %r11d, %eax
  8696. rorxl $11, %r10d, %ecx
  8697. addl 8(%rsp), %r13d
  8698. vpsrlq $19, %xmm6, %xmm7
  8699. # rnd_0: 1 - 1
  8700. xorl %edx, %ecx
  8701. xorl %r12d, %eax
  8702. rorxl $25, %r10d, %edx
  8703. vpsrlq $0x11, %xmm6, %xmm6
  8704. vpaddd %xmm0, %xmm4, %xmm4
  8705. # rnd_0: 2 - 2
  8706. andl %r10d, %eax
  8707. xorl %ecx, %edx
  8708. rorxl $13, %r14d, %ecx
  8709. vpaddd %xmm5, %xmm4, %xmm4
  8710. # rnd_0: 3 - 3
  8711. addl %edx, %r13d
  8712. rorxl $2, %r14d, %edx
  8713. xorl %r12d, %eax
  8714. vpxor %xmm7, %xmm6, %xmm6
  8715. # rnd_0: 4 - 4
  8716. xorl %edx, %ecx
  8717. rorxl $22, %r14d, %edx
  8718. addl %eax, %r13d
  8719. vpxor %xmm6, %xmm8, %xmm8
  8720. # rnd_0: 5 - 5
  8721. xorl %ecx, %edx
  8722. movl %r15d, %eax
  8723. addl %r13d, %r9d
  8724. vpshufb %xmm11, %xmm8, %xmm8
  8725. # rnd_0: 6 - 6
  8726. xorl %r14d, %eax
  8727. addl %edx, %r13d
  8728. andl %eax, %ebx
  8729. vpaddd %xmm8, %xmm4, %xmm4
  8730. # rnd_0: 7 - 7
  8731. xorl %r15d, %ebx
  8732. rorxl $6, %r9d, %edx
  8733. addl %ebx, %r13d
  8734. # rnd_1: 0 - 0
  8735. movl %r10d, %ebx
  8736. rorxl $11, %r9d, %ecx
  8737. addl 12(%rsp), %r12d
  8738. vpshufd $0x50, %xmm4, %xmm6
  8739. # rnd_1: 1 - 1
  8740. xorl %edx, %ecx
  8741. xorl %r11d, %ebx
  8742. rorxl $25, %r9d, %edx
  8743. vpsrld $10, %xmm6, %xmm9
  8744. # rnd_1: 2 - 2
  8745. andl %r9d, %ebx
  8746. xorl %ecx, %edx
  8747. rorxl $13, %r13d, %ecx
  8748. vpsrlq $19, %xmm6, %xmm7
  8749. # rnd_1: 3 - 3
  8750. addl %edx, %r12d
  8751. rorxl $2, %r13d, %edx
  8752. xorl %r11d, %ebx
  8753. vpsrlq $0x11, %xmm6, %xmm6
  8754. # rnd_1: 4 - 4
  8755. xorl %edx, %ecx
  8756. rorxl $22, %r13d, %edx
  8757. addl %ebx, %r12d
  8758. vpxor %xmm7, %xmm6, %xmm6
  8759. # rnd_1: 5 - 5
  8760. xorl %ecx, %edx
  8761. movl %r14d, %ebx
  8762. addl %r12d, %r8d
  8763. vpxor %xmm6, %xmm9, %xmm9
  8764. # rnd_1: 6 - 6
  8765. xorl %r13d, %ebx
  8766. addl %edx, %r12d
  8767. andl %ebx, %eax
  8768. vpshufb %xmm12, %xmm9, %xmm9
  8769. # rnd_1: 7 - 7
  8770. xorl %r14d, %eax
  8771. rorxl $6, %r8d, %edx
  8772. addl %eax, %r12d
  8773. vpaddd %xmm4, %xmm9, %xmm0
  8774. # msg_sched done: 0-3
  8775. # msg_sched: 4-7
  8776. # rnd_0: 0 - 0
  8777. movl %r9d, %eax
  8778. rorxl $11, %r8d, %ecx
  8779. addl 16(%rsp), %r11d
  8780. vpalignr $4, %xmm3, %xmm0, %xmm4
  8781. vpalignr $4, %xmm1, %xmm2, %xmm5
  8782. # rnd_0: 1 - 2
  8783. xorl %edx, %ecx
  8784. xorl %r10d, %eax
  8785. rorxl $25, %r8d, %edx
  8786. andl %r8d, %eax
  8787. xorl %ecx, %edx
  8788. rorxl $13, %r12d, %ecx
  8789. vpsrld $7, %xmm5, %xmm6
  8790. vpslld $25, %xmm5, %xmm7
  8791. # rnd_0: 3 - 4
  8792. addl %edx, %r11d
  8793. rorxl $2, %r12d, %edx
  8794. xorl %r10d, %eax
  8795. xorl %edx, %ecx
  8796. rorxl $22, %r12d, %edx
  8797. addl %eax, %r11d
  8798. vpsrld $3, %xmm5, %xmm8
  8799. vpor %xmm6, %xmm7, %xmm7
  8800. # rnd_0: 5 - 7
  8801. xorl %ecx, %edx
  8802. movl %r13d, %eax
  8803. addl %r11d, %r15d
  8804. xorl %r12d, %eax
  8805. addl %edx, %r11d
  8806. andl %eax, %ebx
  8807. xorl %r13d, %ebx
  8808. rorxl $6, %r15d, %edx
  8809. addl %ebx, %r11d
  8810. # rnd_1: 0 - 0
  8811. movl %r8d, %ebx
  8812. rorxl $11, %r15d, %ecx
  8813. addl 20(%rsp), %r10d
  8814. vpsrld $18, %xmm5, %xmm6
  8815. # rnd_1: 1 - 1
  8816. xorl %edx, %ecx
  8817. xorl %r9d, %ebx
  8818. rorxl $25, %r15d, %edx
  8819. vpslld $14, %xmm5, %xmm5
  8820. # rnd_1: 2 - 2
  8821. andl %r15d, %ebx
  8822. xorl %ecx, %edx
  8823. rorxl $13, %r11d, %ecx
  8824. vpxor %xmm5, %xmm7, %xmm7
  8825. # rnd_1: 3 - 3
  8826. addl %edx, %r10d
  8827. rorxl $2, %r11d, %edx
  8828. xorl %r9d, %ebx
  8829. vpxor %xmm6, %xmm7, %xmm7
  8830. # rnd_1: 4 - 4
  8831. xorl %edx, %ecx
  8832. rorxl $22, %r11d, %edx
  8833. addl %ebx, %r10d
  8834. vpshufd $0xfa, %xmm0, %xmm6
  8835. # rnd_1: 5 - 5
  8836. xorl %ecx, %edx
  8837. movl %r12d, %ebx
  8838. addl %r10d, %r14d
  8839. vpxor %xmm8, %xmm7, %xmm5
  8840. # rnd_1: 6 - 6
  8841. xorl %r11d, %ebx
  8842. addl %edx, %r10d
  8843. andl %ebx, %eax
  8844. vpsrld $10, %xmm6, %xmm8
  8845. # rnd_1: 7 - 7
  8846. xorl %r12d, %eax
  8847. rorxl $6, %r14d, %edx
  8848. addl %eax, %r10d
  8849. # rnd_0: 0 - 0
  8850. movl %r15d, %eax
  8851. rorxl $11, %r14d, %ecx
  8852. addl 24(%rsp), %r9d
  8853. vpsrlq $19, %xmm6, %xmm7
  8854. # rnd_0: 1 - 1
  8855. xorl %edx, %ecx
  8856. xorl %r8d, %eax
  8857. rorxl $25, %r14d, %edx
  8858. vpsrlq $0x11, %xmm6, %xmm6
  8859. vpaddd %xmm1, %xmm4, %xmm4
  8860. # rnd_0: 2 - 2
  8861. andl %r14d, %eax
  8862. xorl %ecx, %edx
  8863. rorxl $13, %r10d, %ecx
  8864. vpaddd %xmm5, %xmm4, %xmm4
  8865. # rnd_0: 3 - 3
  8866. addl %edx, %r9d
  8867. rorxl $2, %r10d, %edx
  8868. xorl %r8d, %eax
  8869. vpxor %xmm7, %xmm6, %xmm6
  8870. # rnd_0: 4 - 4
  8871. xorl %edx, %ecx
  8872. rorxl $22, %r10d, %edx
  8873. addl %eax, %r9d
  8874. vpxor %xmm6, %xmm8, %xmm8
  8875. # rnd_0: 5 - 5
  8876. xorl %ecx, %edx
  8877. movl %r11d, %eax
  8878. addl %r9d, %r13d
  8879. vpshufb %xmm11, %xmm8, %xmm8
  8880. # rnd_0: 6 - 6
  8881. xorl %r10d, %eax
  8882. addl %edx, %r9d
  8883. andl %eax, %ebx
  8884. vpaddd %xmm8, %xmm4, %xmm4
  8885. # rnd_0: 7 - 7
  8886. xorl %r11d, %ebx
  8887. rorxl $6, %r13d, %edx
  8888. addl %ebx, %r9d
  8889. # rnd_1: 0 - 0
  8890. movl %r14d, %ebx
  8891. rorxl $11, %r13d, %ecx
  8892. addl 28(%rsp), %r8d
  8893. vpshufd $0x50, %xmm4, %xmm6
  8894. # rnd_1: 1 - 1
  8895. xorl %edx, %ecx
  8896. xorl %r15d, %ebx
  8897. rorxl $25, %r13d, %edx
  8898. vpsrld $10, %xmm6, %xmm9
  8899. # rnd_1: 2 - 2
  8900. andl %r13d, %ebx
  8901. xorl %ecx, %edx
  8902. rorxl $13, %r9d, %ecx
  8903. vpsrlq $19, %xmm6, %xmm7
  8904. # rnd_1: 3 - 3
  8905. addl %edx, %r8d
  8906. rorxl $2, %r9d, %edx
  8907. xorl %r15d, %ebx
  8908. vpsrlq $0x11, %xmm6, %xmm6
  8909. # rnd_1: 4 - 4
  8910. xorl %edx, %ecx
  8911. rorxl $22, %r9d, %edx
  8912. addl %ebx, %r8d
  8913. vpxor %xmm7, %xmm6, %xmm6
  8914. # rnd_1: 5 - 5
  8915. xorl %ecx, %edx
  8916. movl %r10d, %ebx
  8917. addl %r8d, %r12d
  8918. vpxor %xmm6, %xmm9, %xmm9
  8919. # rnd_1: 6 - 6
  8920. xorl %r9d, %ebx
  8921. addl %edx, %r8d
  8922. andl %ebx, %eax
  8923. vpshufb %xmm12, %xmm9, %xmm9
  8924. # rnd_1: 7 - 7
  8925. xorl %r10d, %eax
  8926. rorxl $6, %r12d, %edx
  8927. addl %eax, %r8d
  8928. vpaddd %xmm4, %xmm9, %xmm1
  8929. # msg_sched done: 4-7
  8930. # msg_sched: 8-11
  8931. # rnd_0: 0 - 0
  8932. movl %r13d, %eax
  8933. rorxl $11, %r12d, %ecx
  8934. addl 32(%rsp), %r15d
  8935. vpalignr $4, %xmm0, %xmm1, %xmm4
  8936. vpalignr $4, %xmm2, %xmm3, %xmm5
  8937. # rnd_0: 1 - 2
  8938. xorl %edx, %ecx
  8939. xorl %r14d, %eax
  8940. rorxl $25, %r12d, %edx
  8941. andl %r12d, %eax
  8942. xorl %ecx, %edx
  8943. rorxl $13, %r8d, %ecx
  8944. vpsrld $7, %xmm5, %xmm6
  8945. vpslld $25, %xmm5, %xmm7
  8946. # rnd_0: 3 - 4
  8947. addl %edx, %r15d
  8948. rorxl $2, %r8d, %edx
  8949. xorl %r14d, %eax
  8950. xorl %edx, %ecx
  8951. rorxl $22, %r8d, %edx
  8952. addl %eax, %r15d
  8953. vpsrld $3, %xmm5, %xmm8
  8954. vpor %xmm6, %xmm7, %xmm7
  8955. # rnd_0: 5 - 7
  8956. xorl %ecx, %edx
  8957. movl %r9d, %eax
  8958. addl %r15d, %r11d
  8959. xorl %r8d, %eax
  8960. addl %edx, %r15d
  8961. andl %eax, %ebx
  8962. xorl %r9d, %ebx
  8963. rorxl $6, %r11d, %edx
  8964. addl %ebx, %r15d
  8965. # rnd_1: 0 - 0
  8966. movl %r12d, %ebx
  8967. rorxl $11, %r11d, %ecx
  8968. addl 36(%rsp), %r14d
  8969. vpsrld $18, %xmm5, %xmm6
  8970. # rnd_1: 1 - 1
  8971. xorl %edx, %ecx
  8972. xorl %r13d, %ebx
  8973. rorxl $25, %r11d, %edx
  8974. vpslld $14, %xmm5, %xmm5
  8975. # rnd_1: 2 - 2
  8976. andl %r11d, %ebx
  8977. xorl %ecx, %edx
  8978. rorxl $13, %r15d, %ecx
  8979. vpxor %xmm5, %xmm7, %xmm7
  8980. # rnd_1: 3 - 3
  8981. addl %edx, %r14d
  8982. rorxl $2, %r15d, %edx
  8983. xorl %r13d, %ebx
  8984. vpxor %xmm6, %xmm7, %xmm7
  8985. # rnd_1: 4 - 4
  8986. xorl %edx, %ecx
  8987. rorxl $22, %r15d, %edx
  8988. addl %ebx, %r14d
  8989. vpshufd $0xfa, %xmm1, %xmm6
  8990. # rnd_1: 5 - 5
  8991. xorl %ecx, %edx
  8992. movl %r8d, %ebx
  8993. addl %r14d, %r10d
  8994. vpxor %xmm8, %xmm7, %xmm5
  8995. # rnd_1: 6 - 6
  8996. xorl %r15d, %ebx
  8997. addl %edx, %r14d
  8998. andl %ebx, %eax
  8999. vpsrld $10, %xmm6, %xmm8
  9000. # rnd_1: 7 - 7
  9001. xorl %r8d, %eax
  9002. rorxl $6, %r10d, %edx
  9003. addl %eax, %r14d
  9004. # rnd_0: 0 - 0
  9005. movl %r11d, %eax
  9006. rorxl $11, %r10d, %ecx
  9007. addl 40(%rsp), %r13d
  9008. vpsrlq $19, %xmm6, %xmm7
  9009. # rnd_0: 1 - 1
  9010. xorl %edx, %ecx
  9011. xorl %r12d, %eax
  9012. rorxl $25, %r10d, %edx
  9013. vpsrlq $0x11, %xmm6, %xmm6
  9014. vpaddd %xmm2, %xmm4, %xmm4
  9015. # rnd_0: 2 - 2
  9016. andl %r10d, %eax
  9017. xorl %ecx, %edx
  9018. rorxl $13, %r14d, %ecx
  9019. vpaddd %xmm5, %xmm4, %xmm4
  9020. # rnd_0: 3 - 3
  9021. addl %edx, %r13d
  9022. rorxl $2, %r14d, %edx
  9023. xorl %r12d, %eax
  9024. vpxor %xmm7, %xmm6, %xmm6
  9025. # rnd_0: 4 - 4
  9026. xorl %edx, %ecx
  9027. rorxl $22, %r14d, %edx
  9028. addl %eax, %r13d
  9029. vpxor %xmm6, %xmm8, %xmm8
  9030. # rnd_0: 5 - 5
  9031. xorl %ecx, %edx
  9032. movl %r15d, %eax
  9033. addl %r13d, %r9d
  9034. vpshufb %xmm11, %xmm8, %xmm8
  9035. # rnd_0: 6 - 6
  9036. xorl %r14d, %eax
  9037. addl %edx, %r13d
  9038. andl %eax, %ebx
  9039. vpaddd %xmm8, %xmm4, %xmm4
  9040. # rnd_0: 7 - 7
  9041. xorl %r15d, %ebx
  9042. rorxl $6, %r9d, %edx
  9043. addl %ebx, %r13d
  9044. # rnd_1: 0 - 0
  9045. movl %r10d, %ebx
  9046. rorxl $11, %r9d, %ecx
  9047. addl 44(%rsp), %r12d
  9048. vpshufd $0x50, %xmm4, %xmm6
  9049. # rnd_1: 1 - 1
  9050. xorl %edx, %ecx
  9051. xorl %r11d, %ebx
  9052. rorxl $25, %r9d, %edx
  9053. vpsrld $10, %xmm6, %xmm9
  9054. # rnd_1: 2 - 2
  9055. andl %r9d, %ebx
  9056. xorl %ecx, %edx
  9057. rorxl $13, %r13d, %ecx
  9058. vpsrlq $19, %xmm6, %xmm7
  9059. # rnd_1: 3 - 3
  9060. addl %edx, %r12d
  9061. rorxl $2, %r13d, %edx
  9062. xorl %r11d, %ebx
  9063. vpsrlq $0x11, %xmm6, %xmm6
  9064. # rnd_1: 4 - 4
  9065. xorl %edx, %ecx
  9066. rorxl $22, %r13d, %edx
  9067. addl %ebx, %r12d
  9068. vpxor %xmm7, %xmm6, %xmm6
  9069. # rnd_1: 5 - 5
  9070. xorl %ecx, %edx
  9071. movl %r14d, %ebx
  9072. addl %r12d, %r8d
  9073. vpxor %xmm6, %xmm9, %xmm9
  9074. # rnd_1: 6 - 6
  9075. xorl %r13d, %ebx
  9076. addl %edx, %r12d
  9077. andl %ebx, %eax
  9078. vpshufb %xmm12, %xmm9, %xmm9
  9079. # rnd_1: 7 - 7
  9080. xorl %r14d, %eax
  9081. rorxl $6, %r8d, %edx
  9082. addl %eax, %r12d
  9083. vpaddd %xmm4, %xmm9, %xmm2
  9084. # msg_sched done: 8-11
  9085. # msg_sched: 12-15
  9086. # rnd_0: 0 - 0
  9087. movl %r9d, %eax
  9088. rorxl $11, %r8d, %ecx
  9089. addl 48(%rsp), %r11d
  9090. vpalignr $4, %xmm1, %xmm2, %xmm4
  9091. vpalignr $4, %xmm3, %xmm0, %xmm5
  9092. # rnd_0: 1 - 2
  9093. xorl %edx, %ecx
  9094. xorl %r10d, %eax
  9095. rorxl $25, %r8d, %edx
  9096. andl %r8d, %eax
  9097. xorl %ecx, %edx
  9098. rorxl $13, %r12d, %ecx
  9099. vpsrld $7, %xmm5, %xmm6
  9100. vpslld $25, %xmm5, %xmm7
  9101. # rnd_0: 3 - 4
  9102. addl %edx, %r11d
  9103. rorxl $2, %r12d, %edx
  9104. xorl %r10d, %eax
  9105. xorl %edx, %ecx
  9106. rorxl $22, %r12d, %edx
  9107. addl %eax, %r11d
  9108. vpsrld $3, %xmm5, %xmm8
  9109. vpor %xmm6, %xmm7, %xmm7
  9110. # rnd_0: 5 - 7
  9111. xorl %ecx, %edx
  9112. movl %r13d, %eax
  9113. addl %r11d, %r15d
  9114. xorl %r12d, %eax
  9115. addl %edx, %r11d
  9116. andl %eax, %ebx
  9117. xorl %r13d, %ebx
  9118. rorxl $6, %r15d, %edx
  9119. addl %ebx, %r11d
  9120. # rnd_1: 0 - 0
  9121. movl %r8d, %ebx
  9122. rorxl $11, %r15d, %ecx
  9123. addl 52(%rsp), %r10d
  9124. vpsrld $18, %xmm5, %xmm6
  9125. # rnd_1: 1 - 1
  9126. xorl %edx, %ecx
  9127. xorl %r9d, %ebx
  9128. rorxl $25, %r15d, %edx
  9129. vpslld $14, %xmm5, %xmm5
  9130. # rnd_1: 2 - 2
  9131. andl %r15d, %ebx
  9132. xorl %ecx, %edx
  9133. rorxl $13, %r11d, %ecx
  9134. vpxor %xmm5, %xmm7, %xmm7
  9135. # rnd_1: 3 - 3
  9136. addl %edx, %r10d
  9137. rorxl $2, %r11d, %edx
  9138. xorl %r9d, %ebx
  9139. vpxor %xmm6, %xmm7, %xmm7
  9140. # rnd_1: 4 - 4
  9141. xorl %edx, %ecx
  9142. rorxl $22, %r11d, %edx
  9143. addl %ebx, %r10d
  9144. vpshufd $0xfa, %xmm2, %xmm6
  9145. # rnd_1: 5 - 5
  9146. xorl %ecx, %edx
  9147. movl %r12d, %ebx
  9148. addl %r10d, %r14d
  9149. vpxor %xmm8, %xmm7, %xmm5
  9150. # rnd_1: 6 - 6
  9151. xorl %r11d, %ebx
  9152. addl %edx, %r10d
  9153. andl %ebx, %eax
  9154. vpsrld $10, %xmm6, %xmm8
  9155. # rnd_1: 7 - 7
  9156. xorl %r12d, %eax
  9157. rorxl $6, %r14d, %edx
  9158. addl %eax, %r10d
  9159. # rnd_0: 0 - 0
  9160. movl %r15d, %eax
  9161. rorxl $11, %r14d, %ecx
  9162. addl 56(%rsp), %r9d
  9163. vpsrlq $19, %xmm6, %xmm7
  9164. # rnd_0: 1 - 1
  9165. xorl %edx, %ecx
  9166. xorl %r8d, %eax
  9167. rorxl $25, %r14d, %edx
  9168. vpsrlq $0x11, %xmm6, %xmm6
  9169. vpaddd %xmm3, %xmm4, %xmm4
  9170. # rnd_0: 2 - 2
  9171. andl %r14d, %eax
  9172. xorl %ecx, %edx
  9173. rorxl $13, %r10d, %ecx
  9174. vpaddd %xmm5, %xmm4, %xmm4
  9175. # rnd_0: 3 - 3
  9176. addl %edx, %r9d
  9177. rorxl $2, %r10d, %edx
  9178. xorl %r8d, %eax
  9179. vpxor %xmm7, %xmm6, %xmm6
  9180. # rnd_0: 4 - 4
  9181. xorl %edx, %ecx
  9182. rorxl $22, %r10d, %edx
  9183. addl %eax, %r9d
  9184. vpxor %xmm6, %xmm8, %xmm8
  9185. # rnd_0: 5 - 5
  9186. xorl %ecx, %edx
  9187. movl %r11d, %eax
  9188. addl %r9d, %r13d
  9189. vpshufb %xmm11, %xmm8, %xmm8
  9190. # rnd_0: 6 - 6
  9191. xorl %r10d, %eax
  9192. addl %edx, %r9d
  9193. andl %eax, %ebx
  9194. vpaddd %xmm8, %xmm4, %xmm4
  9195. # rnd_0: 7 - 7
  9196. xorl %r11d, %ebx
  9197. rorxl $6, %r13d, %edx
  9198. addl %ebx, %r9d
  9199. # rnd_1: 0 - 0
  9200. movl %r14d, %ebx
  9201. rorxl $11, %r13d, %ecx
  9202. addl 60(%rsp), %r8d
  9203. vpshufd $0x50, %xmm4, %xmm6
  9204. # rnd_1: 1 - 1
  9205. xorl %edx, %ecx
  9206. xorl %r15d, %ebx
  9207. rorxl $25, %r13d, %edx
  9208. vpsrld $10, %xmm6, %xmm9
  9209. # rnd_1: 2 - 2
  9210. andl %r13d, %ebx
  9211. xorl %ecx, %edx
  9212. rorxl $13, %r9d, %ecx
  9213. vpsrlq $19, %xmm6, %xmm7
  9214. # rnd_1: 3 - 3
  9215. addl %edx, %r8d
  9216. rorxl $2, %r9d, %edx
  9217. xorl %r15d, %ebx
  9218. vpsrlq $0x11, %xmm6, %xmm6
  9219. # rnd_1: 4 - 4
  9220. xorl %edx, %ecx
  9221. rorxl $22, %r9d, %edx
  9222. addl %ebx, %r8d
  9223. vpxor %xmm7, %xmm6, %xmm6
  9224. # rnd_1: 5 - 5
  9225. xorl %ecx, %edx
  9226. movl %r10d, %ebx
  9227. addl %r8d, %r12d
  9228. vpxor %xmm6, %xmm9, %xmm9
  9229. # rnd_1: 6 - 6
  9230. xorl %r9d, %ebx
  9231. addl %edx, %r8d
  9232. andl %ebx, %eax
  9233. vpshufb %xmm12, %xmm9, %xmm9
  9234. # rnd_1: 7 - 7
  9235. xorl %r10d, %eax
  9236. rorxl $6, %r12d, %edx
  9237. addl %eax, %r8d
  9238. vpaddd %xmm4, %xmm9, %xmm3
  9239. # msg_sched done: 12-15
  9240. # set_w_k_xfer_4: 12
  9241. vpaddd 192+L_avx1_rorx_sha256_k(%rip), %xmm0, %xmm4
  9242. vpaddd 208+L_avx1_rorx_sha256_k(%rip), %xmm1, %xmm5
  9243. vmovdqu %xmm4, (%rsp)
  9244. vmovdqu %xmm5, 16(%rsp)
  9245. vpaddd 224+L_avx1_rorx_sha256_k(%rip), %xmm2, %xmm6
  9246. vpaddd 240+L_avx1_rorx_sha256_k(%rip), %xmm3, %xmm7
  9247. vmovdqu %xmm6, 32(%rsp)
  9248. vmovdqu %xmm7, 48(%rsp)
  9249. xorl %eax, %eax
  9250. xorl %ecx, %ecx
  9251. # rnd_all_4: 0-3
  9252. rorxl $6, %r12d, %edx
  9253. rorxl $11, %r12d, %ecx
  9254. addl %eax, %r8d
  9255. addl (%rsp), %r15d
  9256. movl %r13d, %eax
  9257. xorl %edx, %ecx
  9258. xorl %r14d, %eax
  9259. rorxl $25, %r12d, %edx
  9260. xorl %ecx, %edx
  9261. andl %r12d, %eax
  9262. addl %edx, %r15d
  9263. rorxl $2, %r8d, %edx
  9264. rorxl $13, %r8d, %ecx
  9265. xorl %r14d, %eax
  9266. xorl %edx, %ecx
  9267. rorxl $22, %r8d, %edx
  9268. addl %eax, %r15d
  9269. xorl %ecx, %edx
  9270. movl %r9d, %eax
  9271. addl %r15d, %r11d
  9272. xorl %r8d, %eax
  9273. andl %eax, %ebx
  9274. addl %edx, %r15d
  9275. xorl %r9d, %ebx
  9276. rorxl $6, %r11d, %edx
  9277. rorxl $11, %r11d, %ecx
  9278. addl %ebx, %r15d
  9279. addl 4(%rsp), %r14d
  9280. movl %r12d, %ebx
  9281. xorl %edx, %ecx
  9282. xorl %r13d, %ebx
  9283. rorxl $25, %r11d, %edx
  9284. xorl %ecx, %edx
  9285. andl %r11d, %ebx
  9286. addl %edx, %r14d
  9287. rorxl $2, %r15d, %edx
  9288. rorxl $13, %r15d, %ecx
  9289. xorl %r13d, %ebx
  9290. xorl %edx, %ecx
  9291. rorxl $22, %r15d, %edx
  9292. addl %ebx, %r14d
  9293. xorl %ecx, %edx
  9294. movl %r8d, %ebx
  9295. addl %r14d, %r10d
  9296. xorl %r15d, %ebx
  9297. andl %ebx, %eax
  9298. addl %edx, %r14d
  9299. xorl %r8d, %eax
  9300. rorxl $6, %r10d, %edx
  9301. rorxl $11, %r10d, %ecx
  9302. addl %eax, %r14d
  9303. addl 8(%rsp), %r13d
  9304. movl %r11d, %eax
  9305. xorl %edx, %ecx
  9306. xorl %r12d, %eax
  9307. rorxl $25, %r10d, %edx
  9308. xorl %ecx, %edx
  9309. andl %r10d, %eax
  9310. addl %edx, %r13d
  9311. rorxl $2, %r14d, %edx
  9312. rorxl $13, %r14d, %ecx
  9313. xorl %r12d, %eax
  9314. xorl %edx, %ecx
  9315. rorxl $22, %r14d, %edx
  9316. addl %eax, %r13d
  9317. xorl %ecx, %edx
  9318. movl %r15d, %eax
  9319. addl %r13d, %r9d
  9320. xorl %r14d, %eax
  9321. andl %eax, %ebx
  9322. addl %edx, %r13d
  9323. xorl %r15d, %ebx
  9324. rorxl $6, %r9d, %edx
  9325. rorxl $11, %r9d, %ecx
  9326. addl %ebx, %r13d
  9327. addl 12(%rsp), %r12d
  9328. movl %r10d, %ebx
  9329. xorl %edx, %ecx
  9330. xorl %r11d, %ebx
  9331. rorxl $25, %r9d, %edx
  9332. xorl %ecx, %edx
  9333. andl %r9d, %ebx
  9334. addl %edx, %r12d
  9335. rorxl $2, %r13d, %edx
  9336. rorxl $13, %r13d, %ecx
  9337. xorl %r11d, %ebx
  9338. xorl %edx, %ecx
  9339. rorxl $22, %r13d, %edx
  9340. addl %ebx, %r12d
  9341. xorl %ecx, %edx
  9342. movl %r14d, %ebx
  9343. addl %r12d, %r8d
  9344. xorl %r13d, %ebx
  9345. andl %ebx, %eax
  9346. addl %edx, %r12d
  9347. xorl %r14d, %eax
  9348. # rnd_all_4: 1-4
  9349. rorxl $6, %r8d, %edx
  9350. rorxl $11, %r8d, %ecx
  9351. addl %eax, %r12d
  9352. addl 16(%rsp), %r11d
  9353. movl %r9d, %eax
  9354. xorl %edx, %ecx
  9355. xorl %r10d, %eax
  9356. rorxl $25, %r8d, %edx
  9357. xorl %ecx, %edx
  9358. andl %r8d, %eax
  9359. addl %edx, %r11d
  9360. rorxl $2, %r12d, %edx
  9361. rorxl $13, %r12d, %ecx
  9362. xorl %r10d, %eax
  9363. xorl %edx, %ecx
  9364. rorxl $22, %r12d, %edx
  9365. addl %eax, %r11d
  9366. xorl %ecx, %edx
  9367. movl %r13d, %eax
  9368. addl %r11d, %r15d
  9369. xorl %r12d, %eax
  9370. andl %eax, %ebx
  9371. addl %edx, %r11d
  9372. xorl %r13d, %ebx
  9373. rorxl $6, %r15d, %edx
  9374. rorxl $11, %r15d, %ecx
  9375. addl %ebx, %r11d
  9376. addl 20(%rsp), %r10d
  9377. movl %r8d, %ebx
  9378. xorl %edx, %ecx
  9379. xorl %r9d, %ebx
  9380. rorxl $25, %r15d, %edx
  9381. xorl %ecx, %edx
  9382. andl %r15d, %ebx
  9383. addl %edx, %r10d
  9384. rorxl $2, %r11d, %edx
  9385. rorxl $13, %r11d, %ecx
  9386. xorl %r9d, %ebx
  9387. xorl %edx, %ecx
  9388. rorxl $22, %r11d, %edx
  9389. addl %ebx, %r10d
  9390. xorl %ecx, %edx
  9391. movl %r12d, %ebx
  9392. addl %r10d, %r14d
  9393. xorl %r11d, %ebx
  9394. andl %ebx, %eax
  9395. addl %edx, %r10d
  9396. xorl %r12d, %eax
  9397. rorxl $6, %r14d, %edx
  9398. rorxl $11, %r14d, %ecx
  9399. addl %eax, %r10d
  9400. addl 24(%rsp), %r9d
  9401. movl %r15d, %eax
  9402. xorl %edx, %ecx
  9403. xorl %r8d, %eax
  9404. rorxl $25, %r14d, %edx
  9405. xorl %ecx, %edx
  9406. andl %r14d, %eax
  9407. addl %edx, %r9d
  9408. rorxl $2, %r10d, %edx
  9409. rorxl $13, %r10d, %ecx
  9410. xorl %r8d, %eax
  9411. xorl %edx, %ecx
  9412. rorxl $22, %r10d, %edx
  9413. addl %eax, %r9d
  9414. xorl %ecx, %edx
  9415. movl %r11d, %eax
  9416. addl %r9d, %r13d
  9417. xorl %r10d, %eax
  9418. andl %eax, %ebx
  9419. addl %edx, %r9d
  9420. xorl %r11d, %ebx
  9421. rorxl $6, %r13d, %edx
  9422. rorxl $11, %r13d, %ecx
  9423. addl %ebx, %r9d
  9424. addl 28(%rsp), %r8d
  9425. movl %r14d, %ebx
  9426. xorl %edx, %ecx
  9427. xorl %r15d, %ebx
  9428. rorxl $25, %r13d, %edx
  9429. xorl %ecx, %edx
  9430. andl %r13d, %ebx
  9431. addl %edx, %r8d
  9432. rorxl $2, %r9d, %edx
  9433. rorxl $13, %r9d, %ecx
  9434. xorl %r15d, %ebx
  9435. xorl %edx, %ecx
  9436. rorxl $22, %r9d, %edx
  9437. addl %ebx, %r8d
  9438. xorl %ecx, %edx
  9439. movl %r10d, %ebx
  9440. addl %r8d, %r12d
  9441. xorl %r9d, %ebx
  9442. andl %ebx, %eax
  9443. addl %edx, %r8d
  9444. xorl %r10d, %eax
  9445. # rnd_all_4: 2-5
  9446. rorxl $6, %r12d, %edx
  9447. rorxl $11, %r12d, %ecx
  9448. addl %eax, %r8d
  9449. addl 32(%rsp), %r15d
  9450. movl %r13d, %eax
  9451. xorl %edx, %ecx
  9452. xorl %r14d, %eax
  9453. rorxl $25, %r12d, %edx
  9454. xorl %ecx, %edx
  9455. andl %r12d, %eax
  9456. addl %edx, %r15d
  9457. rorxl $2, %r8d, %edx
  9458. rorxl $13, %r8d, %ecx
  9459. xorl %r14d, %eax
  9460. xorl %edx, %ecx
  9461. rorxl $22, %r8d, %edx
  9462. addl %eax, %r15d
  9463. xorl %ecx, %edx
  9464. movl %r9d, %eax
  9465. addl %r15d, %r11d
  9466. xorl %r8d, %eax
  9467. andl %eax, %ebx
  9468. addl %edx, %r15d
  9469. xorl %r9d, %ebx
  9470. rorxl $6, %r11d, %edx
  9471. rorxl $11, %r11d, %ecx
  9472. addl %ebx, %r15d
  9473. addl 36(%rsp), %r14d
  9474. movl %r12d, %ebx
  9475. xorl %edx, %ecx
  9476. xorl %r13d, %ebx
  9477. rorxl $25, %r11d, %edx
  9478. xorl %ecx, %edx
  9479. andl %r11d, %ebx
  9480. addl %edx, %r14d
  9481. rorxl $2, %r15d, %edx
  9482. rorxl $13, %r15d, %ecx
  9483. xorl %r13d, %ebx
  9484. xorl %edx, %ecx
  9485. rorxl $22, %r15d, %edx
  9486. addl %ebx, %r14d
  9487. xorl %ecx, %edx
  9488. movl %r8d, %ebx
  9489. addl %r14d, %r10d
  9490. xorl %r15d, %ebx
  9491. andl %ebx, %eax
  9492. addl %edx, %r14d
  9493. xorl %r8d, %eax
  9494. rorxl $6, %r10d, %edx
  9495. rorxl $11, %r10d, %ecx
  9496. addl %eax, %r14d
  9497. addl 40(%rsp), %r13d
  9498. movl %r11d, %eax
  9499. xorl %edx, %ecx
  9500. xorl %r12d, %eax
  9501. rorxl $25, %r10d, %edx
  9502. xorl %ecx, %edx
  9503. andl %r10d, %eax
  9504. addl %edx, %r13d
  9505. rorxl $2, %r14d, %edx
  9506. rorxl $13, %r14d, %ecx
  9507. xorl %r12d, %eax
  9508. xorl %edx, %ecx
  9509. rorxl $22, %r14d, %edx
  9510. addl %eax, %r13d
  9511. xorl %ecx, %edx
  9512. movl %r15d, %eax
  9513. addl %r13d, %r9d
  9514. xorl %r14d, %eax
  9515. andl %eax, %ebx
  9516. addl %edx, %r13d
  9517. xorl %r15d, %ebx
  9518. rorxl $6, %r9d, %edx
  9519. rorxl $11, %r9d, %ecx
  9520. addl %ebx, %r13d
  9521. addl 44(%rsp), %r12d
  9522. movl %r10d, %ebx
  9523. xorl %edx, %ecx
  9524. xorl %r11d, %ebx
  9525. rorxl $25, %r9d, %edx
  9526. xorl %ecx, %edx
  9527. andl %r9d, %ebx
  9528. addl %edx, %r12d
  9529. rorxl $2, %r13d, %edx
  9530. rorxl $13, %r13d, %ecx
  9531. xorl %r11d, %ebx
  9532. xorl %edx, %ecx
  9533. rorxl $22, %r13d, %edx
  9534. addl %ebx, %r12d
  9535. xorl %ecx, %edx
  9536. movl %r14d, %ebx
  9537. addl %r12d, %r8d
  9538. xorl %r13d, %ebx
  9539. andl %ebx, %eax
  9540. addl %edx, %r12d
  9541. xorl %r14d, %eax
  9542. # rnd_all_4: 3-6
  9543. rorxl $6, %r8d, %edx
  9544. rorxl $11, %r8d, %ecx
  9545. addl %eax, %r12d
  9546. addl 48(%rsp), %r11d
  9547. movl %r9d, %eax
  9548. xorl %edx, %ecx
  9549. xorl %r10d, %eax
  9550. rorxl $25, %r8d, %edx
  9551. xorl %ecx, %edx
  9552. andl %r8d, %eax
  9553. addl %edx, %r11d
  9554. rorxl $2, %r12d, %edx
  9555. rorxl $13, %r12d, %ecx
  9556. xorl %r10d, %eax
  9557. xorl %edx, %ecx
  9558. rorxl $22, %r12d, %edx
  9559. addl %eax, %r11d
  9560. xorl %ecx, %edx
  9561. movl %r13d, %eax
  9562. addl %r11d, %r15d
  9563. xorl %r12d, %eax
  9564. andl %eax, %ebx
  9565. addl %edx, %r11d
  9566. xorl %r13d, %ebx
  9567. rorxl $6, %r15d, %edx
  9568. rorxl $11, %r15d, %ecx
  9569. addl %ebx, %r11d
  9570. addl 52(%rsp), %r10d
  9571. movl %r8d, %ebx
  9572. xorl %edx, %ecx
  9573. xorl %r9d, %ebx
  9574. rorxl $25, %r15d, %edx
  9575. xorl %ecx, %edx
  9576. andl %r15d, %ebx
  9577. addl %edx, %r10d
  9578. rorxl $2, %r11d, %edx
  9579. rorxl $13, %r11d, %ecx
  9580. xorl %r9d, %ebx
  9581. xorl %edx, %ecx
  9582. rorxl $22, %r11d, %edx
  9583. addl %ebx, %r10d
  9584. xorl %ecx, %edx
  9585. movl %r12d, %ebx
  9586. addl %r10d, %r14d
  9587. xorl %r11d, %ebx
  9588. andl %ebx, %eax
  9589. addl %edx, %r10d
  9590. xorl %r12d, %eax
  9591. rorxl $6, %r14d, %edx
  9592. rorxl $11, %r14d, %ecx
  9593. addl %eax, %r10d
  9594. addl 56(%rsp), %r9d
  9595. movl %r15d, %eax
  9596. xorl %edx, %ecx
  9597. xorl %r8d, %eax
  9598. rorxl $25, %r14d, %edx
  9599. xorl %ecx, %edx
  9600. andl %r14d, %eax
  9601. addl %edx, %r9d
  9602. rorxl $2, %r10d, %edx
  9603. rorxl $13, %r10d, %ecx
  9604. xorl %r8d, %eax
  9605. xorl %edx, %ecx
  9606. rorxl $22, %r10d, %edx
  9607. addl %eax, %r9d
  9608. xorl %ecx, %edx
  9609. movl %r11d, %eax
  9610. addl %r9d, %r13d
  9611. xorl %r10d, %eax
  9612. andl %eax, %ebx
  9613. addl %edx, %r9d
  9614. xorl %r11d, %ebx
  9615. rorxl $6, %r13d, %edx
  9616. rorxl $11, %r13d, %ecx
  9617. addl %ebx, %r9d
  9618. addl 60(%rsp), %r8d
  9619. movl %r14d, %ebx
  9620. xorl %edx, %ecx
  9621. xorl %r15d, %ebx
  9622. rorxl $25, %r13d, %edx
  9623. xorl %ecx, %edx
  9624. andl %r13d, %ebx
  9625. addl %edx, %r8d
  9626. rorxl $2, %r9d, %edx
  9627. rorxl $13, %r9d, %ecx
  9628. xorl %r15d, %ebx
  9629. xorl %edx, %ecx
  9630. rorxl $22, %r9d, %edx
  9631. addl %ebx, %r8d
  9632. xorl %ecx, %edx
  9633. movl %r10d, %ebx
  9634. addl %r8d, %r12d
  9635. xorl %r9d, %ebx
  9636. andl %ebx, %eax
  9637. addl %edx, %r8d
  9638. xorl %r10d, %eax
  9639. addl %eax, %r8d
  9640. addl (%rdi), %r8d
  9641. addl 4(%rdi), %r9d
  9642. addl 8(%rdi), %r10d
  9643. addl 12(%rdi), %r11d
  9644. addl 16(%rdi), %r12d
  9645. addl 20(%rdi), %r13d
  9646. addl 24(%rdi), %r14d
  9647. addl 28(%rdi), %r15d
  9648. addq $0x40, %rbp
  9649. subl $0x40, %esi
  9650. movl %r8d, (%rdi)
  9651. movl %r9d, 4(%rdi)
  9652. movl %r10d, 8(%rdi)
  9653. movl %r11d, 12(%rdi)
  9654. movl %r12d, 16(%rdi)
  9655. movl %r13d, 20(%rdi)
  9656. movl %r14d, 24(%rdi)
  9657. movl %r15d, 28(%rdi)
  9658. jnz L_sha256_len_avx1_len_rorx_start
  9659. xorq %rax, %rax
  9660. vzeroupper
  9661. addq $0x40, %rsp
  9662. popq %rbp
  9663. popq %r15
  9664. popq %r14
  9665. popq %r13
  9666. popq %r12
  9667. popq %rbx
  9668. repz retq
  9669. #ifndef __APPLE__
  9670. .size Transform_Sha256_AVX1_RORX_Len,.-Transform_Sha256_AVX1_RORX_Len
  9671. #endif /* __APPLE__ */
  9672. #endif /* HAVE_INTEL_AVX1 */
  9673. #ifdef HAVE_INTEL_AVX2
  9674. #ifndef __APPLE__
  9675. .data
  9676. #else
  9677. .section __DATA,__data
  9678. #endif /* __APPLE__ */
  9679. L_avx2_sha256_k:
  9680. .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  9681. .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  9682. .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  9683. .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  9684. .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  9685. .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  9686. .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  9687. .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  9688. .long 0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc
  9689. .long 0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc
  9690. .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  9691. .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  9692. .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  9693. .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  9694. .long 0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967
  9695. .long 0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967
  9696. .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  9697. .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  9698. .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  9699. .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  9700. .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  9701. .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  9702. .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  9703. .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  9704. .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  9705. .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  9706. .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  9707. .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  9708. .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  9709. .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  9710. .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  9711. .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  9712. #ifndef __APPLE__
  9713. .data
  9714. #else
  9715. .section __DATA,__data
  9716. #endif /* __APPLE__ */
  9717. #ifndef __APPLE__
  9718. .align 32
  9719. #else
  9720. .p2align 5
  9721. #endif /* __APPLE__ */
  9722. L_avx2_sha256_shuf_00BA:
  9723. .quad 0xb0a090803020100, 0xffffffffffffffff
  9724. .quad 0xb0a090803020100, 0xffffffffffffffff
  9725. #ifndef __APPLE__
  9726. .data
  9727. #else
  9728. .section __DATA,__data
  9729. #endif /* __APPLE__ */
  9730. #ifndef __APPLE__
  9731. .align 32
  9732. #else
  9733. .p2align 5
  9734. #endif /* __APPLE__ */
  9735. L_avx2_sha256_shuf_DC00:
  9736. .quad 0xffffffffffffffff, 0xb0a090803020100
  9737. .quad 0xffffffffffffffff, 0xb0a090803020100
  9738. #ifndef __APPLE__
  9739. .data
  9740. #else
  9741. .section __DATA,__data
  9742. #endif /* __APPLE__ */
  9743. #ifndef __APPLE__
  9744. .align 32
  9745. #else
  9746. .p2align 5
  9747. #endif /* __APPLE__ */
  9748. L_avx2_sha256_flip_mask:
  9749. .quad 0x405060700010203, 0xc0d0e0f08090a0b
  9750. .quad 0x405060700010203, 0xc0d0e0f08090a0b
  9751. #ifndef __APPLE__
  9752. .text
  9753. .globl Transform_Sha256_AVX2
  9754. .type Transform_Sha256_AVX2,@function
  9755. .align 16
  9756. Transform_Sha256_AVX2:
  9757. #else
  9758. .section __TEXT,__text
  9759. .globl _Transform_Sha256_AVX2
  9760. .p2align 4
  9761. _Transform_Sha256_AVX2:
  9762. #endif /* __APPLE__ */
  9763. pushq %rbx
  9764. pushq %r12
  9765. pushq %r13
  9766. pushq %r14
  9767. pushq %r15
  9768. subq $0x200, %rsp
  9769. leaq 32(%rdi), %rax
  9770. vmovdqa L_avx2_sha256_flip_mask(%rip), %xmm13
  9771. vmovdqa L_avx2_sha256_shuf_00BA(%rip), %ymm11
  9772. vmovdqa L_avx2_sha256_shuf_DC00(%rip), %ymm12
  9773. movl (%rdi), %r8d
  9774. movl 4(%rdi), %r9d
  9775. movl 8(%rdi), %r10d
  9776. movl 12(%rdi), %r11d
  9777. movl 16(%rdi), %r12d
  9778. movl 20(%rdi), %r13d
  9779. movl 24(%rdi), %r14d
  9780. movl 28(%rdi), %r15d
  9781. # X0, X1, X2, X3 = W[0..15]
  9782. vmovdqu (%rax), %xmm0
  9783. vmovdqu 16(%rax), %xmm1
  9784. vpshufb %xmm13, %xmm0, %xmm0
  9785. vpshufb %xmm13, %xmm1, %xmm1
  9786. vmovdqu 32(%rax), %xmm2
  9787. vmovdqu 48(%rax), %xmm3
  9788. vpshufb %xmm13, %xmm2, %xmm2
  9789. vpshufb %xmm13, %xmm3, %xmm3
  9790. movl %r9d, %ebx
  9791. movl %r12d, %edx
  9792. xorl %r10d, %ebx
  9793. # set_w_k_xfer_4: 0
  9794. vpaddd 0+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  9795. vpaddd 32+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  9796. vmovdqu %ymm4, (%rsp)
  9797. vmovdqu %ymm5, 32(%rsp)
  9798. vpaddd 64+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  9799. vpaddd 96+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  9800. vmovdqu %ymm4, 64(%rsp)
  9801. vmovdqu %ymm5, 96(%rsp)
  9802. # msg_sched: 0-3
  9803. # rnd_0: 0 - 0
  9804. rorl $14, %edx
  9805. vpalignr $4, %ymm0, %ymm1, %ymm5
  9806. vpalignr $4, %ymm2, %ymm3, %ymm4
  9807. # rnd_0: 1 - 2
  9808. movl %r9d, %eax
  9809. movl %r13d, %ecx
  9810. addl (%rsp), %r15d
  9811. xorl %r14d, %ecx
  9812. xorl %r12d, %edx
  9813. andl %r12d, %ecx
  9814. vpsrld $7, %ymm5, %ymm6
  9815. vpslld $25, %ymm5, %ymm7
  9816. # rnd_0: 3 - 4
  9817. rorl $5, %edx
  9818. xorl %r14d, %ecx
  9819. xorl %r12d, %edx
  9820. addl %ecx, %r15d
  9821. rorl $6, %edx
  9822. xorl %r8d, %eax
  9823. addl %edx, %r15d
  9824. movl %r8d, %ecx
  9825. vpsrld $18, %ymm5, %ymm8
  9826. vpslld $14, %ymm5, %ymm9
  9827. # rnd_0: 5 - 6
  9828. andl %eax, %ebx
  9829. rorl $9, %ecx
  9830. xorl %r8d, %ecx
  9831. xorl %r9d, %ebx
  9832. rorl $11, %ecx
  9833. addl %r15d, %r11d
  9834. xorl %r8d, %ecx
  9835. addl %ebx, %r15d
  9836. vpor %ymm6, %ymm7, %ymm6
  9837. vpor %ymm8, %ymm9, %ymm8
  9838. # rnd_0: 7 - 7
  9839. rorl $2, %ecx
  9840. movl %r11d, %edx
  9841. addl %ecx, %r15d
  9842. # rnd_1: 0 - 1
  9843. rorl $14, %edx
  9844. movl %r8d, %ebx
  9845. movl %r12d, %ecx
  9846. addl 4(%rsp), %r14d
  9847. xorl %r13d, %ecx
  9848. vpsrld $3, %ymm5, %ymm9
  9849. vpxor %ymm6, %ymm8, %ymm6
  9850. # rnd_1: 2 - 3
  9851. xorl %r11d, %edx
  9852. andl %r11d, %ecx
  9853. rorl $5, %edx
  9854. xorl %r13d, %ecx
  9855. xorl %r11d, %edx
  9856. addl %ecx, %r14d
  9857. vpxor %ymm6, %ymm9, %ymm5
  9858. vpshufd $0xfa, %ymm3, %ymm6
  9859. # rnd_1: 4 - 5
  9860. rorl $6, %edx
  9861. xorl %r15d, %ebx
  9862. addl %edx, %r14d
  9863. movl %r15d, %ecx
  9864. andl %ebx, %eax
  9865. rorl $9, %ecx
  9866. xorl %r15d, %ecx
  9867. xorl %r8d, %eax
  9868. vpsrld $10, %ymm6, %ymm8
  9869. vpsrlq $19, %ymm6, %ymm7
  9870. # rnd_1: 6 - 7
  9871. rorl $11, %ecx
  9872. addl %r14d, %r10d
  9873. xorl %r15d, %ecx
  9874. addl %eax, %r14d
  9875. rorl $2, %ecx
  9876. movl %r10d, %edx
  9877. addl %ecx, %r14d
  9878. # rnd_0: 0 - 0
  9879. rorl $14, %edx
  9880. vpsrlq $0x11, %ymm6, %ymm6
  9881. vpaddd %ymm0, %ymm4, %ymm4
  9882. # rnd_0: 1 - 3
  9883. movl %r15d, %eax
  9884. movl %r11d, %ecx
  9885. addl 8(%rsp), %r13d
  9886. xorl %r12d, %ecx
  9887. xorl %r10d, %edx
  9888. andl %r10d, %ecx
  9889. rorl $5, %edx
  9890. xorl %r12d, %ecx
  9891. xorl %r10d, %edx
  9892. addl %ecx, %r13d
  9893. vpxor %ymm6, %ymm7, %ymm6
  9894. vpaddd %ymm5, %ymm4, %ymm4
  9895. # rnd_0: 4 - 4
  9896. rorl $6, %edx
  9897. xorl %r14d, %eax
  9898. addl %edx, %r13d
  9899. movl %r14d, %ecx
  9900. vpxor %ymm6, %ymm8, %ymm8
  9901. # rnd_0: 5 - 5
  9902. andl %eax, %ebx
  9903. rorl $9, %ecx
  9904. xorl %r14d, %ecx
  9905. xorl %r15d, %ebx
  9906. vpshufb %ymm11, %ymm8, %ymm8
  9907. # rnd_0: 6 - 6
  9908. rorl $11, %ecx
  9909. addl %r13d, %r9d
  9910. xorl %r14d, %ecx
  9911. addl %ebx, %r13d
  9912. vpaddd %ymm8, %ymm4, %ymm4
  9913. # rnd_0: 7 - 7
  9914. rorl $2, %ecx
  9915. movl %r9d, %edx
  9916. addl %ecx, %r13d
  9917. # rnd_1: 0 - 0
  9918. rorl $14, %edx
  9919. vpshufd $0x50, %ymm4, %ymm6
  9920. # rnd_1: 1 - 1
  9921. movl %r14d, %ebx
  9922. movl %r10d, %ecx
  9923. addl 12(%rsp), %r12d
  9924. xorl %r11d, %ecx
  9925. vpsrlq $0x11, %ymm6, %ymm8
  9926. vpsrlq $19, %ymm6, %ymm7
  9927. # rnd_1: 2 - 3
  9928. xorl %r9d, %edx
  9929. andl %r9d, %ecx
  9930. rorl $5, %edx
  9931. xorl %r11d, %ecx
  9932. xorl %r9d, %edx
  9933. addl %ecx, %r12d
  9934. vpsrld $10, %ymm6, %ymm9
  9935. vpxor %ymm8, %ymm7, %ymm8
  9936. # rnd_1: 4 - 5
  9937. rorl $6, %edx
  9938. xorl %r13d, %ebx
  9939. addl %edx, %r12d
  9940. movl %r13d, %ecx
  9941. andl %ebx, %eax
  9942. rorl $9, %ecx
  9943. xorl %r13d, %ecx
  9944. xorl %r14d, %eax
  9945. vpxor %ymm9, %ymm8, %ymm9
  9946. # rnd_1: 6 - 6
  9947. rorl $11, %ecx
  9948. addl %r12d, %r8d
  9949. xorl %r13d, %ecx
  9950. addl %eax, %r12d
  9951. vpshufb %ymm12, %ymm9, %ymm9
  9952. # rnd_1: 7 - 7
  9953. rorl $2, %ecx
  9954. movl %r8d, %edx
  9955. addl %ecx, %r12d
  9956. vpaddd %ymm4, %ymm9, %ymm0
  9957. # msg_sched done: 0-3
  9958. # msg_sched: 8-11
  9959. # rnd_0: 0 - 0
  9960. rorl $14, %edx
  9961. vpalignr $4, %ymm1, %ymm2, %ymm5
  9962. vpalignr $4, %ymm3, %ymm0, %ymm4
  9963. # rnd_0: 1 - 2
  9964. movl %r13d, %eax
  9965. movl %r9d, %ecx
  9966. addl 32(%rsp), %r11d
  9967. xorl %r10d, %ecx
  9968. xorl %r8d, %edx
  9969. andl %r8d, %ecx
  9970. vpsrld $7, %ymm5, %ymm6
  9971. vpslld $25, %ymm5, %ymm7
  9972. # rnd_0: 3 - 4
  9973. rorl $5, %edx
  9974. xorl %r10d, %ecx
  9975. xorl %r8d, %edx
  9976. addl %ecx, %r11d
  9977. rorl $6, %edx
  9978. xorl %r12d, %eax
  9979. addl %edx, %r11d
  9980. movl %r12d, %ecx
  9981. vpsrld $18, %ymm5, %ymm8
  9982. vpslld $14, %ymm5, %ymm9
  9983. # rnd_0: 5 - 6
  9984. andl %eax, %ebx
  9985. rorl $9, %ecx
  9986. xorl %r12d, %ecx
  9987. xorl %r13d, %ebx
  9988. rorl $11, %ecx
  9989. addl %r11d, %r15d
  9990. xorl %r12d, %ecx
  9991. addl %ebx, %r11d
  9992. vpor %ymm6, %ymm7, %ymm6
  9993. vpor %ymm8, %ymm9, %ymm8
  9994. # rnd_0: 7 - 7
  9995. rorl $2, %ecx
  9996. movl %r15d, %edx
  9997. addl %ecx, %r11d
  9998. # rnd_1: 0 - 1
  9999. rorl $14, %edx
  10000. movl %r12d, %ebx
  10001. movl %r8d, %ecx
  10002. addl 36(%rsp), %r10d
  10003. xorl %r9d, %ecx
  10004. vpsrld $3, %ymm5, %ymm9
  10005. vpxor %ymm6, %ymm8, %ymm6
  10006. # rnd_1: 2 - 3
  10007. xorl %r15d, %edx
  10008. andl %r15d, %ecx
  10009. rorl $5, %edx
  10010. xorl %r9d, %ecx
  10011. xorl %r15d, %edx
  10012. addl %ecx, %r10d
  10013. vpxor %ymm6, %ymm9, %ymm5
  10014. vpshufd $0xfa, %ymm0, %ymm6
  10015. # rnd_1: 4 - 5
  10016. rorl $6, %edx
  10017. xorl %r11d, %ebx
  10018. addl %edx, %r10d
  10019. movl %r11d, %ecx
  10020. andl %ebx, %eax
  10021. rorl $9, %ecx
  10022. xorl %r11d, %ecx
  10023. xorl %r12d, %eax
  10024. vpsrld $10, %ymm6, %ymm8
  10025. vpsrlq $19, %ymm6, %ymm7
  10026. # rnd_1: 6 - 7
  10027. rorl $11, %ecx
  10028. addl %r10d, %r14d
  10029. xorl %r11d, %ecx
  10030. addl %eax, %r10d
  10031. rorl $2, %ecx
  10032. movl %r14d, %edx
  10033. addl %ecx, %r10d
  10034. # rnd_0: 0 - 0
  10035. rorl $14, %edx
  10036. vpsrlq $0x11, %ymm6, %ymm6
  10037. vpaddd %ymm1, %ymm4, %ymm4
  10038. # rnd_0: 1 - 3
  10039. movl %r11d, %eax
  10040. movl %r15d, %ecx
  10041. addl 40(%rsp), %r9d
  10042. xorl %r8d, %ecx
  10043. xorl %r14d, %edx
  10044. andl %r14d, %ecx
  10045. rorl $5, %edx
  10046. xorl %r8d, %ecx
  10047. xorl %r14d, %edx
  10048. addl %ecx, %r9d
  10049. vpxor %ymm6, %ymm7, %ymm6
  10050. vpaddd %ymm5, %ymm4, %ymm4
  10051. # rnd_0: 4 - 4
  10052. rorl $6, %edx
  10053. xorl %r10d, %eax
  10054. addl %edx, %r9d
  10055. movl %r10d, %ecx
  10056. vpxor %ymm6, %ymm8, %ymm8
  10057. # rnd_0: 5 - 5
  10058. andl %eax, %ebx
  10059. rorl $9, %ecx
  10060. xorl %r10d, %ecx
  10061. xorl %r11d, %ebx
  10062. vpshufb %ymm11, %ymm8, %ymm8
  10063. # rnd_0: 6 - 6
  10064. rorl $11, %ecx
  10065. addl %r9d, %r13d
  10066. xorl %r10d, %ecx
  10067. addl %ebx, %r9d
  10068. vpaddd %ymm8, %ymm4, %ymm4
  10069. # rnd_0: 7 - 7
  10070. rorl $2, %ecx
  10071. movl %r13d, %edx
  10072. addl %ecx, %r9d
  10073. # rnd_1: 0 - 0
  10074. rorl $14, %edx
  10075. vpshufd $0x50, %ymm4, %ymm6
  10076. # rnd_1: 1 - 1
  10077. movl %r10d, %ebx
  10078. movl %r14d, %ecx
  10079. addl 44(%rsp), %r8d
  10080. xorl %r15d, %ecx
  10081. vpsrlq $0x11, %ymm6, %ymm8
  10082. vpsrlq $19, %ymm6, %ymm7
  10083. # rnd_1: 2 - 3
  10084. xorl %r13d, %edx
  10085. andl %r13d, %ecx
  10086. rorl $5, %edx
  10087. xorl %r15d, %ecx
  10088. xorl %r13d, %edx
  10089. addl %ecx, %r8d
  10090. vpsrld $10, %ymm6, %ymm9
  10091. vpxor %ymm8, %ymm7, %ymm8
  10092. # rnd_1: 4 - 5
  10093. rorl $6, %edx
  10094. xorl %r9d, %ebx
  10095. addl %edx, %r8d
  10096. movl %r9d, %ecx
  10097. andl %ebx, %eax
  10098. rorl $9, %ecx
  10099. xorl %r9d, %ecx
  10100. xorl %r10d, %eax
  10101. vpxor %ymm9, %ymm8, %ymm9
  10102. # rnd_1: 6 - 6
  10103. rorl $11, %ecx
  10104. addl %r8d, %r12d
  10105. xorl %r9d, %ecx
  10106. addl %eax, %r8d
  10107. vpshufb %ymm12, %ymm9, %ymm9
  10108. # rnd_1: 7 - 7
  10109. rorl $2, %ecx
  10110. movl %r12d, %edx
  10111. addl %ecx, %r8d
  10112. vpaddd %ymm4, %ymm9, %ymm1
  10113. # msg_sched done: 8-11
  10114. # msg_sched: 16-19
  10115. # rnd_0: 0 - 0
  10116. rorl $14, %edx
  10117. vpalignr $4, %ymm2, %ymm3, %ymm5
  10118. vpalignr $4, %ymm0, %ymm1, %ymm4
  10119. # rnd_0: 1 - 2
  10120. movl %r9d, %eax
  10121. movl %r13d, %ecx
  10122. addl 64(%rsp), %r15d
  10123. xorl %r14d, %ecx
  10124. xorl %r12d, %edx
  10125. andl %r12d, %ecx
  10126. vpsrld $7, %ymm5, %ymm6
  10127. vpslld $25, %ymm5, %ymm7
  10128. # rnd_0: 3 - 4
  10129. rorl $5, %edx
  10130. xorl %r14d, %ecx
  10131. xorl %r12d, %edx
  10132. addl %ecx, %r15d
  10133. rorl $6, %edx
  10134. xorl %r8d, %eax
  10135. addl %edx, %r15d
  10136. movl %r8d, %ecx
  10137. vpsrld $18, %ymm5, %ymm8
  10138. vpslld $14, %ymm5, %ymm9
  10139. # rnd_0: 5 - 6
  10140. andl %eax, %ebx
  10141. rorl $9, %ecx
  10142. xorl %r8d, %ecx
  10143. xorl %r9d, %ebx
  10144. rorl $11, %ecx
  10145. addl %r15d, %r11d
  10146. xorl %r8d, %ecx
  10147. addl %ebx, %r15d
  10148. vpor %ymm6, %ymm7, %ymm6
  10149. vpor %ymm8, %ymm9, %ymm8
  10150. # rnd_0: 7 - 7
  10151. rorl $2, %ecx
  10152. movl %r11d, %edx
  10153. addl %ecx, %r15d
  10154. # rnd_1: 0 - 1
  10155. rorl $14, %edx
  10156. movl %r8d, %ebx
  10157. movl %r12d, %ecx
  10158. addl 68(%rsp), %r14d
  10159. xorl %r13d, %ecx
  10160. vpsrld $3, %ymm5, %ymm9
  10161. vpxor %ymm6, %ymm8, %ymm6
  10162. # rnd_1: 2 - 3
  10163. xorl %r11d, %edx
  10164. andl %r11d, %ecx
  10165. rorl $5, %edx
  10166. xorl %r13d, %ecx
  10167. xorl %r11d, %edx
  10168. addl %ecx, %r14d
  10169. vpxor %ymm6, %ymm9, %ymm5
  10170. vpshufd $0xfa, %ymm1, %ymm6
  10171. # rnd_1: 4 - 5
  10172. rorl $6, %edx
  10173. xorl %r15d, %ebx
  10174. addl %edx, %r14d
  10175. movl %r15d, %ecx
  10176. andl %ebx, %eax
  10177. rorl $9, %ecx
  10178. xorl %r15d, %ecx
  10179. xorl %r8d, %eax
  10180. vpsrld $10, %ymm6, %ymm8
  10181. vpsrlq $19, %ymm6, %ymm7
  10182. # rnd_1: 6 - 7
  10183. rorl $11, %ecx
  10184. addl %r14d, %r10d
  10185. xorl %r15d, %ecx
  10186. addl %eax, %r14d
  10187. rorl $2, %ecx
  10188. movl %r10d, %edx
  10189. addl %ecx, %r14d
  10190. # rnd_0: 0 - 0
  10191. rorl $14, %edx
  10192. vpsrlq $0x11, %ymm6, %ymm6
  10193. vpaddd %ymm2, %ymm4, %ymm4
  10194. # rnd_0: 1 - 3
  10195. movl %r15d, %eax
  10196. movl %r11d, %ecx
  10197. addl 72(%rsp), %r13d
  10198. xorl %r12d, %ecx
  10199. xorl %r10d, %edx
  10200. andl %r10d, %ecx
  10201. rorl $5, %edx
  10202. xorl %r12d, %ecx
  10203. xorl %r10d, %edx
  10204. addl %ecx, %r13d
  10205. vpxor %ymm6, %ymm7, %ymm6
  10206. vpaddd %ymm5, %ymm4, %ymm4
  10207. # rnd_0: 4 - 4
  10208. rorl $6, %edx
  10209. xorl %r14d, %eax
  10210. addl %edx, %r13d
  10211. movl %r14d, %ecx
  10212. vpxor %ymm6, %ymm8, %ymm8
  10213. # rnd_0: 5 - 5
  10214. andl %eax, %ebx
  10215. rorl $9, %ecx
  10216. xorl %r14d, %ecx
  10217. xorl %r15d, %ebx
  10218. vpshufb %ymm11, %ymm8, %ymm8
  10219. # rnd_0: 6 - 6
  10220. rorl $11, %ecx
  10221. addl %r13d, %r9d
  10222. xorl %r14d, %ecx
  10223. addl %ebx, %r13d
  10224. vpaddd %ymm8, %ymm4, %ymm4
  10225. # rnd_0: 7 - 7
  10226. rorl $2, %ecx
  10227. movl %r9d, %edx
  10228. addl %ecx, %r13d
  10229. # rnd_1: 0 - 0
  10230. rorl $14, %edx
  10231. vpshufd $0x50, %ymm4, %ymm6
  10232. # rnd_1: 1 - 1
  10233. movl %r14d, %ebx
  10234. movl %r10d, %ecx
  10235. addl 76(%rsp), %r12d
  10236. xorl %r11d, %ecx
  10237. vpsrlq $0x11, %ymm6, %ymm8
  10238. vpsrlq $19, %ymm6, %ymm7
  10239. # rnd_1: 2 - 3
  10240. xorl %r9d, %edx
  10241. andl %r9d, %ecx
  10242. rorl $5, %edx
  10243. xorl %r11d, %ecx
  10244. xorl %r9d, %edx
  10245. addl %ecx, %r12d
  10246. vpsrld $10, %ymm6, %ymm9
  10247. vpxor %ymm8, %ymm7, %ymm8
  10248. # rnd_1: 4 - 5
  10249. rorl $6, %edx
  10250. xorl %r13d, %ebx
  10251. addl %edx, %r12d
  10252. movl %r13d, %ecx
  10253. andl %ebx, %eax
  10254. rorl $9, %ecx
  10255. xorl %r13d, %ecx
  10256. xorl %r14d, %eax
  10257. vpxor %ymm9, %ymm8, %ymm9
  10258. # rnd_1: 6 - 6
  10259. rorl $11, %ecx
  10260. addl %r12d, %r8d
  10261. xorl %r13d, %ecx
  10262. addl %eax, %r12d
  10263. vpshufb %ymm12, %ymm9, %ymm9
  10264. # rnd_1: 7 - 7
  10265. rorl $2, %ecx
  10266. movl %r8d, %edx
  10267. addl %ecx, %r12d
  10268. vpaddd %ymm4, %ymm9, %ymm2
  10269. # msg_sched done: 16-19
  10270. # msg_sched: 24-27
  10271. # rnd_0: 0 - 0
  10272. rorl $14, %edx
  10273. vpalignr $4, %ymm3, %ymm0, %ymm5
  10274. vpalignr $4, %ymm1, %ymm2, %ymm4
  10275. # rnd_0: 1 - 2
  10276. movl %r13d, %eax
  10277. movl %r9d, %ecx
  10278. addl 96(%rsp), %r11d
  10279. xorl %r10d, %ecx
  10280. xorl %r8d, %edx
  10281. andl %r8d, %ecx
  10282. vpsrld $7, %ymm5, %ymm6
  10283. vpslld $25, %ymm5, %ymm7
  10284. # rnd_0: 3 - 4
  10285. rorl $5, %edx
  10286. xorl %r10d, %ecx
  10287. xorl %r8d, %edx
  10288. addl %ecx, %r11d
  10289. rorl $6, %edx
  10290. xorl %r12d, %eax
  10291. addl %edx, %r11d
  10292. movl %r12d, %ecx
  10293. vpsrld $18, %ymm5, %ymm8
  10294. vpslld $14, %ymm5, %ymm9
  10295. # rnd_0: 5 - 6
  10296. andl %eax, %ebx
  10297. rorl $9, %ecx
  10298. xorl %r12d, %ecx
  10299. xorl %r13d, %ebx
  10300. rorl $11, %ecx
  10301. addl %r11d, %r15d
  10302. xorl %r12d, %ecx
  10303. addl %ebx, %r11d
  10304. vpor %ymm6, %ymm7, %ymm6
  10305. vpor %ymm8, %ymm9, %ymm8
  10306. # rnd_0: 7 - 7
  10307. rorl $2, %ecx
  10308. movl %r15d, %edx
  10309. addl %ecx, %r11d
  10310. # rnd_1: 0 - 1
  10311. rorl $14, %edx
  10312. movl %r12d, %ebx
  10313. movl %r8d, %ecx
  10314. addl 100(%rsp), %r10d
  10315. xorl %r9d, %ecx
  10316. vpsrld $3, %ymm5, %ymm9
  10317. vpxor %ymm6, %ymm8, %ymm6
  10318. # rnd_1: 2 - 3
  10319. xorl %r15d, %edx
  10320. andl %r15d, %ecx
  10321. rorl $5, %edx
  10322. xorl %r9d, %ecx
  10323. xorl %r15d, %edx
  10324. addl %ecx, %r10d
  10325. vpxor %ymm6, %ymm9, %ymm5
  10326. vpshufd $0xfa, %ymm2, %ymm6
  10327. # rnd_1: 4 - 5
  10328. rorl $6, %edx
  10329. xorl %r11d, %ebx
  10330. addl %edx, %r10d
  10331. movl %r11d, %ecx
  10332. andl %ebx, %eax
  10333. rorl $9, %ecx
  10334. xorl %r11d, %ecx
  10335. xorl %r12d, %eax
  10336. vpsrld $10, %ymm6, %ymm8
  10337. vpsrlq $19, %ymm6, %ymm7
  10338. # rnd_1: 6 - 7
  10339. rorl $11, %ecx
  10340. addl %r10d, %r14d
  10341. xorl %r11d, %ecx
  10342. addl %eax, %r10d
  10343. rorl $2, %ecx
  10344. movl %r14d, %edx
  10345. addl %ecx, %r10d
  10346. # rnd_0: 0 - 0
  10347. rorl $14, %edx
  10348. vpsrlq $0x11, %ymm6, %ymm6
  10349. vpaddd %ymm3, %ymm4, %ymm4
  10350. # rnd_0: 1 - 3
  10351. movl %r11d, %eax
  10352. movl %r15d, %ecx
  10353. addl 104(%rsp), %r9d
  10354. xorl %r8d, %ecx
  10355. xorl %r14d, %edx
  10356. andl %r14d, %ecx
  10357. rorl $5, %edx
  10358. xorl %r8d, %ecx
  10359. xorl %r14d, %edx
  10360. addl %ecx, %r9d
  10361. vpxor %ymm6, %ymm7, %ymm6
  10362. vpaddd %ymm5, %ymm4, %ymm4
  10363. # rnd_0: 4 - 4
  10364. rorl $6, %edx
  10365. xorl %r10d, %eax
  10366. addl %edx, %r9d
  10367. movl %r10d, %ecx
  10368. vpxor %ymm6, %ymm8, %ymm8
  10369. # rnd_0: 5 - 5
  10370. andl %eax, %ebx
  10371. rorl $9, %ecx
  10372. xorl %r10d, %ecx
  10373. xorl %r11d, %ebx
  10374. vpshufb %ymm11, %ymm8, %ymm8
  10375. # rnd_0: 6 - 6
  10376. rorl $11, %ecx
  10377. addl %r9d, %r13d
  10378. xorl %r10d, %ecx
  10379. addl %ebx, %r9d
  10380. vpaddd %ymm8, %ymm4, %ymm4
  10381. # rnd_0: 7 - 7
  10382. rorl $2, %ecx
  10383. movl %r13d, %edx
  10384. addl %ecx, %r9d
  10385. # rnd_1: 0 - 0
  10386. rorl $14, %edx
  10387. vpshufd $0x50, %ymm4, %ymm6
  10388. # rnd_1: 1 - 1
  10389. movl %r10d, %ebx
  10390. movl %r14d, %ecx
  10391. addl 108(%rsp), %r8d
  10392. xorl %r15d, %ecx
  10393. vpsrlq $0x11, %ymm6, %ymm8
  10394. vpsrlq $19, %ymm6, %ymm7
  10395. # rnd_1: 2 - 3
  10396. xorl %r13d, %edx
  10397. andl %r13d, %ecx
  10398. rorl $5, %edx
  10399. xorl %r15d, %ecx
  10400. xorl %r13d, %edx
  10401. addl %ecx, %r8d
  10402. vpsrld $10, %ymm6, %ymm9
  10403. vpxor %ymm8, %ymm7, %ymm8
  10404. # rnd_1: 4 - 5
  10405. rorl $6, %edx
  10406. xorl %r9d, %ebx
  10407. addl %edx, %r8d
  10408. movl %r9d, %ecx
  10409. andl %ebx, %eax
  10410. rorl $9, %ecx
  10411. xorl %r9d, %ecx
  10412. xorl %r10d, %eax
  10413. vpxor %ymm9, %ymm8, %ymm9
  10414. # rnd_1: 6 - 6
  10415. rorl $11, %ecx
  10416. addl %r8d, %r12d
  10417. xorl %r9d, %ecx
  10418. addl %eax, %r8d
  10419. vpshufb %ymm12, %ymm9, %ymm9
  10420. # rnd_1: 7 - 7
  10421. rorl $2, %ecx
  10422. movl %r12d, %edx
  10423. addl %ecx, %r8d
  10424. vpaddd %ymm4, %ymm9, %ymm3
  10425. # msg_sched done: 24-27
  10426. # set_w_k_xfer_4: 4
  10427. vpaddd 128+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  10428. vpaddd 160+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  10429. vmovdqu %ymm4, 128(%rsp)
  10430. vmovdqu %ymm5, 160(%rsp)
  10431. vpaddd 192+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  10432. vpaddd 224+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  10433. vmovdqu %ymm4, 192(%rsp)
  10434. vmovdqu %ymm5, 224(%rsp)
  10435. # msg_sched: 32-35
  10436. # rnd_0: 0 - 0
  10437. rorl $14, %edx
  10438. vpalignr $4, %ymm0, %ymm1, %ymm5
  10439. vpalignr $4, %ymm2, %ymm3, %ymm4
  10440. # rnd_0: 1 - 2
  10441. movl %r9d, %eax
  10442. movl %r13d, %ecx
  10443. addl 128(%rsp), %r15d
  10444. xorl %r14d, %ecx
  10445. xorl %r12d, %edx
  10446. andl %r12d, %ecx
  10447. vpsrld $7, %ymm5, %ymm6
  10448. vpslld $25, %ymm5, %ymm7
  10449. # rnd_0: 3 - 4
  10450. rorl $5, %edx
  10451. xorl %r14d, %ecx
  10452. xorl %r12d, %edx
  10453. addl %ecx, %r15d
  10454. rorl $6, %edx
  10455. xorl %r8d, %eax
  10456. addl %edx, %r15d
  10457. movl %r8d, %ecx
  10458. vpsrld $18, %ymm5, %ymm8
  10459. vpslld $14, %ymm5, %ymm9
  10460. # rnd_0: 5 - 6
  10461. andl %eax, %ebx
  10462. rorl $9, %ecx
  10463. xorl %r8d, %ecx
  10464. xorl %r9d, %ebx
  10465. rorl $11, %ecx
  10466. addl %r15d, %r11d
  10467. xorl %r8d, %ecx
  10468. addl %ebx, %r15d
  10469. vpor %ymm6, %ymm7, %ymm6
  10470. vpor %ymm8, %ymm9, %ymm8
  10471. # rnd_0: 7 - 7
  10472. rorl $2, %ecx
  10473. movl %r11d, %edx
  10474. addl %ecx, %r15d
  10475. # rnd_1: 0 - 1
  10476. rorl $14, %edx
  10477. movl %r8d, %ebx
  10478. movl %r12d, %ecx
  10479. addl 132(%rsp), %r14d
  10480. xorl %r13d, %ecx
  10481. vpsrld $3, %ymm5, %ymm9
  10482. vpxor %ymm6, %ymm8, %ymm6
  10483. # rnd_1: 2 - 3
  10484. xorl %r11d, %edx
  10485. andl %r11d, %ecx
  10486. rorl $5, %edx
  10487. xorl %r13d, %ecx
  10488. xorl %r11d, %edx
  10489. addl %ecx, %r14d
  10490. vpxor %ymm6, %ymm9, %ymm5
  10491. vpshufd $0xfa, %ymm3, %ymm6
  10492. # rnd_1: 4 - 5
  10493. rorl $6, %edx
  10494. xorl %r15d, %ebx
  10495. addl %edx, %r14d
  10496. movl %r15d, %ecx
  10497. andl %ebx, %eax
  10498. rorl $9, %ecx
  10499. xorl %r15d, %ecx
  10500. xorl %r8d, %eax
  10501. vpsrld $10, %ymm6, %ymm8
  10502. vpsrlq $19, %ymm6, %ymm7
  10503. # rnd_1: 6 - 7
  10504. rorl $11, %ecx
  10505. addl %r14d, %r10d
  10506. xorl %r15d, %ecx
  10507. addl %eax, %r14d
  10508. rorl $2, %ecx
  10509. movl %r10d, %edx
  10510. addl %ecx, %r14d
  10511. # rnd_0: 0 - 0
  10512. rorl $14, %edx
  10513. vpsrlq $0x11, %ymm6, %ymm6
  10514. vpaddd %ymm0, %ymm4, %ymm4
  10515. # rnd_0: 1 - 3
  10516. movl %r15d, %eax
  10517. movl %r11d, %ecx
  10518. addl 136(%rsp), %r13d
  10519. xorl %r12d, %ecx
  10520. xorl %r10d, %edx
  10521. andl %r10d, %ecx
  10522. rorl $5, %edx
  10523. xorl %r12d, %ecx
  10524. xorl %r10d, %edx
  10525. addl %ecx, %r13d
  10526. vpxor %ymm6, %ymm7, %ymm6
  10527. vpaddd %ymm5, %ymm4, %ymm4
  10528. # rnd_0: 4 - 4
  10529. rorl $6, %edx
  10530. xorl %r14d, %eax
  10531. addl %edx, %r13d
  10532. movl %r14d, %ecx
  10533. vpxor %ymm6, %ymm8, %ymm8
  10534. # rnd_0: 5 - 5
  10535. andl %eax, %ebx
  10536. rorl $9, %ecx
  10537. xorl %r14d, %ecx
  10538. xorl %r15d, %ebx
  10539. vpshufb %ymm11, %ymm8, %ymm8
  10540. # rnd_0: 6 - 6
  10541. rorl $11, %ecx
  10542. addl %r13d, %r9d
  10543. xorl %r14d, %ecx
  10544. addl %ebx, %r13d
  10545. vpaddd %ymm8, %ymm4, %ymm4
  10546. # rnd_0: 7 - 7
  10547. rorl $2, %ecx
  10548. movl %r9d, %edx
  10549. addl %ecx, %r13d
  10550. # rnd_1: 0 - 0
  10551. rorl $14, %edx
  10552. vpshufd $0x50, %ymm4, %ymm6
  10553. # rnd_1: 1 - 1
  10554. movl %r14d, %ebx
  10555. movl %r10d, %ecx
  10556. addl 140(%rsp), %r12d
  10557. xorl %r11d, %ecx
  10558. vpsrlq $0x11, %ymm6, %ymm8
  10559. vpsrlq $19, %ymm6, %ymm7
  10560. # rnd_1: 2 - 3
  10561. xorl %r9d, %edx
  10562. andl %r9d, %ecx
  10563. rorl $5, %edx
  10564. xorl %r11d, %ecx
  10565. xorl %r9d, %edx
  10566. addl %ecx, %r12d
  10567. vpsrld $10, %ymm6, %ymm9
  10568. vpxor %ymm8, %ymm7, %ymm8
  10569. # rnd_1: 4 - 5
  10570. rorl $6, %edx
  10571. xorl %r13d, %ebx
  10572. addl %edx, %r12d
  10573. movl %r13d, %ecx
  10574. andl %ebx, %eax
  10575. rorl $9, %ecx
  10576. xorl %r13d, %ecx
  10577. xorl %r14d, %eax
  10578. vpxor %ymm9, %ymm8, %ymm9
  10579. # rnd_1: 6 - 6
  10580. rorl $11, %ecx
  10581. addl %r12d, %r8d
  10582. xorl %r13d, %ecx
  10583. addl %eax, %r12d
  10584. vpshufb %ymm12, %ymm9, %ymm9
  10585. # rnd_1: 7 - 7
  10586. rorl $2, %ecx
  10587. movl %r8d, %edx
  10588. addl %ecx, %r12d
  10589. vpaddd %ymm4, %ymm9, %ymm0
  10590. # msg_sched done: 32-35
  10591. # msg_sched: 40-43
  10592. # rnd_0: 0 - 0
  10593. rorl $14, %edx
  10594. vpalignr $4, %ymm1, %ymm2, %ymm5
  10595. vpalignr $4, %ymm3, %ymm0, %ymm4
  10596. # rnd_0: 1 - 2
  10597. movl %r13d, %eax
  10598. movl %r9d, %ecx
  10599. addl 160(%rsp), %r11d
  10600. xorl %r10d, %ecx
  10601. xorl %r8d, %edx
  10602. andl %r8d, %ecx
  10603. vpsrld $7, %ymm5, %ymm6
  10604. vpslld $25, %ymm5, %ymm7
  10605. # rnd_0: 3 - 4
  10606. rorl $5, %edx
  10607. xorl %r10d, %ecx
  10608. xorl %r8d, %edx
  10609. addl %ecx, %r11d
  10610. rorl $6, %edx
  10611. xorl %r12d, %eax
  10612. addl %edx, %r11d
  10613. movl %r12d, %ecx
  10614. vpsrld $18, %ymm5, %ymm8
  10615. vpslld $14, %ymm5, %ymm9
  10616. # rnd_0: 5 - 6
  10617. andl %eax, %ebx
  10618. rorl $9, %ecx
  10619. xorl %r12d, %ecx
  10620. xorl %r13d, %ebx
  10621. rorl $11, %ecx
  10622. addl %r11d, %r15d
  10623. xorl %r12d, %ecx
  10624. addl %ebx, %r11d
  10625. vpor %ymm6, %ymm7, %ymm6
  10626. vpor %ymm8, %ymm9, %ymm8
  10627. # rnd_0: 7 - 7
  10628. rorl $2, %ecx
  10629. movl %r15d, %edx
  10630. addl %ecx, %r11d
  10631. # rnd_1: 0 - 1
  10632. rorl $14, %edx
  10633. movl %r12d, %ebx
  10634. movl %r8d, %ecx
  10635. addl 164(%rsp), %r10d
  10636. xorl %r9d, %ecx
  10637. vpsrld $3, %ymm5, %ymm9
  10638. vpxor %ymm6, %ymm8, %ymm6
  10639. # rnd_1: 2 - 3
  10640. xorl %r15d, %edx
  10641. andl %r15d, %ecx
  10642. rorl $5, %edx
  10643. xorl %r9d, %ecx
  10644. xorl %r15d, %edx
  10645. addl %ecx, %r10d
  10646. vpxor %ymm6, %ymm9, %ymm5
  10647. vpshufd $0xfa, %ymm0, %ymm6
  10648. # rnd_1: 4 - 5
  10649. rorl $6, %edx
  10650. xorl %r11d, %ebx
  10651. addl %edx, %r10d
  10652. movl %r11d, %ecx
  10653. andl %ebx, %eax
  10654. rorl $9, %ecx
  10655. xorl %r11d, %ecx
  10656. xorl %r12d, %eax
  10657. vpsrld $10, %ymm6, %ymm8
  10658. vpsrlq $19, %ymm6, %ymm7
  10659. # rnd_1: 6 - 7
  10660. rorl $11, %ecx
  10661. addl %r10d, %r14d
  10662. xorl %r11d, %ecx
  10663. addl %eax, %r10d
  10664. rorl $2, %ecx
  10665. movl %r14d, %edx
  10666. addl %ecx, %r10d
  10667. # rnd_0: 0 - 0
  10668. rorl $14, %edx
  10669. vpsrlq $0x11, %ymm6, %ymm6
  10670. vpaddd %ymm1, %ymm4, %ymm4
  10671. # rnd_0: 1 - 3
  10672. movl %r11d, %eax
  10673. movl %r15d, %ecx
  10674. addl 168(%rsp), %r9d
  10675. xorl %r8d, %ecx
  10676. xorl %r14d, %edx
  10677. andl %r14d, %ecx
  10678. rorl $5, %edx
  10679. xorl %r8d, %ecx
  10680. xorl %r14d, %edx
  10681. addl %ecx, %r9d
  10682. vpxor %ymm6, %ymm7, %ymm6
  10683. vpaddd %ymm5, %ymm4, %ymm4
  10684. # rnd_0: 4 - 4
  10685. rorl $6, %edx
  10686. xorl %r10d, %eax
  10687. addl %edx, %r9d
  10688. movl %r10d, %ecx
  10689. vpxor %ymm6, %ymm8, %ymm8
  10690. # rnd_0: 5 - 5
  10691. andl %eax, %ebx
  10692. rorl $9, %ecx
  10693. xorl %r10d, %ecx
  10694. xorl %r11d, %ebx
  10695. vpshufb %ymm11, %ymm8, %ymm8
  10696. # rnd_0: 6 - 6
  10697. rorl $11, %ecx
  10698. addl %r9d, %r13d
  10699. xorl %r10d, %ecx
  10700. addl %ebx, %r9d
  10701. vpaddd %ymm8, %ymm4, %ymm4
  10702. # rnd_0: 7 - 7
  10703. rorl $2, %ecx
  10704. movl %r13d, %edx
  10705. addl %ecx, %r9d
  10706. # rnd_1: 0 - 0
  10707. rorl $14, %edx
  10708. vpshufd $0x50, %ymm4, %ymm6
  10709. # rnd_1: 1 - 1
  10710. movl %r10d, %ebx
  10711. movl %r14d, %ecx
  10712. addl 172(%rsp), %r8d
  10713. xorl %r15d, %ecx
  10714. vpsrlq $0x11, %ymm6, %ymm8
  10715. vpsrlq $19, %ymm6, %ymm7
  10716. # rnd_1: 2 - 3
  10717. xorl %r13d, %edx
  10718. andl %r13d, %ecx
  10719. rorl $5, %edx
  10720. xorl %r15d, %ecx
  10721. xorl %r13d, %edx
  10722. addl %ecx, %r8d
  10723. vpsrld $10, %ymm6, %ymm9
  10724. vpxor %ymm8, %ymm7, %ymm8
  10725. # rnd_1: 4 - 5
  10726. rorl $6, %edx
  10727. xorl %r9d, %ebx
  10728. addl %edx, %r8d
  10729. movl %r9d, %ecx
  10730. andl %ebx, %eax
  10731. rorl $9, %ecx
  10732. xorl %r9d, %ecx
  10733. xorl %r10d, %eax
  10734. vpxor %ymm9, %ymm8, %ymm9
  10735. # rnd_1: 6 - 6
  10736. rorl $11, %ecx
  10737. addl %r8d, %r12d
  10738. xorl %r9d, %ecx
  10739. addl %eax, %r8d
  10740. vpshufb %ymm12, %ymm9, %ymm9
  10741. # rnd_1: 7 - 7
  10742. rorl $2, %ecx
  10743. movl %r12d, %edx
  10744. addl %ecx, %r8d
  10745. vpaddd %ymm4, %ymm9, %ymm1
  10746. # msg_sched done: 40-43
  10747. # msg_sched: 48-51
  10748. # rnd_0: 0 - 0
  10749. rorl $14, %edx
  10750. vpalignr $4, %ymm2, %ymm3, %ymm5
  10751. vpalignr $4, %ymm0, %ymm1, %ymm4
  10752. # rnd_0: 1 - 2
  10753. movl %r9d, %eax
  10754. movl %r13d, %ecx
  10755. addl 192(%rsp), %r15d
  10756. xorl %r14d, %ecx
  10757. xorl %r12d, %edx
  10758. andl %r12d, %ecx
  10759. vpsrld $7, %ymm5, %ymm6
  10760. vpslld $25, %ymm5, %ymm7
  10761. # rnd_0: 3 - 4
  10762. rorl $5, %edx
  10763. xorl %r14d, %ecx
  10764. xorl %r12d, %edx
  10765. addl %ecx, %r15d
  10766. rorl $6, %edx
  10767. xorl %r8d, %eax
  10768. addl %edx, %r15d
  10769. movl %r8d, %ecx
  10770. vpsrld $18, %ymm5, %ymm8
  10771. vpslld $14, %ymm5, %ymm9
  10772. # rnd_0: 5 - 6
  10773. andl %eax, %ebx
  10774. rorl $9, %ecx
  10775. xorl %r8d, %ecx
  10776. xorl %r9d, %ebx
  10777. rorl $11, %ecx
  10778. addl %r15d, %r11d
  10779. xorl %r8d, %ecx
  10780. addl %ebx, %r15d
  10781. vpor %ymm6, %ymm7, %ymm6
  10782. vpor %ymm8, %ymm9, %ymm8
  10783. # rnd_0: 7 - 7
  10784. rorl $2, %ecx
  10785. movl %r11d, %edx
  10786. addl %ecx, %r15d
  10787. # rnd_1: 0 - 1
  10788. rorl $14, %edx
  10789. movl %r8d, %ebx
  10790. movl %r12d, %ecx
  10791. addl 196(%rsp), %r14d
  10792. xorl %r13d, %ecx
  10793. vpsrld $3, %ymm5, %ymm9
  10794. vpxor %ymm6, %ymm8, %ymm6
  10795. # rnd_1: 2 - 3
  10796. xorl %r11d, %edx
  10797. andl %r11d, %ecx
  10798. rorl $5, %edx
  10799. xorl %r13d, %ecx
  10800. xorl %r11d, %edx
  10801. addl %ecx, %r14d
  10802. vpxor %ymm6, %ymm9, %ymm5
  10803. vpshufd $0xfa, %ymm1, %ymm6
  10804. # rnd_1: 4 - 5
  10805. rorl $6, %edx
  10806. xorl %r15d, %ebx
  10807. addl %edx, %r14d
  10808. movl %r15d, %ecx
  10809. andl %ebx, %eax
  10810. rorl $9, %ecx
  10811. xorl %r15d, %ecx
  10812. xorl %r8d, %eax
  10813. vpsrld $10, %ymm6, %ymm8
  10814. vpsrlq $19, %ymm6, %ymm7
  10815. # rnd_1: 6 - 7
  10816. rorl $11, %ecx
  10817. addl %r14d, %r10d
  10818. xorl %r15d, %ecx
  10819. addl %eax, %r14d
  10820. rorl $2, %ecx
  10821. movl %r10d, %edx
  10822. addl %ecx, %r14d
  10823. # rnd_0: 0 - 0
  10824. rorl $14, %edx
  10825. vpsrlq $0x11, %ymm6, %ymm6
  10826. vpaddd %ymm2, %ymm4, %ymm4
  10827. # rnd_0: 1 - 3
  10828. movl %r15d, %eax
  10829. movl %r11d, %ecx
  10830. addl 200(%rsp), %r13d
  10831. xorl %r12d, %ecx
  10832. xorl %r10d, %edx
  10833. andl %r10d, %ecx
  10834. rorl $5, %edx
  10835. xorl %r12d, %ecx
  10836. xorl %r10d, %edx
  10837. addl %ecx, %r13d
  10838. vpxor %ymm6, %ymm7, %ymm6
  10839. vpaddd %ymm5, %ymm4, %ymm4
  10840. # rnd_0: 4 - 4
  10841. rorl $6, %edx
  10842. xorl %r14d, %eax
  10843. addl %edx, %r13d
  10844. movl %r14d, %ecx
  10845. vpxor %ymm6, %ymm8, %ymm8
  10846. # rnd_0: 5 - 5
  10847. andl %eax, %ebx
  10848. rorl $9, %ecx
  10849. xorl %r14d, %ecx
  10850. xorl %r15d, %ebx
  10851. vpshufb %ymm11, %ymm8, %ymm8
  10852. # rnd_0: 6 - 6
  10853. rorl $11, %ecx
  10854. addl %r13d, %r9d
  10855. xorl %r14d, %ecx
  10856. addl %ebx, %r13d
  10857. vpaddd %ymm8, %ymm4, %ymm4
  10858. # rnd_0: 7 - 7
  10859. rorl $2, %ecx
  10860. movl %r9d, %edx
  10861. addl %ecx, %r13d
  10862. # rnd_1: 0 - 0
  10863. rorl $14, %edx
  10864. vpshufd $0x50, %ymm4, %ymm6
  10865. # rnd_1: 1 - 1
  10866. movl %r14d, %ebx
  10867. movl %r10d, %ecx
  10868. addl 204(%rsp), %r12d
  10869. xorl %r11d, %ecx
  10870. vpsrlq $0x11, %ymm6, %ymm8
  10871. vpsrlq $19, %ymm6, %ymm7
  10872. # rnd_1: 2 - 3
  10873. xorl %r9d, %edx
  10874. andl %r9d, %ecx
  10875. rorl $5, %edx
  10876. xorl %r11d, %ecx
  10877. xorl %r9d, %edx
  10878. addl %ecx, %r12d
  10879. vpsrld $10, %ymm6, %ymm9
  10880. vpxor %ymm8, %ymm7, %ymm8
  10881. # rnd_1: 4 - 5
  10882. rorl $6, %edx
  10883. xorl %r13d, %ebx
  10884. addl %edx, %r12d
  10885. movl %r13d, %ecx
  10886. andl %ebx, %eax
  10887. rorl $9, %ecx
  10888. xorl %r13d, %ecx
  10889. xorl %r14d, %eax
  10890. vpxor %ymm9, %ymm8, %ymm9
  10891. # rnd_1: 6 - 6
  10892. rorl $11, %ecx
  10893. addl %r12d, %r8d
  10894. xorl %r13d, %ecx
  10895. addl %eax, %r12d
  10896. vpshufb %ymm12, %ymm9, %ymm9
  10897. # rnd_1: 7 - 7
  10898. rorl $2, %ecx
  10899. movl %r8d, %edx
  10900. addl %ecx, %r12d
  10901. vpaddd %ymm4, %ymm9, %ymm2
  10902. # msg_sched done: 48-51
  10903. # msg_sched: 56-59
  10904. # rnd_0: 0 - 0
  10905. rorl $14, %edx
  10906. vpalignr $4, %ymm3, %ymm0, %ymm5
  10907. vpalignr $4, %ymm1, %ymm2, %ymm4
  10908. # rnd_0: 1 - 2
  10909. movl %r13d, %eax
  10910. movl %r9d, %ecx
  10911. addl 224(%rsp), %r11d
  10912. xorl %r10d, %ecx
  10913. xorl %r8d, %edx
  10914. andl %r8d, %ecx
  10915. vpsrld $7, %ymm5, %ymm6
  10916. vpslld $25, %ymm5, %ymm7
  10917. # rnd_0: 3 - 4
  10918. rorl $5, %edx
  10919. xorl %r10d, %ecx
  10920. xorl %r8d, %edx
  10921. addl %ecx, %r11d
  10922. rorl $6, %edx
  10923. xorl %r12d, %eax
  10924. addl %edx, %r11d
  10925. movl %r12d, %ecx
  10926. vpsrld $18, %ymm5, %ymm8
  10927. vpslld $14, %ymm5, %ymm9
  10928. # rnd_0: 5 - 6
  10929. andl %eax, %ebx
  10930. rorl $9, %ecx
  10931. xorl %r12d, %ecx
  10932. xorl %r13d, %ebx
  10933. rorl $11, %ecx
  10934. addl %r11d, %r15d
  10935. xorl %r12d, %ecx
  10936. addl %ebx, %r11d
  10937. vpor %ymm6, %ymm7, %ymm6
  10938. vpor %ymm8, %ymm9, %ymm8
  10939. # rnd_0: 7 - 7
  10940. rorl $2, %ecx
  10941. movl %r15d, %edx
  10942. addl %ecx, %r11d
  10943. # rnd_1: 0 - 1
  10944. rorl $14, %edx
  10945. movl %r12d, %ebx
  10946. movl %r8d, %ecx
  10947. addl 228(%rsp), %r10d
  10948. xorl %r9d, %ecx
  10949. vpsrld $3, %ymm5, %ymm9
  10950. vpxor %ymm6, %ymm8, %ymm6
  10951. # rnd_1: 2 - 3
  10952. xorl %r15d, %edx
  10953. andl %r15d, %ecx
  10954. rorl $5, %edx
  10955. xorl %r9d, %ecx
  10956. xorl %r15d, %edx
  10957. addl %ecx, %r10d
  10958. vpxor %ymm6, %ymm9, %ymm5
  10959. vpshufd $0xfa, %ymm2, %ymm6
  10960. # rnd_1: 4 - 5
  10961. rorl $6, %edx
  10962. xorl %r11d, %ebx
  10963. addl %edx, %r10d
  10964. movl %r11d, %ecx
  10965. andl %ebx, %eax
  10966. rorl $9, %ecx
  10967. xorl %r11d, %ecx
  10968. xorl %r12d, %eax
  10969. vpsrld $10, %ymm6, %ymm8
  10970. vpsrlq $19, %ymm6, %ymm7
  10971. # rnd_1: 6 - 7
  10972. rorl $11, %ecx
  10973. addl %r10d, %r14d
  10974. xorl %r11d, %ecx
  10975. addl %eax, %r10d
  10976. rorl $2, %ecx
  10977. movl %r14d, %edx
  10978. addl %ecx, %r10d
  10979. # rnd_0: 0 - 0
  10980. rorl $14, %edx
  10981. vpsrlq $0x11, %ymm6, %ymm6
  10982. vpaddd %ymm3, %ymm4, %ymm4
  10983. # rnd_0: 1 - 3
  10984. movl %r11d, %eax
  10985. movl %r15d, %ecx
  10986. addl 232(%rsp), %r9d
  10987. xorl %r8d, %ecx
  10988. xorl %r14d, %edx
  10989. andl %r14d, %ecx
  10990. rorl $5, %edx
  10991. xorl %r8d, %ecx
  10992. xorl %r14d, %edx
  10993. addl %ecx, %r9d
  10994. vpxor %ymm6, %ymm7, %ymm6
  10995. vpaddd %ymm5, %ymm4, %ymm4
  10996. # rnd_0: 4 - 4
  10997. rorl $6, %edx
  10998. xorl %r10d, %eax
  10999. addl %edx, %r9d
  11000. movl %r10d, %ecx
  11001. vpxor %ymm6, %ymm8, %ymm8
  11002. # rnd_0: 5 - 5
  11003. andl %eax, %ebx
  11004. rorl $9, %ecx
  11005. xorl %r10d, %ecx
  11006. xorl %r11d, %ebx
  11007. vpshufb %ymm11, %ymm8, %ymm8
  11008. # rnd_0: 6 - 6
  11009. rorl $11, %ecx
  11010. addl %r9d, %r13d
  11011. xorl %r10d, %ecx
  11012. addl %ebx, %r9d
  11013. vpaddd %ymm8, %ymm4, %ymm4
  11014. # rnd_0: 7 - 7
  11015. rorl $2, %ecx
  11016. movl %r13d, %edx
  11017. addl %ecx, %r9d
  11018. # rnd_1: 0 - 0
  11019. rorl $14, %edx
  11020. vpshufd $0x50, %ymm4, %ymm6
  11021. # rnd_1: 1 - 1
  11022. movl %r10d, %ebx
  11023. movl %r14d, %ecx
  11024. addl 236(%rsp), %r8d
  11025. xorl %r15d, %ecx
  11026. vpsrlq $0x11, %ymm6, %ymm8
  11027. vpsrlq $19, %ymm6, %ymm7
  11028. # rnd_1: 2 - 3
  11029. xorl %r13d, %edx
  11030. andl %r13d, %ecx
  11031. rorl $5, %edx
  11032. xorl %r15d, %ecx
  11033. xorl %r13d, %edx
  11034. addl %ecx, %r8d
  11035. vpsrld $10, %ymm6, %ymm9
  11036. vpxor %ymm8, %ymm7, %ymm8
  11037. # rnd_1: 4 - 5
  11038. rorl $6, %edx
  11039. xorl %r9d, %ebx
  11040. addl %edx, %r8d
  11041. movl %r9d, %ecx
  11042. andl %ebx, %eax
  11043. rorl $9, %ecx
  11044. xorl %r9d, %ecx
  11045. xorl %r10d, %eax
  11046. vpxor %ymm9, %ymm8, %ymm9
  11047. # rnd_1: 6 - 6
  11048. rorl $11, %ecx
  11049. addl %r8d, %r12d
  11050. xorl %r9d, %ecx
  11051. addl %eax, %r8d
  11052. vpshufb %ymm12, %ymm9, %ymm9
  11053. # rnd_1: 7 - 7
  11054. rorl $2, %ecx
  11055. movl %r12d, %edx
  11056. addl %ecx, %r8d
  11057. vpaddd %ymm4, %ymm9, %ymm3
  11058. # msg_sched done: 56-59
  11059. # set_w_k_xfer_4: 8
  11060. vpaddd 256+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  11061. vpaddd 288+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  11062. vmovdqu %ymm4, 256(%rsp)
  11063. vmovdqu %ymm5, 288(%rsp)
  11064. vpaddd 320+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  11065. vpaddd 352+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  11066. vmovdqu %ymm4, 320(%rsp)
  11067. vmovdqu %ymm5, 352(%rsp)
  11068. # msg_sched: 64-67
  11069. # rnd_0: 0 - 0
  11070. rorl $14, %edx
  11071. vpalignr $4, %ymm0, %ymm1, %ymm5
  11072. vpalignr $4, %ymm2, %ymm3, %ymm4
  11073. # rnd_0: 1 - 2
  11074. movl %r9d, %eax
  11075. movl %r13d, %ecx
  11076. addl 256(%rsp), %r15d
  11077. xorl %r14d, %ecx
  11078. xorl %r12d, %edx
  11079. andl %r12d, %ecx
  11080. vpsrld $7, %ymm5, %ymm6
  11081. vpslld $25, %ymm5, %ymm7
  11082. # rnd_0: 3 - 4
  11083. rorl $5, %edx
  11084. xorl %r14d, %ecx
  11085. xorl %r12d, %edx
  11086. addl %ecx, %r15d
  11087. rorl $6, %edx
  11088. xorl %r8d, %eax
  11089. addl %edx, %r15d
  11090. movl %r8d, %ecx
  11091. vpsrld $18, %ymm5, %ymm8
  11092. vpslld $14, %ymm5, %ymm9
  11093. # rnd_0: 5 - 6
  11094. andl %eax, %ebx
  11095. rorl $9, %ecx
  11096. xorl %r8d, %ecx
  11097. xorl %r9d, %ebx
  11098. rorl $11, %ecx
  11099. addl %r15d, %r11d
  11100. xorl %r8d, %ecx
  11101. addl %ebx, %r15d
  11102. vpor %ymm6, %ymm7, %ymm6
  11103. vpor %ymm8, %ymm9, %ymm8
  11104. # rnd_0: 7 - 7
  11105. rorl $2, %ecx
  11106. movl %r11d, %edx
  11107. addl %ecx, %r15d
  11108. # rnd_1: 0 - 1
  11109. rorl $14, %edx
  11110. movl %r8d, %ebx
  11111. movl %r12d, %ecx
  11112. addl 260(%rsp), %r14d
  11113. xorl %r13d, %ecx
  11114. vpsrld $3, %ymm5, %ymm9
  11115. vpxor %ymm6, %ymm8, %ymm6
  11116. # rnd_1: 2 - 3
  11117. xorl %r11d, %edx
  11118. andl %r11d, %ecx
  11119. rorl $5, %edx
  11120. xorl %r13d, %ecx
  11121. xorl %r11d, %edx
  11122. addl %ecx, %r14d
  11123. vpxor %ymm6, %ymm9, %ymm5
  11124. vpshufd $0xfa, %ymm3, %ymm6
  11125. # rnd_1: 4 - 5
  11126. rorl $6, %edx
  11127. xorl %r15d, %ebx
  11128. addl %edx, %r14d
  11129. movl %r15d, %ecx
  11130. andl %ebx, %eax
  11131. rorl $9, %ecx
  11132. xorl %r15d, %ecx
  11133. xorl %r8d, %eax
  11134. vpsrld $10, %ymm6, %ymm8
  11135. vpsrlq $19, %ymm6, %ymm7
  11136. # rnd_1: 6 - 7
  11137. rorl $11, %ecx
  11138. addl %r14d, %r10d
  11139. xorl %r15d, %ecx
  11140. addl %eax, %r14d
  11141. rorl $2, %ecx
  11142. movl %r10d, %edx
  11143. addl %ecx, %r14d
  11144. # rnd_0: 0 - 0
  11145. rorl $14, %edx
  11146. vpsrlq $0x11, %ymm6, %ymm6
  11147. vpaddd %ymm0, %ymm4, %ymm4
  11148. # rnd_0: 1 - 3
  11149. movl %r15d, %eax
  11150. movl %r11d, %ecx
  11151. addl 264(%rsp), %r13d
  11152. xorl %r12d, %ecx
  11153. xorl %r10d, %edx
  11154. andl %r10d, %ecx
  11155. rorl $5, %edx
  11156. xorl %r12d, %ecx
  11157. xorl %r10d, %edx
  11158. addl %ecx, %r13d
  11159. vpxor %ymm6, %ymm7, %ymm6
  11160. vpaddd %ymm5, %ymm4, %ymm4
  11161. # rnd_0: 4 - 4
  11162. rorl $6, %edx
  11163. xorl %r14d, %eax
  11164. addl %edx, %r13d
  11165. movl %r14d, %ecx
  11166. vpxor %ymm6, %ymm8, %ymm8
  11167. # rnd_0: 5 - 5
  11168. andl %eax, %ebx
  11169. rorl $9, %ecx
  11170. xorl %r14d, %ecx
  11171. xorl %r15d, %ebx
  11172. vpshufb %ymm11, %ymm8, %ymm8
  11173. # rnd_0: 6 - 6
  11174. rorl $11, %ecx
  11175. addl %r13d, %r9d
  11176. xorl %r14d, %ecx
  11177. addl %ebx, %r13d
  11178. vpaddd %ymm8, %ymm4, %ymm4
  11179. # rnd_0: 7 - 7
  11180. rorl $2, %ecx
  11181. movl %r9d, %edx
  11182. addl %ecx, %r13d
  11183. # rnd_1: 0 - 0
  11184. rorl $14, %edx
  11185. vpshufd $0x50, %ymm4, %ymm6
  11186. # rnd_1: 1 - 1
  11187. movl %r14d, %ebx
  11188. movl %r10d, %ecx
  11189. addl 268(%rsp), %r12d
  11190. xorl %r11d, %ecx
  11191. vpsrlq $0x11, %ymm6, %ymm8
  11192. vpsrlq $19, %ymm6, %ymm7
  11193. # rnd_1: 2 - 3
  11194. xorl %r9d, %edx
  11195. andl %r9d, %ecx
  11196. rorl $5, %edx
  11197. xorl %r11d, %ecx
  11198. xorl %r9d, %edx
  11199. addl %ecx, %r12d
  11200. vpsrld $10, %ymm6, %ymm9
  11201. vpxor %ymm8, %ymm7, %ymm8
  11202. # rnd_1: 4 - 5
  11203. rorl $6, %edx
  11204. xorl %r13d, %ebx
  11205. addl %edx, %r12d
  11206. movl %r13d, %ecx
  11207. andl %ebx, %eax
  11208. rorl $9, %ecx
  11209. xorl %r13d, %ecx
  11210. xorl %r14d, %eax
  11211. vpxor %ymm9, %ymm8, %ymm9
  11212. # rnd_1: 6 - 6
  11213. rorl $11, %ecx
  11214. addl %r12d, %r8d
  11215. xorl %r13d, %ecx
  11216. addl %eax, %r12d
  11217. vpshufb %ymm12, %ymm9, %ymm9
  11218. # rnd_1: 7 - 7
  11219. rorl $2, %ecx
  11220. movl %r8d, %edx
  11221. addl %ecx, %r12d
  11222. vpaddd %ymm4, %ymm9, %ymm0
  11223. # msg_sched done: 64-67
  11224. # msg_sched: 72-75
  11225. # rnd_0: 0 - 0
  11226. rorl $14, %edx
  11227. vpalignr $4, %ymm1, %ymm2, %ymm5
  11228. vpalignr $4, %ymm3, %ymm0, %ymm4
  11229. # rnd_0: 1 - 2
  11230. movl %r13d, %eax
  11231. movl %r9d, %ecx
  11232. addl 288(%rsp), %r11d
  11233. xorl %r10d, %ecx
  11234. xorl %r8d, %edx
  11235. andl %r8d, %ecx
  11236. vpsrld $7, %ymm5, %ymm6
  11237. vpslld $25, %ymm5, %ymm7
  11238. # rnd_0: 3 - 4
  11239. rorl $5, %edx
  11240. xorl %r10d, %ecx
  11241. xorl %r8d, %edx
  11242. addl %ecx, %r11d
  11243. rorl $6, %edx
  11244. xorl %r12d, %eax
  11245. addl %edx, %r11d
  11246. movl %r12d, %ecx
  11247. vpsrld $18, %ymm5, %ymm8
  11248. vpslld $14, %ymm5, %ymm9
  11249. # rnd_0: 5 - 6
  11250. andl %eax, %ebx
  11251. rorl $9, %ecx
  11252. xorl %r12d, %ecx
  11253. xorl %r13d, %ebx
  11254. rorl $11, %ecx
  11255. addl %r11d, %r15d
  11256. xorl %r12d, %ecx
  11257. addl %ebx, %r11d
  11258. vpor %ymm6, %ymm7, %ymm6
  11259. vpor %ymm8, %ymm9, %ymm8
  11260. # rnd_0: 7 - 7
  11261. rorl $2, %ecx
  11262. movl %r15d, %edx
  11263. addl %ecx, %r11d
  11264. # rnd_1: 0 - 1
  11265. rorl $14, %edx
  11266. movl %r12d, %ebx
  11267. movl %r8d, %ecx
  11268. addl 292(%rsp), %r10d
  11269. xorl %r9d, %ecx
  11270. vpsrld $3, %ymm5, %ymm9
  11271. vpxor %ymm6, %ymm8, %ymm6
  11272. # rnd_1: 2 - 3
  11273. xorl %r15d, %edx
  11274. andl %r15d, %ecx
  11275. rorl $5, %edx
  11276. xorl %r9d, %ecx
  11277. xorl %r15d, %edx
  11278. addl %ecx, %r10d
  11279. vpxor %ymm6, %ymm9, %ymm5
  11280. vpshufd $0xfa, %ymm0, %ymm6
  11281. # rnd_1: 4 - 5
  11282. rorl $6, %edx
  11283. xorl %r11d, %ebx
  11284. addl %edx, %r10d
  11285. movl %r11d, %ecx
  11286. andl %ebx, %eax
  11287. rorl $9, %ecx
  11288. xorl %r11d, %ecx
  11289. xorl %r12d, %eax
  11290. vpsrld $10, %ymm6, %ymm8
  11291. vpsrlq $19, %ymm6, %ymm7
  11292. # rnd_1: 6 - 7
  11293. rorl $11, %ecx
  11294. addl %r10d, %r14d
  11295. xorl %r11d, %ecx
  11296. addl %eax, %r10d
  11297. rorl $2, %ecx
  11298. movl %r14d, %edx
  11299. addl %ecx, %r10d
  11300. # rnd_0: 0 - 0
  11301. rorl $14, %edx
  11302. vpsrlq $0x11, %ymm6, %ymm6
  11303. vpaddd %ymm1, %ymm4, %ymm4
  11304. # rnd_0: 1 - 3
  11305. movl %r11d, %eax
  11306. movl %r15d, %ecx
  11307. addl 296(%rsp), %r9d
  11308. xorl %r8d, %ecx
  11309. xorl %r14d, %edx
  11310. andl %r14d, %ecx
  11311. rorl $5, %edx
  11312. xorl %r8d, %ecx
  11313. xorl %r14d, %edx
  11314. addl %ecx, %r9d
  11315. vpxor %ymm6, %ymm7, %ymm6
  11316. vpaddd %ymm5, %ymm4, %ymm4
  11317. # rnd_0: 4 - 4
  11318. rorl $6, %edx
  11319. xorl %r10d, %eax
  11320. addl %edx, %r9d
  11321. movl %r10d, %ecx
  11322. vpxor %ymm6, %ymm8, %ymm8
  11323. # rnd_0: 5 - 5
  11324. andl %eax, %ebx
  11325. rorl $9, %ecx
  11326. xorl %r10d, %ecx
  11327. xorl %r11d, %ebx
  11328. vpshufb %ymm11, %ymm8, %ymm8
  11329. # rnd_0: 6 - 6
  11330. rorl $11, %ecx
  11331. addl %r9d, %r13d
  11332. xorl %r10d, %ecx
  11333. addl %ebx, %r9d
  11334. vpaddd %ymm8, %ymm4, %ymm4
  11335. # rnd_0: 7 - 7
  11336. rorl $2, %ecx
  11337. movl %r13d, %edx
  11338. addl %ecx, %r9d
  11339. # rnd_1: 0 - 0
  11340. rorl $14, %edx
  11341. vpshufd $0x50, %ymm4, %ymm6
  11342. # rnd_1: 1 - 1
  11343. movl %r10d, %ebx
  11344. movl %r14d, %ecx
  11345. addl 300(%rsp), %r8d
  11346. xorl %r15d, %ecx
  11347. vpsrlq $0x11, %ymm6, %ymm8
  11348. vpsrlq $19, %ymm6, %ymm7
  11349. # rnd_1: 2 - 3
  11350. xorl %r13d, %edx
  11351. andl %r13d, %ecx
  11352. rorl $5, %edx
  11353. xorl %r15d, %ecx
  11354. xorl %r13d, %edx
  11355. addl %ecx, %r8d
  11356. vpsrld $10, %ymm6, %ymm9
  11357. vpxor %ymm8, %ymm7, %ymm8
  11358. # rnd_1: 4 - 5
  11359. rorl $6, %edx
  11360. xorl %r9d, %ebx
  11361. addl %edx, %r8d
  11362. movl %r9d, %ecx
  11363. andl %ebx, %eax
  11364. rorl $9, %ecx
  11365. xorl %r9d, %ecx
  11366. xorl %r10d, %eax
  11367. vpxor %ymm9, %ymm8, %ymm9
  11368. # rnd_1: 6 - 6
  11369. rorl $11, %ecx
  11370. addl %r8d, %r12d
  11371. xorl %r9d, %ecx
  11372. addl %eax, %r8d
  11373. vpshufb %ymm12, %ymm9, %ymm9
  11374. # rnd_1: 7 - 7
  11375. rorl $2, %ecx
  11376. movl %r12d, %edx
  11377. addl %ecx, %r8d
  11378. vpaddd %ymm4, %ymm9, %ymm1
  11379. # msg_sched done: 72-75
  11380. # msg_sched: 80-83
  11381. # rnd_0: 0 - 0
  11382. rorl $14, %edx
  11383. vpalignr $4, %ymm2, %ymm3, %ymm5
  11384. vpalignr $4, %ymm0, %ymm1, %ymm4
  11385. # rnd_0: 1 - 2
  11386. movl %r9d, %eax
  11387. movl %r13d, %ecx
  11388. addl 320(%rsp), %r15d
  11389. xorl %r14d, %ecx
  11390. xorl %r12d, %edx
  11391. andl %r12d, %ecx
  11392. vpsrld $7, %ymm5, %ymm6
  11393. vpslld $25, %ymm5, %ymm7
  11394. # rnd_0: 3 - 4
  11395. rorl $5, %edx
  11396. xorl %r14d, %ecx
  11397. xorl %r12d, %edx
  11398. addl %ecx, %r15d
  11399. rorl $6, %edx
  11400. xorl %r8d, %eax
  11401. addl %edx, %r15d
  11402. movl %r8d, %ecx
  11403. vpsrld $18, %ymm5, %ymm8
  11404. vpslld $14, %ymm5, %ymm9
  11405. # rnd_0: 5 - 6
  11406. andl %eax, %ebx
  11407. rorl $9, %ecx
  11408. xorl %r8d, %ecx
  11409. xorl %r9d, %ebx
  11410. rorl $11, %ecx
  11411. addl %r15d, %r11d
  11412. xorl %r8d, %ecx
  11413. addl %ebx, %r15d
  11414. vpor %ymm6, %ymm7, %ymm6
  11415. vpor %ymm8, %ymm9, %ymm8
  11416. # rnd_0: 7 - 7
  11417. rorl $2, %ecx
  11418. movl %r11d, %edx
  11419. addl %ecx, %r15d
  11420. # rnd_1: 0 - 1
  11421. rorl $14, %edx
  11422. movl %r8d, %ebx
  11423. movl %r12d, %ecx
  11424. addl 324(%rsp), %r14d
  11425. xorl %r13d, %ecx
  11426. vpsrld $3, %ymm5, %ymm9
  11427. vpxor %ymm6, %ymm8, %ymm6
  11428. # rnd_1: 2 - 3
  11429. xorl %r11d, %edx
  11430. andl %r11d, %ecx
  11431. rorl $5, %edx
  11432. xorl %r13d, %ecx
  11433. xorl %r11d, %edx
  11434. addl %ecx, %r14d
  11435. vpxor %ymm6, %ymm9, %ymm5
  11436. vpshufd $0xfa, %ymm1, %ymm6
  11437. # rnd_1: 4 - 5
  11438. rorl $6, %edx
  11439. xorl %r15d, %ebx
  11440. addl %edx, %r14d
  11441. movl %r15d, %ecx
  11442. andl %ebx, %eax
  11443. rorl $9, %ecx
  11444. xorl %r15d, %ecx
  11445. xorl %r8d, %eax
  11446. vpsrld $10, %ymm6, %ymm8
  11447. vpsrlq $19, %ymm6, %ymm7
  11448. # rnd_1: 6 - 7
  11449. rorl $11, %ecx
  11450. addl %r14d, %r10d
  11451. xorl %r15d, %ecx
  11452. addl %eax, %r14d
  11453. rorl $2, %ecx
  11454. movl %r10d, %edx
  11455. addl %ecx, %r14d
  11456. # rnd_0: 0 - 0
  11457. rorl $14, %edx
  11458. vpsrlq $0x11, %ymm6, %ymm6
  11459. vpaddd %ymm2, %ymm4, %ymm4
  11460. # rnd_0: 1 - 3
  11461. movl %r15d, %eax
  11462. movl %r11d, %ecx
  11463. addl 328(%rsp), %r13d
  11464. xorl %r12d, %ecx
  11465. xorl %r10d, %edx
  11466. andl %r10d, %ecx
  11467. rorl $5, %edx
  11468. xorl %r12d, %ecx
  11469. xorl %r10d, %edx
  11470. addl %ecx, %r13d
  11471. vpxor %ymm6, %ymm7, %ymm6
  11472. vpaddd %ymm5, %ymm4, %ymm4
  11473. # rnd_0: 4 - 4
  11474. rorl $6, %edx
  11475. xorl %r14d, %eax
  11476. addl %edx, %r13d
  11477. movl %r14d, %ecx
  11478. vpxor %ymm6, %ymm8, %ymm8
  11479. # rnd_0: 5 - 5
  11480. andl %eax, %ebx
  11481. rorl $9, %ecx
  11482. xorl %r14d, %ecx
  11483. xorl %r15d, %ebx
  11484. vpshufb %ymm11, %ymm8, %ymm8
  11485. # rnd_0: 6 - 6
  11486. rorl $11, %ecx
  11487. addl %r13d, %r9d
  11488. xorl %r14d, %ecx
  11489. addl %ebx, %r13d
  11490. vpaddd %ymm8, %ymm4, %ymm4
  11491. # rnd_0: 7 - 7
  11492. rorl $2, %ecx
  11493. movl %r9d, %edx
  11494. addl %ecx, %r13d
  11495. # rnd_1: 0 - 0
  11496. rorl $14, %edx
  11497. vpshufd $0x50, %ymm4, %ymm6
  11498. # rnd_1: 1 - 1
  11499. movl %r14d, %ebx
  11500. movl %r10d, %ecx
  11501. addl 332(%rsp), %r12d
  11502. xorl %r11d, %ecx
  11503. vpsrlq $0x11, %ymm6, %ymm8
  11504. vpsrlq $19, %ymm6, %ymm7
  11505. # rnd_1: 2 - 3
  11506. xorl %r9d, %edx
  11507. andl %r9d, %ecx
  11508. rorl $5, %edx
  11509. xorl %r11d, %ecx
  11510. xorl %r9d, %edx
  11511. addl %ecx, %r12d
  11512. vpsrld $10, %ymm6, %ymm9
  11513. vpxor %ymm8, %ymm7, %ymm8
  11514. # rnd_1: 4 - 5
  11515. rorl $6, %edx
  11516. xorl %r13d, %ebx
  11517. addl %edx, %r12d
  11518. movl %r13d, %ecx
  11519. andl %ebx, %eax
  11520. rorl $9, %ecx
  11521. xorl %r13d, %ecx
  11522. xorl %r14d, %eax
  11523. vpxor %ymm9, %ymm8, %ymm9
  11524. # rnd_1: 6 - 6
  11525. rorl $11, %ecx
  11526. addl %r12d, %r8d
  11527. xorl %r13d, %ecx
  11528. addl %eax, %r12d
  11529. vpshufb %ymm12, %ymm9, %ymm9
  11530. # rnd_1: 7 - 7
  11531. rorl $2, %ecx
  11532. movl %r8d, %edx
  11533. addl %ecx, %r12d
  11534. vpaddd %ymm4, %ymm9, %ymm2
  11535. # msg_sched done: 80-83
  11536. # msg_sched: 88-91
  11537. # rnd_0: 0 - 0
  11538. rorl $14, %edx
  11539. vpalignr $4, %ymm3, %ymm0, %ymm5
  11540. vpalignr $4, %ymm1, %ymm2, %ymm4
  11541. # rnd_0: 1 - 2
  11542. movl %r13d, %eax
  11543. movl %r9d, %ecx
  11544. addl 352(%rsp), %r11d
  11545. xorl %r10d, %ecx
  11546. xorl %r8d, %edx
  11547. andl %r8d, %ecx
  11548. vpsrld $7, %ymm5, %ymm6
  11549. vpslld $25, %ymm5, %ymm7
  11550. # rnd_0: 3 - 4
  11551. rorl $5, %edx
  11552. xorl %r10d, %ecx
  11553. xorl %r8d, %edx
  11554. addl %ecx, %r11d
  11555. rorl $6, %edx
  11556. xorl %r12d, %eax
  11557. addl %edx, %r11d
  11558. movl %r12d, %ecx
  11559. vpsrld $18, %ymm5, %ymm8
  11560. vpslld $14, %ymm5, %ymm9
  11561. # rnd_0: 5 - 6
  11562. andl %eax, %ebx
  11563. rorl $9, %ecx
  11564. xorl %r12d, %ecx
  11565. xorl %r13d, %ebx
  11566. rorl $11, %ecx
  11567. addl %r11d, %r15d
  11568. xorl %r12d, %ecx
  11569. addl %ebx, %r11d
  11570. vpor %ymm6, %ymm7, %ymm6
  11571. vpor %ymm8, %ymm9, %ymm8
  11572. # rnd_0: 7 - 7
  11573. rorl $2, %ecx
  11574. movl %r15d, %edx
  11575. addl %ecx, %r11d
  11576. # rnd_1: 0 - 1
  11577. rorl $14, %edx
  11578. movl %r12d, %ebx
  11579. movl %r8d, %ecx
  11580. addl 356(%rsp), %r10d
  11581. xorl %r9d, %ecx
  11582. vpsrld $3, %ymm5, %ymm9
  11583. vpxor %ymm6, %ymm8, %ymm6
  11584. # rnd_1: 2 - 3
  11585. xorl %r15d, %edx
  11586. andl %r15d, %ecx
  11587. rorl $5, %edx
  11588. xorl %r9d, %ecx
  11589. xorl %r15d, %edx
  11590. addl %ecx, %r10d
  11591. vpxor %ymm6, %ymm9, %ymm5
  11592. vpshufd $0xfa, %ymm2, %ymm6
  11593. # rnd_1: 4 - 5
  11594. rorl $6, %edx
  11595. xorl %r11d, %ebx
  11596. addl %edx, %r10d
  11597. movl %r11d, %ecx
  11598. andl %ebx, %eax
  11599. rorl $9, %ecx
  11600. xorl %r11d, %ecx
  11601. xorl %r12d, %eax
  11602. vpsrld $10, %ymm6, %ymm8
  11603. vpsrlq $19, %ymm6, %ymm7
  11604. # rnd_1: 6 - 7
  11605. rorl $11, %ecx
  11606. addl %r10d, %r14d
  11607. xorl %r11d, %ecx
  11608. addl %eax, %r10d
  11609. rorl $2, %ecx
  11610. movl %r14d, %edx
  11611. addl %ecx, %r10d
  11612. # rnd_0: 0 - 0
  11613. rorl $14, %edx
  11614. vpsrlq $0x11, %ymm6, %ymm6
  11615. vpaddd %ymm3, %ymm4, %ymm4
  11616. # rnd_0: 1 - 3
  11617. movl %r11d, %eax
  11618. movl %r15d, %ecx
  11619. addl 360(%rsp), %r9d
  11620. xorl %r8d, %ecx
  11621. xorl %r14d, %edx
  11622. andl %r14d, %ecx
  11623. rorl $5, %edx
  11624. xorl %r8d, %ecx
  11625. xorl %r14d, %edx
  11626. addl %ecx, %r9d
  11627. vpxor %ymm6, %ymm7, %ymm6
  11628. vpaddd %ymm5, %ymm4, %ymm4
  11629. # rnd_0: 4 - 4
  11630. rorl $6, %edx
  11631. xorl %r10d, %eax
  11632. addl %edx, %r9d
  11633. movl %r10d, %ecx
  11634. vpxor %ymm6, %ymm8, %ymm8
  11635. # rnd_0: 5 - 5
  11636. andl %eax, %ebx
  11637. rorl $9, %ecx
  11638. xorl %r10d, %ecx
  11639. xorl %r11d, %ebx
  11640. vpshufb %ymm11, %ymm8, %ymm8
  11641. # rnd_0: 6 - 6
  11642. rorl $11, %ecx
  11643. addl %r9d, %r13d
  11644. xorl %r10d, %ecx
  11645. addl %ebx, %r9d
  11646. vpaddd %ymm8, %ymm4, %ymm4
  11647. # rnd_0: 7 - 7
  11648. rorl $2, %ecx
  11649. movl %r13d, %edx
  11650. addl %ecx, %r9d
  11651. # rnd_1: 0 - 0
  11652. rorl $14, %edx
  11653. vpshufd $0x50, %ymm4, %ymm6
  11654. # rnd_1: 1 - 1
  11655. movl %r10d, %ebx
  11656. movl %r14d, %ecx
  11657. addl 364(%rsp), %r8d
  11658. xorl %r15d, %ecx
  11659. vpsrlq $0x11, %ymm6, %ymm8
  11660. vpsrlq $19, %ymm6, %ymm7
  11661. # rnd_1: 2 - 3
  11662. xorl %r13d, %edx
  11663. andl %r13d, %ecx
  11664. rorl $5, %edx
  11665. xorl %r15d, %ecx
  11666. xorl %r13d, %edx
  11667. addl %ecx, %r8d
  11668. vpsrld $10, %ymm6, %ymm9
  11669. vpxor %ymm8, %ymm7, %ymm8
  11670. # rnd_1: 4 - 5
  11671. rorl $6, %edx
  11672. xorl %r9d, %ebx
  11673. addl %edx, %r8d
  11674. movl %r9d, %ecx
  11675. andl %ebx, %eax
  11676. rorl $9, %ecx
  11677. xorl %r9d, %ecx
  11678. xorl %r10d, %eax
  11679. vpxor %ymm9, %ymm8, %ymm9
  11680. # rnd_1: 6 - 6
  11681. rorl $11, %ecx
  11682. addl %r8d, %r12d
  11683. xorl %r9d, %ecx
  11684. addl %eax, %r8d
  11685. vpshufb %ymm12, %ymm9, %ymm9
  11686. # rnd_1: 7 - 7
  11687. rorl $2, %ecx
  11688. movl %r12d, %edx
  11689. addl %ecx, %r8d
  11690. vpaddd %ymm4, %ymm9, %ymm3
  11691. # msg_sched done: 88-91
  11692. # set_w_k_xfer_4: 12
  11693. vpaddd 384+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  11694. vpaddd 416+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  11695. vmovdqu %ymm4, 384(%rsp)
  11696. vmovdqu %ymm5, 416(%rsp)
  11697. vpaddd 448+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  11698. vpaddd 480+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  11699. vmovdqu %ymm4, 448(%rsp)
  11700. vmovdqu %ymm5, 480(%rsp)
  11701. # rnd_all_4: 24-27
  11702. addl 384(%rsp), %r15d
  11703. movl %r13d, %ecx
  11704. movl %r9d, %eax
  11705. xorl %r14d, %ecx
  11706. rorl $14, %edx
  11707. andl %r12d, %ecx
  11708. xorl %r12d, %edx
  11709. xorl %r14d, %ecx
  11710. rorl $5, %edx
  11711. addl %ecx, %r15d
  11712. xorl %r12d, %edx
  11713. xorl %r8d, %eax
  11714. rorl $6, %edx
  11715. movl %r8d, %ecx
  11716. addl %edx, %r15d
  11717. rorl $9, %ecx
  11718. andl %eax, %ebx
  11719. xorl %r8d, %ecx
  11720. xorl %r9d, %ebx
  11721. rorl $11, %ecx
  11722. addl %r15d, %r11d
  11723. xorl %r8d, %ecx
  11724. addl %ebx, %r15d
  11725. rorl $2, %ecx
  11726. movl %r11d, %edx
  11727. addl %ecx, %r15d
  11728. addl 388(%rsp), %r14d
  11729. movl %r12d, %ecx
  11730. movl %r8d, %ebx
  11731. xorl %r13d, %ecx
  11732. rorl $14, %edx
  11733. andl %r11d, %ecx
  11734. xorl %r11d, %edx
  11735. xorl %r13d, %ecx
  11736. rorl $5, %edx
  11737. addl %ecx, %r14d
  11738. xorl %r11d, %edx
  11739. xorl %r15d, %ebx
  11740. rorl $6, %edx
  11741. movl %r15d, %ecx
  11742. addl %edx, %r14d
  11743. rorl $9, %ecx
  11744. andl %ebx, %eax
  11745. xorl %r15d, %ecx
  11746. xorl %r8d, %eax
  11747. rorl $11, %ecx
  11748. addl %r14d, %r10d
  11749. xorl %r15d, %ecx
  11750. addl %eax, %r14d
  11751. rorl $2, %ecx
  11752. movl %r10d, %edx
  11753. addl %ecx, %r14d
  11754. addl 392(%rsp), %r13d
  11755. movl %r11d, %ecx
  11756. movl %r15d, %eax
  11757. xorl %r12d, %ecx
  11758. rorl $14, %edx
  11759. andl %r10d, %ecx
  11760. xorl %r10d, %edx
  11761. xorl %r12d, %ecx
  11762. rorl $5, %edx
  11763. addl %ecx, %r13d
  11764. xorl %r10d, %edx
  11765. xorl %r14d, %eax
  11766. rorl $6, %edx
  11767. movl %r14d, %ecx
  11768. addl %edx, %r13d
  11769. rorl $9, %ecx
  11770. andl %eax, %ebx
  11771. xorl %r14d, %ecx
  11772. xorl %r15d, %ebx
  11773. rorl $11, %ecx
  11774. addl %r13d, %r9d
  11775. xorl %r14d, %ecx
  11776. addl %ebx, %r13d
  11777. rorl $2, %ecx
  11778. movl %r9d, %edx
  11779. addl %ecx, %r13d
  11780. addl 396(%rsp), %r12d
  11781. movl %r10d, %ecx
  11782. movl %r14d, %ebx
  11783. xorl %r11d, %ecx
  11784. rorl $14, %edx
  11785. andl %r9d, %ecx
  11786. xorl %r9d, %edx
  11787. xorl %r11d, %ecx
  11788. rorl $5, %edx
  11789. addl %ecx, %r12d
  11790. xorl %r9d, %edx
  11791. xorl %r13d, %ebx
  11792. rorl $6, %edx
  11793. movl %r13d, %ecx
  11794. addl %edx, %r12d
  11795. rorl $9, %ecx
  11796. andl %ebx, %eax
  11797. xorl %r13d, %ecx
  11798. xorl %r14d, %eax
  11799. rorl $11, %ecx
  11800. addl %r12d, %r8d
  11801. xorl %r13d, %ecx
  11802. addl %eax, %r12d
  11803. rorl $2, %ecx
  11804. movl %r8d, %edx
  11805. addl %ecx, %r12d
  11806. # rnd_all_4: 26-29
  11807. addl 416(%rsp), %r11d
  11808. movl %r9d, %ecx
  11809. movl %r13d, %eax
  11810. xorl %r10d, %ecx
  11811. rorl $14, %edx
  11812. andl %r8d, %ecx
  11813. xorl %r8d, %edx
  11814. xorl %r10d, %ecx
  11815. rorl $5, %edx
  11816. addl %ecx, %r11d
  11817. xorl %r8d, %edx
  11818. xorl %r12d, %eax
  11819. rorl $6, %edx
  11820. movl %r12d, %ecx
  11821. addl %edx, %r11d
  11822. rorl $9, %ecx
  11823. andl %eax, %ebx
  11824. xorl %r12d, %ecx
  11825. xorl %r13d, %ebx
  11826. rorl $11, %ecx
  11827. addl %r11d, %r15d
  11828. xorl %r12d, %ecx
  11829. addl %ebx, %r11d
  11830. rorl $2, %ecx
  11831. movl %r15d, %edx
  11832. addl %ecx, %r11d
  11833. addl 420(%rsp), %r10d
  11834. movl %r8d, %ecx
  11835. movl %r12d, %ebx
  11836. xorl %r9d, %ecx
  11837. rorl $14, %edx
  11838. andl %r15d, %ecx
  11839. xorl %r15d, %edx
  11840. xorl %r9d, %ecx
  11841. rorl $5, %edx
  11842. addl %ecx, %r10d
  11843. xorl %r15d, %edx
  11844. xorl %r11d, %ebx
  11845. rorl $6, %edx
  11846. movl %r11d, %ecx
  11847. addl %edx, %r10d
  11848. rorl $9, %ecx
  11849. andl %ebx, %eax
  11850. xorl %r11d, %ecx
  11851. xorl %r12d, %eax
  11852. rorl $11, %ecx
  11853. addl %r10d, %r14d
  11854. xorl %r11d, %ecx
  11855. addl %eax, %r10d
  11856. rorl $2, %ecx
  11857. movl %r14d, %edx
  11858. addl %ecx, %r10d
  11859. addl 424(%rsp), %r9d
  11860. movl %r15d, %ecx
  11861. movl %r11d, %eax
  11862. xorl %r8d, %ecx
  11863. rorl $14, %edx
  11864. andl %r14d, %ecx
  11865. xorl %r14d, %edx
  11866. xorl %r8d, %ecx
  11867. rorl $5, %edx
  11868. addl %ecx, %r9d
  11869. xorl %r14d, %edx
  11870. xorl %r10d, %eax
  11871. rorl $6, %edx
  11872. movl %r10d, %ecx
  11873. addl %edx, %r9d
  11874. rorl $9, %ecx
  11875. andl %eax, %ebx
  11876. xorl %r10d, %ecx
  11877. xorl %r11d, %ebx
  11878. rorl $11, %ecx
  11879. addl %r9d, %r13d
  11880. xorl %r10d, %ecx
  11881. addl %ebx, %r9d
  11882. rorl $2, %ecx
  11883. movl %r13d, %edx
  11884. addl %ecx, %r9d
  11885. addl 428(%rsp), %r8d
  11886. movl %r14d, %ecx
  11887. movl %r10d, %ebx
  11888. xorl %r15d, %ecx
  11889. rorl $14, %edx
  11890. andl %r13d, %ecx
  11891. xorl %r13d, %edx
  11892. xorl %r15d, %ecx
  11893. rorl $5, %edx
  11894. addl %ecx, %r8d
  11895. xorl %r13d, %edx
  11896. xorl %r9d, %ebx
  11897. rorl $6, %edx
  11898. movl %r9d, %ecx
  11899. addl %edx, %r8d
  11900. rorl $9, %ecx
  11901. andl %ebx, %eax
  11902. xorl %r9d, %ecx
  11903. xorl %r10d, %eax
  11904. rorl $11, %ecx
  11905. addl %r8d, %r12d
  11906. xorl %r9d, %ecx
  11907. addl %eax, %r8d
  11908. rorl $2, %ecx
  11909. movl %r12d, %edx
  11910. addl %ecx, %r8d
  11911. # rnd_all_4: 28-31
  11912. addl 448(%rsp), %r15d
  11913. movl %r13d, %ecx
  11914. movl %r9d, %eax
  11915. xorl %r14d, %ecx
  11916. rorl $14, %edx
  11917. andl %r12d, %ecx
  11918. xorl %r12d, %edx
  11919. xorl %r14d, %ecx
  11920. rorl $5, %edx
  11921. addl %ecx, %r15d
  11922. xorl %r12d, %edx
  11923. xorl %r8d, %eax
  11924. rorl $6, %edx
  11925. movl %r8d, %ecx
  11926. addl %edx, %r15d
  11927. rorl $9, %ecx
  11928. andl %eax, %ebx
  11929. xorl %r8d, %ecx
  11930. xorl %r9d, %ebx
  11931. rorl $11, %ecx
  11932. addl %r15d, %r11d
  11933. xorl %r8d, %ecx
  11934. addl %ebx, %r15d
  11935. rorl $2, %ecx
  11936. movl %r11d, %edx
  11937. addl %ecx, %r15d
  11938. addl 452(%rsp), %r14d
  11939. movl %r12d, %ecx
  11940. movl %r8d, %ebx
  11941. xorl %r13d, %ecx
  11942. rorl $14, %edx
  11943. andl %r11d, %ecx
  11944. xorl %r11d, %edx
  11945. xorl %r13d, %ecx
  11946. rorl $5, %edx
  11947. addl %ecx, %r14d
  11948. xorl %r11d, %edx
  11949. xorl %r15d, %ebx
  11950. rorl $6, %edx
  11951. movl %r15d, %ecx
  11952. addl %edx, %r14d
  11953. rorl $9, %ecx
  11954. andl %ebx, %eax
  11955. xorl %r15d, %ecx
  11956. xorl %r8d, %eax
  11957. rorl $11, %ecx
  11958. addl %r14d, %r10d
  11959. xorl %r15d, %ecx
  11960. addl %eax, %r14d
  11961. rorl $2, %ecx
  11962. movl %r10d, %edx
  11963. addl %ecx, %r14d
  11964. addl 456(%rsp), %r13d
  11965. movl %r11d, %ecx
  11966. movl %r15d, %eax
  11967. xorl %r12d, %ecx
  11968. rorl $14, %edx
  11969. andl %r10d, %ecx
  11970. xorl %r10d, %edx
  11971. xorl %r12d, %ecx
  11972. rorl $5, %edx
  11973. addl %ecx, %r13d
  11974. xorl %r10d, %edx
  11975. xorl %r14d, %eax
  11976. rorl $6, %edx
  11977. movl %r14d, %ecx
  11978. addl %edx, %r13d
  11979. rorl $9, %ecx
  11980. andl %eax, %ebx
  11981. xorl %r14d, %ecx
  11982. xorl %r15d, %ebx
  11983. rorl $11, %ecx
  11984. addl %r13d, %r9d
  11985. xorl %r14d, %ecx
  11986. addl %ebx, %r13d
  11987. rorl $2, %ecx
  11988. movl %r9d, %edx
  11989. addl %ecx, %r13d
  11990. addl 460(%rsp), %r12d
  11991. movl %r10d, %ecx
  11992. movl %r14d, %ebx
  11993. xorl %r11d, %ecx
  11994. rorl $14, %edx
  11995. andl %r9d, %ecx
  11996. xorl %r9d, %edx
  11997. xorl %r11d, %ecx
  11998. rorl $5, %edx
  11999. addl %ecx, %r12d
  12000. xorl %r9d, %edx
  12001. xorl %r13d, %ebx
  12002. rorl $6, %edx
  12003. movl %r13d, %ecx
  12004. addl %edx, %r12d
  12005. rorl $9, %ecx
  12006. andl %ebx, %eax
  12007. xorl %r13d, %ecx
  12008. xorl %r14d, %eax
  12009. rorl $11, %ecx
  12010. addl %r12d, %r8d
  12011. xorl %r13d, %ecx
  12012. addl %eax, %r12d
  12013. rorl $2, %ecx
  12014. movl %r8d, %edx
  12015. addl %ecx, %r12d
  12016. # rnd_all_4: 30-33
  12017. addl 480(%rsp), %r11d
  12018. movl %r9d, %ecx
  12019. movl %r13d, %eax
  12020. xorl %r10d, %ecx
  12021. rorl $14, %edx
  12022. andl %r8d, %ecx
  12023. xorl %r8d, %edx
  12024. xorl %r10d, %ecx
  12025. rorl $5, %edx
  12026. addl %ecx, %r11d
  12027. xorl %r8d, %edx
  12028. xorl %r12d, %eax
  12029. rorl $6, %edx
  12030. movl %r12d, %ecx
  12031. addl %edx, %r11d
  12032. rorl $9, %ecx
  12033. andl %eax, %ebx
  12034. xorl %r12d, %ecx
  12035. xorl %r13d, %ebx
  12036. rorl $11, %ecx
  12037. addl %r11d, %r15d
  12038. xorl %r12d, %ecx
  12039. addl %ebx, %r11d
  12040. rorl $2, %ecx
  12041. movl %r15d, %edx
  12042. addl %ecx, %r11d
  12043. addl 484(%rsp), %r10d
  12044. movl %r8d, %ecx
  12045. movl %r12d, %ebx
  12046. xorl %r9d, %ecx
  12047. rorl $14, %edx
  12048. andl %r15d, %ecx
  12049. xorl %r15d, %edx
  12050. xorl %r9d, %ecx
  12051. rorl $5, %edx
  12052. addl %ecx, %r10d
  12053. xorl %r15d, %edx
  12054. xorl %r11d, %ebx
  12055. rorl $6, %edx
  12056. movl %r11d, %ecx
  12057. addl %edx, %r10d
  12058. rorl $9, %ecx
  12059. andl %ebx, %eax
  12060. xorl %r11d, %ecx
  12061. xorl %r12d, %eax
  12062. rorl $11, %ecx
  12063. addl %r10d, %r14d
  12064. xorl %r11d, %ecx
  12065. addl %eax, %r10d
  12066. rorl $2, %ecx
  12067. movl %r14d, %edx
  12068. addl %ecx, %r10d
  12069. addl 488(%rsp), %r9d
  12070. movl %r15d, %ecx
  12071. movl %r11d, %eax
  12072. xorl %r8d, %ecx
  12073. rorl $14, %edx
  12074. andl %r14d, %ecx
  12075. xorl %r14d, %edx
  12076. xorl %r8d, %ecx
  12077. rorl $5, %edx
  12078. addl %ecx, %r9d
  12079. xorl %r14d, %edx
  12080. xorl %r10d, %eax
  12081. rorl $6, %edx
  12082. movl %r10d, %ecx
  12083. addl %edx, %r9d
  12084. rorl $9, %ecx
  12085. andl %eax, %ebx
  12086. xorl %r10d, %ecx
  12087. xorl %r11d, %ebx
  12088. rorl $11, %ecx
  12089. addl %r9d, %r13d
  12090. xorl %r10d, %ecx
  12091. addl %ebx, %r9d
  12092. rorl $2, %ecx
  12093. movl %r13d, %edx
  12094. addl %ecx, %r9d
  12095. addl 492(%rsp), %r8d
  12096. movl %r14d, %ecx
  12097. movl %r10d, %ebx
  12098. xorl %r15d, %ecx
  12099. rorl $14, %edx
  12100. andl %r13d, %ecx
  12101. xorl %r13d, %edx
  12102. xorl %r15d, %ecx
  12103. rorl $5, %edx
  12104. addl %ecx, %r8d
  12105. xorl %r13d, %edx
  12106. xorl %r9d, %ebx
  12107. rorl $6, %edx
  12108. movl %r9d, %ecx
  12109. addl %edx, %r8d
  12110. rorl $9, %ecx
  12111. andl %ebx, %eax
  12112. xorl %r9d, %ecx
  12113. xorl %r10d, %eax
  12114. rorl $11, %ecx
  12115. addl %r8d, %r12d
  12116. xorl %r9d, %ecx
  12117. addl %eax, %r8d
  12118. rorl $2, %ecx
  12119. movl %r12d, %edx
  12120. addl %ecx, %r8d
  12121. addl %r8d, (%rdi)
  12122. addl %r9d, 4(%rdi)
  12123. addl %r10d, 8(%rdi)
  12124. addl %r11d, 12(%rdi)
  12125. addl %r12d, 16(%rdi)
  12126. addl %r13d, 20(%rdi)
  12127. addl %r14d, 24(%rdi)
  12128. addl %r15d, 28(%rdi)
  12129. xorq %rax, %rax
  12130. vzeroupper
  12131. addq $0x200, %rsp
  12132. popq %r15
  12133. popq %r14
  12134. popq %r13
  12135. popq %r12
  12136. popq %rbx
  12137. repz retq
  12138. #ifndef __APPLE__
  12139. .size Transform_Sha256_AVX2,.-Transform_Sha256_AVX2
  12140. #endif /* __APPLE__ */
  12141. #ifndef __APPLE__
  12142. .text
  12143. .globl Transform_Sha256_AVX2_Len
  12144. .type Transform_Sha256_AVX2_Len,@function
  12145. .align 16
  12146. Transform_Sha256_AVX2_Len:
  12147. #else
  12148. .section __TEXT,__text
  12149. .globl _Transform_Sha256_AVX2_Len
  12150. .p2align 4
  12151. _Transform_Sha256_AVX2_Len:
  12152. #endif /* __APPLE__ */
  12153. pushq %rbx
  12154. pushq %r12
  12155. pushq %r13
  12156. pushq %r14
  12157. pushq %r15
  12158. pushq %rbp
  12159. movq %rsi, %rbp
  12160. movq %rdx, %rsi
  12161. subq $0x200, %rsp
  12162. testb $0x40, %sil
  12163. je L_sha256_len_avx2_block
  12164. vmovdqu (%rbp), %ymm0
  12165. vmovdqu 32(%rbp), %ymm1
  12166. vmovups %ymm0, 32(%rdi)
  12167. vmovups %ymm1, 64(%rdi)
  12168. #ifndef __APPLE__
  12169. call Transform_Sha256_AVX2@plt
  12170. #else
  12171. call _Transform_Sha256_AVX2
  12172. #endif /* __APPLE__ */
  12173. addq $0x40, %rbp
  12174. subl $0x40, %esi
  12175. jz L_sha256_len_avx2_done
  12176. L_sha256_len_avx2_block:
  12177. vmovdqa L_avx2_sha256_flip_mask(%rip), %ymm13
  12178. vmovdqa L_avx2_sha256_shuf_00BA(%rip), %ymm11
  12179. vmovdqa L_avx2_sha256_shuf_DC00(%rip), %ymm12
  12180. movl (%rdi), %r8d
  12181. movl 4(%rdi), %r9d
  12182. movl 8(%rdi), %r10d
  12183. movl 12(%rdi), %r11d
  12184. movl 16(%rdi), %r12d
  12185. movl 20(%rdi), %r13d
  12186. movl 24(%rdi), %r14d
  12187. movl 28(%rdi), %r15d
  12188. # Start of loop processing two blocks
  12189. L_sha256_len_avx2_start:
  12190. # X0, X1, X2, X3 = W[0..15]
  12191. vmovdqu (%rbp), %xmm0
  12192. vmovdqu 16(%rbp), %xmm1
  12193. vmovdqu 64(%rbp), %xmm4
  12194. vmovdqu 80(%rbp), %xmm5
  12195. vinserti128 $0x01, %xmm4, %ymm0, %ymm0
  12196. vinserti128 $0x01, %xmm5, %ymm1, %ymm1
  12197. vpshufb %ymm13, %ymm0, %ymm0
  12198. vpshufb %ymm13, %ymm1, %ymm1
  12199. vmovdqu 32(%rbp), %xmm2
  12200. vmovdqu 48(%rbp), %xmm3
  12201. vmovdqu 96(%rbp), %xmm6
  12202. vmovdqu 112(%rbp), %xmm7
  12203. vinserti128 $0x01, %xmm6, %ymm2, %ymm2
  12204. vinserti128 $0x01, %xmm7, %ymm3, %ymm3
  12205. vpshufb %ymm13, %ymm2, %ymm2
  12206. vpshufb %ymm13, %ymm3, %ymm3
  12207. movl %r9d, %ebx
  12208. movl %r12d, %edx
  12209. xorl %r10d, %ebx
  12210. # set_w_k_xfer_4: 0
  12211. vpaddd 0+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  12212. vpaddd 32+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  12213. vmovdqu %ymm4, (%rsp)
  12214. vmovdqu %ymm5, 32(%rsp)
  12215. vpaddd 64+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  12216. vpaddd 96+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  12217. vmovdqu %ymm4, 64(%rsp)
  12218. vmovdqu %ymm5, 96(%rsp)
  12219. # msg_sched: 0-3
  12220. # rnd_0: 0 - 0
  12221. rorl $14, %edx
  12222. vpalignr $4, %ymm0, %ymm1, %ymm5
  12223. vpalignr $4, %ymm2, %ymm3, %ymm4
  12224. # rnd_0: 1 - 2
  12225. movl %r9d, %eax
  12226. movl %r13d, %ecx
  12227. addl (%rsp), %r15d
  12228. xorl %r14d, %ecx
  12229. xorl %r12d, %edx
  12230. andl %r12d, %ecx
  12231. vpsrld $7, %ymm5, %ymm6
  12232. vpslld $25, %ymm5, %ymm7
  12233. # rnd_0: 3 - 4
  12234. rorl $5, %edx
  12235. xorl %r14d, %ecx
  12236. xorl %r12d, %edx
  12237. addl %ecx, %r15d
  12238. rorl $6, %edx
  12239. xorl %r8d, %eax
  12240. addl %edx, %r15d
  12241. movl %r8d, %ecx
  12242. vpsrld $18, %ymm5, %ymm8
  12243. vpslld $14, %ymm5, %ymm9
  12244. # rnd_0: 5 - 6
  12245. andl %eax, %ebx
  12246. rorl $9, %ecx
  12247. xorl %r8d, %ecx
  12248. xorl %r9d, %ebx
  12249. rorl $11, %ecx
  12250. addl %r15d, %r11d
  12251. xorl %r8d, %ecx
  12252. addl %ebx, %r15d
  12253. vpor %ymm6, %ymm7, %ymm6
  12254. vpor %ymm8, %ymm9, %ymm8
  12255. # rnd_0: 7 - 7
  12256. rorl $2, %ecx
  12257. movl %r11d, %edx
  12258. addl %ecx, %r15d
  12259. # rnd_1: 0 - 1
  12260. rorl $14, %edx
  12261. movl %r8d, %ebx
  12262. movl %r12d, %ecx
  12263. addl 4(%rsp), %r14d
  12264. xorl %r13d, %ecx
  12265. vpsrld $3, %ymm5, %ymm9
  12266. vpxor %ymm6, %ymm8, %ymm6
  12267. # rnd_1: 2 - 3
  12268. xorl %r11d, %edx
  12269. andl %r11d, %ecx
  12270. rorl $5, %edx
  12271. xorl %r13d, %ecx
  12272. xorl %r11d, %edx
  12273. addl %ecx, %r14d
  12274. vpxor %ymm6, %ymm9, %ymm5
  12275. vpshufd $0xfa, %ymm3, %ymm6
  12276. # rnd_1: 4 - 5
  12277. rorl $6, %edx
  12278. xorl %r15d, %ebx
  12279. addl %edx, %r14d
  12280. movl %r15d, %ecx
  12281. andl %ebx, %eax
  12282. rorl $9, %ecx
  12283. xorl %r15d, %ecx
  12284. xorl %r8d, %eax
  12285. vpsrld $10, %ymm6, %ymm8
  12286. vpsrlq $19, %ymm6, %ymm7
  12287. # rnd_1: 6 - 7
  12288. rorl $11, %ecx
  12289. addl %r14d, %r10d
  12290. xorl %r15d, %ecx
  12291. addl %eax, %r14d
  12292. rorl $2, %ecx
  12293. movl %r10d, %edx
  12294. addl %ecx, %r14d
  12295. # rnd_0: 0 - 0
  12296. rorl $14, %edx
  12297. vpsrlq $0x11, %ymm6, %ymm6
  12298. vpaddd %ymm0, %ymm4, %ymm4
  12299. # rnd_0: 1 - 3
  12300. movl %r15d, %eax
  12301. movl %r11d, %ecx
  12302. addl 8(%rsp), %r13d
  12303. xorl %r12d, %ecx
  12304. xorl %r10d, %edx
  12305. andl %r10d, %ecx
  12306. rorl $5, %edx
  12307. xorl %r12d, %ecx
  12308. xorl %r10d, %edx
  12309. addl %ecx, %r13d
  12310. vpxor %ymm6, %ymm7, %ymm6
  12311. vpaddd %ymm5, %ymm4, %ymm4
  12312. # rnd_0: 4 - 4
  12313. rorl $6, %edx
  12314. xorl %r14d, %eax
  12315. addl %edx, %r13d
  12316. movl %r14d, %ecx
  12317. vpxor %ymm6, %ymm8, %ymm8
  12318. # rnd_0: 5 - 5
  12319. andl %eax, %ebx
  12320. rorl $9, %ecx
  12321. xorl %r14d, %ecx
  12322. xorl %r15d, %ebx
  12323. vpshufb %ymm11, %ymm8, %ymm8
  12324. # rnd_0: 6 - 6
  12325. rorl $11, %ecx
  12326. addl %r13d, %r9d
  12327. xorl %r14d, %ecx
  12328. addl %ebx, %r13d
  12329. vpaddd %ymm8, %ymm4, %ymm4
  12330. # rnd_0: 7 - 7
  12331. rorl $2, %ecx
  12332. movl %r9d, %edx
  12333. addl %ecx, %r13d
  12334. # rnd_1: 0 - 0
  12335. rorl $14, %edx
  12336. vpshufd $0x50, %ymm4, %ymm6
  12337. # rnd_1: 1 - 1
  12338. movl %r14d, %ebx
  12339. movl %r10d, %ecx
  12340. addl 12(%rsp), %r12d
  12341. xorl %r11d, %ecx
  12342. vpsrlq $0x11, %ymm6, %ymm8
  12343. vpsrlq $19, %ymm6, %ymm7
  12344. # rnd_1: 2 - 3
  12345. xorl %r9d, %edx
  12346. andl %r9d, %ecx
  12347. rorl $5, %edx
  12348. xorl %r11d, %ecx
  12349. xorl %r9d, %edx
  12350. addl %ecx, %r12d
  12351. vpsrld $10, %ymm6, %ymm9
  12352. vpxor %ymm8, %ymm7, %ymm8
  12353. # rnd_1: 4 - 5
  12354. rorl $6, %edx
  12355. xorl %r13d, %ebx
  12356. addl %edx, %r12d
  12357. movl %r13d, %ecx
  12358. andl %ebx, %eax
  12359. rorl $9, %ecx
  12360. xorl %r13d, %ecx
  12361. xorl %r14d, %eax
  12362. vpxor %ymm9, %ymm8, %ymm9
  12363. # rnd_1: 6 - 6
  12364. rorl $11, %ecx
  12365. addl %r12d, %r8d
  12366. xorl %r13d, %ecx
  12367. addl %eax, %r12d
  12368. vpshufb %ymm12, %ymm9, %ymm9
  12369. # rnd_1: 7 - 7
  12370. rorl $2, %ecx
  12371. movl %r8d, %edx
  12372. addl %ecx, %r12d
  12373. vpaddd %ymm4, %ymm9, %ymm0
  12374. # msg_sched done: 0-3
  12375. # msg_sched: 8-11
  12376. # rnd_0: 0 - 0
  12377. rorl $14, %edx
  12378. vpalignr $4, %ymm1, %ymm2, %ymm5
  12379. vpalignr $4, %ymm3, %ymm0, %ymm4
  12380. # rnd_0: 1 - 2
  12381. movl %r13d, %eax
  12382. movl %r9d, %ecx
  12383. addl 32(%rsp), %r11d
  12384. xorl %r10d, %ecx
  12385. xorl %r8d, %edx
  12386. andl %r8d, %ecx
  12387. vpsrld $7, %ymm5, %ymm6
  12388. vpslld $25, %ymm5, %ymm7
  12389. # rnd_0: 3 - 4
  12390. rorl $5, %edx
  12391. xorl %r10d, %ecx
  12392. xorl %r8d, %edx
  12393. addl %ecx, %r11d
  12394. rorl $6, %edx
  12395. xorl %r12d, %eax
  12396. addl %edx, %r11d
  12397. movl %r12d, %ecx
  12398. vpsrld $18, %ymm5, %ymm8
  12399. vpslld $14, %ymm5, %ymm9
  12400. # rnd_0: 5 - 6
  12401. andl %eax, %ebx
  12402. rorl $9, %ecx
  12403. xorl %r12d, %ecx
  12404. xorl %r13d, %ebx
  12405. rorl $11, %ecx
  12406. addl %r11d, %r15d
  12407. xorl %r12d, %ecx
  12408. addl %ebx, %r11d
  12409. vpor %ymm6, %ymm7, %ymm6
  12410. vpor %ymm8, %ymm9, %ymm8
  12411. # rnd_0: 7 - 7
  12412. rorl $2, %ecx
  12413. movl %r15d, %edx
  12414. addl %ecx, %r11d
  12415. # rnd_1: 0 - 1
  12416. rorl $14, %edx
  12417. movl %r12d, %ebx
  12418. movl %r8d, %ecx
  12419. addl 36(%rsp), %r10d
  12420. xorl %r9d, %ecx
  12421. vpsrld $3, %ymm5, %ymm9
  12422. vpxor %ymm6, %ymm8, %ymm6
  12423. # rnd_1: 2 - 3
  12424. xorl %r15d, %edx
  12425. andl %r15d, %ecx
  12426. rorl $5, %edx
  12427. xorl %r9d, %ecx
  12428. xorl %r15d, %edx
  12429. addl %ecx, %r10d
  12430. vpxor %ymm6, %ymm9, %ymm5
  12431. vpshufd $0xfa, %ymm0, %ymm6
  12432. # rnd_1: 4 - 5
  12433. rorl $6, %edx
  12434. xorl %r11d, %ebx
  12435. addl %edx, %r10d
  12436. movl %r11d, %ecx
  12437. andl %ebx, %eax
  12438. rorl $9, %ecx
  12439. xorl %r11d, %ecx
  12440. xorl %r12d, %eax
  12441. vpsrld $10, %ymm6, %ymm8
  12442. vpsrlq $19, %ymm6, %ymm7
  12443. # rnd_1: 6 - 7
  12444. rorl $11, %ecx
  12445. addl %r10d, %r14d
  12446. xorl %r11d, %ecx
  12447. addl %eax, %r10d
  12448. rorl $2, %ecx
  12449. movl %r14d, %edx
  12450. addl %ecx, %r10d
  12451. # rnd_0: 0 - 0
  12452. rorl $14, %edx
  12453. vpsrlq $0x11, %ymm6, %ymm6
  12454. vpaddd %ymm1, %ymm4, %ymm4
  12455. # rnd_0: 1 - 3
  12456. movl %r11d, %eax
  12457. movl %r15d, %ecx
  12458. addl 40(%rsp), %r9d
  12459. xorl %r8d, %ecx
  12460. xorl %r14d, %edx
  12461. andl %r14d, %ecx
  12462. rorl $5, %edx
  12463. xorl %r8d, %ecx
  12464. xorl %r14d, %edx
  12465. addl %ecx, %r9d
  12466. vpxor %ymm6, %ymm7, %ymm6
  12467. vpaddd %ymm5, %ymm4, %ymm4
  12468. # rnd_0: 4 - 4
  12469. rorl $6, %edx
  12470. xorl %r10d, %eax
  12471. addl %edx, %r9d
  12472. movl %r10d, %ecx
  12473. vpxor %ymm6, %ymm8, %ymm8
  12474. # rnd_0: 5 - 5
  12475. andl %eax, %ebx
  12476. rorl $9, %ecx
  12477. xorl %r10d, %ecx
  12478. xorl %r11d, %ebx
  12479. vpshufb %ymm11, %ymm8, %ymm8
  12480. # rnd_0: 6 - 6
  12481. rorl $11, %ecx
  12482. addl %r9d, %r13d
  12483. xorl %r10d, %ecx
  12484. addl %ebx, %r9d
  12485. vpaddd %ymm8, %ymm4, %ymm4
  12486. # rnd_0: 7 - 7
  12487. rorl $2, %ecx
  12488. movl %r13d, %edx
  12489. addl %ecx, %r9d
  12490. # rnd_1: 0 - 0
  12491. rorl $14, %edx
  12492. vpshufd $0x50, %ymm4, %ymm6
  12493. # rnd_1: 1 - 1
  12494. movl %r10d, %ebx
  12495. movl %r14d, %ecx
  12496. addl 44(%rsp), %r8d
  12497. xorl %r15d, %ecx
  12498. vpsrlq $0x11, %ymm6, %ymm8
  12499. vpsrlq $19, %ymm6, %ymm7
  12500. # rnd_1: 2 - 3
  12501. xorl %r13d, %edx
  12502. andl %r13d, %ecx
  12503. rorl $5, %edx
  12504. xorl %r15d, %ecx
  12505. xorl %r13d, %edx
  12506. addl %ecx, %r8d
  12507. vpsrld $10, %ymm6, %ymm9
  12508. vpxor %ymm8, %ymm7, %ymm8
  12509. # rnd_1: 4 - 5
  12510. rorl $6, %edx
  12511. xorl %r9d, %ebx
  12512. addl %edx, %r8d
  12513. movl %r9d, %ecx
  12514. andl %ebx, %eax
  12515. rorl $9, %ecx
  12516. xorl %r9d, %ecx
  12517. xorl %r10d, %eax
  12518. vpxor %ymm9, %ymm8, %ymm9
  12519. # rnd_1: 6 - 6
  12520. rorl $11, %ecx
  12521. addl %r8d, %r12d
  12522. xorl %r9d, %ecx
  12523. addl %eax, %r8d
  12524. vpshufb %ymm12, %ymm9, %ymm9
  12525. # rnd_1: 7 - 7
  12526. rorl $2, %ecx
  12527. movl %r12d, %edx
  12528. addl %ecx, %r8d
  12529. vpaddd %ymm4, %ymm9, %ymm1
  12530. # msg_sched done: 8-11
  12531. # msg_sched: 16-19
  12532. # rnd_0: 0 - 0
  12533. rorl $14, %edx
  12534. vpalignr $4, %ymm2, %ymm3, %ymm5
  12535. vpalignr $4, %ymm0, %ymm1, %ymm4
  12536. # rnd_0: 1 - 2
  12537. movl %r9d, %eax
  12538. movl %r13d, %ecx
  12539. addl 64(%rsp), %r15d
  12540. xorl %r14d, %ecx
  12541. xorl %r12d, %edx
  12542. andl %r12d, %ecx
  12543. vpsrld $7, %ymm5, %ymm6
  12544. vpslld $25, %ymm5, %ymm7
  12545. # rnd_0: 3 - 4
  12546. rorl $5, %edx
  12547. xorl %r14d, %ecx
  12548. xorl %r12d, %edx
  12549. addl %ecx, %r15d
  12550. rorl $6, %edx
  12551. xorl %r8d, %eax
  12552. addl %edx, %r15d
  12553. movl %r8d, %ecx
  12554. vpsrld $18, %ymm5, %ymm8
  12555. vpslld $14, %ymm5, %ymm9
  12556. # rnd_0: 5 - 6
  12557. andl %eax, %ebx
  12558. rorl $9, %ecx
  12559. xorl %r8d, %ecx
  12560. xorl %r9d, %ebx
  12561. rorl $11, %ecx
  12562. addl %r15d, %r11d
  12563. xorl %r8d, %ecx
  12564. addl %ebx, %r15d
  12565. vpor %ymm6, %ymm7, %ymm6
  12566. vpor %ymm8, %ymm9, %ymm8
  12567. # rnd_0: 7 - 7
  12568. rorl $2, %ecx
  12569. movl %r11d, %edx
  12570. addl %ecx, %r15d
  12571. # rnd_1: 0 - 1
  12572. rorl $14, %edx
  12573. movl %r8d, %ebx
  12574. movl %r12d, %ecx
  12575. addl 68(%rsp), %r14d
  12576. xorl %r13d, %ecx
  12577. vpsrld $3, %ymm5, %ymm9
  12578. vpxor %ymm6, %ymm8, %ymm6
  12579. # rnd_1: 2 - 3
  12580. xorl %r11d, %edx
  12581. andl %r11d, %ecx
  12582. rorl $5, %edx
  12583. xorl %r13d, %ecx
  12584. xorl %r11d, %edx
  12585. addl %ecx, %r14d
  12586. vpxor %ymm6, %ymm9, %ymm5
  12587. vpshufd $0xfa, %ymm1, %ymm6
  12588. # rnd_1: 4 - 5
  12589. rorl $6, %edx
  12590. xorl %r15d, %ebx
  12591. addl %edx, %r14d
  12592. movl %r15d, %ecx
  12593. andl %ebx, %eax
  12594. rorl $9, %ecx
  12595. xorl %r15d, %ecx
  12596. xorl %r8d, %eax
  12597. vpsrld $10, %ymm6, %ymm8
  12598. vpsrlq $19, %ymm6, %ymm7
  12599. # rnd_1: 6 - 7
  12600. rorl $11, %ecx
  12601. addl %r14d, %r10d
  12602. xorl %r15d, %ecx
  12603. addl %eax, %r14d
  12604. rorl $2, %ecx
  12605. movl %r10d, %edx
  12606. addl %ecx, %r14d
  12607. # rnd_0: 0 - 0
  12608. rorl $14, %edx
  12609. vpsrlq $0x11, %ymm6, %ymm6
  12610. vpaddd %ymm2, %ymm4, %ymm4
  12611. # rnd_0: 1 - 3
  12612. movl %r15d, %eax
  12613. movl %r11d, %ecx
  12614. addl 72(%rsp), %r13d
  12615. xorl %r12d, %ecx
  12616. xorl %r10d, %edx
  12617. andl %r10d, %ecx
  12618. rorl $5, %edx
  12619. xorl %r12d, %ecx
  12620. xorl %r10d, %edx
  12621. addl %ecx, %r13d
  12622. vpxor %ymm6, %ymm7, %ymm6
  12623. vpaddd %ymm5, %ymm4, %ymm4
  12624. # rnd_0: 4 - 4
  12625. rorl $6, %edx
  12626. xorl %r14d, %eax
  12627. addl %edx, %r13d
  12628. movl %r14d, %ecx
  12629. vpxor %ymm6, %ymm8, %ymm8
  12630. # rnd_0: 5 - 5
  12631. andl %eax, %ebx
  12632. rorl $9, %ecx
  12633. xorl %r14d, %ecx
  12634. xorl %r15d, %ebx
  12635. vpshufb %ymm11, %ymm8, %ymm8
  12636. # rnd_0: 6 - 6
  12637. rorl $11, %ecx
  12638. addl %r13d, %r9d
  12639. xorl %r14d, %ecx
  12640. addl %ebx, %r13d
  12641. vpaddd %ymm8, %ymm4, %ymm4
  12642. # rnd_0: 7 - 7
  12643. rorl $2, %ecx
  12644. movl %r9d, %edx
  12645. addl %ecx, %r13d
  12646. # rnd_1: 0 - 0
  12647. rorl $14, %edx
  12648. vpshufd $0x50, %ymm4, %ymm6
  12649. # rnd_1: 1 - 1
  12650. movl %r14d, %ebx
  12651. movl %r10d, %ecx
  12652. addl 76(%rsp), %r12d
  12653. xorl %r11d, %ecx
  12654. vpsrlq $0x11, %ymm6, %ymm8
  12655. vpsrlq $19, %ymm6, %ymm7
  12656. # rnd_1: 2 - 3
  12657. xorl %r9d, %edx
  12658. andl %r9d, %ecx
  12659. rorl $5, %edx
  12660. xorl %r11d, %ecx
  12661. xorl %r9d, %edx
  12662. addl %ecx, %r12d
  12663. vpsrld $10, %ymm6, %ymm9
  12664. vpxor %ymm8, %ymm7, %ymm8
  12665. # rnd_1: 4 - 5
  12666. rorl $6, %edx
  12667. xorl %r13d, %ebx
  12668. addl %edx, %r12d
  12669. movl %r13d, %ecx
  12670. andl %ebx, %eax
  12671. rorl $9, %ecx
  12672. xorl %r13d, %ecx
  12673. xorl %r14d, %eax
  12674. vpxor %ymm9, %ymm8, %ymm9
  12675. # rnd_1: 6 - 6
  12676. rorl $11, %ecx
  12677. addl %r12d, %r8d
  12678. xorl %r13d, %ecx
  12679. addl %eax, %r12d
  12680. vpshufb %ymm12, %ymm9, %ymm9
  12681. # rnd_1: 7 - 7
  12682. rorl $2, %ecx
  12683. movl %r8d, %edx
  12684. addl %ecx, %r12d
  12685. vpaddd %ymm4, %ymm9, %ymm2
  12686. # msg_sched done: 16-19
  12687. # msg_sched: 24-27
  12688. # rnd_0: 0 - 0
  12689. rorl $14, %edx
  12690. vpalignr $4, %ymm3, %ymm0, %ymm5
  12691. vpalignr $4, %ymm1, %ymm2, %ymm4
  12692. # rnd_0: 1 - 2
  12693. movl %r13d, %eax
  12694. movl %r9d, %ecx
  12695. addl 96(%rsp), %r11d
  12696. xorl %r10d, %ecx
  12697. xorl %r8d, %edx
  12698. andl %r8d, %ecx
  12699. vpsrld $7, %ymm5, %ymm6
  12700. vpslld $25, %ymm5, %ymm7
  12701. # rnd_0: 3 - 4
  12702. rorl $5, %edx
  12703. xorl %r10d, %ecx
  12704. xorl %r8d, %edx
  12705. addl %ecx, %r11d
  12706. rorl $6, %edx
  12707. xorl %r12d, %eax
  12708. addl %edx, %r11d
  12709. movl %r12d, %ecx
  12710. vpsrld $18, %ymm5, %ymm8
  12711. vpslld $14, %ymm5, %ymm9
  12712. # rnd_0: 5 - 6
  12713. andl %eax, %ebx
  12714. rorl $9, %ecx
  12715. xorl %r12d, %ecx
  12716. xorl %r13d, %ebx
  12717. rorl $11, %ecx
  12718. addl %r11d, %r15d
  12719. xorl %r12d, %ecx
  12720. addl %ebx, %r11d
  12721. vpor %ymm6, %ymm7, %ymm6
  12722. vpor %ymm8, %ymm9, %ymm8
  12723. # rnd_0: 7 - 7
  12724. rorl $2, %ecx
  12725. movl %r15d, %edx
  12726. addl %ecx, %r11d
  12727. # rnd_1: 0 - 1
  12728. rorl $14, %edx
  12729. movl %r12d, %ebx
  12730. movl %r8d, %ecx
  12731. addl 100(%rsp), %r10d
  12732. xorl %r9d, %ecx
  12733. vpsrld $3, %ymm5, %ymm9
  12734. vpxor %ymm6, %ymm8, %ymm6
  12735. # rnd_1: 2 - 3
  12736. xorl %r15d, %edx
  12737. andl %r15d, %ecx
  12738. rorl $5, %edx
  12739. xorl %r9d, %ecx
  12740. xorl %r15d, %edx
  12741. addl %ecx, %r10d
  12742. vpxor %ymm6, %ymm9, %ymm5
  12743. vpshufd $0xfa, %ymm2, %ymm6
  12744. # rnd_1: 4 - 5
  12745. rorl $6, %edx
  12746. xorl %r11d, %ebx
  12747. addl %edx, %r10d
  12748. movl %r11d, %ecx
  12749. andl %ebx, %eax
  12750. rorl $9, %ecx
  12751. xorl %r11d, %ecx
  12752. xorl %r12d, %eax
  12753. vpsrld $10, %ymm6, %ymm8
  12754. vpsrlq $19, %ymm6, %ymm7
  12755. # rnd_1: 6 - 7
  12756. rorl $11, %ecx
  12757. addl %r10d, %r14d
  12758. xorl %r11d, %ecx
  12759. addl %eax, %r10d
  12760. rorl $2, %ecx
  12761. movl %r14d, %edx
  12762. addl %ecx, %r10d
  12763. # rnd_0: 0 - 0
  12764. rorl $14, %edx
  12765. vpsrlq $0x11, %ymm6, %ymm6
  12766. vpaddd %ymm3, %ymm4, %ymm4
  12767. # rnd_0: 1 - 3
  12768. movl %r11d, %eax
  12769. movl %r15d, %ecx
  12770. addl 104(%rsp), %r9d
  12771. xorl %r8d, %ecx
  12772. xorl %r14d, %edx
  12773. andl %r14d, %ecx
  12774. rorl $5, %edx
  12775. xorl %r8d, %ecx
  12776. xorl %r14d, %edx
  12777. addl %ecx, %r9d
  12778. vpxor %ymm6, %ymm7, %ymm6
  12779. vpaddd %ymm5, %ymm4, %ymm4
  12780. # rnd_0: 4 - 4
  12781. rorl $6, %edx
  12782. xorl %r10d, %eax
  12783. addl %edx, %r9d
  12784. movl %r10d, %ecx
  12785. vpxor %ymm6, %ymm8, %ymm8
  12786. # rnd_0: 5 - 5
  12787. andl %eax, %ebx
  12788. rorl $9, %ecx
  12789. xorl %r10d, %ecx
  12790. xorl %r11d, %ebx
  12791. vpshufb %ymm11, %ymm8, %ymm8
  12792. # rnd_0: 6 - 6
  12793. rorl $11, %ecx
  12794. addl %r9d, %r13d
  12795. xorl %r10d, %ecx
  12796. addl %ebx, %r9d
  12797. vpaddd %ymm8, %ymm4, %ymm4
  12798. # rnd_0: 7 - 7
  12799. rorl $2, %ecx
  12800. movl %r13d, %edx
  12801. addl %ecx, %r9d
  12802. # rnd_1: 0 - 0
  12803. rorl $14, %edx
  12804. vpshufd $0x50, %ymm4, %ymm6
  12805. # rnd_1: 1 - 1
  12806. movl %r10d, %ebx
  12807. movl %r14d, %ecx
  12808. addl 108(%rsp), %r8d
  12809. xorl %r15d, %ecx
  12810. vpsrlq $0x11, %ymm6, %ymm8
  12811. vpsrlq $19, %ymm6, %ymm7
  12812. # rnd_1: 2 - 3
  12813. xorl %r13d, %edx
  12814. andl %r13d, %ecx
  12815. rorl $5, %edx
  12816. xorl %r15d, %ecx
  12817. xorl %r13d, %edx
  12818. addl %ecx, %r8d
  12819. vpsrld $10, %ymm6, %ymm9
  12820. vpxor %ymm8, %ymm7, %ymm8
  12821. # rnd_1: 4 - 5
  12822. rorl $6, %edx
  12823. xorl %r9d, %ebx
  12824. addl %edx, %r8d
  12825. movl %r9d, %ecx
  12826. andl %ebx, %eax
  12827. rorl $9, %ecx
  12828. xorl %r9d, %ecx
  12829. xorl %r10d, %eax
  12830. vpxor %ymm9, %ymm8, %ymm9
  12831. # rnd_1: 6 - 6
  12832. rorl $11, %ecx
  12833. addl %r8d, %r12d
  12834. xorl %r9d, %ecx
  12835. addl %eax, %r8d
  12836. vpshufb %ymm12, %ymm9, %ymm9
  12837. # rnd_1: 7 - 7
  12838. rorl $2, %ecx
  12839. movl %r12d, %edx
  12840. addl %ecx, %r8d
  12841. vpaddd %ymm4, %ymm9, %ymm3
  12842. # msg_sched done: 24-27
  12843. # set_w_k_xfer_4: 4
  12844. vpaddd 128+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  12845. vpaddd 160+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  12846. vmovdqu %ymm4, 128(%rsp)
  12847. vmovdqu %ymm5, 160(%rsp)
  12848. vpaddd 192+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  12849. vpaddd 224+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  12850. vmovdqu %ymm4, 192(%rsp)
  12851. vmovdqu %ymm5, 224(%rsp)
  12852. # msg_sched: 32-35
  12853. # rnd_0: 0 - 0
  12854. rorl $14, %edx
  12855. vpalignr $4, %ymm0, %ymm1, %ymm5
  12856. vpalignr $4, %ymm2, %ymm3, %ymm4
  12857. # rnd_0: 1 - 2
  12858. movl %r9d, %eax
  12859. movl %r13d, %ecx
  12860. addl 128(%rsp), %r15d
  12861. xorl %r14d, %ecx
  12862. xorl %r12d, %edx
  12863. andl %r12d, %ecx
  12864. vpsrld $7, %ymm5, %ymm6
  12865. vpslld $25, %ymm5, %ymm7
  12866. # rnd_0: 3 - 4
  12867. rorl $5, %edx
  12868. xorl %r14d, %ecx
  12869. xorl %r12d, %edx
  12870. addl %ecx, %r15d
  12871. rorl $6, %edx
  12872. xorl %r8d, %eax
  12873. addl %edx, %r15d
  12874. movl %r8d, %ecx
  12875. vpsrld $18, %ymm5, %ymm8
  12876. vpslld $14, %ymm5, %ymm9
  12877. # rnd_0: 5 - 6
  12878. andl %eax, %ebx
  12879. rorl $9, %ecx
  12880. xorl %r8d, %ecx
  12881. xorl %r9d, %ebx
  12882. rorl $11, %ecx
  12883. addl %r15d, %r11d
  12884. xorl %r8d, %ecx
  12885. addl %ebx, %r15d
  12886. vpor %ymm6, %ymm7, %ymm6
  12887. vpor %ymm8, %ymm9, %ymm8
  12888. # rnd_0: 7 - 7
  12889. rorl $2, %ecx
  12890. movl %r11d, %edx
  12891. addl %ecx, %r15d
  12892. # rnd_1: 0 - 1
  12893. rorl $14, %edx
  12894. movl %r8d, %ebx
  12895. movl %r12d, %ecx
  12896. addl 132(%rsp), %r14d
  12897. xorl %r13d, %ecx
  12898. vpsrld $3, %ymm5, %ymm9
  12899. vpxor %ymm6, %ymm8, %ymm6
  12900. # rnd_1: 2 - 3
  12901. xorl %r11d, %edx
  12902. andl %r11d, %ecx
  12903. rorl $5, %edx
  12904. xorl %r13d, %ecx
  12905. xorl %r11d, %edx
  12906. addl %ecx, %r14d
  12907. vpxor %ymm6, %ymm9, %ymm5
  12908. vpshufd $0xfa, %ymm3, %ymm6
  12909. # rnd_1: 4 - 5
  12910. rorl $6, %edx
  12911. xorl %r15d, %ebx
  12912. addl %edx, %r14d
  12913. movl %r15d, %ecx
  12914. andl %ebx, %eax
  12915. rorl $9, %ecx
  12916. xorl %r15d, %ecx
  12917. xorl %r8d, %eax
  12918. vpsrld $10, %ymm6, %ymm8
  12919. vpsrlq $19, %ymm6, %ymm7
  12920. # rnd_1: 6 - 7
  12921. rorl $11, %ecx
  12922. addl %r14d, %r10d
  12923. xorl %r15d, %ecx
  12924. addl %eax, %r14d
  12925. rorl $2, %ecx
  12926. movl %r10d, %edx
  12927. addl %ecx, %r14d
  12928. # rnd_0: 0 - 0
  12929. rorl $14, %edx
  12930. vpsrlq $0x11, %ymm6, %ymm6
  12931. vpaddd %ymm0, %ymm4, %ymm4
  12932. # rnd_0: 1 - 3
  12933. movl %r15d, %eax
  12934. movl %r11d, %ecx
  12935. addl 136(%rsp), %r13d
  12936. xorl %r12d, %ecx
  12937. xorl %r10d, %edx
  12938. andl %r10d, %ecx
  12939. rorl $5, %edx
  12940. xorl %r12d, %ecx
  12941. xorl %r10d, %edx
  12942. addl %ecx, %r13d
  12943. vpxor %ymm6, %ymm7, %ymm6
  12944. vpaddd %ymm5, %ymm4, %ymm4
  12945. # rnd_0: 4 - 4
  12946. rorl $6, %edx
  12947. xorl %r14d, %eax
  12948. addl %edx, %r13d
  12949. movl %r14d, %ecx
  12950. vpxor %ymm6, %ymm8, %ymm8
  12951. # rnd_0: 5 - 5
  12952. andl %eax, %ebx
  12953. rorl $9, %ecx
  12954. xorl %r14d, %ecx
  12955. xorl %r15d, %ebx
  12956. vpshufb %ymm11, %ymm8, %ymm8
  12957. # rnd_0: 6 - 6
  12958. rorl $11, %ecx
  12959. addl %r13d, %r9d
  12960. xorl %r14d, %ecx
  12961. addl %ebx, %r13d
  12962. vpaddd %ymm8, %ymm4, %ymm4
  12963. # rnd_0: 7 - 7
  12964. rorl $2, %ecx
  12965. movl %r9d, %edx
  12966. addl %ecx, %r13d
  12967. # rnd_1: 0 - 0
  12968. rorl $14, %edx
  12969. vpshufd $0x50, %ymm4, %ymm6
  12970. # rnd_1: 1 - 1
  12971. movl %r14d, %ebx
  12972. movl %r10d, %ecx
  12973. addl 140(%rsp), %r12d
  12974. xorl %r11d, %ecx
  12975. vpsrlq $0x11, %ymm6, %ymm8
  12976. vpsrlq $19, %ymm6, %ymm7
  12977. # rnd_1: 2 - 3
  12978. xorl %r9d, %edx
  12979. andl %r9d, %ecx
  12980. rorl $5, %edx
  12981. xorl %r11d, %ecx
  12982. xorl %r9d, %edx
  12983. addl %ecx, %r12d
  12984. vpsrld $10, %ymm6, %ymm9
  12985. vpxor %ymm8, %ymm7, %ymm8
  12986. # rnd_1: 4 - 5
  12987. rorl $6, %edx
  12988. xorl %r13d, %ebx
  12989. addl %edx, %r12d
  12990. movl %r13d, %ecx
  12991. andl %ebx, %eax
  12992. rorl $9, %ecx
  12993. xorl %r13d, %ecx
  12994. xorl %r14d, %eax
  12995. vpxor %ymm9, %ymm8, %ymm9
  12996. # rnd_1: 6 - 6
  12997. rorl $11, %ecx
  12998. addl %r12d, %r8d
  12999. xorl %r13d, %ecx
  13000. addl %eax, %r12d
  13001. vpshufb %ymm12, %ymm9, %ymm9
  13002. # rnd_1: 7 - 7
  13003. rorl $2, %ecx
  13004. movl %r8d, %edx
  13005. addl %ecx, %r12d
  13006. vpaddd %ymm4, %ymm9, %ymm0
  13007. # msg_sched done: 32-35
  13008. # msg_sched: 40-43
  13009. # rnd_0: 0 - 0
  13010. rorl $14, %edx
  13011. vpalignr $4, %ymm1, %ymm2, %ymm5
  13012. vpalignr $4, %ymm3, %ymm0, %ymm4
  13013. # rnd_0: 1 - 2
  13014. movl %r13d, %eax
  13015. movl %r9d, %ecx
  13016. addl 160(%rsp), %r11d
  13017. xorl %r10d, %ecx
  13018. xorl %r8d, %edx
  13019. andl %r8d, %ecx
  13020. vpsrld $7, %ymm5, %ymm6
  13021. vpslld $25, %ymm5, %ymm7
  13022. # rnd_0: 3 - 4
  13023. rorl $5, %edx
  13024. xorl %r10d, %ecx
  13025. xorl %r8d, %edx
  13026. addl %ecx, %r11d
  13027. rorl $6, %edx
  13028. xorl %r12d, %eax
  13029. addl %edx, %r11d
  13030. movl %r12d, %ecx
  13031. vpsrld $18, %ymm5, %ymm8
  13032. vpslld $14, %ymm5, %ymm9
  13033. # rnd_0: 5 - 6
  13034. andl %eax, %ebx
  13035. rorl $9, %ecx
  13036. xorl %r12d, %ecx
  13037. xorl %r13d, %ebx
  13038. rorl $11, %ecx
  13039. addl %r11d, %r15d
  13040. xorl %r12d, %ecx
  13041. addl %ebx, %r11d
  13042. vpor %ymm6, %ymm7, %ymm6
  13043. vpor %ymm8, %ymm9, %ymm8
  13044. # rnd_0: 7 - 7
  13045. rorl $2, %ecx
  13046. movl %r15d, %edx
  13047. addl %ecx, %r11d
  13048. # rnd_1: 0 - 1
  13049. rorl $14, %edx
  13050. movl %r12d, %ebx
  13051. movl %r8d, %ecx
  13052. addl 164(%rsp), %r10d
  13053. xorl %r9d, %ecx
  13054. vpsrld $3, %ymm5, %ymm9
  13055. vpxor %ymm6, %ymm8, %ymm6
  13056. # rnd_1: 2 - 3
  13057. xorl %r15d, %edx
  13058. andl %r15d, %ecx
  13059. rorl $5, %edx
  13060. xorl %r9d, %ecx
  13061. xorl %r15d, %edx
  13062. addl %ecx, %r10d
  13063. vpxor %ymm6, %ymm9, %ymm5
  13064. vpshufd $0xfa, %ymm0, %ymm6
  13065. # rnd_1: 4 - 5
  13066. rorl $6, %edx
  13067. xorl %r11d, %ebx
  13068. addl %edx, %r10d
  13069. movl %r11d, %ecx
  13070. andl %ebx, %eax
  13071. rorl $9, %ecx
  13072. xorl %r11d, %ecx
  13073. xorl %r12d, %eax
  13074. vpsrld $10, %ymm6, %ymm8
  13075. vpsrlq $19, %ymm6, %ymm7
  13076. # rnd_1: 6 - 7
  13077. rorl $11, %ecx
  13078. addl %r10d, %r14d
  13079. xorl %r11d, %ecx
  13080. addl %eax, %r10d
  13081. rorl $2, %ecx
  13082. movl %r14d, %edx
  13083. addl %ecx, %r10d
  13084. # rnd_0: 0 - 0
  13085. rorl $14, %edx
  13086. vpsrlq $0x11, %ymm6, %ymm6
  13087. vpaddd %ymm1, %ymm4, %ymm4
  13088. # rnd_0: 1 - 3
  13089. movl %r11d, %eax
  13090. movl %r15d, %ecx
  13091. addl 168(%rsp), %r9d
  13092. xorl %r8d, %ecx
  13093. xorl %r14d, %edx
  13094. andl %r14d, %ecx
  13095. rorl $5, %edx
  13096. xorl %r8d, %ecx
  13097. xorl %r14d, %edx
  13098. addl %ecx, %r9d
  13099. vpxor %ymm6, %ymm7, %ymm6
  13100. vpaddd %ymm5, %ymm4, %ymm4
  13101. # rnd_0: 4 - 4
  13102. rorl $6, %edx
  13103. xorl %r10d, %eax
  13104. addl %edx, %r9d
  13105. movl %r10d, %ecx
  13106. vpxor %ymm6, %ymm8, %ymm8
  13107. # rnd_0: 5 - 5
  13108. andl %eax, %ebx
  13109. rorl $9, %ecx
  13110. xorl %r10d, %ecx
  13111. xorl %r11d, %ebx
  13112. vpshufb %ymm11, %ymm8, %ymm8
  13113. # rnd_0: 6 - 6
  13114. rorl $11, %ecx
  13115. addl %r9d, %r13d
  13116. xorl %r10d, %ecx
  13117. addl %ebx, %r9d
  13118. vpaddd %ymm8, %ymm4, %ymm4
  13119. # rnd_0: 7 - 7
  13120. rorl $2, %ecx
  13121. movl %r13d, %edx
  13122. addl %ecx, %r9d
  13123. # rnd_1: 0 - 0
  13124. rorl $14, %edx
  13125. vpshufd $0x50, %ymm4, %ymm6
  13126. # rnd_1: 1 - 1
  13127. movl %r10d, %ebx
  13128. movl %r14d, %ecx
  13129. addl 172(%rsp), %r8d
  13130. xorl %r15d, %ecx
  13131. vpsrlq $0x11, %ymm6, %ymm8
  13132. vpsrlq $19, %ymm6, %ymm7
  13133. # rnd_1: 2 - 3
  13134. xorl %r13d, %edx
  13135. andl %r13d, %ecx
  13136. rorl $5, %edx
  13137. xorl %r15d, %ecx
  13138. xorl %r13d, %edx
  13139. addl %ecx, %r8d
  13140. vpsrld $10, %ymm6, %ymm9
  13141. vpxor %ymm8, %ymm7, %ymm8
  13142. # rnd_1: 4 - 5
  13143. rorl $6, %edx
  13144. xorl %r9d, %ebx
  13145. addl %edx, %r8d
  13146. movl %r9d, %ecx
  13147. andl %ebx, %eax
  13148. rorl $9, %ecx
  13149. xorl %r9d, %ecx
  13150. xorl %r10d, %eax
  13151. vpxor %ymm9, %ymm8, %ymm9
  13152. # rnd_1: 6 - 6
  13153. rorl $11, %ecx
  13154. addl %r8d, %r12d
  13155. xorl %r9d, %ecx
  13156. addl %eax, %r8d
  13157. vpshufb %ymm12, %ymm9, %ymm9
  13158. # rnd_1: 7 - 7
  13159. rorl $2, %ecx
  13160. movl %r12d, %edx
  13161. addl %ecx, %r8d
  13162. vpaddd %ymm4, %ymm9, %ymm1
  13163. # msg_sched done: 40-43
  13164. # msg_sched: 48-51
  13165. # rnd_0: 0 - 0
  13166. rorl $14, %edx
  13167. vpalignr $4, %ymm2, %ymm3, %ymm5
  13168. vpalignr $4, %ymm0, %ymm1, %ymm4
  13169. # rnd_0: 1 - 2
  13170. movl %r9d, %eax
  13171. movl %r13d, %ecx
  13172. addl 192(%rsp), %r15d
  13173. xorl %r14d, %ecx
  13174. xorl %r12d, %edx
  13175. andl %r12d, %ecx
  13176. vpsrld $7, %ymm5, %ymm6
  13177. vpslld $25, %ymm5, %ymm7
  13178. # rnd_0: 3 - 4
  13179. rorl $5, %edx
  13180. xorl %r14d, %ecx
  13181. xorl %r12d, %edx
  13182. addl %ecx, %r15d
  13183. rorl $6, %edx
  13184. xorl %r8d, %eax
  13185. addl %edx, %r15d
  13186. movl %r8d, %ecx
  13187. vpsrld $18, %ymm5, %ymm8
  13188. vpslld $14, %ymm5, %ymm9
  13189. # rnd_0: 5 - 6
  13190. andl %eax, %ebx
  13191. rorl $9, %ecx
  13192. xorl %r8d, %ecx
  13193. xorl %r9d, %ebx
  13194. rorl $11, %ecx
  13195. addl %r15d, %r11d
  13196. xorl %r8d, %ecx
  13197. addl %ebx, %r15d
  13198. vpor %ymm6, %ymm7, %ymm6
  13199. vpor %ymm8, %ymm9, %ymm8
  13200. # rnd_0: 7 - 7
  13201. rorl $2, %ecx
  13202. movl %r11d, %edx
  13203. addl %ecx, %r15d
  13204. # rnd_1: 0 - 1
  13205. rorl $14, %edx
  13206. movl %r8d, %ebx
  13207. movl %r12d, %ecx
  13208. addl 196(%rsp), %r14d
  13209. xorl %r13d, %ecx
  13210. vpsrld $3, %ymm5, %ymm9
  13211. vpxor %ymm6, %ymm8, %ymm6
  13212. # rnd_1: 2 - 3
  13213. xorl %r11d, %edx
  13214. andl %r11d, %ecx
  13215. rorl $5, %edx
  13216. xorl %r13d, %ecx
  13217. xorl %r11d, %edx
  13218. addl %ecx, %r14d
  13219. vpxor %ymm6, %ymm9, %ymm5
  13220. vpshufd $0xfa, %ymm1, %ymm6
  13221. # rnd_1: 4 - 5
  13222. rorl $6, %edx
  13223. xorl %r15d, %ebx
  13224. addl %edx, %r14d
  13225. movl %r15d, %ecx
  13226. andl %ebx, %eax
  13227. rorl $9, %ecx
  13228. xorl %r15d, %ecx
  13229. xorl %r8d, %eax
  13230. vpsrld $10, %ymm6, %ymm8
  13231. vpsrlq $19, %ymm6, %ymm7
  13232. # rnd_1: 6 - 7
  13233. rorl $11, %ecx
  13234. addl %r14d, %r10d
  13235. xorl %r15d, %ecx
  13236. addl %eax, %r14d
  13237. rorl $2, %ecx
  13238. movl %r10d, %edx
  13239. addl %ecx, %r14d
  13240. # rnd_0: 0 - 0
  13241. rorl $14, %edx
  13242. vpsrlq $0x11, %ymm6, %ymm6
  13243. vpaddd %ymm2, %ymm4, %ymm4
  13244. # rnd_0: 1 - 3
  13245. movl %r15d, %eax
  13246. movl %r11d, %ecx
  13247. addl 200(%rsp), %r13d
  13248. xorl %r12d, %ecx
  13249. xorl %r10d, %edx
  13250. andl %r10d, %ecx
  13251. rorl $5, %edx
  13252. xorl %r12d, %ecx
  13253. xorl %r10d, %edx
  13254. addl %ecx, %r13d
  13255. vpxor %ymm6, %ymm7, %ymm6
  13256. vpaddd %ymm5, %ymm4, %ymm4
  13257. # rnd_0: 4 - 4
  13258. rorl $6, %edx
  13259. xorl %r14d, %eax
  13260. addl %edx, %r13d
  13261. movl %r14d, %ecx
  13262. vpxor %ymm6, %ymm8, %ymm8
  13263. # rnd_0: 5 - 5
  13264. andl %eax, %ebx
  13265. rorl $9, %ecx
  13266. xorl %r14d, %ecx
  13267. xorl %r15d, %ebx
  13268. vpshufb %ymm11, %ymm8, %ymm8
  13269. # rnd_0: 6 - 6
  13270. rorl $11, %ecx
  13271. addl %r13d, %r9d
  13272. xorl %r14d, %ecx
  13273. addl %ebx, %r13d
  13274. vpaddd %ymm8, %ymm4, %ymm4
  13275. # rnd_0: 7 - 7
  13276. rorl $2, %ecx
  13277. movl %r9d, %edx
  13278. addl %ecx, %r13d
  13279. # rnd_1: 0 - 0
  13280. rorl $14, %edx
  13281. vpshufd $0x50, %ymm4, %ymm6
  13282. # rnd_1: 1 - 1
  13283. movl %r14d, %ebx
  13284. movl %r10d, %ecx
  13285. addl 204(%rsp), %r12d
  13286. xorl %r11d, %ecx
  13287. vpsrlq $0x11, %ymm6, %ymm8
  13288. vpsrlq $19, %ymm6, %ymm7
  13289. # rnd_1: 2 - 3
  13290. xorl %r9d, %edx
  13291. andl %r9d, %ecx
  13292. rorl $5, %edx
  13293. xorl %r11d, %ecx
  13294. xorl %r9d, %edx
  13295. addl %ecx, %r12d
  13296. vpsrld $10, %ymm6, %ymm9
  13297. vpxor %ymm8, %ymm7, %ymm8
  13298. # rnd_1: 4 - 5
  13299. rorl $6, %edx
  13300. xorl %r13d, %ebx
  13301. addl %edx, %r12d
  13302. movl %r13d, %ecx
  13303. andl %ebx, %eax
  13304. rorl $9, %ecx
  13305. xorl %r13d, %ecx
  13306. xorl %r14d, %eax
  13307. vpxor %ymm9, %ymm8, %ymm9
  13308. # rnd_1: 6 - 6
  13309. rorl $11, %ecx
  13310. addl %r12d, %r8d
  13311. xorl %r13d, %ecx
  13312. addl %eax, %r12d
  13313. vpshufb %ymm12, %ymm9, %ymm9
  13314. # rnd_1: 7 - 7
  13315. rorl $2, %ecx
  13316. movl %r8d, %edx
  13317. addl %ecx, %r12d
  13318. vpaddd %ymm4, %ymm9, %ymm2
  13319. # msg_sched done: 48-51
  13320. # msg_sched: 56-59
  13321. # rnd_0: 0 - 0
  13322. rorl $14, %edx
  13323. vpalignr $4, %ymm3, %ymm0, %ymm5
  13324. vpalignr $4, %ymm1, %ymm2, %ymm4
  13325. # rnd_0: 1 - 2
  13326. movl %r13d, %eax
  13327. movl %r9d, %ecx
  13328. addl 224(%rsp), %r11d
  13329. xorl %r10d, %ecx
  13330. xorl %r8d, %edx
  13331. andl %r8d, %ecx
  13332. vpsrld $7, %ymm5, %ymm6
  13333. vpslld $25, %ymm5, %ymm7
  13334. # rnd_0: 3 - 4
  13335. rorl $5, %edx
  13336. xorl %r10d, %ecx
  13337. xorl %r8d, %edx
  13338. addl %ecx, %r11d
  13339. rorl $6, %edx
  13340. xorl %r12d, %eax
  13341. addl %edx, %r11d
  13342. movl %r12d, %ecx
  13343. vpsrld $18, %ymm5, %ymm8
  13344. vpslld $14, %ymm5, %ymm9
  13345. # rnd_0: 5 - 6
  13346. andl %eax, %ebx
  13347. rorl $9, %ecx
  13348. xorl %r12d, %ecx
  13349. xorl %r13d, %ebx
  13350. rorl $11, %ecx
  13351. addl %r11d, %r15d
  13352. xorl %r12d, %ecx
  13353. addl %ebx, %r11d
  13354. vpor %ymm6, %ymm7, %ymm6
  13355. vpor %ymm8, %ymm9, %ymm8
  13356. # rnd_0: 7 - 7
  13357. rorl $2, %ecx
  13358. movl %r15d, %edx
  13359. addl %ecx, %r11d
  13360. # rnd_1: 0 - 1
  13361. rorl $14, %edx
  13362. movl %r12d, %ebx
  13363. movl %r8d, %ecx
  13364. addl 228(%rsp), %r10d
  13365. xorl %r9d, %ecx
  13366. vpsrld $3, %ymm5, %ymm9
  13367. vpxor %ymm6, %ymm8, %ymm6
  13368. # rnd_1: 2 - 3
  13369. xorl %r15d, %edx
  13370. andl %r15d, %ecx
  13371. rorl $5, %edx
  13372. xorl %r9d, %ecx
  13373. xorl %r15d, %edx
  13374. addl %ecx, %r10d
  13375. vpxor %ymm6, %ymm9, %ymm5
  13376. vpshufd $0xfa, %ymm2, %ymm6
  13377. # rnd_1: 4 - 5
  13378. rorl $6, %edx
  13379. xorl %r11d, %ebx
  13380. addl %edx, %r10d
  13381. movl %r11d, %ecx
  13382. andl %ebx, %eax
  13383. rorl $9, %ecx
  13384. xorl %r11d, %ecx
  13385. xorl %r12d, %eax
  13386. vpsrld $10, %ymm6, %ymm8
  13387. vpsrlq $19, %ymm6, %ymm7
  13388. # rnd_1: 6 - 7
  13389. rorl $11, %ecx
  13390. addl %r10d, %r14d
  13391. xorl %r11d, %ecx
  13392. addl %eax, %r10d
  13393. rorl $2, %ecx
  13394. movl %r14d, %edx
  13395. addl %ecx, %r10d
  13396. # rnd_0: 0 - 0
  13397. rorl $14, %edx
  13398. vpsrlq $0x11, %ymm6, %ymm6
  13399. vpaddd %ymm3, %ymm4, %ymm4
  13400. # rnd_0: 1 - 3
  13401. movl %r11d, %eax
  13402. movl %r15d, %ecx
  13403. addl 232(%rsp), %r9d
  13404. xorl %r8d, %ecx
  13405. xorl %r14d, %edx
  13406. andl %r14d, %ecx
  13407. rorl $5, %edx
  13408. xorl %r8d, %ecx
  13409. xorl %r14d, %edx
  13410. addl %ecx, %r9d
  13411. vpxor %ymm6, %ymm7, %ymm6
  13412. vpaddd %ymm5, %ymm4, %ymm4
  13413. # rnd_0: 4 - 4
  13414. rorl $6, %edx
  13415. xorl %r10d, %eax
  13416. addl %edx, %r9d
  13417. movl %r10d, %ecx
  13418. vpxor %ymm6, %ymm8, %ymm8
  13419. # rnd_0: 5 - 5
  13420. andl %eax, %ebx
  13421. rorl $9, %ecx
  13422. xorl %r10d, %ecx
  13423. xorl %r11d, %ebx
  13424. vpshufb %ymm11, %ymm8, %ymm8
  13425. # rnd_0: 6 - 6
  13426. rorl $11, %ecx
  13427. addl %r9d, %r13d
  13428. xorl %r10d, %ecx
  13429. addl %ebx, %r9d
  13430. vpaddd %ymm8, %ymm4, %ymm4
  13431. # rnd_0: 7 - 7
  13432. rorl $2, %ecx
  13433. movl %r13d, %edx
  13434. addl %ecx, %r9d
  13435. # rnd_1: 0 - 0
  13436. rorl $14, %edx
  13437. vpshufd $0x50, %ymm4, %ymm6
  13438. # rnd_1: 1 - 1
  13439. movl %r10d, %ebx
  13440. movl %r14d, %ecx
  13441. addl 236(%rsp), %r8d
  13442. xorl %r15d, %ecx
  13443. vpsrlq $0x11, %ymm6, %ymm8
  13444. vpsrlq $19, %ymm6, %ymm7
  13445. # rnd_1: 2 - 3
  13446. xorl %r13d, %edx
  13447. andl %r13d, %ecx
  13448. rorl $5, %edx
  13449. xorl %r15d, %ecx
  13450. xorl %r13d, %edx
  13451. addl %ecx, %r8d
  13452. vpsrld $10, %ymm6, %ymm9
  13453. vpxor %ymm8, %ymm7, %ymm8
  13454. # rnd_1: 4 - 5
  13455. rorl $6, %edx
  13456. xorl %r9d, %ebx
  13457. addl %edx, %r8d
  13458. movl %r9d, %ecx
  13459. andl %ebx, %eax
  13460. rorl $9, %ecx
  13461. xorl %r9d, %ecx
  13462. xorl %r10d, %eax
  13463. vpxor %ymm9, %ymm8, %ymm9
  13464. # rnd_1: 6 - 6
  13465. rorl $11, %ecx
  13466. addl %r8d, %r12d
  13467. xorl %r9d, %ecx
  13468. addl %eax, %r8d
  13469. vpshufb %ymm12, %ymm9, %ymm9
  13470. # rnd_1: 7 - 7
  13471. rorl $2, %ecx
  13472. movl %r12d, %edx
  13473. addl %ecx, %r8d
  13474. vpaddd %ymm4, %ymm9, %ymm3
  13475. # msg_sched done: 56-59
  13476. # set_w_k_xfer_4: 8
  13477. vpaddd 256+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  13478. vpaddd 288+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  13479. vmovdqu %ymm4, 256(%rsp)
  13480. vmovdqu %ymm5, 288(%rsp)
  13481. vpaddd 320+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  13482. vpaddd 352+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  13483. vmovdqu %ymm4, 320(%rsp)
  13484. vmovdqu %ymm5, 352(%rsp)
  13485. # msg_sched: 64-67
  13486. # rnd_0: 0 - 0
  13487. rorl $14, %edx
  13488. vpalignr $4, %ymm0, %ymm1, %ymm5
  13489. vpalignr $4, %ymm2, %ymm3, %ymm4
  13490. # rnd_0: 1 - 2
  13491. movl %r9d, %eax
  13492. movl %r13d, %ecx
  13493. addl 256(%rsp), %r15d
  13494. xorl %r14d, %ecx
  13495. xorl %r12d, %edx
  13496. andl %r12d, %ecx
  13497. vpsrld $7, %ymm5, %ymm6
  13498. vpslld $25, %ymm5, %ymm7
  13499. # rnd_0: 3 - 4
  13500. rorl $5, %edx
  13501. xorl %r14d, %ecx
  13502. xorl %r12d, %edx
  13503. addl %ecx, %r15d
  13504. rorl $6, %edx
  13505. xorl %r8d, %eax
  13506. addl %edx, %r15d
  13507. movl %r8d, %ecx
  13508. vpsrld $18, %ymm5, %ymm8
  13509. vpslld $14, %ymm5, %ymm9
  13510. # rnd_0: 5 - 6
  13511. andl %eax, %ebx
  13512. rorl $9, %ecx
  13513. xorl %r8d, %ecx
  13514. xorl %r9d, %ebx
  13515. rorl $11, %ecx
  13516. addl %r15d, %r11d
  13517. xorl %r8d, %ecx
  13518. addl %ebx, %r15d
  13519. vpor %ymm6, %ymm7, %ymm6
  13520. vpor %ymm8, %ymm9, %ymm8
  13521. # rnd_0: 7 - 7
  13522. rorl $2, %ecx
  13523. movl %r11d, %edx
  13524. addl %ecx, %r15d
  13525. # rnd_1: 0 - 1
  13526. rorl $14, %edx
  13527. movl %r8d, %ebx
  13528. movl %r12d, %ecx
  13529. addl 260(%rsp), %r14d
  13530. xorl %r13d, %ecx
  13531. vpsrld $3, %ymm5, %ymm9
  13532. vpxor %ymm6, %ymm8, %ymm6
  13533. # rnd_1: 2 - 3
  13534. xorl %r11d, %edx
  13535. andl %r11d, %ecx
  13536. rorl $5, %edx
  13537. xorl %r13d, %ecx
  13538. xorl %r11d, %edx
  13539. addl %ecx, %r14d
  13540. vpxor %ymm6, %ymm9, %ymm5
  13541. vpshufd $0xfa, %ymm3, %ymm6
  13542. # rnd_1: 4 - 5
  13543. rorl $6, %edx
  13544. xorl %r15d, %ebx
  13545. addl %edx, %r14d
  13546. movl %r15d, %ecx
  13547. andl %ebx, %eax
  13548. rorl $9, %ecx
  13549. xorl %r15d, %ecx
  13550. xorl %r8d, %eax
  13551. vpsrld $10, %ymm6, %ymm8
  13552. vpsrlq $19, %ymm6, %ymm7
  13553. # rnd_1: 6 - 7
  13554. rorl $11, %ecx
  13555. addl %r14d, %r10d
  13556. xorl %r15d, %ecx
  13557. addl %eax, %r14d
  13558. rorl $2, %ecx
  13559. movl %r10d, %edx
  13560. addl %ecx, %r14d
  13561. # rnd_0: 0 - 0
  13562. rorl $14, %edx
  13563. vpsrlq $0x11, %ymm6, %ymm6
  13564. vpaddd %ymm0, %ymm4, %ymm4
  13565. # rnd_0: 1 - 3
  13566. movl %r15d, %eax
  13567. movl %r11d, %ecx
  13568. addl 264(%rsp), %r13d
  13569. xorl %r12d, %ecx
  13570. xorl %r10d, %edx
  13571. andl %r10d, %ecx
  13572. rorl $5, %edx
  13573. xorl %r12d, %ecx
  13574. xorl %r10d, %edx
  13575. addl %ecx, %r13d
  13576. vpxor %ymm6, %ymm7, %ymm6
  13577. vpaddd %ymm5, %ymm4, %ymm4
  13578. # rnd_0: 4 - 4
  13579. rorl $6, %edx
  13580. xorl %r14d, %eax
  13581. addl %edx, %r13d
  13582. movl %r14d, %ecx
  13583. vpxor %ymm6, %ymm8, %ymm8
  13584. # rnd_0: 5 - 5
  13585. andl %eax, %ebx
  13586. rorl $9, %ecx
  13587. xorl %r14d, %ecx
  13588. xorl %r15d, %ebx
  13589. vpshufb %ymm11, %ymm8, %ymm8
  13590. # rnd_0: 6 - 6
  13591. rorl $11, %ecx
  13592. addl %r13d, %r9d
  13593. xorl %r14d, %ecx
  13594. addl %ebx, %r13d
  13595. vpaddd %ymm8, %ymm4, %ymm4
  13596. # rnd_0: 7 - 7
  13597. rorl $2, %ecx
  13598. movl %r9d, %edx
  13599. addl %ecx, %r13d
  13600. # rnd_1: 0 - 0
  13601. rorl $14, %edx
  13602. vpshufd $0x50, %ymm4, %ymm6
  13603. # rnd_1: 1 - 1
  13604. movl %r14d, %ebx
  13605. movl %r10d, %ecx
  13606. addl 268(%rsp), %r12d
  13607. xorl %r11d, %ecx
  13608. vpsrlq $0x11, %ymm6, %ymm8
  13609. vpsrlq $19, %ymm6, %ymm7
  13610. # rnd_1: 2 - 3
  13611. xorl %r9d, %edx
  13612. andl %r9d, %ecx
  13613. rorl $5, %edx
  13614. xorl %r11d, %ecx
  13615. xorl %r9d, %edx
  13616. addl %ecx, %r12d
  13617. vpsrld $10, %ymm6, %ymm9
  13618. vpxor %ymm8, %ymm7, %ymm8
  13619. # rnd_1: 4 - 5
  13620. rorl $6, %edx
  13621. xorl %r13d, %ebx
  13622. addl %edx, %r12d
  13623. movl %r13d, %ecx
  13624. andl %ebx, %eax
  13625. rorl $9, %ecx
  13626. xorl %r13d, %ecx
  13627. xorl %r14d, %eax
  13628. vpxor %ymm9, %ymm8, %ymm9
  13629. # rnd_1: 6 - 6
  13630. rorl $11, %ecx
  13631. addl %r12d, %r8d
  13632. xorl %r13d, %ecx
  13633. addl %eax, %r12d
  13634. vpshufb %ymm12, %ymm9, %ymm9
  13635. # rnd_1: 7 - 7
  13636. rorl $2, %ecx
  13637. movl %r8d, %edx
  13638. addl %ecx, %r12d
  13639. vpaddd %ymm4, %ymm9, %ymm0
  13640. # msg_sched done: 64-67
  13641. # msg_sched: 72-75
  13642. # rnd_0: 0 - 0
  13643. rorl $14, %edx
  13644. vpalignr $4, %ymm1, %ymm2, %ymm5
  13645. vpalignr $4, %ymm3, %ymm0, %ymm4
  13646. # rnd_0: 1 - 2
  13647. movl %r13d, %eax
  13648. movl %r9d, %ecx
  13649. addl 288(%rsp), %r11d
  13650. xorl %r10d, %ecx
  13651. xorl %r8d, %edx
  13652. andl %r8d, %ecx
  13653. vpsrld $7, %ymm5, %ymm6
  13654. vpslld $25, %ymm5, %ymm7
  13655. # rnd_0: 3 - 4
  13656. rorl $5, %edx
  13657. xorl %r10d, %ecx
  13658. xorl %r8d, %edx
  13659. addl %ecx, %r11d
  13660. rorl $6, %edx
  13661. xorl %r12d, %eax
  13662. addl %edx, %r11d
  13663. movl %r12d, %ecx
  13664. vpsrld $18, %ymm5, %ymm8
  13665. vpslld $14, %ymm5, %ymm9
  13666. # rnd_0: 5 - 6
  13667. andl %eax, %ebx
  13668. rorl $9, %ecx
  13669. xorl %r12d, %ecx
  13670. xorl %r13d, %ebx
  13671. rorl $11, %ecx
  13672. addl %r11d, %r15d
  13673. xorl %r12d, %ecx
  13674. addl %ebx, %r11d
  13675. vpor %ymm6, %ymm7, %ymm6
  13676. vpor %ymm8, %ymm9, %ymm8
  13677. # rnd_0: 7 - 7
  13678. rorl $2, %ecx
  13679. movl %r15d, %edx
  13680. addl %ecx, %r11d
  13681. # rnd_1: 0 - 1
  13682. rorl $14, %edx
  13683. movl %r12d, %ebx
  13684. movl %r8d, %ecx
  13685. addl 292(%rsp), %r10d
  13686. xorl %r9d, %ecx
  13687. vpsrld $3, %ymm5, %ymm9
  13688. vpxor %ymm6, %ymm8, %ymm6
  13689. # rnd_1: 2 - 3
  13690. xorl %r15d, %edx
  13691. andl %r15d, %ecx
  13692. rorl $5, %edx
  13693. xorl %r9d, %ecx
  13694. xorl %r15d, %edx
  13695. addl %ecx, %r10d
  13696. vpxor %ymm6, %ymm9, %ymm5
  13697. vpshufd $0xfa, %ymm0, %ymm6
  13698. # rnd_1: 4 - 5
  13699. rorl $6, %edx
  13700. xorl %r11d, %ebx
  13701. addl %edx, %r10d
  13702. movl %r11d, %ecx
  13703. andl %ebx, %eax
  13704. rorl $9, %ecx
  13705. xorl %r11d, %ecx
  13706. xorl %r12d, %eax
  13707. vpsrld $10, %ymm6, %ymm8
  13708. vpsrlq $19, %ymm6, %ymm7
  13709. # rnd_1: 6 - 7
  13710. rorl $11, %ecx
  13711. addl %r10d, %r14d
  13712. xorl %r11d, %ecx
  13713. addl %eax, %r10d
  13714. rorl $2, %ecx
  13715. movl %r14d, %edx
  13716. addl %ecx, %r10d
  13717. # rnd_0: 0 - 0
  13718. rorl $14, %edx
  13719. vpsrlq $0x11, %ymm6, %ymm6
  13720. vpaddd %ymm1, %ymm4, %ymm4
  13721. # rnd_0: 1 - 3
  13722. movl %r11d, %eax
  13723. movl %r15d, %ecx
  13724. addl 296(%rsp), %r9d
  13725. xorl %r8d, %ecx
  13726. xorl %r14d, %edx
  13727. andl %r14d, %ecx
  13728. rorl $5, %edx
  13729. xorl %r8d, %ecx
  13730. xorl %r14d, %edx
  13731. addl %ecx, %r9d
  13732. vpxor %ymm6, %ymm7, %ymm6
  13733. vpaddd %ymm5, %ymm4, %ymm4
  13734. # rnd_0: 4 - 4
  13735. rorl $6, %edx
  13736. xorl %r10d, %eax
  13737. addl %edx, %r9d
  13738. movl %r10d, %ecx
  13739. vpxor %ymm6, %ymm8, %ymm8
  13740. # rnd_0: 5 - 5
  13741. andl %eax, %ebx
  13742. rorl $9, %ecx
  13743. xorl %r10d, %ecx
  13744. xorl %r11d, %ebx
  13745. vpshufb %ymm11, %ymm8, %ymm8
  13746. # rnd_0: 6 - 6
  13747. rorl $11, %ecx
  13748. addl %r9d, %r13d
  13749. xorl %r10d, %ecx
  13750. addl %ebx, %r9d
  13751. vpaddd %ymm8, %ymm4, %ymm4
  13752. # rnd_0: 7 - 7
  13753. rorl $2, %ecx
  13754. movl %r13d, %edx
  13755. addl %ecx, %r9d
  13756. # rnd_1: 0 - 0
  13757. rorl $14, %edx
  13758. vpshufd $0x50, %ymm4, %ymm6
  13759. # rnd_1: 1 - 1
  13760. movl %r10d, %ebx
  13761. movl %r14d, %ecx
  13762. addl 300(%rsp), %r8d
  13763. xorl %r15d, %ecx
  13764. vpsrlq $0x11, %ymm6, %ymm8
  13765. vpsrlq $19, %ymm6, %ymm7
  13766. # rnd_1: 2 - 3
  13767. xorl %r13d, %edx
  13768. andl %r13d, %ecx
  13769. rorl $5, %edx
  13770. xorl %r15d, %ecx
  13771. xorl %r13d, %edx
  13772. addl %ecx, %r8d
  13773. vpsrld $10, %ymm6, %ymm9
  13774. vpxor %ymm8, %ymm7, %ymm8
  13775. # rnd_1: 4 - 5
  13776. rorl $6, %edx
  13777. xorl %r9d, %ebx
  13778. addl %edx, %r8d
  13779. movl %r9d, %ecx
  13780. andl %ebx, %eax
  13781. rorl $9, %ecx
  13782. xorl %r9d, %ecx
  13783. xorl %r10d, %eax
  13784. vpxor %ymm9, %ymm8, %ymm9
  13785. # rnd_1: 6 - 6
  13786. rorl $11, %ecx
  13787. addl %r8d, %r12d
  13788. xorl %r9d, %ecx
  13789. addl %eax, %r8d
  13790. vpshufb %ymm12, %ymm9, %ymm9
  13791. # rnd_1: 7 - 7
  13792. rorl $2, %ecx
  13793. movl %r12d, %edx
  13794. addl %ecx, %r8d
  13795. vpaddd %ymm4, %ymm9, %ymm1
  13796. # msg_sched done: 72-75
  13797. # msg_sched: 80-83
  13798. # rnd_0: 0 - 0
  13799. rorl $14, %edx
  13800. vpalignr $4, %ymm2, %ymm3, %ymm5
  13801. vpalignr $4, %ymm0, %ymm1, %ymm4
  13802. # rnd_0: 1 - 2
  13803. movl %r9d, %eax
  13804. movl %r13d, %ecx
  13805. addl 320(%rsp), %r15d
  13806. xorl %r14d, %ecx
  13807. xorl %r12d, %edx
  13808. andl %r12d, %ecx
  13809. vpsrld $7, %ymm5, %ymm6
  13810. vpslld $25, %ymm5, %ymm7
  13811. # rnd_0: 3 - 4
  13812. rorl $5, %edx
  13813. xorl %r14d, %ecx
  13814. xorl %r12d, %edx
  13815. addl %ecx, %r15d
  13816. rorl $6, %edx
  13817. xorl %r8d, %eax
  13818. addl %edx, %r15d
  13819. movl %r8d, %ecx
  13820. vpsrld $18, %ymm5, %ymm8
  13821. vpslld $14, %ymm5, %ymm9
  13822. # rnd_0: 5 - 6
  13823. andl %eax, %ebx
  13824. rorl $9, %ecx
  13825. xorl %r8d, %ecx
  13826. xorl %r9d, %ebx
  13827. rorl $11, %ecx
  13828. addl %r15d, %r11d
  13829. xorl %r8d, %ecx
  13830. addl %ebx, %r15d
  13831. vpor %ymm6, %ymm7, %ymm6
  13832. vpor %ymm8, %ymm9, %ymm8
  13833. # rnd_0: 7 - 7
  13834. rorl $2, %ecx
  13835. movl %r11d, %edx
  13836. addl %ecx, %r15d
  13837. # rnd_1: 0 - 1
  13838. rorl $14, %edx
  13839. movl %r8d, %ebx
  13840. movl %r12d, %ecx
  13841. addl 324(%rsp), %r14d
  13842. xorl %r13d, %ecx
  13843. vpsrld $3, %ymm5, %ymm9
  13844. vpxor %ymm6, %ymm8, %ymm6
  13845. # rnd_1: 2 - 3
  13846. xorl %r11d, %edx
  13847. andl %r11d, %ecx
  13848. rorl $5, %edx
  13849. xorl %r13d, %ecx
  13850. xorl %r11d, %edx
  13851. addl %ecx, %r14d
  13852. vpxor %ymm6, %ymm9, %ymm5
  13853. vpshufd $0xfa, %ymm1, %ymm6
  13854. # rnd_1: 4 - 5
  13855. rorl $6, %edx
  13856. xorl %r15d, %ebx
  13857. addl %edx, %r14d
  13858. movl %r15d, %ecx
  13859. andl %ebx, %eax
  13860. rorl $9, %ecx
  13861. xorl %r15d, %ecx
  13862. xorl %r8d, %eax
  13863. vpsrld $10, %ymm6, %ymm8
  13864. vpsrlq $19, %ymm6, %ymm7
  13865. # rnd_1: 6 - 7
  13866. rorl $11, %ecx
  13867. addl %r14d, %r10d
  13868. xorl %r15d, %ecx
  13869. addl %eax, %r14d
  13870. rorl $2, %ecx
  13871. movl %r10d, %edx
  13872. addl %ecx, %r14d
  13873. # rnd_0: 0 - 0
  13874. rorl $14, %edx
  13875. vpsrlq $0x11, %ymm6, %ymm6
  13876. vpaddd %ymm2, %ymm4, %ymm4
  13877. # rnd_0: 1 - 3
  13878. movl %r15d, %eax
  13879. movl %r11d, %ecx
  13880. addl 328(%rsp), %r13d
  13881. xorl %r12d, %ecx
  13882. xorl %r10d, %edx
  13883. andl %r10d, %ecx
  13884. rorl $5, %edx
  13885. xorl %r12d, %ecx
  13886. xorl %r10d, %edx
  13887. addl %ecx, %r13d
  13888. vpxor %ymm6, %ymm7, %ymm6
  13889. vpaddd %ymm5, %ymm4, %ymm4
  13890. # rnd_0: 4 - 4
  13891. rorl $6, %edx
  13892. xorl %r14d, %eax
  13893. addl %edx, %r13d
  13894. movl %r14d, %ecx
  13895. vpxor %ymm6, %ymm8, %ymm8
  13896. # rnd_0: 5 - 5
  13897. andl %eax, %ebx
  13898. rorl $9, %ecx
  13899. xorl %r14d, %ecx
  13900. xorl %r15d, %ebx
  13901. vpshufb %ymm11, %ymm8, %ymm8
  13902. # rnd_0: 6 - 6
  13903. rorl $11, %ecx
  13904. addl %r13d, %r9d
  13905. xorl %r14d, %ecx
  13906. addl %ebx, %r13d
  13907. vpaddd %ymm8, %ymm4, %ymm4
  13908. # rnd_0: 7 - 7
  13909. rorl $2, %ecx
  13910. movl %r9d, %edx
  13911. addl %ecx, %r13d
  13912. # rnd_1: 0 - 0
  13913. rorl $14, %edx
  13914. vpshufd $0x50, %ymm4, %ymm6
  13915. # rnd_1: 1 - 1
  13916. movl %r14d, %ebx
  13917. movl %r10d, %ecx
  13918. addl 332(%rsp), %r12d
  13919. xorl %r11d, %ecx
  13920. vpsrlq $0x11, %ymm6, %ymm8
  13921. vpsrlq $19, %ymm6, %ymm7
  13922. # rnd_1: 2 - 3
  13923. xorl %r9d, %edx
  13924. andl %r9d, %ecx
  13925. rorl $5, %edx
  13926. xorl %r11d, %ecx
  13927. xorl %r9d, %edx
  13928. addl %ecx, %r12d
  13929. vpsrld $10, %ymm6, %ymm9
  13930. vpxor %ymm8, %ymm7, %ymm8
  13931. # rnd_1: 4 - 5
  13932. rorl $6, %edx
  13933. xorl %r13d, %ebx
  13934. addl %edx, %r12d
  13935. movl %r13d, %ecx
  13936. andl %ebx, %eax
  13937. rorl $9, %ecx
  13938. xorl %r13d, %ecx
  13939. xorl %r14d, %eax
  13940. vpxor %ymm9, %ymm8, %ymm9
  13941. # rnd_1: 6 - 6
  13942. rorl $11, %ecx
  13943. addl %r12d, %r8d
  13944. xorl %r13d, %ecx
  13945. addl %eax, %r12d
  13946. vpshufb %ymm12, %ymm9, %ymm9
  13947. # rnd_1: 7 - 7
  13948. rorl $2, %ecx
  13949. movl %r8d, %edx
  13950. addl %ecx, %r12d
  13951. vpaddd %ymm4, %ymm9, %ymm2
  13952. # msg_sched done: 80-83
  13953. # msg_sched: 88-91
  13954. # rnd_0: 0 - 0
  13955. rorl $14, %edx
  13956. vpalignr $4, %ymm3, %ymm0, %ymm5
  13957. vpalignr $4, %ymm1, %ymm2, %ymm4
  13958. # rnd_0: 1 - 2
  13959. movl %r13d, %eax
  13960. movl %r9d, %ecx
  13961. addl 352(%rsp), %r11d
  13962. xorl %r10d, %ecx
  13963. xorl %r8d, %edx
  13964. andl %r8d, %ecx
  13965. vpsrld $7, %ymm5, %ymm6
  13966. vpslld $25, %ymm5, %ymm7
  13967. # rnd_0: 3 - 4
  13968. rorl $5, %edx
  13969. xorl %r10d, %ecx
  13970. xorl %r8d, %edx
  13971. addl %ecx, %r11d
  13972. rorl $6, %edx
  13973. xorl %r12d, %eax
  13974. addl %edx, %r11d
  13975. movl %r12d, %ecx
  13976. vpsrld $18, %ymm5, %ymm8
  13977. vpslld $14, %ymm5, %ymm9
  13978. # rnd_0: 5 - 6
  13979. andl %eax, %ebx
  13980. rorl $9, %ecx
  13981. xorl %r12d, %ecx
  13982. xorl %r13d, %ebx
  13983. rorl $11, %ecx
  13984. addl %r11d, %r15d
  13985. xorl %r12d, %ecx
  13986. addl %ebx, %r11d
  13987. vpor %ymm6, %ymm7, %ymm6
  13988. vpor %ymm8, %ymm9, %ymm8
  13989. # rnd_0: 7 - 7
  13990. rorl $2, %ecx
  13991. movl %r15d, %edx
  13992. addl %ecx, %r11d
  13993. # rnd_1: 0 - 1
  13994. rorl $14, %edx
  13995. movl %r12d, %ebx
  13996. movl %r8d, %ecx
  13997. addl 356(%rsp), %r10d
  13998. xorl %r9d, %ecx
  13999. vpsrld $3, %ymm5, %ymm9
  14000. vpxor %ymm6, %ymm8, %ymm6
  14001. # rnd_1: 2 - 3
  14002. xorl %r15d, %edx
  14003. andl %r15d, %ecx
  14004. rorl $5, %edx
  14005. xorl %r9d, %ecx
  14006. xorl %r15d, %edx
  14007. addl %ecx, %r10d
  14008. vpxor %ymm6, %ymm9, %ymm5
  14009. vpshufd $0xfa, %ymm2, %ymm6
  14010. # rnd_1: 4 - 5
  14011. rorl $6, %edx
  14012. xorl %r11d, %ebx
  14013. addl %edx, %r10d
  14014. movl %r11d, %ecx
  14015. andl %ebx, %eax
  14016. rorl $9, %ecx
  14017. xorl %r11d, %ecx
  14018. xorl %r12d, %eax
  14019. vpsrld $10, %ymm6, %ymm8
  14020. vpsrlq $19, %ymm6, %ymm7
  14021. # rnd_1: 6 - 7
  14022. rorl $11, %ecx
  14023. addl %r10d, %r14d
  14024. xorl %r11d, %ecx
  14025. addl %eax, %r10d
  14026. rorl $2, %ecx
  14027. movl %r14d, %edx
  14028. addl %ecx, %r10d
  14029. # rnd_0: 0 - 0
  14030. rorl $14, %edx
  14031. vpsrlq $0x11, %ymm6, %ymm6
  14032. vpaddd %ymm3, %ymm4, %ymm4
  14033. # rnd_0: 1 - 3
  14034. movl %r11d, %eax
  14035. movl %r15d, %ecx
  14036. addl 360(%rsp), %r9d
  14037. xorl %r8d, %ecx
  14038. xorl %r14d, %edx
  14039. andl %r14d, %ecx
  14040. rorl $5, %edx
  14041. xorl %r8d, %ecx
  14042. xorl %r14d, %edx
  14043. addl %ecx, %r9d
  14044. vpxor %ymm6, %ymm7, %ymm6
  14045. vpaddd %ymm5, %ymm4, %ymm4
  14046. # rnd_0: 4 - 4
  14047. rorl $6, %edx
  14048. xorl %r10d, %eax
  14049. addl %edx, %r9d
  14050. movl %r10d, %ecx
  14051. vpxor %ymm6, %ymm8, %ymm8
  14052. # rnd_0: 5 - 5
  14053. andl %eax, %ebx
  14054. rorl $9, %ecx
  14055. xorl %r10d, %ecx
  14056. xorl %r11d, %ebx
  14057. vpshufb %ymm11, %ymm8, %ymm8
  14058. # rnd_0: 6 - 6
  14059. rorl $11, %ecx
  14060. addl %r9d, %r13d
  14061. xorl %r10d, %ecx
  14062. addl %ebx, %r9d
  14063. vpaddd %ymm8, %ymm4, %ymm4
  14064. # rnd_0: 7 - 7
  14065. rorl $2, %ecx
  14066. movl %r13d, %edx
  14067. addl %ecx, %r9d
  14068. # rnd_1: 0 - 0
  14069. rorl $14, %edx
  14070. vpshufd $0x50, %ymm4, %ymm6
  14071. # rnd_1: 1 - 1
  14072. movl %r10d, %ebx
  14073. movl %r14d, %ecx
  14074. addl 364(%rsp), %r8d
  14075. xorl %r15d, %ecx
  14076. vpsrlq $0x11, %ymm6, %ymm8
  14077. vpsrlq $19, %ymm6, %ymm7
  14078. # rnd_1: 2 - 3
  14079. xorl %r13d, %edx
  14080. andl %r13d, %ecx
  14081. rorl $5, %edx
  14082. xorl %r15d, %ecx
  14083. xorl %r13d, %edx
  14084. addl %ecx, %r8d
  14085. vpsrld $10, %ymm6, %ymm9
  14086. vpxor %ymm8, %ymm7, %ymm8
  14087. # rnd_1: 4 - 5
  14088. rorl $6, %edx
  14089. xorl %r9d, %ebx
  14090. addl %edx, %r8d
  14091. movl %r9d, %ecx
  14092. andl %ebx, %eax
  14093. rorl $9, %ecx
  14094. xorl %r9d, %ecx
  14095. xorl %r10d, %eax
  14096. vpxor %ymm9, %ymm8, %ymm9
  14097. # rnd_1: 6 - 6
  14098. rorl $11, %ecx
  14099. addl %r8d, %r12d
  14100. xorl %r9d, %ecx
  14101. addl %eax, %r8d
  14102. vpshufb %ymm12, %ymm9, %ymm9
  14103. # rnd_1: 7 - 7
  14104. rorl $2, %ecx
  14105. movl %r12d, %edx
  14106. addl %ecx, %r8d
  14107. vpaddd %ymm4, %ymm9, %ymm3
  14108. # msg_sched done: 88-91
  14109. # set_w_k_xfer_4: 12
  14110. vpaddd 384+L_avx2_sha256_k(%rip), %ymm0, %ymm4
  14111. vpaddd 416+L_avx2_sha256_k(%rip), %ymm1, %ymm5
  14112. vmovdqu %ymm4, 384(%rsp)
  14113. vmovdqu %ymm5, 416(%rsp)
  14114. vpaddd 448+L_avx2_sha256_k(%rip), %ymm2, %ymm4
  14115. vpaddd 480+L_avx2_sha256_k(%rip), %ymm3, %ymm5
  14116. vmovdqu %ymm4, 448(%rsp)
  14117. vmovdqu %ymm5, 480(%rsp)
  14118. # rnd_all_4: 24-27
  14119. addl 384(%rsp), %r15d
  14120. movl %r13d, %ecx
  14121. movl %r9d, %eax
  14122. xorl %r14d, %ecx
  14123. rorl $14, %edx
  14124. andl %r12d, %ecx
  14125. xorl %r12d, %edx
  14126. xorl %r14d, %ecx
  14127. rorl $5, %edx
  14128. addl %ecx, %r15d
  14129. xorl %r12d, %edx
  14130. xorl %r8d, %eax
  14131. rorl $6, %edx
  14132. movl %r8d, %ecx
  14133. addl %edx, %r15d
  14134. rorl $9, %ecx
  14135. andl %eax, %ebx
  14136. xorl %r8d, %ecx
  14137. xorl %r9d, %ebx
  14138. rorl $11, %ecx
  14139. addl %r15d, %r11d
  14140. xorl %r8d, %ecx
  14141. addl %ebx, %r15d
  14142. rorl $2, %ecx
  14143. movl %r11d, %edx
  14144. addl %ecx, %r15d
  14145. addl 388(%rsp), %r14d
  14146. movl %r12d, %ecx
  14147. movl %r8d, %ebx
  14148. xorl %r13d, %ecx
  14149. rorl $14, %edx
  14150. andl %r11d, %ecx
  14151. xorl %r11d, %edx
  14152. xorl %r13d, %ecx
  14153. rorl $5, %edx
  14154. addl %ecx, %r14d
  14155. xorl %r11d, %edx
  14156. xorl %r15d, %ebx
  14157. rorl $6, %edx
  14158. movl %r15d, %ecx
  14159. addl %edx, %r14d
  14160. rorl $9, %ecx
  14161. andl %ebx, %eax
  14162. xorl %r15d, %ecx
  14163. xorl %r8d, %eax
  14164. rorl $11, %ecx
  14165. addl %r14d, %r10d
  14166. xorl %r15d, %ecx
  14167. addl %eax, %r14d
  14168. rorl $2, %ecx
  14169. movl %r10d, %edx
  14170. addl %ecx, %r14d
  14171. addl 392(%rsp), %r13d
  14172. movl %r11d, %ecx
  14173. movl %r15d, %eax
  14174. xorl %r12d, %ecx
  14175. rorl $14, %edx
  14176. andl %r10d, %ecx
  14177. xorl %r10d, %edx
  14178. xorl %r12d, %ecx
  14179. rorl $5, %edx
  14180. addl %ecx, %r13d
  14181. xorl %r10d, %edx
  14182. xorl %r14d, %eax
  14183. rorl $6, %edx
  14184. movl %r14d, %ecx
  14185. addl %edx, %r13d
  14186. rorl $9, %ecx
  14187. andl %eax, %ebx
  14188. xorl %r14d, %ecx
  14189. xorl %r15d, %ebx
  14190. rorl $11, %ecx
  14191. addl %r13d, %r9d
  14192. xorl %r14d, %ecx
  14193. addl %ebx, %r13d
  14194. rorl $2, %ecx
  14195. movl %r9d, %edx
  14196. addl %ecx, %r13d
  14197. addl 396(%rsp), %r12d
  14198. movl %r10d, %ecx
  14199. movl %r14d, %ebx
  14200. xorl %r11d, %ecx
  14201. rorl $14, %edx
  14202. andl %r9d, %ecx
  14203. xorl %r9d, %edx
  14204. xorl %r11d, %ecx
  14205. rorl $5, %edx
  14206. addl %ecx, %r12d
  14207. xorl %r9d, %edx
  14208. xorl %r13d, %ebx
  14209. rorl $6, %edx
  14210. movl %r13d, %ecx
  14211. addl %edx, %r12d
  14212. rorl $9, %ecx
  14213. andl %ebx, %eax
  14214. xorl %r13d, %ecx
  14215. xorl %r14d, %eax
  14216. rorl $11, %ecx
  14217. addl %r12d, %r8d
  14218. xorl %r13d, %ecx
  14219. addl %eax, %r12d
  14220. rorl $2, %ecx
  14221. movl %r8d, %edx
  14222. addl %ecx, %r12d
  14223. # rnd_all_4: 26-29
  14224. addl 416(%rsp), %r11d
  14225. movl %r9d, %ecx
  14226. movl %r13d, %eax
  14227. xorl %r10d, %ecx
  14228. rorl $14, %edx
  14229. andl %r8d, %ecx
  14230. xorl %r8d, %edx
  14231. xorl %r10d, %ecx
  14232. rorl $5, %edx
  14233. addl %ecx, %r11d
  14234. xorl %r8d, %edx
  14235. xorl %r12d, %eax
  14236. rorl $6, %edx
  14237. movl %r12d, %ecx
  14238. addl %edx, %r11d
  14239. rorl $9, %ecx
  14240. andl %eax, %ebx
  14241. xorl %r12d, %ecx
  14242. xorl %r13d, %ebx
  14243. rorl $11, %ecx
  14244. addl %r11d, %r15d
  14245. xorl %r12d, %ecx
  14246. addl %ebx, %r11d
  14247. rorl $2, %ecx
  14248. movl %r15d, %edx
  14249. addl %ecx, %r11d
  14250. addl 420(%rsp), %r10d
  14251. movl %r8d, %ecx
  14252. movl %r12d, %ebx
  14253. xorl %r9d, %ecx
  14254. rorl $14, %edx
  14255. andl %r15d, %ecx
  14256. xorl %r15d, %edx
  14257. xorl %r9d, %ecx
  14258. rorl $5, %edx
  14259. addl %ecx, %r10d
  14260. xorl %r15d, %edx
  14261. xorl %r11d, %ebx
  14262. rorl $6, %edx
  14263. movl %r11d, %ecx
  14264. addl %edx, %r10d
  14265. rorl $9, %ecx
  14266. andl %ebx, %eax
  14267. xorl %r11d, %ecx
  14268. xorl %r12d, %eax
  14269. rorl $11, %ecx
  14270. addl %r10d, %r14d
  14271. xorl %r11d, %ecx
  14272. addl %eax, %r10d
  14273. rorl $2, %ecx
  14274. movl %r14d, %edx
  14275. addl %ecx, %r10d
  14276. addl 424(%rsp), %r9d
  14277. movl %r15d, %ecx
  14278. movl %r11d, %eax
  14279. xorl %r8d, %ecx
  14280. rorl $14, %edx
  14281. andl %r14d, %ecx
  14282. xorl %r14d, %edx
  14283. xorl %r8d, %ecx
  14284. rorl $5, %edx
  14285. addl %ecx, %r9d
  14286. xorl %r14d, %edx
  14287. xorl %r10d, %eax
  14288. rorl $6, %edx
  14289. movl %r10d, %ecx
  14290. addl %edx, %r9d
  14291. rorl $9, %ecx
  14292. andl %eax, %ebx
  14293. xorl %r10d, %ecx
  14294. xorl %r11d, %ebx
  14295. rorl $11, %ecx
  14296. addl %r9d, %r13d
  14297. xorl %r10d, %ecx
  14298. addl %ebx, %r9d
  14299. rorl $2, %ecx
  14300. movl %r13d, %edx
  14301. addl %ecx, %r9d
  14302. addl 428(%rsp), %r8d
  14303. movl %r14d, %ecx
  14304. movl %r10d, %ebx
  14305. xorl %r15d, %ecx
  14306. rorl $14, %edx
  14307. andl %r13d, %ecx
  14308. xorl %r13d, %edx
  14309. xorl %r15d, %ecx
  14310. rorl $5, %edx
  14311. addl %ecx, %r8d
  14312. xorl %r13d, %edx
  14313. xorl %r9d, %ebx
  14314. rorl $6, %edx
  14315. movl %r9d, %ecx
  14316. addl %edx, %r8d
  14317. rorl $9, %ecx
  14318. andl %ebx, %eax
  14319. xorl %r9d, %ecx
  14320. xorl %r10d, %eax
  14321. rorl $11, %ecx
  14322. addl %r8d, %r12d
  14323. xorl %r9d, %ecx
  14324. addl %eax, %r8d
  14325. rorl $2, %ecx
  14326. movl %r12d, %edx
  14327. addl %ecx, %r8d
  14328. # rnd_all_4: 28-31
  14329. addl 448(%rsp), %r15d
  14330. movl %r13d, %ecx
  14331. movl %r9d, %eax
  14332. xorl %r14d, %ecx
  14333. rorl $14, %edx
  14334. andl %r12d, %ecx
  14335. xorl %r12d, %edx
  14336. xorl %r14d, %ecx
  14337. rorl $5, %edx
  14338. addl %ecx, %r15d
  14339. xorl %r12d, %edx
  14340. xorl %r8d, %eax
  14341. rorl $6, %edx
  14342. movl %r8d, %ecx
  14343. addl %edx, %r15d
  14344. rorl $9, %ecx
  14345. andl %eax, %ebx
  14346. xorl %r8d, %ecx
  14347. xorl %r9d, %ebx
  14348. rorl $11, %ecx
  14349. addl %r15d, %r11d
  14350. xorl %r8d, %ecx
  14351. addl %ebx, %r15d
  14352. rorl $2, %ecx
  14353. movl %r11d, %edx
  14354. addl %ecx, %r15d
  14355. addl 452(%rsp), %r14d
  14356. movl %r12d, %ecx
  14357. movl %r8d, %ebx
  14358. xorl %r13d, %ecx
  14359. rorl $14, %edx
  14360. andl %r11d, %ecx
  14361. xorl %r11d, %edx
  14362. xorl %r13d, %ecx
  14363. rorl $5, %edx
  14364. addl %ecx, %r14d
  14365. xorl %r11d, %edx
  14366. xorl %r15d, %ebx
  14367. rorl $6, %edx
  14368. movl %r15d, %ecx
  14369. addl %edx, %r14d
  14370. rorl $9, %ecx
  14371. andl %ebx, %eax
  14372. xorl %r15d, %ecx
  14373. xorl %r8d, %eax
  14374. rorl $11, %ecx
  14375. addl %r14d, %r10d
  14376. xorl %r15d, %ecx
  14377. addl %eax, %r14d
  14378. rorl $2, %ecx
  14379. movl %r10d, %edx
  14380. addl %ecx, %r14d
  14381. addl 456(%rsp), %r13d
  14382. movl %r11d, %ecx
  14383. movl %r15d, %eax
  14384. xorl %r12d, %ecx
  14385. rorl $14, %edx
  14386. andl %r10d, %ecx
  14387. xorl %r10d, %edx
  14388. xorl %r12d, %ecx
  14389. rorl $5, %edx
  14390. addl %ecx, %r13d
  14391. xorl %r10d, %edx
  14392. xorl %r14d, %eax
  14393. rorl $6, %edx
  14394. movl %r14d, %ecx
  14395. addl %edx, %r13d
  14396. rorl $9, %ecx
  14397. andl %eax, %ebx
  14398. xorl %r14d, %ecx
  14399. xorl %r15d, %ebx
  14400. rorl $11, %ecx
  14401. addl %r13d, %r9d
  14402. xorl %r14d, %ecx
  14403. addl %ebx, %r13d
  14404. rorl $2, %ecx
  14405. movl %r9d, %edx
  14406. addl %ecx, %r13d
  14407. addl 460(%rsp), %r12d
  14408. movl %r10d, %ecx
  14409. movl %r14d, %ebx
  14410. xorl %r11d, %ecx
  14411. rorl $14, %edx
  14412. andl %r9d, %ecx
  14413. xorl %r9d, %edx
  14414. xorl %r11d, %ecx
  14415. rorl $5, %edx
  14416. addl %ecx, %r12d
  14417. xorl %r9d, %edx
  14418. xorl %r13d, %ebx
  14419. rorl $6, %edx
  14420. movl %r13d, %ecx
  14421. addl %edx, %r12d
  14422. rorl $9, %ecx
  14423. andl %ebx, %eax
  14424. xorl %r13d, %ecx
  14425. xorl %r14d, %eax
  14426. rorl $11, %ecx
  14427. addl %r12d, %r8d
  14428. xorl %r13d, %ecx
  14429. addl %eax, %r12d
  14430. rorl $2, %ecx
  14431. movl %r8d, %edx
  14432. addl %ecx, %r12d
  14433. # rnd_all_4: 30-33
  14434. addl 480(%rsp), %r11d
  14435. movl %r9d, %ecx
  14436. movl %r13d, %eax
  14437. xorl %r10d, %ecx
  14438. rorl $14, %edx
  14439. andl %r8d, %ecx
  14440. xorl %r8d, %edx
  14441. xorl %r10d, %ecx
  14442. rorl $5, %edx
  14443. addl %ecx, %r11d
  14444. xorl %r8d, %edx
  14445. xorl %r12d, %eax
  14446. rorl $6, %edx
  14447. movl %r12d, %ecx
  14448. addl %edx, %r11d
  14449. rorl $9, %ecx
  14450. andl %eax, %ebx
  14451. xorl %r12d, %ecx
  14452. xorl %r13d, %ebx
  14453. rorl $11, %ecx
  14454. addl %r11d, %r15d
  14455. xorl %r12d, %ecx
  14456. addl %ebx, %r11d
  14457. rorl $2, %ecx
  14458. movl %r15d, %edx
  14459. addl %ecx, %r11d
  14460. addl 484(%rsp), %r10d
  14461. movl %r8d, %ecx
  14462. movl %r12d, %ebx
  14463. xorl %r9d, %ecx
  14464. rorl $14, %edx
  14465. andl %r15d, %ecx
  14466. xorl %r15d, %edx
  14467. xorl %r9d, %ecx
  14468. rorl $5, %edx
  14469. addl %ecx, %r10d
  14470. xorl %r15d, %edx
  14471. xorl %r11d, %ebx
  14472. rorl $6, %edx
  14473. movl %r11d, %ecx
  14474. addl %edx, %r10d
  14475. rorl $9, %ecx
  14476. andl %ebx, %eax
  14477. xorl %r11d, %ecx
  14478. xorl %r12d, %eax
  14479. rorl $11, %ecx
  14480. addl %r10d, %r14d
  14481. xorl %r11d, %ecx
  14482. addl %eax, %r10d
  14483. rorl $2, %ecx
  14484. movl %r14d, %edx
  14485. addl %ecx, %r10d
  14486. addl 488(%rsp), %r9d
  14487. movl %r15d, %ecx
  14488. movl %r11d, %eax
  14489. xorl %r8d, %ecx
  14490. rorl $14, %edx
  14491. andl %r14d, %ecx
  14492. xorl %r14d, %edx
  14493. xorl %r8d, %ecx
  14494. rorl $5, %edx
  14495. addl %ecx, %r9d
  14496. xorl %r14d, %edx
  14497. xorl %r10d, %eax
  14498. rorl $6, %edx
  14499. movl %r10d, %ecx
  14500. addl %edx, %r9d
  14501. rorl $9, %ecx
  14502. andl %eax, %ebx
  14503. xorl %r10d, %ecx
  14504. xorl %r11d, %ebx
  14505. rorl $11, %ecx
  14506. addl %r9d, %r13d
  14507. xorl %r10d, %ecx
  14508. addl %ebx, %r9d
  14509. rorl $2, %ecx
  14510. movl %r13d, %edx
  14511. addl %ecx, %r9d
  14512. addl 492(%rsp), %r8d
  14513. movl %r14d, %ecx
  14514. movl %r10d, %ebx
  14515. xorl %r15d, %ecx
  14516. rorl $14, %edx
  14517. andl %r13d, %ecx
  14518. xorl %r13d, %edx
  14519. xorl %r15d, %ecx
  14520. rorl $5, %edx
  14521. addl %ecx, %r8d
  14522. xorl %r13d, %edx
  14523. xorl %r9d, %ebx
  14524. rorl $6, %edx
  14525. movl %r9d, %ecx
  14526. addl %edx, %r8d
  14527. rorl $9, %ecx
  14528. andl %ebx, %eax
  14529. xorl %r9d, %ecx
  14530. xorl %r10d, %eax
  14531. rorl $11, %ecx
  14532. addl %r8d, %r12d
  14533. xorl %r9d, %ecx
  14534. addl %eax, %r8d
  14535. rorl $2, %ecx
  14536. movl %r12d, %edx
  14537. addl %ecx, %r8d
  14538. addl (%rdi), %r8d
  14539. addl 4(%rdi), %r9d
  14540. addl 8(%rdi), %r10d
  14541. addl 12(%rdi), %r11d
  14542. addl 16(%rdi), %r12d
  14543. addl 20(%rdi), %r13d
  14544. addl 24(%rdi), %r14d
  14545. addl 28(%rdi), %r15d
  14546. movl %r8d, (%rdi)
  14547. movl %r9d, 4(%rdi)
  14548. movl %r10d, 8(%rdi)
  14549. movl %r11d, 12(%rdi)
  14550. movl %r12d, 16(%rdi)
  14551. movl %r13d, 20(%rdi)
  14552. movl %r14d, 24(%rdi)
  14553. movl %r15d, 28(%rdi)
  14554. movl %r9d, %ebx
  14555. movl %r12d, %edx
  14556. xorl %r10d, %ebx
  14557. # rnd_all_4: 1-4
  14558. addl 16(%rsp), %r15d
  14559. movl %r13d, %ecx
  14560. movl %r9d, %eax
  14561. xorl %r14d, %ecx
  14562. rorl $14, %edx
  14563. andl %r12d, %ecx
  14564. xorl %r12d, %edx
  14565. xorl %r14d, %ecx
  14566. rorl $5, %edx
  14567. addl %ecx, %r15d
  14568. xorl %r12d, %edx
  14569. xorl %r8d, %eax
  14570. rorl $6, %edx
  14571. movl %r8d, %ecx
  14572. addl %edx, %r15d
  14573. rorl $9, %ecx
  14574. andl %eax, %ebx
  14575. xorl %r8d, %ecx
  14576. xorl %r9d, %ebx
  14577. rorl $11, %ecx
  14578. addl %r15d, %r11d
  14579. xorl %r8d, %ecx
  14580. addl %ebx, %r15d
  14581. rorl $2, %ecx
  14582. movl %r11d, %edx
  14583. addl %ecx, %r15d
  14584. addl 20(%rsp), %r14d
  14585. movl %r12d, %ecx
  14586. movl %r8d, %ebx
  14587. xorl %r13d, %ecx
  14588. rorl $14, %edx
  14589. andl %r11d, %ecx
  14590. xorl %r11d, %edx
  14591. xorl %r13d, %ecx
  14592. rorl $5, %edx
  14593. addl %ecx, %r14d
  14594. xorl %r11d, %edx
  14595. xorl %r15d, %ebx
  14596. rorl $6, %edx
  14597. movl %r15d, %ecx
  14598. addl %edx, %r14d
  14599. rorl $9, %ecx
  14600. andl %ebx, %eax
  14601. xorl %r15d, %ecx
  14602. xorl %r8d, %eax
  14603. rorl $11, %ecx
  14604. addl %r14d, %r10d
  14605. xorl %r15d, %ecx
  14606. addl %eax, %r14d
  14607. rorl $2, %ecx
  14608. movl %r10d, %edx
  14609. addl %ecx, %r14d
  14610. addl 24(%rsp), %r13d
  14611. movl %r11d, %ecx
  14612. movl %r15d, %eax
  14613. xorl %r12d, %ecx
  14614. rorl $14, %edx
  14615. andl %r10d, %ecx
  14616. xorl %r10d, %edx
  14617. xorl %r12d, %ecx
  14618. rorl $5, %edx
  14619. addl %ecx, %r13d
  14620. xorl %r10d, %edx
  14621. xorl %r14d, %eax
  14622. rorl $6, %edx
  14623. movl %r14d, %ecx
  14624. addl %edx, %r13d
  14625. rorl $9, %ecx
  14626. andl %eax, %ebx
  14627. xorl %r14d, %ecx
  14628. xorl %r15d, %ebx
  14629. rorl $11, %ecx
  14630. addl %r13d, %r9d
  14631. xorl %r14d, %ecx
  14632. addl %ebx, %r13d
  14633. rorl $2, %ecx
  14634. movl %r9d, %edx
  14635. addl %ecx, %r13d
  14636. addl 28(%rsp), %r12d
  14637. movl %r10d, %ecx
  14638. movl %r14d, %ebx
  14639. xorl %r11d, %ecx
  14640. rorl $14, %edx
  14641. andl %r9d, %ecx
  14642. xorl %r9d, %edx
  14643. xorl %r11d, %ecx
  14644. rorl $5, %edx
  14645. addl %ecx, %r12d
  14646. xorl %r9d, %edx
  14647. xorl %r13d, %ebx
  14648. rorl $6, %edx
  14649. movl %r13d, %ecx
  14650. addl %edx, %r12d
  14651. rorl $9, %ecx
  14652. andl %ebx, %eax
  14653. xorl %r13d, %ecx
  14654. xorl %r14d, %eax
  14655. rorl $11, %ecx
  14656. addl %r12d, %r8d
  14657. xorl %r13d, %ecx
  14658. addl %eax, %r12d
  14659. rorl $2, %ecx
  14660. movl %r8d, %edx
  14661. addl %ecx, %r12d
  14662. # rnd_all_4: 3-6
  14663. addl 48(%rsp), %r11d
  14664. movl %r9d, %ecx
  14665. movl %r13d, %eax
  14666. xorl %r10d, %ecx
  14667. rorl $14, %edx
  14668. andl %r8d, %ecx
  14669. xorl %r8d, %edx
  14670. xorl %r10d, %ecx
  14671. rorl $5, %edx
  14672. addl %ecx, %r11d
  14673. xorl %r8d, %edx
  14674. xorl %r12d, %eax
  14675. rorl $6, %edx
  14676. movl %r12d, %ecx
  14677. addl %edx, %r11d
  14678. rorl $9, %ecx
  14679. andl %eax, %ebx
  14680. xorl %r12d, %ecx
  14681. xorl %r13d, %ebx
  14682. rorl $11, %ecx
  14683. addl %r11d, %r15d
  14684. xorl %r12d, %ecx
  14685. addl %ebx, %r11d
  14686. rorl $2, %ecx
  14687. movl %r15d, %edx
  14688. addl %ecx, %r11d
  14689. addl 52(%rsp), %r10d
  14690. movl %r8d, %ecx
  14691. movl %r12d, %ebx
  14692. xorl %r9d, %ecx
  14693. rorl $14, %edx
  14694. andl %r15d, %ecx
  14695. xorl %r15d, %edx
  14696. xorl %r9d, %ecx
  14697. rorl $5, %edx
  14698. addl %ecx, %r10d
  14699. xorl %r15d, %edx
  14700. xorl %r11d, %ebx
  14701. rorl $6, %edx
  14702. movl %r11d, %ecx
  14703. addl %edx, %r10d
  14704. rorl $9, %ecx
  14705. andl %ebx, %eax
  14706. xorl %r11d, %ecx
  14707. xorl %r12d, %eax
  14708. rorl $11, %ecx
  14709. addl %r10d, %r14d
  14710. xorl %r11d, %ecx
  14711. addl %eax, %r10d
  14712. rorl $2, %ecx
  14713. movl %r14d, %edx
  14714. addl %ecx, %r10d
  14715. addl 56(%rsp), %r9d
  14716. movl %r15d, %ecx
  14717. movl %r11d, %eax
  14718. xorl %r8d, %ecx
  14719. rorl $14, %edx
  14720. andl %r14d, %ecx
  14721. xorl %r14d, %edx
  14722. xorl %r8d, %ecx
  14723. rorl $5, %edx
  14724. addl %ecx, %r9d
  14725. xorl %r14d, %edx
  14726. xorl %r10d, %eax
  14727. rorl $6, %edx
  14728. movl %r10d, %ecx
  14729. addl %edx, %r9d
  14730. rorl $9, %ecx
  14731. andl %eax, %ebx
  14732. xorl %r10d, %ecx
  14733. xorl %r11d, %ebx
  14734. rorl $11, %ecx
  14735. addl %r9d, %r13d
  14736. xorl %r10d, %ecx
  14737. addl %ebx, %r9d
  14738. rorl $2, %ecx
  14739. movl %r13d, %edx
  14740. addl %ecx, %r9d
  14741. addl 60(%rsp), %r8d
  14742. movl %r14d, %ecx
  14743. movl %r10d, %ebx
  14744. xorl %r15d, %ecx
  14745. rorl $14, %edx
  14746. andl %r13d, %ecx
  14747. xorl %r13d, %edx
  14748. xorl %r15d, %ecx
  14749. rorl $5, %edx
  14750. addl %ecx, %r8d
  14751. xorl %r13d, %edx
  14752. xorl %r9d, %ebx
  14753. rorl $6, %edx
  14754. movl %r9d, %ecx
  14755. addl %edx, %r8d
  14756. rorl $9, %ecx
  14757. andl %ebx, %eax
  14758. xorl %r9d, %ecx
  14759. xorl %r10d, %eax
  14760. rorl $11, %ecx
  14761. addl %r8d, %r12d
  14762. xorl %r9d, %ecx
  14763. addl %eax, %r8d
  14764. rorl $2, %ecx
  14765. movl %r12d, %edx
  14766. addl %ecx, %r8d
  14767. # rnd_all_4: 5-8
  14768. addl 80(%rsp), %r15d
  14769. movl %r13d, %ecx
  14770. movl %r9d, %eax
  14771. xorl %r14d, %ecx
  14772. rorl $14, %edx
  14773. andl %r12d, %ecx
  14774. xorl %r12d, %edx
  14775. xorl %r14d, %ecx
  14776. rorl $5, %edx
  14777. addl %ecx, %r15d
  14778. xorl %r12d, %edx
  14779. xorl %r8d, %eax
  14780. rorl $6, %edx
  14781. movl %r8d, %ecx
  14782. addl %edx, %r15d
  14783. rorl $9, %ecx
  14784. andl %eax, %ebx
  14785. xorl %r8d, %ecx
  14786. xorl %r9d, %ebx
  14787. rorl $11, %ecx
  14788. addl %r15d, %r11d
  14789. xorl %r8d, %ecx
  14790. addl %ebx, %r15d
  14791. rorl $2, %ecx
  14792. movl %r11d, %edx
  14793. addl %ecx, %r15d
  14794. addl 84(%rsp), %r14d
  14795. movl %r12d, %ecx
  14796. movl %r8d, %ebx
  14797. xorl %r13d, %ecx
  14798. rorl $14, %edx
  14799. andl %r11d, %ecx
  14800. xorl %r11d, %edx
  14801. xorl %r13d, %ecx
  14802. rorl $5, %edx
  14803. addl %ecx, %r14d
  14804. xorl %r11d, %edx
  14805. xorl %r15d, %ebx
  14806. rorl $6, %edx
  14807. movl %r15d, %ecx
  14808. addl %edx, %r14d
  14809. rorl $9, %ecx
  14810. andl %ebx, %eax
  14811. xorl %r15d, %ecx
  14812. xorl %r8d, %eax
  14813. rorl $11, %ecx
  14814. addl %r14d, %r10d
  14815. xorl %r15d, %ecx
  14816. addl %eax, %r14d
  14817. rorl $2, %ecx
  14818. movl %r10d, %edx
  14819. addl %ecx, %r14d
  14820. addl 88(%rsp), %r13d
  14821. movl %r11d, %ecx
  14822. movl %r15d, %eax
  14823. xorl %r12d, %ecx
  14824. rorl $14, %edx
  14825. andl %r10d, %ecx
  14826. xorl %r10d, %edx
  14827. xorl %r12d, %ecx
  14828. rorl $5, %edx
  14829. addl %ecx, %r13d
  14830. xorl %r10d, %edx
  14831. xorl %r14d, %eax
  14832. rorl $6, %edx
  14833. movl %r14d, %ecx
  14834. addl %edx, %r13d
  14835. rorl $9, %ecx
  14836. andl %eax, %ebx
  14837. xorl %r14d, %ecx
  14838. xorl %r15d, %ebx
  14839. rorl $11, %ecx
  14840. addl %r13d, %r9d
  14841. xorl %r14d, %ecx
  14842. addl %ebx, %r13d
  14843. rorl $2, %ecx
  14844. movl %r9d, %edx
  14845. addl %ecx, %r13d
  14846. addl 92(%rsp), %r12d
  14847. movl %r10d, %ecx
  14848. movl %r14d, %ebx
  14849. xorl %r11d, %ecx
  14850. rorl $14, %edx
  14851. andl %r9d, %ecx
  14852. xorl %r9d, %edx
  14853. xorl %r11d, %ecx
  14854. rorl $5, %edx
  14855. addl %ecx, %r12d
  14856. xorl %r9d, %edx
  14857. xorl %r13d, %ebx
  14858. rorl $6, %edx
  14859. movl %r13d, %ecx
  14860. addl %edx, %r12d
  14861. rorl $9, %ecx
  14862. andl %ebx, %eax
  14863. xorl %r13d, %ecx
  14864. xorl %r14d, %eax
  14865. rorl $11, %ecx
  14866. addl %r12d, %r8d
  14867. xorl %r13d, %ecx
  14868. addl %eax, %r12d
  14869. rorl $2, %ecx
  14870. movl %r8d, %edx
  14871. addl %ecx, %r12d
  14872. # rnd_all_4: 7-10
  14873. addl 112(%rsp), %r11d
  14874. movl %r9d, %ecx
  14875. movl %r13d, %eax
  14876. xorl %r10d, %ecx
  14877. rorl $14, %edx
  14878. andl %r8d, %ecx
  14879. xorl %r8d, %edx
  14880. xorl %r10d, %ecx
  14881. rorl $5, %edx
  14882. addl %ecx, %r11d
  14883. xorl %r8d, %edx
  14884. xorl %r12d, %eax
  14885. rorl $6, %edx
  14886. movl %r12d, %ecx
  14887. addl %edx, %r11d
  14888. rorl $9, %ecx
  14889. andl %eax, %ebx
  14890. xorl %r12d, %ecx
  14891. xorl %r13d, %ebx
  14892. rorl $11, %ecx
  14893. addl %r11d, %r15d
  14894. xorl %r12d, %ecx
  14895. addl %ebx, %r11d
  14896. rorl $2, %ecx
  14897. movl %r15d, %edx
  14898. addl %ecx, %r11d
  14899. addl 116(%rsp), %r10d
  14900. movl %r8d, %ecx
  14901. movl %r12d, %ebx
  14902. xorl %r9d, %ecx
  14903. rorl $14, %edx
  14904. andl %r15d, %ecx
  14905. xorl %r15d, %edx
  14906. xorl %r9d, %ecx
  14907. rorl $5, %edx
  14908. addl %ecx, %r10d
  14909. xorl %r15d, %edx
  14910. xorl %r11d, %ebx
  14911. rorl $6, %edx
  14912. movl %r11d, %ecx
  14913. addl %edx, %r10d
  14914. rorl $9, %ecx
  14915. andl %ebx, %eax
  14916. xorl %r11d, %ecx
  14917. xorl %r12d, %eax
  14918. rorl $11, %ecx
  14919. addl %r10d, %r14d
  14920. xorl %r11d, %ecx
  14921. addl %eax, %r10d
  14922. rorl $2, %ecx
  14923. movl %r14d, %edx
  14924. addl %ecx, %r10d
  14925. addl 120(%rsp), %r9d
  14926. movl %r15d, %ecx
  14927. movl %r11d, %eax
  14928. xorl %r8d, %ecx
  14929. rorl $14, %edx
  14930. andl %r14d, %ecx
  14931. xorl %r14d, %edx
  14932. xorl %r8d, %ecx
  14933. rorl $5, %edx
  14934. addl %ecx, %r9d
  14935. xorl %r14d, %edx
  14936. xorl %r10d, %eax
  14937. rorl $6, %edx
  14938. movl %r10d, %ecx
  14939. addl %edx, %r9d
  14940. rorl $9, %ecx
  14941. andl %eax, %ebx
  14942. xorl %r10d, %ecx
  14943. xorl %r11d, %ebx
  14944. rorl $11, %ecx
  14945. addl %r9d, %r13d
  14946. xorl %r10d, %ecx
  14947. addl %ebx, %r9d
  14948. rorl $2, %ecx
  14949. movl %r13d, %edx
  14950. addl %ecx, %r9d
  14951. addl 124(%rsp), %r8d
  14952. movl %r14d, %ecx
  14953. movl %r10d, %ebx
  14954. xorl %r15d, %ecx
  14955. rorl $14, %edx
  14956. andl %r13d, %ecx
  14957. xorl %r13d, %edx
  14958. xorl %r15d, %ecx
  14959. rorl $5, %edx
  14960. addl %ecx, %r8d
  14961. xorl %r13d, %edx
  14962. xorl %r9d, %ebx
  14963. rorl $6, %edx
  14964. movl %r9d, %ecx
  14965. addl %edx, %r8d
  14966. rorl $9, %ecx
  14967. andl %ebx, %eax
  14968. xorl %r9d, %ecx
  14969. xorl %r10d, %eax
  14970. rorl $11, %ecx
  14971. addl %r8d, %r12d
  14972. xorl %r9d, %ecx
  14973. addl %eax, %r8d
  14974. rorl $2, %ecx
  14975. movl %r12d, %edx
  14976. addl %ecx, %r8d
  14977. # rnd_all_4: 9-12
  14978. addl 144(%rsp), %r15d
  14979. movl %r13d, %ecx
  14980. movl %r9d, %eax
  14981. xorl %r14d, %ecx
  14982. rorl $14, %edx
  14983. andl %r12d, %ecx
  14984. xorl %r12d, %edx
  14985. xorl %r14d, %ecx
  14986. rorl $5, %edx
  14987. addl %ecx, %r15d
  14988. xorl %r12d, %edx
  14989. xorl %r8d, %eax
  14990. rorl $6, %edx
  14991. movl %r8d, %ecx
  14992. addl %edx, %r15d
  14993. rorl $9, %ecx
  14994. andl %eax, %ebx
  14995. xorl %r8d, %ecx
  14996. xorl %r9d, %ebx
  14997. rorl $11, %ecx
  14998. addl %r15d, %r11d
  14999. xorl %r8d, %ecx
  15000. addl %ebx, %r15d
  15001. rorl $2, %ecx
  15002. movl %r11d, %edx
  15003. addl %ecx, %r15d
  15004. addl 148(%rsp), %r14d
  15005. movl %r12d, %ecx
  15006. movl %r8d, %ebx
  15007. xorl %r13d, %ecx
  15008. rorl $14, %edx
  15009. andl %r11d, %ecx
  15010. xorl %r11d, %edx
  15011. xorl %r13d, %ecx
  15012. rorl $5, %edx
  15013. addl %ecx, %r14d
  15014. xorl %r11d, %edx
  15015. xorl %r15d, %ebx
  15016. rorl $6, %edx
  15017. movl %r15d, %ecx
  15018. addl %edx, %r14d
  15019. rorl $9, %ecx
  15020. andl %ebx, %eax
  15021. xorl %r15d, %ecx
  15022. xorl %r8d, %eax
  15023. rorl $11, %ecx
  15024. addl %r14d, %r10d
  15025. xorl %r15d, %ecx
  15026. addl %eax, %r14d
  15027. rorl $2, %ecx
  15028. movl %r10d, %edx
  15029. addl %ecx, %r14d
  15030. addl 152(%rsp), %r13d
  15031. movl %r11d, %ecx
  15032. movl %r15d, %eax
  15033. xorl %r12d, %ecx
  15034. rorl $14, %edx
  15035. andl %r10d, %ecx
  15036. xorl %r10d, %edx
  15037. xorl %r12d, %ecx
  15038. rorl $5, %edx
  15039. addl %ecx, %r13d
  15040. xorl %r10d, %edx
  15041. xorl %r14d, %eax
  15042. rorl $6, %edx
  15043. movl %r14d, %ecx
  15044. addl %edx, %r13d
  15045. rorl $9, %ecx
  15046. andl %eax, %ebx
  15047. xorl %r14d, %ecx
  15048. xorl %r15d, %ebx
  15049. rorl $11, %ecx
  15050. addl %r13d, %r9d
  15051. xorl %r14d, %ecx
  15052. addl %ebx, %r13d
  15053. rorl $2, %ecx
  15054. movl %r9d, %edx
  15055. addl %ecx, %r13d
  15056. addl 156(%rsp), %r12d
  15057. movl %r10d, %ecx
  15058. movl %r14d, %ebx
  15059. xorl %r11d, %ecx
  15060. rorl $14, %edx
  15061. andl %r9d, %ecx
  15062. xorl %r9d, %edx
  15063. xorl %r11d, %ecx
  15064. rorl $5, %edx
  15065. addl %ecx, %r12d
  15066. xorl %r9d, %edx
  15067. xorl %r13d, %ebx
  15068. rorl $6, %edx
  15069. movl %r13d, %ecx
  15070. addl %edx, %r12d
  15071. rorl $9, %ecx
  15072. andl %ebx, %eax
  15073. xorl %r13d, %ecx
  15074. xorl %r14d, %eax
  15075. rorl $11, %ecx
  15076. addl %r12d, %r8d
  15077. xorl %r13d, %ecx
  15078. addl %eax, %r12d
  15079. rorl $2, %ecx
  15080. movl %r8d, %edx
  15081. addl %ecx, %r12d
  15082. # rnd_all_4: 11-14
  15083. addl 176(%rsp), %r11d
  15084. movl %r9d, %ecx
  15085. movl %r13d, %eax
  15086. xorl %r10d, %ecx
  15087. rorl $14, %edx
  15088. andl %r8d, %ecx
  15089. xorl %r8d, %edx
  15090. xorl %r10d, %ecx
  15091. rorl $5, %edx
  15092. addl %ecx, %r11d
  15093. xorl %r8d, %edx
  15094. xorl %r12d, %eax
  15095. rorl $6, %edx
  15096. movl %r12d, %ecx
  15097. addl %edx, %r11d
  15098. rorl $9, %ecx
  15099. andl %eax, %ebx
  15100. xorl %r12d, %ecx
  15101. xorl %r13d, %ebx
  15102. rorl $11, %ecx
  15103. addl %r11d, %r15d
  15104. xorl %r12d, %ecx
  15105. addl %ebx, %r11d
  15106. rorl $2, %ecx
  15107. movl %r15d, %edx
  15108. addl %ecx, %r11d
  15109. addl 180(%rsp), %r10d
  15110. movl %r8d, %ecx
  15111. movl %r12d, %ebx
  15112. xorl %r9d, %ecx
  15113. rorl $14, %edx
  15114. andl %r15d, %ecx
  15115. xorl %r15d, %edx
  15116. xorl %r9d, %ecx
  15117. rorl $5, %edx
  15118. addl %ecx, %r10d
  15119. xorl %r15d, %edx
  15120. xorl %r11d, %ebx
  15121. rorl $6, %edx
  15122. movl %r11d, %ecx
  15123. addl %edx, %r10d
  15124. rorl $9, %ecx
  15125. andl %ebx, %eax
  15126. xorl %r11d, %ecx
  15127. xorl %r12d, %eax
  15128. rorl $11, %ecx
  15129. addl %r10d, %r14d
  15130. xorl %r11d, %ecx
  15131. addl %eax, %r10d
  15132. rorl $2, %ecx
  15133. movl %r14d, %edx
  15134. addl %ecx, %r10d
  15135. addl 184(%rsp), %r9d
  15136. movl %r15d, %ecx
  15137. movl %r11d, %eax
  15138. xorl %r8d, %ecx
  15139. rorl $14, %edx
  15140. andl %r14d, %ecx
  15141. xorl %r14d, %edx
  15142. xorl %r8d, %ecx
  15143. rorl $5, %edx
  15144. addl %ecx, %r9d
  15145. xorl %r14d, %edx
  15146. xorl %r10d, %eax
  15147. rorl $6, %edx
  15148. movl %r10d, %ecx
  15149. addl %edx, %r9d
  15150. rorl $9, %ecx
  15151. andl %eax, %ebx
  15152. xorl %r10d, %ecx
  15153. xorl %r11d, %ebx
  15154. rorl $11, %ecx
  15155. addl %r9d, %r13d
  15156. xorl %r10d, %ecx
  15157. addl %ebx, %r9d
  15158. rorl $2, %ecx
  15159. movl %r13d, %edx
  15160. addl %ecx, %r9d
  15161. addl 188(%rsp), %r8d
  15162. movl %r14d, %ecx
  15163. movl %r10d, %ebx
  15164. xorl %r15d, %ecx
  15165. rorl $14, %edx
  15166. andl %r13d, %ecx
  15167. xorl %r13d, %edx
  15168. xorl %r15d, %ecx
  15169. rorl $5, %edx
  15170. addl %ecx, %r8d
  15171. xorl %r13d, %edx
  15172. xorl %r9d, %ebx
  15173. rorl $6, %edx
  15174. movl %r9d, %ecx
  15175. addl %edx, %r8d
  15176. rorl $9, %ecx
  15177. andl %ebx, %eax
  15178. xorl %r9d, %ecx
  15179. xorl %r10d, %eax
  15180. rorl $11, %ecx
  15181. addl %r8d, %r12d
  15182. xorl %r9d, %ecx
  15183. addl %eax, %r8d
  15184. rorl $2, %ecx
  15185. movl %r12d, %edx
  15186. addl %ecx, %r8d
  15187. # rnd_all_4: 13-16
  15188. addl 208(%rsp), %r15d
  15189. movl %r13d, %ecx
  15190. movl %r9d, %eax
  15191. xorl %r14d, %ecx
  15192. rorl $14, %edx
  15193. andl %r12d, %ecx
  15194. xorl %r12d, %edx
  15195. xorl %r14d, %ecx
  15196. rorl $5, %edx
  15197. addl %ecx, %r15d
  15198. xorl %r12d, %edx
  15199. xorl %r8d, %eax
  15200. rorl $6, %edx
  15201. movl %r8d, %ecx
  15202. addl %edx, %r15d
  15203. rorl $9, %ecx
  15204. andl %eax, %ebx
  15205. xorl %r8d, %ecx
  15206. xorl %r9d, %ebx
  15207. rorl $11, %ecx
  15208. addl %r15d, %r11d
  15209. xorl %r8d, %ecx
  15210. addl %ebx, %r15d
  15211. rorl $2, %ecx
  15212. movl %r11d, %edx
  15213. addl %ecx, %r15d
  15214. addl 212(%rsp), %r14d
  15215. movl %r12d, %ecx
  15216. movl %r8d, %ebx
  15217. xorl %r13d, %ecx
  15218. rorl $14, %edx
  15219. andl %r11d, %ecx
  15220. xorl %r11d, %edx
  15221. xorl %r13d, %ecx
  15222. rorl $5, %edx
  15223. addl %ecx, %r14d
  15224. xorl %r11d, %edx
  15225. xorl %r15d, %ebx
  15226. rorl $6, %edx
  15227. movl %r15d, %ecx
  15228. addl %edx, %r14d
  15229. rorl $9, %ecx
  15230. andl %ebx, %eax
  15231. xorl %r15d, %ecx
  15232. xorl %r8d, %eax
  15233. rorl $11, %ecx
  15234. addl %r14d, %r10d
  15235. xorl %r15d, %ecx
  15236. addl %eax, %r14d
  15237. rorl $2, %ecx
  15238. movl %r10d, %edx
  15239. addl %ecx, %r14d
  15240. addl 216(%rsp), %r13d
  15241. movl %r11d, %ecx
  15242. movl %r15d, %eax
  15243. xorl %r12d, %ecx
  15244. rorl $14, %edx
  15245. andl %r10d, %ecx
  15246. xorl %r10d, %edx
  15247. xorl %r12d, %ecx
  15248. rorl $5, %edx
  15249. addl %ecx, %r13d
  15250. xorl %r10d, %edx
  15251. xorl %r14d, %eax
  15252. rorl $6, %edx
  15253. movl %r14d, %ecx
  15254. addl %edx, %r13d
  15255. rorl $9, %ecx
  15256. andl %eax, %ebx
  15257. xorl %r14d, %ecx
  15258. xorl %r15d, %ebx
  15259. rorl $11, %ecx
  15260. addl %r13d, %r9d
  15261. xorl %r14d, %ecx
  15262. addl %ebx, %r13d
  15263. rorl $2, %ecx
  15264. movl %r9d, %edx
  15265. addl %ecx, %r13d
  15266. addl 220(%rsp), %r12d
  15267. movl %r10d, %ecx
  15268. movl %r14d, %ebx
  15269. xorl %r11d, %ecx
  15270. rorl $14, %edx
  15271. andl %r9d, %ecx
  15272. xorl %r9d, %edx
  15273. xorl %r11d, %ecx
  15274. rorl $5, %edx
  15275. addl %ecx, %r12d
  15276. xorl %r9d, %edx
  15277. xorl %r13d, %ebx
  15278. rorl $6, %edx
  15279. movl %r13d, %ecx
  15280. addl %edx, %r12d
  15281. rorl $9, %ecx
  15282. andl %ebx, %eax
  15283. xorl %r13d, %ecx
  15284. xorl %r14d, %eax
  15285. rorl $11, %ecx
  15286. addl %r12d, %r8d
  15287. xorl %r13d, %ecx
  15288. addl %eax, %r12d
  15289. rorl $2, %ecx
  15290. movl %r8d, %edx
  15291. addl %ecx, %r12d
  15292. # rnd_all_4: 15-18
  15293. addl 240(%rsp), %r11d
  15294. movl %r9d, %ecx
  15295. movl %r13d, %eax
  15296. xorl %r10d, %ecx
  15297. rorl $14, %edx
  15298. andl %r8d, %ecx
  15299. xorl %r8d, %edx
  15300. xorl %r10d, %ecx
  15301. rorl $5, %edx
  15302. addl %ecx, %r11d
  15303. xorl %r8d, %edx
  15304. xorl %r12d, %eax
  15305. rorl $6, %edx
  15306. movl %r12d, %ecx
  15307. addl %edx, %r11d
  15308. rorl $9, %ecx
  15309. andl %eax, %ebx
  15310. xorl %r12d, %ecx
  15311. xorl %r13d, %ebx
  15312. rorl $11, %ecx
  15313. addl %r11d, %r15d
  15314. xorl %r12d, %ecx
  15315. addl %ebx, %r11d
  15316. rorl $2, %ecx
  15317. movl %r15d, %edx
  15318. addl %ecx, %r11d
  15319. addl 244(%rsp), %r10d
  15320. movl %r8d, %ecx
  15321. movl %r12d, %ebx
  15322. xorl %r9d, %ecx
  15323. rorl $14, %edx
  15324. andl %r15d, %ecx
  15325. xorl %r15d, %edx
  15326. xorl %r9d, %ecx
  15327. rorl $5, %edx
  15328. addl %ecx, %r10d
  15329. xorl %r15d, %edx
  15330. xorl %r11d, %ebx
  15331. rorl $6, %edx
  15332. movl %r11d, %ecx
  15333. addl %edx, %r10d
  15334. rorl $9, %ecx
  15335. andl %ebx, %eax
  15336. xorl %r11d, %ecx
  15337. xorl %r12d, %eax
  15338. rorl $11, %ecx
  15339. addl %r10d, %r14d
  15340. xorl %r11d, %ecx
  15341. addl %eax, %r10d
  15342. rorl $2, %ecx
  15343. movl %r14d, %edx
  15344. addl %ecx, %r10d
  15345. addl 248(%rsp), %r9d
  15346. movl %r15d, %ecx
  15347. movl %r11d, %eax
  15348. xorl %r8d, %ecx
  15349. rorl $14, %edx
  15350. andl %r14d, %ecx
  15351. xorl %r14d, %edx
  15352. xorl %r8d, %ecx
  15353. rorl $5, %edx
  15354. addl %ecx, %r9d
  15355. xorl %r14d, %edx
  15356. xorl %r10d, %eax
  15357. rorl $6, %edx
  15358. movl %r10d, %ecx
  15359. addl %edx, %r9d
  15360. rorl $9, %ecx
  15361. andl %eax, %ebx
  15362. xorl %r10d, %ecx
  15363. xorl %r11d, %ebx
  15364. rorl $11, %ecx
  15365. addl %r9d, %r13d
  15366. xorl %r10d, %ecx
  15367. addl %ebx, %r9d
  15368. rorl $2, %ecx
  15369. movl %r13d, %edx
  15370. addl %ecx, %r9d
  15371. addl 252(%rsp), %r8d
  15372. movl %r14d, %ecx
  15373. movl %r10d, %ebx
  15374. xorl %r15d, %ecx
  15375. rorl $14, %edx
  15376. andl %r13d, %ecx
  15377. xorl %r13d, %edx
  15378. xorl %r15d, %ecx
  15379. rorl $5, %edx
  15380. addl %ecx, %r8d
  15381. xorl %r13d, %edx
  15382. xorl %r9d, %ebx
  15383. rorl $6, %edx
  15384. movl %r9d, %ecx
  15385. addl %edx, %r8d
  15386. rorl $9, %ecx
  15387. andl %ebx, %eax
  15388. xorl %r9d, %ecx
  15389. xorl %r10d, %eax
  15390. rorl $11, %ecx
  15391. addl %r8d, %r12d
  15392. xorl %r9d, %ecx
  15393. addl %eax, %r8d
  15394. rorl $2, %ecx
  15395. movl %r12d, %edx
  15396. addl %ecx, %r8d
  15397. # rnd_all_4: 17-20
  15398. addl 272(%rsp), %r15d
  15399. movl %r13d, %ecx
  15400. movl %r9d, %eax
  15401. xorl %r14d, %ecx
  15402. rorl $14, %edx
  15403. andl %r12d, %ecx
  15404. xorl %r12d, %edx
  15405. xorl %r14d, %ecx
  15406. rorl $5, %edx
  15407. addl %ecx, %r15d
  15408. xorl %r12d, %edx
  15409. xorl %r8d, %eax
  15410. rorl $6, %edx
  15411. movl %r8d, %ecx
  15412. addl %edx, %r15d
  15413. rorl $9, %ecx
  15414. andl %eax, %ebx
  15415. xorl %r8d, %ecx
  15416. xorl %r9d, %ebx
  15417. rorl $11, %ecx
  15418. addl %r15d, %r11d
  15419. xorl %r8d, %ecx
  15420. addl %ebx, %r15d
  15421. rorl $2, %ecx
  15422. movl %r11d, %edx
  15423. addl %ecx, %r15d
  15424. addl 276(%rsp), %r14d
  15425. movl %r12d, %ecx
  15426. movl %r8d, %ebx
  15427. xorl %r13d, %ecx
  15428. rorl $14, %edx
  15429. andl %r11d, %ecx
  15430. xorl %r11d, %edx
  15431. xorl %r13d, %ecx
  15432. rorl $5, %edx
  15433. addl %ecx, %r14d
  15434. xorl %r11d, %edx
  15435. xorl %r15d, %ebx
  15436. rorl $6, %edx
  15437. movl %r15d, %ecx
  15438. addl %edx, %r14d
  15439. rorl $9, %ecx
  15440. andl %ebx, %eax
  15441. xorl %r15d, %ecx
  15442. xorl %r8d, %eax
  15443. rorl $11, %ecx
  15444. addl %r14d, %r10d
  15445. xorl %r15d, %ecx
  15446. addl %eax, %r14d
  15447. rorl $2, %ecx
  15448. movl %r10d, %edx
  15449. addl %ecx, %r14d
  15450. addl 280(%rsp), %r13d
  15451. movl %r11d, %ecx
  15452. movl %r15d, %eax
  15453. xorl %r12d, %ecx
  15454. rorl $14, %edx
  15455. andl %r10d, %ecx
  15456. xorl %r10d, %edx
  15457. xorl %r12d, %ecx
  15458. rorl $5, %edx
  15459. addl %ecx, %r13d
  15460. xorl %r10d, %edx
  15461. xorl %r14d, %eax
  15462. rorl $6, %edx
  15463. movl %r14d, %ecx
  15464. addl %edx, %r13d
  15465. rorl $9, %ecx
  15466. andl %eax, %ebx
  15467. xorl %r14d, %ecx
  15468. xorl %r15d, %ebx
  15469. rorl $11, %ecx
  15470. addl %r13d, %r9d
  15471. xorl %r14d, %ecx
  15472. addl %ebx, %r13d
  15473. rorl $2, %ecx
  15474. movl %r9d, %edx
  15475. addl %ecx, %r13d
  15476. addl 284(%rsp), %r12d
  15477. movl %r10d, %ecx
  15478. movl %r14d, %ebx
  15479. xorl %r11d, %ecx
  15480. rorl $14, %edx
  15481. andl %r9d, %ecx
  15482. xorl %r9d, %edx
  15483. xorl %r11d, %ecx
  15484. rorl $5, %edx
  15485. addl %ecx, %r12d
  15486. xorl %r9d, %edx
  15487. xorl %r13d, %ebx
  15488. rorl $6, %edx
  15489. movl %r13d, %ecx
  15490. addl %edx, %r12d
  15491. rorl $9, %ecx
  15492. andl %ebx, %eax
  15493. xorl %r13d, %ecx
  15494. xorl %r14d, %eax
  15495. rorl $11, %ecx
  15496. addl %r12d, %r8d
  15497. xorl %r13d, %ecx
  15498. addl %eax, %r12d
  15499. rorl $2, %ecx
  15500. movl %r8d, %edx
  15501. addl %ecx, %r12d
  15502. # rnd_all_4: 19-22
  15503. addl 304(%rsp), %r11d
  15504. movl %r9d, %ecx
  15505. movl %r13d, %eax
  15506. xorl %r10d, %ecx
  15507. rorl $14, %edx
  15508. andl %r8d, %ecx
  15509. xorl %r8d, %edx
  15510. xorl %r10d, %ecx
  15511. rorl $5, %edx
  15512. addl %ecx, %r11d
  15513. xorl %r8d, %edx
  15514. xorl %r12d, %eax
  15515. rorl $6, %edx
  15516. movl %r12d, %ecx
  15517. addl %edx, %r11d
  15518. rorl $9, %ecx
  15519. andl %eax, %ebx
  15520. xorl %r12d, %ecx
  15521. xorl %r13d, %ebx
  15522. rorl $11, %ecx
  15523. addl %r11d, %r15d
  15524. xorl %r12d, %ecx
  15525. addl %ebx, %r11d
  15526. rorl $2, %ecx
  15527. movl %r15d, %edx
  15528. addl %ecx, %r11d
  15529. addl 308(%rsp), %r10d
  15530. movl %r8d, %ecx
  15531. movl %r12d, %ebx
  15532. xorl %r9d, %ecx
  15533. rorl $14, %edx
  15534. andl %r15d, %ecx
  15535. xorl %r15d, %edx
  15536. xorl %r9d, %ecx
  15537. rorl $5, %edx
  15538. addl %ecx, %r10d
  15539. xorl %r15d, %edx
  15540. xorl %r11d, %ebx
  15541. rorl $6, %edx
  15542. movl %r11d, %ecx
  15543. addl %edx, %r10d
  15544. rorl $9, %ecx
  15545. andl %ebx, %eax
  15546. xorl %r11d, %ecx
  15547. xorl %r12d, %eax
  15548. rorl $11, %ecx
  15549. addl %r10d, %r14d
  15550. xorl %r11d, %ecx
  15551. addl %eax, %r10d
  15552. rorl $2, %ecx
  15553. movl %r14d, %edx
  15554. addl %ecx, %r10d
  15555. addl 312(%rsp), %r9d
  15556. movl %r15d, %ecx
  15557. movl %r11d, %eax
  15558. xorl %r8d, %ecx
  15559. rorl $14, %edx
  15560. andl %r14d, %ecx
  15561. xorl %r14d, %edx
  15562. xorl %r8d, %ecx
  15563. rorl $5, %edx
  15564. addl %ecx, %r9d
  15565. xorl %r14d, %edx
  15566. xorl %r10d, %eax
  15567. rorl $6, %edx
  15568. movl %r10d, %ecx
  15569. addl %edx, %r9d
  15570. rorl $9, %ecx
  15571. andl %eax, %ebx
  15572. xorl %r10d, %ecx
  15573. xorl %r11d, %ebx
  15574. rorl $11, %ecx
  15575. addl %r9d, %r13d
  15576. xorl %r10d, %ecx
  15577. addl %ebx, %r9d
  15578. rorl $2, %ecx
  15579. movl %r13d, %edx
  15580. addl %ecx, %r9d
  15581. addl 316(%rsp), %r8d
  15582. movl %r14d, %ecx
  15583. movl %r10d, %ebx
  15584. xorl %r15d, %ecx
  15585. rorl $14, %edx
  15586. andl %r13d, %ecx
  15587. xorl %r13d, %edx
  15588. xorl %r15d, %ecx
  15589. rorl $5, %edx
  15590. addl %ecx, %r8d
  15591. xorl %r13d, %edx
  15592. xorl %r9d, %ebx
  15593. rorl $6, %edx
  15594. movl %r9d, %ecx
  15595. addl %edx, %r8d
  15596. rorl $9, %ecx
  15597. andl %ebx, %eax
  15598. xorl %r9d, %ecx
  15599. xorl %r10d, %eax
  15600. rorl $11, %ecx
  15601. addl %r8d, %r12d
  15602. xorl %r9d, %ecx
  15603. addl %eax, %r8d
  15604. rorl $2, %ecx
  15605. movl %r12d, %edx
  15606. addl %ecx, %r8d
  15607. # rnd_all_4: 21-24
  15608. addl 336(%rsp), %r15d
  15609. movl %r13d, %ecx
  15610. movl %r9d, %eax
  15611. xorl %r14d, %ecx
  15612. rorl $14, %edx
  15613. andl %r12d, %ecx
  15614. xorl %r12d, %edx
  15615. xorl %r14d, %ecx
  15616. rorl $5, %edx
  15617. addl %ecx, %r15d
  15618. xorl %r12d, %edx
  15619. xorl %r8d, %eax
  15620. rorl $6, %edx
  15621. movl %r8d, %ecx
  15622. addl %edx, %r15d
  15623. rorl $9, %ecx
  15624. andl %eax, %ebx
  15625. xorl %r8d, %ecx
  15626. xorl %r9d, %ebx
  15627. rorl $11, %ecx
  15628. addl %r15d, %r11d
  15629. xorl %r8d, %ecx
  15630. addl %ebx, %r15d
  15631. rorl $2, %ecx
  15632. movl %r11d, %edx
  15633. addl %ecx, %r15d
  15634. addl 340(%rsp), %r14d
  15635. movl %r12d, %ecx
  15636. movl %r8d, %ebx
  15637. xorl %r13d, %ecx
  15638. rorl $14, %edx
  15639. andl %r11d, %ecx
  15640. xorl %r11d, %edx
  15641. xorl %r13d, %ecx
  15642. rorl $5, %edx
  15643. addl %ecx, %r14d
  15644. xorl %r11d, %edx
  15645. xorl %r15d, %ebx
  15646. rorl $6, %edx
  15647. movl %r15d, %ecx
  15648. addl %edx, %r14d
  15649. rorl $9, %ecx
  15650. andl %ebx, %eax
  15651. xorl %r15d, %ecx
  15652. xorl %r8d, %eax
  15653. rorl $11, %ecx
  15654. addl %r14d, %r10d
  15655. xorl %r15d, %ecx
  15656. addl %eax, %r14d
  15657. rorl $2, %ecx
  15658. movl %r10d, %edx
  15659. addl %ecx, %r14d
  15660. addl 344(%rsp), %r13d
  15661. movl %r11d, %ecx
  15662. movl %r15d, %eax
  15663. xorl %r12d, %ecx
  15664. rorl $14, %edx
  15665. andl %r10d, %ecx
  15666. xorl %r10d, %edx
  15667. xorl %r12d, %ecx
  15668. rorl $5, %edx
  15669. addl %ecx, %r13d
  15670. xorl %r10d, %edx
  15671. xorl %r14d, %eax
  15672. rorl $6, %edx
  15673. movl %r14d, %ecx
  15674. addl %edx, %r13d
  15675. rorl $9, %ecx
  15676. andl %eax, %ebx
  15677. xorl %r14d, %ecx
  15678. xorl %r15d, %ebx
  15679. rorl $11, %ecx
  15680. addl %r13d, %r9d
  15681. xorl %r14d, %ecx
  15682. addl %ebx, %r13d
  15683. rorl $2, %ecx
  15684. movl %r9d, %edx
  15685. addl %ecx, %r13d
  15686. addl 348(%rsp), %r12d
  15687. movl %r10d, %ecx
  15688. movl %r14d, %ebx
  15689. xorl %r11d, %ecx
  15690. rorl $14, %edx
  15691. andl %r9d, %ecx
  15692. xorl %r9d, %edx
  15693. xorl %r11d, %ecx
  15694. rorl $5, %edx
  15695. addl %ecx, %r12d
  15696. xorl %r9d, %edx
  15697. xorl %r13d, %ebx
  15698. rorl $6, %edx
  15699. movl %r13d, %ecx
  15700. addl %edx, %r12d
  15701. rorl $9, %ecx
  15702. andl %ebx, %eax
  15703. xorl %r13d, %ecx
  15704. xorl %r14d, %eax
  15705. rorl $11, %ecx
  15706. addl %r12d, %r8d
  15707. xorl %r13d, %ecx
  15708. addl %eax, %r12d
  15709. rorl $2, %ecx
  15710. movl %r8d, %edx
  15711. addl %ecx, %r12d
  15712. # rnd_all_4: 23-26
  15713. addl 368(%rsp), %r11d
  15714. movl %r9d, %ecx
  15715. movl %r13d, %eax
  15716. xorl %r10d, %ecx
  15717. rorl $14, %edx
  15718. andl %r8d, %ecx
  15719. xorl %r8d, %edx
  15720. xorl %r10d, %ecx
  15721. rorl $5, %edx
  15722. addl %ecx, %r11d
  15723. xorl %r8d, %edx
  15724. xorl %r12d, %eax
  15725. rorl $6, %edx
  15726. movl %r12d, %ecx
  15727. addl %edx, %r11d
  15728. rorl $9, %ecx
  15729. andl %eax, %ebx
  15730. xorl %r12d, %ecx
  15731. xorl %r13d, %ebx
  15732. rorl $11, %ecx
  15733. addl %r11d, %r15d
  15734. xorl %r12d, %ecx
  15735. addl %ebx, %r11d
  15736. rorl $2, %ecx
  15737. movl %r15d, %edx
  15738. addl %ecx, %r11d
  15739. addl 372(%rsp), %r10d
  15740. movl %r8d, %ecx
  15741. movl %r12d, %ebx
  15742. xorl %r9d, %ecx
  15743. rorl $14, %edx
  15744. andl %r15d, %ecx
  15745. xorl %r15d, %edx
  15746. xorl %r9d, %ecx
  15747. rorl $5, %edx
  15748. addl %ecx, %r10d
  15749. xorl %r15d, %edx
  15750. xorl %r11d, %ebx
  15751. rorl $6, %edx
  15752. movl %r11d, %ecx
  15753. addl %edx, %r10d
  15754. rorl $9, %ecx
  15755. andl %ebx, %eax
  15756. xorl %r11d, %ecx
  15757. xorl %r12d, %eax
  15758. rorl $11, %ecx
  15759. addl %r10d, %r14d
  15760. xorl %r11d, %ecx
  15761. addl %eax, %r10d
  15762. rorl $2, %ecx
  15763. movl %r14d, %edx
  15764. addl %ecx, %r10d
  15765. addl 376(%rsp), %r9d
  15766. movl %r15d, %ecx
  15767. movl %r11d, %eax
  15768. xorl %r8d, %ecx
  15769. rorl $14, %edx
  15770. andl %r14d, %ecx
  15771. xorl %r14d, %edx
  15772. xorl %r8d, %ecx
  15773. rorl $5, %edx
  15774. addl %ecx, %r9d
  15775. xorl %r14d, %edx
  15776. xorl %r10d, %eax
  15777. rorl $6, %edx
  15778. movl %r10d, %ecx
  15779. addl %edx, %r9d
  15780. rorl $9, %ecx
  15781. andl %eax, %ebx
  15782. xorl %r10d, %ecx
  15783. xorl %r11d, %ebx
  15784. rorl $11, %ecx
  15785. addl %r9d, %r13d
  15786. xorl %r10d, %ecx
  15787. addl %ebx, %r9d
  15788. rorl $2, %ecx
  15789. movl %r13d, %edx
  15790. addl %ecx, %r9d
  15791. addl 380(%rsp), %r8d
  15792. movl %r14d, %ecx
  15793. movl %r10d, %ebx
  15794. xorl %r15d, %ecx
  15795. rorl $14, %edx
  15796. andl %r13d, %ecx
  15797. xorl %r13d, %edx
  15798. xorl %r15d, %ecx
  15799. rorl $5, %edx
  15800. addl %ecx, %r8d
  15801. xorl %r13d, %edx
  15802. xorl %r9d, %ebx
  15803. rorl $6, %edx
  15804. movl %r9d, %ecx
  15805. addl %edx, %r8d
  15806. rorl $9, %ecx
  15807. andl %ebx, %eax
  15808. xorl %r9d, %ecx
  15809. xorl %r10d, %eax
  15810. rorl $11, %ecx
  15811. addl %r8d, %r12d
  15812. xorl %r9d, %ecx
  15813. addl %eax, %r8d
  15814. rorl $2, %ecx
  15815. movl %r12d, %edx
  15816. addl %ecx, %r8d
  15817. # rnd_all_4: 25-28
  15818. addl 400(%rsp), %r15d
  15819. movl %r13d, %ecx
  15820. movl %r9d, %eax
  15821. xorl %r14d, %ecx
  15822. rorl $14, %edx
  15823. andl %r12d, %ecx
  15824. xorl %r12d, %edx
  15825. xorl %r14d, %ecx
  15826. rorl $5, %edx
  15827. addl %ecx, %r15d
  15828. xorl %r12d, %edx
  15829. xorl %r8d, %eax
  15830. rorl $6, %edx
  15831. movl %r8d, %ecx
  15832. addl %edx, %r15d
  15833. rorl $9, %ecx
  15834. andl %eax, %ebx
  15835. xorl %r8d, %ecx
  15836. xorl %r9d, %ebx
  15837. rorl $11, %ecx
  15838. addl %r15d, %r11d
  15839. xorl %r8d, %ecx
  15840. addl %ebx, %r15d
  15841. rorl $2, %ecx
  15842. movl %r11d, %edx
  15843. addl %ecx, %r15d
  15844. addl 404(%rsp), %r14d
  15845. movl %r12d, %ecx
  15846. movl %r8d, %ebx
  15847. xorl %r13d, %ecx
  15848. rorl $14, %edx
  15849. andl %r11d, %ecx
  15850. xorl %r11d, %edx
  15851. xorl %r13d, %ecx
  15852. rorl $5, %edx
  15853. addl %ecx, %r14d
  15854. xorl %r11d, %edx
  15855. xorl %r15d, %ebx
  15856. rorl $6, %edx
  15857. movl %r15d, %ecx
  15858. addl %edx, %r14d
  15859. rorl $9, %ecx
  15860. andl %ebx, %eax
  15861. xorl %r15d, %ecx
  15862. xorl %r8d, %eax
  15863. rorl $11, %ecx
  15864. addl %r14d, %r10d
  15865. xorl %r15d, %ecx
  15866. addl %eax, %r14d
  15867. rorl $2, %ecx
  15868. movl %r10d, %edx
  15869. addl %ecx, %r14d
  15870. addl 408(%rsp), %r13d
  15871. movl %r11d, %ecx
  15872. movl %r15d, %eax
  15873. xorl %r12d, %ecx
  15874. rorl $14, %edx
  15875. andl %r10d, %ecx
  15876. xorl %r10d, %edx
  15877. xorl %r12d, %ecx
  15878. rorl $5, %edx
  15879. addl %ecx, %r13d
  15880. xorl %r10d, %edx
  15881. xorl %r14d, %eax
  15882. rorl $6, %edx
  15883. movl %r14d, %ecx
  15884. addl %edx, %r13d
  15885. rorl $9, %ecx
  15886. andl %eax, %ebx
  15887. xorl %r14d, %ecx
  15888. xorl %r15d, %ebx
  15889. rorl $11, %ecx
  15890. addl %r13d, %r9d
  15891. xorl %r14d, %ecx
  15892. addl %ebx, %r13d
  15893. rorl $2, %ecx
  15894. movl %r9d, %edx
  15895. addl %ecx, %r13d
  15896. addl 412(%rsp), %r12d
  15897. movl %r10d, %ecx
  15898. movl %r14d, %ebx
  15899. xorl %r11d, %ecx
  15900. rorl $14, %edx
  15901. andl %r9d, %ecx
  15902. xorl %r9d, %edx
  15903. xorl %r11d, %ecx
  15904. rorl $5, %edx
  15905. addl %ecx, %r12d
  15906. xorl %r9d, %edx
  15907. xorl %r13d, %ebx
  15908. rorl $6, %edx
  15909. movl %r13d, %ecx
  15910. addl %edx, %r12d
  15911. rorl $9, %ecx
  15912. andl %ebx, %eax
  15913. xorl %r13d, %ecx
  15914. xorl %r14d, %eax
  15915. rorl $11, %ecx
  15916. addl %r12d, %r8d
  15917. xorl %r13d, %ecx
  15918. addl %eax, %r12d
  15919. rorl $2, %ecx
  15920. movl %r8d, %edx
  15921. addl %ecx, %r12d
  15922. # rnd_all_4: 27-30
  15923. addl 432(%rsp), %r11d
  15924. movl %r9d, %ecx
  15925. movl %r13d, %eax
  15926. xorl %r10d, %ecx
  15927. rorl $14, %edx
  15928. andl %r8d, %ecx
  15929. xorl %r8d, %edx
  15930. xorl %r10d, %ecx
  15931. rorl $5, %edx
  15932. addl %ecx, %r11d
  15933. xorl %r8d, %edx
  15934. xorl %r12d, %eax
  15935. rorl $6, %edx
  15936. movl %r12d, %ecx
  15937. addl %edx, %r11d
  15938. rorl $9, %ecx
  15939. andl %eax, %ebx
  15940. xorl %r12d, %ecx
  15941. xorl %r13d, %ebx
  15942. rorl $11, %ecx
  15943. addl %r11d, %r15d
  15944. xorl %r12d, %ecx
  15945. addl %ebx, %r11d
  15946. rorl $2, %ecx
  15947. movl %r15d, %edx
  15948. addl %ecx, %r11d
  15949. addl 436(%rsp), %r10d
  15950. movl %r8d, %ecx
  15951. movl %r12d, %ebx
  15952. xorl %r9d, %ecx
  15953. rorl $14, %edx
  15954. andl %r15d, %ecx
  15955. xorl %r15d, %edx
  15956. xorl %r9d, %ecx
  15957. rorl $5, %edx
  15958. addl %ecx, %r10d
  15959. xorl %r15d, %edx
  15960. xorl %r11d, %ebx
  15961. rorl $6, %edx
  15962. movl %r11d, %ecx
  15963. addl %edx, %r10d
  15964. rorl $9, %ecx
  15965. andl %ebx, %eax
  15966. xorl %r11d, %ecx
  15967. xorl %r12d, %eax
  15968. rorl $11, %ecx
  15969. addl %r10d, %r14d
  15970. xorl %r11d, %ecx
  15971. addl %eax, %r10d
  15972. rorl $2, %ecx
  15973. movl %r14d, %edx
  15974. addl %ecx, %r10d
  15975. addl 440(%rsp), %r9d
  15976. movl %r15d, %ecx
  15977. movl %r11d, %eax
  15978. xorl %r8d, %ecx
  15979. rorl $14, %edx
  15980. andl %r14d, %ecx
  15981. xorl %r14d, %edx
  15982. xorl %r8d, %ecx
  15983. rorl $5, %edx
  15984. addl %ecx, %r9d
  15985. xorl %r14d, %edx
  15986. xorl %r10d, %eax
  15987. rorl $6, %edx
  15988. movl %r10d, %ecx
  15989. addl %edx, %r9d
  15990. rorl $9, %ecx
  15991. andl %eax, %ebx
  15992. xorl %r10d, %ecx
  15993. xorl %r11d, %ebx
  15994. rorl $11, %ecx
  15995. addl %r9d, %r13d
  15996. xorl %r10d, %ecx
  15997. addl %ebx, %r9d
  15998. rorl $2, %ecx
  15999. movl %r13d, %edx
  16000. addl %ecx, %r9d
  16001. addl 444(%rsp), %r8d
  16002. movl %r14d, %ecx
  16003. movl %r10d, %ebx
  16004. xorl %r15d, %ecx
  16005. rorl $14, %edx
  16006. andl %r13d, %ecx
  16007. xorl %r13d, %edx
  16008. xorl %r15d, %ecx
  16009. rorl $5, %edx
  16010. addl %ecx, %r8d
  16011. xorl %r13d, %edx
  16012. xorl %r9d, %ebx
  16013. rorl $6, %edx
  16014. movl %r9d, %ecx
  16015. addl %edx, %r8d
  16016. rorl $9, %ecx
  16017. andl %ebx, %eax
  16018. xorl %r9d, %ecx
  16019. xorl %r10d, %eax
  16020. rorl $11, %ecx
  16021. addl %r8d, %r12d
  16022. xorl %r9d, %ecx
  16023. addl %eax, %r8d
  16024. rorl $2, %ecx
  16025. movl %r12d, %edx
  16026. addl %ecx, %r8d
  16027. # rnd_all_4: 29-32
  16028. addl 464(%rsp), %r15d
  16029. movl %r13d, %ecx
  16030. movl %r9d, %eax
  16031. xorl %r14d, %ecx
  16032. rorl $14, %edx
  16033. andl %r12d, %ecx
  16034. xorl %r12d, %edx
  16035. xorl %r14d, %ecx
  16036. rorl $5, %edx
  16037. addl %ecx, %r15d
  16038. xorl %r12d, %edx
  16039. xorl %r8d, %eax
  16040. rorl $6, %edx
  16041. movl %r8d, %ecx
  16042. addl %edx, %r15d
  16043. rorl $9, %ecx
  16044. andl %eax, %ebx
  16045. xorl %r8d, %ecx
  16046. xorl %r9d, %ebx
  16047. rorl $11, %ecx
  16048. addl %r15d, %r11d
  16049. xorl %r8d, %ecx
  16050. addl %ebx, %r15d
  16051. rorl $2, %ecx
  16052. movl %r11d, %edx
  16053. addl %ecx, %r15d
  16054. addl 468(%rsp), %r14d
  16055. movl %r12d, %ecx
  16056. movl %r8d, %ebx
  16057. xorl %r13d, %ecx
  16058. rorl $14, %edx
  16059. andl %r11d, %ecx
  16060. xorl %r11d, %edx
  16061. xorl %r13d, %ecx
  16062. rorl $5, %edx
  16063. addl %ecx, %r14d
  16064. xorl %r11d, %edx
  16065. xorl %r15d, %ebx
  16066. rorl $6, %edx
  16067. movl %r15d, %ecx
  16068. addl %edx, %r14d
  16069. rorl $9, %ecx
  16070. andl %ebx, %eax
  16071. xorl %r15d, %ecx
  16072. xorl %r8d, %eax
  16073. rorl $11, %ecx
  16074. addl %r14d, %r10d
  16075. xorl %r15d, %ecx
  16076. addl %eax, %r14d
  16077. rorl $2, %ecx
  16078. movl %r10d, %edx
  16079. addl %ecx, %r14d
  16080. addl 472(%rsp), %r13d
  16081. movl %r11d, %ecx
  16082. movl %r15d, %eax
  16083. xorl %r12d, %ecx
  16084. rorl $14, %edx
  16085. andl %r10d, %ecx
  16086. xorl %r10d, %edx
  16087. xorl %r12d, %ecx
  16088. rorl $5, %edx
  16089. addl %ecx, %r13d
  16090. xorl %r10d, %edx
  16091. xorl %r14d, %eax
  16092. rorl $6, %edx
  16093. movl %r14d, %ecx
  16094. addl %edx, %r13d
  16095. rorl $9, %ecx
  16096. andl %eax, %ebx
  16097. xorl %r14d, %ecx
  16098. xorl %r15d, %ebx
  16099. rorl $11, %ecx
  16100. addl %r13d, %r9d
  16101. xorl %r14d, %ecx
  16102. addl %ebx, %r13d
  16103. rorl $2, %ecx
  16104. movl %r9d, %edx
  16105. addl %ecx, %r13d
  16106. addl 476(%rsp), %r12d
  16107. movl %r10d, %ecx
  16108. movl %r14d, %ebx
  16109. xorl %r11d, %ecx
  16110. rorl $14, %edx
  16111. andl %r9d, %ecx
  16112. xorl %r9d, %edx
  16113. xorl %r11d, %ecx
  16114. rorl $5, %edx
  16115. addl %ecx, %r12d
  16116. xorl %r9d, %edx
  16117. xorl %r13d, %ebx
  16118. rorl $6, %edx
  16119. movl %r13d, %ecx
  16120. addl %edx, %r12d
  16121. rorl $9, %ecx
  16122. andl %ebx, %eax
  16123. xorl %r13d, %ecx
  16124. xorl %r14d, %eax
  16125. rorl $11, %ecx
  16126. addl %r12d, %r8d
  16127. xorl %r13d, %ecx
  16128. addl %eax, %r12d
  16129. rorl $2, %ecx
  16130. movl %r8d, %edx
  16131. addl %ecx, %r12d
  16132. # rnd_all_4: 31-34
  16133. addl 496(%rsp), %r11d
  16134. movl %r9d, %ecx
  16135. movl %r13d, %eax
  16136. xorl %r10d, %ecx
  16137. rorl $14, %edx
  16138. andl %r8d, %ecx
  16139. xorl %r8d, %edx
  16140. xorl %r10d, %ecx
  16141. rorl $5, %edx
  16142. addl %ecx, %r11d
  16143. xorl %r8d, %edx
  16144. xorl %r12d, %eax
  16145. rorl $6, %edx
  16146. movl %r12d, %ecx
  16147. addl %edx, %r11d
  16148. rorl $9, %ecx
  16149. andl %eax, %ebx
  16150. xorl %r12d, %ecx
  16151. xorl %r13d, %ebx
  16152. rorl $11, %ecx
  16153. addl %r11d, %r15d
  16154. xorl %r12d, %ecx
  16155. addl %ebx, %r11d
  16156. rorl $2, %ecx
  16157. movl %r15d, %edx
  16158. addl %ecx, %r11d
  16159. addl 500(%rsp), %r10d
  16160. movl %r8d, %ecx
  16161. movl %r12d, %ebx
  16162. xorl %r9d, %ecx
  16163. rorl $14, %edx
  16164. andl %r15d, %ecx
  16165. xorl %r15d, %edx
  16166. xorl %r9d, %ecx
  16167. rorl $5, %edx
  16168. addl %ecx, %r10d
  16169. xorl %r15d, %edx
  16170. xorl %r11d, %ebx
  16171. rorl $6, %edx
  16172. movl %r11d, %ecx
  16173. addl %edx, %r10d
  16174. rorl $9, %ecx
  16175. andl %ebx, %eax
  16176. xorl %r11d, %ecx
  16177. xorl %r12d, %eax
  16178. rorl $11, %ecx
  16179. addl %r10d, %r14d
  16180. xorl %r11d, %ecx
  16181. addl %eax, %r10d
  16182. rorl $2, %ecx
  16183. movl %r14d, %edx
  16184. addl %ecx, %r10d
  16185. addl 504(%rsp), %r9d
  16186. movl %r15d, %ecx
  16187. movl %r11d, %eax
  16188. xorl %r8d, %ecx
  16189. rorl $14, %edx
  16190. andl %r14d, %ecx
  16191. xorl %r14d, %edx
  16192. xorl %r8d, %ecx
  16193. rorl $5, %edx
  16194. addl %ecx, %r9d
  16195. xorl %r14d, %edx
  16196. xorl %r10d, %eax
  16197. rorl $6, %edx
  16198. movl %r10d, %ecx
  16199. addl %edx, %r9d
  16200. rorl $9, %ecx
  16201. andl %eax, %ebx
  16202. xorl %r10d, %ecx
  16203. xorl %r11d, %ebx
  16204. rorl $11, %ecx
  16205. addl %r9d, %r13d
  16206. xorl %r10d, %ecx
  16207. addl %ebx, %r9d
  16208. rorl $2, %ecx
  16209. movl %r13d, %edx
  16210. addl %ecx, %r9d
  16211. addl 508(%rsp), %r8d
  16212. movl %r14d, %ecx
  16213. movl %r10d, %ebx
  16214. xorl %r15d, %ecx
  16215. rorl $14, %edx
  16216. andl %r13d, %ecx
  16217. xorl %r13d, %edx
  16218. xorl %r15d, %ecx
  16219. rorl $5, %edx
  16220. addl %ecx, %r8d
  16221. xorl %r13d, %edx
  16222. xorl %r9d, %ebx
  16223. rorl $6, %edx
  16224. movl %r9d, %ecx
  16225. addl %edx, %r8d
  16226. rorl $9, %ecx
  16227. andl %ebx, %eax
  16228. xorl %r9d, %ecx
  16229. xorl %r10d, %eax
  16230. rorl $11, %ecx
  16231. addl %r8d, %r12d
  16232. xorl %r9d, %ecx
  16233. addl %eax, %r8d
  16234. rorl $2, %ecx
  16235. movl %r12d, %edx
  16236. addl %ecx, %r8d
  16237. addl (%rdi), %r8d
  16238. addl 4(%rdi), %r9d
  16239. addl 8(%rdi), %r10d
  16240. addl 12(%rdi), %r11d
  16241. addl 16(%rdi), %r12d
  16242. addl 20(%rdi), %r13d
  16243. addl 24(%rdi), %r14d
  16244. addl 28(%rdi), %r15d
  16245. addq $0x80, %rbp
  16246. subl $0x80, %esi
  16247. movl %r8d, (%rdi)
  16248. movl %r9d, 4(%rdi)
  16249. movl %r10d, 8(%rdi)
  16250. movl %r11d, 12(%rdi)
  16251. movl %r12d, 16(%rdi)
  16252. movl %r13d, 20(%rdi)
  16253. movl %r14d, 24(%rdi)
  16254. movl %r15d, 28(%rdi)
  16255. jnz L_sha256_len_avx2_start
  16256. L_sha256_len_avx2_done:
  16257. xorq %rax, %rax
  16258. vzeroupper
  16259. addq $0x200, %rsp
  16260. popq %rbp
  16261. popq %r15
  16262. popq %r14
  16263. popq %r13
  16264. popq %r12
  16265. popq %rbx
  16266. repz retq
  16267. #ifndef __APPLE__
  16268. .size Transform_Sha256_AVX2_Len,.-Transform_Sha256_AVX2_Len
  16269. #endif /* __APPLE__ */
  16270. #ifndef __APPLE__
  16271. .data
  16272. #else
  16273. .section __DATA,__data
  16274. #endif /* __APPLE__ */
  16275. L_avx2_rorx_sha256_k:
  16276. .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  16277. .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  16278. .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  16279. .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  16280. .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  16281. .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  16282. .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  16283. .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  16284. .long 0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc
  16285. .long 0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc
  16286. .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  16287. .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  16288. .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  16289. .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  16290. .long 0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967
  16291. .long 0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967
  16292. .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  16293. .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  16294. .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  16295. .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  16296. .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  16297. .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  16298. .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  16299. .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  16300. .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  16301. .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  16302. .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  16303. .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  16304. .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  16305. .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  16306. .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  16307. .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  16308. #ifndef __APPLE__
  16309. .data
  16310. #else
  16311. .section __DATA,__data
  16312. #endif /* __APPLE__ */
  16313. #ifndef __APPLE__
  16314. .align 32
  16315. #else
  16316. .p2align 5
  16317. #endif /* __APPLE__ */
  16318. L_avx2_rorx_sha256_flip_mask:
  16319. .quad 0x405060700010203, 0xc0d0e0f08090a0b
  16320. .quad 0x405060700010203, 0xc0d0e0f08090a0b
  16321. #ifndef __APPLE__
  16322. .data
  16323. #else
  16324. .section __DATA,__data
  16325. #endif /* __APPLE__ */
  16326. #ifndef __APPLE__
  16327. .align 32
  16328. #else
  16329. .p2align 5
  16330. #endif /* __APPLE__ */
  16331. L_avx2_rorx_sha256_shuf_00BA:
  16332. .quad 0xb0a090803020100, 0xffffffffffffffff
  16333. .quad 0xb0a090803020100, 0xffffffffffffffff
  16334. #ifndef __APPLE__
  16335. .data
  16336. #else
  16337. .section __DATA,__data
  16338. #endif /* __APPLE__ */
  16339. #ifndef __APPLE__
  16340. .align 32
  16341. #else
  16342. .p2align 5
  16343. #endif /* __APPLE__ */
  16344. L_avx2_rorx_sha256_shuf_DC00:
  16345. .quad 0xffffffffffffffff, 0xb0a090803020100
  16346. .quad 0xffffffffffffffff, 0xb0a090803020100
  16347. #ifndef __APPLE__
  16348. .text
  16349. .globl Transform_Sha256_AVX2_RORX
  16350. .type Transform_Sha256_AVX2_RORX,@function
  16351. .align 16
  16352. Transform_Sha256_AVX2_RORX:
  16353. #else
  16354. .section __TEXT,__text
  16355. .globl _Transform_Sha256_AVX2_RORX
  16356. .p2align 4
  16357. _Transform_Sha256_AVX2_RORX:
  16358. #endif /* __APPLE__ */
  16359. pushq %rbx
  16360. pushq %r12
  16361. pushq %r13
  16362. pushq %r14
  16363. pushq %r15
  16364. subq $0x200, %rsp
  16365. leaq 32(%rdi), %rax
  16366. vmovdqa L_avx2_rorx_sha256_flip_mask(%rip), %xmm13
  16367. vmovdqa L_avx2_rorx_sha256_shuf_00BA(%rip), %ymm11
  16368. vmovdqa L_avx2_rorx_sha256_shuf_DC00(%rip), %ymm12
  16369. # X0, X1, X2, X3 = W[0..15]
  16370. vmovdqu (%rax), %xmm0
  16371. vmovdqu 16(%rax), %xmm1
  16372. vpshufb %xmm13, %xmm0, %xmm0
  16373. vpshufb %xmm13, %xmm1, %xmm1
  16374. vpaddd 0+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  16375. vpaddd 32+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm5
  16376. vmovdqu %ymm4, (%rsp)
  16377. vmovdqu %ymm5, 32(%rsp)
  16378. vmovdqu 32(%rax), %xmm2
  16379. vmovdqu 48(%rax), %xmm3
  16380. vpshufb %xmm13, %xmm2, %xmm2
  16381. vpshufb %xmm13, %xmm3, %xmm3
  16382. vpaddd 64+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  16383. vpaddd 96+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm5
  16384. vmovdqu %ymm4, 64(%rsp)
  16385. vmovdqu %ymm5, 96(%rsp)
  16386. movl (%rdi), %r8d
  16387. movl 4(%rdi), %r9d
  16388. movl 8(%rdi), %r10d
  16389. movl 12(%rdi), %r11d
  16390. movl 16(%rdi), %r12d
  16391. movl 20(%rdi), %r13d
  16392. movl 24(%rdi), %r14d
  16393. movl 28(%rdi), %r15d
  16394. movl %r9d, %ebx
  16395. rorxl $6, %r12d, %edx
  16396. xorl %r10d, %ebx
  16397. # rnd_0: 0 - 0
  16398. movl %r13d, %eax
  16399. rorxl $11, %r12d, %ecx
  16400. addl (%rsp), %r15d
  16401. vpalignr $4, %ymm0, %ymm1, %ymm5
  16402. # rnd_0: 1 - 1
  16403. xorl %edx, %ecx
  16404. xorl %r14d, %eax
  16405. rorxl $25, %r12d, %edx
  16406. vpalignr $4, %ymm2, %ymm3, %ymm4
  16407. # rnd_0: 2 - 2
  16408. andl %r12d, %eax
  16409. xorl %ecx, %edx
  16410. rorxl $13, %r8d, %ecx
  16411. vpsrld $7, %ymm5, %ymm6
  16412. # rnd_0: 3 - 3
  16413. addl %edx, %r15d
  16414. rorxl $2, %r8d, %edx
  16415. xorl %r14d, %eax
  16416. vpslld $25, %ymm5, %ymm7
  16417. # rnd_0: 4 - 4
  16418. xorl %edx, %ecx
  16419. rorxl $22, %r8d, %edx
  16420. addl %eax, %r15d
  16421. vpsrld $18, %ymm5, %ymm8
  16422. # rnd_0: 5 - 5
  16423. xorl %ecx, %edx
  16424. movl %r9d, %eax
  16425. addl %r15d, %r11d
  16426. vpslld $14, %ymm5, %ymm9
  16427. # rnd_0: 6 - 6
  16428. xorl %r8d, %eax
  16429. addl %edx, %r15d
  16430. andl %eax, %ebx
  16431. vpor %ymm7, %ymm6, %ymm6
  16432. # rnd_0: 7 - 7
  16433. xorl %r9d, %ebx
  16434. rorxl $6, %r11d, %edx
  16435. addl %ebx, %r15d
  16436. vpor %ymm9, %ymm8, %ymm8
  16437. # rnd_1: 0 - 0
  16438. movl %r12d, %ebx
  16439. rorxl $11, %r11d, %ecx
  16440. addl 4(%rsp), %r14d
  16441. vpsrld $3, %ymm5, %ymm9
  16442. # rnd_1: 1 - 1
  16443. xorl %edx, %ecx
  16444. xorl %r13d, %ebx
  16445. rorxl $25, %r11d, %edx
  16446. vpxor %ymm8, %ymm6, %ymm6
  16447. # rnd_1: 2 - 2
  16448. andl %r11d, %ebx
  16449. xorl %ecx, %edx
  16450. rorxl $13, %r15d, %ecx
  16451. vpshufd $0xfa, %ymm3, %ymm7
  16452. # rnd_1: 3 - 3
  16453. addl %edx, %r14d
  16454. rorxl $2, %r15d, %edx
  16455. xorl %r13d, %ebx
  16456. vpxor %ymm6, %ymm9, %ymm5
  16457. # rnd_1: 4 - 4
  16458. xorl %edx, %ecx
  16459. rorxl $22, %r15d, %edx
  16460. addl %ebx, %r14d
  16461. vpsrld $10, %ymm7, %ymm8
  16462. # rnd_1: 5 - 5
  16463. xorl %ecx, %edx
  16464. addl %r14d, %r10d
  16465. movl %r8d, %ebx
  16466. vpsrlq $19, %ymm7, %ymm6
  16467. # rnd_1: 6 - 6
  16468. xorl %r15d, %ebx
  16469. addl %edx, %r14d
  16470. andl %ebx, %eax
  16471. vpsrlq $0x11, %ymm7, %ymm7
  16472. # rnd_1: 7 - 7
  16473. xorl %r8d, %eax
  16474. rorxl $6, %r10d, %edx
  16475. addl %eax, %r14d
  16476. vpaddd %ymm0, %ymm4, %ymm4
  16477. # rnd_0: 0 - 0
  16478. movl %r11d, %eax
  16479. rorxl $11, %r10d, %ecx
  16480. addl 8(%rsp), %r13d
  16481. vpxor %ymm7, %ymm6, %ymm6
  16482. # rnd_0: 1 - 1
  16483. xorl %edx, %ecx
  16484. xorl %r12d, %eax
  16485. rorxl $25, %r10d, %edx
  16486. vpxor %ymm6, %ymm8, %ymm8
  16487. # rnd_0: 2 - 2
  16488. andl %r10d, %eax
  16489. xorl %ecx, %edx
  16490. rorxl $13, %r14d, %ecx
  16491. vpaddd %ymm5, %ymm4, %ymm4
  16492. # rnd_0: 3 - 3
  16493. addl %edx, %r13d
  16494. rorxl $2, %r14d, %edx
  16495. xorl %r12d, %eax
  16496. vpshufb %ymm11, %ymm8, %ymm8
  16497. # rnd_0: 4 - 4
  16498. xorl %edx, %ecx
  16499. rorxl $22, %r14d, %edx
  16500. addl %eax, %r13d
  16501. vpaddd %ymm8, %ymm4, %ymm4
  16502. # rnd_0: 5 - 5
  16503. xorl %ecx, %edx
  16504. movl %r15d, %eax
  16505. addl %r13d, %r9d
  16506. vpshufd $0x50, %ymm4, %ymm6
  16507. # rnd_0: 6 - 6
  16508. xorl %r14d, %eax
  16509. addl %edx, %r13d
  16510. andl %eax, %ebx
  16511. vpsrlq $0x11, %ymm6, %ymm8
  16512. # rnd_0: 7 - 7
  16513. xorl %r15d, %ebx
  16514. rorxl $6, %r9d, %edx
  16515. addl %ebx, %r13d
  16516. vpsrlq $19, %ymm6, %ymm7
  16517. # rnd_1: 0 - 0
  16518. movl %r10d, %ebx
  16519. rorxl $11, %r9d, %ecx
  16520. addl 12(%rsp), %r12d
  16521. vpsrld $10, %ymm6, %ymm9
  16522. # rnd_1: 1 - 1
  16523. xorl %edx, %ecx
  16524. xorl %r11d, %ebx
  16525. rorxl $25, %r9d, %edx
  16526. vpxor %ymm7, %ymm8, %ymm8
  16527. # rnd_1: 2 - 2
  16528. andl %r9d, %ebx
  16529. xorl %ecx, %edx
  16530. rorxl $13, %r13d, %ecx
  16531. vpxor %ymm8, %ymm9, %ymm9
  16532. # rnd_1: 3 - 3
  16533. addl %edx, %r12d
  16534. rorxl $2, %r13d, %edx
  16535. xorl %r11d, %ebx
  16536. vpshufb %ymm12, %ymm9, %ymm9
  16537. # rnd_1: 4 - 4
  16538. xorl %edx, %ecx
  16539. rorxl $22, %r13d, %edx
  16540. addl %ebx, %r12d
  16541. vpaddd %ymm4, %ymm9, %ymm0
  16542. # rnd_1: 5 - 5
  16543. xorl %ecx, %edx
  16544. addl %r12d, %r8d
  16545. movl %r14d, %ebx
  16546. vpaddd 128+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  16547. # rnd_1: 6 - 6
  16548. xorl %r13d, %ebx
  16549. addl %edx, %r12d
  16550. andl %ebx, %eax
  16551. # rnd_1: 7 - 7
  16552. xorl %r14d, %eax
  16553. rorxl $6, %r8d, %edx
  16554. addl %eax, %r12d
  16555. vmovdqu %ymm4, 128(%rsp)
  16556. # rnd_0: 0 - 0
  16557. movl %r9d, %eax
  16558. rorxl $11, %r8d, %ecx
  16559. addl 32(%rsp), %r11d
  16560. vpalignr $4, %ymm1, %ymm2, %ymm5
  16561. # rnd_0: 1 - 1
  16562. xorl %edx, %ecx
  16563. xorl %r10d, %eax
  16564. rorxl $25, %r8d, %edx
  16565. vpalignr $4, %ymm3, %ymm0, %ymm4
  16566. # rnd_0: 2 - 2
  16567. andl %r8d, %eax
  16568. xorl %ecx, %edx
  16569. rorxl $13, %r12d, %ecx
  16570. vpsrld $7, %ymm5, %ymm6
  16571. # rnd_0: 3 - 3
  16572. addl %edx, %r11d
  16573. rorxl $2, %r12d, %edx
  16574. xorl %r10d, %eax
  16575. vpslld $25, %ymm5, %ymm7
  16576. # rnd_0: 4 - 4
  16577. xorl %edx, %ecx
  16578. rorxl $22, %r12d, %edx
  16579. addl %eax, %r11d
  16580. vpsrld $18, %ymm5, %ymm8
  16581. # rnd_0: 5 - 5
  16582. xorl %ecx, %edx
  16583. movl %r13d, %eax
  16584. addl %r11d, %r15d
  16585. vpslld $14, %ymm5, %ymm9
  16586. # rnd_0: 6 - 6
  16587. xorl %r12d, %eax
  16588. addl %edx, %r11d
  16589. andl %eax, %ebx
  16590. vpor %ymm7, %ymm6, %ymm6
  16591. # rnd_0: 7 - 7
  16592. xorl %r13d, %ebx
  16593. rorxl $6, %r15d, %edx
  16594. addl %ebx, %r11d
  16595. vpor %ymm9, %ymm8, %ymm8
  16596. # rnd_1: 0 - 0
  16597. movl %r8d, %ebx
  16598. rorxl $11, %r15d, %ecx
  16599. addl 36(%rsp), %r10d
  16600. vpsrld $3, %ymm5, %ymm9
  16601. # rnd_1: 1 - 1
  16602. xorl %edx, %ecx
  16603. xorl %r9d, %ebx
  16604. rorxl $25, %r15d, %edx
  16605. vpxor %ymm8, %ymm6, %ymm6
  16606. # rnd_1: 2 - 2
  16607. andl %r15d, %ebx
  16608. xorl %ecx, %edx
  16609. rorxl $13, %r11d, %ecx
  16610. vpshufd $0xfa, %ymm0, %ymm7
  16611. # rnd_1: 3 - 3
  16612. addl %edx, %r10d
  16613. rorxl $2, %r11d, %edx
  16614. xorl %r9d, %ebx
  16615. vpxor %ymm6, %ymm9, %ymm5
  16616. # rnd_1: 4 - 4
  16617. xorl %edx, %ecx
  16618. rorxl $22, %r11d, %edx
  16619. addl %ebx, %r10d
  16620. vpsrld $10, %ymm7, %ymm8
  16621. # rnd_1: 5 - 5
  16622. xorl %ecx, %edx
  16623. addl %r10d, %r14d
  16624. movl %r12d, %ebx
  16625. vpsrlq $19, %ymm7, %ymm6
  16626. # rnd_1: 6 - 6
  16627. xorl %r11d, %ebx
  16628. addl %edx, %r10d
  16629. andl %ebx, %eax
  16630. vpsrlq $0x11, %ymm7, %ymm7
  16631. # rnd_1: 7 - 7
  16632. xorl %r12d, %eax
  16633. rorxl $6, %r14d, %edx
  16634. addl %eax, %r10d
  16635. vpaddd %ymm1, %ymm4, %ymm4
  16636. # rnd_0: 0 - 0
  16637. movl %r15d, %eax
  16638. rorxl $11, %r14d, %ecx
  16639. addl 40(%rsp), %r9d
  16640. vpxor %ymm7, %ymm6, %ymm6
  16641. # rnd_0: 1 - 1
  16642. xorl %edx, %ecx
  16643. xorl %r8d, %eax
  16644. rorxl $25, %r14d, %edx
  16645. vpxor %ymm6, %ymm8, %ymm8
  16646. # rnd_0: 2 - 2
  16647. andl %r14d, %eax
  16648. xorl %ecx, %edx
  16649. rorxl $13, %r10d, %ecx
  16650. vpaddd %ymm5, %ymm4, %ymm4
  16651. # rnd_0: 3 - 3
  16652. addl %edx, %r9d
  16653. rorxl $2, %r10d, %edx
  16654. xorl %r8d, %eax
  16655. vpshufb %ymm11, %ymm8, %ymm8
  16656. # rnd_0: 4 - 4
  16657. xorl %edx, %ecx
  16658. rorxl $22, %r10d, %edx
  16659. addl %eax, %r9d
  16660. vpaddd %ymm8, %ymm4, %ymm4
  16661. # rnd_0: 5 - 5
  16662. xorl %ecx, %edx
  16663. movl %r11d, %eax
  16664. addl %r9d, %r13d
  16665. vpshufd $0x50, %ymm4, %ymm6
  16666. # rnd_0: 6 - 6
  16667. xorl %r10d, %eax
  16668. addl %edx, %r9d
  16669. andl %eax, %ebx
  16670. vpsrlq $0x11, %ymm6, %ymm8
  16671. # rnd_0: 7 - 7
  16672. xorl %r11d, %ebx
  16673. rorxl $6, %r13d, %edx
  16674. addl %ebx, %r9d
  16675. vpsrlq $19, %ymm6, %ymm7
  16676. # rnd_1: 0 - 0
  16677. movl %r14d, %ebx
  16678. rorxl $11, %r13d, %ecx
  16679. addl 44(%rsp), %r8d
  16680. vpsrld $10, %ymm6, %ymm9
  16681. # rnd_1: 1 - 1
  16682. xorl %edx, %ecx
  16683. xorl %r15d, %ebx
  16684. rorxl $25, %r13d, %edx
  16685. vpxor %ymm7, %ymm8, %ymm8
  16686. # rnd_1: 2 - 2
  16687. andl %r13d, %ebx
  16688. xorl %ecx, %edx
  16689. rorxl $13, %r9d, %ecx
  16690. vpxor %ymm8, %ymm9, %ymm9
  16691. # rnd_1: 3 - 3
  16692. addl %edx, %r8d
  16693. rorxl $2, %r9d, %edx
  16694. xorl %r15d, %ebx
  16695. vpshufb %ymm12, %ymm9, %ymm9
  16696. # rnd_1: 4 - 4
  16697. xorl %edx, %ecx
  16698. rorxl $22, %r9d, %edx
  16699. addl %ebx, %r8d
  16700. vpaddd %ymm4, %ymm9, %ymm1
  16701. # rnd_1: 5 - 5
  16702. xorl %ecx, %edx
  16703. addl %r8d, %r12d
  16704. movl %r10d, %ebx
  16705. vpaddd 160+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm4
  16706. # rnd_1: 6 - 6
  16707. xorl %r9d, %ebx
  16708. addl %edx, %r8d
  16709. andl %ebx, %eax
  16710. # rnd_1: 7 - 7
  16711. xorl %r10d, %eax
  16712. rorxl $6, %r12d, %edx
  16713. addl %eax, %r8d
  16714. vmovdqu %ymm4, 160(%rsp)
  16715. # rnd_0: 0 - 0
  16716. movl %r13d, %eax
  16717. rorxl $11, %r12d, %ecx
  16718. addl 64(%rsp), %r15d
  16719. vpalignr $4, %ymm2, %ymm3, %ymm5
  16720. # rnd_0: 1 - 1
  16721. xorl %edx, %ecx
  16722. xorl %r14d, %eax
  16723. rorxl $25, %r12d, %edx
  16724. vpalignr $4, %ymm0, %ymm1, %ymm4
  16725. # rnd_0: 2 - 2
  16726. andl %r12d, %eax
  16727. xorl %ecx, %edx
  16728. rorxl $13, %r8d, %ecx
  16729. vpsrld $7, %ymm5, %ymm6
  16730. # rnd_0: 3 - 3
  16731. addl %edx, %r15d
  16732. rorxl $2, %r8d, %edx
  16733. xorl %r14d, %eax
  16734. vpslld $25, %ymm5, %ymm7
  16735. # rnd_0: 4 - 4
  16736. xorl %edx, %ecx
  16737. rorxl $22, %r8d, %edx
  16738. addl %eax, %r15d
  16739. vpsrld $18, %ymm5, %ymm8
  16740. # rnd_0: 5 - 5
  16741. xorl %ecx, %edx
  16742. movl %r9d, %eax
  16743. addl %r15d, %r11d
  16744. vpslld $14, %ymm5, %ymm9
  16745. # rnd_0: 6 - 6
  16746. xorl %r8d, %eax
  16747. addl %edx, %r15d
  16748. andl %eax, %ebx
  16749. vpor %ymm7, %ymm6, %ymm6
  16750. # rnd_0: 7 - 7
  16751. xorl %r9d, %ebx
  16752. rorxl $6, %r11d, %edx
  16753. addl %ebx, %r15d
  16754. vpor %ymm9, %ymm8, %ymm8
  16755. # rnd_1: 0 - 0
  16756. movl %r12d, %ebx
  16757. rorxl $11, %r11d, %ecx
  16758. addl 68(%rsp), %r14d
  16759. vpsrld $3, %ymm5, %ymm9
  16760. # rnd_1: 1 - 1
  16761. xorl %edx, %ecx
  16762. xorl %r13d, %ebx
  16763. rorxl $25, %r11d, %edx
  16764. vpxor %ymm8, %ymm6, %ymm6
  16765. # rnd_1: 2 - 2
  16766. andl %r11d, %ebx
  16767. xorl %ecx, %edx
  16768. rorxl $13, %r15d, %ecx
  16769. vpshufd $0xfa, %ymm1, %ymm7
  16770. # rnd_1: 3 - 3
  16771. addl %edx, %r14d
  16772. rorxl $2, %r15d, %edx
  16773. xorl %r13d, %ebx
  16774. vpxor %ymm6, %ymm9, %ymm5
  16775. # rnd_1: 4 - 4
  16776. xorl %edx, %ecx
  16777. rorxl $22, %r15d, %edx
  16778. addl %ebx, %r14d
  16779. vpsrld $10, %ymm7, %ymm8
  16780. # rnd_1: 5 - 5
  16781. xorl %ecx, %edx
  16782. addl %r14d, %r10d
  16783. movl %r8d, %ebx
  16784. vpsrlq $19, %ymm7, %ymm6
  16785. # rnd_1: 6 - 6
  16786. xorl %r15d, %ebx
  16787. addl %edx, %r14d
  16788. andl %ebx, %eax
  16789. vpsrlq $0x11, %ymm7, %ymm7
  16790. # rnd_1: 7 - 7
  16791. xorl %r8d, %eax
  16792. rorxl $6, %r10d, %edx
  16793. addl %eax, %r14d
  16794. vpaddd %ymm2, %ymm4, %ymm4
  16795. # rnd_0: 0 - 0
  16796. movl %r11d, %eax
  16797. rorxl $11, %r10d, %ecx
  16798. addl 72(%rsp), %r13d
  16799. vpxor %ymm7, %ymm6, %ymm6
  16800. # rnd_0: 1 - 1
  16801. xorl %edx, %ecx
  16802. xorl %r12d, %eax
  16803. rorxl $25, %r10d, %edx
  16804. vpxor %ymm6, %ymm8, %ymm8
  16805. # rnd_0: 2 - 2
  16806. andl %r10d, %eax
  16807. xorl %ecx, %edx
  16808. rorxl $13, %r14d, %ecx
  16809. vpaddd %ymm5, %ymm4, %ymm4
  16810. # rnd_0: 3 - 3
  16811. addl %edx, %r13d
  16812. rorxl $2, %r14d, %edx
  16813. xorl %r12d, %eax
  16814. vpshufb %ymm11, %ymm8, %ymm8
  16815. # rnd_0: 4 - 4
  16816. xorl %edx, %ecx
  16817. rorxl $22, %r14d, %edx
  16818. addl %eax, %r13d
  16819. vpaddd %ymm8, %ymm4, %ymm4
  16820. # rnd_0: 5 - 5
  16821. xorl %ecx, %edx
  16822. movl %r15d, %eax
  16823. addl %r13d, %r9d
  16824. vpshufd $0x50, %ymm4, %ymm6
  16825. # rnd_0: 6 - 6
  16826. xorl %r14d, %eax
  16827. addl %edx, %r13d
  16828. andl %eax, %ebx
  16829. vpsrlq $0x11, %ymm6, %ymm8
  16830. # rnd_0: 7 - 7
  16831. xorl %r15d, %ebx
  16832. rorxl $6, %r9d, %edx
  16833. addl %ebx, %r13d
  16834. vpsrlq $19, %ymm6, %ymm7
  16835. # rnd_1: 0 - 0
  16836. movl %r10d, %ebx
  16837. rorxl $11, %r9d, %ecx
  16838. addl 76(%rsp), %r12d
  16839. vpsrld $10, %ymm6, %ymm9
  16840. # rnd_1: 1 - 1
  16841. xorl %edx, %ecx
  16842. xorl %r11d, %ebx
  16843. rorxl $25, %r9d, %edx
  16844. vpxor %ymm7, %ymm8, %ymm8
  16845. # rnd_1: 2 - 2
  16846. andl %r9d, %ebx
  16847. xorl %ecx, %edx
  16848. rorxl $13, %r13d, %ecx
  16849. vpxor %ymm8, %ymm9, %ymm9
  16850. # rnd_1: 3 - 3
  16851. addl %edx, %r12d
  16852. rorxl $2, %r13d, %edx
  16853. xorl %r11d, %ebx
  16854. vpshufb %ymm12, %ymm9, %ymm9
  16855. # rnd_1: 4 - 4
  16856. xorl %edx, %ecx
  16857. rorxl $22, %r13d, %edx
  16858. addl %ebx, %r12d
  16859. vpaddd %ymm4, %ymm9, %ymm2
  16860. # rnd_1: 5 - 5
  16861. xorl %ecx, %edx
  16862. addl %r12d, %r8d
  16863. movl %r14d, %ebx
  16864. vpaddd 192+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  16865. # rnd_1: 6 - 6
  16866. xorl %r13d, %ebx
  16867. addl %edx, %r12d
  16868. andl %ebx, %eax
  16869. # rnd_1: 7 - 7
  16870. xorl %r14d, %eax
  16871. rorxl $6, %r8d, %edx
  16872. addl %eax, %r12d
  16873. vmovdqu %ymm4, 192(%rsp)
  16874. # rnd_0: 0 - 0
  16875. movl %r9d, %eax
  16876. rorxl $11, %r8d, %ecx
  16877. addl 96(%rsp), %r11d
  16878. vpalignr $4, %ymm3, %ymm0, %ymm5
  16879. # rnd_0: 1 - 1
  16880. xorl %edx, %ecx
  16881. xorl %r10d, %eax
  16882. rorxl $25, %r8d, %edx
  16883. vpalignr $4, %ymm1, %ymm2, %ymm4
  16884. # rnd_0: 2 - 2
  16885. andl %r8d, %eax
  16886. xorl %ecx, %edx
  16887. rorxl $13, %r12d, %ecx
  16888. vpsrld $7, %ymm5, %ymm6
  16889. # rnd_0: 3 - 3
  16890. addl %edx, %r11d
  16891. rorxl $2, %r12d, %edx
  16892. xorl %r10d, %eax
  16893. vpslld $25, %ymm5, %ymm7
  16894. # rnd_0: 4 - 4
  16895. xorl %edx, %ecx
  16896. rorxl $22, %r12d, %edx
  16897. addl %eax, %r11d
  16898. vpsrld $18, %ymm5, %ymm8
  16899. # rnd_0: 5 - 5
  16900. xorl %ecx, %edx
  16901. movl %r13d, %eax
  16902. addl %r11d, %r15d
  16903. vpslld $14, %ymm5, %ymm9
  16904. # rnd_0: 6 - 6
  16905. xorl %r12d, %eax
  16906. addl %edx, %r11d
  16907. andl %eax, %ebx
  16908. vpor %ymm7, %ymm6, %ymm6
  16909. # rnd_0: 7 - 7
  16910. xorl %r13d, %ebx
  16911. rorxl $6, %r15d, %edx
  16912. addl %ebx, %r11d
  16913. vpor %ymm9, %ymm8, %ymm8
  16914. # rnd_1: 0 - 0
  16915. movl %r8d, %ebx
  16916. rorxl $11, %r15d, %ecx
  16917. addl 100(%rsp), %r10d
  16918. vpsrld $3, %ymm5, %ymm9
  16919. # rnd_1: 1 - 1
  16920. xorl %edx, %ecx
  16921. xorl %r9d, %ebx
  16922. rorxl $25, %r15d, %edx
  16923. vpxor %ymm8, %ymm6, %ymm6
  16924. # rnd_1: 2 - 2
  16925. andl %r15d, %ebx
  16926. xorl %ecx, %edx
  16927. rorxl $13, %r11d, %ecx
  16928. vpshufd $0xfa, %ymm2, %ymm7
  16929. # rnd_1: 3 - 3
  16930. addl %edx, %r10d
  16931. rorxl $2, %r11d, %edx
  16932. xorl %r9d, %ebx
  16933. vpxor %ymm6, %ymm9, %ymm5
  16934. # rnd_1: 4 - 4
  16935. xorl %edx, %ecx
  16936. rorxl $22, %r11d, %edx
  16937. addl %ebx, %r10d
  16938. vpsrld $10, %ymm7, %ymm8
  16939. # rnd_1: 5 - 5
  16940. xorl %ecx, %edx
  16941. addl %r10d, %r14d
  16942. movl %r12d, %ebx
  16943. vpsrlq $19, %ymm7, %ymm6
  16944. # rnd_1: 6 - 6
  16945. xorl %r11d, %ebx
  16946. addl %edx, %r10d
  16947. andl %ebx, %eax
  16948. vpsrlq $0x11, %ymm7, %ymm7
  16949. # rnd_1: 7 - 7
  16950. xorl %r12d, %eax
  16951. rorxl $6, %r14d, %edx
  16952. addl %eax, %r10d
  16953. vpaddd %ymm3, %ymm4, %ymm4
  16954. # rnd_0: 0 - 0
  16955. movl %r15d, %eax
  16956. rorxl $11, %r14d, %ecx
  16957. addl 104(%rsp), %r9d
  16958. vpxor %ymm7, %ymm6, %ymm6
  16959. # rnd_0: 1 - 1
  16960. xorl %edx, %ecx
  16961. xorl %r8d, %eax
  16962. rorxl $25, %r14d, %edx
  16963. vpxor %ymm6, %ymm8, %ymm8
  16964. # rnd_0: 2 - 2
  16965. andl %r14d, %eax
  16966. xorl %ecx, %edx
  16967. rorxl $13, %r10d, %ecx
  16968. vpaddd %ymm5, %ymm4, %ymm4
  16969. # rnd_0: 3 - 3
  16970. addl %edx, %r9d
  16971. rorxl $2, %r10d, %edx
  16972. xorl %r8d, %eax
  16973. vpshufb %ymm11, %ymm8, %ymm8
  16974. # rnd_0: 4 - 4
  16975. xorl %edx, %ecx
  16976. rorxl $22, %r10d, %edx
  16977. addl %eax, %r9d
  16978. vpaddd %ymm8, %ymm4, %ymm4
  16979. # rnd_0: 5 - 5
  16980. xorl %ecx, %edx
  16981. movl %r11d, %eax
  16982. addl %r9d, %r13d
  16983. vpshufd $0x50, %ymm4, %ymm6
  16984. # rnd_0: 6 - 6
  16985. xorl %r10d, %eax
  16986. addl %edx, %r9d
  16987. andl %eax, %ebx
  16988. vpsrlq $0x11, %ymm6, %ymm8
  16989. # rnd_0: 7 - 7
  16990. xorl %r11d, %ebx
  16991. rorxl $6, %r13d, %edx
  16992. addl %ebx, %r9d
  16993. vpsrlq $19, %ymm6, %ymm7
  16994. # rnd_1: 0 - 0
  16995. movl %r14d, %ebx
  16996. rorxl $11, %r13d, %ecx
  16997. addl 108(%rsp), %r8d
  16998. vpsrld $10, %ymm6, %ymm9
  16999. # rnd_1: 1 - 1
  17000. xorl %edx, %ecx
  17001. xorl %r15d, %ebx
  17002. rorxl $25, %r13d, %edx
  17003. vpxor %ymm7, %ymm8, %ymm8
  17004. # rnd_1: 2 - 2
  17005. andl %r13d, %ebx
  17006. xorl %ecx, %edx
  17007. rorxl $13, %r9d, %ecx
  17008. vpxor %ymm8, %ymm9, %ymm9
  17009. # rnd_1: 3 - 3
  17010. addl %edx, %r8d
  17011. rorxl $2, %r9d, %edx
  17012. xorl %r15d, %ebx
  17013. vpshufb %ymm12, %ymm9, %ymm9
  17014. # rnd_1: 4 - 4
  17015. xorl %edx, %ecx
  17016. rorxl $22, %r9d, %edx
  17017. addl %ebx, %r8d
  17018. vpaddd %ymm4, %ymm9, %ymm3
  17019. # rnd_1: 5 - 5
  17020. xorl %ecx, %edx
  17021. addl %r8d, %r12d
  17022. movl %r10d, %ebx
  17023. vpaddd 224+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm4
  17024. # rnd_1: 6 - 6
  17025. xorl %r9d, %ebx
  17026. addl %edx, %r8d
  17027. andl %ebx, %eax
  17028. # rnd_1: 7 - 7
  17029. xorl %r10d, %eax
  17030. rorxl $6, %r12d, %edx
  17031. addl %eax, %r8d
  17032. vmovdqu %ymm4, 224(%rsp)
  17033. # rnd_0: 0 - 0
  17034. movl %r13d, %eax
  17035. rorxl $11, %r12d, %ecx
  17036. addl 128(%rsp), %r15d
  17037. vpalignr $4, %ymm0, %ymm1, %ymm5
  17038. # rnd_0: 1 - 1
  17039. xorl %edx, %ecx
  17040. xorl %r14d, %eax
  17041. rorxl $25, %r12d, %edx
  17042. vpalignr $4, %ymm2, %ymm3, %ymm4
  17043. # rnd_0: 2 - 2
  17044. andl %r12d, %eax
  17045. xorl %ecx, %edx
  17046. rorxl $13, %r8d, %ecx
  17047. vpsrld $7, %ymm5, %ymm6
  17048. # rnd_0: 3 - 3
  17049. addl %edx, %r15d
  17050. rorxl $2, %r8d, %edx
  17051. xorl %r14d, %eax
  17052. vpslld $25, %ymm5, %ymm7
  17053. # rnd_0: 4 - 4
  17054. xorl %edx, %ecx
  17055. rorxl $22, %r8d, %edx
  17056. addl %eax, %r15d
  17057. vpsrld $18, %ymm5, %ymm8
  17058. # rnd_0: 5 - 5
  17059. xorl %ecx, %edx
  17060. movl %r9d, %eax
  17061. addl %r15d, %r11d
  17062. vpslld $14, %ymm5, %ymm9
  17063. # rnd_0: 6 - 6
  17064. xorl %r8d, %eax
  17065. addl %edx, %r15d
  17066. andl %eax, %ebx
  17067. vpor %ymm7, %ymm6, %ymm6
  17068. # rnd_0: 7 - 7
  17069. xorl %r9d, %ebx
  17070. rorxl $6, %r11d, %edx
  17071. addl %ebx, %r15d
  17072. vpor %ymm9, %ymm8, %ymm8
  17073. # rnd_1: 0 - 0
  17074. movl %r12d, %ebx
  17075. rorxl $11, %r11d, %ecx
  17076. addl 132(%rsp), %r14d
  17077. vpsrld $3, %ymm5, %ymm9
  17078. # rnd_1: 1 - 1
  17079. xorl %edx, %ecx
  17080. xorl %r13d, %ebx
  17081. rorxl $25, %r11d, %edx
  17082. vpxor %ymm8, %ymm6, %ymm6
  17083. # rnd_1: 2 - 2
  17084. andl %r11d, %ebx
  17085. xorl %ecx, %edx
  17086. rorxl $13, %r15d, %ecx
  17087. vpshufd $0xfa, %ymm3, %ymm7
  17088. # rnd_1: 3 - 3
  17089. addl %edx, %r14d
  17090. rorxl $2, %r15d, %edx
  17091. xorl %r13d, %ebx
  17092. vpxor %ymm6, %ymm9, %ymm5
  17093. # rnd_1: 4 - 4
  17094. xorl %edx, %ecx
  17095. rorxl $22, %r15d, %edx
  17096. addl %ebx, %r14d
  17097. vpsrld $10, %ymm7, %ymm8
  17098. # rnd_1: 5 - 5
  17099. xorl %ecx, %edx
  17100. addl %r14d, %r10d
  17101. movl %r8d, %ebx
  17102. vpsrlq $19, %ymm7, %ymm6
  17103. # rnd_1: 6 - 6
  17104. xorl %r15d, %ebx
  17105. addl %edx, %r14d
  17106. andl %ebx, %eax
  17107. vpsrlq $0x11, %ymm7, %ymm7
  17108. # rnd_1: 7 - 7
  17109. xorl %r8d, %eax
  17110. rorxl $6, %r10d, %edx
  17111. addl %eax, %r14d
  17112. vpaddd %ymm0, %ymm4, %ymm4
  17113. # rnd_0: 0 - 0
  17114. movl %r11d, %eax
  17115. rorxl $11, %r10d, %ecx
  17116. addl 136(%rsp), %r13d
  17117. vpxor %ymm7, %ymm6, %ymm6
  17118. # rnd_0: 1 - 1
  17119. xorl %edx, %ecx
  17120. xorl %r12d, %eax
  17121. rorxl $25, %r10d, %edx
  17122. vpxor %ymm6, %ymm8, %ymm8
  17123. # rnd_0: 2 - 2
  17124. andl %r10d, %eax
  17125. xorl %ecx, %edx
  17126. rorxl $13, %r14d, %ecx
  17127. vpaddd %ymm5, %ymm4, %ymm4
  17128. # rnd_0: 3 - 3
  17129. addl %edx, %r13d
  17130. rorxl $2, %r14d, %edx
  17131. xorl %r12d, %eax
  17132. vpshufb %ymm11, %ymm8, %ymm8
  17133. # rnd_0: 4 - 4
  17134. xorl %edx, %ecx
  17135. rorxl $22, %r14d, %edx
  17136. addl %eax, %r13d
  17137. vpaddd %ymm8, %ymm4, %ymm4
  17138. # rnd_0: 5 - 5
  17139. xorl %ecx, %edx
  17140. movl %r15d, %eax
  17141. addl %r13d, %r9d
  17142. vpshufd $0x50, %ymm4, %ymm6
  17143. # rnd_0: 6 - 6
  17144. xorl %r14d, %eax
  17145. addl %edx, %r13d
  17146. andl %eax, %ebx
  17147. vpsrlq $0x11, %ymm6, %ymm8
  17148. # rnd_0: 7 - 7
  17149. xorl %r15d, %ebx
  17150. rorxl $6, %r9d, %edx
  17151. addl %ebx, %r13d
  17152. vpsrlq $19, %ymm6, %ymm7
  17153. # rnd_1: 0 - 0
  17154. movl %r10d, %ebx
  17155. rorxl $11, %r9d, %ecx
  17156. addl 140(%rsp), %r12d
  17157. vpsrld $10, %ymm6, %ymm9
  17158. # rnd_1: 1 - 1
  17159. xorl %edx, %ecx
  17160. xorl %r11d, %ebx
  17161. rorxl $25, %r9d, %edx
  17162. vpxor %ymm7, %ymm8, %ymm8
  17163. # rnd_1: 2 - 2
  17164. andl %r9d, %ebx
  17165. xorl %ecx, %edx
  17166. rorxl $13, %r13d, %ecx
  17167. vpxor %ymm8, %ymm9, %ymm9
  17168. # rnd_1: 3 - 3
  17169. addl %edx, %r12d
  17170. rorxl $2, %r13d, %edx
  17171. xorl %r11d, %ebx
  17172. vpshufb %ymm12, %ymm9, %ymm9
  17173. # rnd_1: 4 - 4
  17174. xorl %edx, %ecx
  17175. rorxl $22, %r13d, %edx
  17176. addl %ebx, %r12d
  17177. vpaddd %ymm4, %ymm9, %ymm0
  17178. # rnd_1: 5 - 5
  17179. xorl %ecx, %edx
  17180. addl %r12d, %r8d
  17181. movl %r14d, %ebx
  17182. vpaddd 256+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  17183. # rnd_1: 6 - 6
  17184. xorl %r13d, %ebx
  17185. addl %edx, %r12d
  17186. andl %ebx, %eax
  17187. # rnd_1: 7 - 7
  17188. xorl %r14d, %eax
  17189. rorxl $6, %r8d, %edx
  17190. addl %eax, %r12d
  17191. vmovdqu %ymm4, 256(%rsp)
  17192. # rnd_0: 0 - 0
  17193. movl %r9d, %eax
  17194. rorxl $11, %r8d, %ecx
  17195. addl 160(%rsp), %r11d
  17196. vpalignr $4, %ymm1, %ymm2, %ymm5
  17197. # rnd_0: 1 - 1
  17198. xorl %edx, %ecx
  17199. xorl %r10d, %eax
  17200. rorxl $25, %r8d, %edx
  17201. vpalignr $4, %ymm3, %ymm0, %ymm4
  17202. # rnd_0: 2 - 2
  17203. andl %r8d, %eax
  17204. xorl %ecx, %edx
  17205. rorxl $13, %r12d, %ecx
  17206. vpsrld $7, %ymm5, %ymm6
  17207. # rnd_0: 3 - 3
  17208. addl %edx, %r11d
  17209. rorxl $2, %r12d, %edx
  17210. xorl %r10d, %eax
  17211. vpslld $25, %ymm5, %ymm7
  17212. # rnd_0: 4 - 4
  17213. xorl %edx, %ecx
  17214. rorxl $22, %r12d, %edx
  17215. addl %eax, %r11d
  17216. vpsrld $18, %ymm5, %ymm8
  17217. # rnd_0: 5 - 5
  17218. xorl %ecx, %edx
  17219. movl %r13d, %eax
  17220. addl %r11d, %r15d
  17221. vpslld $14, %ymm5, %ymm9
  17222. # rnd_0: 6 - 6
  17223. xorl %r12d, %eax
  17224. addl %edx, %r11d
  17225. andl %eax, %ebx
  17226. vpor %ymm7, %ymm6, %ymm6
  17227. # rnd_0: 7 - 7
  17228. xorl %r13d, %ebx
  17229. rorxl $6, %r15d, %edx
  17230. addl %ebx, %r11d
  17231. vpor %ymm9, %ymm8, %ymm8
  17232. # rnd_1: 0 - 0
  17233. movl %r8d, %ebx
  17234. rorxl $11, %r15d, %ecx
  17235. addl 164(%rsp), %r10d
  17236. vpsrld $3, %ymm5, %ymm9
  17237. # rnd_1: 1 - 1
  17238. xorl %edx, %ecx
  17239. xorl %r9d, %ebx
  17240. rorxl $25, %r15d, %edx
  17241. vpxor %ymm8, %ymm6, %ymm6
  17242. # rnd_1: 2 - 2
  17243. andl %r15d, %ebx
  17244. xorl %ecx, %edx
  17245. rorxl $13, %r11d, %ecx
  17246. vpshufd $0xfa, %ymm0, %ymm7
  17247. # rnd_1: 3 - 3
  17248. addl %edx, %r10d
  17249. rorxl $2, %r11d, %edx
  17250. xorl %r9d, %ebx
  17251. vpxor %ymm6, %ymm9, %ymm5
  17252. # rnd_1: 4 - 4
  17253. xorl %edx, %ecx
  17254. rorxl $22, %r11d, %edx
  17255. addl %ebx, %r10d
  17256. vpsrld $10, %ymm7, %ymm8
  17257. # rnd_1: 5 - 5
  17258. xorl %ecx, %edx
  17259. addl %r10d, %r14d
  17260. movl %r12d, %ebx
  17261. vpsrlq $19, %ymm7, %ymm6
  17262. # rnd_1: 6 - 6
  17263. xorl %r11d, %ebx
  17264. addl %edx, %r10d
  17265. andl %ebx, %eax
  17266. vpsrlq $0x11, %ymm7, %ymm7
  17267. # rnd_1: 7 - 7
  17268. xorl %r12d, %eax
  17269. rorxl $6, %r14d, %edx
  17270. addl %eax, %r10d
  17271. vpaddd %ymm1, %ymm4, %ymm4
  17272. # rnd_0: 0 - 0
  17273. movl %r15d, %eax
  17274. rorxl $11, %r14d, %ecx
  17275. addl 168(%rsp), %r9d
  17276. vpxor %ymm7, %ymm6, %ymm6
  17277. # rnd_0: 1 - 1
  17278. xorl %edx, %ecx
  17279. xorl %r8d, %eax
  17280. rorxl $25, %r14d, %edx
  17281. vpxor %ymm6, %ymm8, %ymm8
  17282. # rnd_0: 2 - 2
  17283. andl %r14d, %eax
  17284. xorl %ecx, %edx
  17285. rorxl $13, %r10d, %ecx
  17286. vpaddd %ymm5, %ymm4, %ymm4
  17287. # rnd_0: 3 - 3
  17288. addl %edx, %r9d
  17289. rorxl $2, %r10d, %edx
  17290. xorl %r8d, %eax
  17291. vpshufb %ymm11, %ymm8, %ymm8
  17292. # rnd_0: 4 - 4
  17293. xorl %edx, %ecx
  17294. rorxl $22, %r10d, %edx
  17295. addl %eax, %r9d
  17296. vpaddd %ymm8, %ymm4, %ymm4
  17297. # rnd_0: 5 - 5
  17298. xorl %ecx, %edx
  17299. movl %r11d, %eax
  17300. addl %r9d, %r13d
  17301. vpshufd $0x50, %ymm4, %ymm6
  17302. # rnd_0: 6 - 6
  17303. xorl %r10d, %eax
  17304. addl %edx, %r9d
  17305. andl %eax, %ebx
  17306. vpsrlq $0x11, %ymm6, %ymm8
  17307. # rnd_0: 7 - 7
  17308. xorl %r11d, %ebx
  17309. rorxl $6, %r13d, %edx
  17310. addl %ebx, %r9d
  17311. vpsrlq $19, %ymm6, %ymm7
  17312. # rnd_1: 0 - 0
  17313. movl %r14d, %ebx
  17314. rorxl $11, %r13d, %ecx
  17315. addl 172(%rsp), %r8d
  17316. vpsrld $10, %ymm6, %ymm9
  17317. # rnd_1: 1 - 1
  17318. xorl %edx, %ecx
  17319. xorl %r15d, %ebx
  17320. rorxl $25, %r13d, %edx
  17321. vpxor %ymm7, %ymm8, %ymm8
  17322. # rnd_1: 2 - 2
  17323. andl %r13d, %ebx
  17324. xorl %ecx, %edx
  17325. rorxl $13, %r9d, %ecx
  17326. vpxor %ymm8, %ymm9, %ymm9
  17327. # rnd_1: 3 - 3
  17328. addl %edx, %r8d
  17329. rorxl $2, %r9d, %edx
  17330. xorl %r15d, %ebx
  17331. vpshufb %ymm12, %ymm9, %ymm9
  17332. # rnd_1: 4 - 4
  17333. xorl %edx, %ecx
  17334. rorxl $22, %r9d, %edx
  17335. addl %ebx, %r8d
  17336. vpaddd %ymm4, %ymm9, %ymm1
  17337. # rnd_1: 5 - 5
  17338. xorl %ecx, %edx
  17339. addl %r8d, %r12d
  17340. movl %r10d, %ebx
  17341. vpaddd 288+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm4
  17342. # rnd_1: 6 - 6
  17343. xorl %r9d, %ebx
  17344. addl %edx, %r8d
  17345. andl %ebx, %eax
  17346. # rnd_1: 7 - 7
  17347. xorl %r10d, %eax
  17348. rorxl $6, %r12d, %edx
  17349. addl %eax, %r8d
  17350. vmovdqu %ymm4, 288(%rsp)
  17351. # rnd_0: 0 - 0
  17352. movl %r13d, %eax
  17353. rorxl $11, %r12d, %ecx
  17354. addl 192(%rsp), %r15d
  17355. vpalignr $4, %ymm2, %ymm3, %ymm5
  17356. # rnd_0: 1 - 1
  17357. xorl %edx, %ecx
  17358. xorl %r14d, %eax
  17359. rorxl $25, %r12d, %edx
  17360. vpalignr $4, %ymm0, %ymm1, %ymm4
  17361. # rnd_0: 2 - 2
  17362. andl %r12d, %eax
  17363. xorl %ecx, %edx
  17364. rorxl $13, %r8d, %ecx
  17365. vpsrld $7, %ymm5, %ymm6
  17366. # rnd_0: 3 - 3
  17367. addl %edx, %r15d
  17368. rorxl $2, %r8d, %edx
  17369. xorl %r14d, %eax
  17370. vpslld $25, %ymm5, %ymm7
  17371. # rnd_0: 4 - 4
  17372. xorl %edx, %ecx
  17373. rorxl $22, %r8d, %edx
  17374. addl %eax, %r15d
  17375. vpsrld $18, %ymm5, %ymm8
  17376. # rnd_0: 5 - 5
  17377. xorl %ecx, %edx
  17378. movl %r9d, %eax
  17379. addl %r15d, %r11d
  17380. vpslld $14, %ymm5, %ymm9
  17381. # rnd_0: 6 - 6
  17382. xorl %r8d, %eax
  17383. addl %edx, %r15d
  17384. andl %eax, %ebx
  17385. vpor %ymm7, %ymm6, %ymm6
  17386. # rnd_0: 7 - 7
  17387. xorl %r9d, %ebx
  17388. rorxl $6, %r11d, %edx
  17389. addl %ebx, %r15d
  17390. vpor %ymm9, %ymm8, %ymm8
  17391. # rnd_1: 0 - 0
  17392. movl %r12d, %ebx
  17393. rorxl $11, %r11d, %ecx
  17394. addl 196(%rsp), %r14d
  17395. vpsrld $3, %ymm5, %ymm9
  17396. # rnd_1: 1 - 1
  17397. xorl %edx, %ecx
  17398. xorl %r13d, %ebx
  17399. rorxl $25, %r11d, %edx
  17400. vpxor %ymm8, %ymm6, %ymm6
  17401. # rnd_1: 2 - 2
  17402. andl %r11d, %ebx
  17403. xorl %ecx, %edx
  17404. rorxl $13, %r15d, %ecx
  17405. vpshufd $0xfa, %ymm1, %ymm7
  17406. # rnd_1: 3 - 3
  17407. addl %edx, %r14d
  17408. rorxl $2, %r15d, %edx
  17409. xorl %r13d, %ebx
  17410. vpxor %ymm6, %ymm9, %ymm5
  17411. # rnd_1: 4 - 4
  17412. xorl %edx, %ecx
  17413. rorxl $22, %r15d, %edx
  17414. addl %ebx, %r14d
  17415. vpsrld $10, %ymm7, %ymm8
  17416. # rnd_1: 5 - 5
  17417. xorl %ecx, %edx
  17418. addl %r14d, %r10d
  17419. movl %r8d, %ebx
  17420. vpsrlq $19, %ymm7, %ymm6
  17421. # rnd_1: 6 - 6
  17422. xorl %r15d, %ebx
  17423. addl %edx, %r14d
  17424. andl %ebx, %eax
  17425. vpsrlq $0x11, %ymm7, %ymm7
  17426. # rnd_1: 7 - 7
  17427. xorl %r8d, %eax
  17428. rorxl $6, %r10d, %edx
  17429. addl %eax, %r14d
  17430. vpaddd %ymm2, %ymm4, %ymm4
  17431. # rnd_0: 0 - 0
  17432. movl %r11d, %eax
  17433. rorxl $11, %r10d, %ecx
  17434. addl 200(%rsp), %r13d
  17435. vpxor %ymm7, %ymm6, %ymm6
  17436. # rnd_0: 1 - 1
  17437. xorl %edx, %ecx
  17438. xorl %r12d, %eax
  17439. rorxl $25, %r10d, %edx
  17440. vpxor %ymm6, %ymm8, %ymm8
  17441. # rnd_0: 2 - 2
  17442. andl %r10d, %eax
  17443. xorl %ecx, %edx
  17444. rorxl $13, %r14d, %ecx
  17445. vpaddd %ymm5, %ymm4, %ymm4
  17446. # rnd_0: 3 - 3
  17447. addl %edx, %r13d
  17448. rorxl $2, %r14d, %edx
  17449. xorl %r12d, %eax
  17450. vpshufb %ymm11, %ymm8, %ymm8
  17451. # rnd_0: 4 - 4
  17452. xorl %edx, %ecx
  17453. rorxl $22, %r14d, %edx
  17454. addl %eax, %r13d
  17455. vpaddd %ymm8, %ymm4, %ymm4
  17456. # rnd_0: 5 - 5
  17457. xorl %ecx, %edx
  17458. movl %r15d, %eax
  17459. addl %r13d, %r9d
  17460. vpshufd $0x50, %ymm4, %ymm6
  17461. # rnd_0: 6 - 6
  17462. xorl %r14d, %eax
  17463. addl %edx, %r13d
  17464. andl %eax, %ebx
  17465. vpsrlq $0x11, %ymm6, %ymm8
  17466. # rnd_0: 7 - 7
  17467. xorl %r15d, %ebx
  17468. rorxl $6, %r9d, %edx
  17469. addl %ebx, %r13d
  17470. vpsrlq $19, %ymm6, %ymm7
  17471. # rnd_1: 0 - 0
  17472. movl %r10d, %ebx
  17473. rorxl $11, %r9d, %ecx
  17474. addl 204(%rsp), %r12d
  17475. vpsrld $10, %ymm6, %ymm9
  17476. # rnd_1: 1 - 1
  17477. xorl %edx, %ecx
  17478. xorl %r11d, %ebx
  17479. rorxl $25, %r9d, %edx
  17480. vpxor %ymm7, %ymm8, %ymm8
  17481. # rnd_1: 2 - 2
  17482. andl %r9d, %ebx
  17483. xorl %ecx, %edx
  17484. rorxl $13, %r13d, %ecx
  17485. vpxor %ymm8, %ymm9, %ymm9
  17486. # rnd_1: 3 - 3
  17487. addl %edx, %r12d
  17488. rorxl $2, %r13d, %edx
  17489. xorl %r11d, %ebx
  17490. vpshufb %ymm12, %ymm9, %ymm9
  17491. # rnd_1: 4 - 4
  17492. xorl %edx, %ecx
  17493. rorxl $22, %r13d, %edx
  17494. addl %ebx, %r12d
  17495. vpaddd %ymm4, %ymm9, %ymm2
  17496. # rnd_1: 5 - 5
  17497. xorl %ecx, %edx
  17498. addl %r12d, %r8d
  17499. movl %r14d, %ebx
  17500. vpaddd 320+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  17501. # rnd_1: 6 - 6
  17502. xorl %r13d, %ebx
  17503. addl %edx, %r12d
  17504. andl %ebx, %eax
  17505. # rnd_1: 7 - 7
  17506. xorl %r14d, %eax
  17507. rorxl $6, %r8d, %edx
  17508. addl %eax, %r12d
  17509. vmovdqu %ymm4, 320(%rsp)
  17510. # rnd_0: 0 - 0
  17511. movl %r9d, %eax
  17512. rorxl $11, %r8d, %ecx
  17513. addl 224(%rsp), %r11d
  17514. vpalignr $4, %ymm3, %ymm0, %ymm5
  17515. # rnd_0: 1 - 1
  17516. xorl %edx, %ecx
  17517. xorl %r10d, %eax
  17518. rorxl $25, %r8d, %edx
  17519. vpalignr $4, %ymm1, %ymm2, %ymm4
  17520. # rnd_0: 2 - 2
  17521. andl %r8d, %eax
  17522. xorl %ecx, %edx
  17523. rorxl $13, %r12d, %ecx
  17524. vpsrld $7, %ymm5, %ymm6
  17525. # rnd_0: 3 - 3
  17526. addl %edx, %r11d
  17527. rorxl $2, %r12d, %edx
  17528. xorl %r10d, %eax
  17529. vpslld $25, %ymm5, %ymm7
  17530. # rnd_0: 4 - 4
  17531. xorl %edx, %ecx
  17532. rorxl $22, %r12d, %edx
  17533. addl %eax, %r11d
  17534. vpsrld $18, %ymm5, %ymm8
  17535. # rnd_0: 5 - 5
  17536. xorl %ecx, %edx
  17537. movl %r13d, %eax
  17538. addl %r11d, %r15d
  17539. vpslld $14, %ymm5, %ymm9
  17540. # rnd_0: 6 - 6
  17541. xorl %r12d, %eax
  17542. addl %edx, %r11d
  17543. andl %eax, %ebx
  17544. vpor %ymm7, %ymm6, %ymm6
  17545. # rnd_0: 7 - 7
  17546. xorl %r13d, %ebx
  17547. rorxl $6, %r15d, %edx
  17548. addl %ebx, %r11d
  17549. vpor %ymm9, %ymm8, %ymm8
  17550. # rnd_1: 0 - 0
  17551. movl %r8d, %ebx
  17552. rorxl $11, %r15d, %ecx
  17553. addl 228(%rsp), %r10d
  17554. vpsrld $3, %ymm5, %ymm9
  17555. # rnd_1: 1 - 1
  17556. xorl %edx, %ecx
  17557. xorl %r9d, %ebx
  17558. rorxl $25, %r15d, %edx
  17559. vpxor %ymm8, %ymm6, %ymm6
  17560. # rnd_1: 2 - 2
  17561. andl %r15d, %ebx
  17562. xorl %ecx, %edx
  17563. rorxl $13, %r11d, %ecx
  17564. vpshufd $0xfa, %ymm2, %ymm7
  17565. # rnd_1: 3 - 3
  17566. addl %edx, %r10d
  17567. rorxl $2, %r11d, %edx
  17568. xorl %r9d, %ebx
  17569. vpxor %ymm6, %ymm9, %ymm5
  17570. # rnd_1: 4 - 4
  17571. xorl %edx, %ecx
  17572. rorxl $22, %r11d, %edx
  17573. addl %ebx, %r10d
  17574. vpsrld $10, %ymm7, %ymm8
  17575. # rnd_1: 5 - 5
  17576. xorl %ecx, %edx
  17577. addl %r10d, %r14d
  17578. movl %r12d, %ebx
  17579. vpsrlq $19, %ymm7, %ymm6
  17580. # rnd_1: 6 - 6
  17581. xorl %r11d, %ebx
  17582. addl %edx, %r10d
  17583. andl %ebx, %eax
  17584. vpsrlq $0x11, %ymm7, %ymm7
  17585. # rnd_1: 7 - 7
  17586. xorl %r12d, %eax
  17587. rorxl $6, %r14d, %edx
  17588. addl %eax, %r10d
  17589. vpaddd %ymm3, %ymm4, %ymm4
  17590. # rnd_0: 0 - 0
  17591. movl %r15d, %eax
  17592. rorxl $11, %r14d, %ecx
  17593. addl 232(%rsp), %r9d
  17594. vpxor %ymm7, %ymm6, %ymm6
  17595. # rnd_0: 1 - 1
  17596. xorl %edx, %ecx
  17597. xorl %r8d, %eax
  17598. rorxl $25, %r14d, %edx
  17599. vpxor %ymm6, %ymm8, %ymm8
  17600. # rnd_0: 2 - 2
  17601. andl %r14d, %eax
  17602. xorl %ecx, %edx
  17603. rorxl $13, %r10d, %ecx
  17604. vpaddd %ymm5, %ymm4, %ymm4
  17605. # rnd_0: 3 - 3
  17606. addl %edx, %r9d
  17607. rorxl $2, %r10d, %edx
  17608. xorl %r8d, %eax
  17609. vpshufb %ymm11, %ymm8, %ymm8
  17610. # rnd_0: 4 - 4
  17611. xorl %edx, %ecx
  17612. rorxl $22, %r10d, %edx
  17613. addl %eax, %r9d
  17614. vpaddd %ymm8, %ymm4, %ymm4
  17615. # rnd_0: 5 - 5
  17616. xorl %ecx, %edx
  17617. movl %r11d, %eax
  17618. addl %r9d, %r13d
  17619. vpshufd $0x50, %ymm4, %ymm6
  17620. # rnd_0: 6 - 6
  17621. xorl %r10d, %eax
  17622. addl %edx, %r9d
  17623. andl %eax, %ebx
  17624. vpsrlq $0x11, %ymm6, %ymm8
  17625. # rnd_0: 7 - 7
  17626. xorl %r11d, %ebx
  17627. rorxl $6, %r13d, %edx
  17628. addl %ebx, %r9d
  17629. vpsrlq $19, %ymm6, %ymm7
  17630. # rnd_1: 0 - 0
  17631. movl %r14d, %ebx
  17632. rorxl $11, %r13d, %ecx
  17633. addl 236(%rsp), %r8d
  17634. vpsrld $10, %ymm6, %ymm9
  17635. # rnd_1: 1 - 1
  17636. xorl %edx, %ecx
  17637. xorl %r15d, %ebx
  17638. rorxl $25, %r13d, %edx
  17639. vpxor %ymm7, %ymm8, %ymm8
  17640. # rnd_1: 2 - 2
  17641. andl %r13d, %ebx
  17642. xorl %ecx, %edx
  17643. rorxl $13, %r9d, %ecx
  17644. vpxor %ymm8, %ymm9, %ymm9
  17645. # rnd_1: 3 - 3
  17646. addl %edx, %r8d
  17647. rorxl $2, %r9d, %edx
  17648. xorl %r15d, %ebx
  17649. vpshufb %ymm12, %ymm9, %ymm9
  17650. # rnd_1: 4 - 4
  17651. xorl %edx, %ecx
  17652. rorxl $22, %r9d, %edx
  17653. addl %ebx, %r8d
  17654. vpaddd %ymm4, %ymm9, %ymm3
  17655. # rnd_1: 5 - 5
  17656. xorl %ecx, %edx
  17657. addl %r8d, %r12d
  17658. movl %r10d, %ebx
  17659. vpaddd 352+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm4
  17660. # rnd_1: 6 - 6
  17661. xorl %r9d, %ebx
  17662. addl %edx, %r8d
  17663. andl %ebx, %eax
  17664. # rnd_1: 7 - 7
  17665. xorl %r10d, %eax
  17666. rorxl $6, %r12d, %edx
  17667. addl %eax, %r8d
  17668. vmovdqu %ymm4, 352(%rsp)
  17669. # rnd_0: 0 - 0
  17670. movl %r13d, %eax
  17671. rorxl $11, %r12d, %ecx
  17672. addl 256(%rsp), %r15d
  17673. vpalignr $4, %ymm0, %ymm1, %ymm5
  17674. # rnd_0: 1 - 1
  17675. xorl %edx, %ecx
  17676. xorl %r14d, %eax
  17677. rorxl $25, %r12d, %edx
  17678. vpalignr $4, %ymm2, %ymm3, %ymm4
  17679. # rnd_0: 2 - 2
  17680. andl %r12d, %eax
  17681. xorl %ecx, %edx
  17682. rorxl $13, %r8d, %ecx
  17683. vpsrld $7, %ymm5, %ymm6
  17684. # rnd_0: 3 - 3
  17685. addl %edx, %r15d
  17686. rorxl $2, %r8d, %edx
  17687. xorl %r14d, %eax
  17688. vpslld $25, %ymm5, %ymm7
  17689. # rnd_0: 4 - 4
  17690. xorl %edx, %ecx
  17691. rorxl $22, %r8d, %edx
  17692. addl %eax, %r15d
  17693. vpsrld $18, %ymm5, %ymm8
  17694. # rnd_0: 5 - 5
  17695. xorl %ecx, %edx
  17696. movl %r9d, %eax
  17697. addl %r15d, %r11d
  17698. vpslld $14, %ymm5, %ymm9
  17699. # rnd_0: 6 - 6
  17700. xorl %r8d, %eax
  17701. addl %edx, %r15d
  17702. andl %eax, %ebx
  17703. vpor %ymm7, %ymm6, %ymm6
  17704. # rnd_0: 7 - 7
  17705. xorl %r9d, %ebx
  17706. rorxl $6, %r11d, %edx
  17707. addl %ebx, %r15d
  17708. vpor %ymm9, %ymm8, %ymm8
  17709. # rnd_1: 0 - 0
  17710. movl %r12d, %ebx
  17711. rorxl $11, %r11d, %ecx
  17712. addl 260(%rsp), %r14d
  17713. vpsrld $3, %ymm5, %ymm9
  17714. # rnd_1: 1 - 1
  17715. xorl %edx, %ecx
  17716. xorl %r13d, %ebx
  17717. rorxl $25, %r11d, %edx
  17718. vpxor %ymm8, %ymm6, %ymm6
  17719. # rnd_1: 2 - 2
  17720. andl %r11d, %ebx
  17721. xorl %ecx, %edx
  17722. rorxl $13, %r15d, %ecx
  17723. vpshufd $0xfa, %ymm3, %ymm7
  17724. # rnd_1: 3 - 3
  17725. addl %edx, %r14d
  17726. rorxl $2, %r15d, %edx
  17727. xorl %r13d, %ebx
  17728. vpxor %ymm6, %ymm9, %ymm5
  17729. # rnd_1: 4 - 4
  17730. xorl %edx, %ecx
  17731. rorxl $22, %r15d, %edx
  17732. addl %ebx, %r14d
  17733. vpsrld $10, %ymm7, %ymm8
  17734. # rnd_1: 5 - 5
  17735. xorl %ecx, %edx
  17736. addl %r14d, %r10d
  17737. movl %r8d, %ebx
  17738. vpsrlq $19, %ymm7, %ymm6
  17739. # rnd_1: 6 - 6
  17740. xorl %r15d, %ebx
  17741. addl %edx, %r14d
  17742. andl %ebx, %eax
  17743. vpsrlq $0x11, %ymm7, %ymm7
  17744. # rnd_1: 7 - 7
  17745. xorl %r8d, %eax
  17746. rorxl $6, %r10d, %edx
  17747. addl %eax, %r14d
  17748. vpaddd %ymm0, %ymm4, %ymm4
  17749. # rnd_0: 0 - 0
  17750. movl %r11d, %eax
  17751. rorxl $11, %r10d, %ecx
  17752. addl 264(%rsp), %r13d
  17753. vpxor %ymm7, %ymm6, %ymm6
  17754. # rnd_0: 1 - 1
  17755. xorl %edx, %ecx
  17756. xorl %r12d, %eax
  17757. rorxl $25, %r10d, %edx
  17758. vpxor %ymm6, %ymm8, %ymm8
  17759. # rnd_0: 2 - 2
  17760. andl %r10d, %eax
  17761. xorl %ecx, %edx
  17762. rorxl $13, %r14d, %ecx
  17763. vpaddd %ymm5, %ymm4, %ymm4
  17764. # rnd_0: 3 - 3
  17765. addl %edx, %r13d
  17766. rorxl $2, %r14d, %edx
  17767. xorl %r12d, %eax
  17768. vpshufb %ymm11, %ymm8, %ymm8
  17769. # rnd_0: 4 - 4
  17770. xorl %edx, %ecx
  17771. rorxl $22, %r14d, %edx
  17772. addl %eax, %r13d
  17773. vpaddd %ymm8, %ymm4, %ymm4
  17774. # rnd_0: 5 - 5
  17775. xorl %ecx, %edx
  17776. movl %r15d, %eax
  17777. addl %r13d, %r9d
  17778. vpshufd $0x50, %ymm4, %ymm6
  17779. # rnd_0: 6 - 6
  17780. xorl %r14d, %eax
  17781. addl %edx, %r13d
  17782. andl %eax, %ebx
  17783. vpsrlq $0x11, %ymm6, %ymm8
  17784. # rnd_0: 7 - 7
  17785. xorl %r15d, %ebx
  17786. rorxl $6, %r9d, %edx
  17787. addl %ebx, %r13d
  17788. vpsrlq $19, %ymm6, %ymm7
  17789. # rnd_1: 0 - 0
  17790. movl %r10d, %ebx
  17791. rorxl $11, %r9d, %ecx
  17792. addl 268(%rsp), %r12d
  17793. vpsrld $10, %ymm6, %ymm9
  17794. # rnd_1: 1 - 1
  17795. xorl %edx, %ecx
  17796. xorl %r11d, %ebx
  17797. rorxl $25, %r9d, %edx
  17798. vpxor %ymm7, %ymm8, %ymm8
  17799. # rnd_1: 2 - 2
  17800. andl %r9d, %ebx
  17801. xorl %ecx, %edx
  17802. rorxl $13, %r13d, %ecx
  17803. vpxor %ymm8, %ymm9, %ymm9
  17804. # rnd_1: 3 - 3
  17805. addl %edx, %r12d
  17806. rorxl $2, %r13d, %edx
  17807. xorl %r11d, %ebx
  17808. vpshufb %ymm12, %ymm9, %ymm9
  17809. # rnd_1: 4 - 4
  17810. xorl %edx, %ecx
  17811. rorxl $22, %r13d, %edx
  17812. addl %ebx, %r12d
  17813. vpaddd %ymm4, %ymm9, %ymm0
  17814. # rnd_1: 5 - 5
  17815. xorl %ecx, %edx
  17816. addl %r12d, %r8d
  17817. movl %r14d, %ebx
  17818. vpaddd 384+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  17819. # rnd_1: 6 - 6
  17820. xorl %r13d, %ebx
  17821. addl %edx, %r12d
  17822. andl %ebx, %eax
  17823. # rnd_1: 7 - 7
  17824. xorl %r14d, %eax
  17825. rorxl $6, %r8d, %edx
  17826. addl %eax, %r12d
  17827. vmovdqu %ymm4, 384(%rsp)
  17828. # rnd_0: 0 - 0
  17829. movl %r9d, %eax
  17830. rorxl $11, %r8d, %ecx
  17831. addl 288(%rsp), %r11d
  17832. vpalignr $4, %ymm1, %ymm2, %ymm5
  17833. # rnd_0: 1 - 1
  17834. xorl %edx, %ecx
  17835. xorl %r10d, %eax
  17836. rorxl $25, %r8d, %edx
  17837. vpalignr $4, %ymm3, %ymm0, %ymm4
  17838. # rnd_0: 2 - 2
  17839. andl %r8d, %eax
  17840. xorl %ecx, %edx
  17841. rorxl $13, %r12d, %ecx
  17842. vpsrld $7, %ymm5, %ymm6
  17843. # rnd_0: 3 - 3
  17844. addl %edx, %r11d
  17845. rorxl $2, %r12d, %edx
  17846. xorl %r10d, %eax
  17847. vpslld $25, %ymm5, %ymm7
  17848. # rnd_0: 4 - 4
  17849. xorl %edx, %ecx
  17850. rorxl $22, %r12d, %edx
  17851. addl %eax, %r11d
  17852. vpsrld $18, %ymm5, %ymm8
  17853. # rnd_0: 5 - 5
  17854. xorl %ecx, %edx
  17855. movl %r13d, %eax
  17856. addl %r11d, %r15d
  17857. vpslld $14, %ymm5, %ymm9
  17858. # rnd_0: 6 - 6
  17859. xorl %r12d, %eax
  17860. addl %edx, %r11d
  17861. andl %eax, %ebx
  17862. vpor %ymm7, %ymm6, %ymm6
  17863. # rnd_0: 7 - 7
  17864. xorl %r13d, %ebx
  17865. rorxl $6, %r15d, %edx
  17866. addl %ebx, %r11d
  17867. vpor %ymm9, %ymm8, %ymm8
  17868. # rnd_1: 0 - 0
  17869. movl %r8d, %ebx
  17870. rorxl $11, %r15d, %ecx
  17871. addl 292(%rsp), %r10d
  17872. vpsrld $3, %ymm5, %ymm9
  17873. # rnd_1: 1 - 1
  17874. xorl %edx, %ecx
  17875. xorl %r9d, %ebx
  17876. rorxl $25, %r15d, %edx
  17877. vpxor %ymm8, %ymm6, %ymm6
  17878. # rnd_1: 2 - 2
  17879. andl %r15d, %ebx
  17880. xorl %ecx, %edx
  17881. rorxl $13, %r11d, %ecx
  17882. vpshufd $0xfa, %ymm0, %ymm7
  17883. # rnd_1: 3 - 3
  17884. addl %edx, %r10d
  17885. rorxl $2, %r11d, %edx
  17886. xorl %r9d, %ebx
  17887. vpxor %ymm6, %ymm9, %ymm5
  17888. # rnd_1: 4 - 4
  17889. xorl %edx, %ecx
  17890. rorxl $22, %r11d, %edx
  17891. addl %ebx, %r10d
  17892. vpsrld $10, %ymm7, %ymm8
  17893. # rnd_1: 5 - 5
  17894. xorl %ecx, %edx
  17895. addl %r10d, %r14d
  17896. movl %r12d, %ebx
  17897. vpsrlq $19, %ymm7, %ymm6
  17898. # rnd_1: 6 - 6
  17899. xorl %r11d, %ebx
  17900. addl %edx, %r10d
  17901. andl %ebx, %eax
  17902. vpsrlq $0x11, %ymm7, %ymm7
  17903. # rnd_1: 7 - 7
  17904. xorl %r12d, %eax
  17905. rorxl $6, %r14d, %edx
  17906. addl %eax, %r10d
  17907. vpaddd %ymm1, %ymm4, %ymm4
  17908. # rnd_0: 0 - 0
  17909. movl %r15d, %eax
  17910. rorxl $11, %r14d, %ecx
  17911. addl 296(%rsp), %r9d
  17912. vpxor %ymm7, %ymm6, %ymm6
  17913. # rnd_0: 1 - 1
  17914. xorl %edx, %ecx
  17915. xorl %r8d, %eax
  17916. rorxl $25, %r14d, %edx
  17917. vpxor %ymm6, %ymm8, %ymm8
  17918. # rnd_0: 2 - 2
  17919. andl %r14d, %eax
  17920. xorl %ecx, %edx
  17921. rorxl $13, %r10d, %ecx
  17922. vpaddd %ymm5, %ymm4, %ymm4
  17923. # rnd_0: 3 - 3
  17924. addl %edx, %r9d
  17925. rorxl $2, %r10d, %edx
  17926. xorl %r8d, %eax
  17927. vpshufb %ymm11, %ymm8, %ymm8
  17928. # rnd_0: 4 - 4
  17929. xorl %edx, %ecx
  17930. rorxl $22, %r10d, %edx
  17931. addl %eax, %r9d
  17932. vpaddd %ymm8, %ymm4, %ymm4
  17933. # rnd_0: 5 - 5
  17934. xorl %ecx, %edx
  17935. movl %r11d, %eax
  17936. addl %r9d, %r13d
  17937. vpshufd $0x50, %ymm4, %ymm6
  17938. # rnd_0: 6 - 6
  17939. xorl %r10d, %eax
  17940. addl %edx, %r9d
  17941. andl %eax, %ebx
  17942. vpsrlq $0x11, %ymm6, %ymm8
  17943. # rnd_0: 7 - 7
  17944. xorl %r11d, %ebx
  17945. rorxl $6, %r13d, %edx
  17946. addl %ebx, %r9d
  17947. vpsrlq $19, %ymm6, %ymm7
  17948. # rnd_1: 0 - 0
  17949. movl %r14d, %ebx
  17950. rorxl $11, %r13d, %ecx
  17951. addl 300(%rsp), %r8d
  17952. vpsrld $10, %ymm6, %ymm9
  17953. # rnd_1: 1 - 1
  17954. xorl %edx, %ecx
  17955. xorl %r15d, %ebx
  17956. rorxl $25, %r13d, %edx
  17957. vpxor %ymm7, %ymm8, %ymm8
  17958. # rnd_1: 2 - 2
  17959. andl %r13d, %ebx
  17960. xorl %ecx, %edx
  17961. rorxl $13, %r9d, %ecx
  17962. vpxor %ymm8, %ymm9, %ymm9
  17963. # rnd_1: 3 - 3
  17964. addl %edx, %r8d
  17965. rorxl $2, %r9d, %edx
  17966. xorl %r15d, %ebx
  17967. vpshufb %ymm12, %ymm9, %ymm9
  17968. # rnd_1: 4 - 4
  17969. xorl %edx, %ecx
  17970. rorxl $22, %r9d, %edx
  17971. addl %ebx, %r8d
  17972. vpaddd %ymm4, %ymm9, %ymm1
  17973. # rnd_1: 5 - 5
  17974. xorl %ecx, %edx
  17975. addl %r8d, %r12d
  17976. movl %r10d, %ebx
  17977. vpaddd 416+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm4
  17978. # rnd_1: 6 - 6
  17979. xorl %r9d, %ebx
  17980. addl %edx, %r8d
  17981. andl %ebx, %eax
  17982. # rnd_1: 7 - 7
  17983. xorl %r10d, %eax
  17984. rorxl $6, %r12d, %edx
  17985. addl %eax, %r8d
  17986. vmovdqu %ymm4, 416(%rsp)
  17987. # rnd_0: 0 - 0
  17988. movl %r13d, %eax
  17989. rorxl $11, %r12d, %ecx
  17990. addl 320(%rsp), %r15d
  17991. vpalignr $4, %ymm2, %ymm3, %ymm5
  17992. # rnd_0: 1 - 1
  17993. xorl %edx, %ecx
  17994. xorl %r14d, %eax
  17995. rorxl $25, %r12d, %edx
  17996. vpalignr $4, %ymm0, %ymm1, %ymm4
  17997. # rnd_0: 2 - 2
  17998. andl %r12d, %eax
  17999. xorl %ecx, %edx
  18000. rorxl $13, %r8d, %ecx
  18001. vpsrld $7, %ymm5, %ymm6
  18002. # rnd_0: 3 - 3
  18003. addl %edx, %r15d
  18004. rorxl $2, %r8d, %edx
  18005. xorl %r14d, %eax
  18006. vpslld $25, %ymm5, %ymm7
  18007. # rnd_0: 4 - 4
  18008. xorl %edx, %ecx
  18009. rorxl $22, %r8d, %edx
  18010. addl %eax, %r15d
  18011. vpsrld $18, %ymm5, %ymm8
  18012. # rnd_0: 5 - 5
  18013. xorl %ecx, %edx
  18014. movl %r9d, %eax
  18015. addl %r15d, %r11d
  18016. vpslld $14, %ymm5, %ymm9
  18017. # rnd_0: 6 - 6
  18018. xorl %r8d, %eax
  18019. addl %edx, %r15d
  18020. andl %eax, %ebx
  18021. vpor %ymm7, %ymm6, %ymm6
  18022. # rnd_0: 7 - 7
  18023. xorl %r9d, %ebx
  18024. rorxl $6, %r11d, %edx
  18025. addl %ebx, %r15d
  18026. vpor %ymm9, %ymm8, %ymm8
  18027. # rnd_1: 0 - 0
  18028. movl %r12d, %ebx
  18029. rorxl $11, %r11d, %ecx
  18030. addl 324(%rsp), %r14d
  18031. vpsrld $3, %ymm5, %ymm9
  18032. # rnd_1: 1 - 1
  18033. xorl %edx, %ecx
  18034. xorl %r13d, %ebx
  18035. rorxl $25, %r11d, %edx
  18036. vpxor %ymm8, %ymm6, %ymm6
  18037. # rnd_1: 2 - 2
  18038. andl %r11d, %ebx
  18039. xorl %ecx, %edx
  18040. rorxl $13, %r15d, %ecx
  18041. vpshufd $0xfa, %ymm1, %ymm7
  18042. # rnd_1: 3 - 3
  18043. addl %edx, %r14d
  18044. rorxl $2, %r15d, %edx
  18045. xorl %r13d, %ebx
  18046. vpxor %ymm6, %ymm9, %ymm5
  18047. # rnd_1: 4 - 4
  18048. xorl %edx, %ecx
  18049. rorxl $22, %r15d, %edx
  18050. addl %ebx, %r14d
  18051. vpsrld $10, %ymm7, %ymm8
  18052. # rnd_1: 5 - 5
  18053. xorl %ecx, %edx
  18054. addl %r14d, %r10d
  18055. movl %r8d, %ebx
  18056. vpsrlq $19, %ymm7, %ymm6
  18057. # rnd_1: 6 - 6
  18058. xorl %r15d, %ebx
  18059. addl %edx, %r14d
  18060. andl %ebx, %eax
  18061. vpsrlq $0x11, %ymm7, %ymm7
  18062. # rnd_1: 7 - 7
  18063. xorl %r8d, %eax
  18064. rorxl $6, %r10d, %edx
  18065. addl %eax, %r14d
  18066. vpaddd %ymm2, %ymm4, %ymm4
  18067. # rnd_0: 0 - 0
  18068. movl %r11d, %eax
  18069. rorxl $11, %r10d, %ecx
  18070. addl 328(%rsp), %r13d
  18071. vpxor %ymm7, %ymm6, %ymm6
  18072. # rnd_0: 1 - 1
  18073. xorl %edx, %ecx
  18074. xorl %r12d, %eax
  18075. rorxl $25, %r10d, %edx
  18076. vpxor %ymm6, %ymm8, %ymm8
  18077. # rnd_0: 2 - 2
  18078. andl %r10d, %eax
  18079. xorl %ecx, %edx
  18080. rorxl $13, %r14d, %ecx
  18081. vpaddd %ymm5, %ymm4, %ymm4
  18082. # rnd_0: 3 - 3
  18083. addl %edx, %r13d
  18084. rorxl $2, %r14d, %edx
  18085. xorl %r12d, %eax
  18086. vpshufb %ymm11, %ymm8, %ymm8
  18087. # rnd_0: 4 - 4
  18088. xorl %edx, %ecx
  18089. rorxl $22, %r14d, %edx
  18090. addl %eax, %r13d
  18091. vpaddd %ymm8, %ymm4, %ymm4
  18092. # rnd_0: 5 - 5
  18093. xorl %ecx, %edx
  18094. movl %r15d, %eax
  18095. addl %r13d, %r9d
  18096. vpshufd $0x50, %ymm4, %ymm6
  18097. # rnd_0: 6 - 6
  18098. xorl %r14d, %eax
  18099. addl %edx, %r13d
  18100. andl %eax, %ebx
  18101. vpsrlq $0x11, %ymm6, %ymm8
  18102. # rnd_0: 7 - 7
  18103. xorl %r15d, %ebx
  18104. rorxl $6, %r9d, %edx
  18105. addl %ebx, %r13d
  18106. vpsrlq $19, %ymm6, %ymm7
  18107. # rnd_1: 0 - 0
  18108. movl %r10d, %ebx
  18109. rorxl $11, %r9d, %ecx
  18110. addl 332(%rsp), %r12d
  18111. vpsrld $10, %ymm6, %ymm9
  18112. # rnd_1: 1 - 1
  18113. xorl %edx, %ecx
  18114. xorl %r11d, %ebx
  18115. rorxl $25, %r9d, %edx
  18116. vpxor %ymm7, %ymm8, %ymm8
  18117. # rnd_1: 2 - 2
  18118. andl %r9d, %ebx
  18119. xorl %ecx, %edx
  18120. rorxl $13, %r13d, %ecx
  18121. vpxor %ymm8, %ymm9, %ymm9
  18122. # rnd_1: 3 - 3
  18123. addl %edx, %r12d
  18124. rorxl $2, %r13d, %edx
  18125. xorl %r11d, %ebx
  18126. vpshufb %ymm12, %ymm9, %ymm9
  18127. # rnd_1: 4 - 4
  18128. xorl %edx, %ecx
  18129. rorxl $22, %r13d, %edx
  18130. addl %ebx, %r12d
  18131. vpaddd %ymm4, %ymm9, %ymm2
  18132. # rnd_1: 5 - 5
  18133. xorl %ecx, %edx
  18134. addl %r12d, %r8d
  18135. movl %r14d, %ebx
  18136. vpaddd 448+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  18137. # rnd_1: 6 - 6
  18138. xorl %r13d, %ebx
  18139. addl %edx, %r12d
  18140. andl %ebx, %eax
  18141. # rnd_1: 7 - 7
  18142. xorl %r14d, %eax
  18143. rorxl $6, %r8d, %edx
  18144. addl %eax, %r12d
  18145. vmovdqu %ymm4, 448(%rsp)
  18146. # rnd_0: 0 - 0
  18147. movl %r9d, %eax
  18148. rorxl $11, %r8d, %ecx
  18149. addl 352(%rsp), %r11d
  18150. vpalignr $4, %ymm3, %ymm0, %ymm5
  18151. # rnd_0: 1 - 1
  18152. xorl %edx, %ecx
  18153. xorl %r10d, %eax
  18154. rorxl $25, %r8d, %edx
  18155. vpalignr $4, %ymm1, %ymm2, %ymm4
  18156. # rnd_0: 2 - 2
  18157. andl %r8d, %eax
  18158. xorl %ecx, %edx
  18159. rorxl $13, %r12d, %ecx
  18160. vpsrld $7, %ymm5, %ymm6
  18161. # rnd_0: 3 - 3
  18162. addl %edx, %r11d
  18163. rorxl $2, %r12d, %edx
  18164. xorl %r10d, %eax
  18165. vpslld $25, %ymm5, %ymm7
  18166. # rnd_0: 4 - 4
  18167. xorl %edx, %ecx
  18168. rorxl $22, %r12d, %edx
  18169. addl %eax, %r11d
  18170. vpsrld $18, %ymm5, %ymm8
  18171. # rnd_0: 5 - 5
  18172. xorl %ecx, %edx
  18173. movl %r13d, %eax
  18174. addl %r11d, %r15d
  18175. vpslld $14, %ymm5, %ymm9
  18176. # rnd_0: 6 - 6
  18177. xorl %r12d, %eax
  18178. addl %edx, %r11d
  18179. andl %eax, %ebx
  18180. vpor %ymm7, %ymm6, %ymm6
  18181. # rnd_0: 7 - 7
  18182. xorl %r13d, %ebx
  18183. rorxl $6, %r15d, %edx
  18184. addl %ebx, %r11d
  18185. vpor %ymm9, %ymm8, %ymm8
  18186. # rnd_1: 0 - 0
  18187. movl %r8d, %ebx
  18188. rorxl $11, %r15d, %ecx
  18189. addl 356(%rsp), %r10d
  18190. vpsrld $3, %ymm5, %ymm9
  18191. # rnd_1: 1 - 1
  18192. xorl %edx, %ecx
  18193. xorl %r9d, %ebx
  18194. rorxl $25, %r15d, %edx
  18195. vpxor %ymm8, %ymm6, %ymm6
  18196. # rnd_1: 2 - 2
  18197. andl %r15d, %ebx
  18198. xorl %ecx, %edx
  18199. rorxl $13, %r11d, %ecx
  18200. vpshufd $0xfa, %ymm2, %ymm7
  18201. # rnd_1: 3 - 3
  18202. addl %edx, %r10d
  18203. rorxl $2, %r11d, %edx
  18204. xorl %r9d, %ebx
  18205. vpxor %ymm6, %ymm9, %ymm5
  18206. # rnd_1: 4 - 4
  18207. xorl %edx, %ecx
  18208. rorxl $22, %r11d, %edx
  18209. addl %ebx, %r10d
  18210. vpsrld $10, %ymm7, %ymm8
  18211. # rnd_1: 5 - 5
  18212. xorl %ecx, %edx
  18213. addl %r10d, %r14d
  18214. movl %r12d, %ebx
  18215. vpsrlq $19, %ymm7, %ymm6
  18216. # rnd_1: 6 - 6
  18217. xorl %r11d, %ebx
  18218. addl %edx, %r10d
  18219. andl %ebx, %eax
  18220. vpsrlq $0x11, %ymm7, %ymm7
  18221. # rnd_1: 7 - 7
  18222. xorl %r12d, %eax
  18223. rorxl $6, %r14d, %edx
  18224. addl %eax, %r10d
  18225. vpaddd %ymm3, %ymm4, %ymm4
  18226. # rnd_0: 0 - 0
  18227. movl %r15d, %eax
  18228. rorxl $11, %r14d, %ecx
  18229. addl 360(%rsp), %r9d
  18230. vpxor %ymm7, %ymm6, %ymm6
  18231. # rnd_0: 1 - 1
  18232. xorl %edx, %ecx
  18233. xorl %r8d, %eax
  18234. rorxl $25, %r14d, %edx
  18235. vpxor %ymm6, %ymm8, %ymm8
  18236. # rnd_0: 2 - 2
  18237. andl %r14d, %eax
  18238. xorl %ecx, %edx
  18239. rorxl $13, %r10d, %ecx
  18240. vpaddd %ymm5, %ymm4, %ymm4
  18241. # rnd_0: 3 - 3
  18242. addl %edx, %r9d
  18243. rorxl $2, %r10d, %edx
  18244. xorl %r8d, %eax
  18245. vpshufb %ymm11, %ymm8, %ymm8
  18246. # rnd_0: 4 - 4
  18247. xorl %edx, %ecx
  18248. rorxl $22, %r10d, %edx
  18249. addl %eax, %r9d
  18250. vpaddd %ymm8, %ymm4, %ymm4
  18251. # rnd_0: 5 - 5
  18252. xorl %ecx, %edx
  18253. movl %r11d, %eax
  18254. addl %r9d, %r13d
  18255. vpshufd $0x50, %ymm4, %ymm6
  18256. # rnd_0: 6 - 6
  18257. xorl %r10d, %eax
  18258. addl %edx, %r9d
  18259. andl %eax, %ebx
  18260. vpsrlq $0x11, %ymm6, %ymm8
  18261. # rnd_0: 7 - 7
  18262. xorl %r11d, %ebx
  18263. rorxl $6, %r13d, %edx
  18264. addl %ebx, %r9d
  18265. vpsrlq $19, %ymm6, %ymm7
  18266. # rnd_1: 0 - 0
  18267. movl %r14d, %ebx
  18268. rorxl $11, %r13d, %ecx
  18269. addl 364(%rsp), %r8d
  18270. vpsrld $10, %ymm6, %ymm9
  18271. # rnd_1: 1 - 1
  18272. xorl %edx, %ecx
  18273. xorl %r15d, %ebx
  18274. rorxl $25, %r13d, %edx
  18275. vpxor %ymm7, %ymm8, %ymm8
  18276. # rnd_1: 2 - 2
  18277. andl %r13d, %ebx
  18278. xorl %ecx, %edx
  18279. rorxl $13, %r9d, %ecx
  18280. vpxor %ymm8, %ymm9, %ymm9
  18281. # rnd_1: 3 - 3
  18282. addl %edx, %r8d
  18283. rorxl $2, %r9d, %edx
  18284. xorl %r15d, %ebx
  18285. vpshufb %ymm12, %ymm9, %ymm9
  18286. # rnd_1: 4 - 4
  18287. xorl %edx, %ecx
  18288. rorxl $22, %r9d, %edx
  18289. addl %ebx, %r8d
  18290. vpaddd %ymm4, %ymm9, %ymm3
  18291. # rnd_1: 5 - 5
  18292. xorl %ecx, %edx
  18293. addl %r8d, %r12d
  18294. movl %r10d, %ebx
  18295. vpaddd 480+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm4
  18296. # rnd_1: 6 - 6
  18297. xorl %r9d, %ebx
  18298. addl %edx, %r8d
  18299. andl %ebx, %eax
  18300. # rnd_1: 7 - 7
  18301. xorl %r10d, %eax
  18302. rorxl $6, %r12d, %edx
  18303. addl %eax, %r8d
  18304. vmovdqu %ymm4, 480(%rsp)
  18305. xorl %eax, %eax
  18306. xorl %ecx, %ecx
  18307. rorxl $6, %r12d, %edx
  18308. rorxl $11, %r12d, %ecx
  18309. leal (%r8,%rax,1), %r8d
  18310. addl 384(%rsp), %r15d
  18311. movl %r13d, %eax
  18312. xorl %edx, %ecx
  18313. xorl %r14d, %eax
  18314. rorxl $25, %r12d, %edx
  18315. xorl %ecx, %edx
  18316. andl %r12d, %eax
  18317. addl %edx, %r15d
  18318. rorxl $2, %r8d, %edx
  18319. rorxl $13, %r8d, %ecx
  18320. xorl %r14d, %eax
  18321. xorl %edx, %ecx
  18322. rorxl $22, %r8d, %edx
  18323. addl %eax, %r15d
  18324. xorl %ecx, %edx
  18325. movl %r9d, %eax
  18326. addl %r15d, %r11d
  18327. xorl %r8d, %eax
  18328. andl %eax, %ebx
  18329. addl %edx, %r15d
  18330. xorl %r9d, %ebx
  18331. rorxl $6, %r11d, %edx
  18332. rorxl $11, %r11d, %ecx
  18333. addl %ebx, %r15d
  18334. addl 388(%rsp), %r14d
  18335. movl %r12d, %ebx
  18336. xorl %edx, %ecx
  18337. xorl %r13d, %ebx
  18338. rorxl $25, %r11d, %edx
  18339. xorl %ecx, %edx
  18340. andl %r11d, %ebx
  18341. addl %edx, %r14d
  18342. rorxl $2, %r15d, %edx
  18343. rorxl $13, %r15d, %ecx
  18344. xorl %r13d, %ebx
  18345. xorl %edx, %ecx
  18346. rorxl $22, %r15d, %edx
  18347. addl %ebx, %r14d
  18348. xorl %ecx, %edx
  18349. movl %r8d, %ebx
  18350. leal (%r10,%r14,1), %r10d
  18351. xorl %r15d, %ebx
  18352. andl %ebx, %eax
  18353. addl %edx, %r14d
  18354. xorl %r8d, %eax
  18355. rorxl $6, %r10d, %edx
  18356. rorxl $11, %r10d, %ecx
  18357. leal (%r14,%rax,1), %r14d
  18358. addl 392(%rsp), %r13d
  18359. movl %r11d, %eax
  18360. xorl %edx, %ecx
  18361. xorl %r12d, %eax
  18362. rorxl $25, %r10d, %edx
  18363. xorl %ecx, %edx
  18364. andl %r10d, %eax
  18365. addl %edx, %r13d
  18366. rorxl $2, %r14d, %edx
  18367. rorxl $13, %r14d, %ecx
  18368. xorl %r12d, %eax
  18369. xorl %edx, %ecx
  18370. rorxl $22, %r14d, %edx
  18371. addl %eax, %r13d
  18372. xorl %ecx, %edx
  18373. movl %r15d, %eax
  18374. addl %r13d, %r9d
  18375. xorl %r14d, %eax
  18376. andl %eax, %ebx
  18377. addl %edx, %r13d
  18378. xorl %r15d, %ebx
  18379. rorxl $6, %r9d, %edx
  18380. rorxl $11, %r9d, %ecx
  18381. addl %ebx, %r13d
  18382. addl 396(%rsp), %r12d
  18383. movl %r10d, %ebx
  18384. xorl %edx, %ecx
  18385. xorl %r11d, %ebx
  18386. rorxl $25, %r9d, %edx
  18387. xorl %ecx, %edx
  18388. andl %r9d, %ebx
  18389. addl %edx, %r12d
  18390. rorxl $2, %r13d, %edx
  18391. rorxl $13, %r13d, %ecx
  18392. xorl %r11d, %ebx
  18393. xorl %edx, %ecx
  18394. rorxl $22, %r13d, %edx
  18395. addl %ebx, %r12d
  18396. xorl %ecx, %edx
  18397. movl %r14d, %ebx
  18398. leal (%r8,%r12,1), %r8d
  18399. xorl %r13d, %ebx
  18400. andl %ebx, %eax
  18401. addl %edx, %r12d
  18402. xorl %r14d, %eax
  18403. rorxl $6, %r8d, %edx
  18404. rorxl $11, %r8d, %ecx
  18405. leal (%r12,%rax,1), %r12d
  18406. addl 416(%rsp), %r11d
  18407. movl %r9d, %eax
  18408. xorl %edx, %ecx
  18409. xorl %r10d, %eax
  18410. rorxl $25, %r8d, %edx
  18411. xorl %ecx, %edx
  18412. andl %r8d, %eax
  18413. addl %edx, %r11d
  18414. rorxl $2, %r12d, %edx
  18415. rorxl $13, %r12d, %ecx
  18416. xorl %r10d, %eax
  18417. xorl %edx, %ecx
  18418. rorxl $22, %r12d, %edx
  18419. addl %eax, %r11d
  18420. xorl %ecx, %edx
  18421. movl %r13d, %eax
  18422. addl %r11d, %r15d
  18423. xorl %r12d, %eax
  18424. andl %eax, %ebx
  18425. addl %edx, %r11d
  18426. xorl %r13d, %ebx
  18427. rorxl $6, %r15d, %edx
  18428. rorxl $11, %r15d, %ecx
  18429. addl %ebx, %r11d
  18430. addl 420(%rsp), %r10d
  18431. movl %r8d, %ebx
  18432. xorl %edx, %ecx
  18433. xorl %r9d, %ebx
  18434. rorxl $25, %r15d, %edx
  18435. xorl %ecx, %edx
  18436. andl %r15d, %ebx
  18437. addl %edx, %r10d
  18438. rorxl $2, %r11d, %edx
  18439. rorxl $13, %r11d, %ecx
  18440. xorl %r9d, %ebx
  18441. xorl %edx, %ecx
  18442. rorxl $22, %r11d, %edx
  18443. addl %ebx, %r10d
  18444. xorl %ecx, %edx
  18445. movl %r12d, %ebx
  18446. leal (%r14,%r10,1), %r14d
  18447. xorl %r11d, %ebx
  18448. andl %ebx, %eax
  18449. addl %edx, %r10d
  18450. xorl %r12d, %eax
  18451. rorxl $6, %r14d, %edx
  18452. rorxl $11, %r14d, %ecx
  18453. leal (%r10,%rax,1), %r10d
  18454. addl 424(%rsp), %r9d
  18455. movl %r15d, %eax
  18456. xorl %edx, %ecx
  18457. xorl %r8d, %eax
  18458. rorxl $25, %r14d, %edx
  18459. xorl %ecx, %edx
  18460. andl %r14d, %eax
  18461. addl %edx, %r9d
  18462. rorxl $2, %r10d, %edx
  18463. rorxl $13, %r10d, %ecx
  18464. xorl %r8d, %eax
  18465. xorl %edx, %ecx
  18466. rorxl $22, %r10d, %edx
  18467. addl %eax, %r9d
  18468. xorl %ecx, %edx
  18469. movl %r11d, %eax
  18470. addl %r9d, %r13d
  18471. xorl %r10d, %eax
  18472. andl %eax, %ebx
  18473. addl %edx, %r9d
  18474. xorl %r11d, %ebx
  18475. rorxl $6, %r13d, %edx
  18476. rorxl $11, %r13d, %ecx
  18477. addl %ebx, %r9d
  18478. addl 428(%rsp), %r8d
  18479. movl %r14d, %ebx
  18480. xorl %edx, %ecx
  18481. xorl %r15d, %ebx
  18482. rorxl $25, %r13d, %edx
  18483. xorl %ecx, %edx
  18484. andl %r13d, %ebx
  18485. addl %edx, %r8d
  18486. rorxl $2, %r9d, %edx
  18487. rorxl $13, %r9d, %ecx
  18488. xorl %r15d, %ebx
  18489. xorl %edx, %ecx
  18490. rorxl $22, %r9d, %edx
  18491. addl %ebx, %r8d
  18492. xorl %ecx, %edx
  18493. movl %r10d, %ebx
  18494. leal (%r12,%r8,1), %r12d
  18495. xorl %r9d, %ebx
  18496. andl %ebx, %eax
  18497. addl %edx, %r8d
  18498. xorl %r10d, %eax
  18499. rorxl $6, %r12d, %edx
  18500. rorxl $11, %r12d, %ecx
  18501. leal (%r8,%rax,1), %r8d
  18502. addl 448(%rsp), %r15d
  18503. movl %r13d, %eax
  18504. xorl %edx, %ecx
  18505. xorl %r14d, %eax
  18506. rorxl $25, %r12d, %edx
  18507. xorl %ecx, %edx
  18508. andl %r12d, %eax
  18509. addl %edx, %r15d
  18510. rorxl $2, %r8d, %edx
  18511. rorxl $13, %r8d, %ecx
  18512. xorl %r14d, %eax
  18513. xorl %edx, %ecx
  18514. rorxl $22, %r8d, %edx
  18515. addl %eax, %r15d
  18516. xorl %ecx, %edx
  18517. movl %r9d, %eax
  18518. addl %r15d, %r11d
  18519. xorl %r8d, %eax
  18520. andl %eax, %ebx
  18521. addl %edx, %r15d
  18522. xorl %r9d, %ebx
  18523. rorxl $6, %r11d, %edx
  18524. rorxl $11, %r11d, %ecx
  18525. addl %ebx, %r15d
  18526. addl 452(%rsp), %r14d
  18527. movl %r12d, %ebx
  18528. xorl %edx, %ecx
  18529. xorl %r13d, %ebx
  18530. rorxl $25, %r11d, %edx
  18531. xorl %ecx, %edx
  18532. andl %r11d, %ebx
  18533. addl %edx, %r14d
  18534. rorxl $2, %r15d, %edx
  18535. rorxl $13, %r15d, %ecx
  18536. xorl %r13d, %ebx
  18537. xorl %edx, %ecx
  18538. rorxl $22, %r15d, %edx
  18539. addl %ebx, %r14d
  18540. xorl %ecx, %edx
  18541. movl %r8d, %ebx
  18542. leal (%r10,%r14,1), %r10d
  18543. xorl %r15d, %ebx
  18544. andl %ebx, %eax
  18545. addl %edx, %r14d
  18546. xorl %r8d, %eax
  18547. rorxl $6, %r10d, %edx
  18548. rorxl $11, %r10d, %ecx
  18549. leal (%r14,%rax,1), %r14d
  18550. addl 456(%rsp), %r13d
  18551. movl %r11d, %eax
  18552. xorl %edx, %ecx
  18553. xorl %r12d, %eax
  18554. rorxl $25, %r10d, %edx
  18555. xorl %ecx, %edx
  18556. andl %r10d, %eax
  18557. addl %edx, %r13d
  18558. rorxl $2, %r14d, %edx
  18559. rorxl $13, %r14d, %ecx
  18560. xorl %r12d, %eax
  18561. xorl %edx, %ecx
  18562. rorxl $22, %r14d, %edx
  18563. addl %eax, %r13d
  18564. xorl %ecx, %edx
  18565. movl %r15d, %eax
  18566. addl %r13d, %r9d
  18567. xorl %r14d, %eax
  18568. andl %eax, %ebx
  18569. addl %edx, %r13d
  18570. xorl %r15d, %ebx
  18571. rorxl $6, %r9d, %edx
  18572. rorxl $11, %r9d, %ecx
  18573. addl %ebx, %r13d
  18574. addl 460(%rsp), %r12d
  18575. movl %r10d, %ebx
  18576. xorl %edx, %ecx
  18577. xorl %r11d, %ebx
  18578. rorxl $25, %r9d, %edx
  18579. xorl %ecx, %edx
  18580. andl %r9d, %ebx
  18581. addl %edx, %r12d
  18582. rorxl $2, %r13d, %edx
  18583. rorxl $13, %r13d, %ecx
  18584. xorl %r11d, %ebx
  18585. xorl %edx, %ecx
  18586. rorxl $22, %r13d, %edx
  18587. addl %ebx, %r12d
  18588. xorl %ecx, %edx
  18589. movl %r14d, %ebx
  18590. leal (%r8,%r12,1), %r8d
  18591. xorl %r13d, %ebx
  18592. andl %ebx, %eax
  18593. addl %edx, %r12d
  18594. xorl %r14d, %eax
  18595. rorxl $6, %r8d, %edx
  18596. rorxl $11, %r8d, %ecx
  18597. leal (%r12,%rax,1), %r12d
  18598. addl 480(%rsp), %r11d
  18599. movl %r9d, %eax
  18600. xorl %edx, %ecx
  18601. xorl %r10d, %eax
  18602. rorxl $25, %r8d, %edx
  18603. xorl %ecx, %edx
  18604. andl %r8d, %eax
  18605. addl %edx, %r11d
  18606. rorxl $2, %r12d, %edx
  18607. rorxl $13, %r12d, %ecx
  18608. xorl %r10d, %eax
  18609. xorl %edx, %ecx
  18610. rorxl $22, %r12d, %edx
  18611. addl %eax, %r11d
  18612. xorl %ecx, %edx
  18613. movl %r13d, %eax
  18614. addl %r11d, %r15d
  18615. xorl %r12d, %eax
  18616. andl %eax, %ebx
  18617. addl %edx, %r11d
  18618. xorl %r13d, %ebx
  18619. rorxl $6, %r15d, %edx
  18620. rorxl $11, %r15d, %ecx
  18621. addl %ebx, %r11d
  18622. addl 484(%rsp), %r10d
  18623. movl %r8d, %ebx
  18624. xorl %edx, %ecx
  18625. xorl %r9d, %ebx
  18626. rorxl $25, %r15d, %edx
  18627. xorl %ecx, %edx
  18628. andl %r15d, %ebx
  18629. addl %edx, %r10d
  18630. rorxl $2, %r11d, %edx
  18631. rorxl $13, %r11d, %ecx
  18632. xorl %r9d, %ebx
  18633. xorl %edx, %ecx
  18634. rorxl $22, %r11d, %edx
  18635. addl %ebx, %r10d
  18636. xorl %ecx, %edx
  18637. movl %r12d, %ebx
  18638. leal (%r14,%r10,1), %r14d
  18639. xorl %r11d, %ebx
  18640. andl %ebx, %eax
  18641. addl %edx, %r10d
  18642. xorl %r12d, %eax
  18643. rorxl $6, %r14d, %edx
  18644. rorxl $11, %r14d, %ecx
  18645. leal (%r10,%rax,1), %r10d
  18646. addl 488(%rsp), %r9d
  18647. movl %r15d, %eax
  18648. xorl %edx, %ecx
  18649. xorl %r8d, %eax
  18650. rorxl $25, %r14d, %edx
  18651. xorl %ecx, %edx
  18652. andl %r14d, %eax
  18653. addl %edx, %r9d
  18654. rorxl $2, %r10d, %edx
  18655. rorxl $13, %r10d, %ecx
  18656. xorl %r8d, %eax
  18657. xorl %edx, %ecx
  18658. rorxl $22, %r10d, %edx
  18659. addl %eax, %r9d
  18660. xorl %ecx, %edx
  18661. movl %r11d, %eax
  18662. addl %r9d, %r13d
  18663. xorl %r10d, %eax
  18664. andl %eax, %ebx
  18665. addl %edx, %r9d
  18666. xorl %r11d, %ebx
  18667. rorxl $6, %r13d, %edx
  18668. rorxl $11, %r13d, %ecx
  18669. addl %ebx, %r9d
  18670. addl 492(%rsp), %r8d
  18671. movl %r14d, %ebx
  18672. xorl %edx, %ecx
  18673. xorl %r15d, %ebx
  18674. rorxl $25, %r13d, %edx
  18675. xorl %ecx, %edx
  18676. andl %r13d, %ebx
  18677. addl %edx, %r8d
  18678. rorxl $2, %r9d, %edx
  18679. rorxl $13, %r9d, %ecx
  18680. xorl %r15d, %ebx
  18681. xorl %edx, %ecx
  18682. rorxl $22, %r9d, %edx
  18683. addl %ebx, %r8d
  18684. xorl %ecx, %edx
  18685. movl %r10d, %ebx
  18686. leal (%r12,%r8,1), %r12d
  18687. xorl %r9d, %ebx
  18688. andl %ebx, %eax
  18689. addl %edx, %r8d
  18690. xorl %r10d, %eax
  18691. addl %eax, %r8d
  18692. addl %r8d, (%rdi)
  18693. addl %r9d, 4(%rdi)
  18694. addl %r10d, 8(%rdi)
  18695. addl %r11d, 12(%rdi)
  18696. addl %r12d, 16(%rdi)
  18697. addl %r13d, 20(%rdi)
  18698. addl %r14d, 24(%rdi)
  18699. addl %r15d, 28(%rdi)
  18700. xorq %rax, %rax
  18701. vzeroupper
  18702. addq $0x200, %rsp
  18703. popq %r15
  18704. popq %r14
  18705. popq %r13
  18706. popq %r12
  18707. popq %rbx
  18708. repz retq
  18709. #ifndef __APPLE__
  18710. .size Transform_Sha256_AVX2_RORX,.-Transform_Sha256_AVX2_RORX
  18711. #endif /* __APPLE__ */
  18712. #ifndef __APPLE__
  18713. .text
  18714. .globl Transform_Sha256_AVX2_RORX_Len
  18715. .type Transform_Sha256_AVX2_RORX_Len,@function
  18716. .align 16
  18717. Transform_Sha256_AVX2_RORX_Len:
  18718. #else
  18719. .section __TEXT,__text
  18720. .globl _Transform_Sha256_AVX2_RORX_Len
  18721. .p2align 4
  18722. _Transform_Sha256_AVX2_RORX_Len:
  18723. #endif /* __APPLE__ */
  18724. pushq %rbx
  18725. pushq %r12
  18726. pushq %r13
  18727. pushq %r14
  18728. pushq %r15
  18729. pushq %rbp
  18730. movq %rsi, %rbp
  18731. movq %rdx, %rsi
  18732. subq $0x200, %rsp
  18733. testb $0x40, %sil
  18734. je L_sha256_len_avx2_rorx_block
  18735. vmovdqu (%rbp), %ymm0
  18736. vmovdqu 32(%rbp), %ymm1
  18737. vmovups %ymm0, 32(%rdi)
  18738. vmovups %ymm1, 64(%rdi)
  18739. #ifndef __APPLE__
  18740. call Transform_Sha256_AVX2_RORX@plt
  18741. #else
  18742. call _Transform_Sha256_AVX2_RORX
  18743. #endif /* __APPLE__ */
  18744. addq $0x40, %rbp
  18745. subl $0x40, %esi
  18746. jz L_sha256_len_avx2_rorx_done
  18747. L_sha256_len_avx2_rorx_block:
  18748. vmovdqa L_avx2_rorx_sha256_flip_mask(%rip), %ymm13
  18749. vmovdqa L_avx2_rorx_sha256_shuf_00BA(%rip), %ymm11
  18750. vmovdqa L_avx2_rorx_sha256_shuf_DC00(%rip), %ymm12
  18751. movl (%rdi), %r8d
  18752. movl 4(%rdi), %r9d
  18753. movl 8(%rdi), %r10d
  18754. movl 12(%rdi), %r11d
  18755. movl 16(%rdi), %r12d
  18756. movl 20(%rdi), %r13d
  18757. movl 24(%rdi), %r14d
  18758. movl 28(%rdi), %r15d
  18759. # Start of loop processing two blocks
  18760. L_sha256_len_avx2_rorx_start:
  18761. # X0, X1, X2, X3 = W[0..15]
  18762. vmovdqu (%rbp), %xmm0
  18763. vmovdqu 16(%rbp), %xmm1
  18764. vinserti128 $0x01, 64(%rbp), %ymm0, %ymm0
  18765. vinserti128 $0x01, 80(%rbp), %ymm1, %ymm1
  18766. vpshufb %ymm13, %ymm0, %ymm0
  18767. vpshufb %ymm13, %ymm1, %ymm1
  18768. vpaddd 0+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  18769. vpaddd 32+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm5
  18770. vmovdqu %ymm4, (%rsp)
  18771. vmovdqu %ymm5, 32(%rsp)
  18772. vmovdqu 32(%rbp), %xmm2
  18773. vmovdqu 48(%rbp), %xmm3
  18774. vinserti128 $0x01, 96(%rbp), %ymm2, %ymm2
  18775. vinserti128 $0x01, 112(%rbp), %ymm3, %ymm3
  18776. vpshufb %ymm13, %ymm2, %ymm2
  18777. vpshufb %ymm13, %ymm3, %ymm3
  18778. vpaddd 64+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  18779. vpaddd 96+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm5
  18780. vmovdqu %ymm4, 64(%rsp)
  18781. vmovdqu %ymm5, 96(%rsp)
  18782. movl %r9d, %ebx
  18783. rorxl $6, %r12d, %edx
  18784. xorl %r10d, %ebx
  18785. # rnd_0: 0 - 0
  18786. movl %r13d, %eax
  18787. rorxl $11, %r12d, %ecx
  18788. addl (%rsp), %r15d
  18789. vpalignr $4, %ymm0, %ymm1, %ymm5
  18790. # rnd_0: 1 - 1
  18791. xorl %edx, %ecx
  18792. xorl %r14d, %eax
  18793. rorxl $25, %r12d, %edx
  18794. vpalignr $4, %ymm2, %ymm3, %ymm4
  18795. # rnd_0: 2 - 2
  18796. andl %r12d, %eax
  18797. xorl %ecx, %edx
  18798. rorxl $13, %r8d, %ecx
  18799. vpsrld $7, %ymm5, %ymm6
  18800. # rnd_0: 3 - 3
  18801. addl %edx, %r15d
  18802. rorxl $2, %r8d, %edx
  18803. xorl %r14d, %eax
  18804. vpslld $25, %ymm5, %ymm7
  18805. # rnd_0: 4 - 4
  18806. xorl %edx, %ecx
  18807. rorxl $22, %r8d, %edx
  18808. addl %eax, %r15d
  18809. vpsrld $18, %ymm5, %ymm8
  18810. # rnd_0: 5 - 5
  18811. xorl %ecx, %edx
  18812. movl %r9d, %eax
  18813. addl %r15d, %r11d
  18814. vpslld $14, %ymm5, %ymm9
  18815. # rnd_0: 6 - 6
  18816. xorl %r8d, %eax
  18817. addl %edx, %r15d
  18818. andl %eax, %ebx
  18819. vpor %ymm7, %ymm6, %ymm6
  18820. # rnd_0: 7 - 7
  18821. xorl %r9d, %ebx
  18822. rorxl $6, %r11d, %edx
  18823. addl %ebx, %r15d
  18824. vpor %ymm9, %ymm8, %ymm8
  18825. # rnd_1: 0 - 0
  18826. movl %r12d, %ebx
  18827. rorxl $11, %r11d, %ecx
  18828. addl 4(%rsp), %r14d
  18829. vpsrld $3, %ymm5, %ymm9
  18830. # rnd_1: 1 - 1
  18831. xorl %edx, %ecx
  18832. xorl %r13d, %ebx
  18833. rorxl $25, %r11d, %edx
  18834. vpxor %ymm8, %ymm6, %ymm6
  18835. # rnd_1: 2 - 2
  18836. andl %r11d, %ebx
  18837. xorl %ecx, %edx
  18838. rorxl $13, %r15d, %ecx
  18839. vpshufd $0xfa, %ymm3, %ymm7
  18840. # rnd_1: 3 - 3
  18841. addl %edx, %r14d
  18842. rorxl $2, %r15d, %edx
  18843. xorl %r13d, %ebx
  18844. vpxor %ymm6, %ymm9, %ymm5
  18845. # rnd_1: 4 - 4
  18846. xorl %edx, %ecx
  18847. rorxl $22, %r15d, %edx
  18848. addl %ebx, %r14d
  18849. vpsrld $10, %ymm7, %ymm8
  18850. # rnd_1: 5 - 5
  18851. xorl %ecx, %edx
  18852. addl %r14d, %r10d
  18853. movl %r8d, %ebx
  18854. vpsrlq $19, %ymm7, %ymm6
  18855. # rnd_1: 6 - 6
  18856. xorl %r15d, %ebx
  18857. addl %edx, %r14d
  18858. andl %ebx, %eax
  18859. vpsrlq $0x11, %ymm7, %ymm7
  18860. # rnd_1: 7 - 7
  18861. xorl %r8d, %eax
  18862. rorxl $6, %r10d, %edx
  18863. addl %eax, %r14d
  18864. vpaddd %ymm0, %ymm4, %ymm4
  18865. # rnd_0: 0 - 0
  18866. movl %r11d, %eax
  18867. rorxl $11, %r10d, %ecx
  18868. addl 8(%rsp), %r13d
  18869. vpxor %ymm7, %ymm6, %ymm6
  18870. # rnd_0: 1 - 1
  18871. xorl %edx, %ecx
  18872. xorl %r12d, %eax
  18873. rorxl $25, %r10d, %edx
  18874. vpxor %ymm6, %ymm8, %ymm8
  18875. # rnd_0: 2 - 2
  18876. andl %r10d, %eax
  18877. xorl %ecx, %edx
  18878. rorxl $13, %r14d, %ecx
  18879. vpaddd %ymm5, %ymm4, %ymm4
  18880. # rnd_0: 3 - 3
  18881. addl %edx, %r13d
  18882. rorxl $2, %r14d, %edx
  18883. xorl %r12d, %eax
  18884. vpshufb %ymm11, %ymm8, %ymm8
  18885. # rnd_0: 4 - 4
  18886. xorl %edx, %ecx
  18887. rorxl $22, %r14d, %edx
  18888. addl %eax, %r13d
  18889. vpaddd %ymm8, %ymm4, %ymm4
  18890. # rnd_0: 5 - 5
  18891. xorl %ecx, %edx
  18892. movl %r15d, %eax
  18893. addl %r13d, %r9d
  18894. vpshufd $0x50, %ymm4, %ymm6
  18895. # rnd_0: 6 - 6
  18896. xorl %r14d, %eax
  18897. addl %edx, %r13d
  18898. andl %eax, %ebx
  18899. vpsrlq $0x11, %ymm6, %ymm8
  18900. # rnd_0: 7 - 7
  18901. xorl %r15d, %ebx
  18902. rorxl $6, %r9d, %edx
  18903. addl %ebx, %r13d
  18904. vpsrlq $19, %ymm6, %ymm7
  18905. # rnd_1: 0 - 0
  18906. movl %r10d, %ebx
  18907. rorxl $11, %r9d, %ecx
  18908. addl 12(%rsp), %r12d
  18909. vpsrld $10, %ymm6, %ymm9
  18910. # rnd_1: 1 - 1
  18911. xorl %edx, %ecx
  18912. xorl %r11d, %ebx
  18913. rorxl $25, %r9d, %edx
  18914. vpxor %ymm7, %ymm8, %ymm8
  18915. # rnd_1: 2 - 2
  18916. andl %r9d, %ebx
  18917. xorl %ecx, %edx
  18918. rorxl $13, %r13d, %ecx
  18919. vpxor %ymm8, %ymm9, %ymm9
  18920. # rnd_1: 3 - 3
  18921. addl %edx, %r12d
  18922. rorxl $2, %r13d, %edx
  18923. xorl %r11d, %ebx
  18924. vpshufb %ymm12, %ymm9, %ymm9
  18925. # rnd_1: 4 - 4
  18926. xorl %edx, %ecx
  18927. rorxl $22, %r13d, %edx
  18928. addl %ebx, %r12d
  18929. vpaddd %ymm4, %ymm9, %ymm0
  18930. # rnd_1: 5 - 5
  18931. xorl %ecx, %edx
  18932. addl %r12d, %r8d
  18933. movl %r14d, %ebx
  18934. vpaddd 128+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  18935. # rnd_1: 6 - 6
  18936. xorl %r13d, %ebx
  18937. addl %edx, %r12d
  18938. andl %ebx, %eax
  18939. # rnd_1: 7 - 7
  18940. xorl %r14d, %eax
  18941. rorxl $6, %r8d, %edx
  18942. addl %eax, %r12d
  18943. vmovdqu %ymm4, 128(%rsp)
  18944. # rnd_0: 0 - 0
  18945. movl %r9d, %eax
  18946. rorxl $11, %r8d, %ecx
  18947. addl 32(%rsp), %r11d
  18948. vpalignr $4, %ymm1, %ymm2, %ymm5
  18949. # rnd_0: 1 - 1
  18950. xorl %edx, %ecx
  18951. xorl %r10d, %eax
  18952. rorxl $25, %r8d, %edx
  18953. vpalignr $4, %ymm3, %ymm0, %ymm4
  18954. # rnd_0: 2 - 2
  18955. andl %r8d, %eax
  18956. xorl %ecx, %edx
  18957. rorxl $13, %r12d, %ecx
  18958. vpsrld $7, %ymm5, %ymm6
  18959. # rnd_0: 3 - 3
  18960. addl %edx, %r11d
  18961. rorxl $2, %r12d, %edx
  18962. xorl %r10d, %eax
  18963. vpslld $25, %ymm5, %ymm7
  18964. # rnd_0: 4 - 4
  18965. xorl %edx, %ecx
  18966. rorxl $22, %r12d, %edx
  18967. addl %eax, %r11d
  18968. vpsrld $18, %ymm5, %ymm8
  18969. # rnd_0: 5 - 5
  18970. xorl %ecx, %edx
  18971. movl %r13d, %eax
  18972. addl %r11d, %r15d
  18973. vpslld $14, %ymm5, %ymm9
  18974. # rnd_0: 6 - 6
  18975. xorl %r12d, %eax
  18976. addl %edx, %r11d
  18977. andl %eax, %ebx
  18978. vpor %ymm7, %ymm6, %ymm6
  18979. # rnd_0: 7 - 7
  18980. xorl %r13d, %ebx
  18981. rorxl $6, %r15d, %edx
  18982. addl %ebx, %r11d
  18983. vpor %ymm9, %ymm8, %ymm8
  18984. # rnd_1: 0 - 0
  18985. movl %r8d, %ebx
  18986. rorxl $11, %r15d, %ecx
  18987. addl 36(%rsp), %r10d
  18988. vpsrld $3, %ymm5, %ymm9
  18989. # rnd_1: 1 - 1
  18990. xorl %edx, %ecx
  18991. xorl %r9d, %ebx
  18992. rorxl $25, %r15d, %edx
  18993. vpxor %ymm8, %ymm6, %ymm6
  18994. # rnd_1: 2 - 2
  18995. andl %r15d, %ebx
  18996. xorl %ecx, %edx
  18997. rorxl $13, %r11d, %ecx
  18998. vpshufd $0xfa, %ymm0, %ymm7
  18999. # rnd_1: 3 - 3
  19000. addl %edx, %r10d
  19001. rorxl $2, %r11d, %edx
  19002. xorl %r9d, %ebx
  19003. vpxor %ymm6, %ymm9, %ymm5
  19004. # rnd_1: 4 - 4
  19005. xorl %edx, %ecx
  19006. rorxl $22, %r11d, %edx
  19007. addl %ebx, %r10d
  19008. vpsrld $10, %ymm7, %ymm8
  19009. # rnd_1: 5 - 5
  19010. xorl %ecx, %edx
  19011. addl %r10d, %r14d
  19012. movl %r12d, %ebx
  19013. vpsrlq $19, %ymm7, %ymm6
  19014. # rnd_1: 6 - 6
  19015. xorl %r11d, %ebx
  19016. addl %edx, %r10d
  19017. andl %ebx, %eax
  19018. vpsrlq $0x11, %ymm7, %ymm7
  19019. # rnd_1: 7 - 7
  19020. xorl %r12d, %eax
  19021. rorxl $6, %r14d, %edx
  19022. addl %eax, %r10d
  19023. vpaddd %ymm1, %ymm4, %ymm4
  19024. # rnd_0: 0 - 0
  19025. movl %r15d, %eax
  19026. rorxl $11, %r14d, %ecx
  19027. addl 40(%rsp), %r9d
  19028. vpxor %ymm7, %ymm6, %ymm6
  19029. # rnd_0: 1 - 1
  19030. xorl %edx, %ecx
  19031. xorl %r8d, %eax
  19032. rorxl $25, %r14d, %edx
  19033. vpxor %ymm6, %ymm8, %ymm8
  19034. # rnd_0: 2 - 2
  19035. andl %r14d, %eax
  19036. xorl %ecx, %edx
  19037. rorxl $13, %r10d, %ecx
  19038. vpaddd %ymm5, %ymm4, %ymm4
  19039. # rnd_0: 3 - 3
  19040. addl %edx, %r9d
  19041. rorxl $2, %r10d, %edx
  19042. xorl %r8d, %eax
  19043. vpshufb %ymm11, %ymm8, %ymm8
  19044. # rnd_0: 4 - 4
  19045. xorl %edx, %ecx
  19046. rorxl $22, %r10d, %edx
  19047. addl %eax, %r9d
  19048. vpaddd %ymm8, %ymm4, %ymm4
  19049. # rnd_0: 5 - 5
  19050. xorl %ecx, %edx
  19051. movl %r11d, %eax
  19052. addl %r9d, %r13d
  19053. vpshufd $0x50, %ymm4, %ymm6
  19054. # rnd_0: 6 - 6
  19055. xorl %r10d, %eax
  19056. addl %edx, %r9d
  19057. andl %eax, %ebx
  19058. vpsrlq $0x11, %ymm6, %ymm8
  19059. # rnd_0: 7 - 7
  19060. xorl %r11d, %ebx
  19061. rorxl $6, %r13d, %edx
  19062. addl %ebx, %r9d
  19063. vpsrlq $19, %ymm6, %ymm7
  19064. # rnd_1: 0 - 0
  19065. movl %r14d, %ebx
  19066. rorxl $11, %r13d, %ecx
  19067. addl 44(%rsp), %r8d
  19068. vpsrld $10, %ymm6, %ymm9
  19069. # rnd_1: 1 - 1
  19070. xorl %edx, %ecx
  19071. xorl %r15d, %ebx
  19072. rorxl $25, %r13d, %edx
  19073. vpxor %ymm7, %ymm8, %ymm8
  19074. # rnd_1: 2 - 2
  19075. andl %r13d, %ebx
  19076. xorl %ecx, %edx
  19077. rorxl $13, %r9d, %ecx
  19078. vpxor %ymm8, %ymm9, %ymm9
  19079. # rnd_1: 3 - 3
  19080. addl %edx, %r8d
  19081. rorxl $2, %r9d, %edx
  19082. xorl %r15d, %ebx
  19083. vpshufb %ymm12, %ymm9, %ymm9
  19084. # rnd_1: 4 - 4
  19085. xorl %edx, %ecx
  19086. rorxl $22, %r9d, %edx
  19087. addl %ebx, %r8d
  19088. vpaddd %ymm4, %ymm9, %ymm1
  19089. # rnd_1: 5 - 5
  19090. xorl %ecx, %edx
  19091. addl %r8d, %r12d
  19092. movl %r10d, %ebx
  19093. vpaddd 160+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm4
  19094. # rnd_1: 6 - 6
  19095. xorl %r9d, %ebx
  19096. addl %edx, %r8d
  19097. andl %ebx, %eax
  19098. # rnd_1: 7 - 7
  19099. xorl %r10d, %eax
  19100. rorxl $6, %r12d, %edx
  19101. addl %eax, %r8d
  19102. vmovdqu %ymm4, 160(%rsp)
  19103. # rnd_0: 0 - 0
  19104. movl %r13d, %eax
  19105. rorxl $11, %r12d, %ecx
  19106. addl 64(%rsp), %r15d
  19107. vpalignr $4, %ymm2, %ymm3, %ymm5
  19108. # rnd_0: 1 - 1
  19109. xorl %edx, %ecx
  19110. xorl %r14d, %eax
  19111. rorxl $25, %r12d, %edx
  19112. vpalignr $4, %ymm0, %ymm1, %ymm4
  19113. # rnd_0: 2 - 2
  19114. andl %r12d, %eax
  19115. xorl %ecx, %edx
  19116. rorxl $13, %r8d, %ecx
  19117. vpsrld $7, %ymm5, %ymm6
  19118. # rnd_0: 3 - 3
  19119. addl %edx, %r15d
  19120. rorxl $2, %r8d, %edx
  19121. xorl %r14d, %eax
  19122. vpslld $25, %ymm5, %ymm7
  19123. # rnd_0: 4 - 4
  19124. xorl %edx, %ecx
  19125. rorxl $22, %r8d, %edx
  19126. addl %eax, %r15d
  19127. vpsrld $18, %ymm5, %ymm8
  19128. # rnd_0: 5 - 5
  19129. xorl %ecx, %edx
  19130. movl %r9d, %eax
  19131. addl %r15d, %r11d
  19132. vpslld $14, %ymm5, %ymm9
  19133. # rnd_0: 6 - 6
  19134. xorl %r8d, %eax
  19135. addl %edx, %r15d
  19136. andl %eax, %ebx
  19137. vpor %ymm7, %ymm6, %ymm6
  19138. # rnd_0: 7 - 7
  19139. xorl %r9d, %ebx
  19140. rorxl $6, %r11d, %edx
  19141. addl %ebx, %r15d
  19142. vpor %ymm9, %ymm8, %ymm8
  19143. # rnd_1: 0 - 0
  19144. movl %r12d, %ebx
  19145. rorxl $11, %r11d, %ecx
  19146. addl 68(%rsp), %r14d
  19147. vpsrld $3, %ymm5, %ymm9
  19148. # rnd_1: 1 - 1
  19149. xorl %edx, %ecx
  19150. xorl %r13d, %ebx
  19151. rorxl $25, %r11d, %edx
  19152. vpxor %ymm8, %ymm6, %ymm6
  19153. # rnd_1: 2 - 2
  19154. andl %r11d, %ebx
  19155. xorl %ecx, %edx
  19156. rorxl $13, %r15d, %ecx
  19157. vpshufd $0xfa, %ymm1, %ymm7
  19158. # rnd_1: 3 - 3
  19159. addl %edx, %r14d
  19160. rorxl $2, %r15d, %edx
  19161. xorl %r13d, %ebx
  19162. vpxor %ymm6, %ymm9, %ymm5
  19163. # rnd_1: 4 - 4
  19164. xorl %edx, %ecx
  19165. rorxl $22, %r15d, %edx
  19166. addl %ebx, %r14d
  19167. vpsrld $10, %ymm7, %ymm8
  19168. # rnd_1: 5 - 5
  19169. xorl %ecx, %edx
  19170. addl %r14d, %r10d
  19171. movl %r8d, %ebx
  19172. vpsrlq $19, %ymm7, %ymm6
  19173. # rnd_1: 6 - 6
  19174. xorl %r15d, %ebx
  19175. addl %edx, %r14d
  19176. andl %ebx, %eax
  19177. vpsrlq $0x11, %ymm7, %ymm7
  19178. # rnd_1: 7 - 7
  19179. xorl %r8d, %eax
  19180. rorxl $6, %r10d, %edx
  19181. addl %eax, %r14d
  19182. vpaddd %ymm2, %ymm4, %ymm4
  19183. # rnd_0: 0 - 0
  19184. movl %r11d, %eax
  19185. rorxl $11, %r10d, %ecx
  19186. addl 72(%rsp), %r13d
  19187. vpxor %ymm7, %ymm6, %ymm6
  19188. # rnd_0: 1 - 1
  19189. xorl %edx, %ecx
  19190. xorl %r12d, %eax
  19191. rorxl $25, %r10d, %edx
  19192. vpxor %ymm6, %ymm8, %ymm8
  19193. # rnd_0: 2 - 2
  19194. andl %r10d, %eax
  19195. xorl %ecx, %edx
  19196. rorxl $13, %r14d, %ecx
  19197. vpaddd %ymm5, %ymm4, %ymm4
  19198. # rnd_0: 3 - 3
  19199. addl %edx, %r13d
  19200. rorxl $2, %r14d, %edx
  19201. xorl %r12d, %eax
  19202. vpshufb %ymm11, %ymm8, %ymm8
  19203. # rnd_0: 4 - 4
  19204. xorl %edx, %ecx
  19205. rorxl $22, %r14d, %edx
  19206. addl %eax, %r13d
  19207. vpaddd %ymm8, %ymm4, %ymm4
  19208. # rnd_0: 5 - 5
  19209. xorl %ecx, %edx
  19210. movl %r15d, %eax
  19211. addl %r13d, %r9d
  19212. vpshufd $0x50, %ymm4, %ymm6
  19213. # rnd_0: 6 - 6
  19214. xorl %r14d, %eax
  19215. addl %edx, %r13d
  19216. andl %eax, %ebx
  19217. vpsrlq $0x11, %ymm6, %ymm8
  19218. # rnd_0: 7 - 7
  19219. xorl %r15d, %ebx
  19220. rorxl $6, %r9d, %edx
  19221. addl %ebx, %r13d
  19222. vpsrlq $19, %ymm6, %ymm7
  19223. # rnd_1: 0 - 0
  19224. movl %r10d, %ebx
  19225. rorxl $11, %r9d, %ecx
  19226. addl 76(%rsp), %r12d
  19227. vpsrld $10, %ymm6, %ymm9
  19228. # rnd_1: 1 - 1
  19229. xorl %edx, %ecx
  19230. xorl %r11d, %ebx
  19231. rorxl $25, %r9d, %edx
  19232. vpxor %ymm7, %ymm8, %ymm8
  19233. # rnd_1: 2 - 2
  19234. andl %r9d, %ebx
  19235. xorl %ecx, %edx
  19236. rorxl $13, %r13d, %ecx
  19237. vpxor %ymm8, %ymm9, %ymm9
  19238. # rnd_1: 3 - 3
  19239. addl %edx, %r12d
  19240. rorxl $2, %r13d, %edx
  19241. xorl %r11d, %ebx
  19242. vpshufb %ymm12, %ymm9, %ymm9
  19243. # rnd_1: 4 - 4
  19244. xorl %edx, %ecx
  19245. rorxl $22, %r13d, %edx
  19246. addl %ebx, %r12d
  19247. vpaddd %ymm4, %ymm9, %ymm2
  19248. # rnd_1: 5 - 5
  19249. xorl %ecx, %edx
  19250. addl %r12d, %r8d
  19251. movl %r14d, %ebx
  19252. vpaddd 192+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  19253. # rnd_1: 6 - 6
  19254. xorl %r13d, %ebx
  19255. addl %edx, %r12d
  19256. andl %ebx, %eax
  19257. # rnd_1: 7 - 7
  19258. xorl %r14d, %eax
  19259. rorxl $6, %r8d, %edx
  19260. addl %eax, %r12d
  19261. vmovdqu %ymm4, 192(%rsp)
  19262. # rnd_0: 0 - 0
  19263. movl %r9d, %eax
  19264. rorxl $11, %r8d, %ecx
  19265. addl 96(%rsp), %r11d
  19266. vpalignr $4, %ymm3, %ymm0, %ymm5
  19267. # rnd_0: 1 - 1
  19268. xorl %edx, %ecx
  19269. xorl %r10d, %eax
  19270. rorxl $25, %r8d, %edx
  19271. vpalignr $4, %ymm1, %ymm2, %ymm4
  19272. # rnd_0: 2 - 2
  19273. andl %r8d, %eax
  19274. xorl %ecx, %edx
  19275. rorxl $13, %r12d, %ecx
  19276. vpsrld $7, %ymm5, %ymm6
  19277. # rnd_0: 3 - 3
  19278. addl %edx, %r11d
  19279. rorxl $2, %r12d, %edx
  19280. xorl %r10d, %eax
  19281. vpslld $25, %ymm5, %ymm7
  19282. # rnd_0: 4 - 4
  19283. xorl %edx, %ecx
  19284. rorxl $22, %r12d, %edx
  19285. addl %eax, %r11d
  19286. vpsrld $18, %ymm5, %ymm8
  19287. # rnd_0: 5 - 5
  19288. xorl %ecx, %edx
  19289. movl %r13d, %eax
  19290. addl %r11d, %r15d
  19291. vpslld $14, %ymm5, %ymm9
  19292. # rnd_0: 6 - 6
  19293. xorl %r12d, %eax
  19294. addl %edx, %r11d
  19295. andl %eax, %ebx
  19296. vpor %ymm7, %ymm6, %ymm6
  19297. # rnd_0: 7 - 7
  19298. xorl %r13d, %ebx
  19299. rorxl $6, %r15d, %edx
  19300. addl %ebx, %r11d
  19301. vpor %ymm9, %ymm8, %ymm8
  19302. # rnd_1: 0 - 0
  19303. movl %r8d, %ebx
  19304. rorxl $11, %r15d, %ecx
  19305. addl 100(%rsp), %r10d
  19306. vpsrld $3, %ymm5, %ymm9
  19307. # rnd_1: 1 - 1
  19308. xorl %edx, %ecx
  19309. xorl %r9d, %ebx
  19310. rorxl $25, %r15d, %edx
  19311. vpxor %ymm8, %ymm6, %ymm6
  19312. # rnd_1: 2 - 2
  19313. andl %r15d, %ebx
  19314. xorl %ecx, %edx
  19315. rorxl $13, %r11d, %ecx
  19316. vpshufd $0xfa, %ymm2, %ymm7
  19317. # rnd_1: 3 - 3
  19318. addl %edx, %r10d
  19319. rorxl $2, %r11d, %edx
  19320. xorl %r9d, %ebx
  19321. vpxor %ymm6, %ymm9, %ymm5
  19322. # rnd_1: 4 - 4
  19323. xorl %edx, %ecx
  19324. rorxl $22, %r11d, %edx
  19325. addl %ebx, %r10d
  19326. vpsrld $10, %ymm7, %ymm8
  19327. # rnd_1: 5 - 5
  19328. xorl %ecx, %edx
  19329. addl %r10d, %r14d
  19330. movl %r12d, %ebx
  19331. vpsrlq $19, %ymm7, %ymm6
  19332. # rnd_1: 6 - 6
  19333. xorl %r11d, %ebx
  19334. addl %edx, %r10d
  19335. andl %ebx, %eax
  19336. vpsrlq $0x11, %ymm7, %ymm7
  19337. # rnd_1: 7 - 7
  19338. xorl %r12d, %eax
  19339. rorxl $6, %r14d, %edx
  19340. addl %eax, %r10d
  19341. vpaddd %ymm3, %ymm4, %ymm4
  19342. # rnd_0: 0 - 0
  19343. movl %r15d, %eax
  19344. rorxl $11, %r14d, %ecx
  19345. addl 104(%rsp), %r9d
  19346. vpxor %ymm7, %ymm6, %ymm6
  19347. # rnd_0: 1 - 1
  19348. xorl %edx, %ecx
  19349. xorl %r8d, %eax
  19350. rorxl $25, %r14d, %edx
  19351. vpxor %ymm6, %ymm8, %ymm8
  19352. # rnd_0: 2 - 2
  19353. andl %r14d, %eax
  19354. xorl %ecx, %edx
  19355. rorxl $13, %r10d, %ecx
  19356. vpaddd %ymm5, %ymm4, %ymm4
  19357. # rnd_0: 3 - 3
  19358. addl %edx, %r9d
  19359. rorxl $2, %r10d, %edx
  19360. xorl %r8d, %eax
  19361. vpshufb %ymm11, %ymm8, %ymm8
  19362. # rnd_0: 4 - 4
  19363. xorl %edx, %ecx
  19364. rorxl $22, %r10d, %edx
  19365. addl %eax, %r9d
  19366. vpaddd %ymm8, %ymm4, %ymm4
  19367. # rnd_0: 5 - 5
  19368. xorl %ecx, %edx
  19369. movl %r11d, %eax
  19370. addl %r9d, %r13d
  19371. vpshufd $0x50, %ymm4, %ymm6
  19372. # rnd_0: 6 - 6
  19373. xorl %r10d, %eax
  19374. addl %edx, %r9d
  19375. andl %eax, %ebx
  19376. vpsrlq $0x11, %ymm6, %ymm8
  19377. # rnd_0: 7 - 7
  19378. xorl %r11d, %ebx
  19379. rorxl $6, %r13d, %edx
  19380. addl %ebx, %r9d
  19381. vpsrlq $19, %ymm6, %ymm7
  19382. # rnd_1: 0 - 0
  19383. movl %r14d, %ebx
  19384. rorxl $11, %r13d, %ecx
  19385. addl 108(%rsp), %r8d
  19386. vpsrld $10, %ymm6, %ymm9
  19387. # rnd_1: 1 - 1
  19388. xorl %edx, %ecx
  19389. xorl %r15d, %ebx
  19390. rorxl $25, %r13d, %edx
  19391. vpxor %ymm7, %ymm8, %ymm8
  19392. # rnd_1: 2 - 2
  19393. andl %r13d, %ebx
  19394. xorl %ecx, %edx
  19395. rorxl $13, %r9d, %ecx
  19396. vpxor %ymm8, %ymm9, %ymm9
  19397. # rnd_1: 3 - 3
  19398. addl %edx, %r8d
  19399. rorxl $2, %r9d, %edx
  19400. xorl %r15d, %ebx
  19401. vpshufb %ymm12, %ymm9, %ymm9
  19402. # rnd_1: 4 - 4
  19403. xorl %edx, %ecx
  19404. rorxl $22, %r9d, %edx
  19405. addl %ebx, %r8d
  19406. vpaddd %ymm4, %ymm9, %ymm3
  19407. # rnd_1: 5 - 5
  19408. xorl %ecx, %edx
  19409. addl %r8d, %r12d
  19410. movl %r10d, %ebx
  19411. vpaddd 224+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm4
  19412. # rnd_1: 6 - 6
  19413. xorl %r9d, %ebx
  19414. addl %edx, %r8d
  19415. andl %ebx, %eax
  19416. # rnd_1: 7 - 7
  19417. xorl %r10d, %eax
  19418. rorxl $6, %r12d, %edx
  19419. addl %eax, %r8d
  19420. vmovdqu %ymm4, 224(%rsp)
  19421. # rnd_0: 0 - 0
  19422. movl %r13d, %eax
  19423. rorxl $11, %r12d, %ecx
  19424. addl 128(%rsp), %r15d
  19425. vpalignr $4, %ymm0, %ymm1, %ymm5
  19426. # rnd_0: 1 - 1
  19427. xorl %edx, %ecx
  19428. xorl %r14d, %eax
  19429. rorxl $25, %r12d, %edx
  19430. vpalignr $4, %ymm2, %ymm3, %ymm4
  19431. # rnd_0: 2 - 2
  19432. andl %r12d, %eax
  19433. xorl %ecx, %edx
  19434. rorxl $13, %r8d, %ecx
  19435. vpsrld $7, %ymm5, %ymm6
  19436. # rnd_0: 3 - 3
  19437. addl %edx, %r15d
  19438. rorxl $2, %r8d, %edx
  19439. xorl %r14d, %eax
  19440. vpslld $25, %ymm5, %ymm7
  19441. # rnd_0: 4 - 4
  19442. xorl %edx, %ecx
  19443. rorxl $22, %r8d, %edx
  19444. addl %eax, %r15d
  19445. vpsrld $18, %ymm5, %ymm8
  19446. # rnd_0: 5 - 5
  19447. xorl %ecx, %edx
  19448. movl %r9d, %eax
  19449. addl %r15d, %r11d
  19450. vpslld $14, %ymm5, %ymm9
  19451. # rnd_0: 6 - 6
  19452. xorl %r8d, %eax
  19453. addl %edx, %r15d
  19454. andl %eax, %ebx
  19455. vpor %ymm7, %ymm6, %ymm6
  19456. # rnd_0: 7 - 7
  19457. xorl %r9d, %ebx
  19458. rorxl $6, %r11d, %edx
  19459. addl %ebx, %r15d
  19460. vpor %ymm9, %ymm8, %ymm8
  19461. # rnd_1: 0 - 0
  19462. movl %r12d, %ebx
  19463. rorxl $11, %r11d, %ecx
  19464. addl 132(%rsp), %r14d
  19465. vpsrld $3, %ymm5, %ymm9
  19466. # rnd_1: 1 - 1
  19467. xorl %edx, %ecx
  19468. xorl %r13d, %ebx
  19469. rorxl $25, %r11d, %edx
  19470. vpxor %ymm8, %ymm6, %ymm6
  19471. # rnd_1: 2 - 2
  19472. andl %r11d, %ebx
  19473. xorl %ecx, %edx
  19474. rorxl $13, %r15d, %ecx
  19475. vpshufd $0xfa, %ymm3, %ymm7
  19476. # rnd_1: 3 - 3
  19477. addl %edx, %r14d
  19478. rorxl $2, %r15d, %edx
  19479. xorl %r13d, %ebx
  19480. vpxor %ymm6, %ymm9, %ymm5
  19481. # rnd_1: 4 - 4
  19482. xorl %edx, %ecx
  19483. rorxl $22, %r15d, %edx
  19484. addl %ebx, %r14d
  19485. vpsrld $10, %ymm7, %ymm8
  19486. # rnd_1: 5 - 5
  19487. xorl %ecx, %edx
  19488. addl %r14d, %r10d
  19489. movl %r8d, %ebx
  19490. vpsrlq $19, %ymm7, %ymm6
  19491. # rnd_1: 6 - 6
  19492. xorl %r15d, %ebx
  19493. addl %edx, %r14d
  19494. andl %ebx, %eax
  19495. vpsrlq $0x11, %ymm7, %ymm7
  19496. # rnd_1: 7 - 7
  19497. xorl %r8d, %eax
  19498. rorxl $6, %r10d, %edx
  19499. addl %eax, %r14d
  19500. vpaddd %ymm0, %ymm4, %ymm4
  19501. # rnd_0: 0 - 0
  19502. movl %r11d, %eax
  19503. rorxl $11, %r10d, %ecx
  19504. addl 136(%rsp), %r13d
  19505. vpxor %ymm7, %ymm6, %ymm6
  19506. # rnd_0: 1 - 1
  19507. xorl %edx, %ecx
  19508. xorl %r12d, %eax
  19509. rorxl $25, %r10d, %edx
  19510. vpxor %ymm6, %ymm8, %ymm8
  19511. # rnd_0: 2 - 2
  19512. andl %r10d, %eax
  19513. xorl %ecx, %edx
  19514. rorxl $13, %r14d, %ecx
  19515. vpaddd %ymm5, %ymm4, %ymm4
  19516. # rnd_0: 3 - 3
  19517. addl %edx, %r13d
  19518. rorxl $2, %r14d, %edx
  19519. xorl %r12d, %eax
  19520. vpshufb %ymm11, %ymm8, %ymm8
  19521. # rnd_0: 4 - 4
  19522. xorl %edx, %ecx
  19523. rorxl $22, %r14d, %edx
  19524. addl %eax, %r13d
  19525. vpaddd %ymm8, %ymm4, %ymm4
  19526. # rnd_0: 5 - 5
  19527. xorl %ecx, %edx
  19528. movl %r15d, %eax
  19529. addl %r13d, %r9d
  19530. vpshufd $0x50, %ymm4, %ymm6
  19531. # rnd_0: 6 - 6
  19532. xorl %r14d, %eax
  19533. addl %edx, %r13d
  19534. andl %eax, %ebx
  19535. vpsrlq $0x11, %ymm6, %ymm8
  19536. # rnd_0: 7 - 7
  19537. xorl %r15d, %ebx
  19538. rorxl $6, %r9d, %edx
  19539. addl %ebx, %r13d
  19540. vpsrlq $19, %ymm6, %ymm7
  19541. # rnd_1: 0 - 0
  19542. movl %r10d, %ebx
  19543. rorxl $11, %r9d, %ecx
  19544. addl 140(%rsp), %r12d
  19545. vpsrld $10, %ymm6, %ymm9
  19546. # rnd_1: 1 - 1
  19547. xorl %edx, %ecx
  19548. xorl %r11d, %ebx
  19549. rorxl $25, %r9d, %edx
  19550. vpxor %ymm7, %ymm8, %ymm8
  19551. # rnd_1: 2 - 2
  19552. andl %r9d, %ebx
  19553. xorl %ecx, %edx
  19554. rorxl $13, %r13d, %ecx
  19555. vpxor %ymm8, %ymm9, %ymm9
  19556. # rnd_1: 3 - 3
  19557. addl %edx, %r12d
  19558. rorxl $2, %r13d, %edx
  19559. xorl %r11d, %ebx
  19560. vpshufb %ymm12, %ymm9, %ymm9
  19561. # rnd_1: 4 - 4
  19562. xorl %edx, %ecx
  19563. rorxl $22, %r13d, %edx
  19564. addl %ebx, %r12d
  19565. vpaddd %ymm4, %ymm9, %ymm0
  19566. # rnd_1: 5 - 5
  19567. xorl %ecx, %edx
  19568. addl %r12d, %r8d
  19569. movl %r14d, %ebx
  19570. vpaddd 256+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  19571. # rnd_1: 6 - 6
  19572. xorl %r13d, %ebx
  19573. addl %edx, %r12d
  19574. andl %ebx, %eax
  19575. # rnd_1: 7 - 7
  19576. xorl %r14d, %eax
  19577. rorxl $6, %r8d, %edx
  19578. addl %eax, %r12d
  19579. vmovdqu %ymm4, 256(%rsp)
  19580. # rnd_0: 0 - 0
  19581. movl %r9d, %eax
  19582. rorxl $11, %r8d, %ecx
  19583. addl 160(%rsp), %r11d
  19584. vpalignr $4, %ymm1, %ymm2, %ymm5
  19585. # rnd_0: 1 - 1
  19586. xorl %edx, %ecx
  19587. xorl %r10d, %eax
  19588. rorxl $25, %r8d, %edx
  19589. vpalignr $4, %ymm3, %ymm0, %ymm4
  19590. # rnd_0: 2 - 2
  19591. andl %r8d, %eax
  19592. xorl %ecx, %edx
  19593. rorxl $13, %r12d, %ecx
  19594. vpsrld $7, %ymm5, %ymm6
  19595. # rnd_0: 3 - 3
  19596. addl %edx, %r11d
  19597. rorxl $2, %r12d, %edx
  19598. xorl %r10d, %eax
  19599. vpslld $25, %ymm5, %ymm7
  19600. # rnd_0: 4 - 4
  19601. xorl %edx, %ecx
  19602. rorxl $22, %r12d, %edx
  19603. addl %eax, %r11d
  19604. vpsrld $18, %ymm5, %ymm8
  19605. # rnd_0: 5 - 5
  19606. xorl %ecx, %edx
  19607. movl %r13d, %eax
  19608. addl %r11d, %r15d
  19609. vpslld $14, %ymm5, %ymm9
  19610. # rnd_0: 6 - 6
  19611. xorl %r12d, %eax
  19612. addl %edx, %r11d
  19613. andl %eax, %ebx
  19614. vpor %ymm7, %ymm6, %ymm6
  19615. # rnd_0: 7 - 7
  19616. xorl %r13d, %ebx
  19617. rorxl $6, %r15d, %edx
  19618. addl %ebx, %r11d
  19619. vpor %ymm9, %ymm8, %ymm8
  19620. # rnd_1: 0 - 0
  19621. movl %r8d, %ebx
  19622. rorxl $11, %r15d, %ecx
  19623. addl 164(%rsp), %r10d
  19624. vpsrld $3, %ymm5, %ymm9
  19625. # rnd_1: 1 - 1
  19626. xorl %edx, %ecx
  19627. xorl %r9d, %ebx
  19628. rorxl $25, %r15d, %edx
  19629. vpxor %ymm8, %ymm6, %ymm6
  19630. # rnd_1: 2 - 2
  19631. andl %r15d, %ebx
  19632. xorl %ecx, %edx
  19633. rorxl $13, %r11d, %ecx
  19634. vpshufd $0xfa, %ymm0, %ymm7
  19635. # rnd_1: 3 - 3
  19636. addl %edx, %r10d
  19637. rorxl $2, %r11d, %edx
  19638. xorl %r9d, %ebx
  19639. vpxor %ymm6, %ymm9, %ymm5
  19640. # rnd_1: 4 - 4
  19641. xorl %edx, %ecx
  19642. rorxl $22, %r11d, %edx
  19643. addl %ebx, %r10d
  19644. vpsrld $10, %ymm7, %ymm8
  19645. # rnd_1: 5 - 5
  19646. xorl %ecx, %edx
  19647. addl %r10d, %r14d
  19648. movl %r12d, %ebx
  19649. vpsrlq $19, %ymm7, %ymm6
  19650. # rnd_1: 6 - 6
  19651. xorl %r11d, %ebx
  19652. addl %edx, %r10d
  19653. andl %ebx, %eax
  19654. vpsrlq $0x11, %ymm7, %ymm7
  19655. # rnd_1: 7 - 7
  19656. xorl %r12d, %eax
  19657. rorxl $6, %r14d, %edx
  19658. addl %eax, %r10d
  19659. vpaddd %ymm1, %ymm4, %ymm4
  19660. # rnd_0: 0 - 0
  19661. movl %r15d, %eax
  19662. rorxl $11, %r14d, %ecx
  19663. addl 168(%rsp), %r9d
  19664. vpxor %ymm7, %ymm6, %ymm6
  19665. # rnd_0: 1 - 1
  19666. xorl %edx, %ecx
  19667. xorl %r8d, %eax
  19668. rorxl $25, %r14d, %edx
  19669. vpxor %ymm6, %ymm8, %ymm8
  19670. # rnd_0: 2 - 2
  19671. andl %r14d, %eax
  19672. xorl %ecx, %edx
  19673. rorxl $13, %r10d, %ecx
  19674. vpaddd %ymm5, %ymm4, %ymm4
  19675. # rnd_0: 3 - 3
  19676. addl %edx, %r9d
  19677. rorxl $2, %r10d, %edx
  19678. xorl %r8d, %eax
  19679. vpshufb %ymm11, %ymm8, %ymm8
  19680. # rnd_0: 4 - 4
  19681. xorl %edx, %ecx
  19682. rorxl $22, %r10d, %edx
  19683. addl %eax, %r9d
  19684. vpaddd %ymm8, %ymm4, %ymm4
  19685. # rnd_0: 5 - 5
  19686. xorl %ecx, %edx
  19687. movl %r11d, %eax
  19688. addl %r9d, %r13d
  19689. vpshufd $0x50, %ymm4, %ymm6
  19690. # rnd_0: 6 - 6
  19691. xorl %r10d, %eax
  19692. addl %edx, %r9d
  19693. andl %eax, %ebx
  19694. vpsrlq $0x11, %ymm6, %ymm8
  19695. # rnd_0: 7 - 7
  19696. xorl %r11d, %ebx
  19697. rorxl $6, %r13d, %edx
  19698. addl %ebx, %r9d
  19699. vpsrlq $19, %ymm6, %ymm7
  19700. # rnd_1: 0 - 0
  19701. movl %r14d, %ebx
  19702. rorxl $11, %r13d, %ecx
  19703. addl 172(%rsp), %r8d
  19704. vpsrld $10, %ymm6, %ymm9
  19705. # rnd_1: 1 - 1
  19706. xorl %edx, %ecx
  19707. xorl %r15d, %ebx
  19708. rorxl $25, %r13d, %edx
  19709. vpxor %ymm7, %ymm8, %ymm8
  19710. # rnd_1: 2 - 2
  19711. andl %r13d, %ebx
  19712. xorl %ecx, %edx
  19713. rorxl $13, %r9d, %ecx
  19714. vpxor %ymm8, %ymm9, %ymm9
  19715. # rnd_1: 3 - 3
  19716. addl %edx, %r8d
  19717. rorxl $2, %r9d, %edx
  19718. xorl %r15d, %ebx
  19719. vpshufb %ymm12, %ymm9, %ymm9
  19720. # rnd_1: 4 - 4
  19721. xorl %edx, %ecx
  19722. rorxl $22, %r9d, %edx
  19723. addl %ebx, %r8d
  19724. vpaddd %ymm4, %ymm9, %ymm1
  19725. # rnd_1: 5 - 5
  19726. xorl %ecx, %edx
  19727. addl %r8d, %r12d
  19728. movl %r10d, %ebx
  19729. vpaddd 288+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm4
  19730. # rnd_1: 6 - 6
  19731. xorl %r9d, %ebx
  19732. addl %edx, %r8d
  19733. andl %ebx, %eax
  19734. # rnd_1: 7 - 7
  19735. xorl %r10d, %eax
  19736. rorxl $6, %r12d, %edx
  19737. addl %eax, %r8d
  19738. vmovdqu %ymm4, 288(%rsp)
  19739. # rnd_0: 0 - 0
  19740. movl %r13d, %eax
  19741. rorxl $11, %r12d, %ecx
  19742. addl 192(%rsp), %r15d
  19743. vpalignr $4, %ymm2, %ymm3, %ymm5
  19744. # rnd_0: 1 - 1
  19745. xorl %edx, %ecx
  19746. xorl %r14d, %eax
  19747. rorxl $25, %r12d, %edx
  19748. vpalignr $4, %ymm0, %ymm1, %ymm4
  19749. # rnd_0: 2 - 2
  19750. andl %r12d, %eax
  19751. xorl %ecx, %edx
  19752. rorxl $13, %r8d, %ecx
  19753. vpsrld $7, %ymm5, %ymm6
  19754. # rnd_0: 3 - 3
  19755. addl %edx, %r15d
  19756. rorxl $2, %r8d, %edx
  19757. xorl %r14d, %eax
  19758. vpslld $25, %ymm5, %ymm7
  19759. # rnd_0: 4 - 4
  19760. xorl %edx, %ecx
  19761. rorxl $22, %r8d, %edx
  19762. addl %eax, %r15d
  19763. vpsrld $18, %ymm5, %ymm8
  19764. # rnd_0: 5 - 5
  19765. xorl %ecx, %edx
  19766. movl %r9d, %eax
  19767. addl %r15d, %r11d
  19768. vpslld $14, %ymm5, %ymm9
  19769. # rnd_0: 6 - 6
  19770. xorl %r8d, %eax
  19771. addl %edx, %r15d
  19772. andl %eax, %ebx
  19773. vpor %ymm7, %ymm6, %ymm6
  19774. # rnd_0: 7 - 7
  19775. xorl %r9d, %ebx
  19776. rorxl $6, %r11d, %edx
  19777. addl %ebx, %r15d
  19778. vpor %ymm9, %ymm8, %ymm8
  19779. # rnd_1: 0 - 0
  19780. movl %r12d, %ebx
  19781. rorxl $11, %r11d, %ecx
  19782. addl 196(%rsp), %r14d
  19783. vpsrld $3, %ymm5, %ymm9
  19784. # rnd_1: 1 - 1
  19785. xorl %edx, %ecx
  19786. xorl %r13d, %ebx
  19787. rorxl $25, %r11d, %edx
  19788. vpxor %ymm8, %ymm6, %ymm6
  19789. # rnd_1: 2 - 2
  19790. andl %r11d, %ebx
  19791. xorl %ecx, %edx
  19792. rorxl $13, %r15d, %ecx
  19793. vpshufd $0xfa, %ymm1, %ymm7
  19794. # rnd_1: 3 - 3
  19795. addl %edx, %r14d
  19796. rorxl $2, %r15d, %edx
  19797. xorl %r13d, %ebx
  19798. vpxor %ymm6, %ymm9, %ymm5
  19799. # rnd_1: 4 - 4
  19800. xorl %edx, %ecx
  19801. rorxl $22, %r15d, %edx
  19802. addl %ebx, %r14d
  19803. vpsrld $10, %ymm7, %ymm8
  19804. # rnd_1: 5 - 5
  19805. xorl %ecx, %edx
  19806. addl %r14d, %r10d
  19807. movl %r8d, %ebx
  19808. vpsrlq $19, %ymm7, %ymm6
  19809. # rnd_1: 6 - 6
  19810. xorl %r15d, %ebx
  19811. addl %edx, %r14d
  19812. andl %ebx, %eax
  19813. vpsrlq $0x11, %ymm7, %ymm7
  19814. # rnd_1: 7 - 7
  19815. xorl %r8d, %eax
  19816. rorxl $6, %r10d, %edx
  19817. addl %eax, %r14d
  19818. vpaddd %ymm2, %ymm4, %ymm4
  19819. # rnd_0: 0 - 0
  19820. movl %r11d, %eax
  19821. rorxl $11, %r10d, %ecx
  19822. addl 200(%rsp), %r13d
  19823. vpxor %ymm7, %ymm6, %ymm6
  19824. # rnd_0: 1 - 1
  19825. xorl %edx, %ecx
  19826. xorl %r12d, %eax
  19827. rorxl $25, %r10d, %edx
  19828. vpxor %ymm6, %ymm8, %ymm8
  19829. # rnd_0: 2 - 2
  19830. andl %r10d, %eax
  19831. xorl %ecx, %edx
  19832. rorxl $13, %r14d, %ecx
  19833. vpaddd %ymm5, %ymm4, %ymm4
  19834. # rnd_0: 3 - 3
  19835. addl %edx, %r13d
  19836. rorxl $2, %r14d, %edx
  19837. xorl %r12d, %eax
  19838. vpshufb %ymm11, %ymm8, %ymm8
  19839. # rnd_0: 4 - 4
  19840. xorl %edx, %ecx
  19841. rorxl $22, %r14d, %edx
  19842. addl %eax, %r13d
  19843. vpaddd %ymm8, %ymm4, %ymm4
  19844. # rnd_0: 5 - 5
  19845. xorl %ecx, %edx
  19846. movl %r15d, %eax
  19847. addl %r13d, %r9d
  19848. vpshufd $0x50, %ymm4, %ymm6
  19849. # rnd_0: 6 - 6
  19850. xorl %r14d, %eax
  19851. addl %edx, %r13d
  19852. andl %eax, %ebx
  19853. vpsrlq $0x11, %ymm6, %ymm8
  19854. # rnd_0: 7 - 7
  19855. xorl %r15d, %ebx
  19856. rorxl $6, %r9d, %edx
  19857. addl %ebx, %r13d
  19858. vpsrlq $19, %ymm6, %ymm7
  19859. # rnd_1: 0 - 0
  19860. movl %r10d, %ebx
  19861. rorxl $11, %r9d, %ecx
  19862. addl 204(%rsp), %r12d
  19863. vpsrld $10, %ymm6, %ymm9
  19864. # rnd_1: 1 - 1
  19865. xorl %edx, %ecx
  19866. xorl %r11d, %ebx
  19867. rorxl $25, %r9d, %edx
  19868. vpxor %ymm7, %ymm8, %ymm8
  19869. # rnd_1: 2 - 2
  19870. andl %r9d, %ebx
  19871. xorl %ecx, %edx
  19872. rorxl $13, %r13d, %ecx
  19873. vpxor %ymm8, %ymm9, %ymm9
  19874. # rnd_1: 3 - 3
  19875. addl %edx, %r12d
  19876. rorxl $2, %r13d, %edx
  19877. xorl %r11d, %ebx
  19878. vpshufb %ymm12, %ymm9, %ymm9
  19879. # rnd_1: 4 - 4
  19880. xorl %edx, %ecx
  19881. rorxl $22, %r13d, %edx
  19882. addl %ebx, %r12d
  19883. vpaddd %ymm4, %ymm9, %ymm2
  19884. # rnd_1: 5 - 5
  19885. xorl %ecx, %edx
  19886. addl %r12d, %r8d
  19887. movl %r14d, %ebx
  19888. vpaddd 320+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  19889. # rnd_1: 6 - 6
  19890. xorl %r13d, %ebx
  19891. addl %edx, %r12d
  19892. andl %ebx, %eax
  19893. # rnd_1: 7 - 7
  19894. xorl %r14d, %eax
  19895. rorxl $6, %r8d, %edx
  19896. addl %eax, %r12d
  19897. vmovdqu %ymm4, 320(%rsp)
  19898. # rnd_0: 0 - 0
  19899. movl %r9d, %eax
  19900. rorxl $11, %r8d, %ecx
  19901. addl 224(%rsp), %r11d
  19902. vpalignr $4, %ymm3, %ymm0, %ymm5
  19903. # rnd_0: 1 - 1
  19904. xorl %edx, %ecx
  19905. xorl %r10d, %eax
  19906. rorxl $25, %r8d, %edx
  19907. vpalignr $4, %ymm1, %ymm2, %ymm4
  19908. # rnd_0: 2 - 2
  19909. andl %r8d, %eax
  19910. xorl %ecx, %edx
  19911. rorxl $13, %r12d, %ecx
  19912. vpsrld $7, %ymm5, %ymm6
  19913. # rnd_0: 3 - 3
  19914. addl %edx, %r11d
  19915. rorxl $2, %r12d, %edx
  19916. xorl %r10d, %eax
  19917. vpslld $25, %ymm5, %ymm7
  19918. # rnd_0: 4 - 4
  19919. xorl %edx, %ecx
  19920. rorxl $22, %r12d, %edx
  19921. addl %eax, %r11d
  19922. vpsrld $18, %ymm5, %ymm8
  19923. # rnd_0: 5 - 5
  19924. xorl %ecx, %edx
  19925. movl %r13d, %eax
  19926. addl %r11d, %r15d
  19927. vpslld $14, %ymm5, %ymm9
  19928. # rnd_0: 6 - 6
  19929. xorl %r12d, %eax
  19930. addl %edx, %r11d
  19931. andl %eax, %ebx
  19932. vpor %ymm7, %ymm6, %ymm6
  19933. # rnd_0: 7 - 7
  19934. xorl %r13d, %ebx
  19935. rorxl $6, %r15d, %edx
  19936. addl %ebx, %r11d
  19937. vpor %ymm9, %ymm8, %ymm8
  19938. # rnd_1: 0 - 0
  19939. movl %r8d, %ebx
  19940. rorxl $11, %r15d, %ecx
  19941. addl 228(%rsp), %r10d
  19942. vpsrld $3, %ymm5, %ymm9
  19943. # rnd_1: 1 - 1
  19944. xorl %edx, %ecx
  19945. xorl %r9d, %ebx
  19946. rorxl $25, %r15d, %edx
  19947. vpxor %ymm8, %ymm6, %ymm6
  19948. # rnd_1: 2 - 2
  19949. andl %r15d, %ebx
  19950. xorl %ecx, %edx
  19951. rorxl $13, %r11d, %ecx
  19952. vpshufd $0xfa, %ymm2, %ymm7
  19953. # rnd_1: 3 - 3
  19954. addl %edx, %r10d
  19955. rorxl $2, %r11d, %edx
  19956. xorl %r9d, %ebx
  19957. vpxor %ymm6, %ymm9, %ymm5
  19958. # rnd_1: 4 - 4
  19959. xorl %edx, %ecx
  19960. rorxl $22, %r11d, %edx
  19961. addl %ebx, %r10d
  19962. vpsrld $10, %ymm7, %ymm8
  19963. # rnd_1: 5 - 5
  19964. xorl %ecx, %edx
  19965. addl %r10d, %r14d
  19966. movl %r12d, %ebx
  19967. vpsrlq $19, %ymm7, %ymm6
  19968. # rnd_1: 6 - 6
  19969. xorl %r11d, %ebx
  19970. addl %edx, %r10d
  19971. andl %ebx, %eax
  19972. vpsrlq $0x11, %ymm7, %ymm7
  19973. # rnd_1: 7 - 7
  19974. xorl %r12d, %eax
  19975. rorxl $6, %r14d, %edx
  19976. addl %eax, %r10d
  19977. vpaddd %ymm3, %ymm4, %ymm4
  19978. # rnd_0: 0 - 0
  19979. movl %r15d, %eax
  19980. rorxl $11, %r14d, %ecx
  19981. addl 232(%rsp), %r9d
  19982. vpxor %ymm7, %ymm6, %ymm6
  19983. # rnd_0: 1 - 1
  19984. xorl %edx, %ecx
  19985. xorl %r8d, %eax
  19986. rorxl $25, %r14d, %edx
  19987. vpxor %ymm6, %ymm8, %ymm8
  19988. # rnd_0: 2 - 2
  19989. andl %r14d, %eax
  19990. xorl %ecx, %edx
  19991. rorxl $13, %r10d, %ecx
  19992. vpaddd %ymm5, %ymm4, %ymm4
  19993. # rnd_0: 3 - 3
  19994. addl %edx, %r9d
  19995. rorxl $2, %r10d, %edx
  19996. xorl %r8d, %eax
  19997. vpshufb %ymm11, %ymm8, %ymm8
  19998. # rnd_0: 4 - 4
  19999. xorl %edx, %ecx
  20000. rorxl $22, %r10d, %edx
  20001. addl %eax, %r9d
  20002. vpaddd %ymm8, %ymm4, %ymm4
  20003. # rnd_0: 5 - 5
  20004. xorl %ecx, %edx
  20005. movl %r11d, %eax
  20006. addl %r9d, %r13d
  20007. vpshufd $0x50, %ymm4, %ymm6
  20008. # rnd_0: 6 - 6
  20009. xorl %r10d, %eax
  20010. addl %edx, %r9d
  20011. andl %eax, %ebx
  20012. vpsrlq $0x11, %ymm6, %ymm8
  20013. # rnd_0: 7 - 7
  20014. xorl %r11d, %ebx
  20015. rorxl $6, %r13d, %edx
  20016. addl %ebx, %r9d
  20017. vpsrlq $19, %ymm6, %ymm7
  20018. # rnd_1: 0 - 0
  20019. movl %r14d, %ebx
  20020. rorxl $11, %r13d, %ecx
  20021. addl 236(%rsp), %r8d
  20022. vpsrld $10, %ymm6, %ymm9
  20023. # rnd_1: 1 - 1
  20024. xorl %edx, %ecx
  20025. xorl %r15d, %ebx
  20026. rorxl $25, %r13d, %edx
  20027. vpxor %ymm7, %ymm8, %ymm8
  20028. # rnd_1: 2 - 2
  20029. andl %r13d, %ebx
  20030. xorl %ecx, %edx
  20031. rorxl $13, %r9d, %ecx
  20032. vpxor %ymm8, %ymm9, %ymm9
  20033. # rnd_1: 3 - 3
  20034. addl %edx, %r8d
  20035. rorxl $2, %r9d, %edx
  20036. xorl %r15d, %ebx
  20037. vpshufb %ymm12, %ymm9, %ymm9
  20038. # rnd_1: 4 - 4
  20039. xorl %edx, %ecx
  20040. rorxl $22, %r9d, %edx
  20041. addl %ebx, %r8d
  20042. vpaddd %ymm4, %ymm9, %ymm3
  20043. # rnd_1: 5 - 5
  20044. xorl %ecx, %edx
  20045. addl %r8d, %r12d
  20046. movl %r10d, %ebx
  20047. vpaddd 352+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm4
  20048. # rnd_1: 6 - 6
  20049. xorl %r9d, %ebx
  20050. addl %edx, %r8d
  20051. andl %ebx, %eax
  20052. # rnd_1: 7 - 7
  20053. xorl %r10d, %eax
  20054. rorxl $6, %r12d, %edx
  20055. addl %eax, %r8d
  20056. vmovdqu %ymm4, 352(%rsp)
  20057. # rnd_0: 0 - 0
  20058. movl %r13d, %eax
  20059. rorxl $11, %r12d, %ecx
  20060. addl 256(%rsp), %r15d
  20061. vpalignr $4, %ymm0, %ymm1, %ymm5
  20062. # rnd_0: 1 - 1
  20063. xorl %edx, %ecx
  20064. xorl %r14d, %eax
  20065. rorxl $25, %r12d, %edx
  20066. vpalignr $4, %ymm2, %ymm3, %ymm4
  20067. # rnd_0: 2 - 2
  20068. andl %r12d, %eax
  20069. xorl %ecx, %edx
  20070. rorxl $13, %r8d, %ecx
  20071. vpsrld $7, %ymm5, %ymm6
  20072. # rnd_0: 3 - 3
  20073. addl %edx, %r15d
  20074. rorxl $2, %r8d, %edx
  20075. xorl %r14d, %eax
  20076. vpslld $25, %ymm5, %ymm7
  20077. # rnd_0: 4 - 4
  20078. xorl %edx, %ecx
  20079. rorxl $22, %r8d, %edx
  20080. addl %eax, %r15d
  20081. vpsrld $18, %ymm5, %ymm8
  20082. # rnd_0: 5 - 5
  20083. xorl %ecx, %edx
  20084. movl %r9d, %eax
  20085. addl %r15d, %r11d
  20086. vpslld $14, %ymm5, %ymm9
  20087. # rnd_0: 6 - 6
  20088. xorl %r8d, %eax
  20089. addl %edx, %r15d
  20090. andl %eax, %ebx
  20091. vpor %ymm7, %ymm6, %ymm6
  20092. # rnd_0: 7 - 7
  20093. xorl %r9d, %ebx
  20094. rorxl $6, %r11d, %edx
  20095. addl %ebx, %r15d
  20096. vpor %ymm9, %ymm8, %ymm8
  20097. # rnd_1: 0 - 0
  20098. movl %r12d, %ebx
  20099. rorxl $11, %r11d, %ecx
  20100. addl 260(%rsp), %r14d
  20101. vpsrld $3, %ymm5, %ymm9
  20102. # rnd_1: 1 - 1
  20103. xorl %edx, %ecx
  20104. xorl %r13d, %ebx
  20105. rorxl $25, %r11d, %edx
  20106. vpxor %ymm8, %ymm6, %ymm6
  20107. # rnd_1: 2 - 2
  20108. andl %r11d, %ebx
  20109. xorl %ecx, %edx
  20110. rorxl $13, %r15d, %ecx
  20111. vpshufd $0xfa, %ymm3, %ymm7
  20112. # rnd_1: 3 - 3
  20113. addl %edx, %r14d
  20114. rorxl $2, %r15d, %edx
  20115. xorl %r13d, %ebx
  20116. vpxor %ymm6, %ymm9, %ymm5
  20117. # rnd_1: 4 - 4
  20118. xorl %edx, %ecx
  20119. rorxl $22, %r15d, %edx
  20120. addl %ebx, %r14d
  20121. vpsrld $10, %ymm7, %ymm8
  20122. # rnd_1: 5 - 5
  20123. xorl %ecx, %edx
  20124. addl %r14d, %r10d
  20125. movl %r8d, %ebx
  20126. vpsrlq $19, %ymm7, %ymm6
  20127. # rnd_1: 6 - 6
  20128. xorl %r15d, %ebx
  20129. addl %edx, %r14d
  20130. andl %ebx, %eax
  20131. vpsrlq $0x11, %ymm7, %ymm7
  20132. # rnd_1: 7 - 7
  20133. xorl %r8d, %eax
  20134. rorxl $6, %r10d, %edx
  20135. addl %eax, %r14d
  20136. vpaddd %ymm0, %ymm4, %ymm4
  20137. # rnd_0: 0 - 0
  20138. movl %r11d, %eax
  20139. rorxl $11, %r10d, %ecx
  20140. addl 264(%rsp), %r13d
  20141. vpxor %ymm7, %ymm6, %ymm6
  20142. # rnd_0: 1 - 1
  20143. xorl %edx, %ecx
  20144. xorl %r12d, %eax
  20145. rorxl $25, %r10d, %edx
  20146. vpxor %ymm6, %ymm8, %ymm8
  20147. # rnd_0: 2 - 2
  20148. andl %r10d, %eax
  20149. xorl %ecx, %edx
  20150. rorxl $13, %r14d, %ecx
  20151. vpaddd %ymm5, %ymm4, %ymm4
  20152. # rnd_0: 3 - 3
  20153. addl %edx, %r13d
  20154. rorxl $2, %r14d, %edx
  20155. xorl %r12d, %eax
  20156. vpshufb %ymm11, %ymm8, %ymm8
  20157. # rnd_0: 4 - 4
  20158. xorl %edx, %ecx
  20159. rorxl $22, %r14d, %edx
  20160. addl %eax, %r13d
  20161. vpaddd %ymm8, %ymm4, %ymm4
  20162. # rnd_0: 5 - 5
  20163. xorl %ecx, %edx
  20164. movl %r15d, %eax
  20165. addl %r13d, %r9d
  20166. vpshufd $0x50, %ymm4, %ymm6
  20167. # rnd_0: 6 - 6
  20168. xorl %r14d, %eax
  20169. addl %edx, %r13d
  20170. andl %eax, %ebx
  20171. vpsrlq $0x11, %ymm6, %ymm8
  20172. # rnd_0: 7 - 7
  20173. xorl %r15d, %ebx
  20174. rorxl $6, %r9d, %edx
  20175. addl %ebx, %r13d
  20176. vpsrlq $19, %ymm6, %ymm7
  20177. # rnd_1: 0 - 0
  20178. movl %r10d, %ebx
  20179. rorxl $11, %r9d, %ecx
  20180. addl 268(%rsp), %r12d
  20181. vpsrld $10, %ymm6, %ymm9
  20182. # rnd_1: 1 - 1
  20183. xorl %edx, %ecx
  20184. xorl %r11d, %ebx
  20185. rorxl $25, %r9d, %edx
  20186. vpxor %ymm7, %ymm8, %ymm8
  20187. # rnd_1: 2 - 2
  20188. andl %r9d, %ebx
  20189. xorl %ecx, %edx
  20190. rorxl $13, %r13d, %ecx
  20191. vpxor %ymm8, %ymm9, %ymm9
  20192. # rnd_1: 3 - 3
  20193. addl %edx, %r12d
  20194. rorxl $2, %r13d, %edx
  20195. xorl %r11d, %ebx
  20196. vpshufb %ymm12, %ymm9, %ymm9
  20197. # rnd_1: 4 - 4
  20198. xorl %edx, %ecx
  20199. rorxl $22, %r13d, %edx
  20200. addl %ebx, %r12d
  20201. vpaddd %ymm4, %ymm9, %ymm0
  20202. # rnd_1: 5 - 5
  20203. xorl %ecx, %edx
  20204. addl %r12d, %r8d
  20205. movl %r14d, %ebx
  20206. vpaddd 384+L_avx2_rorx_sha256_k(%rip), %ymm0, %ymm4
  20207. # rnd_1: 6 - 6
  20208. xorl %r13d, %ebx
  20209. addl %edx, %r12d
  20210. andl %ebx, %eax
  20211. # rnd_1: 7 - 7
  20212. xorl %r14d, %eax
  20213. rorxl $6, %r8d, %edx
  20214. addl %eax, %r12d
  20215. vmovdqu %ymm4, 384(%rsp)
  20216. # rnd_0: 0 - 0
  20217. movl %r9d, %eax
  20218. rorxl $11, %r8d, %ecx
  20219. addl 288(%rsp), %r11d
  20220. vpalignr $4, %ymm1, %ymm2, %ymm5
  20221. # rnd_0: 1 - 1
  20222. xorl %edx, %ecx
  20223. xorl %r10d, %eax
  20224. rorxl $25, %r8d, %edx
  20225. vpalignr $4, %ymm3, %ymm0, %ymm4
  20226. # rnd_0: 2 - 2
  20227. andl %r8d, %eax
  20228. xorl %ecx, %edx
  20229. rorxl $13, %r12d, %ecx
  20230. vpsrld $7, %ymm5, %ymm6
  20231. # rnd_0: 3 - 3
  20232. addl %edx, %r11d
  20233. rorxl $2, %r12d, %edx
  20234. xorl %r10d, %eax
  20235. vpslld $25, %ymm5, %ymm7
  20236. # rnd_0: 4 - 4
  20237. xorl %edx, %ecx
  20238. rorxl $22, %r12d, %edx
  20239. addl %eax, %r11d
  20240. vpsrld $18, %ymm5, %ymm8
  20241. # rnd_0: 5 - 5
  20242. xorl %ecx, %edx
  20243. movl %r13d, %eax
  20244. addl %r11d, %r15d
  20245. vpslld $14, %ymm5, %ymm9
  20246. # rnd_0: 6 - 6
  20247. xorl %r12d, %eax
  20248. addl %edx, %r11d
  20249. andl %eax, %ebx
  20250. vpor %ymm7, %ymm6, %ymm6
  20251. # rnd_0: 7 - 7
  20252. xorl %r13d, %ebx
  20253. rorxl $6, %r15d, %edx
  20254. addl %ebx, %r11d
  20255. vpor %ymm9, %ymm8, %ymm8
  20256. # rnd_1: 0 - 0
  20257. movl %r8d, %ebx
  20258. rorxl $11, %r15d, %ecx
  20259. addl 292(%rsp), %r10d
  20260. vpsrld $3, %ymm5, %ymm9
  20261. # rnd_1: 1 - 1
  20262. xorl %edx, %ecx
  20263. xorl %r9d, %ebx
  20264. rorxl $25, %r15d, %edx
  20265. vpxor %ymm8, %ymm6, %ymm6
  20266. # rnd_1: 2 - 2
  20267. andl %r15d, %ebx
  20268. xorl %ecx, %edx
  20269. rorxl $13, %r11d, %ecx
  20270. vpshufd $0xfa, %ymm0, %ymm7
  20271. # rnd_1: 3 - 3
  20272. addl %edx, %r10d
  20273. rorxl $2, %r11d, %edx
  20274. xorl %r9d, %ebx
  20275. vpxor %ymm6, %ymm9, %ymm5
  20276. # rnd_1: 4 - 4
  20277. xorl %edx, %ecx
  20278. rorxl $22, %r11d, %edx
  20279. addl %ebx, %r10d
  20280. vpsrld $10, %ymm7, %ymm8
  20281. # rnd_1: 5 - 5
  20282. xorl %ecx, %edx
  20283. addl %r10d, %r14d
  20284. movl %r12d, %ebx
  20285. vpsrlq $19, %ymm7, %ymm6
  20286. # rnd_1: 6 - 6
  20287. xorl %r11d, %ebx
  20288. addl %edx, %r10d
  20289. andl %ebx, %eax
  20290. vpsrlq $0x11, %ymm7, %ymm7
  20291. # rnd_1: 7 - 7
  20292. xorl %r12d, %eax
  20293. rorxl $6, %r14d, %edx
  20294. addl %eax, %r10d
  20295. vpaddd %ymm1, %ymm4, %ymm4
  20296. # rnd_0: 0 - 0
  20297. movl %r15d, %eax
  20298. rorxl $11, %r14d, %ecx
  20299. addl 296(%rsp), %r9d
  20300. vpxor %ymm7, %ymm6, %ymm6
  20301. # rnd_0: 1 - 1
  20302. xorl %edx, %ecx
  20303. xorl %r8d, %eax
  20304. rorxl $25, %r14d, %edx
  20305. vpxor %ymm6, %ymm8, %ymm8
  20306. # rnd_0: 2 - 2
  20307. andl %r14d, %eax
  20308. xorl %ecx, %edx
  20309. rorxl $13, %r10d, %ecx
  20310. vpaddd %ymm5, %ymm4, %ymm4
  20311. # rnd_0: 3 - 3
  20312. addl %edx, %r9d
  20313. rorxl $2, %r10d, %edx
  20314. xorl %r8d, %eax
  20315. vpshufb %ymm11, %ymm8, %ymm8
  20316. # rnd_0: 4 - 4
  20317. xorl %edx, %ecx
  20318. rorxl $22, %r10d, %edx
  20319. addl %eax, %r9d
  20320. vpaddd %ymm8, %ymm4, %ymm4
  20321. # rnd_0: 5 - 5
  20322. xorl %ecx, %edx
  20323. movl %r11d, %eax
  20324. addl %r9d, %r13d
  20325. vpshufd $0x50, %ymm4, %ymm6
  20326. # rnd_0: 6 - 6
  20327. xorl %r10d, %eax
  20328. addl %edx, %r9d
  20329. andl %eax, %ebx
  20330. vpsrlq $0x11, %ymm6, %ymm8
  20331. # rnd_0: 7 - 7
  20332. xorl %r11d, %ebx
  20333. rorxl $6, %r13d, %edx
  20334. addl %ebx, %r9d
  20335. vpsrlq $19, %ymm6, %ymm7
  20336. # rnd_1: 0 - 0
  20337. movl %r14d, %ebx
  20338. rorxl $11, %r13d, %ecx
  20339. addl 300(%rsp), %r8d
  20340. vpsrld $10, %ymm6, %ymm9
  20341. # rnd_1: 1 - 1
  20342. xorl %edx, %ecx
  20343. xorl %r15d, %ebx
  20344. rorxl $25, %r13d, %edx
  20345. vpxor %ymm7, %ymm8, %ymm8
  20346. # rnd_1: 2 - 2
  20347. andl %r13d, %ebx
  20348. xorl %ecx, %edx
  20349. rorxl $13, %r9d, %ecx
  20350. vpxor %ymm8, %ymm9, %ymm9
  20351. # rnd_1: 3 - 3
  20352. addl %edx, %r8d
  20353. rorxl $2, %r9d, %edx
  20354. xorl %r15d, %ebx
  20355. vpshufb %ymm12, %ymm9, %ymm9
  20356. # rnd_1: 4 - 4
  20357. xorl %edx, %ecx
  20358. rorxl $22, %r9d, %edx
  20359. addl %ebx, %r8d
  20360. vpaddd %ymm4, %ymm9, %ymm1
  20361. # rnd_1: 5 - 5
  20362. xorl %ecx, %edx
  20363. addl %r8d, %r12d
  20364. movl %r10d, %ebx
  20365. vpaddd 416+L_avx2_rorx_sha256_k(%rip), %ymm1, %ymm4
  20366. # rnd_1: 6 - 6
  20367. xorl %r9d, %ebx
  20368. addl %edx, %r8d
  20369. andl %ebx, %eax
  20370. # rnd_1: 7 - 7
  20371. xorl %r10d, %eax
  20372. rorxl $6, %r12d, %edx
  20373. addl %eax, %r8d
  20374. vmovdqu %ymm4, 416(%rsp)
  20375. # rnd_0: 0 - 0
  20376. movl %r13d, %eax
  20377. rorxl $11, %r12d, %ecx
  20378. addl 320(%rsp), %r15d
  20379. vpalignr $4, %ymm2, %ymm3, %ymm5
  20380. # rnd_0: 1 - 1
  20381. xorl %edx, %ecx
  20382. xorl %r14d, %eax
  20383. rorxl $25, %r12d, %edx
  20384. vpalignr $4, %ymm0, %ymm1, %ymm4
  20385. # rnd_0: 2 - 2
  20386. andl %r12d, %eax
  20387. xorl %ecx, %edx
  20388. rorxl $13, %r8d, %ecx
  20389. vpsrld $7, %ymm5, %ymm6
  20390. # rnd_0: 3 - 3
  20391. addl %edx, %r15d
  20392. rorxl $2, %r8d, %edx
  20393. xorl %r14d, %eax
  20394. vpslld $25, %ymm5, %ymm7
  20395. # rnd_0: 4 - 4
  20396. xorl %edx, %ecx
  20397. rorxl $22, %r8d, %edx
  20398. addl %eax, %r15d
  20399. vpsrld $18, %ymm5, %ymm8
  20400. # rnd_0: 5 - 5
  20401. xorl %ecx, %edx
  20402. movl %r9d, %eax
  20403. addl %r15d, %r11d
  20404. vpslld $14, %ymm5, %ymm9
  20405. # rnd_0: 6 - 6
  20406. xorl %r8d, %eax
  20407. addl %edx, %r15d
  20408. andl %eax, %ebx
  20409. vpor %ymm7, %ymm6, %ymm6
  20410. # rnd_0: 7 - 7
  20411. xorl %r9d, %ebx
  20412. rorxl $6, %r11d, %edx
  20413. addl %ebx, %r15d
  20414. vpor %ymm9, %ymm8, %ymm8
  20415. # rnd_1: 0 - 0
  20416. movl %r12d, %ebx
  20417. rorxl $11, %r11d, %ecx
  20418. addl 324(%rsp), %r14d
  20419. vpsrld $3, %ymm5, %ymm9
  20420. # rnd_1: 1 - 1
  20421. xorl %edx, %ecx
  20422. xorl %r13d, %ebx
  20423. rorxl $25, %r11d, %edx
  20424. vpxor %ymm8, %ymm6, %ymm6
  20425. # rnd_1: 2 - 2
  20426. andl %r11d, %ebx
  20427. xorl %ecx, %edx
  20428. rorxl $13, %r15d, %ecx
  20429. vpshufd $0xfa, %ymm1, %ymm7
  20430. # rnd_1: 3 - 3
  20431. addl %edx, %r14d
  20432. rorxl $2, %r15d, %edx
  20433. xorl %r13d, %ebx
  20434. vpxor %ymm6, %ymm9, %ymm5
  20435. # rnd_1: 4 - 4
  20436. xorl %edx, %ecx
  20437. rorxl $22, %r15d, %edx
  20438. addl %ebx, %r14d
  20439. vpsrld $10, %ymm7, %ymm8
  20440. # rnd_1: 5 - 5
  20441. xorl %ecx, %edx
  20442. addl %r14d, %r10d
  20443. movl %r8d, %ebx
  20444. vpsrlq $19, %ymm7, %ymm6
  20445. # rnd_1: 6 - 6
  20446. xorl %r15d, %ebx
  20447. addl %edx, %r14d
  20448. andl %ebx, %eax
  20449. vpsrlq $0x11, %ymm7, %ymm7
  20450. # rnd_1: 7 - 7
  20451. xorl %r8d, %eax
  20452. rorxl $6, %r10d, %edx
  20453. addl %eax, %r14d
  20454. vpaddd %ymm2, %ymm4, %ymm4
  20455. # rnd_0: 0 - 0
  20456. movl %r11d, %eax
  20457. rorxl $11, %r10d, %ecx
  20458. addl 328(%rsp), %r13d
  20459. vpxor %ymm7, %ymm6, %ymm6
  20460. # rnd_0: 1 - 1
  20461. xorl %edx, %ecx
  20462. xorl %r12d, %eax
  20463. rorxl $25, %r10d, %edx
  20464. vpxor %ymm6, %ymm8, %ymm8
  20465. # rnd_0: 2 - 2
  20466. andl %r10d, %eax
  20467. xorl %ecx, %edx
  20468. rorxl $13, %r14d, %ecx
  20469. vpaddd %ymm5, %ymm4, %ymm4
  20470. # rnd_0: 3 - 3
  20471. addl %edx, %r13d
  20472. rorxl $2, %r14d, %edx
  20473. xorl %r12d, %eax
  20474. vpshufb %ymm11, %ymm8, %ymm8
  20475. # rnd_0: 4 - 4
  20476. xorl %edx, %ecx
  20477. rorxl $22, %r14d, %edx
  20478. addl %eax, %r13d
  20479. vpaddd %ymm8, %ymm4, %ymm4
  20480. # rnd_0: 5 - 5
  20481. xorl %ecx, %edx
  20482. movl %r15d, %eax
  20483. addl %r13d, %r9d
  20484. vpshufd $0x50, %ymm4, %ymm6
  20485. # rnd_0: 6 - 6
  20486. xorl %r14d, %eax
  20487. addl %edx, %r13d
  20488. andl %eax, %ebx
  20489. vpsrlq $0x11, %ymm6, %ymm8
  20490. # rnd_0: 7 - 7
  20491. xorl %r15d, %ebx
  20492. rorxl $6, %r9d, %edx
  20493. addl %ebx, %r13d
  20494. vpsrlq $19, %ymm6, %ymm7
  20495. # rnd_1: 0 - 0
  20496. movl %r10d, %ebx
  20497. rorxl $11, %r9d, %ecx
  20498. addl 332(%rsp), %r12d
  20499. vpsrld $10, %ymm6, %ymm9
  20500. # rnd_1: 1 - 1
  20501. xorl %edx, %ecx
  20502. xorl %r11d, %ebx
  20503. rorxl $25, %r9d, %edx
  20504. vpxor %ymm7, %ymm8, %ymm8
  20505. # rnd_1: 2 - 2
  20506. andl %r9d, %ebx
  20507. xorl %ecx, %edx
  20508. rorxl $13, %r13d, %ecx
  20509. vpxor %ymm8, %ymm9, %ymm9
  20510. # rnd_1: 3 - 3
  20511. addl %edx, %r12d
  20512. rorxl $2, %r13d, %edx
  20513. xorl %r11d, %ebx
  20514. vpshufb %ymm12, %ymm9, %ymm9
  20515. # rnd_1: 4 - 4
  20516. xorl %edx, %ecx
  20517. rorxl $22, %r13d, %edx
  20518. addl %ebx, %r12d
  20519. vpaddd %ymm4, %ymm9, %ymm2
  20520. # rnd_1: 5 - 5
  20521. xorl %ecx, %edx
  20522. addl %r12d, %r8d
  20523. movl %r14d, %ebx
  20524. vpaddd 448+L_avx2_rorx_sha256_k(%rip), %ymm2, %ymm4
  20525. # rnd_1: 6 - 6
  20526. xorl %r13d, %ebx
  20527. addl %edx, %r12d
  20528. andl %ebx, %eax
  20529. # rnd_1: 7 - 7
  20530. xorl %r14d, %eax
  20531. rorxl $6, %r8d, %edx
  20532. addl %eax, %r12d
  20533. vmovdqu %ymm4, 448(%rsp)
  20534. # rnd_0: 0 - 0
  20535. movl %r9d, %eax
  20536. rorxl $11, %r8d, %ecx
  20537. addl 352(%rsp), %r11d
  20538. vpalignr $4, %ymm3, %ymm0, %ymm5
  20539. # rnd_0: 1 - 1
  20540. xorl %edx, %ecx
  20541. xorl %r10d, %eax
  20542. rorxl $25, %r8d, %edx
  20543. vpalignr $4, %ymm1, %ymm2, %ymm4
  20544. # rnd_0: 2 - 2
  20545. andl %r8d, %eax
  20546. xorl %ecx, %edx
  20547. rorxl $13, %r12d, %ecx
  20548. vpsrld $7, %ymm5, %ymm6
  20549. # rnd_0: 3 - 3
  20550. addl %edx, %r11d
  20551. rorxl $2, %r12d, %edx
  20552. xorl %r10d, %eax
  20553. vpslld $25, %ymm5, %ymm7
  20554. # rnd_0: 4 - 4
  20555. xorl %edx, %ecx
  20556. rorxl $22, %r12d, %edx
  20557. addl %eax, %r11d
  20558. vpsrld $18, %ymm5, %ymm8
  20559. # rnd_0: 5 - 5
  20560. xorl %ecx, %edx
  20561. movl %r13d, %eax
  20562. addl %r11d, %r15d
  20563. vpslld $14, %ymm5, %ymm9
  20564. # rnd_0: 6 - 6
  20565. xorl %r12d, %eax
  20566. addl %edx, %r11d
  20567. andl %eax, %ebx
  20568. vpor %ymm7, %ymm6, %ymm6
  20569. # rnd_0: 7 - 7
  20570. xorl %r13d, %ebx
  20571. rorxl $6, %r15d, %edx
  20572. addl %ebx, %r11d
  20573. vpor %ymm9, %ymm8, %ymm8
  20574. # rnd_1: 0 - 0
  20575. movl %r8d, %ebx
  20576. rorxl $11, %r15d, %ecx
  20577. addl 356(%rsp), %r10d
  20578. vpsrld $3, %ymm5, %ymm9
  20579. # rnd_1: 1 - 1
  20580. xorl %edx, %ecx
  20581. xorl %r9d, %ebx
  20582. rorxl $25, %r15d, %edx
  20583. vpxor %ymm8, %ymm6, %ymm6
  20584. # rnd_1: 2 - 2
  20585. andl %r15d, %ebx
  20586. xorl %ecx, %edx
  20587. rorxl $13, %r11d, %ecx
  20588. vpshufd $0xfa, %ymm2, %ymm7
  20589. # rnd_1: 3 - 3
  20590. addl %edx, %r10d
  20591. rorxl $2, %r11d, %edx
  20592. xorl %r9d, %ebx
  20593. vpxor %ymm6, %ymm9, %ymm5
  20594. # rnd_1: 4 - 4
  20595. xorl %edx, %ecx
  20596. rorxl $22, %r11d, %edx
  20597. addl %ebx, %r10d
  20598. vpsrld $10, %ymm7, %ymm8
  20599. # rnd_1: 5 - 5
  20600. xorl %ecx, %edx
  20601. addl %r10d, %r14d
  20602. movl %r12d, %ebx
  20603. vpsrlq $19, %ymm7, %ymm6
  20604. # rnd_1: 6 - 6
  20605. xorl %r11d, %ebx
  20606. addl %edx, %r10d
  20607. andl %ebx, %eax
  20608. vpsrlq $0x11, %ymm7, %ymm7
  20609. # rnd_1: 7 - 7
  20610. xorl %r12d, %eax
  20611. rorxl $6, %r14d, %edx
  20612. addl %eax, %r10d
  20613. vpaddd %ymm3, %ymm4, %ymm4
  20614. # rnd_0: 0 - 0
  20615. movl %r15d, %eax
  20616. rorxl $11, %r14d, %ecx
  20617. addl 360(%rsp), %r9d
  20618. vpxor %ymm7, %ymm6, %ymm6
  20619. # rnd_0: 1 - 1
  20620. xorl %edx, %ecx
  20621. xorl %r8d, %eax
  20622. rorxl $25, %r14d, %edx
  20623. vpxor %ymm6, %ymm8, %ymm8
  20624. # rnd_0: 2 - 2
  20625. andl %r14d, %eax
  20626. xorl %ecx, %edx
  20627. rorxl $13, %r10d, %ecx
  20628. vpaddd %ymm5, %ymm4, %ymm4
  20629. # rnd_0: 3 - 3
  20630. addl %edx, %r9d
  20631. rorxl $2, %r10d, %edx
  20632. xorl %r8d, %eax
  20633. vpshufb %ymm11, %ymm8, %ymm8
  20634. # rnd_0: 4 - 4
  20635. xorl %edx, %ecx
  20636. rorxl $22, %r10d, %edx
  20637. addl %eax, %r9d
  20638. vpaddd %ymm8, %ymm4, %ymm4
  20639. # rnd_0: 5 - 5
  20640. xorl %ecx, %edx
  20641. movl %r11d, %eax
  20642. addl %r9d, %r13d
  20643. vpshufd $0x50, %ymm4, %ymm6
  20644. # rnd_0: 6 - 6
  20645. xorl %r10d, %eax
  20646. addl %edx, %r9d
  20647. andl %eax, %ebx
  20648. vpsrlq $0x11, %ymm6, %ymm8
  20649. # rnd_0: 7 - 7
  20650. xorl %r11d, %ebx
  20651. rorxl $6, %r13d, %edx
  20652. addl %ebx, %r9d
  20653. vpsrlq $19, %ymm6, %ymm7
  20654. # rnd_1: 0 - 0
  20655. movl %r14d, %ebx
  20656. rorxl $11, %r13d, %ecx
  20657. addl 364(%rsp), %r8d
  20658. vpsrld $10, %ymm6, %ymm9
  20659. # rnd_1: 1 - 1
  20660. xorl %edx, %ecx
  20661. xorl %r15d, %ebx
  20662. rorxl $25, %r13d, %edx
  20663. vpxor %ymm7, %ymm8, %ymm8
  20664. # rnd_1: 2 - 2
  20665. andl %r13d, %ebx
  20666. xorl %ecx, %edx
  20667. rorxl $13, %r9d, %ecx
  20668. vpxor %ymm8, %ymm9, %ymm9
  20669. # rnd_1: 3 - 3
  20670. addl %edx, %r8d
  20671. rorxl $2, %r9d, %edx
  20672. xorl %r15d, %ebx
  20673. vpshufb %ymm12, %ymm9, %ymm9
  20674. # rnd_1: 4 - 4
  20675. xorl %edx, %ecx
  20676. rorxl $22, %r9d, %edx
  20677. addl %ebx, %r8d
  20678. vpaddd %ymm4, %ymm9, %ymm3
  20679. # rnd_1: 5 - 5
  20680. xorl %ecx, %edx
  20681. addl %r8d, %r12d
  20682. movl %r10d, %ebx
  20683. vpaddd 480+L_avx2_rorx_sha256_k(%rip), %ymm3, %ymm4
  20684. # rnd_1: 6 - 6
  20685. xorl %r9d, %ebx
  20686. addl %edx, %r8d
  20687. andl %ebx, %eax
  20688. # rnd_1: 7 - 7
  20689. xorl %r10d, %eax
  20690. rorxl $6, %r12d, %edx
  20691. addl %eax, %r8d
  20692. vmovdqu %ymm4, 480(%rsp)
  20693. xorl %eax, %eax
  20694. xorl %ecx, %ecx
  20695. rorxl $6, %r12d, %edx
  20696. rorxl $11, %r12d, %ecx
  20697. leal (%r8,%rax,1), %r8d
  20698. addl 384(%rsp), %r15d
  20699. movl %r13d, %eax
  20700. xorl %edx, %ecx
  20701. xorl %r14d, %eax
  20702. rorxl $25, %r12d, %edx
  20703. xorl %ecx, %edx
  20704. andl %r12d, %eax
  20705. addl %edx, %r15d
  20706. rorxl $2, %r8d, %edx
  20707. rorxl $13, %r8d, %ecx
  20708. xorl %r14d, %eax
  20709. xorl %edx, %ecx
  20710. rorxl $22, %r8d, %edx
  20711. addl %eax, %r15d
  20712. xorl %ecx, %edx
  20713. movl %r9d, %eax
  20714. addl %r15d, %r11d
  20715. xorl %r8d, %eax
  20716. andl %eax, %ebx
  20717. addl %edx, %r15d
  20718. xorl %r9d, %ebx
  20719. rorxl $6, %r11d, %edx
  20720. rorxl $11, %r11d, %ecx
  20721. addl %ebx, %r15d
  20722. addl 388(%rsp), %r14d
  20723. movl %r12d, %ebx
  20724. xorl %edx, %ecx
  20725. xorl %r13d, %ebx
  20726. rorxl $25, %r11d, %edx
  20727. xorl %ecx, %edx
  20728. andl %r11d, %ebx
  20729. addl %edx, %r14d
  20730. rorxl $2, %r15d, %edx
  20731. rorxl $13, %r15d, %ecx
  20732. xorl %r13d, %ebx
  20733. xorl %edx, %ecx
  20734. rorxl $22, %r15d, %edx
  20735. addl %ebx, %r14d
  20736. xorl %ecx, %edx
  20737. movl %r8d, %ebx
  20738. leal (%r10,%r14,1), %r10d
  20739. xorl %r15d, %ebx
  20740. andl %ebx, %eax
  20741. addl %edx, %r14d
  20742. xorl %r8d, %eax
  20743. rorxl $6, %r10d, %edx
  20744. rorxl $11, %r10d, %ecx
  20745. leal (%r14,%rax,1), %r14d
  20746. addl 392(%rsp), %r13d
  20747. movl %r11d, %eax
  20748. xorl %edx, %ecx
  20749. xorl %r12d, %eax
  20750. rorxl $25, %r10d, %edx
  20751. xorl %ecx, %edx
  20752. andl %r10d, %eax
  20753. addl %edx, %r13d
  20754. rorxl $2, %r14d, %edx
  20755. rorxl $13, %r14d, %ecx
  20756. xorl %r12d, %eax
  20757. xorl %edx, %ecx
  20758. rorxl $22, %r14d, %edx
  20759. addl %eax, %r13d
  20760. xorl %ecx, %edx
  20761. movl %r15d, %eax
  20762. addl %r13d, %r9d
  20763. xorl %r14d, %eax
  20764. andl %eax, %ebx
  20765. addl %edx, %r13d
  20766. xorl %r15d, %ebx
  20767. rorxl $6, %r9d, %edx
  20768. rorxl $11, %r9d, %ecx
  20769. addl %ebx, %r13d
  20770. addl 396(%rsp), %r12d
  20771. movl %r10d, %ebx
  20772. xorl %edx, %ecx
  20773. xorl %r11d, %ebx
  20774. rorxl $25, %r9d, %edx
  20775. xorl %ecx, %edx
  20776. andl %r9d, %ebx
  20777. addl %edx, %r12d
  20778. rorxl $2, %r13d, %edx
  20779. rorxl $13, %r13d, %ecx
  20780. xorl %r11d, %ebx
  20781. xorl %edx, %ecx
  20782. rorxl $22, %r13d, %edx
  20783. addl %ebx, %r12d
  20784. xorl %ecx, %edx
  20785. movl %r14d, %ebx
  20786. leal (%r8,%r12,1), %r8d
  20787. xorl %r13d, %ebx
  20788. andl %ebx, %eax
  20789. addl %edx, %r12d
  20790. xorl %r14d, %eax
  20791. rorxl $6, %r8d, %edx
  20792. rorxl $11, %r8d, %ecx
  20793. leal (%r12,%rax,1), %r12d
  20794. addl 416(%rsp), %r11d
  20795. movl %r9d, %eax
  20796. xorl %edx, %ecx
  20797. xorl %r10d, %eax
  20798. rorxl $25, %r8d, %edx
  20799. xorl %ecx, %edx
  20800. andl %r8d, %eax
  20801. addl %edx, %r11d
  20802. rorxl $2, %r12d, %edx
  20803. rorxl $13, %r12d, %ecx
  20804. xorl %r10d, %eax
  20805. xorl %edx, %ecx
  20806. rorxl $22, %r12d, %edx
  20807. addl %eax, %r11d
  20808. xorl %ecx, %edx
  20809. movl %r13d, %eax
  20810. addl %r11d, %r15d
  20811. xorl %r12d, %eax
  20812. andl %eax, %ebx
  20813. addl %edx, %r11d
  20814. xorl %r13d, %ebx
  20815. rorxl $6, %r15d, %edx
  20816. rorxl $11, %r15d, %ecx
  20817. addl %ebx, %r11d
  20818. addl 420(%rsp), %r10d
  20819. movl %r8d, %ebx
  20820. xorl %edx, %ecx
  20821. xorl %r9d, %ebx
  20822. rorxl $25, %r15d, %edx
  20823. xorl %ecx, %edx
  20824. andl %r15d, %ebx
  20825. addl %edx, %r10d
  20826. rorxl $2, %r11d, %edx
  20827. rorxl $13, %r11d, %ecx
  20828. xorl %r9d, %ebx
  20829. xorl %edx, %ecx
  20830. rorxl $22, %r11d, %edx
  20831. addl %ebx, %r10d
  20832. xorl %ecx, %edx
  20833. movl %r12d, %ebx
  20834. leal (%r14,%r10,1), %r14d
  20835. xorl %r11d, %ebx
  20836. andl %ebx, %eax
  20837. addl %edx, %r10d
  20838. xorl %r12d, %eax
  20839. rorxl $6, %r14d, %edx
  20840. rorxl $11, %r14d, %ecx
  20841. leal (%r10,%rax,1), %r10d
  20842. addl 424(%rsp), %r9d
  20843. movl %r15d, %eax
  20844. xorl %edx, %ecx
  20845. xorl %r8d, %eax
  20846. rorxl $25, %r14d, %edx
  20847. xorl %ecx, %edx
  20848. andl %r14d, %eax
  20849. addl %edx, %r9d
  20850. rorxl $2, %r10d, %edx
  20851. rorxl $13, %r10d, %ecx
  20852. xorl %r8d, %eax
  20853. xorl %edx, %ecx
  20854. rorxl $22, %r10d, %edx
  20855. addl %eax, %r9d
  20856. xorl %ecx, %edx
  20857. movl %r11d, %eax
  20858. addl %r9d, %r13d
  20859. xorl %r10d, %eax
  20860. andl %eax, %ebx
  20861. addl %edx, %r9d
  20862. xorl %r11d, %ebx
  20863. rorxl $6, %r13d, %edx
  20864. rorxl $11, %r13d, %ecx
  20865. addl %ebx, %r9d
  20866. addl 428(%rsp), %r8d
  20867. movl %r14d, %ebx
  20868. xorl %edx, %ecx
  20869. xorl %r15d, %ebx
  20870. rorxl $25, %r13d, %edx
  20871. xorl %ecx, %edx
  20872. andl %r13d, %ebx
  20873. addl %edx, %r8d
  20874. rorxl $2, %r9d, %edx
  20875. rorxl $13, %r9d, %ecx
  20876. xorl %r15d, %ebx
  20877. xorl %edx, %ecx
  20878. rorxl $22, %r9d, %edx
  20879. addl %ebx, %r8d
  20880. xorl %ecx, %edx
  20881. movl %r10d, %ebx
  20882. leal (%r12,%r8,1), %r12d
  20883. xorl %r9d, %ebx
  20884. andl %ebx, %eax
  20885. addl %edx, %r8d
  20886. xorl %r10d, %eax
  20887. rorxl $6, %r12d, %edx
  20888. rorxl $11, %r12d, %ecx
  20889. leal (%r8,%rax,1), %r8d
  20890. addl 448(%rsp), %r15d
  20891. movl %r13d, %eax
  20892. xorl %edx, %ecx
  20893. xorl %r14d, %eax
  20894. rorxl $25, %r12d, %edx
  20895. xorl %ecx, %edx
  20896. andl %r12d, %eax
  20897. addl %edx, %r15d
  20898. rorxl $2, %r8d, %edx
  20899. rorxl $13, %r8d, %ecx
  20900. xorl %r14d, %eax
  20901. xorl %edx, %ecx
  20902. rorxl $22, %r8d, %edx
  20903. addl %eax, %r15d
  20904. xorl %ecx, %edx
  20905. movl %r9d, %eax
  20906. addl %r15d, %r11d
  20907. xorl %r8d, %eax
  20908. andl %eax, %ebx
  20909. addl %edx, %r15d
  20910. xorl %r9d, %ebx
  20911. rorxl $6, %r11d, %edx
  20912. rorxl $11, %r11d, %ecx
  20913. addl %ebx, %r15d
  20914. addl 452(%rsp), %r14d
  20915. movl %r12d, %ebx
  20916. xorl %edx, %ecx
  20917. xorl %r13d, %ebx
  20918. rorxl $25, %r11d, %edx
  20919. xorl %ecx, %edx
  20920. andl %r11d, %ebx
  20921. addl %edx, %r14d
  20922. rorxl $2, %r15d, %edx
  20923. rorxl $13, %r15d, %ecx
  20924. xorl %r13d, %ebx
  20925. xorl %edx, %ecx
  20926. rorxl $22, %r15d, %edx
  20927. addl %ebx, %r14d
  20928. xorl %ecx, %edx
  20929. movl %r8d, %ebx
  20930. leal (%r10,%r14,1), %r10d
  20931. xorl %r15d, %ebx
  20932. andl %ebx, %eax
  20933. addl %edx, %r14d
  20934. xorl %r8d, %eax
  20935. rorxl $6, %r10d, %edx
  20936. rorxl $11, %r10d, %ecx
  20937. leal (%r14,%rax,1), %r14d
  20938. addl 456(%rsp), %r13d
  20939. movl %r11d, %eax
  20940. xorl %edx, %ecx
  20941. xorl %r12d, %eax
  20942. rorxl $25, %r10d, %edx
  20943. xorl %ecx, %edx
  20944. andl %r10d, %eax
  20945. addl %edx, %r13d
  20946. rorxl $2, %r14d, %edx
  20947. rorxl $13, %r14d, %ecx
  20948. xorl %r12d, %eax
  20949. xorl %edx, %ecx
  20950. rorxl $22, %r14d, %edx
  20951. addl %eax, %r13d
  20952. xorl %ecx, %edx
  20953. movl %r15d, %eax
  20954. addl %r13d, %r9d
  20955. xorl %r14d, %eax
  20956. andl %eax, %ebx
  20957. addl %edx, %r13d
  20958. xorl %r15d, %ebx
  20959. rorxl $6, %r9d, %edx
  20960. rorxl $11, %r9d, %ecx
  20961. addl %ebx, %r13d
  20962. addl 460(%rsp), %r12d
  20963. movl %r10d, %ebx
  20964. xorl %edx, %ecx
  20965. xorl %r11d, %ebx
  20966. rorxl $25, %r9d, %edx
  20967. xorl %ecx, %edx
  20968. andl %r9d, %ebx
  20969. addl %edx, %r12d
  20970. rorxl $2, %r13d, %edx
  20971. rorxl $13, %r13d, %ecx
  20972. xorl %r11d, %ebx
  20973. xorl %edx, %ecx
  20974. rorxl $22, %r13d, %edx
  20975. addl %ebx, %r12d
  20976. xorl %ecx, %edx
  20977. movl %r14d, %ebx
  20978. leal (%r8,%r12,1), %r8d
  20979. xorl %r13d, %ebx
  20980. andl %ebx, %eax
  20981. addl %edx, %r12d
  20982. xorl %r14d, %eax
  20983. rorxl $6, %r8d, %edx
  20984. rorxl $11, %r8d, %ecx
  20985. leal (%r12,%rax,1), %r12d
  20986. addl 480(%rsp), %r11d
  20987. movl %r9d, %eax
  20988. xorl %edx, %ecx
  20989. xorl %r10d, %eax
  20990. rorxl $25, %r8d, %edx
  20991. xorl %ecx, %edx
  20992. andl %r8d, %eax
  20993. addl %edx, %r11d
  20994. rorxl $2, %r12d, %edx
  20995. rorxl $13, %r12d, %ecx
  20996. xorl %r10d, %eax
  20997. xorl %edx, %ecx
  20998. rorxl $22, %r12d, %edx
  20999. addl %eax, %r11d
  21000. xorl %ecx, %edx
  21001. movl %r13d, %eax
  21002. addl %r11d, %r15d
  21003. xorl %r12d, %eax
  21004. andl %eax, %ebx
  21005. addl %edx, %r11d
  21006. xorl %r13d, %ebx
  21007. rorxl $6, %r15d, %edx
  21008. rorxl $11, %r15d, %ecx
  21009. addl %ebx, %r11d
  21010. addl 484(%rsp), %r10d
  21011. movl %r8d, %ebx
  21012. xorl %edx, %ecx
  21013. xorl %r9d, %ebx
  21014. rorxl $25, %r15d, %edx
  21015. xorl %ecx, %edx
  21016. andl %r15d, %ebx
  21017. addl %edx, %r10d
  21018. rorxl $2, %r11d, %edx
  21019. rorxl $13, %r11d, %ecx
  21020. xorl %r9d, %ebx
  21021. xorl %edx, %ecx
  21022. rorxl $22, %r11d, %edx
  21023. addl %ebx, %r10d
  21024. xorl %ecx, %edx
  21025. movl %r12d, %ebx
  21026. leal (%r14,%r10,1), %r14d
  21027. xorl %r11d, %ebx
  21028. andl %ebx, %eax
  21029. addl %edx, %r10d
  21030. xorl %r12d, %eax
  21031. rorxl $6, %r14d, %edx
  21032. rorxl $11, %r14d, %ecx
  21033. leal (%r10,%rax,1), %r10d
  21034. addl 488(%rsp), %r9d
  21035. movl %r15d, %eax
  21036. xorl %edx, %ecx
  21037. xorl %r8d, %eax
  21038. rorxl $25, %r14d, %edx
  21039. xorl %ecx, %edx
  21040. andl %r14d, %eax
  21041. addl %edx, %r9d
  21042. rorxl $2, %r10d, %edx
  21043. rorxl $13, %r10d, %ecx
  21044. xorl %r8d, %eax
  21045. xorl %edx, %ecx
  21046. rorxl $22, %r10d, %edx
  21047. addl %eax, %r9d
  21048. xorl %ecx, %edx
  21049. movl %r11d, %eax
  21050. addl %r9d, %r13d
  21051. xorl %r10d, %eax
  21052. andl %eax, %ebx
  21053. addl %edx, %r9d
  21054. xorl %r11d, %ebx
  21055. rorxl $6, %r13d, %edx
  21056. rorxl $11, %r13d, %ecx
  21057. addl %ebx, %r9d
  21058. addl 492(%rsp), %r8d
  21059. movl %r14d, %ebx
  21060. xorl %edx, %ecx
  21061. xorl %r15d, %ebx
  21062. rorxl $25, %r13d, %edx
  21063. xorl %ecx, %edx
  21064. andl %r13d, %ebx
  21065. addl %edx, %r8d
  21066. rorxl $2, %r9d, %edx
  21067. rorxl $13, %r9d, %ecx
  21068. xorl %r15d, %ebx
  21069. xorl %edx, %ecx
  21070. rorxl $22, %r9d, %edx
  21071. addl %ebx, %r8d
  21072. xorl %ecx, %edx
  21073. movl %r10d, %ebx
  21074. leal (%r12,%r8,1), %r12d
  21075. xorl %r9d, %ebx
  21076. andl %ebx, %eax
  21077. addl %edx, %r8d
  21078. xorl %r10d, %eax
  21079. addl %eax, %r8d
  21080. xorl %ecx, %ecx
  21081. addl (%rdi), %r8d
  21082. addl 4(%rdi), %r9d
  21083. addl 8(%rdi), %r10d
  21084. addl 12(%rdi), %r11d
  21085. addl 16(%rdi), %r12d
  21086. addl 20(%rdi), %r13d
  21087. addl 24(%rdi), %r14d
  21088. addl 28(%rdi), %r15d
  21089. movl %r8d, (%rdi)
  21090. movl %r9d, 4(%rdi)
  21091. movl %r10d, 8(%rdi)
  21092. movl %r11d, 12(%rdi)
  21093. movl %r12d, 16(%rdi)
  21094. movl %r13d, 20(%rdi)
  21095. movl %r14d, 24(%rdi)
  21096. movl %r15d, 28(%rdi)
  21097. movl %r9d, %ebx
  21098. xorl %eax, %eax
  21099. xorl %r10d, %ebx
  21100. rorxl $6, %r12d, %edx
  21101. rorxl $11, %r12d, %ecx
  21102. leal (%r8,%rax,1), %r8d
  21103. addl 16(%rsp), %r15d
  21104. movl %r13d, %eax
  21105. xorl %edx, %ecx
  21106. xorl %r14d, %eax
  21107. rorxl $25, %r12d, %edx
  21108. xorl %ecx, %edx
  21109. andl %r12d, %eax
  21110. addl %edx, %r15d
  21111. rorxl $2, %r8d, %edx
  21112. rorxl $13, %r8d, %ecx
  21113. xorl %r14d, %eax
  21114. xorl %edx, %ecx
  21115. rorxl $22, %r8d, %edx
  21116. addl %eax, %r15d
  21117. xorl %ecx, %edx
  21118. movl %r9d, %eax
  21119. addl %r15d, %r11d
  21120. xorl %r8d, %eax
  21121. andl %eax, %ebx
  21122. addl %edx, %r15d
  21123. xorl %r9d, %ebx
  21124. rorxl $6, %r11d, %edx
  21125. rorxl $11, %r11d, %ecx
  21126. addl %ebx, %r15d
  21127. addl 20(%rsp), %r14d
  21128. movl %r12d, %ebx
  21129. xorl %edx, %ecx
  21130. xorl %r13d, %ebx
  21131. rorxl $25, %r11d, %edx
  21132. xorl %ecx, %edx
  21133. andl %r11d, %ebx
  21134. addl %edx, %r14d
  21135. rorxl $2, %r15d, %edx
  21136. rorxl $13, %r15d, %ecx
  21137. xorl %r13d, %ebx
  21138. xorl %edx, %ecx
  21139. rorxl $22, %r15d, %edx
  21140. addl %ebx, %r14d
  21141. xorl %ecx, %edx
  21142. movl %r8d, %ebx
  21143. leal (%r10,%r14,1), %r10d
  21144. xorl %r15d, %ebx
  21145. andl %ebx, %eax
  21146. addl %edx, %r14d
  21147. xorl %r8d, %eax
  21148. rorxl $6, %r10d, %edx
  21149. rorxl $11, %r10d, %ecx
  21150. leal (%r14,%rax,1), %r14d
  21151. addl 24(%rsp), %r13d
  21152. movl %r11d, %eax
  21153. xorl %edx, %ecx
  21154. xorl %r12d, %eax
  21155. rorxl $25, %r10d, %edx
  21156. xorl %ecx, %edx
  21157. andl %r10d, %eax
  21158. addl %edx, %r13d
  21159. rorxl $2, %r14d, %edx
  21160. rorxl $13, %r14d, %ecx
  21161. xorl %r12d, %eax
  21162. xorl %edx, %ecx
  21163. rorxl $22, %r14d, %edx
  21164. addl %eax, %r13d
  21165. xorl %ecx, %edx
  21166. movl %r15d, %eax
  21167. addl %r13d, %r9d
  21168. xorl %r14d, %eax
  21169. andl %eax, %ebx
  21170. addl %edx, %r13d
  21171. xorl %r15d, %ebx
  21172. rorxl $6, %r9d, %edx
  21173. rorxl $11, %r9d, %ecx
  21174. addl %ebx, %r13d
  21175. addl 28(%rsp), %r12d
  21176. movl %r10d, %ebx
  21177. xorl %edx, %ecx
  21178. xorl %r11d, %ebx
  21179. rorxl $25, %r9d, %edx
  21180. xorl %ecx, %edx
  21181. andl %r9d, %ebx
  21182. addl %edx, %r12d
  21183. rorxl $2, %r13d, %edx
  21184. rorxl $13, %r13d, %ecx
  21185. xorl %r11d, %ebx
  21186. xorl %edx, %ecx
  21187. rorxl $22, %r13d, %edx
  21188. addl %ebx, %r12d
  21189. xorl %ecx, %edx
  21190. movl %r14d, %ebx
  21191. leal (%r8,%r12,1), %r8d
  21192. xorl %r13d, %ebx
  21193. andl %ebx, %eax
  21194. addl %edx, %r12d
  21195. xorl %r14d, %eax
  21196. rorxl $6, %r8d, %edx
  21197. rorxl $11, %r8d, %ecx
  21198. leal (%r12,%rax,1), %r12d
  21199. addl 48(%rsp), %r11d
  21200. movl %r9d, %eax
  21201. xorl %edx, %ecx
  21202. xorl %r10d, %eax
  21203. rorxl $25, %r8d, %edx
  21204. xorl %ecx, %edx
  21205. andl %r8d, %eax
  21206. addl %edx, %r11d
  21207. rorxl $2, %r12d, %edx
  21208. rorxl $13, %r12d, %ecx
  21209. xorl %r10d, %eax
  21210. xorl %edx, %ecx
  21211. rorxl $22, %r12d, %edx
  21212. addl %eax, %r11d
  21213. xorl %ecx, %edx
  21214. movl %r13d, %eax
  21215. addl %r11d, %r15d
  21216. xorl %r12d, %eax
  21217. andl %eax, %ebx
  21218. addl %edx, %r11d
  21219. xorl %r13d, %ebx
  21220. rorxl $6, %r15d, %edx
  21221. rorxl $11, %r15d, %ecx
  21222. addl %ebx, %r11d
  21223. addl 52(%rsp), %r10d
  21224. movl %r8d, %ebx
  21225. xorl %edx, %ecx
  21226. xorl %r9d, %ebx
  21227. rorxl $25, %r15d, %edx
  21228. xorl %ecx, %edx
  21229. andl %r15d, %ebx
  21230. addl %edx, %r10d
  21231. rorxl $2, %r11d, %edx
  21232. rorxl $13, %r11d, %ecx
  21233. xorl %r9d, %ebx
  21234. xorl %edx, %ecx
  21235. rorxl $22, %r11d, %edx
  21236. addl %ebx, %r10d
  21237. xorl %ecx, %edx
  21238. movl %r12d, %ebx
  21239. leal (%r14,%r10,1), %r14d
  21240. xorl %r11d, %ebx
  21241. andl %ebx, %eax
  21242. addl %edx, %r10d
  21243. xorl %r12d, %eax
  21244. rorxl $6, %r14d, %edx
  21245. rorxl $11, %r14d, %ecx
  21246. leal (%r10,%rax,1), %r10d
  21247. addl 56(%rsp), %r9d
  21248. movl %r15d, %eax
  21249. xorl %edx, %ecx
  21250. xorl %r8d, %eax
  21251. rorxl $25, %r14d, %edx
  21252. xorl %ecx, %edx
  21253. andl %r14d, %eax
  21254. addl %edx, %r9d
  21255. rorxl $2, %r10d, %edx
  21256. rorxl $13, %r10d, %ecx
  21257. xorl %r8d, %eax
  21258. xorl %edx, %ecx
  21259. rorxl $22, %r10d, %edx
  21260. addl %eax, %r9d
  21261. xorl %ecx, %edx
  21262. movl %r11d, %eax
  21263. addl %r9d, %r13d
  21264. xorl %r10d, %eax
  21265. andl %eax, %ebx
  21266. addl %edx, %r9d
  21267. xorl %r11d, %ebx
  21268. rorxl $6, %r13d, %edx
  21269. rorxl $11, %r13d, %ecx
  21270. addl %ebx, %r9d
  21271. addl 60(%rsp), %r8d
  21272. movl %r14d, %ebx
  21273. xorl %edx, %ecx
  21274. xorl %r15d, %ebx
  21275. rorxl $25, %r13d, %edx
  21276. xorl %ecx, %edx
  21277. andl %r13d, %ebx
  21278. addl %edx, %r8d
  21279. rorxl $2, %r9d, %edx
  21280. rorxl $13, %r9d, %ecx
  21281. xorl %r15d, %ebx
  21282. xorl %edx, %ecx
  21283. rorxl $22, %r9d, %edx
  21284. addl %ebx, %r8d
  21285. xorl %ecx, %edx
  21286. movl %r10d, %ebx
  21287. leal (%r12,%r8,1), %r12d
  21288. xorl %r9d, %ebx
  21289. andl %ebx, %eax
  21290. addl %edx, %r8d
  21291. xorl %r10d, %eax
  21292. rorxl $6, %r12d, %edx
  21293. rorxl $11, %r12d, %ecx
  21294. leal (%r8,%rax,1), %r8d
  21295. addl 80(%rsp), %r15d
  21296. movl %r13d, %eax
  21297. xorl %edx, %ecx
  21298. xorl %r14d, %eax
  21299. rorxl $25, %r12d, %edx
  21300. xorl %ecx, %edx
  21301. andl %r12d, %eax
  21302. addl %edx, %r15d
  21303. rorxl $2, %r8d, %edx
  21304. rorxl $13, %r8d, %ecx
  21305. xorl %r14d, %eax
  21306. xorl %edx, %ecx
  21307. rorxl $22, %r8d, %edx
  21308. addl %eax, %r15d
  21309. xorl %ecx, %edx
  21310. movl %r9d, %eax
  21311. addl %r15d, %r11d
  21312. xorl %r8d, %eax
  21313. andl %eax, %ebx
  21314. addl %edx, %r15d
  21315. xorl %r9d, %ebx
  21316. rorxl $6, %r11d, %edx
  21317. rorxl $11, %r11d, %ecx
  21318. addl %ebx, %r15d
  21319. addl 84(%rsp), %r14d
  21320. movl %r12d, %ebx
  21321. xorl %edx, %ecx
  21322. xorl %r13d, %ebx
  21323. rorxl $25, %r11d, %edx
  21324. xorl %ecx, %edx
  21325. andl %r11d, %ebx
  21326. addl %edx, %r14d
  21327. rorxl $2, %r15d, %edx
  21328. rorxl $13, %r15d, %ecx
  21329. xorl %r13d, %ebx
  21330. xorl %edx, %ecx
  21331. rorxl $22, %r15d, %edx
  21332. addl %ebx, %r14d
  21333. xorl %ecx, %edx
  21334. movl %r8d, %ebx
  21335. leal (%r10,%r14,1), %r10d
  21336. xorl %r15d, %ebx
  21337. andl %ebx, %eax
  21338. addl %edx, %r14d
  21339. xorl %r8d, %eax
  21340. rorxl $6, %r10d, %edx
  21341. rorxl $11, %r10d, %ecx
  21342. leal (%r14,%rax,1), %r14d
  21343. addl 88(%rsp), %r13d
  21344. movl %r11d, %eax
  21345. xorl %edx, %ecx
  21346. xorl %r12d, %eax
  21347. rorxl $25, %r10d, %edx
  21348. xorl %ecx, %edx
  21349. andl %r10d, %eax
  21350. addl %edx, %r13d
  21351. rorxl $2, %r14d, %edx
  21352. rorxl $13, %r14d, %ecx
  21353. xorl %r12d, %eax
  21354. xorl %edx, %ecx
  21355. rorxl $22, %r14d, %edx
  21356. addl %eax, %r13d
  21357. xorl %ecx, %edx
  21358. movl %r15d, %eax
  21359. addl %r13d, %r9d
  21360. xorl %r14d, %eax
  21361. andl %eax, %ebx
  21362. addl %edx, %r13d
  21363. xorl %r15d, %ebx
  21364. rorxl $6, %r9d, %edx
  21365. rorxl $11, %r9d, %ecx
  21366. addl %ebx, %r13d
  21367. addl 92(%rsp), %r12d
  21368. movl %r10d, %ebx
  21369. xorl %edx, %ecx
  21370. xorl %r11d, %ebx
  21371. rorxl $25, %r9d, %edx
  21372. xorl %ecx, %edx
  21373. andl %r9d, %ebx
  21374. addl %edx, %r12d
  21375. rorxl $2, %r13d, %edx
  21376. rorxl $13, %r13d, %ecx
  21377. xorl %r11d, %ebx
  21378. xorl %edx, %ecx
  21379. rorxl $22, %r13d, %edx
  21380. addl %ebx, %r12d
  21381. xorl %ecx, %edx
  21382. movl %r14d, %ebx
  21383. leal (%r8,%r12,1), %r8d
  21384. xorl %r13d, %ebx
  21385. andl %ebx, %eax
  21386. addl %edx, %r12d
  21387. xorl %r14d, %eax
  21388. rorxl $6, %r8d, %edx
  21389. rorxl $11, %r8d, %ecx
  21390. leal (%r12,%rax,1), %r12d
  21391. addl 112(%rsp), %r11d
  21392. movl %r9d, %eax
  21393. xorl %edx, %ecx
  21394. xorl %r10d, %eax
  21395. rorxl $25, %r8d, %edx
  21396. xorl %ecx, %edx
  21397. andl %r8d, %eax
  21398. addl %edx, %r11d
  21399. rorxl $2, %r12d, %edx
  21400. rorxl $13, %r12d, %ecx
  21401. xorl %r10d, %eax
  21402. xorl %edx, %ecx
  21403. rorxl $22, %r12d, %edx
  21404. addl %eax, %r11d
  21405. xorl %ecx, %edx
  21406. movl %r13d, %eax
  21407. addl %r11d, %r15d
  21408. xorl %r12d, %eax
  21409. andl %eax, %ebx
  21410. addl %edx, %r11d
  21411. xorl %r13d, %ebx
  21412. rorxl $6, %r15d, %edx
  21413. rorxl $11, %r15d, %ecx
  21414. addl %ebx, %r11d
  21415. addl 116(%rsp), %r10d
  21416. movl %r8d, %ebx
  21417. xorl %edx, %ecx
  21418. xorl %r9d, %ebx
  21419. rorxl $25, %r15d, %edx
  21420. xorl %ecx, %edx
  21421. andl %r15d, %ebx
  21422. addl %edx, %r10d
  21423. rorxl $2, %r11d, %edx
  21424. rorxl $13, %r11d, %ecx
  21425. xorl %r9d, %ebx
  21426. xorl %edx, %ecx
  21427. rorxl $22, %r11d, %edx
  21428. addl %ebx, %r10d
  21429. xorl %ecx, %edx
  21430. movl %r12d, %ebx
  21431. leal (%r14,%r10,1), %r14d
  21432. xorl %r11d, %ebx
  21433. andl %ebx, %eax
  21434. addl %edx, %r10d
  21435. xorl %r12d, %eax
  21436. rorxl $6, %r14d, %edx
  21437. rorxl $11, %r14d, %ecx
  21438. leal (%r10,%rax,1), %r10d
  21439. addl 120(%rsp), %r9d
  21440. movl %r15d, %eax
  21441. xorl %edx, %ecx
  21442. xorl %r8d, %eax
  21443. rorxl $25, %r14d, %edx
  21444. xorl %ecx, %edx
  21445. andl %r14d, %eax
  21446. addl %edx, %r9d
  21447. rorxl $2, %r10d, %edx
  21448. rorxl $13, %r10d, %ecx
  21449. xorl %r8d, %eax
  21450. xorl %edx, %ecx
  21451. rorxl $22, %r10d, %edx
  21452. addl %eax, %r9d
  21453. xorl %ecx, %edx
  21454. movl %r11d, %eax
  21455. addl %r9d, %r13d
  21456. xorl %r10d, %eax
  21457. andl %eax, %ebx
  21458. addl %edx, %r9d
  21459. xorl %r11d, %ebx
  21460. rorxl $6, %r13d, %edx
  21461. rorxl $11, %r13d, %ecx
  21462. addl %ebx, %r9d
  21463. addl 124(%rsp), %r8d
  21464. movl %r14d, %ebx
  21465. xorl %edx, %ecx
  21466. xorl %r15d, %ebx
  21467. rorxl $25, %r13d, %edx
  21468. xorl %ecx, %edx
  21469. andl %r13d, %ebx
  21470. addl %edx, %r8d
  21471. rorxl $2, %r9d, %edx
  21472. rorxl $13, %r9d, %ecx
  21473. xorl %r15d, %ebx
  21474. xorl %edx, %ecx
  21475. rorxl $22, %r9d, %edx
  21476. addl %ebx, %r8d
  21477. xorl %ecx, %edx
  21478. movl %r10d, %ebx
  21479. leal (%r12,%r8,1), %r12d
  21480. xorl %r9d, %ebx
  21481. andl %ebx, %eax
  21482. addl %edx, %r8d
  21483. xorl %r10d, %eax
  21484. rorxl $6, %r12d, %edx
  21485. rorxl $11, %r12d, %ecx
  21486. leal (%r8,%rax,1), %r8d
  21487. addl 144(%rsp), %r15d
  21488. movl %r13d, %eax
  21489. xorl %edx, %ecx
  21490. xorl %r14d, %eax
  21491. rorxl $25, %r12d, %edx
  21492. xorl %ecx, %edx
  21493. andl %r12d, %eax
  21494. addl %edx, %r15d
  21495. rorxl $2, %r8d, %edx
  21496. rorxl $13, %r8d, %ecx
  21497. xorl %r14d, %eax
  21498. xorl %edx, %ecx
  21499. rorxl $22, %r8d, %edx
  21500. addl %eax, %r15d
  21501. xorl %ecx, %edx
  21502. movl %r9d, %eax
  21503. addl %r15d, %r11d
  21504. xorl %r8d, %eax
  21505. andl %eax, %ebx
  21506. addl %edx, %r15d
  21507. xorl %r9d, %ebx
  21508. rorxl $6, %r11d, %edx
  21509. rorxl $11, %r11d, %ecx
  21510. addl %ebx, %r15d
  21511. addl 148(%rsp), %r14d
  21512. movl %r12d, %ebx
  21513. xorl %edx, %ecx
  21514. xorl %r13d, %ebx
  21515. rorxl $25, %r11d, %edx
  21516. xorl %ecx, %edx
  21517. andl %r11d, %ebx
  21518. addl %edx, %r14d
  21519. rorxl $2, %r15d, %edx
  21520. rorxl $13, %r15d, %ecx
  21521. xorl %r13d, %ebx
  21522. xorl %edx, %ecx
  21523. rorxl $22, %r15d, %edx
  21524. addl %ebx, %r14d
  21525. xorl %ecx, %edx
  21526. movl %r8d, %ebx
  21527. leal (%r10,%r14,1), %r10d
  21528. xorl %r15d, %ebx
  21529. andl %ebx, %eax
  21530. addl %edx, %r14d
  21531. xorl %r8d, %eax
  21532. rorxl $6, %r10d, %edx
  21533. rorxl $11, %r10d, %ecx
  21534. leal (%r14,%rax,1), %r14d
  21535. addl 152(%rsp), %r13d
  21536. movl %r11d, %eax
  21537. xorl %edx, %ecx
  21538. xorl %r12d, %eax
  21539. rorxl $25, %r10d, %edx
  21540. xorl %ecx, %edx
  21541. andl %r10d, %eax
  21542. addl %edx, %r13d
  21543. rorxl $2, %r14d, %edx
  21544. rorxl $13, %r14d, %ecx
  21545. xorl %r12d, %eax
  21546. xorl %edx, %ecx
  21547. rorxl $22, %r14d, %edx
  21548. addl %eax, %r13d
  21549. xorl %ecx, %edx
  21550. movl %r15d, %eax
  21551. addl %r13d, %r9d
  21552. xorl %r14d, %eax
  21553. andl %eax, %ebx
  21554. addl %edx, %r13d
  21555. xorl %r15d, %ebx
  21556. rorxl $6, %r9d, %edx
  21557. rorxl $11, %r9d, %ecx
  21558. addl %ebx, %r13d
  21559. addl 156(%rsp), %r12d
  21560. movl %r10d, %ebx
  21561. xorl %edx, %ecx
  21562. xorl %r11d, %ebx
  21563. rorxl $25, %r9d, %edx
  21564. xorl %ecx, %edx
  21565. andl %r9d, %ebx
  21566. addl %edx, %r12d
  21567. rorxl $2, %r13d, %edx
  21568. rorxl $13, %r13d, %ecx
  21569. xorl %r11d, %ebx
  21570. xorl %edx, %ecx
  21571. rorxl $22, %r13d, %edx
  21572. addl %ebx, %r12d
  21573. xorl %ecx, %edx
  21574. movl %r14d, %ebx
  21575. leal (%r8,%r12,1), %r8d
  21576. xorl %r13d, %ebx
  21577. andl %ebx, %eax
  21578. addl %edx, %r12d
  21579. xorl %r14d, %eax
  21580. rorxl $6, %r8d, %edx
  21581. rorxl $11, %r8d, %ecx
  21582. leal (%r12,%rax,1), %r12d
  21583. addl 176(%rsp), %r11d
  21584. movl %r9d, %eax
  21585. xorl %edx, %ecx
  21586. xorl %r10d, %eax
  21587. rorxl $25, %r8d, %edx
  21588. xorl %ecx, %edx
  21589. andl %r8d, %eax
  21590. addl %edx, %r11d
  21591. rorxl $2, %r12d, %edx
  21592. rorxl $13, %r12d, %ecx
  21593. xorl %r10d, %eax
  21594. xorl %edx, %ecx
  21595. rorxl $22, %r12d, %edx
  21596. addl %eax, %r11d
  21597. xorl %ecx, %edx
  21598. movl %r13d, %eax
  21599. addl %r11d, %r15d
  21600. xorl %r12d, %eax
  21601. andl %eax, %ebx
  21602. addl %edx, %r11d
  21603. xorl %r13d, %ebx
  21604. rorxl $6, %r15d, %edx
  21605. rorxl $11, %r15d, %ecx
  21606. addl %ebx, %r11d
  21607. addl 180(%rsp), %r10d
  21608. movl %r8d, %ebx
  21609. xorl %edx, %ecx
  21610. xorl %r9d, %ebx
  21611. rorxl $25, %r15d, %edx
  21612. xorl %ecx, %edx
  21613. andl %r15d, %ebx
  21614. addl %edx, %r10d
  21615. rorxl $2, %r11d, %edx
  21616. rorxl $13, %r11d, %ecx
  21617. xorl %r9d, %ebx
  21618. xorl %edx, %ecx
  21619. rorxl $22, %r11d, %edx
  21620. addl %ebx, %r10d
  21621. xorl %ecx, %edx
  21622. movl %r12d, %ebx
  21623. leal (%r14,%r10,1), %r14d
  21624. xorl %r11d, %ebx
  21625. andl %ebx, %eax
  21626. addl %edx, %r10d
  21627. xorl %r12d, %eax
  21628. rorxl $6, %r14d, %edx
  21629. rorxl $11, %r14d, %ecx
  21630. leal (%r10,%rax,1), %r10d
  21631. addl 184(%rsp), %r9d
  21632. movl %r15d, %eax
  21633. xorl %edx, %ecx
  21634. xorl %r8d, %eax
  21635. rorxl $25, %r14d, %edx
  21636. xorl %ecx, %edx
  21637. andl %r14d, %eax
  21638. addl %edx, %r9d
  21639. rorxl $2, %r10d, %edx
  21640. rorxl $13, %r10d, %ecx
  21641. xorl %r8d, %eax
  21642. xorl %edx, %ecx
  21643. rorxl $22, %r10d, %edx
  21644. addl %eax, %r9d
  21645. xorl %ecx, %edx
  21646. movl %r11d, %eax
  21647. addl %r9d, %r13d
  21648. xorl %r10d, %eax
  21649. andl %eax, %ebx
  21650. addl %edx, %r9d
  21651. xorl %r11d, %ebx
  21652. rorxl $6, %r13d, %edx
  21653. rorxl $11, %r13d, %ecx
  21654. addl %ebx, %r9d
  21655. addl 188(%rsp), %r8d
  21656. movl %r14d, %ebx
  21657. xorl %edx, %ecx
  21658. xorl %r15d, %ebx
  21659. rorxl $25, %r13d, %edx
  21660. xorl %ecx, %edx
  21661. andl %r13d, %ebx
  21662. addl %edx, %r8d
  21663. rorxl $2, %r9d, %edx
  21664. rorxl $13, %r9d, %ecx
  21665. xorl %r15d, %ebx
  21666. xorl %edx, %ecx
  21667. rorxl $22, %r9d, %edx
  21668. addl %ebx, %r8d
  21669. xorl %ecx, %edx
  21670. movl %r10d, %ebx
  21671. leal (%r12,%r8,1), %r12d
  21672. xorl %r9d, %ebx
  21673. andl %ebx, %eax
  21674. addl %edx, %r8d
  21675. xorl %r10d, %eax
  21676. rorxl $6, %r12d, %edx
  21677. rorxl $11, %r12d, %ecx
  21678. leal (%r8,%rax,1), %r8d
  21679. addl 208(%rsp), %r15d
  21680. movl %r13d, %eax
  21681. xorl %edx, %ecx
  21682. xorl %r14d, %eax
  21683. rorxl $25, %r12d, %edx
  21684. xorl %ecx, %edx
  21685. andl %r12d, %eax
  21686. addl %edx, %r15d
  21687. rorxl $2, %r8d, %edx
  21688. rorxl $13, %r8d, %ecx
  21689. xorl %r14d, %eax
  21690. xorl %edx, %ecx
  21691. rorxl $22, %r8d, %edx
  21692. addl %eax, %r15d
  21693. xorl %ecx, %edx
  21694. movl %r9d, %eax
  21695. addl %r15d, %r11d
  21696. xorl %r8d, %eax
  21697. andl %eax, %ebx
  21698. addl %edx, %r15d
  21699. xorl %r9d, %ebx
  21700. rorxl $6, %r11d, %edx
  21701. rorxl $11, %r11d, %ecx
  21702. addl %ebx, %r15d
  21703. addl 212(%rsp), %r14d
  21704. movl %r12d, %ebx
  21705. xorl %edx, %ecx
  21706. xorl %r13d, %ebx
  21707. rorxl $25, %r11d, %edx
  21708. xorl %ecx, %edx
  21709. andl %r11d, %ebx
  21710. addl %edx, %r14d
  21711. rorxl $2, %r15d, %edx
  21712. rorxl $13, %r15d, %ecx
  21713. xorl %r13d, %ebx
  21714. xorl %edx, %ecx
  21715. rorxl $22, %r15d, %edx
  21716. addl %ebx, %r14d
  21717. xorl %ecx, %edx
  21718. movl %r8d, %ebx
  21719. leal (%r10,%r14,1), %r10d
  21720. xorl %r15d, %ebx
  21721. andl %ebx, %eax
  21722. addl %edx, %r14d
  21723. xorl %r8d, %eax
  21724. rorxl $6, %r10d, %edx
  21725. rorxl $11, %r10d, %ecx
  21726. leal (%r14,%rax,1), %r14d
  21727. addl 216(%rsp), %r13d
  21728. movl %r11d, %eax
  21729. xorl %edx, %ecx
  21730. xorl %r12d, %eax
  21731. rorxl $25, %r10d, %edx
  21732. xorl %ecx, %edx
  21733. andl %r10d, %eax
  21734. addl %edx, %r13d
  21735. rorxl $2, %r14d, %edx
  21736. rorxl $13, %r14d, %ecx
  21737. xorl %r12d, %eax
  21738. xorl %edx, %ecx
  21739. rorxl $22, %r14d, %edx
  21740. addl %eax, %r13d
  21741. xorl %ecx, %edx
  21742. movl %r15d, %eax
  21743. addl %r13d, %r9d
  21744. xorl %r14d, %eax
  21745. andl %eax, %ebx
  21746. addl %edx, %r13d
  21747. xorl %r15d, %ebx
  21748. rorxl $6, %r9d, %edx
  21749. rorxl $11, %r9d, %ecx
  21750. addl %ebx, %r13d
  21751. addl 220(%rsp), %r12d
  21752. movl %r10d, %ebx
  21753. xorl %edx, %ecx
  21754. xorl %r11d, %ebx
  21755. rorxl $25, %r9d, %edx
  21756. xorl %ecx, %edx
  21757. andl %r9d, %ebx
  21758. addl %edx, %r12d
  21759. rorxl $2, %r13d, %edx
  21760. rorxl $13, %r13d, %ecx
  21761. xorl %r11d, %ebx
  21762. xorl %edx, %ecx
  21763. rorxl $22, %r13d, %edx
  21764. addl %ebx, %r12d
  21765. xorl %ecx, %edx
  21766. movl %r14d, %ebx
  21767. leal (%r8,%r12,1), %r8d
  21768. xorl %r13d, %ebx
  21769. andl %ebx, %eax
  21770. addl %edx, %r12d
  21771. xorl %r14d, %eax
  21772. rorxl $6, %r8d, %edx
  21773. rorxl $11, %r8d, %ecx
  21774. leal (%r12,%rax,1), %r12d
  21775. addl 240(%rsp), %r11d
  21776. movl %r9d, %eax
  21777. xorl %edx, %ecx
  21778. xorl %r10d, %eax
  21779. rorxl $25, %r8d, %edx
  21780. xorl %ecx, %edx
  21781. andl %r8d, %eax
  21782. addl %edx, %r11d
  21783. rorxl $2, %r12d, %edx
  21784. rorxl $13, %r12d, %ecx
  21785. xorl %r10d, %eax
  21786. xorl %edx, %ecx
  21787. rorxl $22, %r12d, %edx
  21788. addl %eax, %r11d
  21789. xorl %ecx, %edx
  21790. movl %r13d, %eax
  21791. addl %r11d, %r15d
  21792. xorl %r12d, %eax
  21793. andl %eax, %ebx
  21794. addl %edx, %r11d
  21795. xorl %r13d, %ebx
  21796. rorxl $6, %r15d, %edx
  21797. rorxl $11, %r15d, %ecx
  21798. addl %ebx, %r11d
  21799. addl 244(%rsp), %r10d
  21800. movl %r8d, %ebx
  21801. xorl %edx, %ecx
  21802. xorl %r9d, %ebx
  21803. rorxl $25, %r15d, %edx
  21804. xorl %ecx, %edx
  21805. andl %r15d, %ebx
  21806. addl %edx, %r10d
  21807. rorxl $2, %r11d, %edx
  21808. rorxl $13, %r11d, %ecx
  21809. xorl %r9d, %ebx
  21810. xorl %edx, %ecx
  21811. rorxl $22, %r11d, %edx
  21812. addl %ebx, %r10d
  21813. xorl %ecx, %edx
  21814. movl %r12d, %ebx
  21815. leal (%r14,%r10,1), %r14d
  21816. xorl %r11d, %ebx
  21817. andl %ebx, %eax
  21818. addl %edx, %r10d
  21819. xorl %r12d, %eax
  21820. rorxl $6, %r14d, %edx
  21821. rorxl $11, %r14d, %ecx
  21822. leal (%r10,%rax,1), %r10d
  21823. addl 248(%rsp), %r9d
  21824. movl %r15d, %eax
  21825. xorl %edx, %ecx
  21826. xorl %r8d, %eax
  21827. rorxl $25, %r14d, %edx
  21828. xorl %ecx, %edx
  21829. andl %r14d, %eax
  21830. addl %edx, %r9d
  21831. rorxl $2, %r10d, %edx
  21832. rorxl $13, %r10d, %ecx
  21833. xorl %r8d, %eax
  21834. xorl %edx, %ecx
  21835. rorxl $22, %r10d, %edx
  21836. addl %eax, %r9d
  21837. xorl %ecx, %edx
  21838. movl %r11d, %eax
  21839. addl %r9d, %r13d
  21840. xorl %r10d, %eax
  21841. andl %eax, %ebx
  21842. addl %edx, %r9d
  21843. xorl %r11d, %ebx
  21844. rorxl $6, %r13d, %edx
  21845. rorxl $11, %r13d, %ecx
  21846. addl %ebx, %r9d
  21847. addl 252(%rsp), %r8d
  21848. movl %r14d, %ebx
  21849. xorl %edx, %ecx
  21850. xorl %r15d, %ebx
  21851. rorxl $25, %r13d, %edx
  21852. xorl %ecx, %edx
  21853. andl %r13d, %ebx
  21854. addl %edx, %r8d
  21855. rorxl $2, %r9d, %edx
  21856. rorxl $13, %r9d, %ecx
  21857. xorl %r15d, %ebx
  21858. xorl %edx, %ecx
  21859. rorxl $22, %r9d, %edx
  21860. addl %ebx, %r8d
  21861. xorl %ecx, %edx
  21862. movl %r10d, %ebx
  21863. leal (%r12,%r8,1), %r12d
  21864. xorl %r9d, %ebx
  21865. andl %ebx, %eax
  21866. addl %edx, %r8d
  21867. xorl %r10d, %eax
  21868. rorxl $6, %r12d, %edx
  21869. rorxl $11, %r12d, %ecx
  21870. leal (%r8,%rax,1), %r8d
  21871. addl 272(%rsp), %r15d
  21872. movl %r13d, %eax
  21873. xorl %edx, %ecx
  21874. xorl %r14d, %eax
  21875. rorxl $25, %r12d, %edx
  21876. xorl %ecx, %edx
  21877. andl %r12d, %eax
  21878. addl %edx, %r15d
  21879. rorxl $2, %r8d, %edx
  21880. rorxl $13, %r8d, %ecx
  21881. xorl %r14d, %eax
  21882. xorl %edx, %ecx
  21883. rorxl $22, %r8d, %edx
  21884. addl %eax, %r15d
  21885. xorl %ecx, %edx
  21886. movl %r9d, %eax
  21887. addl %r15d, %r11d
  21888. xorl %r8d, %eax
  21889. andl %eax, %ebx
  21890. addl %edx, %r15d
  21891. xorl %r9d, %ebx
  21892. rorxl $6, %r11d, %edx
  21893. rorxl $11, %r11d, %ecx
  21894. addl %ebx, %r15d
  21895. addl 276(%rsp), %r14d
  21896. movl %r12d, %ebx
  21897. xorl %edx, %ecx
  21898. xorl %r13d, %ebx
  21899. rorxl $25, %r11d, %edx
  21900. xorl %ecx, %edx
  21901. andl %r11d, %ebx
  21902. addl %edx, %r14d
  21903. rorxl $2, %r15d, %edx
  21904. rorxl $13, %r15d, %ecx
  21905. xorl %r13d, %ebx
  21906. xorl %edx, %ecx
  21907. rorxl $22, %r15d, %edx
  21908. addl %ebx, %r14d
  21909. xorl %ecx, %edx
  21910. movl %r8d, %ebx
  21911. leal (%r10,%r14,1), %r10d
  21912. xorl %r15d, %ebx
  21913. andl %ebx, %eax
  21914. addl %edx, %r14d
  21915. xorl %r8d, %eax
  21916. rorxl $6, %r10d, %edx
  21917. rorxl $11, %r10d, %ecx
  21918. leal (%r14,%rax,1), %r14d
  21919. addl 280(%rsp), %r13d
  21920. movl %r11d, %eax
  21921. xorl %edx, %ecx
  21922. xorl %r12d, %eax
  21923. rorxl $25, %r10d, %edx
  21924. xorl %ecx, %edx
  21925. andl %r10d, %eax
  21926. addl %edx, %r13d
  21927. rorxl $2, %r14d, %edx
  21928. rorxl $13, %r14d, %ecx
  21929. xorl %r12d, %eax
  21930. xorl %edx, %ecx
  21931. rorxl $22, %r14d, %edx
  21932. addl %eax, %r13d
  21933. xorl %ecx, %edx
  21934. movl %r15d, %eax
  21935. addl %r13d, %r9d
  21936. xorl %r14d, %eax
  21937. andl %eax, %ebx
  21938. addl %edx, %r13d
  21939. xorl %r15d, %ebx
  21940. rorxl $6, %r9d, %edx
  21941. rorxl $11, %r9d, %ecx
  21942. addl %ebx, %r13d
  21943. addl 284(%rsp), %r12d
  21944. movl %r10d, %ebx
  21945. xorl %edx, %ecx
  21946. xorl %r11d, %ebx
  21947. rorxl $25, %r9d, %edx
  21948. xorl %ecx, %edx
  21949. andl %r9d, %ebx
  21950. addl %edx, %r12d
  21951. rorxl $2, %r13d, %edx
  21952. rorxl $13, %r13d, %ecx
  21953. xorl %r11d, %ebx
  21954. xorl %edx, %ecx
  21955. rorxl $22, %r13d, %edx
  21956. addl %ebx, %r12d
  21957. xorl %ecx, %edx
  21958. movl %r14d, %ebx
  21959. leal (%r8,%r12,1), %r8d
  21960. xorl %r13d, %ebx
  21961. andl %ebx, %eax
  21962. addl %edx, %r12d
  21963. xorl %r14d, %eax
  21964. rorxl $6, %r8d, %edx
  21965. rorxl $11, %r8d, %ecx
  21966. leal (%r12,%rax,1), %r12d
  21967. addl 304(%rsp), %r11d
  21968. movl %r9d, %eax
  21969. xorl %edx, %ecx
  21970. xorl %r10d, %eax
  21971. rorxl $25, %r8d, %edx
  21972. xorl %ecx, %edx
  21973. andl %r8d, %eax
  21974. addl %edx, %r11d
  21975. rorxl $2, %r12d, %edx
  21976. rorxl $13, %r12d, %ecx
  21977. xorl %r10d, %eax
  21978. xorl %edx, %ecx
  21979. rorxl $22, %r12d, %edx
  21980. addl %eax, %r11d
  21981. xorl %ecx, %edx
  21982. movl %r13d, %eax
  21983. addl %r11d, %r15d
  21984. xorl %r12d, %eax
  21985. andl %eax, %ebx
  21986. addl %edx, %r11d
  21987. xorl %r13d, %ebx
  21988. rorxl $6, %r15d, %edx
  21989. rorxl $11, %r15d, %ecx
  21990. addl %ebx, %r11d
  21991. addl 308(%rsp), %r10d
  21992. movl %r8d, %ebx
  21993. xorl %edx, %ecx
  21994. xorl %r9d, %ebx
  21995. rorxl $25, %r15d, %edx
  21996. xorl %ecx, %edx
  21997. andl %r15d, %ebx
  21998. addl %edx, %r10d
  21999. rorxl $2, %r11d, %edx
  22000. rorxl $13, %r11d, %ecx
  22001. xorl %r9d, %ebx
  22002. xorl %edx, %ecx
  22003. rorxl $22, %r11d, %edx
  22004. addl %ebx, %r10d
  22005. xorl %ecx, %edx
  22006. movl %r12d, %ebx
  22007. leal (%r14,%r10,1), %r14d
  22008. xorl %r11d, %ebx
  22009. andl %ebx, %eax
  22010. addl %edx, %r10d
  22011. xorl %r12d, %eax
  22012. rorxl $6, %r14d, %edx
  22013. rorxl $11, %r14d, %ecx
  22014. leal (%r10,%rax,1), %r10d
  22015. addl 312(%rsp), %r9d
  22016. movl %r15d, %eax
  22017. xorl %edx, %ecx
  22018. xorl %r8d, %eax
  22019. rorxl $25, %r14d, %edx
  22020. xorl %ecx, %edx
  22021. andl %r14d, %eax
  22022. addl %edx, %r9d
  22023. rorxl $2, %r10d, %edx
  22024. rorxl $13, %r10d, %ecx
  22025. xorl %r8d, %eax
  22026. xorl %edx, %ecx
  22027. rorxl $22, %r10d, %edx
  22028. addl %eax, %r9d
  22029. xorl %ecx, %edx
  22030. movl %r11d, %eax
  22031. addl %r9d, %r13d
  22032. xorl %r10d, %eax
  22033. andl %eax, %ebx
  22034. addl %edx, %r9d
  22035. xorl %r11d, %ebx
  22036. rorxl $6, %r13d, %edx
  22037. rorxl $11, %r13d, %ecx
  22038. addl %ebx, %r9d
  22039. addl 316(%rsp), %r8d
  22040. movl %r14d, %ebx
  22041. xorl %edx, %ecx
  22042. xorl %r15d, %ebx
  22043. rorxl $25, %r13d, %edx
  22044. xorl %ecx, %edx
  22045. andl %r13d, %ebx
  22046. addl %edx, %r8d
  22047. rorxl $2, %r9d, %edx
  22048. rorxl $13, %r9d, %ecx
  22049. xorl %r15d, %ebx
  22050. xorl %edx, %ecx
  22051. rorxl $22, %r9d, %edx
  22052. addl %ebx, %r8d
  22053. xorl %ecx, %edx
  22054. movl %r10d, %ebx
  22055. leal (%r12,%r8,1), %r12d
  22056. xorl %r9d, %ebx
  22057. andl %ebx, %eax
  22058. addl %edx, %r8d
  22059. xorl %r10d, %eax
  22060. rorxl $6, %r12d, %edx
  22061. rorxl $11, %r12d, %ecx
  22062. leal (%r8,%rax,1), %r8d
  22063. addl 336(%rsp), %r15d
  22064. movl %r13d, %eax
  22065. xorl %edx, %ecx
  22066. xorl %r14d, %eax
  22067. rorxl $25, %r12d, %edx
  22068. xorl %ecx, %edx
  22069. andl %r12d, %eax
  22070. addl %edx, %r15d
  22071. rorxl $2, %r8d, %edx
  22072. rorxl $13, %r8d, %ecx
  22073. xorl %r14d, %eax
  22074. xorl %edx, %ecx
  22075. rorxl $22, %r8d, %edx
  22076. addl %eax, %r15d
  22077. xorl %ecx, %edx
  22078. movl %r9d, %eax
  22079. addl %r15d, %r11d
  22080. xorl %r8d, %eax
  22081. andl %eax, %ebx
  22082. addl %edx, %r15d
  22083. xorl %r9d, %ebx
  22084. rorxl $6, %r11d, %edx
  22085. rorxl $11, %r11d, %ecx
  22086. addl %ebx, %r15d
  22087. addl 340(%rsp), %r14d
  22088. movl %r12d, %ebx
  22089. xorl %edx, %ecx
  22090. xorl %r13d, %ebx
  22091. rorxl $25, %r11d, %edx
  22092. xorl %ecx, %edx
  22093. andl %r11d, %ebx
  22094. addl %edx, %r14d
  22095. rorxl $2, %r15d, %edx
  22096. rorxl $13, %r15d, %ecx
  22097. xorl %r13d, %ebx
  22098. xorl %edx, %ecx
  22099. rorxl $22, %r15d, %edx
  22100. addl %ebx, %r14d
  22101. xorl %ecx, %edx
  22102. movl %r8d, %ebx
  22103. leal (%r10,%r14,1), %r10d
  22104. xorl %r15d, %ebx
  22105. andl %ebx, %eax
  22106. addl %edx, %r14d
  22107. xorl %r8d, %eax
  22108. rorxl $6, %r10d, %edx
  22109. rorxl $11, %r10d, %ecx
  22110. leal (%r14,%rax,1), %r14d
  22111. addl 344(%rsp), %r13d
  22112. movl %r11d, %eax
  22113. xorl %edx, %ecx
  22114. xorl %r12d, %eax
  22115. rorxl $25, %r10d, %edx
  22116. xorl %ecx, %edx
  22117. andl %r10d, %eax
  22118. addl %edx, %r13d
  22119. rorxl $2, %r14d, %edx
  22120. rorxl $13, %r14d, %ecx
  22121. xorl %r12d, %eax
  22122. xorl %edx, %ecx
  22123. rorxl $22, %r14d, %edx
  22124. addl %eax, %r13d
  22125. xorl %ecx, %edx
  22126. movl %r15d, %eax
  22127. addl %r13d, %r9d
  22128. xorl %r14d, %eax
  22129. andl %eax, %ebx
  22130. addl %edx, %r13d
  22131. xorl %r15d, %ebx
  22132. rorxl $6, %r9d, %edx
  22133. rorxl $11, %r9d, %ecx
  22134. addl %ebx, %r13d
  22135. addl 348(%rsp), %r12d
  22136. movl %r10d, %ebx
  22137. xorl %edx, %ecx
  22138. xorl %r11d, %ebx
  22139. rorxl $25, %r9d, %edx
  22140. xorl %ecx, %edx
  22141. andl %r9d, %ebx
  22142. addl %edx, %r12d
  22143. rorxl $2, %r13d, %edx
  22144. rorxl $13, %r13d, %ecx
  22145. xorl %r11d, %ebx
  22146. xorl %edx, %ecx
  22147. rorxl $22, %r13d, %edx
  22148. addl %ebx, %r12d
  22149. xorl %ecx, %edx
  22150. movl %r14d, %ebx
  22151. leal (%r8,%r12,1), %r8d
  22152. xorl %r13d, %ebx
  22153. andl %ebx, %eax
  22154. addl %edx, %r12d
  22155. xorl %r14d, %eax
  22156. rorxl $6, %r8d, %edx
  22157. rorxl $11, %r8d, %ecx
  22158. leal (%r12,%rax,1), %r12d
  22159. addl 368(%rsp), %r11d
  22160. movl %r9d, %eax
  22161. xorl %edx, %ecx
  22162. xorl %r10d, %eax
  22163. rorxl $25, %r8d, %edx
  22164. xorl %ecx, %edx
  22165. andl %r8d, %eax
  22166. addl %edx, %r11d
  22167. rorxl $2, %r12d, %edx
  22168. rorxl $13, %r12d, %ecx
  22169. xorl %r10d, %eax
  22170. xorl %edx, %ecx
  22171. rorxl $22, %r12d, %edx
  22172. addl %eax, %r11d
  22173. xorl %ecx, %edx
  22174. movl %r13d, %eax
  22175. addl %r11d, %r15d
  22176. xorl %r12d, %eax
  22177. andl %eax, %ebx
  22178. addl %edx, %r11d
  22179. xorl %r13d, %ebx
  22180. rorxl $6, %r15d, %edx
  22181. rorxl $11, %r15d, %ecx
  22182. addl %ebx, %r11d
  22183. addl 372(%rsp), %r10d
  22184. movl %r8d, %ebx
  22185. xorl %edx, %ecx
  22186. xorl %r9d, %ebx
  22187. rorxl $25, %r15d, %edx
  22188. xorl %ecx, %edx
  22189. andl %r15d, %ebx
  22190. addl %edx, %r10d
  22191. rorxl $2, %r11d, %edx
  22192. rorxl $13, %r11d, %ecx
  22193. xorl %r9d, %ebx
  22194. xorl %edx, %ecx
  22195. rorxl $22, %r11d, %edx
  22196. addl %ebx, %r10d
  22197. xorl %ecx, %edx
  22198. movl %r12d, %ebx
  22199. leal (%r14,%r10,1), %r14d
  22200. xorl %r11d, %ebx
  22201. andl %ebx, %eax
  22202. addl %edx, %r10d
  22203. xorl %r12d, %eax
  22204. rorxl $6, %r14d, %edx
  22205. rorxl $11, %r14d, %ecx
  22206. leal (%r10,%rax,1), %r10d
  22207. addl 376(%rsp), %r9d
  22208. movl %r15d, %eax
  22209. xorl %edx, %ecx
  22210. xorl %r8d, %eax
  22211. rorxl $25, %r14d, %edx
  22212. xorl %ecx, %edx
  22213. andl %r14d, %eax
  22214. addl %edx, %r9d
  22215. rorxl $2, %r10d, %edx
  22216. rorxl $13, %r10d, %ecx
  22217. xorl %r8d, %eax
  22218. xorl %edx, %ecx
  22219. rorxl $22, %r10d, %edx
  22220. addl %eax, %r9d
  22221. xorl %ecx, %edx
  22222. movl %r11d, %eax
  22223. addl %r9d, %r13d
  22224. xorl %r10d, %eax
  22225. andl %eax, %ebx
  22226. addl %edx, %r9d
  22227. xorl %r11d, %ebx
  22228. rorxl $6, %r13d, %edx
  22229. rorxl $11, %r13d, %ecx
  22230. addl %ebx, %r9d
  22231. addl 380(%rsp), %r8d
  22232. movl %r14d, %ebx
  22233. xorl %edx, %ecx
  22234. xorl %r15d, %ebx
  22235. rorxl $25, %r13d, %edx
  22236. xorl %ecx, %edx
  22237. andl %r13d, %ebx
  22238. addl %edx, %r8d
  22239. rorxl $2, %r9d, %edx
  22240. rorxl $13, %r9d, %ecx
  22241. xorl %r15d, %ebx
  22242. xorl %edx, %ecx
  22243. rorxl $22, %r9d, %edx
  22244. addl %ebx, %r8d
  22245. xorl %ecx, %edx
  22246. movl %r10d, %ebx
  22247. leal (%r12,%r8,1), %r12d
  22248. xorl %r9d, %ebx
  22249. andl %ebx, %eax
  22250. addl %edx, %r8d
  22251. xorl %r10d, %eax
  22252. rorxl $6, %r12d, %edx
  22253. rorxl $11, %r12d, %ecx
  22254. leal (%r8,%rax,1), %r8d
  22255. addl 400(%rsp), %r15d
  22256. movl %r13d, %eax
  22257. xorl %edx, %ecx
  22258. xorl %r14d, %eax
  22259. rorxl $25, %r12d, %edx
  22260. xorl %ecx, %edx
  22261. andl %r12d, %eax
  22262. addl %edx, %r15d
  22263. rorxl $2, %r8d, %edx
  22264. rorxl $13, %r8d, %ecx
  22265. xorl %r14d, %eax
  22266. xorl %edx, %ecx
  22267. rorxl $22, %r8d, %edx
  22268. addl %eax, %r15d
  22269. xorl %ecx, %edx
  22270. movl %r9d, %eax
  22271. addl %r15d, %r11d
  22272. xorl %r8d, %eax
  22273. andl %eax, %ebx
  22274. addl %edx, %r15d
  22275. xorl %r9d, %ebx
  22276. rorxl $6, %r11d, %edx
  22277. rorxl $11, %r11d, %ecx
  22278. addl %ebx, %r15d
  22279. addl 404(%rsp), %r14d
  22280. movl %r12d, %ebx
  22281. xorl %edx, %ecx
  22282. xorl %r13d, %ebx
  22283. rorxl $25, %r11d, %edx
  22284. xorl %ecx, %edx
  22285. andl %r11d, %ebx
  22286. addl %edx, %r14d
  22287. rorxl $2, %r15d, %edx
  22288. rorxl $13, %r15d, %ecx
  22289. xorl %r13d, %ebx
  22290. xorl %edx, %ecx
  22291. rorxl $22, %r15d, %edx
  22292. addl %ebx, %r14d
  22293. xorl %ecx, %edx
  22294. movl %r8d, %ebx
  22295. leal (%r10,%r14,1), %r10d
  22296. xorl %r15d, %ebx
  22297. andl %ebx, %eax
  22298. addl %edx, %r14d
  22299. xorl %r8d, %eax
  22300. rorxl $6, %r10d, %edx
  22301. rorxl $11, %r10d, %ecx
  22302. leal (%r14,%rax,1), %r14d
  22303. addl 408(%rsp), %r13d
  22304. movl %r11d, %eax
  22305. xorl %edx, %ecx
  22306. xorl %r12d, %eax
  22307. rorxl $25, %r10d, %edx
  22308. xorl %ecx, %edx
  22309. andl %r10d, %eax
  22310. addl %edx, %r13d
  22311. rorxl $2, %r14d, %edx
  22312. rorxl $13, %r14d, %ecx
  22313. xorl %r12d, %eax
  22314. xorl %edx, %ecx
  22315. rorxl $22, %r14d, %edx
  22316. addl %eax, %r13d
  22317. xorl %ecx, %edx
  22318. movl %r15d, %eax
  22319. addl %r13d, %r9d
  22320. xorl %r14d, %eax
  22321. andl %eax, %ebx
  22322. addl %edx, %r13d
  22323. xorl %r15d, %ebx
  22324. rorxl $6, %r9d, %edx
  22325. rorxl $11, %r9d, %ecx
  22326. addl %ebx, %r13d
  22327. addl 412(%rsp), %r12d
  22328. movl %r10d, %ebx
  22329. xorl %edx, %ecx
  22330. xorl %r11d, %ebx
  22331. rorxl $25, %r9d, %edx
  22332. xorl %ecx, %edx
  22333. andl %r9d, %ebx
  22334. addl %edx, %r12d
  22335. rorxl $2, %r13d, %edx
  22336. rorxl $13, %r13d, %ecx
  22337. xorl %r11d, %ebx
  22338. xorl %edx, %ecx
  22339. rorxl $22, %r13d, %edx
  22340. addl %ebx, %r12d
  22341. xorl %ecx, %edx
  22342. movl %r14d, %ebx
  22343. leal (%r8,%r12,1), %r8d
  22344. xorl %r13d, %ebx
  22345. andl %ebx, %eax
  22346. addl %edx, %r12d
  22347. xorl %r14d, %eax
  22348. rorxl $6, %r8d, %edx
  22349. rorxl $11, %r8d, %ecx
  22350. leal (%r12,%rax,1), %r12d
  22351. addl 432(%rsp), %r11d
  22352. movl %r9d, %eax
  22353. xorl %edx, %ecx
  22354. xorl %r10d, %eax
  22355. rorxl $25, %r8d, %edx
  22356. xorl %ecx, %edx
  22357. andl %r8d, %eax
  22358. addl %edx, %r11d
  22359. rorxl $2, %r12d, %edx
  22360. rorxl $13, %r12d, %ecx
  22361. xorl %r10d, %eax
  22362. xorl %edx, %ecx
  22363. rorxl $22, %r12d, %edx
  22364. addl %eax, %r11d
  22365. xorl %ecx, %edx
  22366. movl %r13d, %eax
  22367. addl %r11d, %r15d
  22368. xorl %r12d, %eax
  22369. andl %eax, %ebx
  22370. addl %edx, %r11d
  22371. xorl %r13d, %ebx
  22372. rorxl $6, %r15d, %edx
  22373. rorxl $11, %r15d, %ecx
  22374. addl %ebx, %r11d
  22375. addl 436(%rsp), %r10d
  22376. movl %r8d, %ebx
  22377. xorl %edx, %ecx
  22378. xorl %r9d, %ebx
  22379. rorxl $25, %r15d, %edx
  22380. xorl %ecx, %edx
  22381. andl %r15d, %ebx
  22382. addl %edx, %r10d
  22383. rorxl $2, %r11d, %edx
  22384. rorxl $13, %r11d, %ecx
  22385. xorl %r9d, %ebx
  22386. xorl %edx, %ecx
  22387. rorxl $22, %r11d, %edx
  22388. addl %ebx, %r10d
  22389. xorl %ecx, %edx
  22390. movl %r12d, %ebx
  22391. leal (%r14,%r10,1), %r14d
  22392. xorl %r11d, %ebx
  22393. andl %ebx, %eax
  22394. addl %edx, %r10d
  22395. xorl %r12d, %eax
  22396. rorxl $6, %r14d, %edx
  22397. rorxl $11, %r14d, %ecx
  22398. leal (%r10,%rax,1), %r10d
  22399. addl 440(%rsp), %r9d
  22400. movl %r15d, %eax
  22401. xorl %edx, %ecx
  22402. xorl %r8d, %eax
  22403. rorxl $25, %r14d, %edx
  22404. xorl %ecx, %edx
  22405. andl %r14d, %eax
  22406. addl %edx, %r9d
  22407. rorxl $2, %r10d, %edx
  22408. rorxl $13, %r10d, %ecx
  22409. xorl %r8d, %eax
  22410. xorl %edx, %ecx
  22411. rorxl $22, %r10d, %edx
  22412. addl %eax, %r9d
  22413. xorl %ecx, %edx
  22414. movl %r11d, %eax
  22415. addl %r9d, %r13d
  22416. xorl %r10d, %eax
  22417. andl %eax, %ebx
  22418. addl %edx, %r9d
  22419. xorl %r11d, %ebx
  22420. rorxl $6, %r13d, %edx
  22421. rorxl $11, %r13d, %ecx
  22422. addl %ebx, %r9d
  22423. addl 444(%rsp), %r8d
  22424. movl %r14d, %ebx
  22425. xorl %edx, %ecx
  22426. xorl %r15d, %ebx
  22427. rorxl $25, %r13d, %edx
  22428. xorl %ecx, %edx
  22429. andl %r13d, %ebx
  22430. addl %edx, %r8d
  22431. rorxl $2, %r9d, %edx
  22432. rorxl $13, %r9d, %ecx
  22433. xorl %r15d, %ebx
  22434. xorl %edx, %ecx
  22435. rorxl $22, %r9d, %edx
  22436. addl %ebx, %r8d
  22437. xorl %ecx, %edx
  22438. movl %r10d, %ebx
  22439. leal (%r12,%r8,1), %r12d
  22440. xorl %r9d, %ebx
  22441. andl %ebx, %eax
  22442. addl %edx, %r8d
  22443. xorl %r10d, %eax
  22444. rorxl $6, %r12d, %edx
  22445. rorxl $11, %r12d, %ecx
  22446. leal (%r8,%rax,1), %r8d
  22447. addl 464(%rsp), %r15d
  22448. movl %r13d, %eax
  22449. xorl %edx, %ecx
  22450. xorl %r14d, %eax
  22451. rorxl $25, %r12d, %edx
  22452. xorl %ecx, %edx
  22453. andl %r12d, %eax
  22454. addl %edx, %r15d
  22455. rorxl $2, %r8d, %edx
  22456. rorxl $13, %r8d, %ecx
  22457. xorl %r14d, %eax
  22458. xorl %edx, %ecx
  22459. rorxl $22, %r8d, %edx
  22460. addl %eax, %r15d
  22461. xorl %ecx, %edx
  22462. movl %r9d, %eax
  22463. addl %r15d, %r11d
  22464. xorl %r8d, %eax
  22465. andl %eax, %ebx
  22466. addl %edx, %r15d
  22467. xorl %r9d, %ebx
  22468. rorxl $6, %r11d, %edx
  22469. rorxl $11, %r11d, %ecx
  22470. addl %ebx, %r15d
  22471. addl 468(%rsp), %r14d
  22472. movl %r12d, %ebx
  22473. xorl %edx, %ecx
  22474. xorl %r13d, %ebx
  22475. rorxl $25, %r11d, %edx
  22476. xorl %ecx, %edx
  22477. andl %r11d, %ebx
  22478. addl %edx, %r14d
  22479. rorxl $2, %r15d, %edx
  22480. rorxl $13, %r15d, %ecx
  22481. xorl %r13d, %ebx
  22482. xorl %edx, %ecx
  22483. rorxl $22, %r15d, %edx
  22484. addl %ebx, %r14d
  22485. xorl %ecx, %edx
  22486. movl %r8d, %ebx
  22487. leal (%r10,%r14,1), %r10d
  22488. xorl %r15d, %ebx
  22489. andl %ebx, %eax
  22490. addl %edx, %r14d
  22491. xorl %r8d, %eax
  22492. rorxl $6, %r10d, %edx
  22493. rorxl $11, %r10d, %ecx
  22494. leal (%r14,%rax,1), %r14d
  22495. addl 472(%rsp), %r13d
  22496. movl %r11d, %eax
  22497. xorl %edx, %ecx
  22498. xorl %r12d, %eax
  22499. rorxl $25, %r10d, %edx
  22500. xorl %ecx, %edx
  22501. andl %r10d, %eax
  22502. addl %edx, %r13d
  22503. rorxl $2, %r14d, %edx
  22504. rorxl $13, %r14d, %ecx
  22505. xorl %r12d, %eax
  22506. xorl %edx, %ecx
  22507. rorxl $22, %r14d, %edx
  22508. addl %eax, %r13d
  22509. xorl %ecx, %edx
  22510. movl %r15d, %eax
  22511. addl %r13d, %r9d
  22512. xorl %r14d, %eax
  22513. andl %eax, %ebx
  22514. addl %edx, %r13d
  22515. xorl %r15d, %ebx
  22516. rorxl $6, %r9d, %edx
  22517. rorxl $11, %r9d, %ecx
  22518. addl %ebx, %r13d
  22519. addl 476(%rsp), %r12d
  22520. movl %r10d, %ebx
  22521. xorl %edx, %ecx
  22522. xorl %r11d, %ebx
  22523. rorxl $25, %r9d, %edx
  22524. xorl %ecx, %edx
  22525. andl %r9d, %ebx
  22526. addl %edx, %r12d
  22527. rorxl $2, %r13d, %edx
  22528. rorxl $13, %r13d, %ecx
  22529. xorl %r11d, %ebx
  22530. xorl %edx, %ecx
  22531. rorxl $22, %r13d, %edx
  22532. addl %ebx, %r12d
  22533. xorl %ecx, %edx
  22534. movl %r14d, %ebx
  22535. leal (%r8,%r12,1), %r8d
  22536. xorl %r13d, %ebx
  22537. andl %ebx, %eax
  22538. addl %edx, %r12d
  22539. xorl %r14d, %eax
  22540. rorxl $6, %r8d, %edx
  22541. rorxl $11, %r8d, %ecx
  22542. leal (%r12,%rax,1), %r12d
  22543. addl 496(%rsp), %r11d
  22544. movl %r9d, %eax
  22545. xorl %edx, %ecx
  22546. xorl %r10d, %eax
  22547. rorxl $25, %r8d, %edx
  22548. xorl %ecx, %edx
  22549. andl %r8d, %eax
  22550. addl %edx, %r11d
  22551. rorxl $2, %r12d, %edx
  22552. rorxl $13, %r12d, %ecx
  22553. xorl %r10d, %eax
  22554. xorl %edx, %ecx
  22555. rorxl $22, %r12d, %edx
  22556. addl %eax, %r11d
  22557. xorl %ecx, %edx
  22558. movl %r13d, %eax
  22559. addl %r11d, %r15d
  22560. xorl %r12d, %eax
  22561. andl %eax, %ebx
  22562. addl %edx, %r11d
  22563. xorl %r13d, %ebx
  22564. rorxl $6, %r15d, %edx
  22565. rorxl $11, %r15d, %ecx
  22566. addl %ebx, %r11d
  22567. addl 500(%rsp), %r10d
  22568. movl %r8d, %ebx
  22569. xorl %edx, %ecx
  22570. xorl %r9d, %ebx
  22571. rorxl $25, %r15d, %edx
  22572. xorl %ecx, %edx
  22573. andl %r15d, %ebx
  22574. addl %edx, %r10d
  22575. rorxl $2, %r11d, %edx
  22576. rorxl $13, %r11d, %ecx
  22577. xorl %r9d, %ebx
  22578. xorl %edx, %ecx
  22579. rorxl $22, %r11d, %edx
  22580. addl %ebx, %r10d
  22581. xorl %ecx, %edx
  22582. movl %r12d, %ebx
  22583. leal (%r14,%r10,1), %r14d
  22584. xorl %r11d, %ebx
  22585. andl %ebx, %eax
  22586. addl %edx, %r10d
  22587. xorl %r12d, %eax
  22588. rorxl $6, %r14d, %edx
  22589. rorxl $11, %r14d, %ecx
  22590. leal (%r10,%rax,1), %r10d
  22591. addl 504(%rsp), %r9d
  22592. movl %r15d, %eax
  22593. xorl %edx, %ecx
  22594. xorl %r8d, %eax
  22595. rorxl $25, %r14d, %edx
  22596. xorl %ecx, %edx
  22597. andl %r14d, %eax
  22598. addl %edx, %r9d
  22599. rorxl $2, %r10d, %edx
  22600. rorxl $13, %r10d, %ecx
  22601. xorl %r8d, %eax
  22602. xorl %edx, %ecx
  22603. rorxl $22, %r10d, %edx
  22604. addl %eax, %r9d
  22605. xorl %ecx, %edx
  22606. movl %r11d, %eax
  22607. addl %r9d, %r13d
  22608. xorl %r10d, %eax
  22609. andl %eax, %ebx
  22610. addl %edx, %r9d
  22611. xorl %r11d, %ebx
  22612. rorxl $6, %r13d, %edx
  22613. rorxl $11, %r13d, %ecx
  22614. addl %ebx, %r9d
  22615. addl 508(%rsp), %r8d
  22616. movl %r14d, %ebx
  22617. xorl %edx, %ecx
  22618. xorl %r15d, %ebx
  22619. rorxl $25, %r13d, %edx
  22620. xorl %ecx, %edx
  22621. andl %r13d, %ebx
  22622. addl %edx, %r8d
  22623. rorxl $2, %r9d, %edx
  22624. rorxl $13, %r9d, %ecx
  22625. xorl %r15d, %ebx
  22626. xorl %edx, %ecx
  22627. rorxl $22, %r9d, %edx
  22628. addl %ebx, %r8d
  22629. xorl %ecx, %edx
  22630. movl %r10d, %ebx
  22631. leal (%r12,%r8,1), %r12d
  22632. xorl %r9d, %ebx
  22633. andl %ebx, %eax
  22634. addl %edx, %r8d
  22635. xorl %r10d, %eax
  22636. addl %eax, %r8d
  22637. addq $0x80, %rbp
  22638. addl (%rdi), %r8d
  22639. addl 4(%rdi), %r9d
  22640. addl 8(%rdi), %r10d
  22641. addl 12(%rdi), %r11d
  22642. addl 16(%rdi), %r12d
  22643. addl 20(%rdi), %r13d
  22644. addl 24(%rdi), %r14d
  22645. addl 28(%rdi), %r15d
  22646. subl $0x80, %esi
  22647. movl %r8d, (%rdi)
  22648. movl %r9d, 4(%rdi)
  22649. movl %r10d, 8(%rdi)
  22650. movl %r11d, 12(%rdi)
  22651. movl %r12d, 16(%rdi)
  22652. movl %r13d, 20(%rdi)
  22653. movl %r14d, 24(%rdi)
  22654. movl %r15d, 28(%rdi)
  22655. jnz L_sha256_len_avx2_rorx_start
  22656. L_sha256_len_avx2_rorx_done:
  22657. xorq %rax, %rax
  22658. vzeroupper
  22659. addq $0x200, %rsp
  22660. popq %rbp
  22661. popq %r15
  22662. popq %r14
  22663. popq %r13
  22664. popq %r12
  22665. popq %rbx
  22666. repz retq
  22667. #ifndef __APPLE__
  22668. .size Transform_Sha256_AVX2_RORX_Len,.-Transform_Sha256_AVX2_RORX_Len
  22669. #endif /* __APPLE__ */
  22670. #endif /* HAVE_INTEL_AVX2 */
  22671. #endif /* WOLFSSL_X86_64_BUILD */
  22672. #if defined(__linux__) && defined(__ELF__)
  22673. .section .note.GNU-stack,"",%progbits
  22674. #endif