2
0

aes_gcm_asm.S 513 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854
  1. /* aes_gcm_asm.S */
  2. /*
  3. * Copyright (C) 2006-2024 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. #ifndef __APPLE__
  47. .data
  48. #else
  49. .section __DATA,__data
  50. #endif /* __APPLE__ */
  51. #ifndef __APPLE__
  52. .align 16
  53. #else
  54. .p2align 4
  55. #endif /* __APPLE__ */
  56. L_aes_gcm_one:
  57. .quad 0x0, 0x1
  58. #ifndef __APPLE__
  59. .data
  60. #else
  61. .section __DATA,__data
  62. #endif /* __APPLE__ */
  63. #ifndef __APPLE__
  64. .align 16
  65. #else
  66. .p2align 4
  67. #endif /* __APPLE__ */
  68. L_aes_gcm_two:
  69. .quad 0x0, 0x2
  70. #ifndef __APPLE__
  71. .data
  72. #else
  73. .section __DATA,__data
  74. #endif /* __APPLE__ */
  75. #ifndef __APPLE__
  76. .align 16
  77. #else
  78. .p2align 4
  79. #endif /* __APPLE__ */
  80. L_aes_gcm_three:
  81. .quad 0x0, 0x3
  82. #ifndef __APPLE__
  83. .data
  84. #else
  85. .section __DATA,__data
  86. #endif /* __APPLE__ */
  87. #ifndef __APPLE__
  88. .align 16
  89. #else
  90. .p2align 4
  91. #endif /* __APPLE__ */
  92. L_aes_gcm_four:
  93. .quad 0x0, 0x4
  94. #ifndef __APPLE__
  95. .data
  96. #else
  97. .section __DATA,__data
  98. #endif /* __APPLE__ */
  99. #ifndef __APPLE__
  100. .align 16
  101. #else
  102. .p2align 4
  103. #endif /* __APPLE__ */
  104. L_aes_gcm_five:
  105. .quad 0x0, 0x5
  106. #ifndef __APPLE__
  107. .data
  108. #else
  109. .section __DATA,__data
  110. #endif /* __APPLE__ */
  111. #ifndef __APPLE__
  112. .align 16
  113. #else
  114. .p2align 4
  115. #endif /* __APPLE__ */
  116. L_aes_gcm_six:
  117. .quad 0x0, 0x6
  118. #ifndef __APPLE__
  119. .data
  120. #else
  121. .section __DATA,__data
  122. #endif /* __APPLE__ */
  123. #ifndef __APPLE__
  124. .align 16
  125. #else
  126. .p2align 4
  127. #endif /* __APPLE__ */
  128. L_aes_gcm_seven:
  129. .quad 0x0, 0x7
  130. #ifndef __APPLE__
  131. .data
  132. #else
  133. .section __DATA,__data
  134. #endif /* __APPLE__ */
  135. #ifndef __APPLE__
  136. .align 16
  137. #else
  138. .p2align 4
  139. #endif /* __APPLE__ */
  140. L_aes_gcm_eight:
  141. .quad 0x0, 0x8
  142. #ifndef __APPLE__
  143. .data
  144. #else
  145. .section __DATA,__data
  146. #endif /* __APPLE__ */
  147. #ifndef __APPLE__
  148. .align 16
  149. #else
  150. .p2align 4
  151. #endif /* __APPLE__ */
  152. L_aes_gcm_bswap_epi64:
  153. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  154. #ifndef __APPLE__
  155. .data
  156. #else
  157. .section __DATA,__data
  158. #endif /* __APPLE__ */
  159. #ifndef __APPLE__
  160. .align 16
  161. #else
  162. .p2align 4
  163. #endif /* __APPLE__ */
  164. L_aes_gcm_bswap_mask:
  165. .quad 0x8090a0b0c0d0e0f, 0x1020304050607
  166. #ifndef __APPLE__
  167. .data
  168. #else
  169. .section __DATA,__data
  170. #endif /* __APPLE__ */
  171. #ifndef __APPLE__
  172. .align 16
  173. #else
  174. .p2align 4
  175. #endif /* __APPLE__ */
  176. L_aes_gcm_mod2_128:
  177. .quad 0x1, 0xc200000000000000
  178. #ifndef __APPLE__
  179. .text
  180. .globl AES_GCM_encrypt_aesni
  181. .type AES_GCM_encrypt_aesni,@function
  182. .align 16
  183. AES_GCM_encrypt_aesni:
  184. #else
  185. .section __TEXT,__text
  186. .globl _AES_GCM_encrypt_aesni
  187. .p2align 4
  188. _AES_GCM_encrypt_aesni:
  189. #endif /* __APPLE__ */
  190. pushq %r13
  191. pushq %r12
  192. pushq %rbx
  193. pushq %r14
  194. pushq %r15
  195. movq %rdx, %r12
  196. movq %rcx, %rax
  197. movl 48(%rsp), %r11d
  198. movl 56(%rsp), %ebx
  199. movl 64(%rsp), %r14d
  200. movq 72(%rsp), %r15
  201. movl 80(%rsp), %r10d
  202. subq $0xa0, %rsp
  203. pxor %xmm4, %xmm4
  204. pxor %xmm6, %xmm6
  205. cmpl $12, %ebx
  206. movl %ebx, %edx
  207. jne L_AES_GCM_encrypt_aesni_iv_not_12
  208. # # Calculate values when IV is 12 bytes
  209. # Set counter based on IV
  210. movl $0x1000000, %ecx
  211. pinsrq $0x00, (%rax), %xmm4
  212. pinsrd $2, 8(%rax), %xmm4
  213. pinsrd $3, %ecx, %xmm4
  214. # H = Encrypt X(=0) and T = Encrypt counter
  215. movdqa %xmm4, %xmm1
  216. movdqa (%r15), %xmm5
  217. pxor %xmm5, %xmm1
  218. movdqa 16(%r15), %xmm7
  219. aesenc %xmm7, %xmm5
  220. aesenc %xmm7, %xmm1
  221. movdqa 32(%r15), %xmm7
  222. aesenc %xmm7, %xmm5
  223. aesenc %xmm7, %xmm1
  224. movdqa 48(%r15), %xmm7
  225. aesenc %xmm7, %xmm5
  226. aesenc %xmm7, %xmm1
  227. movdqa 64(%r15), %xmm7
  228. aesenc %xmm7, %xmm5
  229. aesenc %xmm7, %xmm1
  230. movdqa 80(%r15), %xmm7
  231. aesenc %xmm7, %xmm5
  232. aesenc %xmm7, %xmm1
  233. movdqa 96(%r15), %xmm7
  234. aesenc %xmm7, %xmm5
  235. aesenc %xmm7, %xmm1
  236. movdqa 112(%r15), %xmm7
  237. aesenc %xmm7, %xmm5
  238. aesenc %xmm7, %xmm1
  239. movdqa 128(%r15), %xmm7
  240. aesenc %xmm7, %xmm5
  241. aesenc %xmm7, %xmm1
  242. movdqa 144(%r15), %xmm7
  243. aesenc %xmm7, %xmm5
  244. aesenc %xmm7, %xmm1
  245. cmpl $11, %r10d
  246. movdqa 160(%r15), %xmm7
  247. jl L_AES_GCM_encrypt_aesni_calc_iv_12_last
  248. aesenc %xmm7, %xmm5
  249. aesenc %xmm7, %xmm1
  250. movdqa 176(%r15), %xmm7
  251. aesenc %xmm7, %xmm5
  252. aesenc %xmm7, %xmm1
  253. cmpl $13, %r10d
  254. movdqa 192(%r15), %xmm7
  255. jl L_AES_GCM_encrypt_aesni_calc_iv_12_last
  256. aesenc %xmm7, %xmm5
  257. aesenc %xmm7, %xmm1
  258. movdqa 208(%r15), %xmm7
  259. aesenc %xmm7, %xmm5
  260. aesenc %xmm7, %xmm1
  261. movdqa 224(%r15), %xmm7
  262. L_AES_GCM_encrypt_aesni_calc_iv_12_last:
  263. aesenclast %xmm7, %xmm5
  264. aesenclast %xmm7, %xmm1
  265. pshufb L_aes_gcm_bswap_mask(%rip), %xmm5
  266. movdqu %xmm1, 144(%rsp)
  267. jmp L_AES_GCM_encrypt_aesni_iv_done
  268. L_AES_GCM_encrypt_aesni_iv_not_12:
  269. # Calculate values when IV is not 12 bytes
  270. # H = Encrypt X(=0)
  271. movdqa (%r15), %xmm5
  272. aesenc 16(%r15), %xmm5
  273. aesenc 32(%r15), %xmm5
  274. aesenc 48(%r15), %xmm5
  275. aesenc 64(%r15), %xmm5
  276. aesenc 80(%r15), %xmm5
  277. aesenc 96(%r15), %xmm5
  278. aesenc 112(%r15), %xmm5
  279. aesenc 128(%r15), %xmm5
  280. aesenc 144(%r15), %xmm5
  281. cmpl $11, %r10d
  282. movdqa 160(%r15), %xmm9
  283. jl L_AES_GCM_encrypt_aesni_calc_iv_1_aesenc_avx_last
  284. aesenc %xmm9, %xmm5
  285. aesenc 176(%r15), %xmm5
  286. cmpl $13, %r10d
  287. movdqa 192(%r15), %xmm9
  288. jl L_AES_GCM_encrypt_aesni_calc_iv_1_aesenc_avx_last
  289. aesenc %xmm9, %xmm5
  290. aesenc 208(%r15), %xmm5
  291. movdqa 224(%r15), %xmm9
  292. L_AES_GCM_encrypt_aesni_calc_iv_1_aesenc_avx_last:
  293. aesenclast %xmm9, %xmm5
  294. pshufb L_aes_gcm_bswap_mask(%rip), %xmm5
  295. # Calc counter
  296. # Initialization vector
  297. cmpl $0x00, %edx
  298. movq $0x00, %rcx
  299. je L_AES_GCM_encrypt_aesni_calc_iv_done
  300. cmpl $16, %edx
  301. jl L_AES_GCM_encrypt_aesni_calc_iv_lt16
  302. andl $0xfffffff0, %edx
  303. L_AES_GCM_encrypt_aesni_calc_iv_16_loop:
  304. movdqu (%rax,%rcx,1), %xmm8
  305. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  306. pxor %xmm8, %xmm4
  307. pshufd $0x4e, %xmm4, %xmm1
  308. pshufd $0x4e, %xmm5, %xmm2
  309. movdqa %xmm5, %xmm3
  310. movdqa %xmm5, %xmm0
  311. pclmulqdq $0x11, %xmm4, %xmm3
  312. pclmulqdq $0x00, %xmm4, %xmm0
  313. pxor %xmm4, %xmm1
  314. pxor %xmm5, %xmm2
  315. pclmulqdq $0x00, %xmm2, %xmm1
  316. pxor %xmm0, %xmm1
  317. pxor %xmm3, %xmm1
  318. movdqa %xmm1, %xmm2
  319. movdqa %xmm0, %xmm7
  320. movdqa %xmm3, %xmm4
  321. pslldq $8, %xmm2
  322. psrldq $8, %xmm1
  323. pxor %xmm2, %xmm7
  324. pxor %xmm1, %xmm4
  325. movdqa %xmm7, %xmm0
  326. movdqa %xmm4, %xmm1
  327. psrld $31, %xmm0
  328. psrld $31, %xmm1
  329. pslld $0x01, %xmm7
  330. pslld $0x01, %xmm4
  331. movdqa %xmm0, %xmm2
  332. pslldq $4, %xmm0
  333. psrldq $12, %xmm2
  334. pslldq $4, %xmm1
  335. por %xmm2, %xmm4
  336. por %xmm0, %xmm7
  337. por %xmm1, %xmm4
  338. movdqa %xmm7, %xmm0
  339. movdqa %xmm7, %xmm1
  340. movdqa %xmm7, %xmm2
  341. pslld $31, %xmm0
  342. pslld $30, %xmm1
  343. pslld $25, %xmm2
  344. pxor %xmm1, %xmm0
  345. pxor %xmm2, %xmm0
  346. movdqa %xmm0, %xmm1
  347. psrldq $4, %xmm1
  348. pslldq $12, %xmm0
  349. pxor %xmm0, %xmm7
  350. movdqa %xmm7, %xmm2
  351. movdqa %xmm7, %xmm3
  352. movdqa %xmm7, %xmm0
  353. psrld $0x01, %xmm2
  354. psrld $2, %xmm3
  355. psrld $7, %xmm0
  356. pxor %xmm3, %xmm2
  357. pxor %xmm0, %xmm2
  358. pxor %xmm1, %xmm2
  359. pxor %xmm7, %xmm2
  360. pxor %xmm2, %xmm4
  361. addl $16, %ecx
  362. cmpl %edx, %ecx
  363. jl L_AES_GCM_encrypt_aesni_calc_iv_16_loop
  364. movl %ebx, %edx
  365. cmpl %edx, %ecx
  366. je L_AES_GCM_encrypt_aesni_calc_iv_done
  367. L_AES_GCM_encrypt_aesni_calc_iv_lt16:
  368. subq $16, %rsp
  369. pxor %xmm8, %xmm8
  370. xorl %ebx, %ebx
  371. movdqu %xmm8, (%rsp)
  372. L_AES_GCM_encrypt_aesni_calc_iv_loop:
  373. movzbl (%rax,%rcx,1), %r13d
  374. movb %r13b, (%rsp,%rbx,1)
  375. incl %ecx
  376. incl %ebx
  377. cmpl %edx, %ecx
  378. jl L_AES_GCM_encrypt_aesni_calc_iv_loop
  379. movdqu (%rsp), %xmm8
  380. addq $16, %rsp
  381. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  382. pxor %xmm8, %xmm4
  383. pshufd $0x4e, %xmm4, %xmm1
  384. pshufd $0x4e, %xmm5, %xmm2
  385. movdqa %xmm5, %xmm3
  386. movdqa %xmm5, %xmm0
  387. pclmulqdq $0x11, %xmm4, %xmm3
  388. pclmulqdq $0x00, %xmm4, %xmm0
  389. pxor %xmm4, %xmm1
  390. pxor %xmm5, %xmm2
  391. pclmulqdq $0x00, %xmm2, %xmm1
  392. pxor %xmm0, %xmm1
  393. pxor %xmm3, %xmm1
  394. movdqa %xmm1, %xmm2
  395. movdqa %xmm0, %xmm7
  396. movdqa %xmm3, %xmm4
  397. pslldq $8, %xmm2
  398. psrldq $8, %xmm1
  399. pxor %xmm2, %xmm7
  400. pxor %xmm1, %xmm4
  401. movdqa %xmm7, %xmm0
  402. movdqa %xmm4, %xmm1
  403. psrld $31, %xmm0
  404. psrld $31, %xmm1
  405. pslld $0x01, %xmm7
  406. pslld $0x01, %xmm4
  407. movdqa %xmm0, %xmm2
  408. pslldq $4, %xmm0
  409. psrldq $12, %xmm2
  410. pslldq $4, %xmm1
  411. por %xmm2, %xmm4
  412. por %xmm0, %xmm7
  413. por %xmm1, %xmm4
  414. movdqa %xmm7, %xmm0
  415. movdqa %xmm7, %xmm1
  416. movdqa %xmm7, %xmm2
  417. pslld $31, %xmm0
  418. pslld $30, %xmm1
  419. pslld $25, %xmm2
  420. pxor %xmm1, %xmm0
  421. pxor %xmm2, %xmm0
  422. movdqa %xmm0, %xmm1
  423. psrldq $4, %xmm1
  424. pslldq $12, %xmm0
  425. pxor %xmm0, %xmm7
  426. movdqa %xmm7, %xmm2
  427. movdqa %xmm7, %xmm3
  428. movdqa %xmm7, %xmm0
  429. psrld $0x01, %xmm2
  430. psrld $2, %xmm3
  431. psrld $7, %xmm0
  432. pxor %xmm3, %xmm2
  433. pxor %xmm0, %xmm2
  434. pxor %xmm1, %xmm2
  435. pxor %xmm7, %xmm2
  436. pxor %xmm2, %xmm4
  437. L_AES_GCM_encrypt_aesni_calc_iv_done:
  438. # T = Encrypt counter
  439. pxor %xmm0, %xmm0
  440. shll $3, %edx
  441. pinsrq $0x00, %rdx, %xmm0
  442. pxor %xmm0, %xmm4
  443. pshufd $0x4e, %xmm4, %xmm1
  444. pshufd $0x4e, %xmm5, %xmm2
  445. movdqa %xmm5, %xmm3
  446. movdqa %xmm5, %xmm0
  447. pclmulqdq $0x11, %xmm4, %xmm3
  448. pclmulqdq $0x00, %xmm4, %xmm0
  449. pxor %xmm4, %xmm1
  450. pxor %xmm5, %xmm2
  451. pclmulqdq $0x00, %xmm2, %xmm1
  452. pxor %xmm0, %xmm1
  453. pxor %xmm3, %xmm1
  454. movdqa %xmm1, %xmm2
  455. movdqa %xmm0, %xmm7
  456. movdqa %xmm3, %xmm4
  457. pslldq $8, %xmm2
  458. psrldq $8, %xmm1
  459. pxor %xmm2, %xmm7
  460. pxor %xmm1, %xmm4
  461. movdqa %xmm7, %xmm0
  462. movdqa %xmm4, %xmm1
  463. psrld $31, %xmm0
  464. psrld $31, %xmm1
  465. pslld $0x01, %xmm7
  466. pslld $0x01, %xmm4
  467. movdqa %xmm0, %xmm2
  468. pslldq $4, %xmm0
  469. psrldq $12, %xmm2
  470. pslldq $4, %xmm1
  471. por %xmm2, %xmm4
  472. por %xmm0, %xmm7
  473. por %xmm1, %xmm4
  474. movdqa %xmm7, %xmm0
  475. movdqa %xmm7, %xmm1
  476. movdqa %xmm7, %xmm2
  477. pslld $31, %xmm0
  478. pslld $30, %xmm1
  479. pslld $25, %xmm2
  480. pxor %xmm1, %xmm0
  481. pxor %xmm2, %xmm0
  482. movdqa %xmm0, %xmm1
  483. psrldq $4, %xmm1
  484. pslldq $12, %xmm0
  485. pxor %xmm0, %xmm7
  486. movdqa %xmm7, %xmm2
  487. movdqa %xmm7, %xmm3
  488. movdqa %xmm7, %xmm0
  489. psrld $0x01, %xmm2
  490. psrld $2, %xmm3
  491. psrld $7, %xmm0
  492. pxor %xmm3, %xmm2
  493. pxor %xmm0, %xmm2
  494. pxor %xmm1, %xmm2
  495. pxor %xmm7, %xmm2
  496. pxor %xmm2, %xmm4
  497. pshufb L_aes_gcm_bswap_mask(%rip), %xmm4
  498. # Encrypt counter
  499. movdqa (%r15), %xmm8
  500. pxor %xmm4, %xmm8
  501. aesenc 16(%r15), %xmm8
  502. aesenc 32(%r15), %xmm8
  503. aesenc 48(%r15), %xmm8
  504. aesenc 64(%r15), %xmm8
  505. aesenc 80(%r15), %xmm8
  506. aesenc 96(%r15), %xmm8
  507. aesenc 112(%r15), %xmm8
  508. aesenc 128(%r15), %xmm8
  509. aesenc 144(%r15), %xmm8
  510. cmpl $11, %r10d
  511. movdqa 160(%r15), %xmm9
  512. jl L_AES_GCM_encrypt_aesni_calc_iv_2_aesenc_avx_last
  513. aesenc %xmm9, %xmm8
  514. aesenc 176(%r15), %xmm8
  515. cmpl $13, %r10d
  516. movdqa 192(%r15), %xmm9
  517. jl L_AES_GCM_encrypt_aesni_calc_iv_2_aesenc_avx_last
  518. aesenc %xmm9, %xmm8
  519. aesenc 208(%r15), %xmm8
  520. movdqa 224(%r15), %xmm9
  521. L_AES_GCM_encrypt_aesni_calc_iv_2_aesenc_avx_last:
  522. aesenclast %xmm9, %xmm8
  523. movdqu %xmm8, 144(%rsp)
  524. L_AES_GCM_encrypt_aesni_iv_done:
  525. # Additional authentication data
  526. movl %r11d, %edx
  527. cmpl $0x00, %edx
  528. je L_AES_GCM_encrypt_aesni_calc_aad_done
  529. xorl %ecx, %ecx
  530. cmpl $16, %edx
  531. jl L_AES_GCM_encrypt_aesni_calc_aad_lt16
  532. andl $0xfffffff0, %edx
  533. L_AES_GCM_encrypt_aesni_calc_aad_16_loop:
  534. movdqu (%r12,%rcx,1), %xmm8
  535. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  536. pxor %xmm8, %xmm6
  537. pshufd $0x4e, %xmm6, %xmm1
  538. pshufd $0x4e, %xmm5, %xmm2
  539. movdqa %xmm5, %xmm3
  540. movdqa %xmm5, %xmm0
  541. pclmulqdq $0x11, %xmm6, %xmm3
  542. pclmulqdq $0x00, %xmm6, %xmm0
  543. pxor %xmm6, %xmm1
  544. pxor %xmm5, %xmm2
  545. pclmulqdq $0x00, %xmm2, %xmm1
  546. pxor %xmm0, %xmm1
  547. pxor %xmm3, %xmm1
  548. movdqa %xmm1, %xmm2
  549. movdqa %xmm0, %xmm7
  550. movdqa %xmm3, %xmm6
  551. pslldq $8, %xmm2
  552. psrldq $8, %xmm1
  553. pxor %xmm2, %xmm7
  554. pxor %xmm1, %xmm6
  555. movdqa %xmm7, %xmm0
  556. movdqa %xmm6, %xmm1
  557. psrld $31, %xmm0
  558. psrld $31, %xmm1
  559. pslld $0x01, %xmm7
  560. pslld $0x01, %xmm6
  561. movdqa %xmm0, %xmm2
  562. pslldq $4, %xmm0
  563. psrldq $12, %xmm2
  564. pslldq $4, %xmm1
  565. por %xmm2, %xmm6
  566. por %xmm0, %xmm7
  567. por %xmm1, %xmm6
  568. movdqa %xmm7, %xmm0
  569. movdqa %xmm7, %xmm1
  570. movdqa %xmm7, %xmm2
  571. pslld $31, %xmm0
  572. pslld $30, %xmm1
  573. pslld $25, %xmm2
  574. pxor %xmm1, %xmm0
  575. pxor %xmm2, %xmm0
  576. movdqa %xmm0, %xmm1
  577. psrldq $4, %xmm1
  578. pslldq $12, %xmm0
  579. pxor %xmm0, %xmm7
  580. movdqa %xmm7, %xmm2
  581. movdqa %xmm7, %xmm3
  582. movdqa %xmm7, %xmm0
  583. psrld $0x01, %xmm2
  584. psrld $2, %xmm3
  585. psrld $7, %xmm0
  586. pxor %xmm3, %xmm2
  587. pxor %xmm0, %xmm2
  588. pxor %xmm1, %xmm2
  589. pxor %xmm7, %xmm2
  590. pxor %xmm2, %xmm6
  591. addl $16, %ecx
  592. cmpl %edx, %ecx
  593. jl L_AES_GCM_encrypt_aesni_calc_aad_16_loop
  594. movl %r11d, %edx
  595. cmpl %edx, %ecx
  596. je L_AES_GCM_encrypt_aesni_calc_aad_done
  597. L_AES_GCM_encrypt_aesni_calc_aad_lt16:
  598. subq $16, %rsp
  599. pxor %xmm8, %xmm8
  600. xorl %ebx, %ebx
  601. movdqu %xmm8, (%rsp)
  602. L_AES_GCM_encrypt_aesni_calc_aad_loop:
  603. movzbl (%r12,%rcx,1), %r13d
  604. movb %r13b, (%rsp,%rbx,1)
  605. incl %ecx
  606. incl %ebx
  607. cmpl %edx, %ecx
  608. jl L_AES_GCM_encrypt_aesni_calc_aad_loop
  609. movdqu (%rsp), %xmm8
  610. addq $16, %rsp
  611. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  612. pxor %xmm8, %xmm6
  613. pshufd $0x4e, %xmm6, %xmm1
  614. pshufd $0x4e, %xmm5, %xmm2
  615. movdqa %xmm5, %xmm3
  616. movdqa %xmm5, %xmm0
  617. pclmulqdq $0x11, %xmm6, %xmm3
  618. pclmulqdq $0x00, %xmm6, %xmm0
  619. pxor %xmm6, %xmm1
  620. pxor %xmm5, %xmm2
  621. pclmulqdq $0x00, %xmm2, %xmm1
  622. pxor %xmm0, %xmm1
  623. pxor %xmm3, %xmm1
  624. movdqa %xmm1, %xmm2
  625. movdqa %xmm0, %xmm7
  626. movdqa %xmm3, %xmm6
  627. pslldq $8, %xmm2
  628. psrldq $8, %xmm1
  629. pxor %xmm2, %xmm7
  630. pxor %xmm1, %xmm6
  631. movdqa %xmm7, %xmm0
  632. movdqa %xmm6, %xmm1
  633. psrld $31, %xmm0
  634. psrld $31, %xmm1
  635. pslld $0x01, %xmm7
  636. pslld $0x01, %xmm6
  637. movdqa %xmm0, %xmm2
  638. pslldq $4, %xmm0
  639. psrldq $12, %xmm2
  640. pslldq $4, %xmm1
  641. por %xmm2, %xmm6
  642. por %xmm0, %xmm7
  643. por %xmm1, %xmm6
  644. movdqa %xmm7, %xmm0
  645. movdqa %xmm7, %xmm1
  646. movdqa %xmm7, %xmm2
  647. pslld $31, %xmm0
  648. pslld $30, %xmm1
  649. pslld $25, %xmm2
  650. pxor %xmm1, %xmm0
  651. pxor %xmm2, %xmm0
  652. movdqa %xmm0, %xmm1
  653. psrldq $4, %xmm1
  654. pslldq $12, %xmm0
  655. pxor %xmm0, %xmm7
  656. movdqa %xmm7, %xmm2
  657. movdqa %xmm7, %xmm3
  658. movdqa %xmm7, %xmm0
  659. psrld $0x01, %xmm2
  660. psrld $2, %xmm3
  661. psrld $7, %xmm0
  662. pxor %xmm3, %xmm2
  663. pxor %xmm0, %xmm2
  664. pxor %xmm1, %xmm2
  665. pxor %xmm7, %xmm2
  666. pxor %xmm2, %xmm6
  667. L_AES_GCM_encrypt_aesni_calc_aad_done:
  668. # Calculate counter and H
  669. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm4
  670. movdqa %xmm5, %xmm9
  671. paddd L_aes_gcm_one(%rip), %xmm4
  672. movdqa %xmm5, %xmm8
  673. movdqu %xmm4, 128(%rsp)
  674. psrlq $63, %xmm9
  675. psllq $0x01, %xmm8
  676. pslldq $8, %xmm9
  677. por %xmm9, %xmm8
  678. pshufd $0xff, %xmm5, %xmm5
  679. psrad $31, %xmm5
  680. pand L_aes_gcm_mod2_128(%rip), %xmm5
  681. pxor %xmm8, %xmm5
  682. xorq %rbx, %rbx
  683. cmpl $0x80, %r9d
  684. movl %r9d, %r13d
  685. jl L_AES_GCM_encrypt_aesni_done_128
  686. andl $0xffffff80, %r13d
  687. movdqa %xmm6, %xmm2
  688. # H ^ 1
  689. movdqu %xmm5, (%rsp)
  690. # H ^ 2
  691. pshufd $0x4e, %xmm5, %xmm9
  692. pshufd $0x4e, %xmm5, %xmm10
  693. movdqa %xmm5, %xmm11
  694. movdqa %xmm5, %xmm8
  695. pclmulqdq $0x11, %xmm5, %xmm11
  696. pclmulqdq $0x00, %xmm5, %xmm8
  697. pxor %xmm5, %xmm9
  698. pxor %xmm5, %xmm10
  699. pclmulqdq $0x00, %xmm10, %xmm9
  700. pxor %xmm8, %xmm9
  701. pxor %xmm11, %xmm9
  702. movdqa %xmm9, %xmm10
  703. movdqa %xmm11, %xmm0
  704. pslldq $8, %xmm10
  705. psrldq $8, %xmm9
  706. pxor %xmm10, %xmm8
  707. pxor %xmm9, %xmm0
  708. movdqa %xmm8, %xmm12
  709. movdqa %xmm8, %xmm13
  710. movdqa %xmm8, %xmm14
  711. pslld $31, %xmm12
  712. pslld $30, %xmm13
  713. pslld $25, %xmm14
  714. pxor %xmm13, %xmm12
  715. pxor %xmm14, %xmm12
  716. movdqa %xmm12, %xmm13
  717. psrldq $4, %xmm13
  718. pslldq $12, %xmm12
  719. pxor %xmm12, %xmm8
  720. movdqa %xmm8, %xmm14
  721. movdqa %xmm8, %xmm10
  722. movdqa %xmm8, %xmm9
  723. psrld $0x01, %xmm14
  724. psrld $2, %xmm10
  725. psrld $7, %xmm9
  726. pxor %xmm10, %xmm14
  727. pxor %xmm9, %xmm14
  728. pxor %xmm13, %xmm14
  729. pxor %xmm8, %xmm14
  730. pxor %xmm14, %xmm0
  731. movdqu %xmm0, 16(%rsp)
  732. # H ^ 3
  733. pshufd $0x4e, %xmm5, %xmm9
  734. pshufd $0x4e, %xmm0, %xmm10
  735. movdqa %xmm0, %xmm11
  736. movdqa %xmm0, %xmm8
  737. pclmulqdq $0x11, %xmm5, %xmm11
  738. pclmulqdq $0x00, %xmm5, %xmm8
  739. pxor %xmm5, %xmm9
  740. pxor %xmm0, %xmm10
  741. pclmulqdq $0x00, %xmm10, %xmm9
  742. pxor %xmm8, %xmm9
  743. pxor %xmm11, %xmm9
  744. movdqa %xmm9, %xmm10
  745. movdqa %xmm11, %xmm1
  746. pslldq $8, %xmm10
  747. psrldq $8, %xmm9
  748. pxor %xmm10, %xmm8
  749. pxor %xmm9, %xmm1
  750. movdqa %xmm8, %xmm12
  751. movdqa %xmm8, %xmm13
  752. movdqa %xmm8, %xmm14
  753. pslld $31, %xmm12
  754. pslld $30, %xmm13
  755. pslld $25, %xmm14
  756. pxor %xmm13, %xmm12
  757. pxor %xmm14, %xmm12
  758. movdqa %xmm12, %xmm13
  759. psrldq $4, %xmm13
  760. pslldq $12, %xmm12
  761. pxor %xmm12, %xmm8
  762. movdqa %xmm8, %xmm14
  763. movdqa %xmm8, %xmm10
  764. movdqa %xmm8, %xmm9
  765. psrld $0x01, %xmm14
  766. psrld $2, %xmm10
  767. psrld $7, %xmm9
  768. pxor %xmm10, %xmm14
  769. pxor %xmm9, %xmm14
  770. pxor %xmm13, %xmm14
  771. pxor %xmm8, %xmm14
  772. pxor %xmm14, %xmm1
  773. movdqu %xmm1, 32(%rsp)
  774. # H ^ 4
  775. pshufd $0x4e, %xmm0, %xmm9
  776. pshufd $0x4e, %xmm0, %xmm10
  777. movdqa %xmm0, %xmm11
  778. movdqa %xmm0, %xmm8
  779. pclmulqdq $0x11, %xmm0, %xmm11
  780. pclmulqdq $0x00, %xmm0, %xmm8
  781. pxor %xmm0, %xmm9
  782. pxor %xmm0, %xmm10
  783. pclmulqdq $0x00, %xmm10, %xmm9
  784. pxor %xmm8, %xmm9
  785. pxor %xmm11, %xmm9
  786. movdqa %xmm9, %xmm10
  787. movdqa %xmm11, %xmm3
  788. pslldq $8, %xmm10
  789. psrldq $8, %xmm9
  790. pxor %xmm10, %xmm8
  791. pxor %xmm9, %xmm3
  792. movdqa %xmm8, %xmm12
  793. movdqa %xmm8, %xmm13
  794. movdqa %xmm8, %xmm14
  795. pslld $31, %xmm12
  796. pslld $30, %xmm13
  797. pslld $25, %xmm14
  798. pxor %xmm13, %xmm12
  799. pxor %xmm14, %xmm12
  800. movdqa %xmm12, %xmm13
  801. psrldq $4, %xmm13
  802. pslldq $12, %xmm12
  803. pxor %xmm12, %xmm8
  804. movdqa %xmm8, %xmm14
  805. movdqa %xmm8, %xmm10
  806. movdqa %xmm8, %xmm9
  807. psrld $0x01, %xmm14
  808. psrld $2, %xmm10
  809. psrld $7, %xmm9
  810. pxor %xmm10, %xmm14
  811. pxor %xmm9, %xmm14
  812. pxor %xmm13, %xmm14
  813. pxor %xmm8, %xmm14
  814. pxor %xmm14, %xmm3
  815. movdqu %xmm3, 48(%rsp)
  816. # H ^ 5
  817. pshufd $0x4e, %xmm0, %xmm9
  818. pshufd $0x4e, %xmm1, %xmm10
  819. movdqa %xmm1, %xmm11
  820. movdqa %xmm1, %xmm8
  821. pclmulqdq $0x11, %xmm0, %xmm11
  822. pclmulqdq $0x00, %xmm0, %xmm8
  823. pxor %xmm0, %xmm9
  824. pxor %xmm1, %xmm10
  825. pclmulqdq $0x00, %xmm10, %xmm9
  826. pxor %xmm8, %xmm9
  827. pxor %xmm11, %xmm9
  828. movdqa %xmm9, %xmm10
  829. movdqa %xmm11, %xmm7
  830. pslldq $8, %xmm10
  831. psrldq $8, %xmm9
  832. pxor %xmm10, %xmm8
  833. pxor %xmm9, %xmm7
  834. movdqa %xmm8, %xmm12
  835. movdqa %xmm8, %xmm13
  836. movdqa %xmm8, %xmm14
  837. pslld $31, %xmm12
  838. pslld $30, %xmm13
  839. pslld $25, %xmm14
  840. pxor %xmm13, %xmm12
  841. pxor %xmm14, %xmm12
  842. movdqa %xmm12, %xmm13
  843. psrldq $4, %xmm13
  844. pslldq $12, %xmm12
  845. pxor %xmm12, %xmm8
  846. movdqa %xmm8, %xmm14
  847. movdqa %xmm8, %xmm10
  848. movdqa %xmm8, %xmm9
  849. psrld $0x01, %xmm14
  850. psrld $2, %xmm10
  851. psrld $7, %xmm9
  852. pxor %xmm10, %xmm14
  853. pxor %xmm9, %xmm14
  854. pxor %xmm13, %xmm14
  855. pxor %xmm8, %xmm14
  856. pxor %xmm14, %xmm7
  857. movdqu %xmm7, 64(%rsp)
  858. # H ^ 6
  859. pshufd $0x4e, %xmm1, %xmm9
  860. pshufd $0x4e, %xmm1, %xmm10
  861. movdqa %xmm1, %xmm11
  862. movdqa %xmm1, %xmm8
  863. pclmulqdq $0x11, %xmm1, %xmm11
  864. pclmulqdq $0x00, %xmm1, %xmm8
  865. pxor %xmm1, %xmm9
  866. pxor %xmm1, %xmm10
  867. pclmulqdq $0x00, %xmm10, %xmm9
  868. pxor %xmm8, %xmm9
  869. pxor %xmm11, %xmm9
  870. movdqa %xmm9, %xmm10
  871. movdqa %xmm11, %xmm7
  872. pslldq $8, %xmm10
  873. psrldq $8, %xmm9
  874. pxor %xmm10, %xmm8
  875. pxor %xmm9, %xmm7
  876. movdqa %xmm8, %xmm12
  877. movdqa %xmm8, %xmm13
  878. movdqa %xmm8, %xmm14
  879. pslld $31, %xmm12
  880. pslld $30, %xmm13
  881. pslld $25, %xmm14
  882. pxor %xmm13, %xmm12
  883. pxor %xmm14, %xmm12
  884. movdqa %xmm12, %xmm13
  885. psrldq $4, %xmm13
  886. pslldq $12, %xmm12
  887. pxor %xmm12, %xmm8
  888. movdqa %xmm8, %xmm14
  889. movdqa %xmm8, %xmm10
  890. movdqa %xmm8, %xmm9
  891. psrld $0x01, %xmm14
  892. psrld $2, %xmm10
  893. psrld $7, %xmm9
  894. pxor %xmm10, %xmm14
  895. pxor %xmm9, %xmm14
  896. pxor %xmm13, %xmm14
  897. pxor %xmm8, %xmm14
  898. pxor %xmm14, %xmm7
  899. movdqu %xmm7, 80(%rsp)
  900. # H ^ 7
  901. pshufd $0x4e, %xmm1, %xmm9
  902. pshufd $0x4e, %xmm3, %xmm10
  903. movdqa %xmm3, %xmm11
  904. movdqa %xmm3, %xmm8
  905. pclmulqdq $0x11, %xmm1, %xmm11
  906. pclmulqdq $0x00, %xmm1, %xmm8
  907. pxor %xmm1, %xmm9
  908. pxor %xmm3, %xmm10
  909. pclmulqdq $0x00, %xmm10, %xmm9
  910. pxor %xmm8, %xmm9
  911. pxor %xmm11, %xmm9
  912. movdqa %xmm9, %xmm10
  913. movdqa %xmm11, %xmm7
  914. pslldq $8, %xmm10
  915. psrldq $8, %xmm9
  916. pxor %xmm10, %xmm8
  917. pxor %xmm9, %xmm7
  918. movdqa %xmm8, %xmm12
  919. movdqa %xmm8, %xmm13
  920. movdqa %xmm8, %xmm14
  921. pslld $31, %xmm12
  922. pslld $30, %xmm13
  923. pslld $25, %xmm14
  924. pxor %xmm13, %xmm12
  925. pxor %xmm14, %xmm12
  926. movdqa %xmm12, %xmm13
  927. psrldq $4, %xmm13
  928. pslldq $12, %xmm12
  929. pxor %xmm12, %xmm8
  930. movdqa %xmm8, %xmm14
  931. movdqa %xmm8, %xmm10
  932. movdqa %xmm8, %xmm9
  933. psrld $0x01, %xmm14
  934. psrld $2, %xmm10
  935. psrld $7, %xmm9
  936. pxor %xmm10, %xmm14
  937. pxor %xmm9, %xmm14
  938. pxor %xmm13, %xmm14
  939. pxor %xmm8, %xmm14
  940. pxor %xmm14, %xmm7
  941. movdqu %xmm7, 96(%rsp)
  942. # H ^ 8
  943. pshufd $0x4e, %xmm3, %xmm9
  944. pshufd $0x4e, %xmm3, %xmm10
  945. movdqa %xmm3, %xmm11
  946. movdqa %xmm3, %xmm8
  947. pclmulqdq $0x11, %xmm3, %xmm11
  948. pclmulqdq $0x00, %xmm3, %xmm8
  949. pxor %xmm3, %xmm9
  950. pxor %xmm3, %xmm10
  951. pclmulqdq $0x00, %xmm10, %xmm9
  952. pxor %xmm8, %xmm9
  953. pxor %xmm11, %xmm9
  954. movdqa %xmm9, %xmm10
  955. movdqa %xmm11, %xmm7
  956. pslldq $8, %xmm10
  957. psrldq $8, %xmm9
  958. pxor %xmm10, %xmm8
  959. pxor %xmm9, %xmm7
  960. movdqa %xmm8, %xmm12
  961. movdqa %xmm8, %xmm13
  962. movdqa %xmm8, %xmm14
  963. pslld $31, %xmm12
  964. pslld $30, %xmm13
  965. pslld $25, %xmm14
  966. pxor %xmm13, %xmm12
  967. pxor %xmm14, %xmm12
  968. movdqa %xmm12, %xmm13
  969. psrldq $4, %xmm13
  970. pslldq $12, %xmm12
  971. pxor %xmm12, %xmm8
  972. movdqa %xmm8, %xmm14
  973. movdqa %xmm8, %xmm10
  974. movdqa %xmm8, %xmm9
  975. psrld $0x01, %xmm14
  976. psrld $2, %xmm10
  977. psrld $7, %xmm9
  978. pxor %xmm10, %xmm14
  979. pxor %xmm9, %xmm14
  980. pxor %xmm13, %xmm14
  981. pxor %xmm8, %xmm14
  982. pxor %xmm14, %xmm7
  983. movdqu %xmm7, 112(%rsp)
  984. # First 128 bytes of input
  985. movdqu 128(%rsp), %xmm8
  986. movdqa L_aes_gcm_bswap_epi64(%rip), %xmm1
  987. movdqa %xmm8, %xmm0
  988. pshufb %xmm1, %xmm8
  989. movdqa %xmm0, %xmm9
  990. paddd L_aes_gcm_one(%rip), %xmm9
  991. pshufb %xmm1, %xmm9
  992. movdqa %xmm0, %xmm10
  993. paddd L_aes_gcm_two(%rip), %xmm10
  994. pshufb %xmm1, %xmm10
  995. movdqa %xmm0, %xmm11
  996. paddd L_aes_gcm_three(%rip), %xmm11
  997. pshufb %xmm1, %xmm11
  998. movdqa %xmm0, %xmm12
  999. paddd L_aes_gcm_four(%rip), %xmm12
  1000. pshufb %xmm1, %xmm12
  1001. movdqa %xmm0, %xmm13
  1002. paddd L_aes_gcm_five(%rip), %xmm13
  1003. pshufb %xmm1, %xmm13
  1004. movdqa %xmm0, %xmm14
  1005. paddd L_aes_gcm_six(%rip), %xmm14
  1006. pshufb %xmm1, %xmm14
  1007. movdqa %xmm0, %xmm15
  1008. paddd L_aes_gcm_seven(%rip), %xmm15
  1009. pshufb %xmm1, %xmm15
  1010. paddd L_aes_gcm_eight(%rip), %xmm0
  1011. movdqa (%r15), %xmm7
  1012. movdqu %xmm0, 128(%rsp)
  1013. pxor %xmm7, %xmm8
  1014. pxor %xmm7, %xmm9
  1015. pxor %xmm7, %xmm10
  1016. pxor %xmm7, %xmm11
  1017. pxor %xmm7, %xmm12
  1018. pxor %xmm7, %xmm13
  1019. pxor %xmm7, %xmm14
  1020. pxor %xmm7, %xmm15
  1021. movdqa 16(%r15), %xmm7
  1022. aesenc %xmm7, %xmm8
  1023. aesenc %xmm7, %xmm9
  1024. aesenc %xmm7, %xmm10
  1025. aesenc %xmm7, %xmm11
  1026. aesenc %xmm7, %xmm12
  1027. aesenc %xmm7, %xmm13
  1028. aesenc %xmm7, %xmm14
  1029. aesenc %xmm7, %xmm15
  1030. movdqa 32(%r15), %xmm7
  1031. aesenc %xmm7, %xmm8
  1032. aesenc %xmm7, %xmm9
  1033. aesenc %xmm7, %xmm10
  1034. aesenc %xmm7, %xmm11
  1035. aesenc %xmm7, %xmm12
  1036. aesenc %xmm7, %xmm13
  1037. aesenc %xmm7, %xmm14
  1038. aesenc %xmm7, %xmm15
  1039. movdqa 48(%r15), %xmm7
  1040. aesenc %xmm7, %xmm8
  1041. aesenc %xmm7, %xmm9
  1042. aesenc %xmm7, %xmm10
  1043. aesenc %xmm7, %xmm11
  1044. aesenc %xmm7, %xmm12
  1045. aesenc %xmm7, %xmm13
  1046. aesenc %xmm7, %xmm14
  1047. aesenc %xmm7, %xmm15
  1048. movdqa 64(%r15), %xmm7
  1049. aesenc %xmm7, %xmm8
  1050. aesenc %xmm7, %xmm9
  1051. aesenc %xmm7, %xmm10
  1052. aesenc %xmm7, %xmm11
  1053. aesenc %xmm7, %xmm12
  1054. aesenc %xmm7, %xmm13
  1055. aesenc %xmm7, %xmm14
  1056. aesenc %xmm7, %xmm15
  1057. movdqa 80(%r15), %xmm7
  1058. aesenc %xmm7, %xmm8
  1059. aesenc %xmm7, %xmm9
  1060. aesenc %xmm7, %xmm10
  1061. aesenc %xmm7, %xmm11
  1062. aesenc %xmm7, %xmm12
  1063. aesenc %xmm7, %xmm13
  1064. aesenc %xmm7, %xmm14
  1065. aesenc %xmm7, %xmm15
  1066. movdqa 96(%r15), %xmm7
  1067. aesenc %xmm7, %xmm8
  1068. aesenc %xmm7, %xmm9
  1069. aesenc %xmm7, %xmm10
  1070. aesenc %xmm7, %xmm11
  1071. aesenc %xmm7, %xmm12
  1072. aesenc %xmm7, %xmm13
  1073. aesenc %xmm7, %xmm14
  1074. aesenc %xmm7, %xmm15
  1075. movdqa 112(%r15), %xmm7
  1076. aesenc %xmm7, %xmm8
  1077. aesenc %xmm7, %xmm9
  1078. aesenc %xmm7, %xmm10
  1079. aesenc %xmm7, %xmm11
  1080. aesenc %xmm7, %xmm12
  1081. aesenc %xmm7, %xmm13
  1082. aesenc %xmm7, %xmm14
  1083. aesenc %xmm7, %xmm15
  1084. movdqa 128(%r15), %xmm7
  1085. aesenc %xmm7, %xmm8
  1086. aesenc %xmm7, %xmm9
  1087. aesenc %xmm7, %xmm10
  1088. aesenc %xmm7, %xmm11
  1089. aesenc %xmm7, %xmm12
  1090. aesenc %xmm7, %xmm13
  1091. aesenc %xmm7, %xmm14
  1092. aesenc %xmm7, %xmm15
  1093. movdqa 144(%r15), %xmm7
  1094. aesenc %xmm7, %xmm8
  1095. aesenc %xmm7, %xmm9
  1096. aesenc %xmm7, %xmm10
  1097. aesenc %xmm7, %xmm11
  1098. aesenc %xmm7, %xmm12
  1099. aesenc %xmm7, %xmm13
  1100. aesenc %xmm7, %xmm14
  1101. aesenc %xmm7, %xmm15
  1102. cmpl $11, %r10d
  1103. movdqa 160(%r15), %xmm7
  1104. jl L_AES_GCM_encrypt_aesni_enc_done
  1105. aesenc %xmm7, %xmm8
  1106. aesenc %xmm7, %xmm9
  1107. aesenc %xmm7, %xmm10
  1108. aesenc %xmm7, %xmm11
  1109. aesenc %xmm7, %xmm12
  1110. aesenc %xmm7, %xmm13
  1111. aesenc %xmm7, %xmm14
  1112. aesenc %xmm7, %xmm15
  1113. movdqa 176(%r15), %xmm7
  1114. aesenc %xmm7, %xmm8
  1115. aesenc %xmm7, %xmm9
  1116. aesenc %xmm7, %xmm10
  1117. aesenc %xmm7, %xmm11
  1118. aesenc %xmm7, %xmm12
  1119. aesenc %xmm7, %xmm13
  1120. aesenc %xmm7, %xmm14
  1121. aesenc %xmm7, %xmm15
  1122. cmpl $13, %r10d
  1123. movdqa 192(%r15), %xmm7
  1124. jl L_AES_GCM_encrypt_aesni_enc_done
  1125. aesenc %xmm7, %xmm8
  1126. aesenc %xmm7, %xmm9
  1127. aesenc %xmm7, %xmm10
  1128. aesenc %xmm7, %xmm11
  1129. aesenc %xmm7, %xmm12
  1130. aesenc %xmm7, %xmm13
  1131. aesenc %xmm7, %xmm14
  1132. aesenc %xmm7, %xmm15
  1133. movdqa 208(%r15), %xmm7
  1134. aesenc %xmm7, %xmm8
  1135. aesenc %xmm7, %xmm9
  1136. aesenc %xmm7, %xmm10
  1137. aesenc %xmm7, %xmm11
  1138. aesenc %xmm7, %xmm12
  1139. aesenc %xmm7, %xmm13
  1140. aesenc %xmm7, %xmm14
  1141. aesenc %xmm7, %xmm15
  1142. movdqa 224(%r15), %xmm7
  1143. L_AES_GCM_encrypt_aesni_enc_done:
  1144. aesenclast %xmm7, %xmm8
  1145. aesenclast %xmm7, %xmm9
  1146. movdqu (%rdi), %xmm0
  1147. movdqu 16(%rdi), %xmm1
  1148. pxor %xmm0, %xmm8
  1149. pxor %xmm1, %xmm9
  1150. movdqu %xmm8, (%rsi)
  1151. movdqu %xmm9, 16(%rsi)
  1152. aesenclast %xmm7, %xmm10
  1153. aesenclast %xmm7, %xmm11
  1154. movdqu 32(%rdi), %xmm0
  1155. movdqu 48(%rdi), %xmm1
  1156. pxor %xmm0, %xmm10
  1157. pxor %xmm1, %xmm11
  1158. movdqu %xmm10, 32(%rsi)
  1159. movdqu %xmm11, 48(%rsi)
  1160. aesenclast %xmm7, %xmm12
  1161. aesenclast %xmm7, %xmm13
  1162. movdqu 64(%rdi), %xmm0
  1163. movdqu 80(%rdi), %xmm1
  1164. pxor %xmm0, %xmm12
  1165. pxor %xmm1, %xmm13
  1166. movdqu %xmm12, 64(%rsi)
  1167. movdqu %xmm13, 80(%rsi)
  1168. aesenclast %xmm7, %xmm14
  1169. aesenclast %xmm7, %xmm15
  1170. movdqu 96(%rdi), %xmm0
  1171. movdqu 112(%rdi), %xmm1
  1172. pxor %xmm0, %xmm14
  1173. pxor %xmm1, %xmm15
  1174. movdqu %xmm14, 96(%rsi)
  1175. movdqu %xmm15, 112(%rsi)
  1176. cmpl $0x80, %r13d
  1177. movl $0x80, %ebx
  1178. jle L_AES_GCM_encrypt_aesni_end_128
  1179. # More 128 bytes of input
  1180. L_AES_GCM_encrypt_aesni_ghash_128:
  1181. leaq (%rdi,%rbx,1), %rcx
  1182. leaq (%rsi,%rbx,1), %rdx
  1183. movdqu 128(%rsp), %xmm8
  1184. movdqa L_aes_gcm_bswap_epi64(%rip), %xmm1
  1185. movdqa %xmm8, %xmm0
  1186. pshufb %xmm1, %xmm8
  1187. movdqa %xmm0, %xmm9
  1188. paddd L_aes_gcm_one(%rip), %xmm9
  1189. pshufb %xmm1, %xmm9
  1190. movdqa %xmm0, %xmm10
  1191. paddd L_aes_gcm_two(%rip), %xmm10
  1192. pshufb %xmm1, %xmm10
  1193. movdqa %xmm0, %xmm11
  1194. paddd L_aes_gcm_three(%rip), %xmm11
  1195. pshufb %xmm1, %xmm11
  1196. movdqa %xmm0, %xmm12
  1197. paddd L_aes_gcm_four(%rip), %xmm12
  1198. pshufb %xmm1, %xmm12
  1199. movdqa %xmm0, %xmm13
  1200. paddd L_aes_gcm_five(%rip), %xmm13
  1201. pshufb %xmm1, %xmm13
  1202. movdqa %xmm0, %xmm14
  1203. paddd L_aes_gcm_six(%rip), %xmm14
  1204. pshufb %xmm1, %xmm14
  1205. movdqa %xmm0, %xmm15
  1206. paddd L_aes_gcm_seven(%rip), %xmm15
  1207. pshufb %xmm1, %xmm15
  1208. paddd L_aes_gcm_eight(%rip), %xmm0
  1209. movdqa (%r15), %xmm7
  1210. movdqu %xmm0, 128(%rsp)
  1211. pxor %xmm7, %xmm8
  1212. pxor %xmm7, %xmm9
  1213. pxor %xmm7, %xmm10
  1214. pxor %xmm7, %xmm11
  1215. pxor %xmm7, %xmm12
  1216. pxor %xmm7, %xmm13
  1217. pxor %xmm7, %xmm14
  1218. pxor %xmm7, %xmm15
  1219. movdqu 112(%rsp), %xmm7
  1220. movdqu -128(%rdx), %xmm0
  1221. aesenc 16(%r15), %xmm8
  1222. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1223. pxor %xmm2, %xmm0
  1224. pshufd $0x4e, %xmm7, %xmm1
  1225. pshufd $0x4e, %xmm0, %xmm5
  1226. pxor %xmm7, %xmm1
  1227. pxor %xmm0, %xmm5
  1228. movdqa %xmm0, %xmm3
  1229. pclmulqdq $0x11, %xmm7, %xmm3
  1230. aesenc 16(%r15), %xmm9
  1231. aesenc 16(%r15), %xmm10
  1232. movdqa %xmm0, %xmm2
  1233. pclmulqdq $0x00, %xmm7, %xmm2
  1234. aesenc 16(%r15), %xmm11
  1235. aesenc 16(%r15), %xmm12
  1236. pclmulqdq $0x00, %xmm5, %xmm1
  1237. aesenc 16(%r15), %xmm13
  1238. aesenc 16(%r15), %xmm14
  1239. aesenc 16(%r15), %xmm15
  1240. pxor %xmm2, %xmm1
  1241. pxor %xmm3, %xmm1
  1242. movdqu 96(%rsp), %xmm7
  1243. movdqu -112(%rdx), %xmm0
  1244. pshufd $0x4e, %xmm7, %xmm4
  1245. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1246. aesenc 32(%r15), %xmm8
  1247. pxor %xmm7, %xmm4
  1248. pshufd $0x4e, %xmm0, %xmm5
  1249. pxor %xmm0, %xmm5
  1250. movdqa %xmm0, %xmm6
  1251. pclmulqdq $0x11, %xmm7, %xmm6
  1252. aesenc 32(%r15), %xmm9
  1253. aesenc 32(%r15), %xmm10
  1254. pclmulqdq $0x00, %xmm0, %xmm7
  1255. aesenc 32(%r15), %xmm11
  1256. aesenc 32(%r15), %xmm12
  1257. pclmulqdq $0x00, %xmm5, %xmm4
  1258. aesenc 32(%r15), %xmm13
  1259. aesenc 32(%r15), %xmm14
  1260. aesenc 32(%r15), %xmm15
  1261. pxor %xmm7, %xmm1
  1262. pxor %xmm7, %xmm2
  1263. pxor %xmm6, %xmm1
  1264. pxor %xmm6, %xmm3
  1265. pxor %xmm4, %xmm1
  1266. movdqu 80(%rsp), %xmm7
  1267. movdqu -96(%rdx), %xmm0
  1268. pshufd $0x4e, %xmm7, %xmm4
  1269. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1270. aesenc 48(%r15), %xmm8
  1271. pxor %xmm7, %xmm4
  1272. pshufd $0x4e, %xmm0, %xmm5
  1273. pxor %xmm0, %xmm5
  1274. movdqa %xmm0, %xmm6
  1275. pclmulqdq $0x11, %xmm7, %xmm6
  1276. aesenc 48(%r15), %xmm9
  1277. aesenc 48(%r15), %xmm10
  1278. pclmulqdq $0x00, %xmm0, %xmm7
  1279. aesenc 48(%r15), %xmm11
  1280. aesenc 48(%r15), %xmm12
  1281. pclmulqdq $0x00, %xmm5, %xmm4
  1282. aesenc 48(%r15), %xmm13
  1283. aesenc 48(%r15), %xmm14
  1284. aesenc 48(%r15), %xmm15
  1285. pxor %xmm7, %xmm1
  1286. pxor %xmm7, %xmm2
  1287. pxor %xmm6, %xmm1
  1288. pxor %xmm6, %xmm3
  1289. pxor %xmm4, %xmm1
  1290. movdqu 64(%rsp), %xmm7
  1291. movdqu -80(%rdx), %xmm0
  1292. pshufd $0x4e, %xmm7, %xmm4
  1293. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1294. aesenc 64(%r15), %xmm8
  1295. pxor %xmm7, %xmm4
  1296. pshufd $0x4e, %xmm0, %xmm5
  1297. pxor %xmm0, %xmm5
  1298. movdqa %xmm0, %xmm6
  1299. pclmulqdq $0x11, %xmm7, %xmm6
  1300. aesenc 64(%r15), %xmm9
  1301. aesenc 64(%r15), %xmm10
  1302. pclmulqdq $0x00, %xmm0, %xmm7
  1303. aesenc 64(%r15), %xmm11
  1304. aesenc 64(%r15), %xmm12
  1305. pclmulqdq $0x00, %xmm5, %xmm4
  1306. aesenc 64(%r15), %xmm13
  1307. aesenc 64(%r15), %xmm14
  1308. aesenc 64(%r15), %xmm15
  1309. pxor %xmm7, %xmm1
  1310. pxor %xmm7, %xmm2
  1311. pxor %xmm6, %xmm1
  1312. pxor %xmm6, %xmm3
  1313. pxor %xmm4, %xmm1
  1314. movdqu 48(%rsp), %xmm7
  1315. movdqu -64(%rdx), %xmm0
  1316. pshufd $0x4e, %xmm7, %xmm4
  1317. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1318. aesenc 80(%r15), %xmm8
  1319. pxor %xmm7, %xmm4
  1320. pshufd $0x4e, %xmm0, %xmm5
  1321. pxor %xmm0, %xmm5
  1322. movdqa %xmm0, %xmm6
  1323. pclmulqdq $0x11, %xmm7, %xmm6
  1324. aesenc 80(%r15), %xmm9
  1325. aesenc 80(%r15), %xmm10
  1326. pclmulqdq $0x00, %xmm0, %xmm7
  1327. aesenc 80(%r15), %xmm11
  1328. aesenc 80(%r15), %xmm12
  1329. pclmulqdq $0x00, %xmm5, %xmm4
  1330. aesenc 80(%r15), %xmm13
  1331. aesenc 80(%r15), %xmm14
  1332. aesenc 80(%r15), %xmm15
  1333. pxor %xmm7, %xmm1
  1334. pxor %xmm7, %xmm2
  1335. pxor %xmm6, %xmm1
  1336. pxor %xmm6, %xmm3
  1337. pxor %xmm4, %xmm1
  1338. movdqu 32(%rsp), %xmm7
  1339. movdqu -48(%rdx), %xmm0
  1340. pshufd $0x4e, %xmm7, %xmm4
  1341. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1342. aesenc 96(%r15), %xmm8
  1343. pxor %xmm7, %xmm4
  1344. pshufd $0x4e, %xmm0, %xmm5
  1345. pxor %xmm0, %xmm5
  1346. movdqa %xmm0, %xmm6
  1347. pclmulqdq $0x11, %xmm7, %xmm6
  1348. aesenc 96(%r15), %xmm9
  1349. aesenc 96(%r15), %xmm10
  1350. pclmulqdq $0x00, %xmm0, %xmm7
  1351. aesenc 96(%r15), %xmm11
  1352. aesenc 96(%r15), %xmm12
  1353. pclmulqdq $0x00, %xmm5, %xmm4
  1354. aesenc 96(%r15), %xmm13
  1355. aesenc 96(%r15), %xmm14
  1356. aesenc 96(%r15), %xmm15
  1357. pxor %xmm7, %xmm1
  1358. pxor %xmm7, %xmm2
  1359. pxor %xmm6, %xmm1
  1360. pxor %xmm6, %xmm3
  1361. pxor %xmm4, %xmm1
  1362. movdqu 16(%rsp), %xmm7
  1363. movdqu -32(%rdx), %xmm0
  1364. pshufd $0x4e, %xmm7, %xmm4
  1365. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1366. aesenc 112(%r15), %xmm8
  1367. pxor %xmm7, %xmm4
  1368. pshufd $0x4e, %xmm0, %xmm5
  1369. pxor %xmm0, %xmm5
  1370. movdqa %xmm0, %xmm6
  1371. pclmulqdq $0x11, %xmm7, %xmm6
  1372. aesenc 112(%r15), %xmm9
  1373. aesenc 112(%r15), %xmm10
  1374. pclmulqdq $0x00, %xmm0, %xmm7
  1375. aesenc 112(%r15), %xmm11
  1376. aesenc 112(%r15), %xmm12
  1377. pclmulqdq $0x00, %xmm5, %xmm4
  1378. aesenc 112(%r15), %xmm13
  1379. aesenc 112(%r15), %xmm14
  1380. aesenc 112(%r15), %xmm15
  1381. pxor %xmm7, %xmm1
  1382. pxor %xmm7, %xmm2
  1383. pxor %xmm6, %xmm1
  1384. pxor %xmm6, %xmm3
  1385. pxor %xmm4, %xmm1
  1386. movdqu (%rsp), %xmm7
  1387. movdqu -16(%rdx), %xmm0
  1388. pshufd $0x4e, %xmm7, %xmm4
  1389. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  1390. aesenc 128(%r15), %xmm8
  1391. pxor %xmm7, %xmm4
  1392. pshufd $0x4e, %xmm0, %xmm5
  1393. pxor %xmm0, %xmm5
  1394. movdqa %xmm0, %xmm6
  1395. pclmulqdq $0x11, %xmm7, %xmm6
  1396. aesenc 128(%r15), %xmm9
  1397. aesenc 128(%r15), %xmm10
  1398. pclmulqdq $0x00, %xmm0, %xmm7
  1399. aesenc 128(%r15), %xmm11
  1400. aesenc 128(%r15), %xmm12
  1401. pclmulqdq $0x00, %xmm5, %xmm4
  1402. aesenc 128(%r15), %xmm13
  1403. aesenc 128(%r15), %xmm14
  1404. aesenc 128(%r15), %xmm15
  1405. pxor %xmm7, %xmm1
  1406. pxor %xmm7, %xmm2
  1407. pxor %xmm6, %xmm1
  1408. pxor %xmm6, %xmm3
  1409. pxor %xmm4, %xmm1
  1410. movdqa %xmm1, %xmm5
  1411. psrldq $8, %xmm1
  1412. pslldq $8, %xmm5
  1413. aesenc 144(%r15), %xmm8
  1414. pxor %xmm5, %xmm2
  1415. pxor %xmm1, %xmm3
  1416. movdqa %xmm2, %xmm7
  1417. movdqa %xmm2, %xmm4
  1418. movdqa %xmm2, %xmm5
  1419. aesenc 144(%r15), %xmm9
  1420. pslld $31, %xmm7
  1421. pslld $30, %xmm4
  1422. pslld $25, %xmm5
  1423. aesenc 144(%r15), %xmm10
  1424. pxor %xmm4, %xmm7
  1425. pxor %xmm5, %xmm7
  1426. aesenc 144(%r15), %xmm11
  1427. movdqa %xmm7, %xmm4
  1428. pslldq $12, %xmm7
  1429. psrldq $4, %xmm4
  1430. aesenc 144(%r15), %xmm12
  1431. pxor %xmm7, %xmm2
  1432. movdqa %xmm2, %xmm5
  1433. movdqa %xmm2, %xmm1
  1434. movdqa %xmm2, %xmm0
  1435. aesenc 144(%r15), %xmm13
  1436. psrld $0x01, %xmm5
  1437. psrld $2, %xmm1
  1438. psrld $7, %xmm0
  1439. aesenc 144(%r15), %xmm14
  1440. pxor %xmm1, %xmm5
  1441. pxor %xmm0, %xmm5
  1442. aesenc 144(%r15), %xmm15
  1443. pxor %xmm4, %xmm5
  1444. pxor %xmm5, %xmm2
  1445. pxor %xmm3, %xmm2
  1446. cmpl $11, %r10d
  1447. movdqa 160(%r15), %xmm7
  1448. jl L_AES_GCM_encrypt_aesni_aesenc_128_ghash_avx_done
  1449. aesenc %xmm7, %xmm8
  1450. aesenc %xmm7, %xmm9
  1451. aesenc %xmm7, %xmm10
  1452. aesenc %xmm7, %xmm11
  1453. aesenc %xmm7, %xmm12
  1454. aesenc %xmm7, %xmm13
  1455. aesenc %xmm7, %xmm14
  1456. aesenc %xmm7, %xmm15
  1457. movdqa 176(%r15), %xmm7
  1458. aesenc %xmm7, %xmm8
  1459. aesenc %xmm7, %xmm9
  1460. aesenc %xmm7, %xmm10
  1461. aesenc %xmm7, %xmm11
  1462. aesenc %xmm7, %xmm12
  1463. aesenc %xmm7, %xmm13
  1464. aesenc %xmm7, %xmm14
  1465. aesenc %xmm7, %xmm15
  1466. cmpl $13, %r10d
  1467. movdqa 192(%r15), %xmm7
  1468. jl L_AES_GCM_encrypt_aesni_aesenc_128_ghash_avx_done
  1469. aesenc %xmm7, %xmm8
  1470. aesenc %xmm7, %xmm9
  1471. aesenc %xmm7, %xmm10
  1472. aesenc %xmm7, %xmm11
  1473. aesenc %xmm7, %xmm12
  1474. aesenc %xmm7, %xmm13
  1475. aesenc %xmm7, %xmm14
  1476. aesenc %xmm7, %xmm15
  1477. movdqa 208(%r15), %xmm7
  1478. aesenc %xmm7, %xmm8
  1479. aesenc %xmm7, %xmm9
  1480. aesenc %xmm7, %xmm10
  1481. aesenc %xmm7, %xmm11
  1482. aesenc %xmm7, %xmm12
  1483. aesenc %xmm7, %xmm13
  1484. aesenc %xmm7, %xmm14
  1485. aesenc %xmm7, %xmm15
  1486. movdqa 224(%r15), %xmm7
  1487. L_AES_GCM_encrypt_aesni_aesenc_128_ghash_avx_done:
  1488. aesenclast %xmm7, %xmm8
  1489. aesenclast %xmm7, %xmm9
  1490. movdqu (%rcx), %xmm0
  1491. movdqu 16(%rcx), %xmm1
  1492. pxor %xmm0, %xmm8
  1493. pxor %xmm1, %xmm9
  1494. movdqu %xmm8, (%rdx)
  1495. movdqu %xmm9, 16(%rdx)
  1496. aesenclast %xmm7, %xmm10
  1497. aesenclast %xmm7, %xmm11
  1498. movdqu 32(%rcx), %xmm0
  1499. movdqu 48(%rcx), %xmm1
  1500. pxor %xmm0, %xmm10
  1501. pxor %xmm1, %xmm11
  1502. movdqu %xmm10, 32(%rdx)
  1503. movdqu %xmm11, 48(%rdx)
  1504. aesenclast %xmm7, %xmm12
  1505. aesenclast %xmm7, %xmm13
  1506. movdqu 64(%rcx), %xmm0
  1507. movdqu 80(%rcx), %xmm1
  1508. pxor %xmm0, %xmm12
  1509. pxor %xmm1, %xmm13
  1510. movdqu %xmm12, 64(%rdx)
  1511. movdqu %xmm13, 80(%rdx)
  1512. aesenclast %xmm7, %xmm14
  1513. aesenclast %xmm7, %xmm15
  1514. movdqu 96(%rcx), %xmm0
  1515. movdqu 112(%rcx), %xmm1
  1516. pxor %xmm0, %xmm14
  1517. pxor %xmm1, %xmm15
  1518. movdqu %xmm14, 96(%rdx)
  1519. movdqu %xmm15, 112(%rdx)
  1520. addl $0x80, %ebx
  1521. cmpl %r13d, %ebx
  1522. jl L_AES_GCM_encrypt_aesni_ghash_128
  1523. L_AES_GCM_encrypt_aesni_end_128:
  1524. movdqa L_aes_gcm_bswap_mask(%rip), %xmm4
  1525. pshufb %xmm4, %xmm8
  1526. pshufb %xmm4, %xmm9
  1527. pshufb %xmm4, %xmm10
  1528. pshufb %xmm4, %xmm11
  1529. pxor %xmm2, %xmm8
  1530. pshufb %xmm4, %xmm12
  1531. pshufb %xmm4, %xmm13
  1532. pshufb %xmm4, %xmm14
  1533. pshufb %xmm4, %xmm15
  1534. movdqu 112(%rsp), %xmm7
  1535. pshufd $0x4e, %xmm8, %xmm1
  1536. pshufd $0x4e, %xmm7, %xmm2
  1537. movdqa %xmm7, %xmm3
  1538. movdqa %xmm7, %xmm0
  1539. pclmulqdq $0x11, %xmm8, %xmm3
  1540. pclmulqdq $0x00, %xmm8, %xmm0
  1541. pxor %xmm8, %xmm1
  1542. pxor %xmm7, %xmm2
  1543. pclmulqdq $0x00, %xmm2, %xmm1
  1544. pxor %xmm0, %xmm1
  1545. pxor %xmm3, %xmm1
  1546. movdqa %xmm1, %xmm2
  1547. movdqa %xmm0, %xmm4
  1548. movdqa %xmm3, %xmm6
  1549. pslldq $8, %xmm2
  1550. psrldq $8, %xmm1
  1551. pxor %xmm2, %xmm4
  1552. pxor %xmm1, %xmm6
  1553. movdqu 96(%rsp), %xmm7
  1554. pshufd $0x4e, %xmm9, %xmm1
  1555. pshufd $0x4e, %xmm7, %xmm2
  1556. movdqa %xmm7, %xmm3
  1557. movdqa %xmm7, %xmm0
  1558. pclmulqdq $0x11, %xmm9, %xmm3
  1559. pclmulqdq $0x00, %xmm9, %xmm0
  1560. pxor %xmm9, %xmm1
  1561. pxor %xmm7, %xmm2
  1562. pclmulqdq $0x00, %xmm2, %xmm1
  1563. pxor %xmm0, %xmm1
  1564. pxor %xmm3, %xmm1
  1565. movdqa %xmm1, %xmm2
  1566. pxor %xmm0, %xmm4
  1567. pxor %xmm3, %xmm6
  1568. pslldq $8, %xmm2
  1569. psrldq $8, %xmm1
  1570. pxor %xmm2, %xmm4
  1571. pxor %xmm1, %xmm6
  1572. movdqu 80(%rsp), %xmm7
  1573. pshufd $0x4e, %xmm10, %xmm1
  1574. pshufd $0x4e, %xmm7, %xmm2
  1575. movdqa %xmm7, %xmm3
  1576. movdqa %xmm7, %xmm0
  1577. pclmulqdq $0x11, %xmm10, %xmm3
  1578. pclmulqdq $0x00, %xmm10, %xmm0
  1579. pxor %xmm10, %xmm1
  1580. pxor %xmm7, %xmm2
  1581. pclmulqdq $0x00, %xmm2, %xmm1
  1582. pxor %xmm0, %xmm1
  1583. pxor %xmm3, %xmm1
  1584. movdqa %xmm1, %xmm2
  1585. pxor %xmm0, %xmm4
  1586. pxor %xmm3, %xmm6
  1587. pslldq $8, %xmm2
  1588. psrldq $8, %xmm1
  1589. pxor %xmm2, %xmm4
  1590. pxor %xmm1, %xmm6
  1591. movdqu 64(%rsp), %xmm7
  1592. pshufd $0x4e, %xmm11, %xmm1
  1593. pshufd $0x4e, %xmm7, %xmm2
  1594. movdqa %xmm7, %xmm3
  1595. movdqa %xmm7, %xmm0
  1596. pclmulqdq $0x11, %xmm11, %xmm3
  1597. pclmulqdq $0x00, %xmm11, %xmm0
  1598. pxor %xmm11, %xmm1
  1599. pxor %xmm7, %xmm2
  1600. pclmulqdq $0x00, %xmm2, %xmm1
  1601. pxor %xmm0, %xmm1
  1602. pxor %xmm3, %xmm1
  1603. movdqa %xmm1, %xmm2
  1604. pxor %xmm0, %xmm4
  1605. pxor %xmm3, %xmm6
  1606. pslldq $8, %xmm2
  1607. psrldq $8, %xmm1
  1608. pxor %xmm2, %xmm4
  1609. pxor %xmm1, %xmm6
  1610. movdqu 48(%rsp), %xmm7
  1611. pshufd $0x4e, %xmm12, %xmm1
  1612. pshufd $0x4e, %xmm7, %xmm2
  1613. movdqa %xmm7, %xmm3
  1614. movdqa %xmm7, %xmm0
  1615. pclmulqdq $0x11, %xmm12, %xmm3
  1616. pclmulqdq $0x00, %xmm12, %xmm0
  1617. pxor %xmm12, %xmm1
  1618. pxor %xmm7, %xmm2
  1619. pclmulqdq $0x00, %xmm2, %xmm1
  1620. pxor %xmm0, %xmm1
  1621. pxor %xmm3, %xmm1
  1622. movdqa %xmm1, %xmm2
  1623. pxor %xmm0, %xmm4
  1624. pxor %xmm3, %xmm6
  1625. pslldq $8, %xmm2
  1626. psrldq $8, %xmm1
  1627. pxor %xmm2, %xmm4
  1628. pxor %xmm1, %xmm6
  1629. movdqu 32(%rsp), %xmm7
  1630. pshufd $0x4e, %xmm13, %xmm1
  1631. pshufd $0x4e, %xmm7, %xmm2
  1632. movdqa %xmm7, %xmm3
  1633. movdqa %xmm7, %xmm0
  1634. pclmulqdq $0x11, %xmm13, %xmm3
  1635. pclmulqdq $0x00, %xmm13, %xmm0
  1636. pxor %xmm13, %xmm1
  1637. pxor %xmm7, %xmm2
  1638. pclmulqdq $0x00, %xmm2, %xmm1
  1639. pxor %xmm0, %xmm1
  1640. pxor %xmm3, %xmm1
  1641. movdqa %xmm1, %xmm2
  1642. pxor %xmm0, %xmm4
  1643. pxor %xmm3, %xmm6
  1644. pslldq $8, %xmm2
  1645. psrldq $8, %xmm1
  1646. pxor %xmm2, %xmm4
  1647. pxor %xmm1, %xmm6
  1648. movdqu 16(%rsp), %xmm7
  1649. pshufd $0x4e, %xmm14, %xmm1
  1650. pshufd $0x4e, %xmm7, %xmm2
  1651. movdqa %xmm7, %xmm3
  1652. movdqa %xmm7, %xmm0
  1653. pclmulqdq $0x11, %xmm14, %xmm3
  1654. pclmulqdq $0x00, %xmm14, %xmm0
  1655. pxor %xmm14, %xmm1
  1656. pxor %xmm7, %xmm2
  1657. pclmulqdq $0x00, %xmm2, %xmm1
  1658. pxor %xmm0, %xmm1
  1659. pxor %xmm3, %xmm1
  1660. movdqa %xmm1, %xmm2
  1661. pxor %xmm0, %xmm4
  1662. pxor %xmm3, %xmm6
  1663. pslldq $8, %xmm2
  1664. psrldq $8, %xmm1
  1665. pxor %xmm2, %xmm4
  1666. pxor %xmm1, %xmm6
  1667. movdqu (%rsp), %xmm7
  1668. pshufd $0x4e, %xmm15, %xmm1
  1669. pshufd $0x4e, %xmm7, %xmm2
  1670. movdqa %xmm7, %xmm3
  1671. movdqa %xmm7, %xmm0
  1672. pclmulqdq $0x11, %xmm15, %xmm3
  1673. pclmulqdq $0x00, %xmm15, %xmm0
  1674. pxor %xmm15, %xmm1
  1675. pxor %xmm7, %xmm2
  1676. pclmulqdq $0x00, %xmm2, %xmm1
  1677. pxor %xmm0, %xmm1
  1678. pxor %xmm3, %xmm1
  1679. movdqa %xmm1, %xmm2
  1680. pxor %xmm0, %xmm4
  1681. pxor %xmm3, %xmm6
  1682. pslldq $8, %xmm2
  1683. psrldq $8, %xmm1
  1684. pxor %xmm2, %xmm4
  1685. pxor %xmm1, %xmm6
  1686. movdqa %xmm4, %xmm0
  1687. movdqa %xmm4, %xmm1
  1688. movdqa %xmm4, %xmm2
  1689. pslld $31, %xmm0
  1690. pslld $30, %xmm1
  1691. pslld $25, %xmm2
  1692. pxor %xmm1, %xmm0
  1693. pxor %xmm2, %xmm0
  1694. movdqa %xmm0, %xmm1
  1695. psrldq $4, %xmm1
  1696. pslldq $12, %xmm0
  1697. pxor %xmm0, %xmm4
  1698. movdqa %xmm4, %xmm2
  1699. movdqa %xmm4, %xmm3
  1700. movdqa %xmm4, %xmm0
  1701. psrld $0x01, %xmm2
  1702. psrld $2, %xmm3
  1703. psrld $7, %xmm0
  1704. pxor %xmm3, %xmm2
  1705. pxor %xmm0, %xmm2
  1706. pxor %xmm1, %xmm2
  1707. pxor %xmm4, %xmm2
  1708. pxor %xmm2, %xmm6
  1709. movdqu (%rsp), %xmm5
  1710. L_AES_GCM_encrypt_aesni_done_128:
  1711. movl %r9d, %edx
  1712. cmpl %edx, %ebx
  1713. jge L_AES_GCM_encrypt_aesni_done_enc
  1714. movl %r9d, %r13d
  1715. andl $0xfffffff0, %r13d
  1716. cmpl %r13d, %ebx
  1717. jge L_AES_GCM_encrypt_aesni_last_block_done
  1718. leaq (%rdi,%rbx,1), %rcx
  1719. leaq (%rsi,%rbx,1), %rdx
  1720. movdqu 128(%rsp), %xmm8
  1721. movdqa %xmm8, %xmm9
  1722. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm8
  1723. paddd L_aes_gcm_one(%rip), %xmm9
  1724. pxor (%r15), %xmm8
  1725. movdqu %xmm9, 128(%rsp)
  1726. aesenc 16(%r15), %xmm8
  1727. aesenc 32(%r15), %xmm8
  1728. aesenc 48(%r15), %xmm8
  1729. aesenc 64(%r15), %xmm8
  1730. aesenc 80(%r15), %xmm8
  1731. aesenc 96(%r15), %xmm8
  1732. aesenc 112(%r15), %xmm8
  1733. aesenc 128(%r15), %xmm8
  1734. aesenc 144(%r15), %xmm8
  1735. cmpl $11, %r10d
  1736. movdqa 160(%r15), %xmm9
  1737. jl L_AES_GCM_encrypt_aesni_aesenc_block_aesenc_avx_last
  1738. aesenc %xmm9, %xmm8
  1739. aesenc 176(%r15), %xmm8
  1740. cmpl $13, %r10d
  1741. movdqa 192(%r15), %xmm9
  1742. jl L_AES_GCM_encrypt_aesni_aesenc_block_aesenc_avx_last
  1743. aesenc %xmm9, %xmm8
  1744. aesenc 208(%r15), %xmm8
  1745. movdqa 224(%r15), %xmm9
  1746. L_AES_GCM_encrypt_aesni_aesenc_block_aesenc_avx_last:
  1747. aesenclast %xmm9, %xmm8
  1748. movdqu (%rcx), %xmm9
  1749. pxor %xmm9, %xmm8
  1750. movdqu %xmm8, (%rdx)
  1751. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  1752. pxor %xmm8, %xmm6
  1753. addl $16, %ebx
  1754. cmpl %r13d, %ebx
  1755. jge L_AES_GCM_encrypt_aesni_last_block_ghash
  1756. L_AES_GCM_encrypt_aesni_last_block_start:
  1757. leaq (%rdi,%rbx,1), %rcx
  1758. leaq (%rsi,%rbx,1), %rdx
  1759. movdqu 128(%rsp), %xmm8
  1760. movdqa %xmm8, %xmm9
  1761. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm8
  1762. paddd L_aes_gcm_one(%rip), %xmm9
  1763. pxor (%r15), %xmm8
  1764. movdqu %xmm9, 128(%rsp)
  1765. movdqa %xmm6, %xmm10
  1766. pclmulqdq $16, %xmm5, %xmm10
  1767. aesenc 16(%r15), %xmm8
  1768. aesenc 32(%r15), %xmm8
  1769. movdqa %xmm6, %xmm11
  1770. pclmulqdq $0x01, %xmm5, %xmm11
  1771. aesenc 48(%r15), %xmm8
  1772. aesenc 64(%r15), %xmm8
  1773. movdqa %xmm6, %xmm12
  1774. pclmulqdq $0x00, %xmm5, %xmm12
  1775. aesenc 80(%r15), %xmm8
  1776. movdqa %xmm6, %xmm1
  1777. pclmulqdq $0x11, %xmm5, %xmm1
  1778. aesenc 96(%r15), %xmm8
  1779. pxor %xmm11, %xmm10
  1780. movdqa %xmm10, %xmm2
  1781. psrldq $8, %xmm10
  1782. pslldq $8, %xmm2
  1783. aesenc 112(%r15), %xmm8
  1784. movdqa %xmm1, %xmm3
  1785. pxor %xmm12, %xmm2
  1786. pxor %xmm10, %xmm3
  1787. movdqa L_aes_gcm_mod2_128(%rip), %xmm0
  1788. movdqa %xmm2, %xmm11
  1789. pclmulqdq $16, %xmm0, %xmm11
  1790. aesenc 128(%r15), %xmm8
  1791. pshufd $0x4e, %xmm2, %xmm10
  1792. pxor %xmm11, %xmm10
  1793. movdqa %xmm10, %xmm11
  1794. pclmulqdq $16, %xmm0, %xmm11
  1795. aesenc 144(%r15), %xmm8
  1796. pshufd $0x4e, %xmm10, %xmm6
  1797. pxor %xmm11, %xmm6
  1798. pxor %xmm3, %xmm6
  1799. cmpl $11, %r10d
  1800. movdqa 160(%r15), %xmm9
  1801. jl L_AES_GCM_encrypt_aesni_aesenc_gfmul_last
  1802. aesenc %xmm9, %xmm8
  1803. aesenc 176(%r15), %xmm8
  1804. cmpl $13, %r10d
  1805. movdqa 192(%r15), %xmm9
  1806. jl L_AES_GCM_encrypt_aesni_aesenc_gfmul_last
  1807. aesenc %xmm9, %xmm8
  1808. aesenc 208(%r15), %xmm8
  1809. movdqa 224(%r15), %xmm9
  1810. L_AES_GCM_encrypt_aesni_aesenc_gfmul_last:
  1811. aesenclast %xmm9, %xmm8
  1812. movdqu (%rcx), %xmm9
  1813. pxor %xmm9, %xmm8
  1814. movdqu %xmm8, (%rdx)
  1815. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  1816. pxor %xmm8, %xmm6
  1817. addl $16, %ebx
  1818. cmpl %r13d, %ebx
  1819. jl L_AES_GCM_encrypt_aesni_last_block_start
  1820. L_AES_GCM_encrypt_aesni_last_block_ghash:
  1821. pshufd $0x4e, %xmm5, %xmm9
  1822. pshufd $0x4e, %xmm6, %xmm10
  1823. movdqa %xmm6, %xmm11
  1824. movdqa %xmm6, %xmm8
  1825. pclmulqdq $0x11, %xmm5, %xmm11
  1826. pclmulqdq $0x00, %xmm5, %xmm8
  1827. pxor %xmm5, %xmm9
  1828. pxor %xmm6, %xmm10
  1829. pclmulqdq $0x00, %xmm10, %xmm9
  1830. pxor %xmm8, %xmm9
  1831. pxor %xmm11, %xmm9
  1832. movdqa %xmm9, %xmm10
  1833. movdqa %xmm11, %xmm6
  1834. pslldq $8, %xmm10
  1835. psrldq $8, %xmm9
  1836. pxor %xmm10, %xmm8
  1837. pxor %xmm9, %xmm6
  1838. movdqa %xmm8, %xmm12
  1839. movdqa %xmm8, %xmm13
  1840. movdqa %xmm8, %xmm14
  1841. pslld $31, %xmm12
  1842. pslld $30, %xmm13
  1843. pslld $25, %xmm14
  1844. pxor %xmm13, %xmm12
  1845. pxor %xmm14, %xmm12
  1846. movdqa %xmm12, %xmm13
  1847. psrldq $4, %xmm13
  1848. pslldq $12, %xmm12
  1849. pxor %xmm12, %xmm8
  1850. movdqa %xmm8, %xmm14
  1851. movdqa %xmm8, %xmm10
  1852. movdqa %xmm8, %xmm9
  1853. psrld $0x01, %xmm14
  1854. psrld $2, %xmm10
  1855. psrld $7, %xmm9
  1856. pxor %xmm10, %xmm14
  1857. pxor %xmm9, %xmm14
  1858. pxor %xmm13, %xmm14
  1859. pxor %xmm8, %xmm14
  1860. pxor %xmm14, %xmm6
  1861. L_AES_GCM_encrypt_aesni_last_block_done:
  1862. movl %r9d, %ecx
  1863. movl %ecx, %edx
  1864. andl $15, %ecx
  1865. jz L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_done
  1866. movdqu 128(%rsp), %xmm4
  1867. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm4
  1868. pxor (%r15), %xmm4
  1869. aesenc 16(%r15), %xmm4
  1870. aesenc 32(%r15), %xmm4
  1871. aesenc 48(%r15), %xmm4
  1872. aesenc 64(%r15), %xmm4
  1873. aesenc 80(%r15), %xmm4
  1874. aesenc 96(%r15), %xmm4
  1875. aesenc 112(%r15), %xmm4
  1876. aesenc 128(%r15), %xmm4
  1877. aesenc 144(%r15), %xmm4
  1878. cmpl $11, %r10d
  1879. movdqa 160(%r15), %xmm9
  1880. jl L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_aesenc_avx_last
  1881. aesenc %xmm9, %xmm4
  1882. aesenc 176(%r15), %xmm4
  1883. cmpl $13, %r10d
  1884. movdqa 192(%r15), %xmm9
  1885. jl L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_aesenc_avx_last
  1886. aesenc %xmm9, %xmm4
  1887. aesenc 208(%r15), %xmm4
  1888. movdqa 224(%r15), %xmm9
  1889. L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_aesenc_avx_last:
  1890. aesenclast %xmm9, %xmm4
  1891. subq $16, %rsp
  1892. xorl %ecx, %ecx
  1893. movdqu %xmm4, (%rsp)
  1894. L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_loop:
  1895. movzbl (%rdi,%rbx,1), %r13d
  1896. xorb (%rsp,%rcx,1), %r13b
  1897. movb %r13b, (%rsi,%rbx,1)
  1898. movb %r13b, (%rsp,%rcx,1)
  1899. incl %ebx
  1900. incl %ecx
  1901. cmpl %edx, %ebx
  1902. jl L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_loop
  1903. xorq %r13, %r13
  1904. cmpl $16, %ecx
  1905. je L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_finish_enc
  1906. L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_byte_loop:
  1907. movb %r13b, (%rsp,%rcx,1)
  1908. incl %ecx
  1909. cmpl $16, %ecx
  1910. jl L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_byte_loop
  1911. L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_finish_enc:
  1912. movdqu (%rsp), %xmm4
  1913. addq $16, %rsp
  1914. pshufb L_aes_gcm_bswap_mask(%rip), %xmm4
  1915. pxor %xmm4, %xmm6
  1916. pshufd $0x4e, %xmm5, %xmm9
  1917. pshufd $0x4e, %xmm6, %xmm10
  1918. movdqa %xmm6, %xmm11
  1919. movdqa %xmm6, %xmm8
  1920. pclmulqdq $0x11, %xmm5, %xmm11
  1921. pclmulqdq $0x00, %xmm5, %xmm8
  1922. pxor %xmm5, %xmm9
  1923. pxor %xmm6, %xmm10
  1924. pclmulqdq $0x00, %xmm10, %xmm9
  1925. pxor %xmm8, %xmm9
  1926. pxor %xmm11, %xmm9
  1927. movdqa %xmm9, %xmm10
  1928. movdqa %xmm11, %xmm6
  1929. pslldq $8, %xmm10
  1930. psrldq $8, %xmm9
  1931. pxor %xmm10, %xmm8
  1932. pxor %xmm9, %xmm6
  1933. movdqa %xmm8, %xmm12
  1934. movdqa %xmm8, %xmm13
  1935. movdqa %xmm8, %xmm14
  1936. pslld $31, %xmm12
  1937. pslld $30, %xmm13
  1938. pslld $25, %xmm14
  1939. pxor %xmm13, %xmm12
  1940. pxor %xmm14, %xmm12
  1941. movdqa %xmm12, %xmm13
  1942. psrldq $4, %xmm13
  1943. pslldq $12, %xmm12
  1944. pxor %xmm12, %xmm8
  1945. movdqa %xmm8, %xmm14
  1946. movdqa %xmm8, %xmm10
  1947. movdqa %xmm8, %xmm9
  1948. psrld $0x01, %xmm14
  1949. psrld $2, %xmm10
  1950. psrld $7, %xmm9
  1951. pxor %xmm10, %xmm14
  1952. pxor %xmm9, %xmm14
  1953. pxor %xmm13, %xmm14
  1954. pxor %xmm8, %xmm14
  1955. pxor %xmm14, %xmm6
  1956. L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_done:
  1957. L_AES_GCM_encrypt_aesni_done_enc:
  1958. movl %r9d, %edx
  1959. movl %r11d, %ecx
  1960. shlq $3, %rdx
  1961. shlq $3, %rcx
  1962. pinsrq $0x00, %rdx, %xmm0
  1963. pinsrq $0x01, %rcx, %xmm0
  1964. pxor %xmm0, %xmm6
  1965. pshufd $0x4e, %xmm5, %xmm9
  1966. pshufd $0x4e, %xmm6, %xmm10
  1967. movdqa %xmm6, %xmm11
  1968. movdqa %xmm6, %xmm8
  1969. pclmulqdq $0x11, %xmm5, %xmm11
  1970. pclmulqdq $0x00, %xmm5, %xmm8
  1971. pxor %xmm5, %xmm9
  1972. pxor %xmm6, %xmm10
  1973. pclmulqdq $0x00, %xmm10, %xmm9
  1974. pxor %xmm8, %xmm9
  1975. pxor %xmm11, %xmm9
  1976. movdqa %xmm9, %xmm10
  1977. movdqa %xmm11, %xmm6
  1978. pslldq $8, %xmm10
  1979. psrldq $8, %xmm9
  1980. pxor %xmm10, %xmm8
  1981. pxor %xmm9, %xmm6
  1982. movdqa %xmm8, %xmm12
  1983. movdqa %xmm8, %xmm13
  1984. movdqa %xmm8, %xmm14
  1985. pslld $31, %xmm12
  1986. pslld $30, %xmm13
  1987. pslld $25, %xmm14
  1988. pxor %xmm13, %xmm12
  1989. pxor %xmm14, %xmm12
  1990. movdqa %xmm12, %xmm13
  1991. psrldq $4, %xmm13
  1992. pslldq $12, %xmm12
  1993. pxor %xmm12, %xmm8
  1994. movdqa %xmm8, %xmm14
  1995. movdqa %xmm8, %xmm10
  1996. movdqa %xmm8, %xmm9
  1997. psrld $0x01, %xmm14
  1998. psrld $2, %xmm10
  1999. psrld $7, %xmm9
  2000. pxor %xmm10, %xmm14
  2001. pxor %xmm9, %xmm14
  2002. pxor %xmm13, %xmm14
  2003. pxor %xmm8, %xmm14
  2004. pxor %xmm14, %xmm6
  2005. pshufb L_aes_gcm_bswap_mask(%rip), %xmm6
  2006. movdqu 144(%rsp), %xmm0
  2007. pxor %xmm6, %xmm0
  2008. cmpl $16, %r14d
  2009. je L_AES_GCM_encrypt_aesni_store_tag_16
  2010. xorq %rcx, %rcx
  2011. movdqu %xmm0, (%rsp)
  2012. L_AES_GCM_encrypt_aesni_store_tag_loop:
  2013. movzbl (%rsp,%rcx,1), %r13d
  2014. movb %r13b, (%r8,%rcx,1)
  2015. incl %ecx
  2016. cmpl %r14d, %ecx
  2017. jne L_AES_GCM_encrypt_aesni_store_tag_loop
  2018. jmp L_AES_GCM_encrypt_aesni_store_tag_done
  2019. L_AES_GCM_encrypt_aesni_store_tag_16:
  2020. movdqu %xmm0, (%r8)
  2021. L_AES_GCM_encrypt_aesni_store_tag_done:
  2022. addq $0xa0, %rsp
  2023. popq %r15
  2024. popq %r14
  2025. popq %rbx
  2026. popq %r12
  2027. popq %r13
  2028. repz retq
  2029. #ifndef __APPLE__
  2030. .size AES_GCM_encrypt_aesni,.-AES_GCM_encrypt_aesni
  2031. #endif /* __APPLE__ */
  2032. #ifndef __APPLE__
  2033. .text
  2034. .globl AES_GCM_decrypt_aesni
  2035. .type AES_GCM_decrypt_aesni,@function
  2036. .align 16
  2037. AES_GCM_decrypt_aesni:
  2038. #else
  2039. .section __TEXT,__text
  2040. .globl _AES_GCM_decrypt_aesni
  2041. .p2align 4
  2042. _AES_GCM_decrypt_aesni:
  2043. #endif /* __APPLE__ */
  2044. pushq %r13
  2045. pushq %r12
  2046. pushq %rbx
  2047. pushq %r14
  2048. pushq %r15
  2049. pushq %rbp
  2050. movq %rdx, %r12
  2051. movq %rcx, %rax
  2052. movl 56(%rsp), %r11d
  2053. movl 64(%rsp), %ebx
  2054. movl 72(%rsp), %r14d
  2055. movq 80(%rsp), %r15
  2056. movl 88(%rsp), %r10d
  2057. movq 96(%rsp), %rbp
  2058. subq $0xa8, %rsp
  2059. pxor %xmm4, %xmm4
  2060. pxor %xmm6, %xmm6
  2061. cmpl $12, %ebx
  2062. movl %ebx, %edx
  2063. jne L_AES_GCM_decrypt_aesni_iv_not_12
  2064. # # Calculate values when IV is 12 bytes
  2065. # Set counter based on IV
  2066. movl $0x1000000, %ecx
  2067. pinsrq $0x00, (%rax), %xmm4
  2068. pinsrd $2, 8(%rax), %xmm4
  2069. pinsrd $3, %ecx, %xmm4
  2070. # H = Encrypt X(=0) and T = Encrypt counter
  2071. movdqa %xmm4, %xmm1
  2072. movdqa (%r15), %xmm5
  2073. pxor %xmm5, %xmm1
  2074. movdqa 16(%r15), %xmm7
  2075. aesenc %xmm7, %xmm5
  2076. aesenc %xmm7, %xmm1
  2077. movdqa 32(%r15), %xmm7
  2078. aesenc %xmm7, %xmm5
  2079. aesenc %xmm7, %xmm1
  2080. movdqa 48(%r15), %xmm7
  2081. aesenc %xmm7, %xmm5
  2082. aesenc %xmm7, %xmm1
  2083. movdqa 64(%r15), %xmm7
  2084. aesenc %xmm7, %xmm5
  2085. aesenc %xmm7, %xmm1
  2086. movdqa 80(%r15), %xmm7
  2087. aesenc %xmm7, %xmm5
  2088. aesenc %xmm7, %xmm1
  2089. movdqa 96(%r15), %xmm7
  2090. aesenc %xmm7, %xmm5
  2091. aesenc %xmm7, %xmm1
  2092. movdqa 112(%r15), %xmm7
  2093. aesenc %xmm7, %xmm5
  2094. aesenc %xmm7, %xmm1
  2095. movdqa 128(%r15), %xmm7
  2096. aesenc %xmm7, %xmm5
  2097. aesenc %xmm7, %xmm1
  2098. movdqa 144(%r15), %xmm7
  2099. aesenc %xmm7, %xmm5
  2100. aesenc %xmm7, %xmm1
  2101. cmpl $11, %r10d
  2102. movdqa 160(%r15), %xmm7
  2103. jl L_AES_GCM_decrypt_aesni_calc_iv_12_last
  2104. aesenc %xmm7, %xmm5
  2105. aesenc %xmm7, %xmm1
  2106. movdqa 176(%r15), %xmm7
  2107. aesenc %xmm7, %xmm5
  2108. aesenc %xmm7, %xmm1
  2109. cmpl $13, %r10d
  2110. movdqa 192(%r15), %xmm7
  2111. jl L_AES_GCM_decrypt_aesni_calc_iv_12_last
  2112. aesenc %xmm7, %xmm5
  2113. aesenc %xmm7, %xmm1
  2114. movdqa 208(%r15), %xmm7
  2115. aesenc %xmm7, %xmm5
  2116. aesenc %xmm7, %xmm1
  2117. movdqa 224(%r15), %xmm7
  2118. L_AES_GCM_decrypt_aesni_calc_iv_12_last:
  2119. aesenclast %xmm7, %xmm5
  2120. aesenclast %xmm7, %xmm1
  2121. pshufb L_aes_gcm_bswap_mask(%rip), %xmm5
  2122. movdqu %xmm1, 144(%rsp)
  2123. jmp L_AES_GCM_decrypt_aesni_iv_done
  2124. L_AES_GCM_decrypt_aesni_iv_not_12:
  2125. # Calculate values when IV is not 12 bytes
  2126. # H = Encrypt X(=0)
  2127. movdqa (%r15), %xmm5
  2128. aesenc 16(%r15), %xmm5
  2129. aesenc 32(%r15), %xmm5
  2130. aesenc 48(%r15), %xmm5
  2131. aesenc 64(%r15), %xmm5
  2132. aesenc 80(%r15), %xmm5
  2133. aesenc 96(%r15), %xmm5
  2134. aesenc 112(%r15), %xmm5
  2135. aesenc 128(%r15), %xmm5
  2136. aesenc 144(%r15), %xmm5
  2137. cmpl $11, %r10d
  2138. movdqa 160(%r15), %xmm9
  2139. jl L_AES_GCM_decrypt_aesni_calc_iv_1_aesenc_avx_last
  2140. aesenc %xmm9, %xmm5
  2141. aesenc 176(%r15), %xmm5
  2142. cmpl $13, %r10d
  2143. movdqa 192(%r15), %xmm9
  2144. jl L_AES_GCM_decrypt_aesni_calc_iv_1_aesenc_avx_last
  2145. aesenc %xmm9, %xmm5
  2146. aesenc 208(%r15), %xmm5
  2147. movdqa 224(%r15), %xmm9
  2148. L_AES_GCM_decrypt_aesni_calc_iv_1_aesenc_avx_last:
  2149. aesenclast %xmm9, %xmm5
  2150. pshufb L_aes_gcm_bswap_mask(%rip), %xmm5
  2151. # Calc counter
  2152. # Initialization vector
  2153. cmpl $0x00, %edx
  2154. movq $0x00, %rcx
  2155. je L_AES_GCM_decrypt_aesni_calc_iv_done
  2156. cmpl $16, %edx
  2157. jl L_AES_GCM_decrypt_aesni_calc_iv_lt16
  2158. andl $0xfffffff0, %edx
  2159. L_AES_GCM_decrypt_aesni_calc_iv_16_loop:
  2160. movdqu (%rax,%rcx,1), %xmm8
  2161. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  2162. pxor %xmm8, %xmm4
  2163. pshufd $0x4e, %xmm4, %xmm1
  2164. pshufd $0x4e, %xmm5, %xmm2
  2165. movdqa %xmm5, %xmm3
  2166. movdqa %xmm5, %xmm0
  2167. pclmulqdq $0x11, %xmm4, %xmm3
  2168. pclmulqdq $0x00, %xmm4, %xmm0
  2169. pxor %xmm4, %xmm1
  2170. pxor %xmm5, %xmm2
  2171. pclmulqdq $0x00, %xmm2, %xmm1
  2172. pxor %xmm0, %xmm1
  2173. pxor %xmm3, %xmm1
  2174. movdqa %xmm1, %xmm2
  2175. movdqa %xmm0, %xmm7
  2176. movdqa %xmm3, %xmm4
  2177. pslldq $8, %xmm2
  2178. psrldq $8, %xmm1
  2179. pxor %xmm2, %xmm7
  2180. pxor %xmm1, %xmm4
  2181. movdqa %xmm7, %xmm0
  2182. movdqa %xmm4, %xmm1
  2183. psrld $31, %xmm0
  2184. psrld $31, %xmm1
  2185. pslld $0x01, %xmm7
  2186. pslld $0x01, %xmm4
  2187. movdqa %xmm0, %xmm2
  2188. pslldq $4, %xmm0
  2189. psrldq $12, %xmm2
  2190. pslldq $4, %xmm1
  2191. por %xmm2, %xmm4
  2192. por %xmm0, %xmm7
  2193. por %xmm1, %xmm4
  2194. movdqa %xmm7, %xmm0
  2195. movdqa %xmm7, %xmm1
  2196. movdqa %xmm7, %xmm2
  2197. pslld $31, %xmm0
  2198. pslld $30, %xmm1
  2199. pslld $25, %xmm2
  2200. pxor %xmm1, %xmm0
  2201. pxor %xmm2, %xmm0
  2202. movdqa %xmm0, %xmm1
  2203. psrldq $4, %xmm1
  2204. pslldq $12, %xmm0
  2205. pxor %xmm0, %xmm7
  2206. movdqa %xmm7, %xmm2
  2207. movdqa %xmm7, %xmm3
  2208. movdqa %xmm7, %xmm0
  2209. psrld $0x01, %xmm2
  2210. psrld $2, %xmm3
  2211. psrld $7, %xmm0
  2212. pxor %xmm3, %xmm2
  2213. pxor %xmm0, %xmm2
  2214. pxor %xmm1, %xmm2
  2215. pxor %xmm7, %xmm2
  2216. pxor %xmm2, %xmm4
  2217. addl $16, %ecx
  2218. cmpl %edx, %ecx
  2219. jl L_AES_GCM_decrypt_aesni_calc_iv_16_loop
  2220. movl %ebx, %edx
  2221. cmpl %edx, %ecx
  2222. je L_AES_GCM_decrypt_aesni_calc_iv_done
  2223. L_AES_GCM_decrypt_aesni_calc_iv_lt16:
  2224. subq $16, %rsp
  2225. pxor %xmm8, %xmm8
  2226. xorl %ebx, %ebx
  2227. movdqu %xmm8, (%rsp)
  2228. L_AES_GCM_decrypt_aesni_calc_iv_loop:
  2229. movzbl (%rax,%rcx,1), %r13d
  2230. movb %r13b, (%rsp,%rbx,1)
  2231. incl %ecx
  2232. incl %ebx
  2233. cmpl %edx, %ecx
  2234. jl L_AES_GCM_decrypt_aesni_calc_iv_loop
  2235. movdqu (%rsp), %xmm8
  2236. addq $16, %rsp
  2237. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  2238. pxor %xmm8, %xmm4
  2239. pshufd $0x4e, %xmm4, %xmm1
  2240. pshufd $0x4e, %xmm5, %xmm2
  2241. movdqa %xmm5, %xmm3
  2242. movdqa %xmm5, %xmm0
  2243. pclmulqdq $0x11, %xmm4, %xmm3
  2244. pclmulqdq $0x00, %xmm4, %xmm0
  2245. pxor %xmm4, %xmm1
  2246. pxor %xmm5, %xmm2
  2247. pclmulqdq $0x00, %xmm2, %xmm1
  2248. pxor %xmm0, %xmm1
  2249. pxor %xmm3, %xmm1
  2250. movdqa %xmm1, %xmm2
  2251. movdqa %xmm0, %xmm7
  2252. movdqa %xmm3, %xmm4
  2253. pslldq $8, %xmm2
  2254. psrldq $8, %xmm1
  2255. pxor %xmm2, %xmm7
  2256. pxor %xmm1, %xmm4
  2257. movdqa %xmm7, %xmm0
  2258. movdqa %xmm4, %xmm1
  2259. psrld $31, %xmm0
  2260. psrld $31, %xmm1
  2261. pslld $0x01, %xmm7
  2262. pslld $0x01, %xmm4
  2263. movdqa %xmm0, %xmm2
  2264. pslldq $4, %xmm0
  2265. psrldq $12, %xmm2
  2266. pslldq $4, %xmm1
  2267. por %xmm2, %xmm4
  2268. por %xmm0, %xmm7
  2269. por %xmm1, %xmm4
  2270. movdqa %xmm7, %xmm0
  2271. movdqa %xmm7, %xmm1
  2272. movdqa %xmm7, %xmm2
  2273. pslld $31, %xmm0
  2274. pslld $30, %xmm1
  2275. pslld $25, %xmm2
  2276. pxor %xmm1, %xmm0
  2277. pxor %xmm2, %xmm0
  2278. movdqa %xmm0, %xmm1
  2279. psrldq $4, %xmm1
  2280. pslldq $12, %xmm0
  2281. pxor %xmm0, %xmm7
  2282. movdqa %xmm7, %xmm2
  2283. movdqa %xmm7, %xmm3
  2284. movdqa %xmm7, %xmm0
  2285. psrld $0x01, %xmm2
  2286. psrld $2, %xmm3
  2287. psrld $7, %xmm0
  2288. pxor %xmm3, %xmm2
  2289. pxor %xmm0, %xmm2
  2290. pxor %xmm1, %xmm2
  2291. pxor %xmm7, %xmm2
  2292. pxor %xmm2, %xmm4
  2293. L_AES_GCM_decrypt_aesni_calc_iv_done:
  2294. # T = Encrypt counter
  2295. pxor %xmm0, %xmm0
  2296. shll $3, %edx
  2297. pinsrq $0x00, %rdx, %xmm0
  2298. pxor %xmm0, %xmm4
  2299. pshufd $0x4e, %xmm4, %xmm1
  2300. pshufd $0x4e, %xmm5, %xmm2
  2301. movdqa %xmm5, %xmm3
  2302. movdqa %xmm5, %xmm0
  2303. pclmulqdq $0x11, %xmm4, %xmm3
  2304. pclmulqdq $0x00, %xmm4, %xmm0
  2305. pxor %xmm4, %xmm1
  2306. pxor %xmm5, %xmm2
  2307. pclmulqdq $0x00, %xmm2, %xmm1
  2308. pxor %xmm0, %xmm1
  2309. pxor %xmm3, %xmm1
  2310. movdqa %xmm1, %xmm2
  2311. movdqa %xmm0, %xmm7
  2312. movdqa %xmm3, %xmm4
  2313. pslldq $8, %xmm2
  2314. psrldq $8, %xmm1
  2315. pxor %xmm2, %xmm7
  2316. pxor %xmm1, %xmm4
  2317. movdqa %xmm7, %xmm0
  2318. movdqa %xmm4, %xmm1
  2319. psrld $31, %xmm0
  2320. psrld $31, %xmm1
  2321. pslld $0x01, %xmm7
  2322. pslld $0x01, %xmm4
  2323. movdqa %xmm0, %xmm2
  2324. pslldq $4, %xmm0
  2325. psrldq $12, %xmm2
  2326. pslldq $4, %xmm1
  2327. por %xmm2, %xmm4
  2328. por %xmm0, %xmm7
  2329. por %xmm1, %xmm4
  2330. movdqa %xmm7, %xmm0
  2331. movdqa %xmm7, %xmm1
  2332. movdqa %xmm7, %xmm2
  2333. pslld $31, %xmm0
  2334. pslld $30, %xmm1
  2335. pslld $25, %xmm2
  2336. pxor %xmm1, %xmm0
  2337. pxor %xmm2, %xmm0
  2338. movdqa %xmm0, %xmm1
  2339. psrldq $4, %xmm1
  2340. pslldq $12, %xmm0
  2341. pxor %xmm0, %xmm7
  2342. movdqa %xmm7, %xmm2
  2343. movdqa %xmm7, %xmm3
  2344. movdqa %xmm7, %xmm0
  2345. psrld $0x01, %xmm2
  2346. psrld $2, %xmm3
  2347. psrld $7, %xmm0
  2348. pxor %xmm3, %xmm2
  2349. pxor %xmm0, %xmm2
  2350. pxor %xmm1, %xmm2
  2351. pxor %xmm7, %xmm2
  2352. pxor %xmm2, %xmm4
  2353. pshufb L_aes_gcm_bswap_mask(%rip), %xmm4
  2354. # Encrypt counter
  2355. movdqa (%r15), %xmm8
  2356. pxor %xmm4, %xmm8
  2357. aesenc 16(%r15), %xmm8
  2358. aesenc 32(%r15), %xmm8
  2359. aesenc 48(%r15), %xmm8
  2360. aesenc 64(%r15), %xmm8
  2361. aesenc 80(%r15), %xmm8
  2362. aesenc 96(%r15), %xmm8
  2363. aesenc 112(%r15), %xmm8
  2364. aesenc 128(%r15), %xmm8
  2365. aesenc 144(%r15), %xmm8
  2366. cmpl $11, %r10d
  2367. movdqa 160(%r15), %xmm9
  2368. jl L_AES_GCM_decrypt_aesni_calc_iv_2_aesenc_avx_last
  2369. aesenc %xmm9, %xmm8
  2370. aesenc 176(%r15), %xmm8
  2371. cmpl $13, %r10d
  2372. movdqa 192(%r15), %xmm9
  2373. jl L_AES_GCM_decrypt_aesni_calc_iv_2_aesenc_avx_last
  2374. aesenc %xmm9, %xmm8
  2375. aesenc 208(%r15), %xmm8
  2376. movdqa 224(%r15), %xmm9
  2377. L_AES_GCM_decrypt_aesni_calc_iv_2_aesenc_avx_last:
  2378. aesenclast %xmm9, %xmm8
  2379. movdqu %xmm8, 144(%rsp)
  2380. L_AES_GCM_decrypt_aesni_iv_done:
  2381. # Additional authentication data
  2382. movl %r11d, %edx
  2383. cmpl $0x00, %edx
  2384. je L_AES_GCM_decrypt_aesni_calc_aad_done
  2385. xorl %ecx, %ecx
  2386. cmpl $16, %edx
  2387. jl L_AES_GCM_decrypt_aesni_calc_aad_lt16
  2388. andl $0xfffffff0, %edx
  2389. L_AES_GCM_decrypt_aesni_calc_aad_16_loop:
  2390. movdqu (%r12,%rcx,1), %xmm8
  2391. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  2392. pxor %xmm8, %xmm6
  2393. pshufd $0x4e, %xmm6, %xmm1
  2394. pshufd $0x4e, %xmm5, %xmm2
  2395. movdqa %xmm5, %xmm3
  2396. movdqa %xmm5, %xmm0
  2397. pclmulqdq $0x11, %xmm6, %xmm3
  2398. pclmulqdq $0x00, %xmm6, %xmm0
  2399. pxor %xmm6, %xmm1
  2400. pxor %xmm5, %xmm2
  2401. pclmulqdq $0x00, %xmm2, %xmm1
  2402. pxor %xmm0, %xmm1
  2403. pxor %xmm3, %xmm1
  2404. movdqa %xmm1, %xmm2
  2405. movdqa %xmm0, %xmm7
  2406. movdqa %xmm3, %xmm6
  2407. pslldq $8, %xmm2
  2408. psrldq $8, %xmm1
  2409. pxor %xmm2, %xmm7
  2410. pxor %xmm1, %xmm6
  2411. movdqa %xmm7, %xmm0
  2412. movdqa %xmm6, %xmm1
  2413. psrld $31, %xmm0
  2414. psrld $31, %xmm1
  2415. pslld $0x01, %xmm7
  2416. pslld $0x01, %xmm6
  2417. movdqa %xmm0, %xmm2
  2418. pslldq $4, %xmm0
  2419. psrldq $12, %xmm2
  2420. pslldq $4, %xmm1
  2421. por %xmm2, %xmm6
  2422. por %xmm0, %xmm7
  2423. por %xmm1, %xmm6
  2424. movdqa %xmm7, %xmm0
  2425. movdqa %xmm7, %xmm1
  2426. movdqa %xmm7, %xmm2
  2427. pslld $31, %xmm0
  2428. pslld $30, %xmm1
  2429. pslld $25, %xmm2
  2430. pxor %xmm1, %xmm0
  2431. pxor %xmm2, %xmm0
  2432. movdqa %xmm0, %xmm1
  2433. psrldq $4, %xmm1
  2434. pslldq $12, %xmm0
  2435. pxor %xmm0, %xmm7
  2436. movdqa %xmm7, %xmm2
  2437. movdqa %xmm7, %xmm3
  2438. movdqa %xmm7, %xmm0
  2439. psrld $0x01, %xmm2
  2440. psrld $2, %xmm3
  2441. psrld $7, %xmm0
  2442. pxor %xmm3, %xmm2
  2443. pxor %xmm0, %xmm2
  2444. pxor %xmm1, %xmm2
  2445. pxor %xmm7, %xmm2
  2446. pxor %xmm2, %xmm6
  2447. addl $16, %ecx
  2448. cmpl %edx, %ecx
  2449. jl L_AES_GCM_decrypt_aesni_calc_aad_16_loop
  2450. movl %r11d, %edx
  2451. cmpl %edx, %ecx
  2452. je L_AES_GCM_decrypt_aesni_calc_aad_done
  2453. L_AES_GCM_decrypt_aesni_calc_aad_lt16:
  2454. subq $16, %rsp
  2455. pxor %xmm8, %xmm8
  2456. xorl %ebx, %ebx
  2457. movdqu %xmm8, (%rsp)
  2458. L_AES_GCM_decrypt_aesni_calc_aad_loop:
  2459. movzbl (%r12,%rcx,1), %r13d
  2460. movb %r13b, (%rsp,%rbx,1)
  2461. incl %ecx
  2462. incl %ebx
  2463. cmpl %edx, %ecx
  2464. jl L_AES_GCM_decrypt_aesni_calc_aad_loop
  2465. movdqu (%rsp), %xmm8
  2466. addq $16, %rsp
  2467. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  2468. pxor %xmm8, %xmm6
  2469. pshufd $0x4e, %xmm6, %xmm1
  2470. pshufd $0x4e, %xmm5, %xmm2
  2471. movdqa %xmm5, %xmm3
  2472. movdqa %xmm5, %xmm0
  2473. pclmulqdq $0x11, %xmm6, %xmm3
  2474. pclmulqdq $0x00, %xmm6, %xmm0
  2475. pxor %xmm6, %xmm1
  2476. pxor %xmm5, %xmm2
  2477. pclmulqdq $0x00, %xmm2, %xmm1
  2478. pxor %xmm0, %xmm1
  2479. pxor %xmm3, %xmm1
  2480. movdqa %xmm1, %xmm2
  2481. movdqa %xmm0, %xmm7
  2482. movdqa %xmm3, %xmm6
  2483. pslldq $8, %xmm2
  2484. psrldq $8, %xmm1
  2485. pxor %xmm2, %xmm7
  2486. pxor %xmm1, %xmm6
  2487. movdqa %xmm7, %xmm0
  2488. movdqa %xmm6, %xmm1
  2489. psrld $31, %xmm0
  2490. psrld $31, %xmm1
  2491. pslld $0x01, %xmm7
  2492. pslld $0x01, %xmm6
  2493. movdqa %xmm0, %xmm2
  2494. pslldq $4, %xmm0
  2495. psrldq $12, %xmm2
  2496. pslldq $4, %xmm1
  2497. por %xmm2, %xmm6
  2498. por %xmm0, %xmm7
  2499. por %xmm1, %xmm6
  2500. movdqa %xmm7, %xmm0
  2501. movdqa %xmm7, %xmm1
  2502. movdqa %xmm7, %xmm2
  2503. pslld $31, %xmm0
  2504. pslld $30, %xmm1
  2505. pslld $25, %xmm2
  2506. pxor %xmm1, %xmm0
  2507. pxor %xmm2, %xmm0
  2508. movdqa %xmm0, %xmm1
  2509. psrldq $4, %xmm1
  2510. pslldq $12, %xmm0
  2511. pxor %xmm0, %xmm7
  2512. movdqa %xmm7, %xmm2
  2513. movdqa %xmm7, %xmm3
  2514. movdqa %xmm7, %xmm0
  2515. psrld $0x01, %xmm2
  2516. psrld $2, %xmm3
  2517. psrld $7, %xmm0
  2518. pxor %xmm3, %xmm2
  2519. pxor %xmm0, %xmm2
  2520. pxor %xmm1, %xmm2
  2521. pxor %xmm7, %xmm2
  2522. pxor %xmm2, %xmm6
  2523. L_AES_GCM_decrypt_aesni_calc_aad_done:
  2524. # Calculate counter and H
  2525. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm4
  2526. movdqa %xmm5, %xmm9
  2527. paddd L_aes_gcm_one(%rip), %xmm4
  2528. movdqa %xmm5, %xmm8
  2529. movdqu %xmm4, 128(%rsp)
  2530. psrlq $63, %xmm9
  2531. psllq $0x01, %xmm8
  2532. pslldq $8, %xmm9
  2533. por %xmm9, %xmm8
  2534. pshufd $0xff, %xmm5, %xmm5
  2535. psrad $31, %xmm5
  2536. pand L_aes_gcm_mod2_128(%rip), %xmm5
  2537. pxor %xmm8, %xmm5
  2538. xorl %ebx, %ebx
  2539. cmpl $0x80, %r9d
  2540. movl %r9d, %r13d
  2541. jl L_AES_GCM_decrypt_aesni_done_128
  2542. andl $0xffffff80, %r13d
  2543. movdqa %xmm6, %xmm2
  2544. # H ^ 1
  2545. movdqu %xmm5, (%rsp)
  2546. # H ^ 2
  2547. pshufd $0x4e, %xmm5, %xmm9
  2548. pshufd $0x4e, %xmm5, %xmm10
  2549. movdqa %xmm5, %xmm11
  2550. movdqa %xmm5, %xmm8
  2551. pclmulqdq $0x11, %xmm5, %xmm11
  2552. pclmulqdq $0x00, %xmm5, %xmm8
  2553. pxor %xmm5, %xmm9
  2554. pxor %xmm5, %xmm10
  2555. pclmulqdq $0x00, %xmm10, %xmm9
  2556. pxor %xmm8, %xmm9
  2557. pxor %xmm11, %xmm9
  2558. movdqa %xmm9, %xmm10
  2559. movdqa %xmm11, %xmm0
  2560. pslldq $8, %xmm10
  2561. psrldq $8, %xmm9
  2562. pxor %xmm10, %xmm8
  2563. pxor %xmm9, %xmm0
  2564. movdqa %xmm8, %xmm12
  2565. movdqa %xmm8, %xmm13
  2566. movdqa %xmm8, %xmm14
  2567. pslld $31, %xmm12
  2568. pslld $30, %xmm13
  2569. pslld $25, %xmm14
  2570. pxor %xmm13, %xmm12
  2571. pxor %xmm14, %xmm12
  2572. movdqa %xmm12, %xmm13
  2573. psrldq $4, %xmm13
  2574. pslldq $12, %xmm12
  2575. pxor %xmm12, %xmm8
  2576. movdqa %xmm8, %xmm14
  2577. movdqa %xmm8, %xmm10
  2578. movdqa %xmm8, %xmm9
  2579. psrld $0x01, %xmm14
  2580. psrld $2, %xmm10
  2581. psrld $7, %xmm9
  2582. pxor %xmm10, %xmm14
  2583. pxor %xmm9, %xmm14
  2584. pxor %xmm13, %xmm14
  2585. pxor %xmm8, %xmm14
  2586. pxor %xmm14, %xmm0
  2587. movdqu %xmm0, 16(%rsp)
  2588. # H ^ 3
  2589. pshufd $0x4e, %xmm5, %xmm9
  2590. pshufd $0x4e, %xmm0, %xmm10
  2591. movdqa %xmm0, %xmm11
  2592. movdqa %xmm0, %xmm8
  2593. pclmulqdq $0x11, %xmm5, %xmm11
  2594. pclmulqdq $0x00, %xmm5, %xmm8
  2595. pxor %xmm5, %xmm9
  2596. pxor %xmm0, %xmm10
  2597. pclmulqdq $0x00, %xmm10, %xmm9
  2598. pxor %xmm8, %xmm9
  2599. pxor %xmm11, %xmm9
  2600. movdqa %xmm9, %xmm10
  2601. movdqa %xmm11, %xmm1
  2602. pslldq $8, %xmm10
  2603. psrldq $8, %xmm9
  2604. pxor %xmm10, %xmm8
  2605. pxor %xmm9, %xmm1
  2606. movdqa %xmm8, %xmm12
  2607. movdqa %xmm8, %xmm13
  2608. movdqa %xmm8, %xmm14
  2609. pslld $31, %xmm12
  2610. pslld $30, %xmm13
  2611. pslld $25, %xmm14
  2612. pxor %xmm13, %xmm12
  2613. pxor %xmm14, %xmm12
  2614. movdqa %xmm12, %xmm13
  2615. psrldq $4, %xmm13
  2616. pslldq $12, %xmm12
  2617. pxor %xmm12, %xmm8
  2618. movdqa %xmm8, %xmm14
  2619. movdqa %xmm8, %xmm10
  2620. movdqa %xmm8, %xmm9
  2621. psrld $0x01, %xmm14
  2622. psrld $2, %xmm10
  2623. psrld $7, %xmm9
  2624. pxor %xmm10, %xmm14
  2625. pxor %xmm9, %xmm14
  2626. pxor %xmm13, %xmm14
  2627. pxor %xmm8, %xmm14
  2628. pxor %xmm14, %xmm1
  2629. movdqu %xmm1, 32(%rsp)
  2630. # H ^ 4
  2631. pshufd $0x4e, %xmm0, %xmm9
  2632. pshufd $0x4e, %xmm0, %xmm10
  2633. movdqa %xmm0, %xmm11
  2634. movdqa %xmm0, %xmm8
  2635. pclmulqdq $0x11, %xmm0, %xmm11
  2636. pclmulqdq $0x00, %xmm0, %xmm8
  2637. pxor %xmm0, %xmm9
  2638. pxor %xmm0, %xmm10
  2639. pclmulqdq $0x00, %xmm10, %xmm9
  2640. pxor %xmm8, %xmm9
  2641. pxor %xmm11, %xmm9
  2642. movdqa %xmm9, %xmm10
  2643. movdqa %xmm11, %xmm3
  2644. pslldq $8, %xmm10
  2645. psrldq $8, %xmm9
  2646. pxor %xmm10, %xmm8
  2647. pxor %xmm9, %xmm3
  2648. movdqa %xmm8, %xmm12
  2649. movdqa %xmm8, %xmm13
  2650. movdqa %xmm8, %xmm14
  2651. pslld $31, %xmm12
  2652. pslld $30, %xmm13
  2653. pslld $25, %xmm14
  2654. pxor %xmm13, %xmm12
  2655. pxor %xmm14, %xmm12
  2656. movdqa %xmm12, %xmm13
  2657. psrldq $4, %xmm13
  2658. pslldq $12, %xmm12
  2659. pxor %xmm12, %xmm8
  2660. movdqa %xmm8, %xmm14
  2661. movdqa %xmm8, %xmm10
  2662. movdqa %xmm8, %xmm9
  2663. psrld $0x01, %xmm14
  2664. psrld $2, %xmm10
  2665. psrld $7, %xmm9
  2666. pxor %xmm10, %xmm14
  2667. pxor %xmm9, %xmm14
  2668. pxor %xmm13, %xmm14
  2669. pxor %xmm8, %xmm14
  2670. pxor %xmm14, %xmm3
  2671. movdqu %xmm3, 48(%rsp)
  2672. # H ^ 5
  2673. pshufd $0x4e, %xmm0, %xmm9
  2674. pshufd $0x4e, %xmm1, %xmm10
  2675. movdqa %xmm1, %xmm11
  2676. movdqa %xmm1, %xmm8
  2677. pclmulqdq $0x11, %xmm0, %xmm11
  2678. pclmulqdq $0x00, %xmm0, %xmm8
  2679. pxor %xmm0, %xmm9
  2680. pxor %xmm1, %xmm10
  2681. pclmulqdq $0x00, %xmm10, %xmm9
  2682. pxor %xmm8, %xmm9
  2683. pxor %xmm11, %xmm9
  2684. movdqa %xmm9, %xmm10
  2685. movdqa %xmm11, %xmm7
  2686. pslldq $8, %xmm10
  2687. psrldq $8, %xmm9
  2688. pxor %xmm10, %xmm8
  2689. pxor %xmm9, %xmm7
  2690. movdqa %xmm8, %xmm12
  2691. movdqa %xmm8, %xmm13
  2692. movdqa %xmm8, %xmm14
  2693. pslld $31, %xmm12
  2694. pslld $30, %xmm13
  2695. pslld $25, %xmm14
  2696. pxor %xmm13, %xmm12
  2697. pxor %xmm14, %xmm12
  2698. movdqa %xmm12, %xmm13
  2699. psrldq $4, %xmm13
  2700. pslldq $12, %xmm12
  2701. pxor %xmm12, %xmm8
  2702. movdqa %xmm8, %xmm14
  2703. movdqa %xmm8, %xmm10
  2704. movdqa %xmm8, %xmm9
  2705. psrld $0x01, %xmm14
  2706. psrld $2, %xmm10
  2707. psrld $7, %xmm9
  2708. pxor %xmm10, %xmm14
  2709. pxor %xmm9, %xmm14
  2710. pxor %xmm13, %xmm14
  2711. pxor %xmm8, %xmm14
  2712. pxor %xmm14, %xmm7
  2713. movdqu %xmm7, 64(%rsp)
  2714. # H ^ 6
  2715. pshufd $0x4e, %xmm1, %xmm9
  2716. pshufd $0x4e, %xmm1, %xmm10
  2717. movdqa %xmm1, %xmm11
  2718. movdqa %xmm1, %xmm8
  2719. pclmulqdq $0x11, %xmm1, %xmm11
  2720. pclmulqdq $0x00, %xmm1, %xmm8
  2721. pxor %xmm1, %xmm9
  2722. pxor %xmm1, %xmm10
  2723. pclmulqdq $0x00, %xmm10, %xmm9
  2724. pxor %xmm8, %xmm9
  2725. pxor %xmm11, %xmm9
  2726. movdqa %xmm9, %xmm10
  2727. movdqa %xmm11, %xmm7
  2728. pslldq $8, %xmm10
  2729. psrldq $8, %xmm9
  2730. pxor %xmm10, %xmm8
  2731. pxor %xmm9, %xmm7
  2732. movdqa %xmm8, %xmm12
  2733. movdqa %xmm8, %xmm13
  2734. movdqa %xmm8, %xmm14
  2735. pslld $31, %xmm12
  2736. pslld $30, %xmm13
  2737. pslld $25, %xmm14
  2738. pxor %xmm13, %xmm12
  2739. pxor %xmm14, %xmm12
  2740. movdqa %xmm12, %xmm13
  2741. psrldq $4, %xmm13
  2742. pslldq $12, %xmm12
  2743. pxor %xmm12, %xmm8
  2744. movdqa %xmm8, %xmm14
  2745. movdqa %xmm8, %xmm10
  2746. movdqa %xmm8, %xmm9
  2747. psrld $0x01, %xmm14
  2748. psrld $2, %xmm10
  2749. psrld $7, %xmm9
  2750. pxor %xmm10, %xmm14
  2751. pxor %xmm9, %xmm14
  2752. pxor %xmm13, %xmm14
  2753. pxor %xmm8, %xmm14
  2754. pxor %xmm14, %xmm7
  2755. movdqu %xmm7, 80(%rsp)
  2756. # H ^ 7
  2757. pshufd $0x4e, %xmm1, %xmm9
  2758. pshufd $0x4e, %xmm3, %xmm10
  2759. movdqa %xmm3, %xmm11
  2760. movdqa %xmm3, %xmm8
  2761. pclmulqdq $0x11, %xmm1, %xmm11
  2762. pclmulqdq $0x00, %xmm1, %xmm8
  2763. pxor %xmm1, %xmm9
  2764. pxor %xmm3, %xmm10
  2765. pclmulqdq $0x00, %xmm10, %xmm9
  2766. pxor %xmm8, %xmm9
  2767. pxor %xmm11, %xmm9
  2768. movdqa %xmm9, %xmm10
  2769. movdqa %xmm11, %xmm7
  2770. pslldq $8, %xmm10
  2771. psrldq $8, %xmm9
  2772. pxor %xmm10, %xmm8
  2773. pxor %xmm9, %xmm7
  2774. movdqa %xmm8, %xmm12
  2775. movdqa %xmm8, %xmm13
  2776. movdqa %xmm8, %xmm14
  2777. pslld $31, %xmm12
  2778. pslld $30, %xmm13
  2779. pslld $25, %xmm14
  2780. pxor %xmm13, %xmm12
  2781. pxor %xmm14, %xmm12
  2782. movdqa %xmm12, %xmm13
  2783. psrldq $4, %xmm13
  2784. pslldq $12, %xmm12
  2785. pxor %xmm12, %xmm8
  2786. movdqa %xmm8, %xmm14
  2787. movdqa %xmm8, %xmm10
  2788. movdqa %xmm8, %xmm9
  2789. psrld $0x01, %xmm14
  2790. psrld $2, %xmm10
  2791. psrld $7, %xmm9
  2792. pxor %xmm10, %xmm14
  2793. pxor %xmm9, %xmm14
  2794. pxor %xmm13, %xmm14
  2795. pxor %xmm8, %xmm14
  2796. pxor %xmm14, %xmm7
  2797. movdqu %xmm7, 96(%rsp)
  2798. # H ^ 8
  2799. pshufd $0x4e, %xmm3, %xmm9
  2800. pshufd $0x4e, %xmm3, %xmm10
  2801. movdqa %xmm3, %xmm11
  2802. movdqa %xmm3, %xmm8
  2803. pclmulqdq $0x11, %xmm3, %xmm11
  2804. pclmulqdq $0x00, %xmm3, %xmm8
  2805. pxor %xmm3, %xmm9
  2806. pxor %xmm3, %xmm10
  2807. pclmulqdq $0x00, %xmm10, %xmm9
  2808. pxor %xmm8, %xmm9
  2809. pxor %xmm11, %xmm9
  2810. movdqa %xmm9, %xmm10
  2811. movdqa %xmm11, %xmm7
  2812. pslldq $8, %xmm10
  2813. psrldq $8, %xmm9
  2814. pxor %xmm10, %xmm8
  2815. pxor %xmm9, %xmm7
  2816. movdqa %xmm8, %xmm12
  2817. movdqa %xmm8, %xmm13
  2818. movdqa %xmm8, %xmm14
  2819. pslld $31, %xmm12
  2820. pslld $30, %xmm13
  2821. pslld $25, %xmm14
  2822. pxor %xmm13, %xmm12
  2823. pxor %xmm14, %xmm12
  2824. movdqa %xmm12, %xmm13
  2825. psrldq $4, %xmm13
  2826. pslldq $12, %xmm12
  2827. pxor %xmm12, %xmm8
  2828. movdqa %xmm8, %xmm14
  2829. movdqa %xmm8, %xmm10
  2830. movdqa %xmm8, %xmm9
  2831. psrld $0x01, %xmm14
  2832. psrld $2, %xmm10
  2833. psrld $7, %xmm9
  2834. pxor %xmm10, %xmm14
  2835. pxor %xmm9, %xmm14
  2836. pxor %xmm13, %xmm14
  2837. pxor %xmm8, %xmm14
  2838. pxor %xmm14, %xmm7
  2839. movdqu %xmm7, 112(%rsp)
  2840. L_AES_GCM_decrypt_aesni_ghash_128:
  2841. leaq (%rdi,%rbx,1), %rcx
  2842. leaq (%rsi,%rbx,1), %rdx
  2843. movdqu 128(%rsp), %xmm8
  2844. movdqa L_aes_gcm_bswap_epi64(%rip), %xmm1
  2845. movdqa %xmm8, %xmm0
  2846. pshufb %xmm1, %xmm8
  2847. movdqa %xmm0, %xmm9
  2848. paddd L_aes_gcm_one(%rip), %xmm9
  2849. pshufb %xmm1, %xmm9
  2850. movdqa %xmm0, %xmm10
  2851. paddd L_aes_gcm_two(%rip), %xmm10
  2852. pshufb %xmm1, %xmm10
  2853. movdqa %xmm0, %xmm11
  2854. paddd L_aes_gcm_three(%rip), %xmm11
  2855. pshufb %xmm1, %xmm11
  2856. movdqa %xmm0, %xmm12
  2857. paddd L_aes_gcm_four(%rip), %xmm12
  2858. pshufb %xmm1, %xmm12
  2859. movdqa %xmm0, %xmm13
  2860. paddd L_aes_gcm_five(%rip), %xmm13
  2861. pshufb %xmm1, %xmm13
  2862. movdqa %xmm0, %xmm14
  2863. paddd L_aes_gcm_six(%rip), %xmm14
  2864. pshufb %xmm1, %xmm14
  2865. movdqa %xmm0, %xmm15
  2866. paddd L_aes_gcm_seven(%rip), %xmm15
  2867. pshufb %xmm1, %xmm15
  2868. paddd L_aes_gcm_eight(%rip), %xmm0
  2869. movdqa (%r15), %xmm7
  2870. movdqu %xmm0, 128(%rsp)
  2871. pxor %xmm7, %xmm8
  2872. pxor %xmm7, %xmm9
  2873. pxor %xmm7, %xmm10
  2874. pxor %xmm7, %xmm11
  2875. pxor %xmm7, %xmm12
  2876. pxor %xmm7, %xmm13
  2877. pxor %xmm7, %xmm14
  2878. pxor %xmm7, %xmm15
  2879. movdqu 112(%rsp), %xmm7
  2880. movdqu (%rcx), %xmm0
  2881. aesenc 16(%r15), %xmm8
  2882. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  2883. pxor %xmm2, %xmm0
  2884. pshufd $0x4e, %xmm7, %xmm1
  2885. pshufd $0x4e, %xmm0, %xmm5
  2886. pxor %xmm7, %xmm1
  2887. pxor %xmm0, %xmm5
  2888. movdqa %xmm0, %xmm3
  2889. pclmulqdq $0x11, %xmm7, %xmm3
  2890. aesenc 16(%r15), %xmm9
  2891. aesenc 16(%r15), %xmm10
  2892. movdqa %xmm0, %xmm2
  2893. pclmulqdq $0x00, %xmm7, %xmm2
  2894. aesenc 16(%r15), %xmm11
  2895. aesenc 16(%r15), %xmm12
  2896. pclmulqdq $0x00, %xmm5, %xmm1
  2897. aesenc 16(%r15), %xmm13
  2898. aesenc 16(%r15), %xmm14
  2899. aesenc 16(%r15), %xmm15
  2900. pxor %xmm2, %xmm1
  2901. pxor %xmm3, %xmm1
  2902. movdqu 96(%rsp), %xmm7
  2903. movdqu 16(%rcx), %xmm0
  2904. pshufd $0x4e, %xmm7, %xmm4
  2905. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  2906. aesenc 32(%r15), %xmm8
  2907. pxor %xmm7, %xmm4
  2908. pshufd $0x4e, %xmm0, %xmm5
  2909. pxor %xmm0, %xmm5
  2910. movdqa %xmm0, %xmm6
  2911. pclmulqdq $0x11, %xmm7, %xmm6
  2912. aesenc 32(%r15), %xmm9
  2913. aesenc 32(%r15), %xmm10
  2914. pclmulqdq $0x00, %xmm0, %xmm7
  2915. aesenc 32(%r15), %xmm11
  2916. aesenc 32(%r15), %xmm12
  2917. pclmulqdq $0x00, %xmm5, %xmm4
  2918. aesenc 32(%r15), %xmm13
  2919. aesenc 32(%r15), %xmm14
  2920. aesenc 32(%r15), %xmm15
  2921. pxor %xmm7, %xmm1
  2922. pxor %xmm7, %xmm2
  2923. pxor %xmm6, %xmm1
  2924. pxor %xmm6, %xmm3
  2925. pxor %xmm4, %xmm1
  2926. movdqu 80(%rsp), %xmm7
  2927. movdqu 32(%rcx), %xmm0
  2928. pshufd $0x4e, %xmm7, %xmm4
  2929. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  2930. aesenc 48(%r15), %xmm8
  2931. pxor %xmm7, %xmm4
  2932. pshufd $0x4e, %xmm0, %xmm5
  2933. pxor %xmm0, %xmm5
  2934. movdqa %xmm0, %xmm6
  2935. pclmulqdq $0x11, %xmm7, %xmm6
  2936. aesenc 48(%r15), %xmm9
  2937. aesenc 48(%r15), %xmm10
  2938. pclmulqdq $0x00, %xmm0, %xmm7
  2939. aesenc 48(%r15), %xmm11
  2940. aesenc 48(%r15), %xmm12
  2941. pclmulqdq $0x00, %xmm5, %xmm4
  2942. aesenc 48(%r15), %xmm13
  2943. aesenc 48(%r15), %xmm14
  2944. aesenc 48(%r15), %xmm15
  2945. pxor %xmm7, %xmm1
  2946. pxor %xmm7, %xmm2
  2947. pxor %xmm6, %xmm1
  2948. pxor %xmm6, %xmm3
  2949. pxor %xmm4, %xmm1
  2950. movdqu 64(%rsp), %xmm7
  2951. movdqu 48(%rcx), %xmm0
  2952. pshufd $0x4e, %xmm7, %xmm4
  2953. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  2954. aesenc 64(%r15), %xmm8
  2955. pxor %xmm7, %xmm4
  2956. pshufd $0x4e, %xmm0, %xmm5
  2957. pxor %xmm0, %xmm5
  2958. movdqa %xmm0, %xmm6
  2959. pclmulqdq $0x11, %xmm7, %xmm6
  2960. aesenc 64(%r15), %xmm9
  2961. aesenc 64(%r15), %xmm10
  2962. pclmulqdq $0x00, %xmm0, %xmm7
  2963. aesenc 64(%r15), %xmm11
  2964. aesenc 64(%r15), %xmm12
  2965. pclmulqdq $0x00, %xmm5, %xmm4
  2966. aesenc 64(%r15), %xmm13
  2967. aesenc 64(%r15), %xmm14
  2968. aesenc 64(%r15), %xmm15
  2969. pxor %xmm7, %xmm1
  2970. pxor %xmm7, %xmm2
  2971. pxor %xmm6, %xmm1
  2972. pxor %xmm6, %xmm3
  2973. pxor %xmm4, %xmm1
  2974. movdqu 48(%rsp), %xmm7
  2975. movdqu 64(%rcx), %xmm0
  2976. pshufd $0x4e, %xmm7, %xmm4
  2977. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  2978. aesenc 80(%r15), %xmm8
  2979. pxor %xmm7, %xmm4
  2980. pshufd $0x4e, %xmm0, %xmm5
  2981. pxor %xmm0, %xmm5
  2982. movdqa %xmm0, %xmm6
  2983. pclmulqdq $0x11, %xmm7, %xmm6
  2984. aesenc 80(%r15), %xmm9
  2985. aesenc 80(%r15), %xmm10
  2986. pclmulqdq $0x00, %xmm0, %xmm7
  2987. aesenc 80(%r15), %xmm11
  2988. aesenc 80(%r15), %xmm12
  2989. pclmulqdq $0x00, %xmm5, %xmm4
  2990. aesenc 80(%r15), %xmm13
  2991. aesenc 80(%r15), %xmm14
  2992. aesenc 80(%r15), %xmm15
  2993. pxor %xmm7, %xmm1
  2994. pxor %xmm7, %xmm2
  2995. pxor %xmm6, %xmm1
  2996. pxor %xmm6, %xmm3
  2997. pxor %xmm4, %xmm1
  2998. movdqu 32(%rsp), %xmm7
  2999. movdqu 80(%rcx), %xmm0
  3000. pshufd $0x4e, %xmm7, %xmm4
  3001. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  3002. aesenc 96(%r15), %xmm8
  3003. pxor %xmm7, %xmm4
  3004. pshufd $0x4e, %xmm0, %xmm5
  3005. pxor %xmm0, %xmm5
  3006. movdqa %xmm0, %xmm6
  3007. pclmulqdq $0x11, %xmm7, %xmm6
  3008. aesenc 96(%r15), %xmm9
  3009. aesenc 96(%r15), %xmm10
  3010. pclmulqdq $0x00, %xmm0, %xmm7
  3011. aesenc 96(%r15), %xmm11
  3012. aesenc 96(%r15), %xmm12
  3013. pclmulqdq $0x00, %xmm5, %xmm4
  3014. aesenc 96(%r15), %xmm13
  3015. aesenc 96(%r15), %xmm14
  3016. aesenc 96(%r15), %xmm15
  3017. pxor %xmm7, %xmm1
  3018. pxor %xmm7, %xmm2
  3019. pxor %xmm6, %xmm1
  3020. pxor %xmm6, %xmm3
  3021. pxor %xmm4, %xmm1
  3022. movdqu 16(%rsp), %xmm7
  3023. movdqu 96(%rcx), %xmm0
  3024. pshufd $0x4e, %xmm7, %xmm4
  3025. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  3026. aesenc 112(%r15), %xmm8
  3027. pxor %xmm7, %xmm4
  3028. pshufd $0x4e, %xmm0, %xmm5
  3029. pxor %xmm0, %xmm5
  3030. movdqa %xmm0, %xmm6
  3031. pclmulqdq $0x11, %xmm7, %xmm6
  3032. aesenc 112(%r15), %xmm9
  3033. aesenc 112(%r15), %xmm10
  3034. pclmulqdq $0x00, %xmm0, %xmm7
  3035. aesenc 112(%r15), %xmm11
  3036. aesenc 112(%r15), %xmm12
  3037. pclmulqdq $0x00, %xmm5, %xmm4
  3038. aesenc 112(%r15), %xmm13
  3039. aesenc 112(%r15), %xmm14
  3040. aesenc 112(%r15), %xmm15
  3041. pxor %xmm7, %xmm1
  3042. pxor %xmm7, %xmm2
  3043. pxor %xmm6, %xmm1
  3044. pxor %xmm6, %xmm3
  3045. pxor %xmm4, %xmm1
  3046. movdqu (%rsp), %xmm7
  3047. movdqu 112(%rcx), %xmm0
  3048. pshufd $0x4e, %xmm7, %xmm4
  3049. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  3050. aesenc 128(%r15), %xmm8
  3051. pxor %xmm7, %xmm4
  3052. pshufd $0x4e, %xmm0, %xmm5
  3053. pxor %xmm0, %xmm5
  3054. movdqa %xmm0, %xmm6
  3055. pclmulqdq $0x11, %xmm7, %xmm6
  3056. aesenc 128(%r15), %xmm9
  3057. aesenc 128(%r15), %xmm10
  3058. pclmulqdq $0x00, %xmm0, %xmm7
  3059. aesenc 128(%r15), %xmm11
  3060. aesenc 128(%r15), %xmm12
  3061. pclmulqdq $0x00, %xmm5, %xmm4
  3062. aesenc 128(%r15), %xmm13
  3063. aesenc 128(%r15), %xmm14
  3064. aesenc 128(%r15), %xmm15
  3065. pxor %xmm7, %xmm1
  3066. pxor %xmm7, %xmm2
  3067. pxor %xmm6, %xmm1
  3068. pxor %xmm6, %xmm3
  3069. pxor %xmm4, %xmm1
  3070. movdqa %xmm1, %xmm5
  3071. psrldq $8, %xmm1
  3072. pslldq $8, %xmm5
  3073. aesenc 144(%r15), %xmm8
  3074. pxor %xmm5, %xmm2
  3075. pxor %xmm1, %xmm3
  3076. movdqa %xmm2, %xmm7
  3077. movdqa %xmm2, %xmm4
  3078. movdqa %xmm2, %xmm5
  3079. aesenc 144(%r15), %xmm9
  3080. pslld $31, %xmm7
  3081. pslld $30, %xmm4
  3082. pslld $25, %xmm5
  3083. aesenc 144(%r15), %xmm10
  3084. pxor %xmm4, %xmm7
  3085. pxor %xmm5, %xmm7
  3086. aesenc 144(%r15), %xmm11
  3087. movdqa %xmm7, %xmm4
  3088. pslldq $12, %xmm7
  3089. psrldq $4, %xmm4
  3090. aesenc 144(%r15), %xmm12
  3091. pxor %xmm7, %xmm2
  3092. movdqa %xmm2, %xmm5
  3093. movdqa %xmm2, %xmm1
  3094. movdqa %xmm2, %xmm0
  3095. aesenc 144(%r15), %xmm13
  3096. psrld $0x01, %xmm5
  3097. psrld $2, %xmm1
  3098. psrld $7, %xmm0
  3099. aesenc 144(%r15), %xmm14
  3100. pxor %xmm1, %xmm5
  3101. pxor %xmm0, %xmm5
  3102. aesenc 144(%r15), %xmm15
  3103. pxor %xmm4, %xmm5
  3104. pxor %xmm5, %xmm2
  3105. pxor %xmm3, %xmm2
  3106. cmpl $11, %r10d
  3107. movdqa 160(%r15), %xmm7
  3108. jl L_AES_GCM_decrypt_aesni_aesenc_128_ghash_avx_done
  3109. aesenc %xmm7, %xmm8
  3110. aesenc %xmm7, %xmm9
  3111. aesenc %xmm7, %xmm10
  3112. aesenc %xmm7, %xmm11
  3113. aesenc %xmm7, %xmm12
  3114. aesenc %xmm7, %xmm13
  3115. aesenc %xmm7, %xmm14
  3116. aesenc %xmm7, %xmm15
  3117. movdqa 176(%r15), %xmm7
  3118. aesenc %xmm7, %xmm8
  3119. aesenc %xmm7, %xmm9
  3120. aesenc %xmm7, %xmm10
  3121. aesenc %xmm7, %xmm11
  3122. aesenc %xmm7, %xmm12
  3123. aesenc %xmm7, %xmm13
  3124. aesenc %xmm7, %xmm14
  3125. aesenc %xmm7, %xmm15
  3126. cmpl $13, %r10d
  3127. movdqa 192(%r15), %xmm7
  3128. jl L_AES_GCM_decrypt_aesni_aesenc_128_ghash_avx_done
  3129. aesenc %xmm7, %xmm8
  3130. aesenc %xmm7, %xmm9
  3131. aesenc %xmm7, %xmm10
  3132. aesenc %xmm7, %xmm11
  3133. aesenc %xmm7, %xmm12
  3134. aesenc %xmm7, %xmm13
  3135. aesenc %xmm7, %xmm14
  3136. aesenc %xmm7, %xmm15
  3137. movdqa 208(%r15), %xmm7
  3138. aesenc %xmm7, %xmm8
  3139. aesenc %xmm7, %xmm9
  3140. aesenc %xmm7, %xmm10
  3141. aesenc %xmm7, %xmm11
  3142. aesenc %xmm7, %xmm12
  3143. aesenc %xmm7, %xmm13
  3144. aesenc %xmm7, %xmm14
  3145. aesenc %xmm7, %xmm15
  3146. movdqa 224(%r15), %xmm7
  3147. L_AES_GCM_decrypt_aesni_aesenc_128_ghash_avx_done:
  3148. aesenclast %xmm7, %xmm8
  3149. aesenclast %xmm7, %xmm9
  3150. movdqu (%rcx), %xmm0
  3151. movdqu 16(%rcx), %xmm1
  3152. pxor %xmm0, %xmm8
  3153. pxor %xmm1, %xmm9
  3154. movdqu %xmm8, (%rdx)
  3155. movdqu %xmm9, 16(%rdx)
  3156. aesenclast %xmm7, %xmm10
  3157. aesenclast %xmm7, %xmm11
  3158. movdqu 32(%rcx), %xmm0
  3159. movdqu 48(%rcx), %xmm1
  3160. pxor %xmm0, %xmm10
  3161. pxor %xmm1, %xmm11
  3162. movdqu %xmm10, 32(%rdx)
  3163. movdqu %xmm11, 48(%rdx)
  3164. aesenclast %xmm7, %xmm12
  3165. aesenclast %xmm7, %xmm13
  3166. movdqu 64(%rcx), %xmm0
  3167. movdqu 80(%rcx), %xmm1
  3168. pxor %xmm0, %xmm12
  3169. pxor %xmm1, %xmm13
  3170. movdqu %xmm12, 64(%rdx)
  3171. movdqu %xmm13, 80(%rdx)
  3172. aesenclast %xmm7, %xmm14
  3173. aesenclast %xmm7, %xmm15
  3174. movdqu 96(%rcx), %xmm0
  3175. movdqu 112(%rcx), %xmm1
  3176. pxor %xmm0, %xmm14
  3177. pxor %xmm1, %xmm15
  3178. movdqu %xmm14, 96(%rdx)
  3179. movdqu %xmm15, 112(%rdx)
  3180. addl $0x80, %ebx
  3181. cmpl %r13d, %ebx
  3182. jl L_AES_GCM_decrypt_aesni_ghash_128
  3183. movdqa %xmm2, %xmm6
  3184. movdqu (%rsp), %xmm5
  3185. L_AES_GCM_decrypt_aesni_done_128:
  3186. movl %r9d, %edx
  3187. cmpl %edx, %ebx
  3188. jge L_AES_GCM_decrypt_aesni_done_dec
  3189. movl %r9d, %r13d
  3190. andl $0xfffffff0, %r13d
  3191. cmpl %r13d, %ebx
  3192. jge L_AES_GCM_decrypt_aesni_last_block_done
  3193. L_AES_GCM_decrypt_aesni_last_block_start:
  3194. leaq (%rdi,%rbx,1), %rcx
  3195. leaq (%rsi,%rbx,1), %rdx
  3196. movdqu (%rcx), %xmm1
  3197. movdqa %xmm5, %xmm0
  3198. pshufb L_aes_gcm_bswap_mask(%rip), %xmm1
  3199. pxor %xmm6, %xmm1
  3200. movdqu 128(%rsp), %xmm8
  3201. movdqa %xmm8, %xmm9
  3202. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm8
  3203. paddd L_aes_gcm_one(%rip), %xmm9
  3204. pxor (%r15), %xmm8
  3205. movdqu %xmm9, 128(%rsp)
  3206. movdqa %xmm1, %xmm10
  3207. pclmulqdq $16, %xmm0, %xmm10
  3208. aesenc 16(%r15), %xmm8
  3209. aesenc 32(%r15), %xmm8
  3210. movdqa %xmm1, %xmm11
  3211. pclmulqdq $0x01, %xmm0, %xmm11
  3212. aesenc 48(%r15), %xmm8
  3213. aesenc 64(%r15), %xmm8
  3214. movdqa %xmm1, %xmm12
  3215. pclmulqdq $0x00, %xmm0, %xmm12
  3216. aesenc 80(%r15), %xmm8
  3217. movdqa %xmm1, %xmm1
  3218. pclmulqdq $0x11, %xmm0, %xmm1
  3219. aesenc 96(%r15), %xmm8
  3220. pxor %xmm11, %xmm10
  3221. movdqa %xmm10, %xmm2
  3222. psrldq $8, %xmm10
  3223. pslldq $8, %xmm2
  3224. aesenc 112(%r15), %xmm8
  3225. movdqa %xmm1, %xmm3
  3226. pxor %xmm12, %xmm2
  3227. pxor %xmm10, %xmm3
  3228. movdqa L_aes_gcm_mod2_128(%rip), %xmm0
  3229. movdqa %xmm2, %xmm11
  3230. pclmulqdq $16, %xmm0, %xmm11
  3231. aesenc 128(%r15), %xmm8
  3232. pshufd $0x4e, %xmm2, %xmm10
  3233. pxor %xmm11, %xmm10
  3234. movdqa %xmm10, %xmm11
  3235. pclmulqdq $16, %xmm0, %xmm11
  3236. aesenc 144(%r15), %xmm8
  3237. pshufd $0x4e, %xmm10, %xmm6
  3238. pxor %xmm11, %xmm6
  3239. pxor %xmm3, %xmm6
  3240. cmpl $11, %r10d
  3241. movdqa 160(%r15), %xmm9
  3242. jl L_AES_GCM_decrypt_aesni_aesenc_gfmul_last
  3243. aesenc %xmm9, %xmm8
  3244. aesenc 176(%r15), %xmm8
  3245. cmpl $13, %r10d
  3246. movdqa 192(%r15), %xmm9
  3247. jl L_AES_GCM_decrypt_aesni_aesenc_gfmul_last
  3248. aesenc %xmm9, %xmm8
  3249. aesenc 208(%r15), %xmm8
  3250. movdqa 224(%r15), %xmm9
  3251. L_AES_GCM_decrypt_aesni_aesenc_gfmul_last:
  3252. aesenclast %xmm9, %xmm8
  3253. movdqu (%rcx), %xmm9
  3254. pxor %xmm9, %xmm8
  3255. movdqu %xmm8, (%rdx)
  3256. addl $16, %ebx
  3257. cmpl %r13d, %ebx
  3258. jl L_AES_GCM_decrypt_aesni_last_block_start
  3259. L_AES_GCM_decrypt_aesni_last_block_done:
  3260. movl %r9d, %ecx
  3261. movl %ecx, %edx
  3262. andl $15, %ecx
  3263. jz L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_done
  3264. movdqu 128(%rsp), %xmm4
  3265. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm4
  3266. pxor (%r15), %xmm4
  3267. aesenc 16(%r15), %xmm4
  3268. aesenc 32(%r15), %xmm4
  3269. aesenc 48(%r15), %xmm4
  3270. aesenc 64(%r15), %xmm4
  3271. aesenc 80(%r15), %xmm4
  3272. aesenc 96(%r15), %xmm4
  3273. aesenc 112(%r15), %xmm4
  3274. aesenc 128(%r15), %xmm4
  3275. aesenc 144(%r15), %xmm4
  3276. cmpl $11, %r10d
  3277. movdqa 160(%r15), %xmm9
  3278. jl L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_aesenc_avx_last
  3279. aesenc %xmm9, %xmm4
  3280. aesenc 176(%r15), %xmm4
  3281. cmpl $13, %r10d
  3282. movdqa 192(%r15), %xmm9
  3283. jl L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_aesenc_avx_last
  3284. aesenc %xmm9, %xmm4
  3285. aesenc 208(%r15), %xmm4
  3286. movdqa 224(%r15), %xmm9
  3287. L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_aesenc_avx_last:
  3288. aesenclast %xmm9, %xmm4
  3289. subq $32, %rsp
  3290. xorl %ecx, %ecx
  3291. movdqu %xmm4, (%rsp)
  3292. pxor %xmm0, %xmm0
  3293. movdqu %xmm0, 16(%rsp)
  3294. L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_loop:
  3295. movzbl (%rdi,%rbx,1), %r13d
  3296. movb %r13b, 16(%rsp,%rcx,1)
  3297. xorb (%rsp,%rcx,1), %r13b
  3298. movb %r13b, (%rsi,%rbx,1)
  3299. incl %ebx
  3300. incl %ecx
  3301. cmpl %edx, %ebx
  3302. jl L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_loop
  3303. movdqu 16(%rsp), %xmm4
  3304. addq $32, %rsp
  3305. pshufb L_aes_gcm_bswap_mask(%rip), %xmm4
  3306. pxor %xmm4, %xmm6
  3307. pshufd $0x4e, %xmm5, %xmm9
  3308. pshufd $0x4e, %xmm6, %xmm10
  3309. movdqa %xmm6, %xmm11
  3310. movdqa %xmm6, %xmm8
  3311. pclmulqdq $0x11, %xmm5, %xmm11
  3312. pclmulqdq $0x00, %xmm5, %xmm8
  3313. pxor %xmm5, %xmm9
  3314. pxor %xmm6, %xmm10
  3315. pclmulqdq $0x00, %xmm10, %xmm9
  3316. pxor %xmm8, %xmm9
  3317. pxor %xmm11, %xmm9
  3318. movdqa %xmm9, %xmm10
  3319. movdqa %xmm11, %xmm6
  3320. pslldq $8, %xmm10
  3321. psrldq $8, %xmm9
  3322. pxor %xmm10, %xmm8
  3323. pxor %xmm9, %xmm6
  3324. movdqa %xmm8, %xmm12
  3325. movdqa %xmm8, %xmm13
  3326. movdqa %xmm8, %xmm14
  3327. pslld $31, %xmm12
  3328. pslld $30, %xmm13
  3329. pslld $25, %xmm14
  3330. pxor %xmm13, %xmm12
  3331. pxor %xmm14, %xmm12
  3332. movdqa %xmm12, %xmm13
  3333. psrldq $4, %xmm13
  3334. pslldq $12, %xmm12
  3335. pxor %xmm12, %xmm8
  3336. movdqa %xmm8, %xmm14
  3337. movdqa %xmm8, %xmm10
  3338. movdqa %xmm8, %xmm9
  3339. psrld $0x01, %xmm14
  3340. psrld $2, %xmm10
  3341. psrld $7, %xmm9
  3342. pxor %xmm10, %xmm14
  3343. pxor %xmm9, %xmm14
  3344. pxor %xmm13, %xmm14
  3345. pxor %xmm8, %xmm14
  3346. pxor %xmm14, %xmm6
  3347. L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_done:
  3348. L_AES_GCM_decrypt_aesni_done_dec:
  3349. movl %r9d, %edx
  3350. movl %r11d, %ecx
  3351. shlq $3, %rdx
  3352. shlq $3, %rcx
  3353. pinsrq $0x00, %rdx, %xmm0
  3354. pinsrq $0x01, %rcx, %xmm0
  3355. pxor %xmm0, %xmm6
  3356. pshufd $0x4e, %xmm5, %xmm9
  3357. pshufd $0x4e, %xmm6, %xmm10
  3358. movdqa %xmm6, %xmm11
  3359. movdqa %xmm6, %xmm8
  3360. pclmulqdq $0x11, %xmm5, %xmm11
  3361. pclmulqdq $0x00, %xmm5, %xmm8
  3362. pxor %xmm5, %xmm9
  3363. pxor %xmm6, %xmm10
  3364. pclmulqdq $0x00, %xmm10, %xmm9
  3365. pxor %xmm8, %xmm9
  3366. pxor %xmm11, %xmm9
  3367. movdqa %xmm9, %xmm10
  3368. movdqa %xmm11, %xmm6
  3369. pslldq $8, %xmm10
  3370. psrldq $8, %xmm9
  3371. pxor %xmm10, %xmm8
  3372. pxor %xmm9, %xmm6
  3373. movdqa %xmm8, %xmm12
  3374. movdqa %xmm8, %xmm13
  3375. movdqa %xmm8, %xmm14
  3376. pslld $31, %xmm12
  3377. pslld $30, %xmm13
  3378. pslld $25, %xmm14
  3379. pxor %xmm13, %xmm12
  3380. pxor %xmm14, %xmm12
  3381. movdqa %xmm12, %xmm13
  3382. psrldq $4, %xmm13
  3383. pslldq $12, %xmm12
  3384. pxor %xmm12, %xmm8
  3385. movdqa %xmm8, %xmm14
  3386. movdqa %xmm8, %xmm10
  3387. movdqa %xmm8, %xmm9
  3388. psrld $0x01, %xmm14
  3389. psrld $2, %xmm10
  3390. psrld $7, %xmm9
  3391. pxor %xmm10, %xmm14
  3392. pxor %xmm9, %xmm14
  3393. pxor %xmm13, %xmm14
  3394. pxor %xmm8, %xmm14
  3395. pxor %xmm14, %xmm6
  3396. pshufb L_aes_gcm_bswap_mask(%rip), %xmm6
  3397. movdqu 144(%rsp), %xmm0
  3398. pxor %xmm6, %xmm0
  3399. cmpl $16, %r14d
  3400. je L_AES_GCM_decrypt_aesni_cmp_tag_16
  3401. subq $16, %rsp
  3402. xorq %rcx, %rcx
  3403. xorq %rbx, %rbx
  3404. movdqu %xmm0, (%rsp)
  3405. L_AES_GCM_decrypt_aesni_cmp_tag_loop:
  3406. movzbl (%rsp,%rcx,1), %r13d
  3407. xorb (%r8,%rcx,1), %r13b
  3408. orb %r13b, %bl
  3409. incl %ecx
  3410. cmpl %r14d, %ecx
  3411. jne L_AES_GCM_decrypt_aesni_cmp_tag_loop
  3412. cmpb $0x00, %bl
  3413. sete %bl
  3414. addq $16, %rsp
  3415. xorq %rcx, %rcx
  3416. jmp L_AES_GCM_decrypt_aesni_cmp_tag_done
  3417. L_AES_GCM_decrypt_aesni_cmp_tag_16:
  3418. movdqu (%r8), %xmm1
  3419. pcmpeqb %xmm1, %xmm0
  3420. pmovmskb %xmm0, %rdx
  3421. # %%edx == 0xFFFF then return 1 else => return 0
  3422. xorl %ebx, %ebx
  3423. cmpl $0xffff, %edx
  3424. sete %bl
  3425. L_AES_GCM_decrypt_aesni_cmp_tag_done:
  3426. movl %ebx, (%rbp)
  3427. addq $0xa8, %rsp
  3428. popq %rbp
  3429. popq %r15
  3430. popq %r14
  3431. popq %rbx
  3432. popq %r12
  3433. popq %r13
  3434. repz retq
  3435. #ifndef __APPLE__
  3436. .size AES_GCM_decrypt_aesni,.-AES_GCM_decrypt_aesni
  3437. #endif /* __APPLE__ */
  3438. #ifdef WOLFSSL_AESGCM_STREAM
  3439. #ifndef __APPLE__
  3440. .text
  3441. .globl AES_GCM_init_aesni
  3442. .type AES_GCM_init_aesni,@function
  3443. .align 16
  3444. AES_GCM_init_aesni:
  3445. #else
  3446. .section __TEXT,__text
  3447. .globl _AES_GCM_init_aesni
  3448. .p2align 4
  3449. _AES_GCM_init_aesni:
  3450. #endif /* __APPLE__ */
  3451. pushq %r12
  3452. pushq %r13
  3453. pushq %r14
  3454. movq %rdx, %r10
  3455. movl %ecx, %r11d
  3456. movq 32(%rsp), %rax
  3457. subq $16, %rsp
  3458. pxor %xmm4, %xmm4
  3459. movl %r11d, %edx
  3460. cmpl $12, %edx
  3461. jne L_AES_GCM_init_aesni_iv_not_12
  3462. # # Calculate values when IV is 12 bytes
  3463. # Set counter based on IV
  3464. movl $0x1000000, %ecx
  3465. pinsrq $0x00, (%r10), %xmm4
  3466. pinsrd $2, 8(%r10), %xmm4
  3467. pinsrd $3, %ecx, %xmm4
  3468. # H = Encrypt X(=0) and T = Encrypt counter
  3469. movdqa %xmm4, %xmm1
  3470. movdqa (%rdi), %xmm5
  3471. pxor %xmm5, %xmm1
  3472. movdqa 16(%rdi), %xmm6
  3473. aesenc %xmm6, %xmm5
  3474. aesenc %xmm6, %xmm1
  3475. movdqa 32(%rdi), %xmm6
  3476. aesenc %xmm6, %xmm5
  3477. aesenc %xmm6, %xmm1
  3478. movdqa 48(%rdi), %xmm6
  3479. aesenc %xmm6, %xmm5
  3480. aesenc %xmm6, %xmm1
  3481. movdqa 64(%rdi), %xmm6
  3482. aesenc %xmm6, %xmm5
  3483. aesenc %xmm6, %xmm1
  3484. movdqa 80(%rdi), %xmm6
  3485. aesenc %xmm6, %xmm5
  3486. aesenc %xmm6, %xmm1
  3487. movdqa 96(%rdi), %xmm6
  3488. aesenc %xmm6, %xmm5
  3489. aesenc %xmm6, %xmm1
  3490. movdqa 112(%rdi), %xmm6
  3491. aesenc %xmm6, %xmm5
  3492. aesenc %xmm6, %xmm1
  3493. movdqa 128(%rdi), %xmm6
  3494. aesenc %xmm6, %xmm5
  3495. aesenc %xmm6, %xmm1
  3496. movdqa 144(%rdi), %xmm6
  3497. aesenc %xmm6, %xmm5
  3498. aesenc %xmm6, %xmm1
  3499. cmpl $11, %esi
  3500. movdqa 160(%rdi), %xmm6
  3501. jl L_AES_GCM_init_aesni_calc_iv_12_last
  3502. aesenc %xmm6, %xmm5
  3503. aesenc %xmm6, %xmm1
  3504. movdqa 176(%rdi), %xmm6
  3505. aesenc %xmm6, %xmm5
  3506. aesenc %xmm6, %xmm1
  3507. cmpl $13, %esi
  3508. movdqa 192(%rdi), %xmm6
  3509. jl L_AES_GCM_init_aesni_calc_iv_12_last
  3510. aesenc %xmm6, %xmm5
  3511. aesenc %xmm6, %xmm1
  3512. movdqa 208(%rdi), %xmm6
  3513. aesenc %xmm6, %xmm5
  3514. aesenc %xmm6, %xmm1
  3515. movdqa 224(%rdi), %xmm6
  3516. L_AES_GCM_init_aesni_calc_iv_12_last:
  3517. aesenclast %xmm6, %xmm5
  3518. aesenclast %xmm6, %xmm1
  3519. pshufb L_aes_gcm_bswap_mask(%rip), %xmm5
  3520. movdqu %xmm1, %xmm15
  3521. jmp L_AES_GCM_init_aesni_iv_done
  3522. L_AES_GCM_init_aesni_iv_not_12:
  3523. # Calculate values when IV is not 12 bytes
  3524. # H = Encrypt X(=0)
  3525. movdqa (%rdi), %xmm5
  3526. aesenc 16(%rdi), %xmm5
  3527. aesenc 32(%rdi), %xmm5
  3528. aesenc 48(%rdi), %xmm5
  3529. aesenc 64(%rdi), %xmm5
  3530. aesenc 80(%rdi), %xmm5
  3531. aesenc 96(%rdi), %xmm5
  3532. aesenc 112(%rdi), %xmm5
  3533. aesenc 128(%rdi), %xmm5
  3534. aesenc 144(%rdi), %xmm5
  3535. cmpl $11, %esi
  3536. movdqa 160(%rdi), %xmm8
  3537. jl L_AES_GCM_init_aesni_calc_iv_1_aesenc_avx_last
  3538. aesenc %xmm8, %xmm5
  3539. aesenc 176(%rdi), %xmm5
  3540. cmpl $13, %esi
  3541. movdqa 192(%rdi), %xmm8
  3542. jl L_AES_GCM_init_aesni_calc_iv_1_aesenc_avx_last
  3543. aesenc %xmm8, %xmm5
  3544. aesenc 208(%rdi), %xmm5
  3545. movdqa 224(%rdi), %xmm8
  3546. L_AES_GCM_init_aesni_calc_iv_1_aesenc_avx_last:
  3547. aesenclast %xmm8, %xmm5
  3548. pshufb L_aes_gcm_bswap_mask(%rip), %xmm5
  3549. # Calc counter
  3550. # Initialization vector
  3551. cmpl $0x00, %edx
  3552. movq $0x00, %rcx
  3553. je L_AES_GCM_init_aesni_calc_iv_done
  3554. cmpl $16, %edx
  3555. jl L_AES_GCM_init_aesni_calc_iv_lt16
  3556. andl $0xfffffff0, %edx
  3557. L_AES_GCM_init_aesni_calc_iv_16_loop:
  3558. movdqu (%r10,%rcx,1), %xmm7
  3559. pshufb L_aes_gcm_bswap_mask(%rip), %xmm7
  3560. pxor %xmm7, %xmm4
  3561. pshufd $0x4e, %xmm4, %xmm1
  3562. pshufd $0x4e, %xmm5, %xmm2
  3563. movdqa %xmm5, %xmm3
  3564. movdqa %xmm5, %xmm0
  3565. pclmulqdq $0x11, %xmm4, %xmm3
  3566. pclmulqdq $0x00, %xmm4, %xmm0
  3567. pxor %xmm4, %xmm1
  3568. pxor %xmm5, %xmm2
  3569. pclmulqdq $0x00, %xmm2, %xmm1
  3570. pxor %xmm0, %xmm1
  3571. pxor %xmm3, %xmm1
  3572. movdqa %xmm1, %xmm2
  3573. movdqa %xmm0, %xmm6
  3574. movdqa %xmm3, %xmm4
  3575. pslldq $8, %xmm2
  3576. psrldq $8, %xmm1
  3577. pxor %xmm2, %xmm6
  3578. pxor %xmm1, %xmm4
  3579. movdqa %xmm6, %xmm0
  3580. movdqa %xmm4, %xmm1
  3581. psrld $31, %xmm0
  3582. psrld $31, %xmm1
  3583. pslld $0x01, %xmm6
  3584. pslld $0x01, %xmm4
  3585. movdqa %xmm0, %xmm2
  3586. pslldq $4, %xmm0
  3587. psrldq $12, %xmm2
  3588. pslldq $4, %xmm1
  3589. por %xmm2, %xmm4
  3590. por %xmm0, %xmm6
  3591. por %xmm1, %xmm4
  3592. movdqa %xmm6, %xmm0
  3593. movdqa %xmm6, %xmm1
  3594. movdqa %xmm6, %xmm2
  3595. pslld $31, %xmm0
  3596. pslld $30, %xmm1
  3597. pslld $25, %xmm2
  3598. pxor %xmm1, %xmm0
  3599. pxor %xmm2, %xmm0
  3600. movdqa %xmm0, %xmm1
  3601. psrldq $4, %xmm1
  3602. pslldq $12, %xmm0
  3603. pxor %xmm0, %xmm6
  3604. movdqa %xmm6, %xmm2
  3605. movdqa %xmm6, %xmm3
  3606. movdqa %xmm6, %xmm0
  3607. psrld $0x01, %xmm2
  3608. psrld $2, %xmm3
  3609. psrld $7, %xmm0
  3610. pxor %xmm3, %xmm2
  3611. pxor %xmm0, %xmm2
  3612. pxor %xmm1, %xmm2
  3613. pxor %xmm6, %xmm2
  3614. pxor %xmm2, %xmm4
  3615. addl $16, %ecx
  3616. cmpl %edx, %ecx
  3617. jl L_AES_GCM_init_aesni_calc_iv_16_loop
  3618. movl %r11d, %edx
  3619. cmpl %edx, %ecx
  3620. je L_AES_GCM_init_aesni_calc_iv_done
  3621. L_AES_GCM_init_aesni_calc_iv_lt16:
  3622. subq $16, %rsp
  3623. pxor %xmm7, %xmm7
  3624. xorl %r13d, %r13d
  3625. movdqu %xmm7, (%rsp)
  3626. L_AES_GCM_init_aesni_calc_iv_loop:
  3627. movzbl (%r10,%rcx,1), %r12d
  3628. movb %r12b, (%rsp,%r13,1)
  3629. incl %ecx
  3630. incl %r13d
  3631. cmpl %edx, %ecx
  3632. jl L_AES_GCM_init_aesni_calc_iv_loop
  3633. movdqu (%rsp), %xmm7
  3634. addq $16, %rsp
  3635. pshufb L_aes_gcm_bswap_mask(%rip), %xmm7
  3636. pxor %xmm7, %xmm4
  3637. pshufd $0x4e, %xmm4, %xmm1
  3638. pshufd $0x4e, %xmm5, %xmm2
  3639. movdqa %xmm5, %xmm3
  3640. movdqa %xmm5, %xmm0
  3641. pclmulqdq $0x11, %xmm4, %xmm3
  3642. pclmulqdq $0x00, %xmm4, %xmm0
  3643. pxor %xmm4, %xmm1
  3644. pxor %xmm5, %xmm2
  3645. pclmulqdq $0x00, %xmm2, %xmm1
  3646. pxor %xmm0, %xmm1
  3647. pxor %xmm3, %xmm1
  3648. movdqa %xmm1, %xmm2
  3649. movdqa %xmm0, %xmm6
  3650. movdqa %xmm3, %xmm4
  3651. pslldq $8, %xmm2
  3652. psrldq $8, %xmm1
  3653. pxor %xmm2, %xmm6
  3654. pxor %xmm1, %xmm4
  3655. movdqa %xmm6, %xmm0
  3656. movdqa %xmm4, %xmm1
  3657. psrld $31, %xmm0
  3658. psrld $31, %xmm1
  3659. pslld $0x01, %xmm6
  3660. pslld $0x01, %xmm4
  3661. movdqa %xmm0, %xmm2
  3662. pslldq $4, %xmm0
  3663. psrldq $12, %xmm2
  3664. pslldq $4, %xmm1
  3665. por %xmm2, %xmm4
  3666. por %xmm0, %xmm6
  3667. por %xmm1, %xmm4
  3668. movdqa %xmm6, %xmm0
  3669. movdqa %xmm6, %xmm1
  3670. movdqa %xmm6, %xmm2
  3671. pslld $31, %xmm0
  3672. pslld $30, %xmm1
  3673. pslld $25, %xmm2
  3674. pxor %xmm1, %xmm0
  3675. pxor %xmm2, %xmm0
  3676. movdqa %xmm0, %xmm1
  3677. psrldq $4, %xmm1
  3678. pslldq $12, %xmm0
  3679. pxor %xmm0, %xmm6
  3680. movdqa %xmm6, %xmm2
  3681. movdqa %xmm6, %xmm3
  3682. movdqa %xmm6, %xmm0
  3683. psrld $0x01, %xmm2
  3684. psrld $2, %xmm3
  3685. psrld $7, %xmm0
  3686. pxor %xmm3, %xmm2
  3687. pxor %xmm0, %xmm2
  3688. pxor %xmm1, %xmm2
  3689. pxor %xmm6, %xmm2
  3690. pxor %xmm2, %xmm4
  3691. L_AES_GCM_init_aesni_calc_iv_done:
  3692. # T = Encrypt counter
  3693. pxor %xmm0, %xmm0
  3694. shll $3, %edx
  3695. pinsrq $0x00, %rdx, %xmm0
  3696. pxor %xmm0, %xmm4
  3697. pshufd $0x4e, %xmm4, %xmm1
  3698. pshufd $0x4e, %xmm5, %xmm2
  3699. movdqa %xmm5, %xmm3
  3700. movdqa %xmm5, %xmm0
  3701. pclmulqdq $0x11, %xmm4, %xmm3
  3702. pclmulqdq $0x00, %xmm4, %xmm0
  3703. pxor %xmm4, %xmm1
  3704. pxor %xmm5, %xmm2
  3705. pclmulqdq $0x00, %xmm2, %xmm1
  3706. pxor %xmm0, %xmm1
  3707. pxor %xmm3, %xmm1
  3708. movdqa %xmm1, %xmm2
  3709. movdqa %xmm0, %xmm6
  3710. movdqa %xmm3, %xmm4
  3711. pslldq $8, %xmm2
  3712. psrldq $8, %xmm1
  3713. pxor %xmm2, %xmm6
  3714. pxor %xmm1, %xmm4
  3715. movdqa %xmm6, %xmm0
  3716. movdqa %xmm4, %xmm1
  3717. psrld $31, %xmm0
  3718. psrld $31, %xmm1
  3719. pslld $0x01, %xmm6
  3720. pslld $0x01, %xmm4
  3721. movdqa %xmm0, %xmm2
  3722. pslldq $4, %xmm0
  3723. psrldq $12, %xmm2
  3724. pslldq $4, %xmm1
  3725. por %xmm2, %xmm4
  3726. por %xmm0, %xmm6
  3727. por %xmm1, %xmm4
  3728. movdqa %xmm6, %xmm0
  3729. movdqa %xmm6, %xmm1
  3730. movdqa %xmm6, %xmm2
  3731. pslld $31, %xmm0
  3732. pslld $30, %xmm1
  3733. pslld $25, %xmm2
  3734. pxor %xmm1, %xmm0
  3735. pxor %xmm2, %xmm0
  3736. movdqa %xmm0, %xmm1
  3737. psrldq $4, %xmm1
  3738. pslldq $12, %xmm0
  3739. pxor %xmm0, %xmm6
  3740. movdqa %xmm6, %xmm2
  3741. movdqa %xmm6, %xmm3
  3742. movdqa %xmm6, %xmm0
  3743. psrld $0x01, %xmm2
  3744. psrld $2, %xmm3
  3745. psrld $7, %xmm0
  3746. pxor %xmm3, %xmm2
  3747. pxor %xmm0, %xmm2
  3748. pxor %xmm1, %xmm2
  3749. pxor %xmm6, %xmm2
  3750. pxor %xmm2, %xmm4
  3751. pshufb L_aes_gcm_bswap_mask(%rip), %xmm4
  3752. # Encrypt counter
  3753. movdqa (%rdi), %xmm7
  3754. pxor %xmm4, %xmm7
  3755. aesenc 16(%rdi), %xmm7
  3756. aesenc 32(%rdi), %xmm7
  3757. aesenc 48(%rdi), %xmm7
  3758. aesenc 64(%rdi), %xmm7
  3759. aesenc 80(%rdi), %xmm7
  3760. aesenc 96(%rdi), %xmm7
  3761. aesenc 112(%rdi), %xmm7
  3762. aesenc 128(%rdi), %xmm7
  3763. aesenc 144(%rdi), %xmm7
  3764. cmpl $11, %esi
  3765. movdqa 160(%rdi), %xmm8
  3766. jl L_AES_GCM_init_aesni_calc_iv_2_aesenc_avx_last
  3767. aesenc %xmm8, %xmm7
  3768. aesenc 176(%rdi), %xmm7
  3769. cmpl $13, %esi
  3770. movdqa 192(%rdi), %xmm8
  3771. jl L_AES_GCM_init_aesni_calc_iv_2_aesenc_avx_last
  3772. aesenc %xmm8, %xmm7
  3773. aesenc 208(%rdi), %xmm7
  3774. movdqa 224(%rdi), %xmm8
  3775. L_AES_GCM_init_aesni_calc_iv_2_aesenc_avx_last:
  3776. aesenclast %xmm8, %xmm7
  3777. movdqu %xmm7, %xmm15
  3778. L_AES_GCM_init_aesni_iv_done:
  3779. movdqa %xmm15, (%rax)
  3780. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm4
  3781. paddd L_aes_gcm_one(%rip), %xmm4
  3782. movdqa %xmm5, (%r8)
  3783. movdqa %xmm4, (%r9)
  3784. addq $16, %rsp
  3785. popq %r14
  3786. popq %r13
  3787. popq %r12
  3788. repz retq
  3789. #ifndef __APPLE__
  3790. .size AES_GCM_init_aesni,.-AES_GCM_init_aesni
  3791. #endif /* __APPLE__ */
  3792. #ifndef __APPLE__
  3793. .text
  3794. .globl AES_GCM_aad_update_aesni
  3795. .type AES_GCM_aad_update_aesni,@function
  3796. .align 16
  3797. AES_GCM_aad_update_aesni:
  3798. #else
  3799. .section __TEXT,__text
  3800. .globl _AES_GCM_aad_update_aesni
  3801. .p2align 4
  3802. _AES_GCM_aad_update_aesni:
  3803. #endif /* __APPLE__ */
  3804. movq %rcx, %rax
  3805. movdqa (%rdx), %xmm5
  3806. movdqa (%rax), %xmm6
  3807. xorl %ecx, %ecx
  3808. L_AES_GCM_aad_update_aesni_16_loop:
  3809. movdqu (%rdi,%rcx,1), %xmm7
  3810. pshufb L_aes_gcm_bswap_mask(%rip), %xmm7
  3811. pxor %xmm7, %xmm5
  3812. pshufd $0x4e, %xmm5, %xmm1
  3813. pshufd $0x4e, %xmm6, %xmm2
  3814. movdqa %xmm6, %xmm3
  3815. movdqa %xmm6, %xmm0
  3816. pclmulqdq $0x11, %xmm5, %xmm3
  3817. pclmulqdq $0x00, %xmm5, %xmm0
  3818. pxor %xmm5, %xmm1
  3819. pxor %xmm6, %xmm2
  3820. pclmulqdq $0x00, %xmm2, %xmm1
  3821. pxor %xmm0, %xmm1
  3822. pxor %xmm3, %xmm1
  3823. movdqa %xmm1, %xmm2
  3824. movdqa %xmm0, %xmm4
  3825. movdqa %xmm3, %xmm5
  3826. pslldq $8, %xmm2
  3827. psrldq $8, %xmm1
  3828. pxor %xmm2, %xmm4
  3829. pxor %xmm1, %xmm5
  3830. movdqa %xmm4, %xmm0
  3831. movdqa %xmm5, %xmm1
  3832. psrld $31, %xmm0
  3833. psrld $31, %xmm1
  3834. pslld $0x01, %xmm4
  3835. pslld $0x01, %xmm5
  3836. movdqa %xmm0, %xmm2
  3837. pslldq $4, %xmm0
  3838. psrldq $12, %xmm2
  3839. pslldq $4, %xmm1
  3840. por %xmm2, %xmm5
  3841. por %xmm0, %xmm4
  3842. por %xmm1, %xmm5
  3843. movdqa %xmm4, %xmm0
  3844. movdqa %xmm4, %xmm1
  3845. movdqa %xmm4, %xmm2
  3846. pslld $31, %xmm0
  3847. pslld $30, %xmm1
  3848. pslld $25, %xmm2
  3849. pxor %xmm1, %xmm0
  3850. pxor %xmm2, %xmm0
  3851. movdqa %xmm0, %xmm1
  3852. psrldq $4, %xmm1
  3853. pslldq $12, %xmm0
  3854. pxor %xmm0, %xmm4
  3855. movdqa %xmm4, %xmm2
  3856. movdqa %xmm4, %xmm3
  3857. movdqa %xmm4, %xmm0
  3858. psrld $0x01, %xmm2
  3859. psrld $2, %xmm3
  3860. psrld $7, %xmm0
  3861. pxor %xmm3, %xmm2
  3862. pxor %xmm0, %xmm2
  3863. pxor %xmm1, %xmm2
  3864. pxor %xmm4, %xmm2
  3865. pxor %xmm2, %xmm5
  3866. addl $16, %ecx
  3867. cmpl %esi, %ecx
  3868. jl L_AES_GCM_aad_update_aesni_16_loop
  3869. movdqa %xmm5, (%rdx)
  3870. repz retq
  3871. #ifndef __APPLE__
  3872. .size AES_GCM_aad_update_aesni,.-AES_GCM_aad_update_aesni
  3873. #endif /* __APPLE__ */
  3874. #ifndef __APPLE__
  3875. .text
  3876. .globl AES_GCM_encrypt_block_aesni
  3877. .type AES_GCM_encrypt_block_aesni,@function
  3878. .align 16
  3879. AES_GCM_encrypt_block_aesni:
  3880. #else
  3881. .section __TEXT,__text
  3882. .globl _AES_GCM_encrypt_block_aesni
  3883. .p2align 4
  3884. _AES_GCM_encrypt_block_aesni:
  3885. #endif /* __APPLE__ */
  3886. movq %rdx, %r10
  3887. movq %rcx, %r11
  3888. movdqu (%r8), %xmm0
  3889. movdqa %xmm0, %xmm1
  3890. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm0
  3891. paddd L_aes_gcm_one(%rip), %xmm1
  3892. pxor (%rdi), %xmm0
  3893. movdqu %xmm1, (%r8)
  3894. aesenc 16(%rdi), %xmm0
  3895. aesenc 32(%rdi), %xmm0
  3896. aesenc 48(%rdi), %xmm0
  3897. aesenc 64(%rdi), %xmm0
  3898. aesenc 80(%rdi), %xmm0
  3899. aesenc 96(%rdi), %xmm0
  3900. aesenc 112(%rdi), %xmm0
  3901. aesenc 128(%rdi), %xmm0
  3902. aesenc 144(%rdi), %xmm0
  3903. cmpl $11, %esi
  3904. movdqa 160(%rdi), %xmm1
  3905. jl L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last
  3906. aesenc %xmm1, %xmm0
  3907. aesenc 176(%rdi), %xmm0
  3908. cmpl $13, %esi
  3909. movdqa 192(%rdi), %xmm1
  3910. jl L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last
  3911. aesenc %xmm1, %xmm0
  3912. aesenc 208(%rdi), %xmm0
  3913. movdqa 224(%rdi), %xmm1
  3914. L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last:
  3915. aesenclast %xmm1, %xmm0
  3916. movdqu (%r11), %xmm1
  3917. pxor %xmm1, %xmm0
  3918. movdqu %xmm0, (%r10)
  3919. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  3920. repz retq
  3921. #ifndef __APPLE__
  3922. .size AES_GCM_encrypt_block_aesni,.-AES_GCM_encrypt_block_aesni
  3923. #endif /* __APPLE__ */
  3924. #ifndef __APPLE__
  3925. .text
  3926. .globl AES_GCM_ghash_block_aesni
  3927. .type AES_GCM_ghash_block_aesni,@function
  3928. .align 16
  3929. AES_GCM_ghash_block_aesni:
  3930. #else
  3931. .section __TEXT,__text
  3932. .globl _AES_GCM_ghash_block_aesni
  3933. .p2align 4
  3934. _AES_GCM_ghash_block_aesni:
  3935. #endif /* __APPLE__ */
  3936. movdqa (%rsi), %xmm4
  3937. movdqa (%rdx), %xmm5
  3938. movdqu (%rdi), %xmm7
  3939. pshufb L_aes_gcm_bswap_mask(%rip), %xmm7
  3940. pxor %xmm7, %xmm4
  3941. pshufd $0x4e, %xmm4, %xmm1
  3942. pshufd $0x4e, %xmm5, %xmm2
  3943. movdqa %xmm5, %xmm3
  3944. movdqa %xmm5, %xmm0
  3945. pclmulqdq $0x11, %xmm4, %xmm3
  3946. pclmulqdq $0x00, %xmm4, %xmm0
  3947. pxor %xmm4, %xmm1
  3948. pxor %xmm5, %xmm2
  3949. pclmulqdq $0x00, %xmm2, %xmm1
  3950. pxor %xmm0, %xmm1
  3951. pxor %xmm3, %xmm1
  3952. movdqa %xmm1, %xmm2
  3953. movdqa %xmm0, %xmm6
  3954. movdqa %xmm3, %xmm4
  3955. pslldq $8, %xmm2
  3956. psrldq $8, %xmm1
  3957. pxor %xmm2, %xmm6
  3958. pxor %xmm1, %xmm4
  3959. movdqa %xmm6, %xmm0
  3960. movdqa %xmm4, %xmm1
  3961. psrld $31, %xmm0
  3962. psrld $31, %xmm1
  3963. pslld $0x01, %xmm6
  3964. pslld $0x01, %xmm4
  3965. movdqa %xmm0, %xmm2
  3966. pslldq $4, %xmm0
  3967. psrldq $12, %xmm2
  3968. pslldq $4, %xmm1
  3969. por %xmm2, %xmm4
  3970. por %xmm0, %xmm6
  3971. por %xmm1, %xmm4
  3972. movdqa %xmm6, %xmm0
  3973. movdqa %xmm6, %xmm1
  3974. movdqa %xmm6, %xmm2
  3975. pslld $31, %xmm0
  3976. pslld $30, %xmm1
  3977. pslld $25, %xmm2
  3978. pxor %xmm1, %xmm0
  3979. pxor %xmm2, %xmm0
  3980. movdqa %xmm0, %xmm1
  3981. psrldq $4, %xmm1
  3982. pslldq $12, %xmm0
  3983. pxor %xmm0, %xmm6
  3984. movdqa %xmm6, %xmm2
  3985. movdqa %xmm6, %xmm3
  3986. movdqa %xmm6, %xmm0
  3987. psrld $0x01, %xmm2
  3988. psrld $2, %xmm3
  3989. psrld $7, %xmm0
  3990. pxor %xmm3, %xmm2
  3991. pxor %xmm0, %xmm2
  3992. pxor %xmm1, %xmm2
  3993. pxor %xmm6, %xmm2
  3994. pxor %xmm2, %xmm4
  3995. movdqa %xmm4, (%rsi)
  3996. repz retq
  3997. #ifndef __APPLE__
  3998. .size AES_GCM_ghash_block_aesni,.-AES_GCM_ghash_block_aesni
  3999. #endif /* __APPLE__ */
  4000. #ifndef __APPLE__
  4001. .text
  4002. .globl AES_GCM_encrypt_update_aesni
  4003. .type AES_GCM_encrypt_update_aesni,@function
  4004. .align 16
  4005. AES_GCM_encrypt_update_aesni:
  4006. #else
  4007. .section __TEXT,__text
  4008. .globl _AES_GCM_encrypt_update_aesni
  4009. .p2align 4
  4010. _AES_GCM_encrypt_update_aesni:
  4011. #endif /* __APPLE__ */
  4012. pushq %r13
  4013. pushq %r12
  4014. pushq %r14
  4015. movq %rdx, %r10
  4016. movq %rcx, %r11
  4017. movq 32(%rsp), %rax
  4018. movq 40(%rsp), %r12
  4019. subq $0xa0, %rsp
  4020. movdqa (%r9), %xmm6
  4021. movdqa (%rax), %xmm5
  4022. movdqa %xmm5, %xmm9
  4023. movdqa %xmm5, %xmm8
  4024. psrlq $63, %xmm9
  4025. psllq $0x01, %xmm8
  4026. pslldq $8, %xmm9
  4027. por %xmm9, %xmm8
  4028. pshufd $0xff, %xmm5, %xmm5
  4029. psrad $31, %xmm5
  4030. pand L_aes_gcm_mod2_128(%rip), %xmm5
  4031. pxor %xmm8, %xmm5
  4032. xorq %r14, %r14
  4033. cmpl $0x80, %r8d
  4034. movl %r8d, %r13d
  4035. jl L_AES_GCM_encrypt_update_aesni_done_128
  4036. andl $0xffffff80, %r13d
  4037. movdqa %xmm6, %xmm2
  4038. # H ^ 1
  4039. movdqu %xmm5, (%rsp)
  4040. # H ^ 2
  4041. pshufd $0x4e, %xmm5, %xmm9
  4042. pshufd $0x4e, %xmm5, %xmm10
  4043. movdqa %xmm5, %xmm11
  4044. movdqa %xmm5, %xmm8
  4045. pclmulqdq $0x11, %xmm5, %xmm11
  4046. pclmulqdq $0x00, %xmm5, %xmm8
  4047. pxor %xmm5, %xmm9
  4048. pxor %xmm5, %xmm10
  4049. pclmulqdq $0x00, %xmm10, %xmm9
  4050. pxor %xmm8, %xmm9
  4051. pxor %xmm11, %xmm9
  4052. movdqa %xmm9, %xmm10
  4053. movdqa %xmm11, %xmm0
  4054. pslldq $8, %xmm10
  4055. psrldq $8, %xmm9
  4056. pxor %xmm10, %xmm8
  4057. pxor %xmm9, %xmm0
  4058. movdqa %xmm8, %xmm12
  4059. movdqa %xmm8, %xmm13
  4060. movdqa %xmm8, %xmm14
  4061. pslld $31, %xmm12
  4062. pslld $30, %xmm13
  4063. pslld $25, %xmm14
  4064. pxor %xmm13, %xmm12
  4065. pxor %xmm14, %xmm12
  4066. movdqa %xmm12, %xmm13
  4067. psrldq $4, %xmm13
  4068. pslldq $12, %xmm12
  4069. pxor %xmm12, %xmm8
  4070. movdqa %xmm8, %xmm14
  4071. movdqa %xmm8, %xmm10
  4072. movdqa %xmm8, %xmm9
  4073. psrld $0x01, %xmm14
  4074. psrld $2, %xmm10
  4075. psrld $7, %xmm9
  4076. pxor %xmm10, %xmm14
  4077. pxor %xmm9, %xmm14
  4078. pxor %xmm13, %xmm14
  4079. pxor %xmm8, %xmm14
  4080. pxor %xmm14, %xmm0
  4081. movdqu %xmm0, 16(%rsp)
  4082. # H ^ 3
  4083. pshufd $0x4e, %xmm5, %xmm9
  4084. pshufd $0x4e, %xmm0, %xmm10
  4085. movdqa %xmm0, %xmm11
  4086. movdqa %xmm0, %xmm8
  4087. pclmulqdq $0x11, %xmm5, %xmm11
  4088. pclmulqdq $0x00, %xmm5, %xmm8
  4089. pxor %xmm5, %xmm9
  4090. pxor %xmm0, %xmm10
  4091. pclmulqdq $0x00, %xmm10, %xmm9
  4092. pxor %xmm8, %xmm9
  4093. pxor %xmm11, %xmm9
  4094. movdqa %xmm9, %xmm10
  4095. movdqa %xmm11, %xmm1
  4096. pslldq $8, %xmm10
  4097. psrldq $8, %xmm9
  4098. pxor %xmm10, %xmm8
  4099. pxor %xmm9, %xmm1
  4100. movdqa %xmm8, %xmm12
  4101. movdqa %xmm8, %xmm13
  4102. movdqa %xmm8, %xmm14
  4103. pslld $31, %xmm12
  4104. pslld $30, %xmm13
  4105. pslld $25, %xmm14
  4106. pxor %xmm13, %xmm12
  4107. pxor %xmm14, %xmm12
  4108. movdqa %xmm12, %xmm13
  4109. psrldq $4, %xmm13
  4110. pslldq $12, %xmm12
  4111. pxor %xmm12, %xmm8
  4112. movdqa %xmm8, %xmm14
  4113. movdqa %xmm8, %xmm10
  4114. movdqa %xmm8, %xmm9
  4115. psrld $0x01, %xmm14
  4116. psrld $2, %xmm10
  4117. psrld $7, %xmm9
  4118. pxor %xmm10, %xmm14
  4119. pxor %xmm9, %xmm14
  4120. pxor %xmm13, %xmm14
  4121. pxor %xmm8, %xmm14
  4122. pxor %xmm14, %xmm1
  4123. movdqu %xmm1, 32(%rsp)
  4124. # H ^ 4
  4125. pshufd $0x4e, %xmm0, %xmm9
  4126. pshufd $0x4e, %xmm0, %xmm10
  4127. movdqa %xmm0, %xmm11
  4128. movdqa %xmm0, %xmm8
  4129. pclmulqdq $0x11, %xmm0, %xmm11
  4130. pclmulqdq $0x00, %xmm0, %xmm8
  4131. pxor %xmm0, %xmm9
  4132. pxor %xmm0, %xmm10
  4133. pclmulqdq $0x00, %xmm10, %xmm9
  4134. pxor %xmm8, %xmm9
  4135. pxor %xmm11, %xmm9
  4136. movdqa %xmm9, %xmm10
  4137. movdqa %xmm11, %xmm3
  4138. pslldq $8, %xmm10
  4139. psrldq $8, %xmm9
  4140. pxor %xmm10, %xmm8
  4141. pxor %xmm9, %xmm3
  4142. movdqa %xmm8, %xmm12
  4143. movdqa %xmm8, %xmm13
  4144. movdqa %xmm8, %xmm14
  4145. pslld $31, %xmm12
  4146. pslld $30, %xmm13
  4147. pslld $25, %xmm14
  4148. pxor %xmm13, %xmm12
  4149. pxor %xmm14, %xmm12
  4150. movdqa %xmm12, %xmm13
  4151. psrldq $4, %xmm13
  4152. pslldq $12, %xmm12
  4153. pxor %xmm12, %xmm8
  4154. movdqa %xmm8, %xmm14
  4155. movdqa %xmm8, %xmm10
  4156. movdqa %xmm8, %xmm9
  4157. psrld $0x01, %xmm14
  4158. psrld $2, %xmm10
  4159. psrld $7, %xmm9
  4160. pxor %xmm10, %xmm14
  4161. pxor %xmm9, %xmm14
  4162. pxor %xmm13, %xmm14
  4163. pxor %xmm8, %xmm14
  4164. pxor %xmm14, %xmm3
  4165. movdqu %xmm3, 48(%rsp)
  4166. # H ^ 5
  4167. pshufd $0x4e, %xmm0, %xmm9
  4168. pshufd $0x4e, %xmm1, %xmm10
  4169. movdqa %xmm1, %xmm11
  4170. movdqa %xmm1, %xmm8
  4171. pclmulqdq $0x11, %xmm0, %xmm11
  4172. pclmulqdq $0x00, %xmm0, %xmm8
  4173. pxor %xmm0, %xmm9
  4174. pxor %xmm1, %xmm10
  4175. pclmulqdq $0x00, %xmm10, %xmm9
  4176. pxor %xmm8, %xmm9
  4177. pxor %xmm11, %xmm9
  4178. movdqa %xmm9, %xmm10
  4179. movdqa %xmm11, %xmm7
  4180. pslldq $8, %xmm10
  4181. psrldq $8, %xmm9
  4182. pxor %xmm10, %xmm8
  4183. pxor %xmm9, %xmm7
  4184. movdqa %xmm8, %xmm12
  4185. movdqa %xmm8, %xmm13
  4186. movdqa %xmm8, %xmm14
  4187. pslld $31, %xmm12
  4188. pslld $30, %xmm13
  4189. pslld $25, %xmm14
  4190. pxor %xmm13, %xmm12
  4191. pxor %xmm14, %xmm12
  4192. movdqa %xmm12, %xmm13
  4193. psrldq $4, %xmm13
  4194. pslldq $12, %xmm12
  4195. pxor %xmm12, %xmm8
  4196. movdqa %xmm8, %xmm14
  4197. movdqa %xmm8, %xmm10
  4198. movdqa %xmm8, %xmm9
  4199. psrld $0x01, %xmm14
  4200. psrld $2, %xmm10
  4201. psrld $7, %xmm9
  4202. pxor %xmm10, %xmm14
  4203. pxor %xmm9, %xmm14
  4204. pxor %xmm13, %xmm14
  4205. pxor %xmm8, %xmm14
  4206. pxor %xmm14, %xmm7
  4207. movdqu %xmm7, 64(%rsp)
  4208. # H ^ 6
  4209. pshufd $0x4e, %xmm1, %xmm9
  4210. pshufd $0x4e, %xmm1, %xmm10
  4211. movdqa %xmm1, %xmm11
  4212. movdqa %xmm1, %xmm8
  4213. pclmulqdq $0x11, %xmm1, %xmm11
  4214. pclmulqdq $0x00, %xmm1, %xmm8
  4215. pxor %xmm1, %xmm9
  4216. pxor %xmm1, %xmm10
  4217. pclmulqdq $0x00, %xmm10, %xmm9
  4218. pxor %xmm8, %xmm9
  4219. pxor %xmm11, %xmm9
  4220. movdqa %xmm9, %xmm10
  4221. movdqa %xmm11, %xmm7
  4222. pslldq $8, %xmm10
  4223. psrldq $8, %xmm9
  4224. pxor %xmm10, %xmm8
  4225. pxor %xmm9, %xmm7
  4226. movdqa %xmm8, %xmm12
  4227. movdqa %xmm8, %xmm13
  4228. movdqa %xmm8, %xmm14
  4229. pslld $31, %xmm12
  4230. pslld $30, %xmm13
  4231. pslld $25, %xmm14
  4232. pxor %xmm13, %xmm12
  4233. pxor %xmm14, %xmm12
  4234. movdqa %xmm12, %xmm13
  4235. psrldq $4, %xmm13
  4236. pslldq $12, %xmm12
  4237. pxor %xmm12, %xmm8
  4238. movdqa %xmm8, %xmm14
  4239. movdqa %xmm8, %xmm10
  4240. movdqa %xmm8, %xmm9
  4241. psrld $0x01, %xmm14
  4242. psrld $2, %xmm10
  4243. psrld $7, %xmm9
  4244. pxor %xmm10, %xmm14
  4245. pxor %xmm9, %xmm14
  4246. pxor %xmm13, %xmm14
  4247. pxor %xmm8, %xmm14
  4248. pxor %xmm14, %xmm7
  4249. movdqu %xmm7, 80(%rsp)
  4250. # H ^ 7
  4251. pshufd $0x4e, %xmm1, %xmm9
  4252. pshufd $0x4e, %xmm3, %xmm10
  4253. movdqa %xmm3, %xmm11
  4254. movdqa %xmm3, %xmm8
  4255. pclmulqdq $0x11, %xmm1, %xmm11
  4256. pclmulqdq $0x00, %xmm1, %xmm8
  4257. pxor %xmm1, %xmm9
  4258. pxor %xmm3, %xmm10
  4259. pclmulqdq $0x00, %xmm10, %xmm9
  4260. pxor %xmm8, %xmm9
  4261. pxor %xmm11, %xmm9
  4262. movdqa %xmm9, %xmm10
  4263. movdqa %xmm11, %xmm7
  4264. pslldq $8, %xmm10
  4265. psrldq $8, %xmm9
  4266. pxor %xmm10, %xmm8
  4267. pxor %xmm9, %xmm7
  4268. movdqa %xmm8, %xmm12
  4269. movdqa %xmm8, %xmm13
  4270. movdqa %xmm8, %xmm14
  4271. pslld $31, %xmm12
  4272. pslld $30, %xmm13
  4273. pslld $25, %xmm14
  4274. pxor %xmm13, %xmm12
  4275. pxor %xmm14, %xmm12
  4276. movdqa %xmm12, %xmm13
  4277. psrldq $4, %xmm13
  4278. pslldq $12, %xmm12
  4279. pxor %xmm12, %xmm8
  4280. movdqa %xmm8, %xmm14
  4281. movdqa %xmm8, %xmm10
  4282. movdqa %xmm8, %xmm9
  4283. psrld $0x01, %xmm14
  4284. psrld $2, %xmm10
  4285. psrld $7, %xmm9
  4286. pxor %xmm10, %xmm14
  4287. pxor %xmm9, %xmm14
  4288. pxor %xmm13, %xmm14
  4289. pxor %xmm8, %xmm14
  4290. pxor %xmm14, %xmm7
  4291. movdqu %xmm7, 96(%rsp)
  4292. # H ^ 8
  4293. pshufd $0x4e, %xmm3, %xmm9
  4294. pshufd $0x4e, %xmm3, %xmm10
  4295. movdqa %xmm3, %xmm11
  4296. movdqa %xmm3, %xmm8
  4297. pclmulqdq $0x11, %xmm3, %xmm11
  4298. pclmulqdq $0x00, %xmm3, %xmm8
  4299. pxor %xmm3, %xmm9
  4300. pxor %xmm3, %xmm10
  4301. pclmulqdq $0x00, %xmm10, %xmm9
  4302. pxor %xmm8, %xmm9
  4303. pxor %xmm11, %xmm9
  4304. movdqa %xmm9, %xmm10
  4305. movdqa %xmm11, %xmm7
  4306. pslldq $8, %xmm10
  4307. psrldq $8, %xmm9
  4308. pxor %xmm10, %xmm8
  4309. pxor %xmm9, %xmm7
  4310. movdqa %xmm8, %xmm12
  4311. movdqa %xmm8, %xmm13
  4312. movdqa %xmm8, %xmm14
  4313. pslld $31, %xmm12
  4314. pslld $30, %xmm13
  4315. pslld $25, %xmm14
  4316. pxor %xmm13, %xmm12
  4317. pxor %xmm14, %xmm12
  4318. movdqa %xmm12, %xmm13
  4319. psrldq $4, %xmm13
  4320. pslldq $12, %xmm12
  4321. pxor %xmm12, %xmm8
  4322. movdqa %xmm8, %xmm14
  4323. movdqa %xmm8, %xmm10
  4324. movdqa %xmm8, %xmm9
  4325. psrld $0x01, %xmm14
  4326. psrld $2, %xmm10
  4327. psrld $7, %xmm9
  4328. pxor %xmm10, %xmm14
  4329. pxor %xmm9, %xmm14
  4330. pxor %xmm13, %xmm14
  4331. pxor %xmm8, %xmm14
  4332. pxor %xmm14, %xmm7
  4333. movdqu %xmm7, 112(%rsp)
  4334. # First 128 bytes of input
  4335. movdqu (%r12), %xmm8
  4336. movdqa L_aes_gcm_bswap_epi64(%rip), %xmm1
  4337. movdqa %xmm8, %xmm0
  4338. pshufb %xmm1, %xmm8
  4339. movdqa %xmm0, %xmm9
  4340. paddd L_aes_gcm_one(%rip), %xmm9
  4341. pshufb %xmm1, %xmm9
  4342. movdqa %xmm0, %xmm10
  4343. paddd L_aes_gcm_two(%rip), %xmm10
  4344. pshufb %xmm1, %xmm10
  4345. movdqa %xmm0, %xmm11
  4346. paddd L_aes_gcm_three(%rip), %xmm11
  4347. pshufb %xmm1, %xmm11
  4348. movdqa %xmm0, %xmm12
  4349. paddd L_aes_gcm_four(%rip), %xmm12
  4350. pshufb %xmm1, %xmm12
  4351. movdqa %xmm0, %xmm13
  4352. paddd L_aes_gcm_five(%rip), %xmm13
  4353. pshufb %xmm1, %xmm13
  4354. movdqa %xmm0, %xmm14
  4355. paddd L_aes_gcm_six(%rip), %xmm14
  4356. pshufb %xmm1, %xmm14
  4357. movdqa %xmm0, %xmm15
  4358. paddd L_aes_gcm_seven(%rip), %xmm15
  4359. pshufb %xmm1, %xmm15
  4360. paddd L_aes_gcm_eight(%rip), %xmm0
  4361. movdqa (%rdi), %xmm7
  4362. movdqu %xmm0, (%r12)
  4363. pxor %xmm7, %xmm8
  4364. pxor %xmm7, %xmm9
  4365. pxor %xmm7, %xmm10
  4366. pxor %xmm7, %xmm11
  4367. pxor %xmm7, %xmm12
  4368. pxor %xmm7, %xmm13
  4369. pxor %xmm7, %xmm14
  4370. pxor %xmm7, %xmm15
  4371. movdqa 16(%rdi), %xmm7
  4372. aesenc %xmm7, %xmm8
  4373. aesenc %xmm7, %xmm9
  4374. aesenc %xmm7, %xmm10
  4375. aesenc %xmm7, %xmm11
  4376. aesenc %xmm7, %xmm12
  4377. aesenc %xmm7, %xmm13
  4378. aesenc %xmm7, %xmm14
  4379. aesenc %xmm7, %xmm15
  4380. movdqa 32(%rdi), %xmm7
  4381. aesenc %xmm7, %xmm8
  4382. aesenc %xmm7, %xmm9
  4383. aesenc %xmm7, %xmm10
  4384. aesenc %xmm7, %xmm11
  4385. aesenc %xmm7, %xmm12
  4386. aesenc %xmm7, %xmm13
  4387. aesenc %xmm7, %xmm14
  4388. aesenc %xmm7, %xmm15
  4389. movdqa 48(%rdi), %xmm7
  4390. aesenc %xmm7, %xmm8
  4391. aesenc %xmm7, %xmm9
  4392. aesenc %xmm7, %xmm10
  4393. aesenc %xmm7, %xmm11
  4394. aesenc %xmm7, %xmm12
  4395. aesenc %xmm7, %xmm13
  4396. aesenc %xmm7, %xmm14
  4397. aesenc %xmm7, %xmm15
  4398. movdqa 64(%rdi), %xmm7
  4399. aesenc %xmm7, %xmm8
  4400. aesenc %xmm7, %xmm9
  4401. aesenc %xmm7, %xmm10
  4402. aesenc %xmm7, %xmm11
  4403. aesenc %xmm7, %xmm12
  4404. aesenc %xmm7, %xmm13
  4405. aesenc %xmm7, %xmm14
  4406. aesenc %xmm7, %xmm15
  4407. movdqa 80(%rdi), %xmm7
  4408. aesenc %xmm7, %xmm8
  4409. aesenc %xmm7, %xmm9
  4410. aesenc %xmm7, %xmm10
  4411. aesenc %xmm7, %xmm11
  4412. aesenc %xmm7, %xmm12
  4413. aesenc %xmm7, %xmm13
  4414. aesenc %xmm7, %xmm14
  4415. aesenc %xmm7, %xmm15
  4416. movdqa 96(%rdi), %xmm7
  4417. aesenc %xmm7, %xmm8
  4418. aesenc %xmm7, %xmm9
  4419. aesenc %xmm7, %xmm10
  4420. aesenc %xmm7, %xmm11
  4421. aesenc %xmm7, %xmm12
  4422. aesenc %xmm7, %xmm13
  4423. aesenc %xmm7, %xmm14
  4424. aesenc %xmm7, %xmm15
  4425. movdqa 112(%rdi), %xmm7
  4426. aesenc %xmm7, %xmm8
  4427. aesenc %xmm7, %xmm9
  4428. aesenc %xmm7, %xmm10
  4429. aesenc %xmm7, %xmm11
  4430. aesenc %xmm7, %xmm12
  4431. aesenc %xmm7, %xmm13
  4432. aesenc %xmm7, %xmm14
  4433. aesenc %xmm7, %xmm15
  4434. movdqa 128(%rdi), %xmm7
  4435. aesenc %xmm7, %xmm8
  4436. aesenc %xmm7, %xmm9
  4437. aesenc %xmm7, %xmm10
  4438. aesenc %xmm7, %xmm11
  4439. aesenc %xmm7, %xmm12
  4440. aesenc %xmm7, %xmm13
  4441. aesenc %xmm7, %xmm14
  4442. aesenc %xmm7, %xmm15
  4443. movdqa 144(%rdi), %xmm7
  4444. aesenc %xmm7, %xmm8
  4445. aesenc %xmm7, %xmm9
  4446. aesenc %xmm7, %xmm10
  4447. aesenc %xmm7, %xmm11
  4448. aesenc %xmm7, %xmm12
  4449. aesenc %xmm7, %xmm13
  4450. aesenc %xmm7, %xmm14
  4451. aesenc %xmm7, %xmm15
  4452. cmpl $11, %esi
  4453. movdqa 160(%rdi), %xmm7
  4454. jl L_AES_GCM_encrypt_update_aesni_enc_done
  4455. aesenc %xmm7, %xmm8
  4456. aesenc %xmm7, %xmm9
  4457. aesenc %xmm7, %xmm10
  4458. aesenc %xmm7, %xmm11
  4459. aesenc %xmm7, %xmm12
  4460. aesenc %xmm7, %xmm13
  4461. aesenc %xmm7, %xmm14
  4462. aesenc %xmm7, %xmm15
  4463. movdqa 176(%rdi), %xmm7
  4464. aesenc %xmm7, %xmm8
  4465. aesenc %xmm7, %xmm9
  4466. aesenc %xmm7, %xmm10
  4467. aesenc %xmm7, %xmm11
  4468. aesenc %xmm7, %xmm12
  4469. aesenc %xmm7, %xmm13
  4470. aesenc %xmm7, %xmm14
  4471. aesenc %xmm7, %xmm15
  4472. cmpl $13, %esi
  4473. movdqa 192(%rdi), %xmm7
  4474. jl L_AES_GCM_encrypt_update_aesni_enc_done
  4475. aesenc %xmm7, %xmm8
  4476. aesenc %xmm7, %xmm9
  4477. aesenc %xmm7, %xmm10
  4478. aesenc %xmm7, %xmm11
  4479. aesenc %xmm7, %xmm12
  4480. aesenc %xmm7, %xmm13
  4481. aesenc %xmm7, %xmm14
  4482. aesenc %xmm7, %xmm15
  4483. movdqa 208(%rdi), %xmm7
  4484. aesenc %xmm7, %xmm8
  4485. aesenc %xmm7, %xmm9
  4486. aesenc %xmm7, %xmm10
  4487. aesenc %xmm7, %xmm11
  4488. aesenc %xmm7, %xmm12
  4489. aesenc %xmm7, %xmm13
  4490. aesenc %xmm7, %xmm14
  4491. aesenc %xmm7, %xmm15
  4492. movdqa 224(%rdi), %xmm7
  4493. L_AES_GCM_encrypt_update_aesni_enc_done:
  4494. aesenclast %xmm7, %xmm8
  4495. aesenclast %xmm7, %xmm9
  4496. movdqu (%r11), %xmm0
  4497. movdqu 16(%r11), %xmm1
  4498. pxor %xmm0, %xmm8
  4499. pxor %xmm1, %xmm9
  4500. movdqu %xmm8, (%r10)
  4501. movdqu %xmm9, 16(%r10)
  4502. aesenclast %xmm7, %xmm10
  4503. aesenclast %xmm7, %xmm11
  4504. movdqu 32(%r11), %xmm0
  4505. movdqu 48(%r11), %xmm1
  4506. pxor %xmm0, %xmm10
  4507. pxor %xmm1, %xmm11
  4508. movdqu %xmm10, 32(%r10)
  4509. movdqu %xmm11, 48(%r10)
  4510. aesenclast %xmm7, %xmm12
  4511. aesenclast %xmm7, %xmm13
  4512. movdqu 64(%r11), %xmm0
  4513. movdqu 80(%r11), %xmm1
  4514. pxor %xmm0, %xmm12
  4515. pxor %xmm1, %xmm13
  4516. movdqu %xmm12, 64(%r10)
  4517. movdqu %xmm13, 80(%r10)
  4518. aesenclast %xmm7, %xmm14
  4519. aesenclast %xmm7, %xmm15
  4520. movdqu 96(%r11), %xmm0
  4521. movdqu 112(%r11), %xmm1
  4522. pxor %xmm0, %xmm14
  4523. pxor %xmm1, %xmm15
  4524. movdqu %xmm14, 96(%r10)
  4525. movdqu %xmm15, 112(%r10)
  4526. cmpl $0x80, %r13d
  4527. movl $0x80, %r14d
  4528. jle L_AES_GCM_encrypt_update_aesni_end_128
  4529. # More 128 bytes of input
  4530. L_AES_GCM_encrypt_update_aesni_ghash_128:
  4531. leaq (%r11,%r14,1), %rcx
  4532. leaq (%r10,%r14,1), %rdx
  4533. movdqu (%r12), %xmm8
  4534. movdqa L_aes_gcm_bswap_epi64(%rip), %xmm1
  4535. movdqa %xmm8, %xmm0
  4536. pshufb %xmm1, %xmm8
  4537. movdqa %xmm0, %xmm9
  4538. paddd L_aes_gcm_one(%rip), %xmm9
  4539. pshufb %xmm1, %xmm9
  4540. movdqa %xmm0, %xmm10
  4541. paddd L_aes_gcm_two(%rip), %xmm10
  4542. pshufb %xmm1, %xmm10
  4543. movdqa %xmm0, %xmm11
  4544. paddd L_aes_gcm_three(%rip), %xmm11
  4545. pshufb %xmm1, %xmm11
  4546. movdqa %xmm0, %xmm12
  4547. paddd L_aes_gcm_four(%rip), %xmm12
  4548. pshufb %xmm1, %xmm12
  4549. movdqa %xmm0, %xmm13
  4550. paddd L_aes_gcm_five(%rip), %xmm13
  4551. pshufb %xmm1, %xmm13
  4552. movdqa %xmm0, %xmm14
  4553. paddd L_aes_gcm_six(%rip), %xmm14
  4554. pshufb %xmm1, %xmm14
  4555. movdqa %xmm0, %xmm15
  4556. paddd L_aes_gcm_seven(%rip), %xmm15
  4557. pshufb %xmm1, %xmm15
  4558. paddd L_aes_gcm_eight(%rip), %xmm0
  4559. movdqa (%rdi), %xmm7
  4560. movdqu %xmm0, (%r12)
  4561. pxor %xmm7, %xmm8
  4562. pxor %xmm7, %xmm9
  4563. pxor %xmm7, %xmm10
  4564. pxor %xmm7, %xmm11
  4565. pxor %xmm7, %xmm12
  4566. pxor %xmm7, %xmm13
  4567. pxor %xmm7, %xmm14
  4568. pxor %xmm7, %xmm15
  4569. movdqu 112(%rsp), %xmm7
  4570. movdqu -128(%rdx), %xmm0
  4571. aesenc 16(%rdi), %xmm8
  4572. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4573. pxor %xmm2, %xmm0
  4574. pshufd $0x4e, %xmm7, %xmm1
  4575. pshufd $0x4e, %xmm0, %xmm5
  4576. pxor %xmm7, %xmm1
  4577. pxor %xmm0, %xmm5
  4578. movdqa %xmm0, %xmm3
  4579. pclmulqdq $0x11, %xmm7, %xmm3
  4580. aesenc 16(%rdi), %xmm9
  4581. aesenc 16(%rdi), %xmm10
  4582. movdqa %xmm0, %xmm2
  4583. pclmulqdq $0x00, %xmm7, %xmm2
  4584. aesenc 16(%rdi), %xmm11
  4585. aesenc 16(%rdi), %xmm12
  4586. pclmulqdq $0x00, %xmm5, %xmm1
  4587. aesenc 16(%rdi), %xmm13
  4588. aesenc 16(%rdi), %xmm14
  4589. aesenc 16(%rdi), %xmm15
  4590. pxor %xmm2, %xmm1
  4591. pxor %xmm3, %xmm1
  4592. movdqu 96(%rsp), %xmm7
  4593. movdqu -112(%rdx), %xmm0
  4594. pshufd $0x4e, %xmm7, %xmm4
  4595. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4596. aesenc 32(%rdi), %xmm8
  4597. pxor %xmm7, %xmm4
  4598. pshufd $0x4e, %xmm0, %xmm5
  4599. pxor %xmm0, %xmm5
  4600. movdqa %xmm0, %xmm6
  4601. pclmulqdq $0x11, %xmm7, %xmm6
  4602. aesenc 32(%rdi), %xmm9
  4603. aesenc 32(%rdi), %xmm10
  4604. pclmulqdq $0x00, %xmm0, %xmm7
  4605. aesenc 32(%rdi), %xmm11
  4606. aesenc 32(%rdi), %xmm12
  4607. pclmulqdq $0x00, %xmm5, %xmm4
  4608. aesenc 32(%rdi), %xmm13
  4609. aesenc 32(%rdi), %xmm14
  4610. aesenc 32(%rdi), %xmm15
  4611. pxor %xmm7, %xmm1
  4612. pxor %xmm7, %xmm2
  4613. pxor %xmm6, %xmm1
  4614. pxor %xmm6, %xmm3
  4615. pxor %xmm4, %xmm1
  4616. movdqu 80(%rsp), %xmm7
  4617. movdqu -96(%rdx), %xmm0
  4618. pshufd $0x4e, %xmm7, %xmm4
  4619. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4620. aesenc 48(%rdi), %xmm8
  4621. pxor %xmm7, %xmm4
  4622. pshufd $0x4e, %xmm0, %xmm5
  4623. pxor %xmm0, %xmm5
  4624. movdqa %xmm0, %xmm6
  4625. pclmulqdq $0x11, %xmm7, %xmm6
  4626. aesenc 48(%rdi), %xmm9
  4627. aesenc 48(%rdi), %xmm10
  4628. pclmulqdq $0x00, %xmm0, %xmm7
  4629. aesenc 48(%rdi), %xmm11
  4630. aesenc 48(%rdi), %xmm12
  4631. pclmulqdq $0x00, %xmm5, %xmm4
  4632. aesenc 48(%rdi), %xmm13
  4633. aesenc 48(%rdi), %xmm14
  4634. aesenc 48(%rdi), %xmm15
  4635. pxor %xmm7, %xmm1
  4636. pxor %xmm7, %xmm2
  4637. pxor %xmm6, %xmm1
  4638. pxor %xmm6, %xmm3
  4639. pxor %xmm4, %xmm1
  4640. movdqu 64(%rsp), %xmm7
  4641. movdqu -80(%rdx), %xmm0
  4642. pshufd $0x4e, %xmm7, %xmm4
  4643. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4644. aesenc 64(%rdi), %xmm8
  4645. pxor %xmm7, %xmm4
  4646. pshufd $0x4e, %xmm0, %xmm5
  4647. pxor %xmm0, %xmm5
  4648. movdqa %xmm0, %xmm6
  4649. pclmulqdq $0x11, %xmm7, %xmm6
  4650. aesenc 64(%rdi), %xmm9
  4651. aesenc 64(%rdi), %xmm10
  4652. pclmulqdq $0x00, %xmm0, %xmm7
  4653. aesenc 64(%rdi), %xmm11
  4654. aesenc 64(%rdi), %xmm12
  4655. pclmulqdq $0x00, %xmm5, %xmm4
  4656. aesenc 64(%rdi), %xmm13
  4657. aesenc 64(%rdi), %xmm14
  4658. aesenc 64(%rdi), %xmm15
  4659. pxor %xmm7, %xmm1
  4660. pxor %xmm7, %xmm2
  4661. pxor %xmm6, %xmm1
  4662. pxor %xmm6, %xmm3
  4663. pxor %xmm4, %xmm1
  4664. movdqu 48(%rsp), %xmm7
  4665. movdqu -64(%rdx), %xmm0
  4666. pshufd $0x4e, %xmm7, %xmm4
  4667. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4668. aesenc 80(%rdi), %xmm8
  4669. pxor %xmm7, %xmm4
  4670. pshufd $0x4e, %xmm0, %xmm5
  4671. pxor %xmm0, %xmm5
  4672. movdqa %xmm0, %xmm6
  4673. pclmulqdq $0x11, %xmm7, %xmm6
  4674. aesenc 80(%rdi), %xmm9
  4675. aesenc 80(%rdi), %xmm10
  4676. pclmulqdq $0x00, %xmm0, %xmm7
  4677. aesenc 80(%rdi), %xmm11
  4678. aesenc 80(%rdi), %xmm12
  4679. pclmulqdq $0x00, %xmm5, %xmm4
  4680. aesenc 80(%rdi), %xmm13
  4681. aesenc 80(%rdi), %xmm14
  4682. aesenc 80(%rdi), %xmm15
  4683. pxor %xmm7, %xmm1
  4684. pxor %xmm7, %xmm2
  4685. pxor %xmm6, %xmm1
  4686. pxor %xmm6, %xmm3
  4687. pxor %xmm4, %xmm1
  4688. movdqu 32(%rsp), %xmm7
  4689. movdqu -48(%rdx), %xmm0
  4690. pshufd $0x4e, %xmm7, %xmm4
  4691. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4692. aesenc 96(%rdi), %xmm8
  4693. pxor %xmm7, %xmm4
  4694. pshufd $0x4e, %xmm0, %xmm5
  4695. pxor %xmm0, %xmm5
  4696. movdqa %xmm0, %xmm6
  4697. pclmulqdq $0x11, %xmm7, %xmm6
  4698. aesenc 96(%rdi), %xmm9
  4699. aesenc 96(%rdi), %xmm10
  4700. pclmulqdq $0x00, %xmm0, %xmm7
  4701. aesenc 96(%rdi), %xmm11
  4702. aesenc 96(%rdi), %xmm12
  4703. pclmulqdq $0x00, %xmm5, %xmm4
  4704. aesenc 96(%rdi), %xmm13
  4705. aesenc 96(%rdi), %xmm14
  4706. aesenc 96(%rdi), %xmm15
  4707. pxor %xmm7, %xmm1
  4708. pxor %xmm7, %xmm2
  4709. pxor %xmm6, %xmm1
  4710. pxor %xmm6, %xmm3
  4711. pxor %xmm4, %xmm1
  4712. movdqu 16(%rsp), %xmm7
  4713. movdqu -32(%rdx), %xmm0
  4714. pshufd $0x4e, %xmm7, %xmm4
  4715. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4716. aesenc 112(%rdi), %xmm8
  4717. pxor %xmm7, %xmm4
  4718. pshufd $0x4e, %xmm0, %xmm5
  4719. pxor %xmm0, %xmm5
  4720. movdqa %xmm0, %xmm6
  4721. pclmulqdq $0x11, %xmm7, %xmm6
  4722. aesenc 112(%rdi), %xmm9
  4723. aesenc 112(%rdi), %xmm10
  4724. pclmulqdq $0x00, %xmm0, %xmm7
  4725. aesenc 112(%rdi), %xmm11
  4726. aesenc 112(%rdi), %xmm12
  4727. pclmulqdq $0x00, %xmm5, %xmm4
  4728. aesenc 112(%rdi), %xmm13
  4729. aesenc 112(%rdi), %xmm14
  4730. aesenc 112(%rdi), %xmm15
  4731. pxor %xmm7, %xmm1
  4732. pxor %xmm7, %xmm2
  4733. pxor %xmm6, %xmm1
  4734. pxor %xmm6, %xmm3
  4735. pxor %xmm4, %xmm1
  4736. movdqu (%rsp), %xmm7
  4737. movdqu -16(%rdx), %xmm0
  4738. pshufd $0x4e, %xmm7, %xmm4
  4739. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  4740. aesenc 128(%rdi), %xmm8
  4741. pxor %xmm7, %xmm4
  4742. pshufd $0x4e, %xmm0, %xmm5
  4743. pxor %xmm0, %xmm5
  4744. movdqa %xmm0, %xmm6
  4745. pclmulqdq $0x11, %xmm7, %xmm6
  4746. aesenc 128(%rdi), %xmm9
  4747. aesenc 128(%rdi), %xmm10
  4748. pclmulqdq $0x00, %xmm0, %xmm7
  4749. aesenc 128(%rdi), %xmm11
  4750. aesenc 128(%rdi), %xmm12
  4751. pclmulqdq $0x00, %xmm5, %xmm4
  4752. aesenc 128(%rdi), %xmm13
  4753. aesenc 128(%rdi), %xmm14
  4754. aesenc 128(%rdi), %xmm15
  4755. pxor %xmm7, %xmm1
  4756. pxor %xmm7, %xmm2
  4757. pxor %xmm6, %xmm1
  4758. pxor %xmm6, %xmm3
  4759. pxor %xmm4, %xmm1
  4760. movdqa %xmm1, %xmm5
  4761. psrldq $8, %xmm1
  4762. pslldq $8, %xmm5
  4763. aesenc 144(%rdi), %xmm8
  4764. pxor %xmm5, %xmm2
  4765. pxor %xmm1, %xmm3
  4766. movdqa %xmm2, %xmm7
  4767. movdqa %xmm2, %xmm4
  4768. movdqa %xmm2, %xmm5
  4769. aesenc 144(%rdi), %xmm9
  4770. pslld $31, %xmm7
  4771. pslld $30, %xmm4
  4772. pslld $25, %xmm5
  4773. aesenc 144(%rdi), %xmm10
  4774. pxor %xmm4, %xmm7
  4775. pxor %xmm5, %xmm7
  4776. aesenc 144(%rdi), %xmm11
  4777. movdqa %xmm7, %xmm4
  4778. pslldq $12, %xmm7
  4779. psrldq $4, %xmm4
  4780. aesenc 144(%rdi), %xmm12
  4781. pxor %xmm7, %xmm2
  4782. movdqa %xmm2, %xmm5
  4783. movdqa %xmm2, %xmm1
  4784. movdqa %xmm2, %xmm0
  4785. aesenc 144(%rdi), %xmm13
  4786. psrld $0x01, %xmm5
  4787. psrld $2, %xmm1
  4788. psrld $7, %xmm0
  4789. aesenc 144(%rdi), %xmm14
  4790. pxor %xmm1, %xmm5
  4791. pxor %xmm0, %xmm5
  4792. aesenc 144(%rdi), %xmm15
  4793. pxor %xmm4, %xmm5
  4794. pxor %xmm5, %xmm2
  4795. pxor %xmm3, %xmm2
  4796. cmpl $11, %esi
  4797. movdqa 160(%rdi), %xmm7
  4798. jl L_AES_GCM_encrypt_update_aesni_aesenc_128_ghash_avx_done
  4799. aesenc %xmm7, %xmm8
  4800. aesenc %xmm7, %xmm9
  4801. aesenc %xmm7, %xmm10
  4802. aesenc %xmm7, %xmm11
  4803. aesenc %xmm7, %xmm12
  4804. aesenc %xmm7, %xmm13
  4805. aesenc %xmm7, %xmm14
  4806. aesenc %xmm7, %xmm15
  4807. movdqa 176(%rdi), %xmm7
  4808. aesenc %xmm7, %xmm8
  4809. aesenc %xmm7, %xmm9
  4810. aesenc %xmm7, %xmm10
  4811. aesenc %xmm7, %xmm11
  4812. aesenc %xmm7, %xmm12
  4813. aesenc %xmm7, %xmm13
  4814. aesenc %xmm7, %xmm14
  4815. aesenc %xmm7, %xmm15
  4816. cmpl $13, %esi
  4817. movdqa 192(%rdi), %xmm7
  4818. jl L_AES_GCM_encrypt_update_aesni_aesenc_128_ghash_avx_done
  4819. aesenc %xmm7, %xmm8
  4820. aesenc %xmm7, %xmm9
  4821. aesenc %xmm7, %xmm10
  4822. aesenc %xmm7, %xmm11
  4823. aesenc %xmm7, %xmm12
  4824. aesenc %xmm7, %xmm13
  4825. aesenc %xmm7, %xmm14
  4826. aesenc %xmm7, %xmm15
  4827. movdqa 208(%rdi), %xmm7
  4828. aesenc %xmm7, %xmm8
  4829. aesenc %xmm7, %xmm9
  4830. aesenc %xmm7, %xmm10
  4831. aesenc %xmm7, %xmm11
  4832. aesenc %xmm7, %xmm12
  4833. aesenc %xmm7, %xmm13
  4834. aesenc %xmm7, %xmm14
  4835. aesenc %xmm7, %xmm15
  4836. movdqa 224(%rdi), %xmm7
  4837. L_AES_GCM_encrypt_update_aesni_aesenc_128_ghash_avx_done:
  4838. aesenclast %xmm7, %xmm8
  4839. aesenclast %xmm7, %xmm9
  4840. movdqu (%rcx), %xmm0
  4841. movdqu 16(%rcx), %xmm1
  4842. pxor %xmm0, %xmm8
  4843. pxor %xmm1, %xmm9
  4844. movdqu %xmm8, (%rdx)
  4845. movdqu %xmm9, 16(%rdx)
  4846. aesenclast %xmm7, %xmm10
  4847. aesenclast %xmm7, %xmm11
  4848. movdqu 32(%rcx), %xmm0
  4849. movdqu 48(%rcx), %xmm1
  4850. pxor %xmm0, %xmm10
  4851. pxor %xmm1, %xmm11
  4852. movdqu %xmm10, 32(%rdx)
  4853. movdqu %xmm11, 48(%rdx)
  4854. aesenclast %xmm7, %xmm12
  4855. aesenclast %xmm7, %xmm13
  4856. movdqu 64(%rcx), %xmm0
  4857. movdqu 80(%rcx), %xmm1
  4858. pxor %xmm0, %xmm12
  4859. pxor %xmm1, %xmm13
  4860. movdqu %xmm12, 64(%rdx)
  4861. movdqu %xmm13, 80(%rdx)
  4862. aesenclast %xmm7, %xmm14
  4863. aesenclast %xmm7, %xmm15
  4864. movdqu 96(%rcx), %xmm0
  4865. movdqu 112(%rcx), %xmm1
  4866. pxor %xmm0, %xmm14
  4867. pxor %xmm1, %xmm15
  4868. movdqu %xmm14, 96(%rdx)
  4869. movdqu %xmm15, 112(%rdx)
  4870. addl $0x80, %r14d
  4871. cmpl %r13d, %r14d
  4872. jl L_AES_GCM_encrypt_update_aesni_ghash_128
  4873. L_AES_GCM_encrypt_update_aesni_end_128:
  4874. movdqa L_aes_gcm_bswap_mask(%rip), %xmm4
  4875. pshufb %xmm4, %xmm8
  4876. pshufb %xmm4, %xmm9
  4877. pshufb %xmm4, %xmm10
  4878. pshufb %xmm4, %xmm11
  4879. pxor %xmm2, %xmm8
  4880. pshufb %xmm4, %xmm12
  4881. pshufb %xmm4, %xmm13
  4882. pshufb %xmm4, %xmm14
  4883. pshufb %xmm4, %xmm15
  4884. movdqu 112(%rsp), %xmm7
  4885. pshufd $0x4e, %xmm8, %xmm1
  4886. pshufd $0x4e, %xmm7, %xmm2
  4887. movdqa %xmm7, %xmm3
  4888. movdqa %xmm7, %xmm0
  4889. pclmulqdq $0x11, %xmm8, %xmm3
  4890. pclmulqdq $0x00, %xmm8, %xmm0
  4891. pxor %xmm8, %xmm1
  4892. pxor %xmm7, %xmm2
  4893. pclmulqdq $0x00, %xmm2, %xmm1
  4894. pxor %xmm0, %xmm1
  4895. pxor %xmm3, %xmm1
  4896. movdqa %xmm1, %xmm2
  4897. movdqa %xmm0, %xmm4
  4898. movdqa %xmm3, %xmm6
  4899. pslldq $8, %xmm2
  4900. psrldq $8, %xmm1
  4901. pxor %xmm2, %xmm4
  4902. pxor %xmm1, %xmm6
  4903. movdqu 96(%rsp), %xmm7
  4904. pshufd $0x4e, %xmm9, %xmm1
  4905. pshufd $0x4e, %xmm7, %xmm2
  4906. movdqa %xmm7, %xmm3
  4907. movdqa %xmm7, %xmm0
  4908. pclmulqdq $0x11, %xmm9, %xmm3
  4909. pclmulqdq $0x00, %xmm9, %xmm0
  4910. pxor %xmm9, %xmm1
  4911. pxor %xmm7, %xmm2
  4912. pclmulqdq $0x00, %xmm2, %xmm1
  4913. pxor %xmm0, %xmm1
  4914. pxor %xmm3, %xmm1
  4915. movdqa %xmm1, %xmm2
  4916. pxor %xmm0, %xmm4
  4917. pxor %xmm3, %xmm6
  4918. pslldq $8, %xmm2
  4919. psrldq $8, %xmm1
  4920. pxor %xmm2, %xmm4
  4921. pxor %xmm1, %xmm6
  4922. movdqu 80(%rsp), %xmm7
  4923. pshufd $0x4e, %xmm10, %xmm1
  4924. pshufd $0x4e, %xmm7, %xmm2
  4925. movdqa %xmm7, %xmm3
  4926. movdqa %xmm7, %xmm0
  4927. pclmulqdq $0x11, %xmm10, %xmm3
  4928. pclmulqdq $0x00, %xmm10, %xmm0
  4929. pxor %xmm10, %xmm1
  4930. pxor %xmm7, %xmm2
  4931. pclmulqdq $0x00, %xmm2, %xmm1
  4932. pxor %xmm0, %xmm1
  4933. pxor %xmm3, %xmm1
  4934. movdqa %xmm1, %xmm2
  4935. pxor %xmm0, %xmm4
  4936. pxor %xmm3, %xmm6
  4937. pslldq $8, %xmm2
  4938. psrldq $8, %xmm1
  4939. pxor %xmm2, %xmm4
  4940. pxor %xmm1, %xmm6
  4941. movdqu 64(%rsp), %xmm7
  4942. pshufd $0x4e, %xmm11, %xmm1
  4943. pshufd $0x4e, %xmm7, %xmm2
  4944. movdqa %xmm7, %xmm3
  4945. movdqa %xmm7, %xmm0
  4946. pclmulqdq $0x11, %xmm11, %xmm3
  4947. pclmulqdq $0x00, %xmm11, %xmm0
  4948. pxor %xmm11, %xmm1
  4949. pxor %xmm7, %xmm2
  4950. pclmulqdq $0x00, %xmm2, %xmm1
  4951. pxor %xmm0, %xmm1
  4952. pxor %xmm3, %xmm1
  4953. movdqa %xmm1, %xmm2
  4954. pxor %xmm0, %xmm4
  4955. pxor %xmm3, %xmm6
  4956. pslldq $8, %xmm2
  4957. psrldq $8, %xmm1
  4958. pxor %xmm2, %xmm4
  4959. pxor %xmm1, %xmm6
  4960. movdqu 48(%rsp), %xmm7
  4961. pshufd $0x4e, %xmm12, %xmm1
  4962. pshufd $0x4e, %xmm7, %xmm2
  4963. movdqa %xmm7, %xmm3
  4964. movdqa %xmm7, %xmm0
  4965. pclmulqdq $0x11, %xmm12, %xmm3
  4966. pclmulqdq $0x00, %xmm12, %xmm0
  4967. pxor %xmm12, %xmm1
  4968. pxor %xmm7, %xmm2
  4969. pclmulqdq $0x00, %xmm2, %xmm1
  4970. pxor %xmm0, %xmm1
  4971. pxor %xmm3, %xmm1
  4972. movdqa %xmm1, %xmm2
  4973. pxor %xmm0, %xmm4
  4974. pxor %xmm3, %xmm6
  4975. pslldq $8, %xmm2
  4976. psrldq $8, %xmm1
  4977. pxor %xmm2, %xmm4
  4978. pxor %xmm1, %xmm6
  4979. movdqu 32(%rsp), %xmm7
  4980. pshufd $0x4e, %xmm13, %xmm1
  4981. pshufd $0x4e, %xmm7, %xmm2
  4982. movdqa %xmm7, %xmm3
  4983. movdqa %xmm7, %xmm0
  4984. pclmulqdq $0x11, %xmm13, %xmm3
  4985. pclmulqdq $0x00, %xmm13, %xmm0
  4986. pxor %xmm13, %xmm1
  4987. pxor %xmm7, %xmm2
  4988. pclmulqdq $0x00, %xmm2, %xmm1
  4989. pxor %xmm0, %xmm1
  4990. pxor %xmm3, %xmm1
  4991. movdqa %xmm1, %xmm2
  4992. pxor %xmm0, %xmm4
  4993. pxor %xmm3, %xmm6
  4994. pslldq $8, %xmm2
  4995. psrldq $8, %xmm1
  4996. pxor %xmm2, %xmm4
  4997. pxor %xmm1, %xmm6
  4998. movdqu 16(%rsp), %xmm7
  4999. pshufd $0x4e, %xmm14, %xmm1
  5000. pshufd $0x4e, %xmm7, %xmm2
  5001. movdqa %xmm7, %xmm3
  5002. movdqa %xmm7, %xmm0
  5003. pclmulqdq $0x11, %xmm14, %xmm3
  5004. pclmulqdq $0x00, %xmm14, %xmm0
  5005. pxor %xmm14, %xmm1
  5006. pxor %xmm7, %xmm2
  5007. pclmulqdq $0x00, %xmm2, %xmm1
  5008. pxor %xmm0, %xmm1
  5009. pxor %xmm3, %xmm1
  5010. movdqa %xmm1, %xmm2
  5011. pxor %xmm0, %xmm4
  5012. pxor %xmm3, %xmm6
  5013. pslldq $8, %xmm2
  5014. psrldq $8, %xmm1
  5015. pxor %xmm2, %xmm4
  5016. pxor %xmm1, %xmm6
  5017. movdqu (%rsp), %xmm7
  5018. pshufd $0x4e, %xmm15, %xmm1
  5019. pshufd $0x4e, %xmm7, %xmm2
  5020. movdqa %xmm7, %xmm3
  5021. movdqa %xmm7, %xmm0
  5022. pclmulqdq $0x11, %xmm15, %xmm3
  5023. pclmulqdq $0x00, %xmm15, %xmm0
  5024. pxor %xmm15, %xmm1
  5025. pxor %xmm7, %xmm2
  5026. pclmulqdq $0x00, %xmm2, %xmm1
  5027. pxor %xmm0, %xmm1
  5028. pxor %xmm3, %xmm1
  5029. movdqa %xmm1, %xmm2
  5030. pxor %xmm0, %xmm4
  5031. pxor %xmm3, %xmm6
  5032. pslldq $8, %xmm2
  5033. psrldq $8, %xmm1
  5034. pxor %xmm2, %xmm4
  5035. pxor %xmm1, %xmm6
  5036. movdqa %xmm4, %xmm0
  5037. movdqa %xmm4, %xmm1
  5038. movdqa %xmm4, %xmm2
  5039. pslld $31, %xmm0
  5040. pslld $30, %xmm1
  5041. pslld $25, %xmm2
  5042. pxor %xmm1, %xmm0
  5043. pxor %xmm2, %xmm0
  5044. movdqa %xmm0, %xmm1
  5045. psrldq $4, %xmm1
  5046. pslldq $12, %xmm0
  5047. pxor %xmm0, %xmm4
  5048. movdqa %xmm4, %xmm2
  5049. movdqa %xmm4, %xmm3
  5050. movdqa %xmm4, %xmm0
  5051. psrld $0x01, %xmm2
  5052. psrld $2, %xmm3
  5053. psrld $7, %xmm0
  5054. pxor %xmm3, %xmm2
  5055. pxor %xmm0, %xmm2
  5056. pxor %xmm1, %xmm2
  5057. pxor %xmm4, %xmm2
  5058. pxor %xmm2, %xmm6
  5059. movdqu (%rsp), %xmm5
  5060. L_AES_GCM_encrypt_update_aesni_done_128:
  5061. movl %r8d, %edx
  5062. cmpl %edx, %r14d
  5063. jge L_AES_GCM_encrypt_update_aesni_done_enc
  5064. movl %r8d, %r13d
  5065. andl $0xfffffff0, %r13d
  5066. cmpl %r13d, %r14d
  5067. jge L_AES_GCM_encrypt_update_aesni_last_block_done
  5068. leaq (%r11,%r14,1), %rcx
  5069. leaq (%r10,%r14,1), %rdx
  5070. movdqu (%r12), %xmm8
  5071. movdqa %xmm8, %xmm9
  5072. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm8
  5073. paddd L_aes_gcm_one(%rip), %xmm9
  5074. pxor (%rdi), %xmm8
  5075. movdqu %xmm9, (%r12)
  5076. aesenc 16(%rdi), %xmm8
  5077. aesenc 32(%rdi), %xmm8
  5078. aesenc 48(%rdi), %xmm8
  5079. aesenc 64(%rdi), %xmm8
  5080. aesenc 80(%rdi), %xmm8
  5081. aesenc 96(%rdi), %xmm8
  5082. aesenc 112(%rdi), %xmm8
  5083. aesenc 128(%rdi), %xmm8
  5084. aesenc 144(%rdi), %xmm8
  5085. cmpl $11, %esi
  5086. movdqa 160(%rdi), %xmm9
  5087. jl L_AES_GCM_encrypt_update_aesni_aesenc_block_aesenc_avx_last
  5088. aesenc %xmm9, %xmm8
  5089. aesenc 176(%rdi), %xmm8
  5090. cmpl $13, %esi
  5091. movdqa 192(%rdi), %xmm9
  5092. jl L_AES_GCM_encrypt_update_aesni_aesenc_block_aesenc_avx_last
  5093. aesenc %xmm9, %xmm8
  5094. aesenc 208(%rdi), %xmm8
  5095. movdqa 224(%rdi), %xmm9
  5096. L_AES_GCM_encrypt_update_aesni_aesenc_block_aesenc_avx_last:
  5097. aesenclast %xmm9, %xmm8
  5098. movdqu (%rcx), %xmm9
  5099. pxor %xmm9, %xmm8
  5100. movdqu %xmm8, (%rdx)
  5101. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  5102. pxor %xmm8, %xmm6
  5103. addl $16, %r14d
  5104. cmpl %r13d, %r14d
  5105. jge L_AES_GCM_encrypt_update_aesni_last_block_ghash
  5106. L_AES_GCM_encrypt_update_aesni_last_block_start:
  5107. leaq (%r11,%r14,1), %rcx
  5108. leaq (%r10,%r14,1), %rdx
  5109. movdqu (%r12), %xmm8
  5110. movdqa %xmm8, %xmm9
  5111. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm8
  5112. paddd L_aes_gcm_one(%rip), %xmm9
  5113. pxor (%rdi), %xmm8
  5114. movdqu %xmm9, (%r12)
  5115. movdqa %xmm6, %xmm10
  5116. pclmulqdq $16, %xmm5, %xmm10
  5117. aesenc 16(%rdi), %xmm8
  5118. aesenc 32(%rdi), %xmm8
  5119. movdqa %xmm6, %xmm11
  5120. pclmulqdq $0x01, %xmm5, %xmm11
  5121. aesenc 48(%rdi), %xmm8
  5122. aesenc 64(%rdi), %xmm8
  5123. movdqa %xmm6, %xmm12
  5124. pclmulqdq $0x00, %xmm5, %xmm12
  5125. aesenc 80(%rdi), %xmm8
  5126. movdqa %xmm6, %xmm1
  5127. pclmulqdq $0x11, %xmm5, %xmm1
  5128. aesenc 96(%rdi), %xmm8
  5129. pxor %xmm11, %xmm10
  5130. movdqa %xmm10, %xmm2
  5131. psrldq $8, %xmm10
  5132. pslldq $8, %xmm2
  5133. aesenc 112(%rdi), %xmm8
  5134. movdqa %xmm1, %xmm3
  5135. pxor %xmm12, %xmm2
  5136. pxor %xmm10, %xmm3
  5137. movdqa L_aes_gcm_mod2_128(%rip), %xmm0
  5138. movdqa %xmm2, %xmm11
  5139. pclmulqdq $16, %xmm0, %xmm11
  5140. aesenc 128(%rdi), %xmm8
  5141. pshufd $0x4e, %xmm2, %xmm10
  5142. pxor %xmm11, %xmm10
  5143. movdqa %xmm10, %xmm11
  5144. pclmulqdq $16, %xmm0, %xmm11
  5145. aesenc 144(%rdi), %xmm8
  5146. pshufd $0x4e, %xmm10, %xmm6
  5147. pxor %xmm11, %xmm6
  5148. pxor %xmm3, %xmm6
  5149. cmpl $11, %esi
  5150. movdqa 160(%rdi), %xmm9
  5151. jl L_AES_GCM_encrypt_update_aesni_aesenc_gfmul_last
  5152. aesenc %xmm9, %xmm8
  5153. aesenc 176(%rdi), %xmm8
  5154. cmpl $13, %esi
  5155. movdqa 192(%rdi), %xmm9
  5156. jl L_AES_GCM_encrypt_update_aesni_aesenc_gfmul_last
  5157. aesenc %xmm9, %xmm8
  5158. aesenc 208(%rdi), %xmm8
  5159. movdqa 224(%rdi), %xmm9
  5160. L_AES_GCM_encrypt_update_aesni_aesenc_gfmul_last:
  5161. aesenclast %xmm9, %xmm8
  5162. movdqu (%rcx), %xmm9
  5163. pxor %xmm9, %xmm8
  5164. movdqu %xmm8, (%rdx)
  5165. pshufb L_aes_gcm_bswap_mask(%rip), %xmm8
  5166. pxor %xmm8, %xmm6
  5167. addl $16, %r14d
  5168. cmpl %r13d, %r14d
  5169. jl L_AES_GCM_encrypt_update_aesni_last_block_start
  5170. L_AES_GCM_encrypt_update_aesni_last_block_ghash:
  5171. pshufd $0x4e, %xmm5, %xmm9
  5172. pshufd $0x4e, %xmm6, %xmm10
  5173. movdqa %xmm6, %xmm11
  5174. movdqa %xmm6, %xmm8
  5175. pclmulqdq $0x11, %xmm5, %xmm11
  5176. pclmulqdq $0x00, %xmm5, %xmm8
  5177. pxor %xmm5, %xmm9
  5178. pxor %xmm6, %xmm10
  5179. pclmulqdq $0x00, %xmm10, %xmm9
  5180. pxor %xmm8, %xmm9
  5181. pxor %xmm11, %xmm9
  5182. movdqa %xmm9, %xmm10
  5183. movdqa %xmm11, %xmm6
  5184. pslldq $8, %xmm10
  5185. psrldq $8, %xmm9
  5186. pxor %xmm10, %xmm8
  5187. pxor %xmm9, %xmm6
  5188. movdqa %xmm8, %xmm12
  5189. movdqa %xmm8, %xmm13
  5190. movdqa %xmm8, %xmm14
  5191. pslld $31, %xmm12
  5192. pslld $30, %xmm13
  5193. pslld $25, %xmm14
  5194. pxor %xmm13, %xmm12
  5195. pxor %xmm14, %xmm12
  5196. movdqa %xmm12, %xmm13
  5197. psrldq $4, %xmm13
  5198. pslldq $12, %xmm12
  5199. pxor %xmm12, %xmm8
  5200. movdqa %xmm8, %xmm14
  5201. movdqa %xmm8, %xmm10
  5202. movdqa %xmm8, %xmm9
  5203. psrld $0x01, %xmm14
  5204. psrld $2, %xmm10
  5205. psrld $7, %xmm9
  5206. pxor %xmm10, %xmm14
  5207. pxor %xmm9, %xmm14
  5208. pxor %xmm13, %xmm14
  5209. pxor %xmm8, %xmm14
  5210. pxor %xmm14, %xmm6
  5211. L_AES_GCM_encrypt_update_aesni_last_block_done:
  5212. L_AES_GCM_encrypt_update_aesni_done_enc:
  5213. movdqa %xmm6, (%r9)
  5214. addq $0xa0, %rsp
  5215. popq %r14
  5216. popq %r12
  5217. popq %r13
  5218. repz retq
  5219. #ifndef __APPLE__
  5220. .size AES_GCM_encrypt_update_aesni,.-AES_GCM_encrypt_update_aesni
  5221. #endif /* __APPLE__ */
  5222. #ifndef __APPLE__
  5223. .text
  5224. .globl AES_GCM_encrypt_final_aesni
  5225. .type AES_GCM_encrypt_final_aesni,@function
  5226. .align 16
  5227. AES_GCM_encrypt_final_aesni:
  5228. #else
  5229. .section __TEXT,__text
  5230. .globl _AES_GCM_encrypt_final_aesni
  5231. .p2align 4
  5232. _AES_GCM_encrypt_final_aesni:
  5233. #endif /* __APPLE__ */
  5234. pushq %r13
  5235. movl %edx, %eax
  5236. movl %ecx, %r10d
  5237. movl %r8d, %r11d
  5238. movq 16(%rsp), %r8
  5239. subq $16, %rsp
  5240. movdqa (%rdi), %xmm4
  5241. movdqa (%r9), %xmm5
  5242. movdqa (%r8), %xmm6
  5243. movdqa %xmm5, %xmm8
  5244. movdqa %xmm5, %xmm7
  5245. psrlq $63, %xmm8
  5246. psllq $0x01, %xmm7
  5247. pslldq $8, %xmm8
  5248. por %xmm8, %xmm7
  5249. pshufd $0xff, %xmm5, %xmm5
  5250. psrad $31, %xmm5
  5251. pand L_aes_gcm_mod2_128(%rip), %xmm5
  5252. pxor %xmm7, %xmm5
  5253. movl %r10d, %edx
  5254. movl %r11d, %ecx
  5255. shlq $3, %rdx
  5256. shlq $3, %rcx
  5257. pinsrq $0x00, %rdx, %xmm0
  5258. pinsrq $0x01, %rcx, %xmm0
  5259. pxor %xmm0, %xmm4
  5260. pshufd $0x4e, %xmm5, %xmm8
  5261. pshufd $0x4e, %xmm4, %xmm9
  5262. movdqa %xmm4, %xmm10
  5263. movdqa %xmm4, %xmm7
  5264. pclmulqdq $0x11, %xmm5, %xmm10
  5265. pclmulqdq $0x00, %xmm5, %xmm7
  5266. pxor %xmm5, %xmm8
  5267. pxor %xmm4, %xmm9
  5268. pclmulqdq $0x00, %xmm9, %xmm8
  5269. pxor %xmm7, %xmm8
  5270. pxor %xmm10, %xmm8
  5271. movdqa %xmm8, %xmm9
  5272. movdqa %xmm10, %xmm4
  5273. pslldq $8, %xmm9
  5274. psrldq $8, %xmm8
  5275. pxor %xmm9, %xmm7
  5276. pxor %xmm8, %xmm4
  5277. movdqa %xmm7, %xmm11
  5278. movdqa %xmm7, %xmm12
  5279. movdqa %xmm7, %xmm13
  5280. pslld $31, %xmm11
  5281. pslld $30, %xmm12
  5282. pslld $25, %xmm13
  5283. pxor %xmm12, %xmm11
  5284. pxor %xmm13, %xmm11
  5285. movdqa %xmm11, %xmm12
  5286. psrldq $4, %xmm12
  5287. pslldq $12, %xmm11
  5288. pxor %xmm11, %xmm7
  5289. movdqa %xmm7, %xmm13
  5290. movdqa %xmm7, %xmm9
  5291. movdqa %xmm7, %xmm8
  5292. psrld $0x01, %xmm13
  5293. psrld $2, %xmm9
  5294. psrld $7, %xmm8
  5295. pxor %xmm9, %xmm13
  5296. pxor %xmm8, %xmm13
  5297. pxor %xmm12, %xmm13
  5298. pxor %xmm7, %xmm13
  5299. pxor %xmm13, %xmm4
  5300. pshufb L_aes_gcm_bswap_mask(%rip), %xmm4
  5301. movdqu %xmm6, %xmm0
  5302. pxor %xmm4, %xmm0
  5303. cmpl $16, %eax
  5304. je L_AES_GCM_encrypt_final_aesni_store_tag_16
  5305. xorq %rcx, %rcx
  5306. movdqu %xmm0, (%rsp)
  5307. L_AES_GCM_encrypt_final_aesni_store_tag_loop:
  5308. movzbl (%rsp,%rcx,1), %r13d
  5309. movb %r13b, (%rsi,%rcx,1)
  5310. incl %ecx
  5311. cmpl %eax, %ecx
  5312. jne L_AES_GCM_encrypt_final_aesni_store_tag_loop
  5313. jmp L_AES_GCM_encrypt_final_aesni_store_tag_done
  5314. L_AES_GCM_encrypt_final_aesni_store_tag_16:
  5315. movdqu %xmm0, (%rsi)
  5316. L_AES_GCM_encrypt_final_aesni_store_tag_done:
  5317. addq $16, %rsp
  5318. popq %r13
  5319. repz retq
  5320. #ifndef __APPLE__
  5321. .size AES_GCM_encrypt_final_aesni,.-AES_GCM_encrypt_final_aesni
  5322. #endif /* __APPLE__ */
  5323. #ifndef __APPLE__
  5324. .text
  5325. .globl AES_GCM_decrypt_update_aesni
  5326. .type AES_GCM_decrypt_update_aesni,@function
  5327. .align 16
  5328. AES_GCM_decrypt_update_aesni:
  5329. #else
  5330. .section __TEXT,__text
  5331. .globl _AES_GCM_decrypt_update_aesni
  5332. .p2align 4
  5333. _AES_GCM_decrypt_update_aesni:
  5334. #endif /* __APPLE__ */
  5335. pushq %r13
  5336. pushq %r12
  5337. pushq %r14
  5338. pushq %r15
  5339. movq %rdx, %r10
  5340. movq %rcx, %r11
  5341. movq 40(%rsp), %rax
  5342. movq 48(%rsp), %r12
  5343. subq $0xa8, %rsp
  5344. movdqa (%r9), %xmm6
  5345. movdqa (%rax), %xmm5
  5346. movdqa %xmm5, %xmm9
  5347. movdqa %xmm5, %xmm8
  5348. psrlq $63, %xmm9
  5349. psllq $0x01, %xmm8
  5350. pslldq $8, %xmm9
  5351. por %xmm9, %xmm8
  5352. pshufd $0xff, %xmm5, %xmm5
  5353. psrad $31, %xmm5
  5354. pand L_aes_gcm_mod2_128(%rip), %xmm5
  5355. pxor %xmm8, %xmm5
  5356. xorl %r14d, %r14d
  5357. cmpl $0x80, %r8d
  5358. movl %r8d, %r13d
  5359. jl L_AES_GCM_decrypt_update_aesni_done_128
  5360. andl $0xffffff80, %r13d
  5361. movdqa %xmm6, %xmm2
  5362. # H ^ 1
  5363. movdqu %xmm5, (%rsp)
  5364. # H ^ 2
  5365. pshufd $0x4e, %xmm5, %xmm9
  5366. pshufd $0x4e, %xmm5, %xmm10
  5367. movdqa %xmm5, %xmm11
  5368. movdqa %xmm5, %xmm8
  5369. pclmulqdq $0x11, %xmm5, %xmm11
  5370. pclmulqdq $0x00, %xmm5, %xmm8
  5371. pxor %xmm5, %xmm9
  5372. pxor %xmm5, %xmm10
  5373. pclmulqdq $0x00, %xmm10, %xmm9
  5374. pxor %xmm8, %xmm9
  5375. pxor %xmm11, %xmm9
  5376. movdqa %xmm9, %xmm10
  5377. movdqa %xmm11, %xmm0
  5378. pslldq $8, %xmm10
  5379. psrldq $8, %xmm9
  5380. pxor %xmm10, %xmm8
  5381. pxor %xmm9, %xmm0
  5382. movdqa %xmm8, %xmm12
  5383. movdqa %xmm8, %xmm13
  5384. movdqa %xmm8, %xmm14
  5385. pslld $31, %xmm12
  5386. pslld $30, %xmm13
  5387. pslld $25, %xmm14
  5388. pxor %xmm13, %xmm12
  5389. pxor %xmm14, %xmm12
  5390. movdqa %xmm12, %xmm13
  5391. psrldq $4, %xmm13
  5392. pslldq $12, %xmm12
  5393. pxor %xmm12, %xmm8
  5394. movdqa %xmm8, %xmm14
  5395. movdqa %xmm8, %xmm10
  5396. movdqa %xmm8, %xmm9
  5397. psrld $0x01, %xmm14
  5398. psrld $2, %xmm10
  5399. psrld $7, %xmm9
  5400. pxor %xmm10, %xmm14
  5401. pxor %xmm9, %xmm14
  5402. pxor %xmm13, %xmm14
  5403. pxor %xmm8, %xmm14
  5404. pxor %xmm14, %xmm0
  5405. movdqu %xmm0, 16(%rsp)
  5406. # H ^ 3
  5407. pshufd $0x4e, %xmm5, %xmm9
  5408. pshufd $0x4e, %xmm0, %xmm10
  5409. movdqa %xmm0, %xmm11
  5410. movdqa %xmm0, %xmm8
  5411. pclmulqdq $0x11, %xmm5, %xmm11
  5412. pclmulqdq $0x00, %xmm5, %xmm8
  5413. pxor %xmm5, %xmm9
  5414. pxor %xmm0, %xmm10
  5415. pclmulqdq $0x00, %xmm10, %xmm9
  5416. pxor %xmm8, %xmm9
  5417. pxor %xmm11, %xmm9
  5418. movdqa %xmm9, %xmm10
  5419. movdqa %xmm11, %xmm1
  5420. pslldq $8, %xmm10
  5421. psrldq $8, %xmm9
  5422. pxor %xmm10, %xmm8
  5423. pxor %xmm9, %xmm1
  5424. movdqa %xmm8, %xmm12
  5425. movdqa %xmm8, %xmm13
  5426. movdqa %xmm8, %xmm14
  5427. pslld $31, %xmm12
  5428. pslld $30, %xmm13
  5429. pslld $25, %xmm14
  5430. pxor %xmm13, %xmm12
  5431. pxor %xmm14, %xmm12
  5432. movdqa %xmm12, %xmm13
  5433. psrldq $4, %xmm13
  5434. pslldq $12, %xmm12
  5435. pxor %xmm12, %xmm8
  5436. movdqa %xmm8, %xmm14
  5437. movdqa %xmm8, %xmm10
  5438. movdqa %xmm8, %xmm9
  5439. psrld $0x01, %xmm14
  5440. psrld $2, %xmm10
  5441. psrld $7, %xmm9
  5442. pxor %xmm10, %xmm14
  5443. pxor %xmm9, %xmm14
  5444. pxor %xmm13, %xmm14
  5445. pxor %xmm8, %xmm14
  5446. pxor %xmm14, %xmm1
  5447. movdqu %xmm1, 32(%rsp)
  5448. # H ^ 4
  5449. pshufd $0x4e, %xmm0, %xmm9
  5450. pshufd $0x4e, %xmm0, %xmm10
  5451. movdqa %xmm0, %xmm11
  5452. movdqa %xmm0, %xmm8
  5453. pclmulqdq $0x11, %xmm0, %xmm11
  5454. pclmulqdq $0x00, %xmm0, %xmm8
  5455. pxor %xmm0, %xmm9
  5456. pxor %xmm0, %xmm10
  5457. pclmulqdq $0x00, %xmm10, %xmm9
  5458. pxor %xmm8, %xmm9
  5459. pxor %xmm11, %xmm9
  5460. movdqa %xmm9, %xmm10
  5461. movdqa %xmm11, %xmm3
  5462. pslldq $8, %xmm10
  5463. psrldq $8, %xmm9
  5464. pxor %xmm10, %xmm8
  5465. pxor %xmm9, %xmm3
  5466. movdqa %xmm8, %xmm12
  5467. movdqa %xmm8, %xmm13
  5468. movdqa %xmm8, %xmm14
  5469. pslld $31, %xmm12
  5470. pslld $30, %xmm13
  5471. pslld $25, %xmm14
  5472. pxor %xmm13, %xmm12
  5473. pxor %xmm14, %xmm12
  5474. movdqa %xmm12, %xmm13
  5475. psrldq $4, %xmm13
  5476. pslldq $12, %xmm12
  5477. pxor %xmm12, %xmm8
  5478. movdqa %xmm8, %xmm14
  5479. movdqa %xmm8, %xmm10
  5480. movdqa %xmm8, %xmm9
  5481. psrld $0x01, %xmm14
  5482. psrld $2, %xmm10
  5483. psrld $7, %xmm9
  5484. pxor %xmm10, %xmm14
  5485. pxor %xmm9, %xmm14
  5486. pxor %xmm13, %xmm14
  5487. pxor %xmm8, %xmm14
  5488. pxor %xmm14, %xmm3
  5489. movdqu %xmm3, 48(%rsp)
  5490. # H ^ 5
  5491. pshufd $0x4e, %xmm0, %xmm9
  5492. pshufd $0x4e, %xmm1, %xmm10
  5493. movdqa %xmm1, %xmm11
  5494. movdqa %xmm1, %xmm8
  5495. pclmulqdq $0x11, %xmm0, %xmm11
  5496. pclmulqdq $0x00, %xmm0, %xmm8
  5497. pxor %xmm0, %xmm9
  5498. pxor %xmm1, %xmm10
  5499. pclmulqdq $0x00, %xmm10, %xmm9
  5500. pxor %xmm8, %xmm9
  5501. pxor %xmm11, %xmm9
  5502. movdqa %xmm9, %xmm10
  5503. movdqa %xmm11, %xmm7
  5504. pslldq $8, %xmm10
  5505. psrldq $8, %xmm9
  5506. pxor %xmm10, %xmm8
  5507. pxor %xmm9, %xmm7
  5508. movdqa %xmm8, %xmm12
  5509. movdqa %xmm8, %xmm13
  5510. movdqa %xmm8, %xmm14
  5511. pslld $31, %xmm12
  5512. pslld $30, %xmm13
  5513. pslld $25, %xmm14
  5514. pxor %xmm13, %xmm12
  5515. pxor %xmm14, %xmm12
  5516. movdqa %xmm12, %xmm13
  5517. psrldq $4, %xmm13
  5518. pslldq $12, %xmm12
  5519. pxor %xmm12, %xmm8
  5520. movdqa %xmm8, %xmm14
  5521. movdqa %xmm8, %xmm10
  5522. movdqa %xmm8, %xmm9
  5523. psrld $0x01, %xmm14
  5524. psrld $2, %xmm10
  5525. psrld $7, %xmm9
  5526. pxor %xmm10, %xmm14
  5527. pxor %xmm9, %xmm14
  5528. pxor %xmm13, %xmm14
  5529. pxor %xmm8, %xmm14
  5530. pxor %xmm14, %xmm7
  5531. movdqu %xmm7, 64(%rsp)
  5532. # H ^ 6
  5533. pshufd $0x4e, %xmm1, %xmm9
  5534. pshufd $0x4e, %xmm1, %xmm10
  5535. movdqa %xmm1, %xmm11
  5536. movdqa %xmm1, %xmm8
  5537. pclmulqdq $0x11, %xmm1, %xmm11
  5538. pclmulqdq $0x00, %xmm1, %xmm8
  5539. pxor %xmm1, %xmm9
  5540. pxor %xmm1, %xmm10
  5541. pclmulqdq $0x00, %xmm10, %xmm9
  5542. pxor %xmm8, %xmm9
  5543. pxor %xmm11, %xmm9
  5544. movdqa %xmm9, %xmm10
  5545. movdqa %xmm11, %xmm7
  5546. pslldq $8, %xmm10
  5547. psrldq $8, %xmm9
  5548. pxor %xmm10, %xmm8
  5549. pxor %xmm9, %xmm7
  5550. movdqa %xmm8, %xmm12
  5551. movdqa %xmm8, %xmm13
  5552. movdqa %xmm8, %xmm14
  5553. pslld $31, %xmm12
  5554. pslld $30, %xmm13
  5555. pslld $25, %xmm14
  5556. pxor %xmm13, %xmm12
  5557. pxor %xmm14, %xmm12
  5558. movdqa %xmm12, %xmm13
  5559. psrldq $4, %xmm13
  5560. pslldq $12, %xmm12
  5561. pxor %xmm12, %xmm8
  5562. movdqa %xmm8, %xmm14
  5563. movdqa %xmm8, %xmm10
  5564. movdqa %xmm8, %xmm9
  5565. psrld $0x01, %xmm14
  5566. psrld $2, %xmm10
  5567. psrld $7, %xmm9
  5568. pxor %xmm10, %xmm14
  5569. pxor %xmm9, %xmm14
  5570. pxor %xmm13, %xmm14
  5571. pxor %xmm8, %xmm14
  5572. pxor %xmm14, %xmm7
  5573. movdqu %xmm7, 80(%rsp)
  5574. # H ^ 7
  5575. pshufd $0x4e, %xmm1, %xmm9
  5576. pshufd $0x4e, %xmm3, %xmm10
  5577. movdqa %xmm3, %xmm11
  5578. movdqa %xmm3, %xmm8
  5579. pclmulqdq $0x11, %xmm1, %xmm11
  5580. pclmulqdq $0x00, %xmm1, %xmm8
  5581. pxor %xmm1, %xmm9
  5582. pxor %xmm3, %xmm10
  5583. pclmulqdq $0x00, %xmm10, %xmm9
  5584. pxor %xmm8, %xmm9
  5585. pxor %xmm11, %xmm9
  5586. movdqa %xmm9, %xmm10
  5587. movdqa %xmm11, %xmm7
  5588. pslldq $8, %xmm10
  5589. psrldq $8, %xmm9
  5590. pxor %xmm10, %xmm8
  5591. pxor %xmm9, %xmm7
  5592. movdqa %xmm8, %xmm12
  5593. movdqa %xmm8, %xmm13
  5594. movdqa %xmm8, %xmm14
  5595. pslld $31, %xmm12
  5596. pslld $30, %xmm13
  5597. pslld $25, %xmm14
  5598. pxor %xmm13, %xmm12
  5599. pxor %xmm14, %xmm12
  5600. movdqa %xmm12, %xmm13
  5601. psrldq $4, %xmm13
  5602. pslldq $12, %xmm12
  5603. pxor %xmm12, %xmm8
  5604. movdqa %xmm8, %xmm14
  5605. movdqa %xmm8, %xmm10
  5606. movdqa %xmm8, %xmm9
  5607. psrld $0x01, %xmm14
  5608. psrld $2, %xmm10
  5609. psrld $7, %xmm9
  5610. pxor %xmm10, %xmm14
  5611. pxor %xmm9, %xmm14
  5612. pxor %xmm13, %xmm14
  5613. pxor %xmm8, %xmm14
  5614. pxor %xmm14, %xmm7
  5615. movdqu %xmm7, 96(%rsp)
  5616. # H ^ 8
  5617. pshufd $0x4e, %xmm3, %xmm9
  5618. pshufd $0x4e, %xmm3, %xmm10
  5619. movdqa %xmm3, %xmm11
  5620. movdqa %xmm3, %xmm8
  5621. pclmulqdq $0x11, %xmm3, %xmm11
  5622. pclmulqdq $0x00, %xmm3, %xmm8
  5623. pxor %xmm3, %xmm9
  5624. pxor %xmm3, %xmm10
  5625. pclmulqdq $0x00, %xmm10, %xmm9
  5626. pxor %xmm8, %xmm9
  5627. pxor %xmm11, %xmm9
  5628. movdqa %xmm9, %xmm10
  5629. movdqa %xmm11, %xmm7
  5630. pslldq $8, %xmm10
  5631. psrldq $8, %xmm9
  5632. pxor %xmm10, %xmm8
  5633. pxor %xmm9, %xmm7
  5634. movdqa %xmm8, %xmm12
  5635. movdqa %xmm8, %xmm13
  5636. movdqa %xmm8, %xmm14
  5637. pslld $31, %xmm12
  5638. pslld $30, %xmm13
  5639. pslld $25, %xmm14
  5640. pxor %xmm13, %xmm12
  5641. pxor %xmm14, %xmm12
  5642. movdqa %xmm12, %xmm13
  5643. psrldq $4, %xmm13
  5644. pslldq $12, %xmm12
  5645. pxor %xmm12, %xmm8
  5646. movdqa %xmm8, %xmm14
  5647. movdqa %xmm8, %xmm10
  5648. movdqa %xmm8, %xmm9
  5649. psrld $0x01, %xmm14
  5650. psrld $2, %xmm10
  5651. psrld $7, %xmm9
  5652. pxor %xmm10, %xmm14
  5653. pxor %xmm9, %xmm14
  5654. pxor %xmm13, %xmm14
  5655. pxor %xmm8, %xmm14
  5656. pxor %xmm14, %xmm7
  5657. movdqu %xmm7, 112(%rsp)
  5658. L_AES_GCM_decrypt_update_aesni_ghash_128:
  5659. leaq (%r11,%r14,1), %rcx
  5660. leaq (%r10,%r14,1), %rdx
  5661. movdqu (%r12), %xmm8
  5662. movdqa L_aes_gcm_bswap_epi64(%rip), %xmm1
  5663. movdqa %xmm8, %xmm0
  5664. pshufb %xmm1, %xmm8
  5665. movdqa %xmm0, %xmm9
  5666. paddd L_aes_gcm_one(%rip), %xmm9
  5667. pshufb %xmm1, %xmm9
  5668. movdqa %xmm0, %xmm10
  5669. paddd L_aes_gcm_two(%rip), %xmm10
  5670. pshufb %xmm1, %xmm10
  5671. movdqa %xmm0, %xmm11
  5672. paddd L_aes_gcm_three(%rip), %xmm11
  5673. pshufb %xmm1, %xmm11
  5674. movdqa %xmm0, %xmm12
  5675. paddd L_aes_gcm_four(%rip), %xmm12
  5676. pshufb %xmm1, %xmm12
  5677. movdqa %xmm0, %xmm13
  5678. paddd L_aes_gcm_five(%rip), %xmm13
  5679. pshufb %xmm1, %xmm13
  5680. movdqa %xmm0, %xmm14
  5681. paddd L_aes_gcm_six(%rip), %xmm14
  5682. pshufb %xmm1, %xmm14
  5683. movdqa %xmm0, %xmm15
  5684. paddd L_aes_gcm_seven(%rip), %xmm15
  5685. pshufb %xmm1, %xmm15
  5686. paddd L_aes_gcm_eight(%rip), %xmm0
  5687. movdqa (%rdi), %xmm7
  5688. movdqu %xmm0, (%r12)
  5689. pxor %xmm7, %xmm8
  5690. pxor %xmm7, %xmm9
  5691. pxor %xmm7, %xmm10
  5692. pxor %xmm7, %xmm11
  5693. pxor %xmm7, %xmm12
  5694. pxor %xmm7, %xmm13
  5695. pxor %xmm7, %xmm14
  5696. pxor %xmm7, %xmm15
  5697. movdqu 112(%rsp), %xmm7
  5698. movdqu (%rcx), %xmm0
  5699. aesenc 16(%rdi), %xmm8
  5700. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5701. pxor %xmm2, %xmm0
  5702. pshufd $0x4e, %xmm7, %xmm1
  5703. pshufd $0x4e, %xmm0, %xmm5
  5704. pxor %xmm7, %xmm1
  5705. pxor %xmm0, %xmm5
  5706. movdqa %xmm0, %xmm3
  5707. pclmulqdq $0x11, %xmm7, %xmm3
  5708. aesenc 16(%rdi), %xmm9
  5709. aesenc 16(%rdi), %xmm10
  5710. movdqa %xmm0, %xmm2
  5711. pclmulqdq $0x00, %xmm7, %xmm2
  5712. aesenc 16(%rdi), %xmm11
  5713. aesenc 16(%rdi), %xmm12
  5714. pclmulqdq $0x00, %xmm5, %xmm1
  5715. aesenc 16(%rdi), %xmm13
  5716. aesenc 16(%rdi), %xmm14
  5717. aesenc 16(%rdi), %xmm15
  5718. pxor %xmm2, %xmm1
  5719. pxor %xmm3, %xmm1
  5720. movdqu 96(%rsp), %xmm7
  5721. movdqu 16(%rcx), %xmm0
  5722. pshufd $0x4e, %xmm7, %xmm4
  5723. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5724. aesenc 32(%rdi), %xmm8
  5725. pxor %xmm7, %xmm4
  5726. pshufd $0x4e, %xmm0, %xmm5
  5727. pxor %xmm0, %xmm5
  5728. movdqa %xmm0, %xmm6
  5729. pclmulqdq $0x11, %xmm7, %xmm6
  5730. aesenc 32(%rdi), %xmm9
  5731. aesenc 32(%rdi), %xmm10
  5732. pclmulqdq $0x00, %xmm0, %xmm7
  5733. aesenc 32(%rdi), %xmm11
  5734. aesenc 32(%rdi), %xmm12
  5735. pclmulqdq $0x00, %xmm5, %xmm4
  5736. aesenc 32(%rdi), %xmm13
  5737. aesenc 32(%rdi), %xmm14
  5738. aesenc 32(%rdi), %xmm15
  5739. pxor %xmm7, %xmm1
  5740. pxor %xmm7, %xmm2
  5741. pxor %xmm6, %xmm1
  5742. pxor %xmm6, %xmm3
  5743. pxor %xmm4, %xmm1
  5744. movdqu 80(%rsp), %xmm7
  5745. movdqu 32(%rcx), %xmm0
  5746. pshufd $0x4e, %xmm7, %xmm4
  5747. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5748. aesenc 48(%rdi), %xmm8
  5749. pxor %xmm7, %xmm4
  5750. pshufd $0x4e, %xmm0, %xmm5
  5751. pxor %xmm0, %xmm5
  5752. movdqa %xmm0, %xmm6
  5753. pclmulqdq $0x11, %xmm7, %xmm6
  5754. aesenc 48(%rdi), %xmm9
  5755. aesenc 48(%rdi), %xmm10
  5756. pclmulqdq $0x00, %xmm0, %xmm7
  5757. aesenc 48(%rdi), %xmm11
  5758. aesenc 48(%rdi), %xmm12
  5759. pclmulqdq $0x00, %xmm5, %xmm4
  5760. aesenc 48(%rdi), %xmm13
  5761. aesenc 48(%rdi), %xmm14
  5762. aesenc 48(%rdi), %xmm15
  5763. pxor %xmm7, %xmm1
  5764. pxor %xmm7, %xmm2
  5765. pxor %xmm6, %xmm1
  5766. pxor %xmm6, %xmm3
  5767. pxor %xmm4, %xmm1
  5768. movdqu 64(%rsp), %xmm7
  5769. movdqu 48(%rcx), %xmm0
  5770. pshufd $0x4e, %xmm7, %xmm4
  5771. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5772. aesenc 64(%rdi), %xmm8
  5773. pxor %xmm7, %xmm4
  5774. pshufd $0x4e, %xmm0, %xmm5
  5775. pxor %xmm0, %xmm5
  5776. movdqa %xmm0, %xmm6
  5777. pclmulqdq $0x11, %xmm7, %xmm6
  5778. aesenc 64(%rdi), %xmm9
  5779. aesenc 64(%rdi), %xmm10
  5780. pclmulqdq $0x00, %xmm0, %xmm7
  5781. aesenc 64(%rdi), %xmm11
  5782. aesenc 64(%rdi), %xmm12
  5783. pclmulqdq $0x00, %xmm5, %xmm4
  5784. aesenc 64(%rdi), %xmm13
  5785. aesenc 64(%rdi), %xmm14
  5786. aesenc 64(%rdi), %xmm15
  5787. pxor %xmm7, %xmm1
  5788. pxor %xmm7, %xmm2
  5789. pxor %xmm6, %xmm1
  5790. pxor %xmm6, %xmm3
  5791. pxor %xmm4, %xmm1
  5792. movdqu 48(%rsp), %xmm7
  5793. movdqu 64(%rcx), %xmm0
  5794. pshufd $0x4e, %xmm7, %xmm4
  5795. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5796. aesenc 80(%rdi), %xmm8
  5797. pxor %xmm7, %xmm4
  5798. pshufd $0x4e, %xmm0, %xmm5
  5799. pxor %xmm0, %xmm5
  5800. movdqa %xmm0, %xmm6
  5801. pclmulqdq $0x11, %xmm7, %xmm6
  5802. aesenc 80(%rdi), %xmm9
  5803. aesenc 80(%rdi), %xmm10
  5804. pclmulqdq $0x00, %xmm0, %xmm7
  5805. aesenc 80(%rdi), %xmm11
  5806. aesenc 80(%rdi), %xmm12
  5807. pclmulqdq $0x00, %xmm5, %xmm4
  5808. aesenc 80(%rdi), %xmm13
  5809. aesenc 80(%rdi), %xmm14
  5810. aesenc 80(%rdi), %xmm15
  5811. pxor %xmm7, %xmm1
  5812. pxor %xmm7, %xmm2
  5813. pxor %xmm6, %xmm1
  5814. pxor %xmm6, %xmm3
  5815. pxor %xmm4, %xmm1
  5816. movdqu 32(%rsp), %xmm7
  5817. movdqu 80(%rcx), %xmm0
  5818. pshufd $0x4e, %xmm7, %xmm4
  5819. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5820. aesenc 96(%rdi), %xmm8
  5821. pxor %xmm7, %xmm4
  5822. pshufd $0x4e, %xmm0, %xmm5
  5823. pxor %xmm0, %xmm5
  5824. movdqa %xmm0, %xmm6
  5825. pclmulqdq $0x11, %xmm7, %xmm6
  5826. aesenc 96(%rdi), %xmm9
  5827. aesenc 96(%rdi), %xmm10
  5828. pclmulqdq $0x00, %xmm0, %xmm7
  5829. aesenc 96(%rdi), %xmm11
  5830. aesenc 96(%rdi), %xmm12
  5831. pclmulqdq $0x00, %xmm5, %xmm4
  5832. aesenc 96(%rdi), %xmm13
  5833. aesenc 96(%rdi), %xmm14
  5834. aesenc 96(%rdi), %xmm15
  5835. pxor %xmm7, %xmm1
  5836. pxor %xmm7, %xmm2
  5837. pxor %xmm6, %xmm1
  5838. pxor %xmm6, %xmm3
  5839. pxor %xmm4, %xmm1
  5840. movdqu 16(%rsp), %xmm7
  5841. movdqu 96(%rcx), %xmm0
  5842. pshufd $0x4e, %xmm7, %xmm4
  5843. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5844. aesenc 112(%rdi), %xmm8
  5845. pxor %xmm7, %xmm4
  5846. pshufd $0x4e, %xmm0, %xmm5
  5847. pxor %xmm0, %xmm5
  5848. movdqa %xmm0, %xmm6
  5849. pclmulqdq $0x11, %xmm7, %xmm6
  5850. aesenc 112(%rdi), %xmm9
  5851. aesenc 112(%rdi), %xmm10
  5852. pclmulqdq $0x00, %xmm0, %xmm7
  5853. aesenc 112(%rdi), %xmm11
  5854. aesenc 112(%rdi), %xmm12
  5855. pclmulqdq $0x00, %xmm5, %xmm4
  5856. aesenc 112(%rdi), %xmm13
  5857. aesenc 112(%rdi), %xmm14
  5858. aesenc 112(%rdi), %xmm15
  5859. pxor %xmm7, %xmm1
  5860. pxor %xmm7, %xmm2
  5861. pxor %xmm6, %xmm1
  5862. pxor %xmm6, %xmm3
  5863. pxor %xmm4, %xmm1
  5864. movdqu (%rsp), %xmm7
  5865. movdqu 112(%rcx), %xmm0
  5866. pshufd $0x4e, %xmm7, %xmm4
  5867. pshufb L_aes_gcm_bswap_mask(%rip), %xmm0
  5868. aesenc 128(%rdi), %xmm8
  5869. pxor %xmm7, %xmm4
  5870. pshufd $0x4e, %xmm0, %xmm5
  5871. pxor %xmm0, %xmm5
  5872. movdqa %xmm0, %xmm6
  5873. pclmulqdq $0x11, %xmm7, %xmm6
  5874. aesenc 128(%rdi), %xmm9
  5875. aesenc 128(%rdi), %xmm10
  5876. pclmulqdq $0x00, %xmm0, %xmm7
  5877. aesenc 128(%rdi), %xmm11
  5878. aesenc 128(%rdi), %xmm12
  5879. pclmulqdq $0x00, %xmm5, %xmm4
  5880. aesenc 128(%rdi), %xmm13
  5881. aesenc 128(%rdi), %xmm14
  5882. aesenc 128(%rdi), %xmm15
  5883. pxor %xmm7, %xmm1
  5884. pxor %xmm7, %xmm2
  5885. pxor %xmm6, %xmm1
  5886. pxor %xmm6, %xmm3
  5887. pxor %xmm4, %xmm1
  5888. movdqa %xmm1, %xmm5
  5889. psrldq $8, %xmm1
  5890. pslldq $8, %xmm5
  5891. aesenc 144(%rdi), %xmm8
  5892. pxor %xmm5, %xmm2
  5893. pxor %xmm1, %xmm3
  5894. movdqa %xmm2, %xmm7
  5895. movdqa %xmm2, %xmm4
  5896. movdqa %xmm2, %xmm5
  5897. aesenc 144(%rdi), %xmm9
  5898. pslld $31, %xmm7
  5899. pslld $30, %xmm4
  5900. pslld $25, %xmm5
  5901. aesenc 144(%rdi), %xmm10
  5902. pxor %xmm4, %xmm7
  5903. pxor %xmm5, %xmm7
  5904. aesenc 144(%rdi), %xmm11
  5905. movdqa %xmm7, %xmm4
  5906. pslldq $12, %xmm7
  5907. psrldq $4, %xmm4
  5908. aesenc 144(%rdi), %xmm12
  5909. pxor %xmm7, %xmm2
  5910. movdqa %xmm2, %xmm5
  5911. movdqa %xmm2, %xmm1
  5912. movdqa %xmm2, %xmm0
  5913. aesenc 144(%rdi), %xmm13
  5914. psrld $0x01, %xmm5
  5915. psrld $2, %xmm1
  5916. psrld $7, %xmm0
  5917. aesenc 144(%rdi), %xmm14
  5918. pxor %xmm1, %xmm5
  5919. pxor %xmm0, %xmm5
  5920. aesenc 144(%rdi), %xmm15
  5921. pxor %xmm4, %xmm5
  5922. pxor %xmm5, %xmm2
  5923. pxor %xmm3, %xmm2
  5924. cmpl $11, %esi
  5925. movdqa 160(%rdi), %xmm7
  5926. jl L_AES_GCM_decrypt_update_aesni_aesenc_128_ghash_avx_done
  5927. aesenc %xmm7, %xmm8
  5928. aesenc %xmm7, %xmm9
  5929. aesenc %xmm7, %xmm10
  5930. aesenc %xmm7, %xmm11
  5931. aesenc %xmm7, %xmm12
  5932. aesenc %xmm7, %xmm13
  5933. aesenc %xmm7, %xmm14
  5934. aesenc %xmm7, %xmm15
  5935. movdqa 176(%rdi), %xmm7
  5936. aesenc %xmm7, %xmm8
  5937. aesenc %xmm7, %xmm9
  5938. aesenc %xmm7, %xmm10
  5939. aesenc %xmm7, %xmm11
  5940. aesenc %xmm7, %xmm12
  5941. aesenc %xmm7, %xmm13
  5942. aesenc %xmm7, %xmm14
  5943. aesenc %xmm7, %xmm15
  5944. cmpl $13, %esi
  5945. movdqa 192(%rdi), %xmm7
  5946. jl L_AES_GCM_decrypt_update_aesni_aesenc_128_ghash_avx_done
  5947. aesenc %xmm7, %xmm8
  5948. aesenc %xmm7, %xmm9
  5949. aesenc %xmm7, %xmm10
  5950. aesenc %xmm7, %xmm11
  5951. aesenc %xmm7, %xmm12
  5952. aesenc %xmm7, %xmm13
  5953. aesenc %xmm7, %xmm14
  5954. aesenc %xmm7, %xmm15
  5955. movdqa 208(%rdi), %xmm7
  5956. aesenc %xmm7, %xmm8
  5957. aesenc %xmm7, %xmm9
  5958. aesenc %xmm7, %xmm10
  5959. aesenc %xmm7, %xmm11
  5960. aesenc %xmm7, %xmm12
  5961. aesenc %xmm7, %xmm13
  5962. aesenc %xmm7, %xmm14
  5963. aesenc %xmm7, %xmm15
  5964. movdqa 224(%rdi), %xmm7
  5965. L_AES_GCM_decrypt_update_aesni_aesenc_128_ghash_avx_done:
  5966. aesenclast %xmm7, %xmm8
  5967. aesenclast %xmm7, %xmm9
  5968. movdqu (%rcx), %xmm0
  5969. movdqu 16(%rcx), %xmm1
  5970. pxor %xmm0, %xmm8
  5971. pxor %xmm1, %xmm9
  5972. movdqu %xmm8, (%rdx)
  5973. movdqu %xmm9, 16(%rdx)
  5974. aesenclast %xmm7, %xmm10
  5975. aesenclast %xmm7, %xmm11
  5976. movdqu 32(%rcx), %xmm0
  5977. movdqu 48(%rcx), %xmm1
  5978. pxor %xmm0, %xmm10
  5979. pxor %xmm1, %xmm11
  5980. movdqu %xmm10, 32(%rdx)
  5981. movdqu %xmm11, 48(%rdx)
  5982. aesenclast %xmm7, %xmm12
  5983. aesenclast %xmm7, %xmm13
  5984. movdqu 64(%rcx), %xmm0
  5985. movdqu 80(%rcx), %xmm1
  5986. pxor %xmm0, %xmm12
  5987. pxor %xmm1, %xmm13
  5988. movdqu %xmm12, 64(%rdx)
  5989. movdqu %xmm13, 80(%rdx)
  5990. aesenclast %xmm7, %xmm14
  5991. aesenclast %xmm7, %xmm15
  5992. movdqu 96(%rcx), %xmm0
  5993. movdqu 112(%rcx), %xmm1
  5994. pxor %xmm0, %xmm14
  5995. pxor %xmm1, %xmm15
  5996. movdqu %xmm14, 96(%rdx)
  5997. movdqu %xmm15, 112(%rdx)
  5998. addl $0x80, %r14d
  5999. cmpl %r13d, %r14d
  6000. jl L_AES_GCM_decrypt_update_aesni_ghash_128
  6001. movdqa %xmm2, %xmm6
  6002. movdqu (%rsp), %xmm5
  6003. L_AES_GCM_decrypt_update_aesni_done_128:
  6004. movl %r8d, %edx
  6005. cmpl %edx, %r14d
  6006. jge L_AES_GCM_decrypt_update_aesni_done_dec
  6007. movl %r8d, %r13d
  6008. andl $0xfffffff0, %r13d
  6009. cmpl %r13d, %r14d
  6010. jge L_AES_GCM_decrypt_update_aesni_last_block_done
  6011. L_AES_GCM_decrypt_update_aesni_last_block_start:
  6012. leaq (%r11,%r14,1), %rcx
  6013. leaq (%r10,%r14,1), %rdx
  6014. movdqu (%rcx), %xmm1
  6015. movdqa %xmm5, %xmm0
  6016. pshufb L_aes_gcm_bswap_mask(%rip), %xmm1
  6017. pxor %xmm6, %xmm1
  6018. movdqu (%r12), %xmm8
  6019. movdqa %xmm8, %xmm9
  6020. pshufb L_aes_gcm_bswap_epi64(%rip), %xmm8
  6021. paddd L_aes_gcm_one(%rip), %xmm9
  6022. pxor (%rdi), %xmm8
  6023. movdqu %xmm9, (%r12)
  6024. movdqa %xmm1, %xmm10
  6025. pclmulqdq $16, %xmm0, %xmm10
  6026. aesenc 16(%rdi), %xmm8
  6027. aesenc 32(%rdi), %xmm8
  6028. movdqa %xmm1, %xmm11
  6029. pclmulqdq $0x01, %xmm0, %xmm11
  6030. aesenc 48(%rdi), %xmm8
  6031. aesenc 64(%rdi), %xmm8
  6032. movdqa %xmm1, %xmm12
  6033. pclmulqdq $0x00, %xmm0, %xmm12
  6034. aesenc 80(%rdi), %xmm8
  6035. movdqa %xmm1, %xmm1
  6036. pclmulqdq $0x11, %xmm0, %xmm1
  6037. aesenc 96(%rdi), %xmm8
  6038. pxor %xmm11, %xmm10
  6039. movdqa %xmm10, %xmm2
  6040. psrldq $8, %xmm10
  6041. pslldq $8, %xmm2
  6042. aesenc 112(%rdi), %xmm8
  6043. movdqa %xmm1, %xmm3
  6044. pxor %xmm12, %xmm2
  6045. pxor %xmm10, %xmm3
  6046. movdqa L_aes_gcm_mod2_128(%rip), %xmm0
  6047. movdqa %xmm2, %xmm11
  6048. pclmulqdq $16, %xmm0, %xmm11
  6049. aesenc 128(%rdi), %xmm8
  6050. pshufd $0x4e, %xmm2, %xmm10
  6051. pxor %xmm11, %xmm10
  6052. movdqa %xmm10, %xmm11
  6053. pclmulqdq $16, %xmm0, %xmm11
  6054. aesenc 144(%rdi), %xmm8
  6055. pshufd $0x4e, %xmm10, %xmm6
  6056. pxor %xmm11, %xmm6
  6057. pxor %xmm3, %xmm6
  6058. cmpl $11, %esi
  6059. movdqa 160(%rdi), %xmm9
  6060. jl L_AES_GCM_decrypt_update_aesni_aesenc_gfmul_last
  6061. aesenc %xmm9, %xmm8
  6062. aesenc 176(%rdi), %xmm8
  6063. cmpl $13, %esi
  6064. movdqa 192(%rdi), %xmm9
  6065. jl L_AES_GCM_decrypt_update_aesni_aesenc_gfmul_last
  6066. aesenc %xmm9, %xmm8
  6067. aesenc 208(%rdi), %xmm8
  6068. movdqa 224(%rdi), %xmm9
  6069. L_AES_GCM_decrypt_update_aesni_aesenc_gfmul_last:
  6070. aesenclast %xmm9, %xmm8
  6071. movdqu (%rcx), %xmm9
  6072. pxor %xmm9, %xmm8
  6073. movdqu %xmm8, (%rdx)
  6074. addl $16, %r14d
  6075. cmpl %r13d, %r14d
  6076. jl L_AES_GCM_decrypt_update_aesni_last_block_start
  6077. L_AES_GCM_decrypt_update_aesni_last_block_done:
  6078. L_AES_GCM_decrypt_update_aesni_done_dec:
  6079. movdqa %xmm6, (%r9)
  6080. addq $0xa8, %rsp
  6081. popq %r15
  6082. popq %r14
  6083. popq %r12
  6084. popq %r13
  6085. repz retq
  6086. #ifndef __APPLE__
  6087. .size AES_GCM_decrypt_update_aesni,.-AES_GCM_decrypt_update_aesni
  6088. #endif /* __APPLE__ */
  6089. #ifndef __APPLE__
  6090. .text
  6091. .globl AES_GCM_decrypt_final_aesni
  6092. .type AES_GCM_decrypt_final_aesni,@function
  6093. .align 16
  6094. AES_GCM_decrypt_final_aesni:
  6095. #else
  6096. .section __TEXT,__text
  6097. .globl _AES_GCM_decrypt_final_aesni
  6098. .p2align 4
  6099. _AES_GCM_decrypt_final_aesni:
  6100. #endif /* __APPLE__ */
  6101. pushq %r13
  6102. pushq %rbp
  6103. pushq %r12
  6104. movl %edx, %eax
  6105. movl %ecx, %r10d
  6106. movl %r8d, %r11d
  6107. movq 32(%rsp), %r8
  6108. movq 40(%rsp), %rbp
  6109. subq $16, %rsp
  6110. movdqa (%rdi), %xmm6
  6111. movdqa (%r9), %xmm5
  6112. movdqa (%r8), %xmm15
  6113. movdqa %xmm5, %xmm8
  6114. movdqa %xmm5, %xmm7
  6115. psrlq $63, %xmm8
  6116. psllq $0x01, %xmm7
  6117. pslldq $8, %xmm8
  6118. por %xmm8, %xmm7
  6119. pshufd $0xff, %xmm5, %xmm5
  6120. psrad $31, %xmm5
  6121. pand L_aes_gcm_mod2_128(%rip), %xmm5
  6122. pxor %xmm7, %xmm5
  6123. movl %r10d, %edx
  6124. movl %r11d, %ecx
  6125. shlq $3, %rdx
  6126. shlq $3, %rcx
  6127. pinsrq $0x00, %rdx, %xmm0
  6128. pinsrq $0x01, %rcx, %xmm0
  6129. pxor %xmm0, %xmm6
  6130. pshufd $0x4e, %xmm5, %xmm8
  6131. pshufd $0x4e, %xmm6, %xmm9
  6132. movdqa %xmm6, %xmm10
  6133. movdqa %xmm6, %xmm7
  6134. pclmulqdq $0x11, %xmm5, %xmm10
  6135. pclmulqdq $0x00, %xmm5, %xmm7
  6136. pxor %xmm5, %xmm8
  6137. pxor %xmm6, %xmm9
  6138. pclmulqdq $0x00, %xmm9, %xmm8
  6139. pxor %xmm7, %xmm8
  6140. pxor %xmm10, %xmm8
  6141. movdqa %xmm8, %xmm9
  6142. movdqa %xmm10, %xmm6
  6143. pslldq $8, %xmm9
  6144. psrldq $8, %xmm8
  6145. pxor %xmm9, %xmm7
  6146. pxor %xmm8, %xmm6
  6147. movdqa %xmm7, %xmm11
  6148. movdqa %xmm7, %xmm12
  6149. movdqa %xmm7, %xmm13
  6150. pslld $31, %xmm11
  6151. pslld $30, %xmm12
  6152. pslld $25, %xmm13
  6153. pxor %xmm12, %xmm11
  6154. pxor %xmm13, %xmm11
  6155. movdqa %xmm11, %xmm12
  6156. psrldq $4, %xmm12
  6157. pslldq $12, %xmm11
  6158. pxor %xmm11, %xmm7
  6159. movdqa %xmm7, %xmm13
  6160. movdqa %xmm7, %xmm9
  6161. movdqa %xmm7, %xmm8
  6162. psrld $0x01, %xmm13
  6163. psrld $2, %xmm9
  6164. psrld $7, %xmm8
  6165. pxor %xmm9, %xmm13
  6166. pxor %xmm8, %xmm13
  6167. pxor %xmm12, %xmm13
  6168. pxor %xmm7, %xmm13
  6169. pxor %xmm13, %xmm6
  6170. pshufb L_aes_gcm_bswap_mask(%rip), %xmm6
  6171. movdqu %xmm15, %xmm0
  6172. pxor %xmm6, %xmm0
  6173. cmpl $16, %eax
  6174. je L_AES_GCM_decrypt_final_aesni_cmp_tag_16
  6175. subq $16, %rsp
  6176. xorq %rcx, %rcx
  6177. xorq %r12, %r12
  6178. movdqu %xmm0, (%rsp)
  6179. L_AES_GCM_decrypt_final_aesni_cmp_tag_loop:
  6180. movzbl (%rsp,%rcx,1), %r13d
  6181. xorb (%rsi,%rcx,1), %r13b
  6182. orb %r13b, %r12b
  6183. incl %ecx
  6184. cmpl %eax, %ecx
  6185. jne L_AES_GCM_decrypt_final_aesni_cmp_tag_loop
  6186. cmpb $0x00, %r12b
  6187. sete %r12b
  6188. addq $16, %rsp
  6189. xorq %rcx, %rcx
  6190. jmp L_AES_GCM_decrypt_final_aesni_cmp_tag_done
  6191. L_AES_GCM_decrypt_final_aesni_cmp_tag_16:
  6192. movdqu (%rsi), %xmm1
  6193. pcmpeqb %xmm1, %xmm0
  6194. pmovmskb %xmm0, %rdx
  6195. # %%edx == 0xFFFF then return 1 else => return 0
  6196. xorl %r12d, %r12d
  6197. cmpl $0xffff, %edx
  6198. sete %r12b
  6199. L_AES_GCM_decrypt_final_aesni_cmp_tag_done:
  6200. movl %r12d, (%rbp)
  6201. addq $16, %rsp
  6202. popq %r12
  6203. popq %rbp
  6204. popq %r13
  6205. repz retq
  6206. #ifndef __APPLE__
  6207. .size AES_GCM_decrypt_final_aesni,.-AES_GCM_decrypt_final_aesni
  6208. #endif /* __APPLE__ */
  6209. #endif /* WOLFSSL_AESGCM_STREAM */
  6210. #ifdef HAVE_INTEL_AVX1
  6211. #ifndef __APPLE__
  6212. .data
  6213. #else
  6214. .section __DATA,__data
  6215. #endif /* __APPLE__ */
  6216. #ifndef __APPLE__
  6217. .align 16
  6218. #else
  6219. .p2align 4
  6220. #endif /* __APPLE__ */
  6221. L_avx1_aes_gcm_one:
  6222. .quad 0x0, 0x1
  6223. #ifndef __APPLE__
  6224. .data
  6225. #else
  6226. .section __DATA,__data
  6227. #endif /* __APPLE__ */
  6228. #ifndef __APPLE__
  6229. .align 16
  6230. #else
  6231. .p2align 4
  6232. #endif /* __APPLE__ */
  6233. L_avx1_aes_gcm_two:
  6234. .quad 0x0, 0x2
  6235. #ifndef __APPLE__
  6236. .data
  6237. #else
  6238. .section __DATA,__data
  6239. #endif /* __APPLE__ */
  6240. #ifndef __APPLE__
  6241. .align 16
  6242. #else
  6243. .p2align 4
  6244. #endif /* __APPLE__ */
  6245. L_avx1_aes_gcm_three:
  6246. .quad 0x0, 0x3
  6247. #ifndef __APPLE__
  6248. .data
  6249. #else
  6250. .section __DATA,__data
  6251. #endif /* __APPLE__ */
  6252. #ifndef __APPLE__
  6253. .align 16
  6254. #else
  6255. .p2align 4
  6256. #endif /* __APPLE__ */
  6257. L_avx1_aes_gcm_four:
  6258. .quad 0x0, 0x4
  6259. #ifndef __APPLE__
  6260. .data
  6261. #else
  6262. .section __DATA,__data
  6263. #endif /* __APPLE__ */
  6264. #ifndef __APPLE__
  6265. .align 16
  6266. #else
  6267. .p2align 4
  6268. #endif /* __APPLE__ */
  6269. L_avx1_aes_gcm_five:
  6270. .quad 0x0, 0x5
  6271. #ifndef __APPLE__
  6272. .data
  6273. #else
  6274. .section __DATA,__data
  6275. #endif /* __APPLE__ */
  6276. #ifndef __APPLE__
  6277. .align 16
  6278. #else
  6279. .p2align 4
  6280. #endif /* __APPLE__ */
  6281. L_avx1_aes_gcm_six:
  6282. .quad 0x0, 0x6
  6283. #ifndef __APPLE__
  6284. .data
  6285. #else
  6286. .section __DATA,__data
  6287. #endif /* __APPLE__ */
  6288. #ifndef __APPLE__
  6289. .align 16
  6290. #else
  6291. .p2align 4
  6292. #endif /* __APPLE__ */
  6293. L_avx1_aes_gcm_seven:
  6294. .quad 0x0, 0x7
  6295. #ifndef __APPLE__
  6296. .data
  6297. #else
  6298. .section __DATA,__data
  6299. #endif /* __APPLE__ */
  6300. #ifndef __APPLE__
  6301. .align 16
  6302. #else
  6303. .p2align 4
  6304. #endif /* __APPLE__ */
  6305. L_avx1_aes_gcm_eight:
  6306. .quad 0x0, 0x8
  6307. #ifndef __APPLE__
  6308. .data
  6309. #else
  6310. .section __DATA,__data
  6311. #endif /* __APPLE__ */
  6312. #ifndef __APPLE__
  6313. .align 16
  6314. #else
  6315. .p2align 4
  6316. #endif /* __APPLE__ */
  6317. L_avx1_aes_gcm_bswap_epi64:
  6318. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  6319. #ifndef __APPLE__
  6320. .data
  6321. #else
  6322. .section __DATA,__data
  6323. #endif /* __APPLE__ */
  6324. #ifndef __APPLE__
  6325. .align 16
  6326. #else
  6327. .p2align 4
  6328. #endif /* __APPLE__ */
  6329. L_avx1_aes_gcm_bswap_mask:
  6330. .quad 0x8090a0b0c0d0e0f, 0x1020304050607
  6331. #ifndef __APPLE__
  6332. .data
  6333. #else
  6334. .section __DATA,__data
  6335. #endif /* __APPLE__ */
  6336. #ifndef __APPLE__
  6337. .align 16
  6338. #else
  6339. .p2align 4
  6340. #endif /* __APPLE__ */
  6341. L_avx1_aes_gcm_mod2_128:
  6342. .quad 0x1, 0xc200000000000000
  6343. #ifndef __APPLE__
  6344. .text
  6345. .globl AES_GCM_encrypt_avx1
  6346. .type AES_GCM_encrypt_avx1,@function
  6347. .align 16
  6348. AES_GCM_encrypt_avx1:
  6349. #else
  6350. .section __TEXT,__text
  6351. .globl _AES_GCM_encrypt_avx1
  6352. .p2align 4
  6353. _AES_GCM_encrypt_avx1:
  6354. #endif /* __APPLE__ */
  6355. pushq %r13
  6356. pushq %r12
  6357. pushq %rbx
  6358. pushq %r14
  6359. pushq %r15
  6360. movq %rdx, %r12
  6361. movq %rcx, %rax
  6362. movl 48(%rsp), %r11d
  6363. movl 56(%rsp), %ebx
  6364. movl 64(%rsp), %r14d
  6365. movq 72(%rsp), %r15
  6366. movl 80(%rsp), %r10d
  6367. subq $0xa0, %rsp
  6368. vpxor %xmm4, %xmm4, %xmm4
  6369. vpxor %xmm6, %xmm6, %xmm6
  6370. movl %ebx, %edx
  6371. cmpl $12, %edx
  6372. jne L_AES_GCM_encrypt_avx1_iv_not_12
  6373. # # Calculate values when IV is 12 bytes
  6374. # Set counter based on IV
  6375. movl $0x1000000, %ecx
  6376. vmovq (%rax), %xmm4
  6377. vpinsrd $2, 8(%rax), %xmm4, %xmm4
  6378. vpinsrd $3, %ecx, %xmm4, %xmm4
  6379. # H = Encrypt X(=0) and T = Encrypt counter
  6380. vmovdqa (%r15), %xmm5
  6381. vpxor %xmm5, %xmm4, %xmm1
  6382. vmovdqa 16(%r15), %xmm7
  6383. vaesenc %xmm7, %xmm5, %xmm5
  6384. vaesenc %xmm7, %xmm1, %xmm1
  6385. vmovdqa 32(%r15), %xmm7
  6386. vaesenc %xmm7, %xmm5, %xmm5
  6387. vaesenc %xmm7, %xmm1, %xmm1
  6388. vmovdqa 48(%r15), %xmm7
  6389. vaesenc %xmm7, %xmm5, %xmm5
  6390. vaesenc %xmm7, %xmm1, %xmm1
  6391. vmovdqa 64(%r15), %xmm7
  6392. vaesenc %xmm7, %xmm5, %xmm5
  6393. vaesenc %xmm7, %xmm1, %xmm1
  6394. vmovdqa 80(%r15), %xmm7
  6395. vaesenc %xmm7, %xmm5, %xmm5
  6396. vaesenc %xmm7, %xmm1, %xmm1
  6397. vmovdqa 96(%r15), %xmm7
  6398. vaesenc %xmm7, %xmm5, %xmm5
  6399. vaesenc %xmm7, %xmm1, %xmm1
  6400. vmovdqa 112(%r15), %xmm7
  6401. vaesenc %xmm7, %xmm5, %xmm5
  6402. vaesenc %xmm7, %xmm1, %xmm1
  6403. vmovdqa 128(%r15), %xmm7
  6404. vaesenc %xmm7, %xmm5, %xmm5
  6405. vaesenc %xmm7, %xmm1, %xmm1
  6406. vmovdqa 144(%r15), %xmm7
  6407. vaesenc %xmm7, %xmm5, %xmm5
  6408. vaesenc %xmm7, %xmm1, %xmm1
  6409. cmpl $11, %r10d
  6410. vmovdqa 160(%r15), %xmm7
  6411. jl L_AES_GCM_encrypt_avx1_calc_iv_12_last
  6412. vaesenc %xmm7, %xmm5, %xmm5
  6413. vaesenc %xmm7, %xmm1, %xmm1
  6414. vmovdqa 176(%r15), %xmm7
  6415. vaesenc %xmm7, %xmm5, %xmm5
  6416. vaesenc %xmm7, %xmm1, %xmm1
  6417. cmpl $13, %r10d
  6418. vmovdqa 192(%r15), %xmm7
  6419. jl L_AES_GCM_encrypt_avx1_calc_iv_12_last
  6420. vaesenc %xmm7, %xmm5, %xmm5
  6421. vaesenc %xmm7, %xmm1, %xmm1
  6422. vmovdqa 208(%r15), %xmm7
  6423. vaesenc %xmm7, %xmm5, %xmm5
  6424. vaesenc %xmm7, %xmm1, %xmm1
  6425. vmovdqa 224(%r15), %xmm7
  6426. L_AES_GCM_encrypt_avx1_calc_iv_12_last:
  6427. vaesenclast %xmm7, %xmm5, %xmm5
  6428. vaesenclast %xmm7, %xmm1, %xmm1
  6429. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  6430. vmovdqu %xmm1, 144(%rsp)
  6431. jmp L_AES_GCM_encrypt_avx1_iv_done
  6432. L_AES_GCM_encrypt_avx1_iv_not_12:
  6433. # Calculate values when IV is not 12 bytes
  6434. # H = Encrypt X(=0)
  6435. vmovdqa (%r15), %xmm5
  6436. vaesenc 16(%r15), %xmm5, %xmm5
  6437. vaesenc 32(%r15), %xmm5, %xmm5
  6438. vaesenc 48(%r15), %xmm5, %xmm5
  6439. vaesenc 64(%r15), %xmm5, %xmm5
  6440. vaesenc 80(%r15), %xmm5, %xmm5
  6441. vaesenc 96(%r15), %xmm5, %xmm5
  6442. vaesenc 112(%r15), %xmm5, %xmm5
  6443. vaesenc 128(%r15), %xmm5, %xmm5
  6444. vaesenc 144(%r15), %xmm5, %xmm5
  6445. cmpl $11, %r10d
  6446. vmovdqa 160(%r15), %xmm9
  6447. jl L_AES_GCM_encrypt_avx1_calc_iv_1_aesenc_avx_last
  6448. vaesenc %xmm9, %xmm5, %xmm5
  6449. vaesenc 176(%r15), %xmm5, %xmm5
  6450. cmpl $13, %r10d
  6451. vmovdqa 192(%r15), %xmm9
  6452. jl L_AES_GCM_encrypt_avx1_calc_iv_1_aesenc_avx_last
  6453. vaesenc %xmm9, %xmm5, %xmm5
  6454. vaesenc 208(%r15), %xmm5, %xmm5
  6455. vmovdqa 224(%r15), %xmm9
  6456. L_AES_GCM_encrypt_avx1_calc_iv_1_aesenc_avx_last:
  6457. vaesenclast %xmm9, %xmm5, %xmm5
  6458. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  6459. # Calc counter
  6460. # Initialization vector
  6461. cmpl $0x00, %edx
  6462. movq $0x00, %rcx
  6463. je L_AES_GCM_encrypt_avx1_calc_iv_done
  6464. cmpl $16, %edx
  6465. jl L_AES_GCM_encrypt_avx1_calc_iv_lt16
  6466. andl $0xfffffff0, %edx
  6467. L_AES_GCM_encrypt_avx1_calc_iv_16_loop:
  6468. vmovdqu (%rax,%rcx,1), %xmm8
  6469. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  6470. vpxor %xmm8, %xmm4, %xmm4
  6471. # ghash_gfmul_avx
  6472. vpshufd $0x4e, %xmm4, %xmm1
  6473. vpshufd $0x4e, %xmm5, %xmm2
  6474. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  6475. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  6476. vpxor %xmm4, %xmm1, %xmm1
  6477. vpxor %xmm5, %xmm2, %xmm2
  6478. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  6479. vpxor %xmm0, %xmm1, %xmm1
  6480. vpxor %xmm3, %xmm1, %xmm1
  6481. vmovdqa %xmm0, %xmm7
  6482. vmovdqa %xmm3, %xmm4
  6483. vpslldq $8, %xmm1, %xmm2
  6484. vpsrldq $8, %xmm1, %xmm1
  6485. vpxor %xmm2, %xmm7, %xmm7
  6486. vpxor %xmm1, %xmm4, %xmm4
  6487. vpsrld $31, %xmm7, %xmm0
  6488. vpsrld $31, %xmm4, %xmm1
  6489. vpslld $0x01, %xmm7, %xmm7
  6490. vpslld $0x01, %xmm4, %xmm4
  6491. vpsrldq $12, %xmm0, %xmm2
  6492. vpslldq $4, %xmm0, %xmm0
  6493. vpslldq $4, %xmm1, %xmm1
  6494. vpor %xmm2, %xmm4, %xmm4
  6495. vpor %xmm0, %xmm7, %xmm7
  6496. vpor %xmm1, %xmm4, %xmm4
  6497. vpslld $31, %xmm7, %xmm0
  6498. vpslld $30, %xmm7, %xmm1
  6499. vpslld $25, %xmm7, %xmm2
  6500. vpxor %xmm1, %xmm0, %xmm0
  6501. vpxor %xmm2, %xmm0, %xmm0
  6502. vmovdqa %xmm0, %xmm1
  6503. vpsrldq $4, %xmm1, %xmm1
  6504. vpslldq $12, %xmm0, %xmm0
  6505. vpxor %xmm0, %xmm7, %xmm7
  6506. vpsrld $0x01, %xmm7, %xmm2
  6507. vpsrld $2, %xmm7, %xmm3
  6508. vpsrld $7, %xmm7, %xmm0
  6509. vpxor %xmm3, %xmm2, %xmm2
  6510. vpxor %xmm0, %xmm2, %xmm2
  6511. vpxor %xmm1, %xmm2, %xmm2
  6512. vpxor %xmm7, %xmm2, %xmm2
  6513. vpxor %xmm2, %xmm4, %xmm4
  6514. addl $16, %ecx
  6515. cmpl %edx, %ecx
  6516. jl L_AES_GCM_encrypt_avx1_calc_iv_16_loop
  6517. movl %ebx, %edx
  6518. cmpl %edx, %ecx
  6519. je L_AES_GCM_encrypt_avx1_calc_iv_done
  6520. L_AES_GCM_encrypt_avx1_calc_iv_lt16:
  6521. subq $16, %rsp
  6522. vpxor %xmm8, %xmm8, %xmm8
  6523. xorl %ebx, %ebx
  6524. vmovdqu %xmm8, (%rsp)
  6525. L_AES_GCM_encrypt_avx1_calc_iv_loop:
  6526. movzbl (%rax,%rcx,1), %r13d
  6527. movb %r13b, (%rsp,%rbx,1)
  6528. incl %ecx
  6529. incl %ebx
  6530. cmpl %edx, %ecx
  6531. jl L_AES_GCM_encrypt_avx1_calc_iv_loop
  6532. vmovdqu (%rsp), %xmm8
  6533. addq $16, %rsp
  6534. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  6535. vpxor %xmm8, %xmm4, %xmm4
  6536. # ghash_gfmul_avx
  6537. vpshufd $0x4e, %xmm4, %xmm1
  6538. vpshufd $0x4e, %xmm5, %xmm2
  6539. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  6540. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  6541. vpxor %xmm4, %xmm1, %xmm1
  6542. vpxor %xmm5, %xmm2, %xmm2
  6543. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  6544. vpxor %xmm0, %xmm1, %xmm1
  6545. vpxor %xmm3, %xmm1, %xmm1
  6546. vmovdqa %xmm0, %xmm7
  6547. vmovdqa %xmm3, %xmm4
  6548. vpslldq $8, %xmm1, %xmm2
  6549. vpsrldq $8, %xmm1, %xmm1
  6550. vpxor %xmm2, %xmm7, %xmm7
  6551. vpxor %xmm1, %xmm4, %xmm4
  6552. vpsrld $31, %xmm7, %xmm0
  6553. vpsrld $31, %xmm4, %xmm1
  6554. vpslld $0x01, %xmm7, %xmm7
  6555. vpslld $0x01, %xmm4, %xmm4
  6556. vpsrldq $12, %xmm0, %xmm2
  6557. vpslldq $4, %xmm0, %xmm0
  6558. vpslldq $4, %xmm1, %xmm1
  6559. vpor %xmm2, %xmm4, %xmm4
  6560. vpor %xmm0, %xmm7, %xmm7
  6561. vpor %xmm1, %xmm4, %xmm4
  6562. vpslld $31, %xmm7, %xmm0
  6563. vpslld $30, %xmm7, %xmm1
  6564. vpslld $25, %xmm7, %xmm2
  6565. vpxor %xmm1, %xmm0, %xmm0
  6566. vpxor %xmm2, %xmm0, %xmm0
  6567. vmovdqa %xmm0, %xmm1
  6568. vpsrldq $4, %xmm1, %xmm1
  6569. vpslldq $12, %xmm0, %xmm0
  6570. vpxor %xmm0, %xmm7, %xmm7
  6571. vpsrld $0x01, %xmm7, %xmm2
  6572. vpsrld $2, %xmm7, %xmm3
  6573. vpsrld $7, %xmm7, %xmm0
  6574. vpxor %xmm3, %xmm2, %xmm2
  6575. vpxor %xmm0, %xmm2, %xmm2
  6576. vpxor %xmm1, %xmm2, %xmm2
  6577. vpxor %xmm7, %xmm2, %xmm2
  6578. vpxor %xmm2, %xmm4, %xmm4
  6579. L_AES_GCM_encrypt_avx1_calc_iv_done:
  6580. # T = Encrypt counter
  6581. vpxor %xmm0, %xmm0, %xmm0
  6582. shll $3, %edx
  6583. vmovq %rdx, %xmm0
  6584. vpxor %xmm0, %xmm4, %xmm4
  6585. # ghash_gfmul_avx
  6586. vpshufd $0x4e, %xmm4, %xmm1
  6587. vpshufd $0x4e, %xmm5, %xmm2
  6588. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  6589. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  6590. vpxor %xmm4, %xmm1, %xmm1
  6591. vpxor %xmm5, %xmm2, %xmm2
  6592. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  6593. vpxor %xmm0, %xmm1, %xmm1
  6594. vpxor %xmm3, %xmm1, %xmm1
  6595. vmovdqa %xmm0, %xmm7
  6596. vmovdqa %xmm3, %xmm4
  6597. vpslldq $8, %xmm1, %xmm2
  6598. vpsrldq $8, %xmm1, %xmm1
  6599. vpxor %xmm2, %xmm7, %xmm7
  6600. vpxor %xmm1, %xmm4, %xmm4
  6601. vpsrld $31, %xmm7, %xmm0
  6602. vpsrld $31, %xmm4, %xmm1
  6603. vpslld $0x01, %xmm7, %xmm7
  6604. vpslld $0x01, %xmm4, %xmm4
  6605. vpsrldq $12, %xmm0, %xmm2
  6606. vpslldq $4, %xmm0, %xmm0
  6607. vpslldq $4, %xmm1, %xmm1
  6608. vpor %xmm2, %xmm4, %xmm4
  6609. vpor %xmm0, %xmm7, %xmm7
  6610. vpor %xmm1, %xmm4, %xmm4
  6611. vpslld $31, %xmm7, %xmm0
  6612. vpslld $30, %xmm7, %xmm1
  6613. vpslld $25, %xmm7, %xmm2
  6614. vpxor %xmm1, %xmm0, %xmm0
  6615. vpxor %xmm2, %xmm0, %xmm0
  6616. vmovdqa %xmm0, %xmm1
  6617. vpsrldq $4, %xmm1, %xmm1
  6618. vpslldq $12, %xmm0, %xmm0
  6619. vpxor %xmm0, %xmm7, %xmm7
  6620. vpsrld $0x01, %xmm7, %xmm2
  6621. vpsrld $2, %xmm7, %xmm3
  6622. vpsrld $7, %xmm7, %xmm0
  6623. vpxor %xmm3, %xmm2, %xmm2
  6624. vpxor %xmm0, %xmm2, %xmm2
  6625. vpxor %xmm1, %xmm2, %xmm2
  6626. vpxor %xmm7, %xmm2, %xmm2
  6627. vpxor %xmm2, %xmm4, %xmm4
  6628. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  6629. # Encrypt counter
  6630. vmovdqa (%r15), %xmm8
  6631. vpxor %xmm4, %xmm8, %xmm8
  6632. vaesenc 16(%r15), %xmm8, %xmm8
  6633. vaesenc 32(%r15), %xmm8, %xmm8
  6634. vaesenc 48(%r15), %xmm8, %xmm8
  6635. vaesenc 64(%r15), %xmm8, %xmm8
  6636. vaesenc 80(%r15), %xmm8, %xmm8
  6637. vaesenc 96(%r15), %xmm8, %xmm8
  6638. vaesenc 112(%r15), %xmm8, %xmm8
  6639. vaesenc 128(%r15), %xmm8, %xmm8
  6640. vaesenc 144(%r15), %xmm8, %xmm8
  6641. cmpl $11, %r10d
  6642. vmovdqa 160(%r15), %xmm9
  6643. jl L_AES_GCM_encrypt_avx1_calc_iv_2_aesenc_avx_last
  6644. vaesenc %xmm9, %xmm8, %xmm8
  6645. vaesenc 176(%r15), %xmm8, %xmm8
  6646. cmpl $13, %r10d
  6647. vmovdqa 192(%r15), %xmm9
  6648. jl L_AES_GCM_encrypt_avx1_calc_iv_2_aesenc_avx_last
  6649. vaesenc %xmm9, %xmm8, %xmm8
  6650. vaesenc 208(%r15), %xmm8, %xmm8
  6651. vmovdqa 224(%r15), %xmm9
  6652. L_AES_GCM_encrypt_avx1_calc_iv_2_aesenc_avx_last:
  6653. vaesenclast %xmm9, %xmm8, %xmm8
  6654. vmovdqu %xmm8, 144(%rsp)
  6655. L_AES_GCM_encrypt_avx1_iv_done:
  6656. # Additional authentication data
  6657. movl %r11d, %edx
  6658. cmpl $0x00, %edx
  6659. je L_AES_GCM_encrypt_avx1_calc_aad_done
  6660. xorl %ecx, %ecx
  6661. cmpl $16, %edx
  6662. jl L_AES_GCM_encrypt_avx1_calc_aad_lt16
  6663. andl $0xfffffff0, %edx
  6664. L_AES_GCM_encrypt_avx1_calc_aad_16_loop:
  6665. vmovdqu (%r12,%rcx,1), %xmm8
  6666. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  6667. vpxor %xmm8, %xmm6, %xmm6
  6668. # ghash_gfmul_avx
  6669. vpshufd $0x4e, %xmm6, %xmm1
  6670. vpshufd $0x4e, %xmm5, %xmm2
  6671. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  6672. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  6673. vpxor %xmm6, %xmm1, %xmm1
  6674. vpxor %xmm5, %xmm2, %xmm2
  6675. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  6676. vpxor %xmm0, %xmm1, %xmm1
  6677. vpxor %xmm3, %xmm1, %xmm1
  6678. vmovdqa %xmm0, %xmm7
  6679. vmovdqa %xmm3, %xmm6
  6680. vpslldq $8, %xmm1, %xmm2
  6681. vpsrldq $8, %xmm1, %xmm1
  6682. vpxor %xmm2, %xmm7, %xmm7
  6683. vpxor %xmm1, %xmm6, %xmm6
  6684. vpsrld $31, %xmm7, %xmm0
  6685. vpsrld $31, %xmm6, %xmm1
  6686. vpslld $0x01, %xmm7, %xmm7
  6687. vpslld $0x01, %xmm6, %xmm6
  6688. vpsrldq $12, %xmm0, %xmm2
  6689. vpslldq $4, %xmm0, %xmm0
  6690. vpslldq $4, %xmm1, %xmm1
  6691. vpor %xmm2, %xmm6, %xmm6
  6692. vpor %xmm0, %xmm7, %xmm7
  6693. vpor %xmm1, %xmm6, %xmm6
  6694. vpslld $31, %xmm7, %xmm0
  6695. vpslld $30, %xmm7, %xmm1
  6696. vpslld $25, %xmm7, %xmm2
  6697. vpxor %xmm1, %xmm0, %xmm0
  6698. vpxor %xmm2, %xmm0, %xmm0
  6699. vmovdqa %xmm0, %xmm1
  6700. vpsrldq $4, %xmm1, %xmm1
  6701. vpslldq $12, %xmm0, %xmm0
  6702. vpxor %xmm0, %xmm7, %xmm7
  6703. vpsrld $0x01, %xmm7, %xmm2
  6704. vpsrld $2, %xmm7, %xmm3
  6705. vpsrld $7, %xmm7, %xmm0
  6706. vpxor %xmm3, %xmm2, %xmm2
  6707. vpxor %xmm0, %xmm2, %xmm2
  6708. vpxor %xmm1, %xmm2, %xmm2
  6709. vpxor %xmm7, %xmm2, %xmm2
  6710. vpxor %xmm2, %xmm6, %xmm6
  6711. addl $16, %ecx
  6712. cmpl %edx, %ecx
  6713. jl L_AES_GCM_encrypt_avx1_calc_aad_16_loop
  6714. movl %r11d, %edx
  6715. cmpl %edx, %ecx
  6716. je L_AES_GCM_encrypt_avx1_calc_aad_done
  6717. L_AES_GCM_encrypt_avx1_calc_aad_lt16:
  6718. subq $16, %rsp
  6719. vpxor %xmm8, %xmm8, %xmm8
  6720. xorl %ebx, %ebx
  6721. vmovdqu %xmm8, (%rsp)
  6722. L_AES_GCM_encrypt_avx1_calc_aad_loop:
  6723. movzbl (%r12,%rcx,1), %r13d
  6724. movb %r13b, (%rsp,%rbx,1)
  6725. incl %ecx
  6726. incl %ebx
  6727. cmpl %edx, %ecx
  6728. jl L_AES_GCM_encrypt_avx1_calc_aad_loop
  6729. vmovdqu (%rsp), %xmm8
  6730. addq $16, %rsp
  6731. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  6732. vpxor %xmm8, %xmm6, %xmm6
  6733. # ghash_gfmul_avx
  6734. vpshufd $0x4e, %xmm6, %xmm1
  6735. vpshufd $0x4e, %xmm5, %xmm2
  6736. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  6737. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  6738. vpxor %xmm6, %xmm1, %xmm1
  6739. vpxor %xmm5, %xmm2, %xmm2
  6740. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  6741. vpxor %xmm0, %xmm1, %xmm1
  6742. vpxor %xmm3, %xmm1, %xmm1
  6743. vmovdqa %xmm0, %xmm7
  6744. vmovdqa %xmm3, %xmm6
  6745. vpslldq $8, %xmm1, %xmm2
  6746. vpsrldq $8, %xmm1, %xmm1
  6747. vpxor %xmm2, %xmm7, %xmm7
  6748. vpxor %xmm1, %xmm6, %xmm6
  6749. vpsrld $31, %xmm7, %xmm0
  6750. vpsrld $31, %xmm6, %xmm1
  6751. vpslld $0x01, %xmm7, %xmm7
  6752. vpslld $0x01, %xmm6, %xmm6
  6753. vpsrldq $12, %xmm0, %xmm2
  6754. vpslldq $4, %xmm0, %xmm0
  6755. vpslldq $4, %xmm1, %xmm1
  6756. vpor %xmm2, %xmm6, %xmm6
  6757. vpor %xmm0, %xmm7, %xmm7
  6758. vpor %xmm1, %xmm6, %xmm6
  6759. vpslld $31, %xmm7, %xmm0
  6760. vpslld $30, %xmm7, %xmm1
  6761. vpslld $25, %xmm7, %xmm2
  6762. vpxor %xmm1, %xmm0, %xmm0
  6763. vpxor %xmm2, %xmm0, %xmm0
  6764. vmovdqa %xmm0, %xmm1
  6765. vpsrldq $4, %xmm1, %xmm1
  6766. vpslldq $12, %xmm0, %xmm0
  6767. vpxor %xmm0, %xmm7, %xmm7
  6768. vpsrld $0x01, %xmm7, %xmm2
  6769. vpsrld $2, %xmm7, %xmm3
  6770. vpsrld $7, %xmm7, %xmm0
  6771. vpxor %xmm3, %xmm2, %xmm2
  6772. vpxor %xmm0, %xmm2, %xmm2
  6773. vpxor %xmm1, %xmm2, %xmm2
  6774. vpxor %xmm7, %xmm2, %xmm2
  6775. vpxor %xmm2, %xmm6, %xmm6
  6776. L_AES_GCM_encrypt_avx1_calc_aad_done:
  6777. # Calculate counter and H
  6778. vpsrlq $63, %xmm5, %xmm9
  6779. vpsllq $0x01, %xmm5, %xmm8
  6780. vpslldq $8, %xmm9, %xmm9
  6781. vpor %xmm9, %xmm8, %xmm8
  6782. vpshufd $0xff, %xmm5, %xmm5
  6783. vpsrad $31, %xmm5, %xmm5
  6784. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  6785. vpand L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  6786. vpaddd L_avx1_aes_gcm_one(%rip), %xmm4, %xmm4
  6787. vpxor %xmm8, %xmm5, %xmm5
  6788. vmovdqu %xmm4, 128(%rsp)
  6789. xorl %ebx, %ebx
  6790. cmpl $0x80, %r9d
  6791. movl %r9d, %r13d
  6792. jl L_AES_GCM_encrypt_avx1_done_128
  6793. andl $0xffffff80, %r13d
  6794. vmovdqa %xmm6, %xmm2
  6795. # H ^ 1
  6796. vmovdqu %xmm5, (%rsp)
  6797. # H ^ 2
  6798. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm8
  6799. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm0
  6800. vpslld $31, %xmm8, %xmm12
  6801. vpslld $30, %xmm8, %xmm13
  6802. vpslld $25, %xmm8, %xmm14
  6803. vpxor %xmm13, %xmm12, %xmm12
  6804. vpxor %xmm14, %xmm12, %xmm12
  6805. vpsrldq $4, %xmm12, %xmm13
  6806. vpslldq $12, %xmm12, %xmm12
  6807. vpxor %xmm12, %xmm8, %xmm8
  6808. vpsrld $0x01, %xmm8, %xmm14
  6809. vpsrld $2, %xmm8, %xmm10
  6810. vpsrld $7, %xmm8, %xmm9
  6811. vpxor %xmm10, %xmm14, %xmm14
  6812. vpxor %xmm9, %xmm14, %xmm14
  6813. vpxor %xmm13, %xmm14, %xmm14
  6814. vpxor %xmm8, %xmm14, %xmm14
  6815. vpxor %xmm14, %xmm0, %xmm0
  6816. vmovdqu %xmm0, 16(%rsp)
  6817. # H ^ 3
  6818. # ghash_gfmul_red_avx
  6819. vpshufd $0x4e, %xmm5, %xmm9
  6820. vpshufd $0x4e, %xmm0, %xmm10
  6821. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm11
  6822. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm8
  6823. vpxor %xmm5, %xmm9, %xmm9
  6824. vpxor %xmm0, %xmm10, %xmm10
  6825. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  6826. vpxor %xmm8, %xmm9, %xmm9
  6827. vpxor %xmm11, %xmm9, %xmm9
  6828. vpslldq $8, %xmm9, %xmm10
  6829. vpsrldq $8, %xmm9, %xmm9
  6830. vpxor %xmm10, %xmm8, %xmm8
  6831. vpxor %xmm9, %xmm11, %xmm1
  6832. vpslld $31, %xmm8, %xmm12
  6833. vpslld $30, %xmm8, %xmm13
  6834. vpslld $25, %xmm8, %xmm14
  6835. vpxor %xmm13, %xmm12, %xmm12
  6836. vpxor %xmm14, %xmm12, %xmm12
  6837. vpsrldq $4, %xmm12, %xmm13
  6838. vpslldq $12, %xmm12, %xmm12
  6839. vpxor %xmm12, %xmm8, %xmm8
  6840. vpsrld $0x01, %xmm8, %xmm14
  6841. vpsrld $2, %xmm8, %xmm10
  6842. vpsrld $7, %xmm8, %xmm9
  6843. vpxor %xmm10, %xmm14, %xmm14
  6844. vpxor %xmm9, %xmm14, %xmm14
  6845. vpxor %xmm13, %xmm14, %xmm14
  6846. vpxor %xmm8, %xmm14, %xmm14
  6847. vpxor %xmm14, %xmm1, %xmm1
  6848. vmovdqu %xmm1, 32(%rsp)
  6849. # H ^ 4
  6850. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm8
  6851. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm3
  6852. vpslld $31, %xmm8, %xmm12
  6853. vpslld $30, %xmm8, %xmm13
  6854. vpslld $25, %xmm8, %xmm14
  6855. vpxor %xmm13, %xmm12, %xmm12
  6856. vpxor %xmm14, %xmm12, %xmm12
  6857. vpsrldq $4, %xmm12, %xmm13
  6858. vpslldq $12, %xmm12, %xmm12
  6859. vpxor %xmm12, %xmm8, %xmm8
  6860. vpsrld $0x01, %xmm8, %xmm14
  6861. vpsrld $2, %xmm8, %xmm10
  6862. vpsrld $7, %xmm8, %xmm9
  6863. vpxor %xmm10, %xmm14, %xmm14
  6864. vpxor %xmm9, %xmm14, %xmm14
  6865. vpxor %xmm13, %xmm14, %xmm14
  6866. vpxor %xmm8, %xmm14, %xmm14
  6867. vpxor %xmm14, %xmm3, %xmm3
  6868. vmovdqu %xmm3, 48(%rsp)
  6869. # H ^ 5
  6870. # ghash_gfmul_red_avx
  6871. vpshufd $0x4e, %xmm0, %xmm9
  6872. vpshufd $0x4e, %xmm1, %xmm10
  6873. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm11
  6874. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm8
  6875. vpxor %xmm0, %xmm9, %xmm9
  6876. vpxor %xmm1, %xmm10, %xmm10
  6877. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  6878. vpxor %xmm8, %xmm9, %xmm9
  6879. vpxor %xmm11, %xmm9, %xmm9
  6880. vpslldq $8, %xmm9, %xmm10
  6881. vpsrldq $8, %xmm9, %xmm9
  6882. vpxor %xmm10, %xmm8, %xmm8
  6883. vpxor %xmm9, %xmm11, %xmm7
  6884. vpslld $31, %xmm8, %xmm12
  6885. vpslld $30, %xmm8, %xmm13
  6886. vpslld $25, %xmm8, %xmm14
  6887. vpxor %xmm13, %xmm12, %xmm12
  6888. vpxor %xmm14, %xmm12, %xmm12
  6889. vpsrldq $4, %xmm12, %xmm13
  6890. vpslldq $12, %xmm12, %xmm12
  6891. vpxor %xmm12, %xmm8, %xmm8
  6892. vpsrld $0x01, %xmm8, %xmm14
  6893. vpsrld $2, %xmm8, %xmm10
  6894. vpsrld $7, %xmm8, %xmm9
  6895. vpxor %xmm10, %xmm14, %xmm14
  6896. vpxor %xmm9, %xmm14, %xmm14
  6897. vpxor %xmm13, %xmm14, %xmm14
  6898. vpxor %xmm8, %xmm14, %xmm14
  6899. vpxor %xmm14, %xmm7, %xmm7
  6900. vmovdqu %xmm7, 64(%rsp)
  6901. # H ^ 6
  6902. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm8
  6903. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm7
  6904. vpslld $31, %xmm8, %xmm12
  6905. vpslld $30, %xmm8, %xmm13
  6906. vpslld $25, %xmm8, %xmm14
  6907. vpxor %xmm13, %xmm12, %xmm12
  6908. vpxor %xmm14, %xmm12, %xmm12
  6909. vpsrldq $4, %xmm12, %xmm13
  6910. vpslldq $12, %xmm12, %xmm12
  6911. vpxor %xmm12, %xmm8, %xmm8
  6912. vpsrld $0x01, %xmm8, %xmm14
  6913. vpsrld $2, %xmm8, %xmm10
  6914. vpsrld $7, %xmm8, %xmm9
  6915. vpxor %xmm10, %xmm14, %xmm14
  6916. vpxor %xmm9, %xmm14, %xmm14
  6917. vpxor %xmm13, %xmm14, %xmm14
  6918. vpxor %xmm8, %xmm14, %xmm14
  6919. vpxor %xmm14, %xmm7, %xmm7
  6920. vmovdqu %xmm7, 80(%rsp)
  6921. # H ^ 7
  6922. # ghash_gfmul_red_avx
  6923. vpshufd $0x4e, %xmm1, %xmm9
  6924. vpshufd $0x4e, %xmm3, %xmm10
  6925. vpclmulqdq $0x11, %xmm1, %xmm3, %xmm11
  6926. vpclmulqdq $0x00, %xmm1, %xmm3, %xmm8
  6927. vpxor %xmm1, %xmm9, %xmm9
  6928. vpxor %xmm3, %xmm10, %xmm10
  6929. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  6930. vpxor %xmm8, %xmm9, %xmm9
  6931. vpxor %xmm11, %xmm9, %xmm9
  6932. vpslldq $8, %xmm9, %xmm10
  6933. vpsrldq $8, %xmm9, %xmm9
  6934. vpxor %xmm10, %xmm8, %xmm8
  6935. vpxor %xmm9, %xmm11, %xmm7
  6936. vpslld $31, %xmm8, %xmm12
  6937. vpslld $30, %xmm8, %xmm13
  6938. vpslld $25, %xmm8, %xmm14
  6939. vpxor %xmm13, %xmm12, %xmm12
  6940. vpxor %xmm14, %xmm12, %xmm12
  6941. vpsrldq $4, %xmm12, %xmm13
  6942. vpslldq $12, %xmm12, %xmm12
  6943. vpxor %xmm12, %xmm8, %xmm8
  6944. vpsrld $0x01, %xmm8, %xmm14
  6945. vpsrld $2, %xmm8, %xmm10
  6946. vpsrld $7, %xmm8, %xmm9
  6947. vpxor %xmm10, %xmm14, %xmm14
  6948. vpxor %xmm9, %xmm14, %xmm14
  6949. vpxor %xmm13, %xmm14, %xmm14
  6950. vpxor %xmm8, %xmm14, %xmm14
  6951. vpxor %xmm14, %xmm7, %xmm7
  6952. vmovdqu %xmm7, 96(%rsp)
  6953. # H ^ 8
  6954. vpclmulqdq $0x00, %xmm3, %xmm3, %xmm8
  6955. vpclmulqdq $0x11, %xmm3, %xmm3, %xmm7
  6956. vpslld $31, %xmm8, %xmm12
  6957. vpslld $30, %xmm8, %xmm13
  6958. vpslld $25, %xmm8, %xmm14
  6959. vpxor %xmm13, %xmm12, %xmm12
  6960. vpxor %xmm14, %xmm12, %xmm12
  6961. vpsrldq $4, %xmm12, %xmm13
  6962. vpslldq $12, %xmm12, %xmm12
  6963. vpxor %xmm12, %xmm8, %xmm8
  6964. vpsrld $0x01, %xmm8, %xmm14
  6965. vpsrld $2, %xmm8, %xmm10
  6966. vpsrld $7, %xmm8, %xmm9
  6967. vpxor %xmm10, %xmm14, %xmm14
  6968. vpxor %xmm9, %xmm14, %xmm14
  6969. vpxor %xmm13, %xmm14, %xmm14
  6970. vpxor %xmm8, %xmm14, %xmm14
  6971. vpxor %xmm14, %xmm7, %xmm7
  6972. vmovdqu %xmm7, 112(%rsp)
  6973. # First 128 bytes of input
  6974. vmovdqu 128(%rsp), %xmm0
  6975. vmovdqa L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
  6976. vpshufb %xmm1, %xmm0, %xmm8
  6977. vpaddd L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
  6978. vpshufb %xmm1, %xmm9, %xmm9
  6979. vpaddd L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
  6980. vpshufb %xmm1, %xmm10, %xmm10
  6981. vpaddd L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
  6982. vpshufb %xmm1, %xmm11, %xmm11
  6983. vpaddd L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
  6984. vpshufb %xmm1, %xmm12, %xmm12
  6985. vpaddd L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
  6986. vpshufb %xmm1, %xmm13, %xmm13
  6987. vpaddd L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
  6988. vpshufb %xmm1, %xmm14, %xmm14
  6989. vpaddd L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
  6990. vpshufb %xmm1, %xmm15, %xmm15
  6991. vpaddd L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
  6992. vmovdqa (%r15), %xmm7
  6993. vmovdqu %xmm0, 128(%rsp)
  6994. vpxor %xmm7, %xmm8, %xmm8
  6995. vpxor %xmm7, %xmm9, %xmm9
  6996. vpxor %xmm7, %xmm10, %xmm10
  6997. vpxor %xmm7, %xmm11, %xmm11
  6998. vpxor %xmm7, %xmm12, %xmm12
  6999. vpxor %xmm7, %xmm13, %xmm13
  7000. vpxor %xmm7, %xmm14, %xmm14
  7001. vpxor %xmm7, %xmm15, %xmm15
  7002. vmovdqa 16(%r15), %xmm7
  7003. vaesenc %xmm7, %xmm8, %xmm8
  7004. vaesenc %xmm7, %xmm9, %xmm9
  7005. vaesenc %xmm7, %xmm10, %xmm10
  7006. vaesenc %xmm7, %xmm11, %xmm11
  7007. vaesenc %xmm7, %xmm12, %xmm12
  7008. vaesenc %xmm7, %xmm13, %xmm13
  7009. vaesenc %xmm7, %xmm14, %xmm14
  7010. vaesenc %xmm7, %xmm15, %xmm15
  7011. vmovdqa 32(%r15), %xmm7
  7012. vaesenc %xmm7, %xmm8, %xmm8
  7013. vaesenc %xmm7, %xmm9, %xmm9
  7014. vaesenc %xmm7, %xmm10, %xmm10
  7015. vaesenc %xmm7, %xmm11, %xmm11
  7016. vaesenc %xmm7, %xmm12, %xmm12
  7017. vaesenc %xmm7, %xmm13, %xmm13
  7018. vaesenc %xmm7, %xmm14, %xmm14
  7019. vaesenc %xmm7, %xmm15, %xmm15
  7020. vmovdqa 48(%r15), %xmm7
  7021. vaesenc %xmm7, %xmm8, %xmm8
  7022. vaesenc %xmm7, %xmm9, %xmm9
  7023. vaesenc %xmm7, %xmm10, %xmm10
  7024. vaesenc %xmm7, %xmm11, %xmm11
  7025. vaesenc %xmm7, %xmm12, %xmm12
  7026. vaesenc %xmm7, %xmm13, %xmm13
  7027. vaesenc %xmm7, %xmm14, %xmm14
  7028. vaesenc %xmm7, %xmm15, %xmm15
  7029. vmovdqa 64(%r15), %xmm7
  7030. vaesenc %xmm7, %xmm8, %xmm8
  7031. vaesenc %xmm7, %xmm9, %xmm9
  7032. vaesenc %xmm7, %xmm10, %xmm10
  7033. vaesenc %xmm7, %xmm11, %xmm11
  7034. vaesenc %xmm7, %xmm12, %xmm12
  7035. vaesenc %xmm7, %xmm13, %xmm13
  7036. vaesenc %xmm7, %xmm14, %xmm14
  7037. vaesenc %xmm7, %xmm15, %xmm15
  7038. vmovdqa 80(%r15), %xmm7
  7039. vaesenc %xmm7, %xmm8, %xmm8
  7040. vaesenc %xmm7, %xmm9, %xmm9
  7041. vaesenc %xmm7, %xmm10, %xmm10
  7042. vaesenc %xmm7, %xmm11, %xmm11
  7043. vaesenc %xmm7, %xmm12, %xmm12
  7044. vaesenc %xmm7, %xmm13, %xmm13
  7045. vaesenc %xmm7, %xmm14, %xmm14
  7046. vaesenc %xmm7, %xmm15, %xmm15
  7047. vmovdqa 96(%r15), %xmm7
  7048. vaesenc %xmm7, %xmm8, %xmm8
  7049. vaesenc %xmm7, %xmm9, %xmm9
  7050. vaesenc %xmm7, %xmm10, %xmm10
  7051. vaesenc %xmm7, %xmm11, %xmm11
  7052. vaesenc %xmm7, %xmm12, %xmm12
  7053. vaesenc %xmm7, %xmm13, %xmm13
  7054. vaesenc %xmm7, %xmm14, %xmm14
  7055. vaesenc %xmm7, %xmm15, %xmm15
  7056. vmovdqa 112(%r15), %xmm7
  7057. vaesenc %xmm7, %xmm8, %xmm8
  7058. vaesenc %xmm7, %xmm9, %xmm9
  7059. vaesenc %xmm7, %xmm10, %xmm10
  7060. vaesenc %xmm7, %xmm11, %xmm11
  7061. vaesenc %xmm7, %xmm12, %xmm12
  7062. vaesenc %xmm7, %xmm13, %xmm13
  7063. vaesenc %xmm7, %xmm14, %xmm14
  7064. vaesenc %xmm7, %xmm15, %xmm15
  7065. vmovdqa 128(%r15), %xmm7
  7066. vaesenc %xmm7, %xmm8, %xmm8
  7067. vaesenc %xmm7, %xmm9, %xmm9
  7068. vaesenc %xmm7, %xmm10, %xmm10
  7069. vaesenc %xmm7, %xmm11, %xmm11
  7070. vaesenc %xmm7, %xmm12, %xmm12
  7071. vaesenc %xmm7, %xmm13, %xmm13
  7072. vaesenc %xmm7, %xmm14, %xmm14
  7073. vaesenc %xmm7, %xmm15, %xmm15
  7074. vmovdqa 144(%r15), %xmm7
  7075. vaesenc %xmm7, %xmm8, %xmm8
  7076. vaesenc %xmm7, %xmm9, %xmm9
  7077. vaesenc %xmm7, %xmm10, %xmm10
  7078. vaesenc %xmm7, %xmm11, %xmm11
  7079. vaesenc %xmm7, %xmm12, %xmm12
  7080. vaesenc %xmm7, %xmm13, %xmm13
  7081. vaesenc %xmm7, %xmm14, %xmm14
  7082. vaesenc %xmm7, %xmm15, %xmm15
  7083. cmpl $11, %r10d
  7084. vmovdqa 160(%r15), %xmm7
  7085. jl L_AES_GCM_encrypt_avx1_aesenc_128_enc_done
  7086. vaesenc %xmm7, %xmm8, %xmm8
  7087. vaesenc %xmm7, %xmm9, %xmm9
  7088. vaesenc %xmm7, %xmm10, %xmm10
  7089. vaesenc %xmm7, %xmm11, %xmm11
  7090. vaesenc %xmm7, %xmm12, %xmm12
  7091. vaesenc %xmm7, %xmm13, %xmm13
  7092. vaesenc %xmm7, %xmm14, %xmm14
  7093. vaesenc %xmm7, %xmm15, %xmm15
  7094. vmovdqa 176(%r15), %xmm7
  7095. vaesenc %xmm7, %xmm8, %xmm8
  7096. vaesenc %xmm7, %xmm9, %xmm9
  7097. vaesenc %xmm7, %xmm10, %xmm10
  7098. vaesenc %xmm7, %xmm11, %xmm11
  7099. vaesenc %xmm7, %xmm12, %xmm12
  7100. vaesenc %xmm7, %xmm13, %xmm13
  7101. vaesenc %xmm7, %xmm14, %xmm14
  7102. vaesenc %xmm7, %xmm15, %xmm15
  7103. cmpl $13, %r10d
  7104. vmovdqa 192(%r15), %xmm7
  7105. jl L_AES_GCM_encrypt_avx1_aesenc_128_enc_done
  7106. vaesenc %xmm7, %xmm8, %xmm8
  7107. vaesenc %xmm7, %xmm9, %xmm9
  7108. vaesenc %xmm7, %xmm10, %xmm10
  7109. vaesenc %xmm7, %xmm11, %xmm11
  7110. vaesenc %xmm7, %xmm12, %xmm12
  7111. vaesenc %xmm7, %xmm13, %xmm13
  7112. vaesenc %xmm7, %xmm14, %xmm14
  7113. vaesenc %xmm7, %xmm15, %xmm15
  7114. vmovdqa 208(%r15), %xmm7
  7115. vaesenc %xmm7, %xmm8, %xmm8
  7116. vaesenc %xmm7, %xmm9, %xmm9
  7117. vaesenc %xmm7, %xmm10, %xmm10
  7118. vaesenc %xmm7, %xmm11, %xmm11
  7119. vaesenc %xmm7, %xmm12, %xmm12
  7120. vaesenc %xmm7, %xmm13, %xmm13
  7121. vaesenc %xmm7, %xmm14, %xmm14
  7122. vaesenc %xmm7, %xmm15, %xmm15
  7123. vmovdqa 224(%r15), %xmm7
  7124. L_AES_GCM_encrypt_avx1_aesenc_128_enc_done:
  7125. vaesenclast %xmm7, %xmm8, %xmm8
  7126. vaesenclast %xmm7, %xmm9, %xmm9
  7127. vmovdqu (%rdi), %xmm0
  7128. vmovdqu 16(%rdi), %xmm1
  7129. vpxor %xmm0, %xmm8, %xmm8
  7130. vpxor %xmm1, %xmm9, %xmm9
  7131. vmovdqu %xmm8, (%rsi)
  7132. vmovdqu %xmm9, 16(%rsi)
  7133. vaesenclast %xmm7, %xmm10, %xmm10
  7134. vaesenclast %xmm7, %xmm11, %xmm11
  7135. vmovdqu 32(%rdi), %xmm0
  7136. vmovdqu 48(%rdi), %xmm1
  7137. vpxor %xmm0, %xmm10, %xmm10
  7138. vpxor %xmm1, %xmm11, %xmm11
  7139. vmovdqu %xmm10, 32(%rsi)
  7140. vmovdqu %xmm11, 48(%rsi)
  7141. vaesenclast %xmm7, %xmm12, %xmm12
  7142. vaesenclast %xmm7, %xmm13, %xmm13
  7143. vmovdqu 64(%rdi), %xmm0
  7144. vmovdqu 80(%rdi), %xmm1
  7145. vpxor %xmm0, %xmm12, %xmm12
  7146. vpxor %xmm1, %xmm13, %xmm13
  7147. vmovdqu %xmm12, 64(%rsi)
  7148. vmovdqu %xmm13, 80(%rsi)
  7149. vaesenclast %xmm7, %xmm14, %xmm14
  7150. vaesenclast %xmm7, %xmm15, %xmm15
  7151. vmovdqu 96(%rdi), %xmm0
  7152. vmovdqu 112(%rdi), %xmm1
  7153. vpxor %xmm0, %xmm14, %xmm14
  7154. vpxor %xmm1, %xmm15, %xmm15
  7155. vmovdqu %xmm14, 96(%rsi)
  7156. vmovdqu %xmm15, 112(%rsi)
  7157. cmpl $0x80, %r13d
  7158. movl $0x80, %ebx
  7159. jle L_AES_GCM_encrypt_avx1_end_128
  7160. # More 128 bytes of input
  7161. L_AES_GCM_encrypt_avx1_ghash_128:
  7162. leaq (%rdi,%rbx,1), %rcx
  7163. leaq (%rsi,%rbx,1), %rdx
  7164. vmovdqu 128(%rsp), %xmm0
  7165. vmovdqa L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
  7166. vpshufb %xmm1, %xmm0, %xmm8
  7167. vpaddd L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
  7168. vpshufb %xmm1, %xmm9, %xmm9
  7169. vpaddd L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
  7170. vpshufb %xmm1, %xmm10, %xmm10
  7171. vpaddd L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
  7172. vpshufb %xmm1, %xmm11, %xmm11
  7173. vpaddd L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
  7174. vpshufb %xmm1, %xmm12, %xmm12
  7175. vpaddd L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
  7176. vpshufb %xmm1, %xmm13, %xmm13
  7177. vpaddd L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
  7178. vpshufb %xmm1, %xmm14, %xmm14
  7179. vpaddd L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
  7180. vpshufb %xmm1, %xmm15, %xmm15
  7181. vpaddd L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
  7182. vmovdqa (%r15), %xmm7
  7183. vmovdqu %xmm0, 128(%rsp)
  7184. vpxor %xmm7, %xmm8, %xmm8
  7185. vpxor %xmm7, %xmm9, %xmm9
  7186. vpxor %xmm7, %xmm10, %xmm10
  7187. vpxor %xmm7, %xmm11, %xmm11
  7188. vpxor %xmm7, %xmm12, %xmm12
  7189. vpxor %xmm7, %xmm13, %xmm13
  7190. vpxor %xmm7, %xmm14, %xmm14
  7191. vpxor %xmm7, %xmm15, %xmm15
  7192. vmovdqu 112(%rsp), %xmm7
  7193. vmovdqu -128(%rdx), %xmm0
  7194. vaesenc 16(%r15), %xmm8, %xmm8
  7195. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7196. vpxor %xmm2, %xmm0, %xmm0
  7197. vpshufd $0x4e, %xmm7, %xmm1
  7198. vpshufd $0x4e, %xmm0, %xmm5
  7199. vpxor %xmm7, %xmm1, %xmm1
  7200. vpxor %xmm0, %xmm5, %xmm5
  7201. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm3
  7202. vaesenc 16(%r15), %xmm9, %xmm9
  7203. vaesenc 16(%r15), %xmm10, %xmm10
  7204. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm2
  7205. vaesenc 16(%r15), %xmm11, %xmm11
  7206. vaesenc 16(%r15), %xmm12, %xmm12
  7207. vpclmulqdq $0x00, %xmm5, %xmm1, %xmm1
  7208. vaesenc 16(%r15), %xmm13, %xmm13
  7209. vaesenc 16(%r15), %xmm14, %xmm14
  7210. vaesenc 16(%r15), %xmm15, %xmm15
  7211. vpxor %xmm2, %xmm1, %xmm1
  7212. vpxor %xmm3, %xmm1, %xmm1
  7213. vmovdqu 96(%rsp), %xmm7
  7214. vmovdqu -112(%rdx), %xmm0
  7215. vpshufd $0x4e, %xmm7, %xmm4
  7216. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7217. vaesenc 32(%r15), %xmm8, %xmm8
  7218. vpxor %xmm7, %xmm4, %xmm4
  7219. vpshufd $0x4e, %xmm0, %xmm5
  7220. vpxor %xmm0, %xmm5, %xmm5
  7221. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7222. vaesenc 32(%r15), %xmm9, %xmm9
  7223. vaesenc 32(%r15), %xmm10, %xmm10
  7224. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7225. vaesenc 32(%r15), %xmm11, %xmm11
  7226. vaesenc 32(%r15), %xmm12, %xmm12
  7227. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7228. vaesenc 32(%r15), %xmm13, %xmm13
  7229. vaesenc 32(%r15), %xmm14, %xmm14
  7230. vaesenc 32(%r15), %xmm15, %xmm15
  7231. vpxor %xmm7, %xmm1, %xmm1
  7232. vpxor %xmm7, %xmm2, %xmm2
  7233. vpxor %xmm6, %xmm1, %xmm1
  7234. vpxor %xmm6, %xmm3, %xmm3
  7235. vpxor %xmm4, %xmm1, %xmm1
  7236. vmovdqu 80(%rsp), %xmm7
  7237. vmovdqu -96(%rdx), %xmm0
  7238. vpshufd $0x4e, %xmm7, %xmm4
  7239. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7240. vaesenc 48(%r15), %xmm8, %xmm8
  7241. vpxor %xmm7, %xmm4, %xmm4
  7242. vpshufd $0x4e, %xmm0, %xmm5
  7243. vpxor %xmm0, %xmm5, %xmm5
  7244. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7245. vaesenc 48(%r15), %xmm9, %xmm9
  7246. vaesenc 48(%r15), %xmm10, %xmm10
  7247. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7248. vaesenc 48(%r15), %xmm11, %xmm11
  7249. vaesenc 48(%r15), %xmm12, %xmm12
  7250. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7251. vaesenc 48(%r15), %xmm13, %xmm13
  7252. vaesenc 48(%r15), %xmm14, %xmm14
  7253. vaesenc 48(%r15), %xmm15, %xmm15
  7254. vpxor %xmm7, %xmm1, %xmm1
  7255. vpxor %xmm7, %xmm2, %xmm2
  7256. vpxor %xmm6, %xmm1, %xmm1
  7257. vpxor %xmm6, %xmm3, %xmm3
  7258. vpxor %xmm4, %xmm1, %xmm1
  7259. vmovdqu 64(%rsp), %xmm7
  7260. vmovdqu -80(%rdx), %xmm0
  7261. vpshufd $0x4e, %xmm7, %xmm4
  7262. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7263. vaesenc 64(%r15), %xmm8, %xmm8
  7264. vpxor %xmm7, %xmm4, %xmm4
  7265. vpshufd $0x4e, %xmm0, %xmm5
  7266. vpxor %xmm0, %xmm5, %xmm5
  7267. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7268. vaesenc 64(%r15), %xmm9, %xmm9
  7269. vaesenc 64(%r15), %xmm10, %xmm10
  7270. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7271. vaesenc 64(%r15), %xmm11, %xmm11
  7272. vaesenc 64(%r15), %xmm12, %xmm12
  7273. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7274. vaesenc 64(%r15), %xmm13, %xmm13
  7275. vaesenc 64(%r15), %xmm14, %xmm14
  7276. vaesenc 64(%r15), %xmm15, %xmm15
  7277. vpxor %xmm7, %xmm1, %xmm1
  7278. vpxor %xmm7, %xmm2, %xmm2
  7279. vpxor %xmm6, %xmm1, %xmm1
  7280. vpxor %xmm6, %xmm3, %xmm3
  7281. vpxor %xmm4, %xmm1, %xmm1
  7282. vmovdqu 48(%rsp), %xmm7
  7283. vmovdqu -64(%rdx), %xmm0
  7284. vpshufd $0x4e, %xmm7, %xmm4
  7285. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7286. vaesenc 80(%r15), %xmm8, %xmm8
  7287. vpxor %xmm7, %xmm4, %xmm4
  7288. vpshufd $0x4e, %xmm0, %xmm5
  7289. vpxor %xmm0, %xmm5, %xmm5
  7290. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7291. vaesenc 80(%r15), %xmm9, %xmm9
  7292. vaesenc 80(%r15), %xmm10, %xmm10
  7293. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7294. vaesenc 80(%r15), %xmm11, %xmm11
  7295. vaesenc 80(%r15), %xmm12, %xmm12
  7296. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7297. vaesenc 80(%r15), %xmm13, %xmm13
  7298. vaesenc 80(%r15), %xmm14, %xmm14
  7299. vaesenc 80(%r15), %xmm15, %xmm15
  7300. vpxor %xmm7, %xmm1, %xmm1
  7301. vpxor %xmm7, %xmm2, %xmm2
  7302. vpxor %xmm6, %xmm1, %xmm1
  7303. vpxor %xmm6, %xmm3, %xmm3
  7304. vpxor %xmm4, %xmm1, %xmm1
  7305. vmovdqu 32(%rsp), %xmm7
  7306. vmovdqu -48(%rdx), %xmm0
  7307. vpshufd $0x4e, %xmm7, %xmm4
  7308. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7309. vaesenc 96(%r15), %xmm8, %xmm8
  7310. vpxor %xmm7, %xmm4, %xmm4
  7311. vpshufd $0x4e, %xmm0, %xmm5
  7312. vpxor %xmm0, %xmm5, %xmm5
  7313. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7314. vaesenc 96(%r15), %xmm9, %xmm9
  7315. vaesenc 96(%r15), %xmm10, %xmm10
  7316. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7317. vaesenc 96(%r15), %xmm11, %xmm11
  7318. vaesenc 96(%r15), %xmm12, %xmm12
  7319. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7320. vaesenc 96(%r15), %xmm13, %xmm13
  7321. vaesenc 96(%r15), %xmm14, %xmm14
  7322. vaesenc 96(%r15), %xmm15, %xmm15
  7323. vpxor %xmm7, %xmm1, %xmm1
  7324. vpxor %xmm7, %xmm2, %xmm2
  7325. vpxor %xmm6, %xmm1, %xmm1
  7326. vpxor %xmm6, %xmm3, %xmm3
  7327. vpxor %xmm4, %xmm1, %xmm1
  7328. vmovdqu 16(%rsp), %xmm7
  7329. vmovdqu -32(%rdx), %xmm0
  7330. vpshufd $0x4e, %xmm7, %xmm4
  7331. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7332. vaesenc 112(%r15), %xmm8, %xmm8
  7333. vpxor %xmm7, %xmm4, %xmm4
  7334. vpshufd $0x4e, %xmm0, %xmm5
  7335. vpxor %xmm0, %xmm5, %xmm5
  7336. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7337. vaesenc 112(%r15), %xmm9, %xmm9
  7338. vaesenc 112(%r15), %xmm10, %xmm10
  7339. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7340. vaesenc 112(%r15), %xmm11, %xmm11
  7341. vaesenc 112(%r15), %xmm12, %xmm12
  7342. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7343. vaesenc 112(%r15), %xmm13, %xmm13
  7344. vaesenc 112(%r15), %xmm14, %xmm14
  7345. vaesenc 112(%r15), %xmm15, %xmm15
  7346. vpxor %xmm7, %xmm1, %xmm1
  7347. vpxor %xmm7, %xmm2, %xmm2
  7348. vpxor %xmm6, %xmm1, %xmm1
  7349. vpxor %xmm6, %xmm3, %xmm3
  7350. vpxor %xmm4, %xmm1, %xmm1
  7351. vmovdqu (%rsp), %xmm7
  7352. vmovdqu -16(%rdx), %xmm0
  7353. vpshufd $0x4e, %xmm7, %xmm4
  7354. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  7355. vaesenc 128(%r15), %xmm8, %xmm8
  7356. vpxor %xmm7, %xmm4, %xmm4
  7357. vpshufd $0x4e, %xmm0, %xmm5
  7358. vpxor %xmm0, %xmm5, %xmm5
  7359. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  7360. vaesenc 128(%r15), %xmm9, %xmm9
  7361. vaesenc 128(%r15), %xmm10, %xmm10
  7362. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  7363. vaesenc 128(%r15), %xmm11, %xmm11
  7364. vaesenc 128(%r15), %xmm12, %xmm12
  7365. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  7366. vaesenc 128(%r15), %xmm13, %xmm13
  7367. vaesenc 128(%r15), %xmm14, %xmm14
  7368. vaesenc 128(%r15), %xmm15, %xmm15
  7369. vpxor %xmm7, %xmm1, %xmm1
  7370. vpxor %xmm7, %xmm2, %xmm2
  7371. vpxor %xmm6, %xmm1, %xmm1
  7372. vpxor %xmm6, %xmm3, %xmm3
  7373. vpxor %xmm4, %xmm1, %xmm1
  7374. vpslldq $8, %xmm1, %xmm5
  7375. vpsrldq $8, %xmm1, %xmm1
  7376. vaesenc 144(%r15), %xmm8, %xmm8
  7377. vpxor %xmm5, %xmm2, %xmm2
  7378. vpxor %xmm1, %xmm3, %xmm3
  7379. vaesenc 144(%r15), %xmm9, %xmm9
  7380. vpslld $31, %xmm2, %xmm7
  7381. vpslld $30, %xmm2, %xmm4
  7382. vpslld $25, %xmm2, %xmm5
  7383. vaesenc 144(%r15), %xmm10, %xmm10
  7384. vpxor %xmm4, %xmm7, %xmm7
  7385. vpxor %xmm5, %xmm7, %xmm7
  7386. vaesenc 144(%r15), %xmm11, %xmm11
  7387. vpsrldq $4, %xmm7, %xmm4
  7388. vpslldq $12, %xmm7, %xmm7
  7389. vaesenc 144(%r15), %xmm12, %xmm12
  7390. vpxor %xmm7, %xmm2, %xmm2
  7391. vpsrld $0x01, %xmm2, %xmm5
  7392. vaesenc 144(%r15), %xmm13, %xmm13
  7393. vpsrld $2, %xmm2, %xmm1
  7394. vpsrld $7, %xmm2, %xmm0
  7395. vaesenc 144(%r15), %xmm14, %xmm14
  7396. vpxor %xmm1, %xmm5, %xmm5
  7397. vpxor %xmm0, %xmm5, %xmm5
  7398. vaesenc 144(%r15), %xmm15, %xmm15
  7399. vpxor %xmm4, %xmm5, %xmm5
  7400. vpxor %xmm5, %xmm2, %xmm2
  7401. vpxor %xmm3, %xmm2, %xmm2
  7402. cmpl $11, %r10d
  7403. vmovdqa 160(%r15), %xmm7
  7404. jl L_AES_GCM_encrypt_avx1_aesenc_128_ghash_avx_done
  7405. vaesenc %xmm7, %xmm8, %xmm8
  7406. vaesenc %xmm7, %xmm9, %xmm9
  7407. vaesenc %xmm7, %xmm10, %xmm10
  7408. vaesenc %xmm7, %xmm11, %xmm11
  7409. vaesenc %xmm7, %xmm12, %xmm12
  7410. vaesenc %xmm7, %xmm13, %xmm13
  7411. vaesenc %xmm7, %xmm14, %xmm14
  7412. vaesenc %xmm7, %xmm15, %xmm15
  7413. vmovdqa 176(%r15), %xmm7
  7414. vaesenc %xmm7, %xmm8, %xmm8
  7415. vaesenc %xmm7, %xmm9, %xmm9
  7416. vaesenc %xmm7, %xmm10, %xmm10
  7417. vaesenc %xmm7, %xmm11, %xmm11
  7418. vaesenc %xmm7, %xmm12, %xmm12
  7419. vaesenc %xmm7, %xmm13, %xmm13
  7420. vaesenc %xmm7, %xmm14, %xmm14
  7421. vaesenc %xmm7, %xmm15, %xmm15
  7422. cmpl $13, %r10d
  7423. vmovdqa 192(%r15), %xmm7
  7424. jl L_AES_GCM_encrypt_avx1_aesenc_128_ghash_avx_done
  7425. vaesenc %xmm7, %xmm8, %xmm8
  7426. vaesenc %xmm7, %xmm9, %xmm9
  7427. vaesenc %xmm7, %xmm10, %xmm10
  7428. vaesenc %xmm7, %xmm11, %xmm11
  7429. vaesenc %xmm7, %xmm12, %xmm12
  7430. vaesenc %xmm7, %xmm13, %xmm13
  7431. vaesenc %xmm7, %xmm14, %xmm14
  7432. vaesenc %xmm7, %xmm15, %xmm15
  7433. vmovdqa 208(%r15), %xmm7
  7434. vaesenc %xmm7, %xmm8, %xmm8
  7435. vaesenc %xmm7, %xmm9, %xmm9
  7436. vaesenc %xmm7, %xmm10, %xmm10
  7437. vaesenc %xmm7, %xmm11, %xmm11
  7438. vaesenc %xmm7, %xmm12, %xmm12
  7439. vaesenc %xmm7, %xmm13, %xmm13
  7440. vaesenc %xmm7, %xmm14, %xmm14
  7441. vaesenc %xmm7, %xmm15, %xmm15
  7442. vmovdqa 224(%r15), %xmm7
  7443. L_AES_GCM_encrypt_avx1_aesenc_128_ghash_avx_done:
  7444. vaesenclast %xmm7, %xmm8, %xmm8
  7445. vaesenclast %xmm7, %xmm9, %xmm9
  7446. vmovdqu (%rcx), %xmm0
  7447. vmovdqu 16(%rcx), %xmm1
  7448. vpxor %xmm0, %xmm8, %xmm8
  7449. vpxor %xmm1, %xmm9, %xmm9
  7450. vmovdqu %xmm8, (%rdx)
  7451. vmovdqu %xmm9, 16(%rdx)
  7452. vaesenclast %xmm7, %xmm10, %xmm10
  7453. vaesenclast %xmm7, %xmm11, %xmm11
  7454. vmovdqu 32(%rcx), %xmm0
  7455. vmovdqu 48(%rcx), %xmm1
  7456. vpxor %xmm0, %xmm10, %xmm10
  7457. vpxor %xmm1, %xmm11, %xmm11
  7458. vmovdqu %xmm10, 32(%rdx)
  7459. vmovdqu %xmm11, 48(%rdx)
  7460. vaesenclast %xmm7, %xmm12, %xmm12
  7461. vaesenclast %xmm7, %xmm13, %xmm13
  7462. vmovdqu 64(%rcx), %xmm0
  7463. vmovdqu 80(%rcx), %xmm1
  7464. vpxor %xmm0, %xmm12, %xmm12
  7465. vpxor %xmm1, %xmm13, %xmm13
  7466. vmovdqu %xmm12, 64(%rdx)
  7467. vmovdqu %xmm13, 80(%rdx)
  7468. vaesenclast %xmm7, %xmm14, %xmm14
  7469. vaesenclast %xmm7, %xmm15, %xmm15
  7470. vmovdqu 96(%rcx), %xmm0
  7471. vmovdqu 112(%rcx), %xmm1
  7472. vpxor %xmm0, %xmm14, %xmm14
  7473. vpxor %xmm1, %xmm15, %xmm15
  7474. vmovdqu %xmm14, 96(%rdx)
  7475. vmovdqu %xmm15, 112(%rdx)
  7476. addl $0x80, %ebx
  7477. cmpl %r13d, %ebx
  7478. jl L_AES_GCM_encrypt_avx1_ghash_128
  7479. L_AES_GCM_encrypt_avx1_end_128:
  7480. vmovdqa L_avx1_aes_gcm_bswap_mask(%rip), %xmm4
  7481. vpshufb %xmm4, %xmm8, %xmm8
  7482. vpshufb %xmm4, %xmm9, %xmm9
  7483. vpshufb %xmm4, %xmm10, %xmm10
  7484. vpshufb %xmm4, %xmm11, %xmm11
  7485. vpxor %xmm2, %xmm8, %xmm8
  7486. vpshufb %xmm4, %xmm12, %xmm12
  7487. vpshufb %xmm4, %xmm13, %xmm13
  7488. vpshufb %xmm4, %xmm14, %xmm14
  7489. vpshufb %xmm4, %xmm15, %xmm15
  7490. vmovdqu (%rsp), %xmm7
  7491. vmovdqu 16(%rsp), %xmm5
  7492. # ghash_gfmul_avx
  7493. vpshufd $0x4e, %xmm15, %xmm1
  7494. vpshufd $0x4e, %xmm7, %xmm2
  7495. vpclmulqdq $0x11, %xmm15, %xmm7, %xmm3
  7496. vpclmulqdq $0x00, %xmm15, %xmm7, %xmm0
  7497. vpxor %xmm15, %xmm1, %xmm1
  7498. vpxor %xmm7, %xmm2, %xmm2
  7499. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7500. vpxor %xmm0, %xmm1, %xmm1
  7501. vpxor %xmm3, %xmm1, %xmm1
  7502. vmovdqa %xmm0, %xmm4
  7503. vmovdqa %xmm3, %xmm6
  7504. vpslldq $8, %xmm1, %xmm2
  7505. vpsrldq $8, %xmm1, %xmm1
  7506. vpxor %xmm2, %xmm4, %xmm4
  7507. vpxor %xmm1, %xmm6, %xmm6
  7508. # ghash_gfmul_xor_avx
  7509. vpshufd $0x4e, %xmm14, %xmm1
  7510. vpshufd $0x4e, %xmm5, %xmm2
  7511. vpclmulqdq $0x11, %xmm14, %xmm5, %xmm3
  7512. vpclmulqdq $0x00, %xmm14, %xmm5, %xmm0
  7513. vpxor %xmm14, %xmm1, %xmm1
  7514. vpxor %xmm5, %xmm2, %xmm2
  7515. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7516. vpxor %xmm0, %xmm1, %xmm1
  7517. vpxor %xmm3, %xmm1, %xmm1
  7518. vpxor %xmm0, %xmm4, %xmm4
  7519. vpxor %xmm3, %xmm6, %xmm6
  7520. vpslldq $8, %xmm1, %xmm2
  7521. vpsrldq $8, %xmm1, %xmm1
  7522. vpxor %xmm2, %xmm4, %xmm4
  7523. vpxor %xmm1, %xmm6, %xmm6
  7524. vmovdqu 32(%rsp), %xmm7
  7525. vmovdqu 48(%rsp), %xmm5
  7526. # ghash_gfmul_xor_avx
  7527. vpshufd $0x4e, %xmm13, %xmm1
  7528. vpshufd $0x4e, %xmm7, %xmm2
  7529. vpclmulqdq $0x11, %xmm13, %xmm7, %xmm3
  7530. vpclmulqdq $0x00, %xmm13, %xmm7, %xmm0
  7531. vpxor %xmm13, %xmm1, %xmm1
  7532. vpxor %xmm7, %xmm2, %xmm2
  7533. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7534. vpxor %xmm0, %xmm1, %xmm1
  7535. vpxor %xmm3, %xmm1, %xmm1
  7536. vpxor %xmm0, %xmm4, %xmm4
  7537. vpxor %xmm3, %xmm6, %xmm6
  7538. vpslldq $8, %xmm1, %xmm2
  7539. vpsrldq $8, %xmm1, %xmm1
  7540. vpxor %xmm2, %xmm4, %xmm4
  7541. vpxor %xmm1, %xmm6, %xmm6
  7542. # ghash_gfmul_xor_avx
  7543. vpshufd $0x4e, %xmm12, %xmm1
  7544. vpshufd $0x4e, %xmm5, %xmm2
  7545. vpclmulqdq $0x11, %xmm12, %xmm5, %xmm3
  7546. vpclmulqdq $0x00, %xmm12, %xmm5, %xmm0
  7547. vpxor %xmm12, %xmm1, %xmm1
  7548. vpxor %xmm5, %xmm2, %xmm2
  7549. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7550. vpxor %xmm0, %xmm1, %xmm1
  7551. vpxor %xmm3, %xmm1, %xmm1
  7552. vpxor %xmm0, %xmm4, %xmm4
  7553. vpxor %xmm3, %xmm6, %xmm6
  7554. vpslldq $8, %xmm1, %xmm2
  7555. vpsrldq $8, %xmm1, %xmm1
  7556. vpxor %xmm2, %xmm4, %xmm4
  7557. vpxor %xmm1, %xmm6, %xmm6
  7558. vmovdqu 64(%rsp), %xmm7
  7559. vmovdqu 80(%rsp), %xmm5
  7560. # ghash_gfmul_xor_avx
  7561. vpshufd $0x4e, %xmm11, %xmm1
  7562. vpshufd $0x4e, %xmm7, %xmm2
  7563. vpclmulqdq $0x11, %xmm11, %xmm7, %xmm3
  7564. vpclmulqdq $0x00, %xmm11, %xmm7, %xmm0
  7565. vpxor %xmm11, %xmm1, %xmm1
  7566. vpxor %xmm7, %xmm2, %xmm2
  7567. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7568. vpxor %xmm0, %xmm1, %xmm1
  7569. vpxor %xmm3, %xmm1, %xmm1
  7570. vpxor %xmm0, %xmm4, %xmm4
  7571. vpxor %xmm3, %xmm6, %xmm6
  7572. vpslldq $8, %xmm1, %xmm2
  7573. vpsrldq $8, %xmm1, %xmm1
  7574. vpxor %xmm2, %xmm4, %xmm4
  7575. vpxor %xmm1, %xmm6, %xmm6
  7576. # ghash_gfmul_xor_avx
  7577. vpshufd $0x4e, %xmm10, %xmm1
  7578. vpshufd $0x4e, %xmm5, %xmm2
  7579. vpclmulqdq $0x11, %xmm10, %xmm5, %xmm3
  7580. vpclmulqdq $0x00, %xmm10, %xmm5, %xmm0
  7581. vpxor %xmm10, %xmm1, %xmm1
  7582. vpxor %xmm5, %xmm2, %xmm2
  7583. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7584. vpxor %xmm0, %xmm1, %xmm1
  7585. vpxor %xmm3, %xmm1, %xmm1
  7586. vpxor %xmm0, %xmm4, %xmm4
  7587. vpxor %xmm3, %xmm6, %xmm6
  7588. vpslldq $8, %xmm1, %xmm2
  7589. vpsrldq $8, %xmm1, %xmm1
  7590. vpxor %xmm2, %xmm4, %xmm4
  7591. vpxor %xmm1, %xmm6, %xmm6
  7592. vmovdqu 96(%rsp), %xmm7
  7593. vmovdqu 112(%rsp), %xmm5
  7594. # ghash_gfmul_xor_avx
  7595. vpshufd $0x4e, %xmm9, %xmm1
  7596. vpshufd $0x4e, %xmm7, %xmm2
  7597. vpclmulqdq $0x11, %xmm9, %xmm7, %xmm3
  7598. vpclmulqdq $0x00, %xmm9, %xmm7, %xmm0
  7599. vpxor %xmm9, %xmm1, %xmm1
  7600. vpxor %xmm7, %xmm2, %xmm2
  7601. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7602. vpxor %xmm0, %xmm1, %xmm1
  7603. vpxor %xmm3, %xmm1, %xmm1
  7604. vpxor %xmm0, %xmm4, %xmm4
  7605. vpxor %xmm3, %xmm6, %xmm6
  7606. vpslldq $8, %xmm1, %xmm2
  7607. vpsrldq $8, %xmm1, %xmm1
  7608. vpxor %xmm2, %xmm4, %xmm4
  7609. vpxor %xmm1, %xmm6, %xmm6
  7610. # ghash_gfmul_xor_avx
  7611. vpshufd $0x4e, %xmm8, %xmm1
  7612. vpshufd $0x4e, %xmm5, %xmm2
  7613. vpclmulqdq $0x11, %xmm8, %xmm5, %xmm3
  7614. vpclmulqdq $0x00, %xmm8, %xmm5, %xmm0
  7615. vpxor %xmm8, %xmm1, %xmm1
  7616. vpxor %xmm5, %xmm2, %xmm2
  7617. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  7618. vpxor %xmm0, %xmm1, %xmm1
  7619. vpxor %xmm3, %xmm1, %xmm1
  7620. vpxor %xmm0, %xmm4, %xmm4
  7621. vpxor %xmm3, %xmm6, %xmm6
  7622. vpslldq $8, %xmm1, %xmm2
  7623. vpsrldq $8, %xmm1, %xmm1
  7624. vpxor %xmm2, %xmm4, %xmm4
  7625. vpxor %xmm1, %xmm6, %xmm6
  7626. vpslld $31, %xmm4, %xmm0
  7627. vpslld $30, %xmm4, %xmm1
  7628. vpslld $25, %xmm4, %xmm2
  7629. vpxor %xmm1, %xmm0, %xmm0
  7630. vpxor %xmm2, %xmm0, %xmm0
  7631. vmovdqa %xmm0, %xmm1
  7632. vpsrldq $4, %xmm1, %xmm1
  7633. vpslldq $12, %xmm0, %xmm0
  7634. vpxor %xmm0, %xmm4, %xmm4
  7635. vpsrld $0x01, %xmm4, %xmm2
  7636. vpsrld $2, %xmm4, %xmm3
  7637. vpsrld $7, %xmm4, %xmm0
  7638. vpxor %xmm3, %xmm2, %xmm2
  7639. vpxor %xmm0, %xmm2, %xmm2
  7640. vpxor %xmm1, %xmm2, %xmm2
  7641. vpxor %xmm4, %xmm2, %xmm2
  7642. vpxor %xmm2, %xmm6, %xmm6
  7643. vmovdqu (%rsp), %xmm5
  7644. L_AES_GCM_encrypt_avx1_done_128:
  7645. movl %r9d, %edx
  7646. cmpl %edx, %ebx
  7647. jge L_AES_GCM_encrypt_avx1_done_enc
  7648. movl %r9d, %r13d
  7649. andl $0xfffffff0, %r13d
  7650. cmpl %r13d, %ebx
  7651. jge L_AES_GCM_encrypt_avx1_last_block_done
  7652. vmovdqu 128(%rsp), %xmm9
  7653. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
  7654. vpaddd L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
  7655. vmovdqu %xmm9, 128(%rsp)
  7656. vpxor (%r15), %xmm8, %xmm8
  7657. vaesenc 16(%r15), %xmm8, %xmm8
  7658. vaesenc 32(%r15), %xmm8, %xmm8
  7659. vaesenc 48(%r15), %xmm8, %xmm8
  7660. vaesenc 64(%r15), %xmm8, %xmm8
  7661. vaesenc 80(%r15), %xmm8, %xmm8
  7662. vaesenc 96(%r15), %xmm8, %xmm8
  7663. vaesenc 112(%r15), %xmm8, %xmm8
  7664. vaesenc 128(%r15), %xmm8, %xmm8
  7665. vaesenc 144(%r15), %xmm8, %xmm8
  7666. cmpl $11, %r10d
  7667. vmovdqa 160(%r15), %xmm9
  7668. jl L_AES_GCM_encrypt_avx1_aesenc_block_last
  7669. vaesenc %xmm9, %xmm8, %xmm8
  7670. vaesenc 176(%r15), %xmm8, %xmm8
  7671. cmpl $13, %r10d
  7672. vmovdqa 192(%r15), %xmm9
  7673. jl L_AES_GCM_encrypt_avx1_aesenc_block_last
  7674. vaesenc %xmm9, %xmm8, %xmm8
  7675. vaesenc 208(%r15), %xmm8, %xmm8
  7676. vmovdqa 224(%r15), %xmm9
  7677. L_AES_GCM_encrypt_avx1_aesenc_block_last:
  7678. vaesenclast %xmm9, %xmm8, %xmm8
  7679. vmovdqu (%rdi,%rbx,1), %xmm9
  7680. vpxor %xmm9, %xmm8, %xmm8
  7681. vmovdqu %xmm8, (%rsi,%rbx,1)
  7682. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  7683. vpxor %xmm8, %xmm6, %xmm6
  7684. addl $16, %ebx
  7685. cmpl %r13d, %ebx
  7686. jge L_AES_GCM_encrypt_avx1_last_block_ghash
  7687. L_AES_GCM_encrypt_avx1_last_block_start:
  7688. vmovdqu (%rdi,%rbx,1), %xmm13
  7689. vmovdqu 128(%rsp), %xmm9
  7690. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
  7691. vpaddd L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
  7692. vmovdqu %xmm9, 128(%rsp)
  7693. vpxor (%r15), %xmm8, %xmm8
  7694. vpclmulqdq $16, %xmm5, %xmm6, %xmm10
  7695. vaesenc 16(%r15), %xmm8, %xmm8
  7696. vaesenc 32(%r15), %xmm8, %xmm8
  7697. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm11
  7698. vaesenc 48(%r15), %xmm8, %xmm8
  7699. vaesenc 64(%r15), %xmm8, %xmm8
  7700. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm12
  7701. vaesenc 80(%r15), %xmm8, %xmm8
  7702. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm1
  7703. vaesenc 96(%r15), %xmm8, %xmm8
  7704. vpxor %xmm11, %xmm10, %xmm10
  7705. vpslldq $8, %xmm10, %xmm2
  7706. vpsrldq $8, %xmm10, %xmm10
  7707. vaesenc 112(%r15), %xmm8, %xmm8
  7708. vpxor %xmm12, %xmm2, %xmm2
  7709. vpxor %xmm10, %xmm1, %xmm3
  7710. vmovdqa L_avx1_aes_gcm_mod2_128(%rip), %xmm0
  7711. vpclmulqdq $16, %xmm0, %xmm2, %xmm11
  7712. vaesenc 128(%r15), %xmm8, %xmm8
  7713. vpshufd $0x4e, %xmm2, %xmm10
  7714. vpxor %xmm11, %xmm10, %xmm10
  7715. vpclmulqdq $16, %xmm0, %xmm10, %xmm11
  7716. vaesenc 144(%r15), %xmm8, %xmm8
  7717. vpshufd $0x4e, %xmm10, %xmm10
  7718. vpxor %xmm11, %xmm10, %xmm10
  7719. vpxor %xmm3, %xmm10, %xmm6
  7720. cmpl $11, %r10d
  7721. vmovdqa 160(%r15), %xmm9
  7722. jl L_AES_GCM_encrypt_avx1_aesenc_gfmul_last
  7723. vaesenc %xmm9, %xmm8, %xmm8
  7724. vaesenc 176(%r15), %xmm8, %xmm8
  7725. cmpl $13, %r10d
  7726. vmovdqa 192(%r15), %xmm9
  7727. jl L_AES_GCM_encrypt_avx1_aesenc_gfmul_last
  7728. vaesenc %xmm9, %xmm8, %xmm8
  7729. vaesenc 208(%r15), %xmm8, %xmm8
  7730. vmovdqa 224(%r15), %xmm9
  7731. L_AES_GCM_encrypt_avx1_aesenc_gfmul_last:
  7732. vaesenclast %xmm9, %xmm8, %xmm8
  7733. vmovdqa %xmm13, %xmm0
  7734. vpxor %xmm0, %xmm8, %xmm8
  7735. vmovdqu %xmm8, (%rsi,%rbx,1)
  7736. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  7737. addl $16, %ebx
  7738. vpxor %xmm8, %xmm6, %xmm6
  7739. cmpl %r13d, %ebx
  7740. jl L_AES_GCM_encrypt_avx1_last_block_start
  7741. L_AES_GCM_encrypt_avx1_last_block_ghash:
  7742. # ghash_gfmul_red_avx
  7743. vpshufd $0x4e, %xmm5, %xmm9
  7744. vpshufd $0x4e, %xmm6, %xmm10
  7745. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm11
  7746. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  7747. vpxor %xmm5, %xmm9, %xmm9
  7748. vpxor %xmm6, %xmm10, %xmm10
  7749. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  7750. vpxor %xmm8, %xmm9, %xmm9
  7751. vpxor %xmm11, %xmm9, %xmm9
  7752. vpslldq $8, %xmm9, %xmm10
  7753. vpsrldq $8, %xmm9, %xmm9
  7754. vpxor %xmm10, %xmm8, %xmm8
  7755. vpxor %xmm9, %xmm11, %xmm6
  7756. vpslld $31, %xmm8, %xmm12
  7757. vpslld $30, %xmm8, %xmm13
  7758. vpslld $25, %xmm8, %xmm14
  7759. vpxor %xmm13, %xmm12, %xmm12
  7760. vpxor %xmm14, %xmm12, %xmm12
  7761. vpsrldq $4, %xmm12, %xmm13
  7762. vpslldq $12, %xmm12, %xmm12
  7763. vpxor %xmm12, %xmm8, %xmm8
  7764. vpsrld $0x01, %xmm8, %xmm14
  7765. vpsrld $2, %xmm8, %xmm10
  7766. vpsrld $7, %xmm8, %xmm9
  7767. vpxor %xmm10, %xmm14, %xmm14
  7768. vpxor %xmm9, %xmm14, %xmm14
  7769. vpxor %xmm13, %xmm14, %xmm14
  7770. vpxor %xmm8, %xmm14, %xmm14
  7771. vpxor %xmm14, %xmm6, %xmm6
  7772. L_AES_GCM_encrypt_avx1_last_block_done:
  7773. movl %r9d, %ecx
  7774. movl %ecx, %edx
  7775. andl $15, %ecx
  7776. jz L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_done
  7777. vmovdqu 128(%rsp), %xmm4
  7778. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  7779. vpxor (%r15), %xmm4, %xmm4
  7780. vaesenc 16(%r15), %xmm4, %xmm4
  7781. vaesenc 32(%r15), %xmm4, %xmm4
  7782. vaesenc 48(%r15), %xmm4, %xmm4
  7783. vaesenc 64(%r15), %xmm4, %xmm4
  7784. vaesenc 80(%r15), %xmm4, %xmm4
  7785. vaesenc 96(%r15), %xmm4, %xmm4
  7786. vaesenc 112(%r15), %xmm4, %xmm4
  7787. vaesenc 128(%r15), %xmm4, %xmm4
  7788. vaesenc 144(%r15), %xmm4, %xmm4
  7789. cmpl $11, %r10d
  7790. vmovdqa 160(%r15), %xmm9
  7791. jl L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_aesenc_avx_last
  7792. vaesenc %xmm9, %xmm4, %xmm4
  7793. vaesenc 176(%r15), %xmm4, %xmm4
  7794. cmpl $13, %r10d
  7795. vmovdqa 192(%r15), %xmm9
  7796. jl L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_aesenc_avx_last
  7797. vaesenc %xmm9, %xmm4, %xmm4
  7798. vaesenc 208(%r15), %xmm4, %xmm4
  7799. vmovdqa 224(%r15), %xmm9
  7800. L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_aesenc_avx_last:
  7801. vaesenclast %xmm9, %xmm4, %xmm4
  7802. subq $16, %rsp
  7803. xorl %ecx, %ecx
  7804. vmovdqu %xmm4, (%rsp)
  7805. L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_loop:
  7806. movzbl (%rdi,%rbx,1), %r13d
  7807. xorb (%rsp,%rcx,1), %r13b
  7808. movb %r13b, (%rsi,%rbx,1)
  7809. movb %r13b, (%rsp,%rcx,1)
  7810. incl %ebx
  7811. incl %ecx
  7812. cmpl %edx, %ebx
  7813. jl L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_loop
  7814. xorq %r13, %r13
  7815. cmpl $16, %ecx
  7816. je L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_finish_enc
  7817. L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_byte_loop:
  7818. movb %r13b, (%rsp,%rcx,1)
  7819. incl %ecx
  7820. cmpl $16, %ecx
  7821. jl L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_byte_loop
  7822. L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_finish_enc:
  7823. vmovdqu (%rsp), %xmm4
  7824. addq $16, %rsp
  7825. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  7826. vpxor %xmm4, %xmm6, %xmm6
  7827. # ghash_gfmul_red_avx
  7828. vpshufd $0x4e, %xmm5, %xmm9
  7829. vpshufd $0x4e, %xmm6, %xmm10
  7830. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm11
  7831. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  7832. vpxor %xmm5, %xmm9, %xmm9
  7833. vpxor %xmm6, %xmm10, %xmm10
  7834. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  7835. vpxor %xmm8, %xmm9, %xmm9
  7836. vpxor %xmm11, %xmm9, %xmm9
  7837. vpslldq $8, %xmm9, %xmm10
  7838. vpsrldq $8, %xmm9, %xmm9
  7839. vpxor %xmm10, %xmm8, %xmm8
  7840. vpxor %xmm9, %xmm11, %xmm6
  7841. vpslld $31, %xmm8, %xmm12
  7842. vpslld $30, %xmm8, %xmm13
  7843. vpslld $25, %xmm8, %xmm14
  7844. vpxor %xmm13, %xmm12, %xmm12
  7845. vpxor %xmm14, %xmm12, %xmm12
  7846. vpsrldq $4, %xmm12, %xmm13
  7847. vpslldq $12, %xmm12, %xmm12
  7848. vpxor %xmm12, %xmm8, %xmm8
  7849. vpsrld $0x01, %xmm8, %xmm14
  7850. vpsrld $2, %xmm8, %xmm10
  7851. vpsrld $7, %xmm8, %xmm9
  7852. vpxor %xmm10, %xmm14, %xmm14
  7853. vpxor %xmm9, %xmm14, %xmm14
  7854. vpxor %xmm13, %xmm14, %xmm14
  7855. vpxor %xmm8, %xmm14, %xmm14
  7856. vpxor %xmm14, %xmm6, %xmm6
  7857. L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_done:
  7858. L_AES_GCM_encrypt_avx1_done_enc:
  7859. movl %r9d, %edx
  7860. movl %r11d, %ecx
  7861. shlq $3, %rdx
  7862. shlq $3, %rcx
  7863. vmovq %rdx, %xmm0
  7864. vmovq %rcx, %xmm1
  7865. vpunpcklqdq %xmm1, %xmm0, %xmm0
  7866. vpxor %xmm0, %xmm6, %xmm6
  7867. # ghash_gfmul_red_avx
  7868. vpshufd $0x4e, %xmm5, %xmm9
  7869. vpshufd $0x4e, %xmm6, %xmm10
  7870. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm11
  7871. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  7872. vpxor %xmm5, %xmm9, %xmm9
  7873. vpxor %xmm6, %xmm10, %xmm10
  7874. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  7875. vpxor %xmm8, %xmm9, %xmm9
  7876. vpxor %xmm11, %xmm9, %xmm9
  7877. vpslldq $8, %xmm9, %xmm10
  7878. vpsrldq $8, %xmm9, %xmm9
  7879. vpxor %xmm10, %xmm8, %xmm8
  7880. vpxor %xmm9, %xmm11, %xmm6
  7881. vpslld $31, %xmm8, %xmm12
  7882. vpslld $30, %xmm8, %xmm13
  7883. vpslld $25, %xmm8, %xmm14
  7884. vpxor %xmm13, %xmm12, %xmm12
  7885. vpxor %xmm14, %xmm12, %xmm12
  7886. vpsrldq $4, %xmm12, %xmm13
  7887. vpslldq $12, %xmm12, %xmm12
  7888. vpxor %xmm12, %xmm8, %xmm8
  7889. vpsrld $0x01, %xmm8, %xmm14
  7890. vpsrld $2, %xmm8, %xmm10
  7891. vpsrld $7, %xmm8, %xmm9
  7892. vpxor %xmm10, %xmm14, %xmm14
  7893. vpxor %xmm9, %xmm14, %xmm14
  7894. vpxor %xmm13, %xmm14, %xmm14
  7895. vpxor %xmm8, %xmm14, %xmm14
  7896. vpxor %xmm14, %xmm6, %xmm6
  7897. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm6, %xmm6
  7898. vmovdqu 144(%rsp), %xmm0
  7899. vpxor %xmm6, %xmm0, %xmm0
  7900. cmpl $16, %r14d
  7901. je L_AES_GCM_encrypt_avx1_store_tag_16
  7902. xorq %rcx, %rcx
  7903. vmovdqu %xmm0, (%rsp)
  7904. L_AES_GCM_encrypt_avx1_store_tag_loop:
  7905. movzbl (%rsp,%rcx,1), %r13d
  7906. movb %r13b, (%r8,%rcx,1)
  7907. incl %ecx
  7908. cmpl %r14d, %ecx
  7909. jne L_AES_GCM_encrypt_avx1_store_tag_loop
  7910. jmp L_AES_GCM_encrypt_avx1_store_tag_done
  7911. L_AES_GCM_encrypt_avx1_store_tag_16:
  7912. vmovdqu %xmm0, (%r8)
  7913. L_AES_GCM_encrypt_avx1_store_tag_done:
  7914. vzeroupper
  7915. addq $0xa0, %rsp
  7916. popq %r15
  7917. popq %r14
  7918. popq %rbx
  7919. popq %r12
  7920. popq %r13
  7921. repz retq
  7922. #ifndef __APPLE__
  7923. .size AES_GCM_encrypt_avx1,.-AES_GCM_encrypt_avx1
  7924. #endif /* __APPLE__ */
  7925. #ifndef __APPLE__
  7926. .text
  7927. .globl AES_GCM_decrypt_avx1
  7928. .type AES_GCM_decrypt_avx1,@function
  7929. .align 16
  7930. AES_GCM_decrypt_avx1:
  7931. #else
  7932. .section __TEXT,__text
  7933. .globl _AES_GCM_decrypt_avx1
  7934. .p2align 4
  7935. _AES_GCM_decrypt_avx1:
  7936. #endif /* __APPLE__ */
  7937. pushq %r13
  7938. pushq %r12
  7939. pushq %rbx
  7940. pushq %r14
  7941. pushq %r15
  7942. pushq %rbp
  7943. movq %rdx, %r12
  7944. movq %rcx, %rax
  7945. movl 56(%rsp), %r11d
  7946. movl 64(%rsp), %ebx
  7947. movl 72(%rsp), %r14d
  7948. movq 80(%rsp), %r15
  7949. movl 88(%rsp), %r10d
  7950. movq 96(%rsp), %rbp
  7951. subq $0xa8, %rsp
  7952. vpxor %xmm4, %xmm4, %xmm4
  7953. vpxor %xmm6, %xmm6, %xmm6
  7954. cmpl $12, %ebx
  7955. movl %ebx, %edx
  7956. jne L_AES_GCM_decrypt_avx1_iv_not_12
  7957. # # Calculate values when IV is 12 bytes
  7958. # Set counter based on IV
  7959. movl $0x1000000, %ecx
  7960. vmovq (%rax), %xmm4
  7961. vpinsrd $2, 8(%rax), %xmm4, %xmm4
  7962. vpinsrd $3, %ecx, %xmm4, %xmm4
  7963. # H = Encrypt X(=0) and T = Encrypt counter
  7964. vmovdqa (%r15), %xmm5
  7965. vpxor %xmm5, %xmm4, %xmm1
  7966. vmovdqa 16(%r15), %xmm7
  7967. vaesenc %xmm7, %xmm5, %xmm5
  7968. vaesenc %xmm7, %xmm1, %xmm1
  7969. vmovdqa 32(%r15), %xmm7
  7970. vaesenc %xmm7, %xmm5, %xmm5
  7971. vaesenc %xmm7, %xmm1, %xmm1
  7972. vmovdqa 48(%r15), %xmm7
  7973. vaesenc %xmm7, %xmm5, %xmm5
  7974. vaesenc %xmm7, %xmm1, %xmm1
  7975. vmovdqa 64(%r15), %xmm7
  7976. vaesenc %xmm7, %xmm5, %xmm5
  7977. vaesenc %xmm7, %xmm1, %xmm1
  7978. vmovdqa 80(%r15), %xmm7
  7979. vaesenc %xmm7, %xmm5, %xmm5
  7980. vaesenc %xmm7, %xmm1, %xmm1
  7981. vmovdqa 96(%r15), %xmm7
  7982. vaesenc %xmm7, %xmm5, %xmm5
  7983. vaesenc %xmm7, %xmm1, %xmm1
  7984. vmovdqa 112(%r15), %xmm7
  7985. vaesenc %xmm7, %xmm5, %xmm5
  7986. vaesenc %xmm7, %xmm1, %xmm1
  7987. vmovdqa 128(%r15), %xmm7
  7988. vaesenc %xmm7, %xmm5, %xmm5
  7989. vaesenc %xmm7, %xmm1, %xmm1
  7990. vmovdqa 144(%r15), %xmm7
  7991. vaesenc %xmm7, %xmm5, %xmm5
  7992. vaesenc %xmm7, %xmm1, %xmm1
  7993. cmpl $11, %r10d
  7994. vmovdqa 160(%r15), %xmm7
  7995. jl L_AES_GCM_decrypt_avx1_calc_iv_12_last
  7996. vaesenc %xmm7, %xmm5, %xmm5
  7997. vaesenc %xmm7, %xmm1, %xmm1
  7998. vmovdqa 176(%r15), %xmm7
  7999. vaesenc %xmm7, %xmm5, %xmm5
  8000. vaesenc %xmm7, %xmm1, %xmm1
  8001. cmpl $13, %r10d
  8002. vmovdqa 192(%r15), %xmm7
  8003. jl L_AES_GCM_decrypt_avx1_calc_iv_12_last
  8004. vaesenc %xmm7, %xmm5, %xmm5
  8005. vaesenc %xmm7, %xmm1, %xmm1
  8006. vmovdqa 208(%r15), %xmm7
  8007. vaesenc %xmm7, %xmm5, %xmm5
  8008. vaesenc %xmm7, %xmm1, %xmm1
  8009. vmovdqa 224(%r15), %xmm7
  8010. L_AES_GCM_decrypt_avx1_calc_iv_12_last:
  8011. vaesenclast %xmm7, %xmm5, %xmm5
  8012. vaesenclast %xmm7, %xmm1, %xmm1
  8013. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  8014. vmovdqu %xmm1, 144(%rsp)
  8015. jmp L_AES_GCM_decrypt_avx1_iv_done
  8016. L_AES_GCM_decrypt_avx1_iv_not_12:
  8017. # Calculate values when IV is not 12 bytes
  8018. # H = Encrypt X(=0)
  8019. vmovdqa (%r15), %xmm5
  8020. vaesenc 16(%r15), %xmm5, %xmm5
  8021. vaesenc 32(%r15), %xmm5, %xmm5
  8022. vaesenc 48(%r15), %xmm5, %xmm5
  8023. vaesenc 64(%r15), %xmm5, %xmm5
  8024. vaesenc 80(%r15), %xmm5, %xmm5
  8025. vaesenc 96(%r15), %xmm5, %xmm5
  8026. vaesenc 112(%r15), %xmm5, %xmm5
  8027. vaesenc 128(%r15), %xmm5, %xmm5
  8028. vaesenc 144(%r15), %xmm5, %xmm5
  8029. cmpl $11, %r10d
  8030. vmovdqa 160(%r15), %xmm9
  8031. jl L_AES_GCM_decrypt_avx1_calc_iv_1_aesenc_avx_last
  8032. vaesenc %xmm9, %xmm5, %xmm5
  8033. vaesenc 176(%r15), %xmm5, %xmm5
  8034. cmpl $13, %r10d
  8035. vmovdqa 192(%r15), %xmm9
  8036. jl L_AES_GCM_decrypt_avx1_calc_iv_1_aesenc_avx_last
  8037. vaesenc %xmm9, %xmm5, %xmm5
  8038. vaesenc 208(%r15), %xmm5, %xmm5
  8039. vmovdqa 224(%r15), %xmm9
  8040. L_AES_GCM_decrypt_avx1_calc_iv_1_aesenc_avx_last:
  8041. vaesenclast %xmm9, %xmm5, %xmm5
  8042. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  8043. # Calc counter
  8044. # Initialization vector
  8045. cmpl $0x00, %edx
  8046. movq $0x00, %rcx
  8047. je L_AES_GCM_decrypt_avx1_calc_iv_done
  8048. cmpl $16, %edx
  8049. jl L_AES_GCM_decrypt_avx1_calc_iv_lt16
  8050. andl $0xfffffff0, %edx
  8051. L_AES_GCM_decrypt_avx1_calc_iv_16_loop:
  8052. vmovdqu (%rax,%rcx,1), %xmm8
  8053. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  8054. vpxor %xmm8, %xmm4, %xmm4
  8055. # ghash_gfmul_avx
  8056. vpshufd $0x4e, %xmm4, %xmm1
  8057. vpshufd $0x4e, %xmm5, %xmm2
  8058. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  8059. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  8060. vpxor %xmm4, %xmm1, %xmm1
  8061. vpxor %xmm5, %xmm2, %xmm2
  8062. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  8063. vpxor %xmm0, %xmm1, %xmm1
  8064. vpxor %xmm3, %xmm1, %xmm1
  8065. vmovdqa %xmm0, %xmm7
  8066. vmovdqa %xmm3, %xmm4
  8067. vpslldq $8, %xmm1, %xmm2
  8068. vpsrldq $8, %xmm1, %xmm1
  8069. vpxor %xmm2, %xmm7, %xmm7
  8070. vpxor %xmm1, %xmm4, %xmm4
  8071. vpsrld $31, %xmm7, %xmm0
  8072. vpsrld $31, %xmm4, %xmm1
  8073. vpslld $0x01, %xmm7, %xmm7
  8074. vpslld $0x01, %xmm4, %xmm4
  8075. vpsrldq $12, %xmm0, %xmm2
  8076. vpslldq $4, %xmm0, %xmm0
  8077. vpslldq $4, %xmm1, %xmm1
  8078. vpor %xmm2, %xmm4, %xmm4
  8079. vpor %xmm0, %xmm7, %xmm7
  8080. vpor %xmm1, %xmm4, %xmm4
  8081. vpslld $31, %xmm7, %xmm0
  8082. vpslld $30, %xmm7, %xmm1
  8083. vpslld $25, %xmm7, %xmm2
  8084. vpxor %xmm1, %xmm0, %xmm0
  8085. vpxor %xmm2, %xmm0, %xmm0
  8086. vmovdqa %xmm0, %xmm1
  8087. vpsrldq $4, %xmm1, %xmm1
  8088. vpslldq $12, %xmm0, %xmm0
  8089. vpxor %xmm0, %xmm7, %xmm7
  8090. vpsrld $0x01, %xmm7, %xmm2
  8091. vpsrld $2, %xmm7, %xmm3
  8092. vpsrld $7, %xmm7, %xmm0
  8093. vpxor %xmm3, %xmm2, %xmm2
  8094. vpxor %xmm0, %xmm2, %xmm2
  8095. vpxor %xmm1, %xmm2, %xmm2
  8096. vpxor %xmm7, %xmm2, %xmm2
  8097. vpxor %xmm2, %xmm4, %xmm4
  8098. addl $16, %ecx
  8099. cmpl %edx, %ecx
  8100. jl L_AES_GCM_decrypt_avx1_calc_iv_16_loop
  8101. movl %ebx, %edx
  8102. cmpl %edx, %ecx
  8103. je L_AES_GCM_decrypt_avx1_calc_iv_done
  8104. L_AES_GCM_decrypt_avx1_calc_iv_lt16:
  8105. subq $16, %rsp
  8106. vpxor %xmm8, %xmm8, %xmm8
  8107. xorl %ebx, %ebx
  8108. vmovdqu %xmm8, (%rsp)
  8109. L_AES_GCM_decrypt_avx1_calc_iv_loop:
  8110. movzbl (%rax,%rcx,1), %r13d
  8111. movb %r13b, (%rsp,%rbx,1)
  8112. incl %ecx
  8113. incl %ebx
  8114. cmpl %edx, %ecx
  8115. jl L_AES_GCM_decrypt_avx1_calc_iv_loop
  8116. vmovdqu (%rsp), %xmm8
  8117. addq $16, %rsp
  8118. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  8119. vpxor %xmm8, %xmm4, %xmm4
  8120. # ghash_gfmul_avx
  8121. vpshufd $0x4e, %xmm4, %xmm1
  8122. vpshufd $0x4e, %xmm5, %xmm2
  8123. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  8124. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  8125. vpxor %xmm4, %xmm1, %xmm1
  8126. vpxor %xmm5, %xmm2, %xmm2
  8127. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  8128. vpxor %xmm0, %xmm1, %xmm1
  8129. vpxor %xmm3, %xmm1, %xmm1
  8130. vmovdqa %xmm0, %xmm7
  8131. vmovdqa %xmm3, %xmm4
  8132. vpslldq $8, %xmm1, %xmm2
  8133. vpsrldq $8, %xmm1, %xmm1
  8134. vpxor %xmm2, %xmm7, %xmm7
  8135. vpxor %xmm1, %xmm4, %xmm4
  8136. vpsrld $31, %xmm7, %xmm0
  8137. vpsrld $31, %xmm4, %xmm1
  8138. vpslld $0x01, %xmm7, %xmm7
  8139. vpslld $0x01, %xmm4, %xmm4
  8140. vpsrldq $12, %xmm0, %xmm2
  8141. vpslldq $4, %xmm0, %xmm0
  8142. vpslldq $4, %xmm1, %xmm1
  8143. vpor %xmm2, %xmm4, %xmm4
  8144. vpor %xmm0, %xmm7, %xmm7
  8145. vpor %xmm1, %xmm4, %xmm4
  8146. vpslld $31, %xmm7, %xmm0
  8147. vpslld $30, %xmm7, %xmm1
  8148. vpslld $25, %xmm7, %xmm2
  8149. vpxor %xmm1, %xmm0, %xmm0
  8150. vpxor %xmm2, %xmm0, %xmm0
  8151. vmovdqa %xmm0, %xmm1
  8152. vpsrldq $4, %xmm1, %xmm1
  8153. vpslldq $12, %xmm0, %xmm0
  8154. vpxor %xmm0, %xmm7, %xmm7
  8155. vpsrld $0x01, %xmm7, %xmm2
  8156. vpsrld $2, %xmm7, %xmm3
  8157. vpsrld $7, %xmm7, %xmm0
  8158. vpxor %xmm3, %xmm2, %xmm2
  8159. vpxor %xmm0, %xmm2, %xmm2
  8160. vpxor %xmm1, %xmm2, %xmm2
  8161. vpxor %xmm7, %xmm2, %xmm2
  8162. vpxor %xmm2, %xmm4, %xmm4
  8163. L_AES_GCM_decrypt_avx1_calc_iv_done:
  8164. # T = Encrypt counter
  8165. vpxor %xmm0, %xmm0, %xmm0
  8166. shll $3, %edx
  8167. vmovq %rdx, %xmm0
  8168. vpxor %xmm0, %xmm4, %xmm4
  8169. # ghash_gfmul_avx
  8170. vpshufd $0x4e, %xmm4, %xmm1
  8171. vpshufd $0x4e, %xmm5, %xmm2
  8172. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  8173. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  8174. vpxor %xmm4, %xmm1, %xmm1
  8175. vpxor %xmm5, %xmm2, %xmm2
  8176. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  8177. vpxor %xmm0, %xmm1, %xmm1
  8178. vpxor %xmm3, %xmm1, %xmm1
  8179. vmovdqa %xmm0, %xmm7
  8180. vmovdqa %xmm3, %xmm4
  8181. vpslldq $8, %xmm1, %xmm2
  8182. vpsrldq $8, %xmm1, %xmm1
  8183. vpxor %xmm2, %xmm7, %xmm7
  8184. vpxor %xmm1, %xmm4, %xmm4
  8185. vpsrld $31, %xmm7, %xmm0
  8186. vpsrld $31, %xmm4, %xmm1
  8187. vpslld $0x01, %xmm7, %xmm7
  8188. vpslld $0x01, %xmm4, %xmm4
  8189. vpsrldq $12, %xmm0, %xmm2
  8190. vpslldq $4, %xmm0, %xmm0
  8191. vpslldq $4, %xmm1, %xmm1
  8192. vpor %xmm2, %xmm4, %xmm4
  8193. vpor %xmm0, %xmm7, %xmm7
  8194. vpor %xmm1, %xmm4, %xmm4
  8195. vpslld $31, %xmm7, %xmm0
  8196. vpslld $30, %xmm7, %xmm1
  8197. vpslld $25, %xmm7, %xmm2
  8198. vpxor %xmm1, %xmm0, %xmm0
  8199. vpxor %xmm2, %xmm0, %xmm0
  8200. vmovdqa %xmm0, %xmm1
  8201. vpsrldq $4, %xmm1, %xmm1
  8202. vpslldq $12, %xmm0, %xmm0
  8203. vpxor %xmm0, %xmm7, %xmm7
  8204. vpsrld $0x01, %xmm7, %xmm2
  8205. vpsrld $2, %xmm7, %xmm3
  8206. vpsrld $7, %xmm7, %xmm0
  8207. vpxor %xmm3, %xmm2, %xmm2
  8208. vpxor %xmm0, %xmm2, %xmm2
  8209. vpxor %xmm1, %xmm2, %xmm2
  8210. vpxor %xmm7, %xmm2, %xmm2
  8211. vpxor %xmm2, %xmm4, %xmm4
  8212. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  8213. # Encrypt counter
  8214. vmovdqa (%r15), %xmm8
  8215. vpxor %xmm4, %xmm8, %xmm8
  8216. vaesenc 16(%r15), %xmm8, %xmm8
  8217. vaesenc 32(%r15), %xmm8, %xmm8
  8218. vaesenc 48(%r15), %xmm8, %xmm8
  8219. vaesenc 64(%r15), %xmm8, %xmm8
  8220. vaesenc 80(%r15), %xmm8, %xmm8
  8221. vaesenc 96(%r15), %xmm8, %xmm8
  8222. vaesenc 112(%r15), %xmm8, %xmm8
  8223. vaesenc 128(%r15), %xmm8, %xmm8
  8224. vaesenc 144(%r15), %xmm8, %xmm8
  8225. cmpl $11, %r10d
  8226. vmovdqa 160(%r15), %xmm9
  8227. jl L_AES_GCM_decrypt_avx1_calc_iv_2_aesenc_avx_last
  8228. vaesenc %xmm9, %xmm8, %xmm8
  8229. vaesenc 176(%r15), %xmm8, %xmm8
  8230. cmpl $13, %r10d
  8231. vmovdqa 192(%r15), %xmm9
  8232. jl L_AES_GCM_decrypt_avx1_calc_iv_2_aesenc_avx_last
  8233. vaesenc %xmm9, %xmm8, %xmm8
  8234. vaesenc 208(%r15), %xmm8, %xmm8
  8235. vmovdqa 224(%r15), %xmm9
  8236. L_AES_GCM_decrypt_avx1_calc_iv_2_aesenc_avx_last:
  8237. vaesenclast %xmm9, %xmm8, %xmm8
  8238. vmovdqu %xmm8, 144(%rsp)
  8239. L_AES_GCM_decrypt_avx1_iv_done:
  8240. # Additional authentication data
  8241. movl %r11d, %edx
  8242. cmpl $0x00, %edx
  8243. je L_AES_GCM_decrypt_avx1_calc_aad_done
  8244. xorl %ecx, %ecx
  8245. cmpl $16, %edx
  8246. jl L_AES_GCM_decrypt_avx1_calc_aad_lt16
  8247. andl $0xfffffff0, %edx
  8248. L_AES_GCM_decrypt_avx1_calc_aad_16_loop:
  8249. vmovdqu (%r12,%rcx,1), %xmm8
  8250. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  8251. vpxor %xmm8, %xmm6, %xmm6
  8252. # ghash_gfmul_avx
  8253. vpshufd $0x4e, %xmm6, %xmm1
  8254. vpshufd $0x4e, %xmm5, %xmm2
  8255. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  8256. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  8257. vpxor %xmm6, %xmm1, %xmm1
  8258. vpxor %xmm5, %xmm2, %xmm2
  8259. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  8260. vpxor %xmm0, %xmm1, %xmm1
  8261. vpxor %xmm3, %xmm1, %xmm1
  8262. vmovdqa %xmm0, %xmm7
  8263. vmovdqa %xmm3, %xmm6
  8264. vpslldq $8, %xmm1, %xmm2
  8265. vpsrldq $8, %xmm1, %xmm1
  8266. vpxor %xmm2, %xmm7, %xmm7
  8267. vpxor %xmm1, %xmm6, %xmm6
  8268. vpsrld $31, %xmm7, %xmm0
  8269. vpsrld $31, %xmm6, %xmm1
  8270. vpslld $0x01, %xmm7, %xmm7
  8271. vpslld $0x01, %xmm6, %xmm6
  8272. vpsrldq $12, %xmm0, %xmm2
  8273. vpslldq $4, %xmm0, %xmm0
  8274. vpslldq $4, %xmm1, %xmm1
  8275. vpor %xmm2, %xmm6, %xmm6
  8276. vpor %xmm0, %xmm7, %xmm7
  8277. vpor %xmm1, %xmm6, %xmm6
  8278. vpslld $31, %xmm7, %xmm0
  8279. vpslld $30, %xmm7, %xmm1
  8280. vpslld $25, %xmm7, %xmm2
  8281. vpxor %xmm1, %xmm0, %xmm0
  8282. vpxor %xmm2, %xmm0, %xmm0
  8283. vmovdqa %xmm0, %xmm1
  8284. vpsrldq $4, %xmm1, %xmm1
  8285. vpslldq $12, %xmm0, %xmm0
  8286. vpxor %xmm0, %xmm7, %xmm7
  8287. vpsrld $0x01, %xmm7, %xmm2
  8288. vpsrld $2, %xmm7, %xmm3
  8289. vpsrld $7, %xmm7, %xmm0
  8290. vpxor %xmm3, %xmm2, %xmm2
  8291. vpxor %xmm0, %xmm2, %xmm2
  8292. vpxor %xmm1, %xmm2, %xmm2
  8293. vpxor %xmm7, %xmm2, %xmm2
  8294. vpxor %xmm2, %xmm6, %xmm6
  8295. addl $16, %ecx
  8296. cmpl %edx, %ecx
  8297. jl L_AES_GCM_decrypt_avx1_calc_aad_16_loop
  8298. movl %r11d, %edx
  8299. cmpl %edx, %ecx
  8300. je L_AES_GCM_decrypt_avx1_calc_aad_done
  8301. L_AES_GCM_decrypt_avx1_calc_aad_lt16:
  8302. subq $16, %rsp
  8303. vpxor %xmm8, %xmm8, %xmm8
  8304. xorl %ebx, %ebx
  8305. vmovdqu %xmm8, (%rsp)
  8306. L_AES_GCM_decrypt_avx1_calc_aad_loop:
  8307. movzbl (%r12,%rcx,1), %r13d
  8308. movb %r13b, (%rsp,%rbx,1)
  8309. incl %ecx
  8310. incl %ebx
  8311. cmpl %edx, %ecx
  8312. jl L_AES_GCM_decrypt_avx1_calc_aad_loop
  8313. vmovdqu (%rsp), %xmm8
  8314. addq $16, %rsp
  8315. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  8316. vpxor %xmm8, %xmm6, %xmm6
  8317. # ghash_gfmul_avx
  8318. vpshufd $0x4e, %xmm6, %xmm1
  8319. vpshufd $0x4e, %xmm5, %xmm2
  8320. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  8321. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  8322. vpxor %xmm6, %xmm1, %xmm1
  8323. vpxor %xmm5, %xmm2, %xmm2
  8324. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  8325. vpxor %xmm0, %xmm1, %xmm1
  8326. vpxor %xmm3, %xmm1, %xmm1
  8327. vmovdqa %xmm0, %xmm7
  8328. vmovdqa %xmm3, %xmm6
  8329. vpslldq $8, %xmm1, %xmm2
  8330. vpsrldq $8, %xmm1, %xmm1
  8331. vpxor %xmm2, %xmm7, %xmm7
  8332. vpxor %xmm1, %xmm6, %xmm6
  8333. vpsrld $31, %xmm7, %xmm0
  8334. vpsrld $31, %xmm6, %xmm1
  8335. vpslld $0x01, %xmm7, %xmm7
  8336. vpslld $0x01, %xmm6, %xmm6
  8337. vpsrldq $12, %xmm0, %xmm2
  8338. vpslldq $4, %xmm0, %xmm0
  8339. vpslldq $4, %xmm1, %xmm1
  8340. vpor %xmm2, %xmm6, %xmm6
  8341. vpor %xmm0, %xmm7, %xmm7
  8342. vpor %xmm1, %xmm6, %xmm6
  8343. vpslld $31, %xmm7, %xmm0
  8344. vpslld $30, %xmm7, %xmm1
  8345. vpslld $25, %xmm7, %xmm2
  8346. vpxor %xmm1, %xmm0, %xmm0
  8347. vpxor %xmm2, %xmm0, %xmm0
  8348. vmovdqa %xmm0, %xmm1
  8349. vpsrldq $4, %xmm1, %xmm1
  8350. vpslldq $12, %xmm0, %xmm0
  8351. vpxor %xmm0, %xmm7, %xmm7
  8352. vpsrld $0x01, %xmm7, %xmm2
  8353. vpsrld $2, %xmm7, %xmm3
  8354. vpsrld $7, %xmm7, %xmm0
  8355. vpxor %xmm3, %xmm2, %xmm2
  8356. vpxor %xmm0, %xmm2, %xmm2
  8357. vpxor %xmm1, %xmm2, %xmm2
  8358. vpxor %xmm7, %xmm2, %xmm2
  8359. vpxor %xmm2, %xmm6, %xmm6
  8360. L_AES_GCM_decrypt_avx1_calc_aad_done:
  8361. # Calculate counter and H
  8362. vpsrlq $63, %xmm5, %xmm9
  8363. vpsllq $0x01, %xmm5, %xmm8
  8364. vpslldq $8, %xmm9, %xmm9
  8365. vpor %xmm9, %xmm8, %xmm8
  8366. vpshufd $0xff, %xmm5, %xmm5
  8367. vpsrad $31, %xmm5, %xmm5
  8368. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  8369. vpand L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  8370. vpaddd L_avx1_aes_gcm_one(%rip), %xmm4, %xmm4
  8371. vpxor %xmm8, %xmm5, %xmm5
  8372. vmovdqu %xmm4, 128(%rsp)
  8373. xorl %ebx, %ebx
  8374. cmpl $0x80, %r9d
  8375. movl %r9d, %r13d
  8376. jl L_AES_GCM_decrypt_avx1_done_128
  8377. andl $0xffffff80, %r13d
  8378. vmovdqa %xmm6, %xmm2
  8379. # H ^ 1
  8380. vmovdqu %xmm5, (%rsp)
  8381. # H ^ 2
  8382. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm8
  8383. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm0
  8384. vpslld $31, %xmm8, %xmm12
  8385. vpslld $30, %xmm8, %xmm13
  8386. vpslld $25, %xmm8, %xmm14
  8387. vpxor %xmm13, %xmm12, %xmm12
  8388. vpxor %xmm14, %xmm12, %xmm12
  8389. vpsrldq $4, %xmm12, %xmm13
  8390. vpslldq $12, %xmm12, %xmm12
  8391. vpxor %xmm12, %xmm8, %xmm8
  8392. vpsrld $0x01, %xmm8, %xmm14
  8393. vpsrld $2, %xmm8, %xmm10
  8394. vpsrld $7, %xmm8, %xmm9
  8395. vpxor %xmm10, %xmm14, %xmm14
  8396. vpxor %xmm9, %xmm14, %xmm14
  8397. vpxor %xmm13, %xmm14, %xmm14
  8398. vpxor %xmm8, %xmm14, %xmm14
  8399. vpxor %xmm14, %xmm0, %xmm0
  8400. vmovdqu %xmm0, 16(%rsp)
  8401. # H ^ 3
  8402. # ghash_gfmul_red_avx
  8403. vpshufd $0x4e, %xmm5, %xmm9
  8404. vpshufd $0x4e, %xmm0, %xmm10
  8405. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm11
  8406. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm8
  8407. vpxor %xmm5, %xmm9, %xmm9
  8408. vpxor %xmm0, %xmm10, %xmm10
  8409. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  8410. vpxor %xmm8, %xmm9, %xmm9
  8411. vpxor %xmm11, %xmm9, %xmm9
  8412. vpslldq $8, %xmm9, %xmm10
  8413. vpsrldq $8, %xmm9, %xmm9
  8414. vpxor %xmm10, %xmm8, %xmm8
  8415. vpxor %xmm9, %xmm11, %xmm1
  8416. vpslld $31, %xmm8, %xmm12
  8417. vpslld $30, %xmm8, %xmm13
  8418. vpslld $25, %xmm8, %xmm14
  8419. vpxor %xmm13, %xmm12, %xmm12
  8420. vpxor %xmm14, %xmm12, %xmm12
  8421. vpsrldq $4, %xmm12, %xmm13
  8422. vpslldq $12, %xmm12, %xmm12
  8423. vpxor %xmm12, %xmm8, %xmm8
  8424. vpsrld $0x01, %xmm8, %xmm14
  8425. vpsrld $2, %xmm8, %xmm10
  8426. vpsrld $7, %xmm8, %xmm9
  8427. vpxor %xmm10, %xmm14, %xmm14
  8428. vpxor %xmm9, %xmm14, %xmm14
  8429. vpxor %xmm13, %xmm14, %xmm14
  8430. vpxor %xmm8, %xmm14, %xmm14
  8431. vpxor %xmm14, %xmm1, %xmm1
  8432. vmovdqu %xmm1, 32(%rsp)
  8433. # H ^ 4
  8434. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm8
  8435. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm3
  8436. vpslld $31, %xmm8, %xmm12
  8437. vpslld $30, %xmm8, %xmm13
  8438. vpslld $25, %xmm8, %xmm14
  8439. vpxor %xmm13, %xmm12, %xmm12
  8440. vpxor %xmm14, %xmm12, %xmm12
  8441. vpsrldq $4, %xmm12, %xmm13
  8442. vpslldq $12, %xmm12, %xmm12
  8443. vpxor %xmm12, %xmm8, %xmm8
  8444. vpsrld $0x01, %xmm8, %xmm14
  8445. vpsrld $2, %xmm8, %xmm10
  8446. vpsrld $7, %xmm8, %xmm9
  8447. vpxor %xmm10, %xmm14, %xmm14
  8448. vpxor %xmm9, %xmm14, %xmm14
  8449. vpxor %xmm13, %xmm14, %xmm14
  8450. vpxor %xmm8, %xmm14, %xmm14
  8451. vpxor %xmm14, %xmm3, %xmm3
  8452. vmovdqu %xmm3, 48(%rsp)
  8453. # H ^ 5
  8454. # ghash_gfmul_red_avx
  8455. vpshufd $0x4e, %xmm0, %xmm9
  8456. vpshufd $0x4e, %xmm1, %xmm10
  8457. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm11
  8458. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm8
  8459. vpxor %xmm0, %xmm9, %xmm9
  8460. vpxor %xmm1, %xmm10, %xmm10
  8461. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  8462. vpxor %xmm8, %xmm9, %xmm9
  8463. vpxor %xmm11, %xmm9, %xmm9
  8464. vpslldq $8, %xmm9, %xmm10
  8465. vpsrldq $8, %xmm9, %xmm9
  8466. vpxor %xmm10, %xmm8, %xmm8
  8467. vpxor %xmm9, %xmm11, %xmm7
  8468. vpslld $31, %xmm8, %xmm12
  8469. vpslld $30, %xmm8, %xmm13
  8470. vpslld $25, %xmm8, %xmm14
  8471. vpxor %xmm13, %xmm12, %xmm12
  8472. vpxor %xmm14, %xmm12, %xmm12
  8473. vpsrldq $4, %xmm12, %xmm13
  8474. vpslldq $12, %xmm12, %xmm12
  8475. vpxor %xmm12, %xmm8, %xmm8
  8476. vpsrld $0x01, %xmm8, %xmm14
  8477. vpsrld $2, %xmm8, %xmm10
  8478. vpsrld $7, %xmm8, %xmm9
  8479. vpxor %xmm10, %xmm14, %xmm14
  8480. vpxor %xmm9, %xmm14, %xmm14
  8481. vpxor %xmm13, %xmm14, %xmm14
  8482. vpxor %xmm8, %xmm14, %xmm14
  8483. vpxor %xmm14, %xmm7, %xmm7
  8484. vmovdqu %xmm7, 64(%rsp)
  8485. # H ^ 6
  8486. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm8
  8487. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm7
  8488. vpslld $31, %xmm8, %xmm12
  8489. vpslld $30, %xmm8, %xmm13
  8490. vpslld $25, %xmm8, %xmm14
  8491. vpxor %xmm13, %xmm12, %xmm12
  8492. vpxor %xmm14, %xmm12, %xmm12
  8493. vpsrldq $4, %xmm12, %xmm13
  8494. vpslldq $12, %xmm12, %xmm12
  8495. vpxor %xmm12, %xmm8, %xmm8
  8496. vpsrld $0x01, %xmm8, %xmm14
  8497. vpsrld $2, %xmm8, %xmm10
  8498. vpsrld $7, %xmm8, %xmm9
  8499. vpxor %xmm10, %xmm14, %xmm14
  8500. vpxor %xmm9, %xmm14, %xmm14
  8501. vpxor %xmm13, %xmm14, %xmm14
  8502. vpxor %xmm8, %xmm14, %xmm14
  8503. vpxor %xmm14, %xmm7, %xmm7
  8504. vmovdqu %xmm7, 80(%rsp)
  8505. # H ^ 7
  8506. # ghash_gfmul_red_avx
  8507. vpshufd $0x4e, %xmm1, %xmm9
  8508. vpshufd $0x4e, %xmm3, %xmm10
  8509. vpclmulqdq $0x11, %xmm1, %xmm3, %xmm11
  8510. vpclmulqdq $0x00, %xmm1, %xmm3, %xmm8
  8511. vpxor %xmm1, %xmm9, %xmm9
  8512. vpxor %xmm3, %xmm10, %xmm10
  8513. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  8514. vpxor %xmm8, %xmm9, %xmm9
  8515. vpxor %xmm11, %xmm9, %xmm9
  8516. vpslldq $8, %xmm9, %xmm10
  8517. vpsrldq $8, %xmm9, %xmm9
  8518. vpxor %xmm10, %xmm8, %xmm8
  8519. vpxor %xmm9, %xmm11, %xmm7
  8520. vpslld $31, %xmm8, %xmm12
  8521. vpslld $30, %xmm8, %xmm13
  8522. vpslld $25, %xmm8, %xmm14
  8523. vpxor %xmm13, %xmm12, %xmm12
  8524. vpxor %xmm14, %xmm12, %xmm12
  8525. vpsrldq $4, %xmm12, %xmm13
  8526. vpslldq $12, %xmm12, %xmm12
  8527. vpxor %xmm12, %xmm8, %xmm8
  8528. vpsrld $0x01, %xmm8, %xmm14
  8529. vpsrld $2, %xmm8, %xmm10
  8530. vpsrld $7, %xmm8, %xmm9
  8531. vpxor %xmm10, %xmm14, %xmm14
  8532. vpxor %xmm9, %xmm14, %xmm14
  8533. vpxor %xmm13, %xmm14, %xmm14
  8534. vpxor %xmm8, %xmm14, %xmm14
  8535. vpxor %xmm14, %xmm7, %xmm7
  8536. vmovdqu %xmm7, 96(%rsp)
  8537. # H ^ 8
  8538. vpclmulqdq $0x00, %xmm3, %xmm3, %xmm8
  8539. vpclmulqdq $0x11, %xmm3, %xmm3, %xmm7
  8540. vpslld $31, %xmm8, %xmm12
  8541. vpslld $30, %xmm8, %xmm13
  8542. vpslld $25, %xmm8, %xmm14
  8543. vpxor %xmm13, %xmm12, %xmm12
  8544. vpxor %xmm14, %xmm12, %xmm12
  8545. vpsrldq $4, %xmm12, %xmm13
  8546. vpslldq $12, %xmm12, %xmm12
  8547. vpxor %xmm12, %xmm8, %xmm8
  8548. vpsrld $0x01, %xmm8, %xmm14
  8549. vpsrld $2, %xmm8, %xmm10
  8550. vpsrld $7, %xmm8, %xmm9
  8551. vpxor %xmm10, %xmm14, %xmm14
  8552. vpxor %xmm9, %xmm14, %xmm14
  8553. vpxor %xmm13, %xmm14, %xmm14
  8554. vpxor %xmm8, %xmm14, %xmm14
  8555. vpxor %xmm14, %xmm7, %xmm7
  8556. vmovdqu %xmm7, 112(%rsp)
  8557. L_AES_GCM_decrypt_avx1_ghash_128:
  8558. leaq (%rdi,%rbx,1), %rcx
  8559. leaq (%rsi,%rbx,1), %rdx
  8560. vmovdqu 128(%rsp), %xmm0
  8561. vmovdqa L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
  8562. vpshufb %xmm1, %xmm0, %xmm8
  8563. vpaddd L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
  8564. vpshufb %xmm1, %xmm9, %xmm9
  8565. vpaddd L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
  8566. vpshufb %xmm1, %xmm10, %xmm10
  8567. vpaddd L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
  8568. vpshufb %xmm1, %xmm11, %xmm11
  8569. vpaddd L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
  8570. vpshufb %xmm1, %xmm12, %xmm12
  8571. vpaddd L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
  8572. vpshufb %xmm1, %xmm13, %xmm13
  8573. vpaddd L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
  8574. vpshufb %xmm1, %xmm14, %xmm14
  8575. vpaddd L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
  8576. vpshufb %xmm1, %xmm15, %xmm15
  8577. vpaddd L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
  8578. vmovdqa (%r15), %xmm7
  8579. vmovdqu %xmm0, 128(%rsp)
  8580. vpxor %xmm7, %xmm8, %xmm8
  8581. vpxor %xmm7, %xmm9, %xmm9
  8582. vpxor %xmm7, %xmm10, %xmm10
  8583. vpxor %xmm7, %xmm11, %xmm11
  8584. vpxor %xmm7, %xmm12, %xmm12
  8585. vpxor %xmm7, %xmm13, %xmm13
  8586. vpxor %xmm7, %xmm14, %xmm14
  8587. vpxor %xmm7, %xmm15, %xmm15
  8588. vmovdqu 112(%rsp), %xmm7
  8589. vmovdqu (%rcx), %xmm0
  8590. vaesenc 16(%r15), %xmm8, %xmm8
  8591. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8592. vpxor %xmm2, %xmm0, %xmm0
  8593. vpshufd $0x4e, %xmm7, %xmm1
  8594. vpshufd $0x4e, %xmm0, %xmm5
  8595. vpxor %xmm7, %xmm1, %xmm1
  8596. vpxor %xmm0, %xmm5, %xmm5
  8597. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm3
  8598. vaesenc 16(%r15), %xmm9, %xmm9
  8599. vaesenc 16(%r15), %xmm10, %xmm10
  8600. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm2
  8601. vaesenc 16(%r15), %xmm11, %xmm11
  8602. vaesenc 16(%r15), %xmm12, %xmm12
  8603. vpclmulqdq $0x00, %xmm5, %xmm1, %xmm1
  8604. vaesenc 16(%r15), %xmm13, %xmm13
  8605. vaesenc 16(%r15), %xmm14, %xmm14
  8606. vaesenc 16(%r15), %xmm15, %xmm15
  8607. vpxor %xmm2, %xmm1, %xmm1
  8608. vpxor %xmm3, %xmm1, %xmm1
  8609. vmovdqu 96(%rsp), %xmm7
  8610. vmovdqu 16(%rcx), %xmm0
  8611. vpshufd $0x4e, %xmm7, %xmm4
  8612. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8613. vaesenc 32(%r15), %xmm8, %xmm8
  8614. vpxor %xmm7, %xmm4, %xmm4
  8615. vpshufd $0x4e, %xmm0, %xmm5
  8616. vpxor %xmm0, %xmm5, %xmm5
  8617. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8618. vaesenc 32(%r15), %xmm9, %xmm9
  8619. vaesenc 32(%r15), %xmm10, %xmm10
  8620. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8621. vaesenc 32(%r15), %xmm11, %xmm11
  8622. vaesenc 32(%r15), %xmm12, %xmm12
  8623. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8624. vaesenc 32(%r15), %xmm13, %xmm13
  8625. vaesenc 32(%r15), %xmm14, %xmm14
  8626. vaesenc 32(%r15), %xmm15, %xmm15
  8627. vpxor %xmm7, %xmm1, %xmm1
  8628. vpxor %xmm7, %xmm2, %xmm2
  8629. vpxor %xmm6, %xmm1, %xmm1
  8630. vpxor %xmm6, %xmm3, %xmm3
  8631. vpxor %xmm4, %xmm1, %xmm1
  8632. vmovdqu 80(%rsp), %xmm7
  8633. vmovdqu 32(%rcx), %xmm0
  8634. vpshufd $0x4e, %xmm7, %xmm4
  8635. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8636. vaesenc 48(%r15), %xmm8, %xmm8
  8637. vpxor %xmm7, %xmm4, %xmm4
  8638. vpshufd $0x4e, %xmm0, %xmm5
  8639. vpxor %xmm0, %xmm5, %xmm5
  8640. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8641. vaesenc 48(%r15), %xmm9, %xmm9
  8642. vaesenc 48(%r15), %xmm10, %xmm10
  8643. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8644. vaesenc 48(%r15), %xmm11, %xmm11
  8645. vaesenc 48(%r15), %xmm12, %xmm12
  8646. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8647. vaesenc 48(%r15), %xmm13, %xmm13
  8648. vaesenc 48(%r15), %xmm14, %xmm14
  8649. vaesenc 48(%r15), %xmm15, %xmm15
  8650. vpxor %xmm7, %xmm1, %xmm1
  8651. vpxor %xmm7, %xmm2, %xmm2
  8652. vpxor %xmm6, %xmm1, %xmm1
  8653. vpxor %xmm6, %xmm3, %xmm3
  8654. vpxor %xmm4, %xmm1, %xmm1
  8655. vmovdqu 64(%rsp), %xmm7
  8656. vmovdqu 48(%rcx), %xmm0
  8657. vpshufd $0x4e, %xmm7, %xmm4
  8658. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8659. vaesenc 64(%r15), %xmm8, %xmm8
  8660. vpxor %xmm7, %xmm4, %xmm4
  8661. vpshufd $0x4e, %xmm0, %xmm5
  8662. vpxor %xmm0, %xmm5, %xmm5
  8663. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8664. vaesenc 64(%r15), %xmm9, %xmm9
  8665. vaesenc 64(%r15), %xmm10, %xmm10
  8666. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8667. vaesenc 64(%r15), %xmm11, %xmm11
  8668. vaesenc 64(%r15), %xmm12, %xmm12
  8669. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8670. vaesenc 64(%r15), %xmm13, %xmm13
  8671. vaesenc 64(%r15), %xmm14, %xmm14
  8672. vaesenc 64(%r15), %xmm15, %xmm15
  8673. vpxor %xmm7, %xmm1, %xmm1
  8674. vpxor %xmm7, %xmm2, %xmm2
  8675. vpxor %xmm6, %xmm1, %xmm1
  8676. vpxor %xmm6, %xmm3, %xmm3
  8677. vpxor %xmm4, %xmm1, %xmm1
  8678. vmovdqu 48(%rsp), %xmm7
  8679. vmovdqu 64(%rcx), %xmm0
  8680. vpshufd $0x4e, %xmm7, %xmm4
  8681. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8682. vaesenc 80(%r15), %xmm8, %xmm8
  8683. vpxor %xmm7, %xmm4, %xmm4
  8684. vpshufd $0x4e, %xmm0, %xmm5
  8685. vpxor %xmm0, %xmm5, %xmm5
  8686. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8687. vaesenc 80(%r15), %xmm9, %xmm9
  8688. vaesenc 80(%r15), %xmm10, %xmm10
  8689. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8690. vaesenc 80(%r15), %xmm11, %xmm11
  8691. vaesenc 80(%r15), %xmm12, %xmm12
  8692. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8693. vaesenc 80(%r15), %xmm13, %xmm13
  8694. vaesenc 80(%r15), %xmm14, %xmm14
  8695. vaesenc 80(%r15), %xmm15, %xmm15
  8696. vpxor %xmm7, %xmm1, %xmm1
  8697. vpxor %xmm7, %xmm2, %xmm2
  8698. vpxor %xmm6, %xmm1, %xmm1
  8699. vpxor %xmm6, %xmm3, %xmm3
  8700. vpxor %xmm4, %xmm1, %xmm1
  8701. vmovdqu 32(%rsp), %xmm7
  8702. vmovdqu 80(%rcx), %xmm0
  8703. vpshufd $0x4e, %xmm7, %xmm4
  8704. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8705. vaesenc 96(%r15), %xmm8, %xmm8
  8706. vpxor %xmm7, %xmm4, %xmm4
  8707. vpshufd $0x4e, %xmm0, %xmm5
  8708. vpxor %xmm0, %xmm5, %xmm5
  8709. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8710. vaesenc 96(%r15), %xmm9, %xmm9
  8711. vaesenc 96(%r15), %xmm10, %xmm10
  8712. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8713. vaesenc 96(%r15), %xmm11, %xmm11
  8714. vaesenc 96(%r15), %xmm12, %xmm12
  8715. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8716. vaesenc 96(%r15), %xmm13, %xmm13
  8717. vaesenc 96(%r15), %xmm14, %xmm14
  8718. vaesenc 96(%r15), %xmm15, %xmm15
  8719. vpxor %xmm7, %xmm1, %xmm1
  8720. vpxor %xmm7, %xmm2, %xmm2
  8721. vpxor %xmm6, %xmm1, %xmm1
  8722. vpxor %xmm6, %xmm3, %xmm3
  8723. vpxor %xmm4, %xmm1, %xmm1
  8724. vmovdqu 16(%rsp), %xmm7
  8725. vmovdqu 96(%rcx), %xmm0
  8726. vpshufd $0x4e, %xmm7, %xmm4
  8727. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8728. vaesenc 112(%r15), %xmm8, %xmm8
  8729. vpxor %xmm7, %xmm4, %xmm4
  8730. vpshufd $0x4e, %xmm0, %xmm5
  8731. vpxor %xmm0, %xmm5, %xmm5
  8732. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8733. vaesenc 112(%r15), %xmm9, %xmm9
  8734. vaesenc 112(%r15), %xmm10, %xmm10
  8735. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8736. vaesenc 112(%r15), %xmm11, %xmm11
  8737. vaesenc 112(%r15), %xmm12, %xmm12
  8738. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8739. vaesenc 112(%r15), %xmm13, %xmm13
  8740. vaesenc 112(%r15), %xmm14, %xmm14
  8741. vaesenc 112(%r15), %xmm15, %xmm15
  8742. vpxor %xmm7, %xmm1, %xmm1
  8743. vpxor %xmm7, %xmm2, %xmm2
  8744. vpxor %xmm6, %xmm1, %xmm1
  8745. vpxor %xmm6, %xmm3, %xmm3
  8746. vpxor %xmm4, %xmm1, %xmm1
  8747. vmovdqu (%rsp), %xmm7
  8748. vmovdqu 112(%rcx), %xmm0
  8749. vpshufd $0x4e, %xmm7, %xmm4
  8750. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  8751. vaesenc 128(%r15), %xmm8, %xmm8
  8752. vpxor %xmm7, %xmm4, %xmm4
  8753. vpshufd $0x4e, %xmm0, %xmm5
  8754. vpxor %xmm0, %xmm5, %xmm5
  8755. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  8756. vaesenc 128(%r15), %xmm9, %xmm9
  8757. vaesenc 128(%r15), %xmm10, %xmm10
  8758. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  8759. vaesenc 128(%r15), %xmm11, %xmm11
  8760. vaesenc 128(%r15), %xmm12, %xmm12
  8761. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  8762. vaesenc 128(%r15), %xmm13, %xmm13
  8763. vaesenc 128(%r15), %xmm14, %xmm14
  8764. vaesenc 128(%r15), %xmm15, %xmm15
  8765. vpxor %xmm7, %xmm1, %xmm1
  8766. vpxor %xmm7, %xmm2, %xmm2
  8767. vpxor %xmm6, %xmm1, %xmm1
  8768. vpxor %xmm6, %xmm3, %xmm3
  8769. vpxor %xmm4, %xmm1, %xmm1
  8770. vpslldq $8, %xmm1, %xmm5
  8771. vpsrldq $8, %xmm1, %xmm1
  8772. vaesenc 144(%r15), %xmm8, %xmm8
  8773. vpxor %xmm5, %xmm2, %xmm2
  8774. vpxor %xmm1, %xmm3, %xmm3
  8775. vaesenc 144(%r15), %xmm9, %xmm9
  8776. vpslld $31, %xmm2, %xmm7
  8777. vpslld $30, %xmm2, %xmm4
  8778. vpslld $25, %xmm2, %xmm5
  8779. vaesenc 144(%r15), %xmm10, %xmm10
  8780. vpxor %xmm4, %xmm7, %xmm7
  8781. vpxor %xmm5, %xmm7, %xmm7
  8782. vaesenc 144(%r15), %xmm11, %xmm11
  8783. vpsrldq $4, %xmm7, %xmm4
  8784. vpslldq $12, %xmm7, %xmm7
  8785. vaesenc 144(%r15), %xmm12, %xmm12
  8786. vpxor %xmm7, %xmm2, %xmm2
  8787. vpsrld $0x01, %xmm2, %xmm5
  8788. vaesenc 144(%r15), %xmm13, %xmm13
  8789. vpsrld $2, %xmm2, %xmm1
  8790. vpsrld $7, %xmm2, %xmm0
  8791. vaesenc 144(%r15), %xmm14, %xmm14
  8792. vpxor %xmm1, %xmm5, %xmm5
  8793. vpxor %xmm0, %xmm5, %xmm5
  8794. vaesenc 144(%r15), %xmm15, %xmm15
  8795. vpxor %xmm4, %xmm5, %xmm5
  8796. vpxor %xmm5, %xmm2, %xmm2
  8797. vpxor %xmm3, %xmm2, %xmm2
  8798. cmpl $11, %r10d
  8799. vmovdqa 160(%r15), %xmm7
  8800. jl L_AES_GCM_decrypt_avx1_aesenc_128_ghash_avx_done
  8801. vaesenc %xmm7, %xmm8, %xmm8
  8802. vaesenc %xmm7, %xmm9, %xmm9
  8803. vaesenc %xmm7, %xmm10, %xmm10
  8804. vaesenc %xmm7, %xmm11, %xmm11
  8805. vaesenc %xmm7, %xmm12, %xmm12
  8806. vaesenc %xmm7, %xmm13, %xmm13
  8807. vaesenc %xmm7, %xmm14, %xmm14
  8808. vaesenc %xmm7, %xmm15, %xmm15
  8809. vmovdqa 176(%r15), %xmm7
  8810. vaesenc %xmm7, %xmm8, %xmm8
  8811. vaesenc %xmm7, %xmm9, %xmm9
  8812. vaesenc %xmm7, %xmm10, %xmm10
  8813. vaesenc %xmm7, %xmm11, %xmm11
  8814. vaesenc %xmm7, %xmm12, %xmm12
  8815. vaesenc %xmm7, %xmm13, %xmm13
  8816. vaesenc %xmm7, %xmm14, %xmm14
  8817. vaesenc %xmm7, %xmm15, %xmm15
  8818. cmpl $13, %r10d
  8819. vmovdqa 192(%r15), %xmm7
  8820. jl L_AES_GCM_decrypt_avx1_aesenc_128_ghash_avx_done
  8821. vaesenc %xmm7, %xmm8, %xmm8
  8822. vaesenc %xmm7, %xmm9, %xmm9
  8823. vaesenc %xmm7, %xmm10, %xmm10
  8824. vaesenc %xmm7, %xmm11, %xmm11
  8825. vaesenc %xmm7, %xmm12, %xmm12
  8826. vaesenc %xmm7, %xmm13, %xmm13
  8827. vaesenc %xmm7, %xmm14, %xmm14
  8828. vaesenc %xmm7, %xmm15, %xmm15
  8829. vmovdqa 208(%r15), %xmm7
  8830. vaesenc %xmm7, %xmm8, %xmm8
  8831. vaesenc %xmm7, %xmm9, %xmm9
  8832. vaesenc %xmm7, %xmm10, %xmm10
  8833. vaesenc %xmm7, %xmm11, %xmm11
  8834. vaesenc %xmm7, %xmm12, %xmm12
  8835. vaesenc %xmm7, %xmm13, %xmm13
  8836. vaesenc %xmm7, %xmm14, %xmm14
  8837. vaesenc %xmm7, %xmm15, %xmm15
  8838. vmovdqa 224(%r15), %xmm7
  8839. L_AES_GCM_decrypt_avx1_aesenc_128_ghash_avx_done:
  8840. vaesenclast %xmm7, %xmm8, %xmm8
  8841. vaesenclast %xmm7, %xmm9, %xmm9
  8842. vmovdqu (%rcx), %xmm0
  8843. vmovdqu 16(%rcx), %xmm1
  8844. vpxor %xmm0, %xmm8, %xmm8
  8845. vpxor %xmm1, %xmm9, %xmm9
  8846. vmovdqu %xmm8, (%rdx)
  8847. vmovdqu %xmm9, 16(%rdx)
  8848. vaesenclast %xmm7, %xmm10, %xmm10
  8849. vaesenclast %xmm7, %xmm11, %xmm11
  8850. vmovdqu 32(%rcx), %xmm0
  8851. vmovdqu 48(%rcx), %xmm1
  8852. vpxor %xmm0, %xmm10, %xmm10
  8853. vpxor %xmm1, %xmm11, %xmm11
  8854. vmovdqu %xmm10, 32(%rdx)
  8855. vmovdqu %xmm11, 48(%rdx)
  8856. vaesenclast %xmm7, %xmm12, %xmm12
  8857. vaesenclast %xmm7, %xmm13, %xmm13
  8858. vmovdqu 64(%rcx), %xmm0
  8859. vmovdqu 80(%rcx), %xmm1
  8860. vpxor %xmm0, %xmm12, %xmm12
  8861. vpxor %xmm1, %xmm13, %xmm13
  8862. vmovdqu %xmm12, 64(%rdx)
  8863. vmovdqu %xmm13, 80(%rdx)
  8864. vaesenclast %xmm7, %xmm14, %xmm14
  8865. vaesenclast %xmm7, %xmm15, %xmm15
  8866. vmovdqu 96(%rcx), %xmm0
  8867. vmovdqu 112(%rcx), %xmm1
  8868. vpxor %xmm0, %xmm14, %xmm14
  8869. vpxor %xmm1, %xmm15, %xmm15
  8870. vmovdqu %xmm14, 96(%rdx)
  8871. vmovdqu %xmm15, 112(%rdx)
  8872. addl $0x80, %ebx
  8873. cmpl %r13d, %ebx
  8874. jl L_AES_GCM_decrypt_avx1_ghash_128
  8875. vmovdqa %xmm2, %xmm6
  8876. vmovdqu (%rsp), %xmm5
  8877. L_AES_GCM_decrypt_avx1_done_128:
  8878. movl %r9d, %edx
  8879. cmpl %edx, %ebx
  8880. jge L_AES_GCM_decrypt_avx1_done_dec
  8881. movl %r9d, %r13d
  8882. andl $0xfffffff0, %r13d
  8883. cmpl %r13d, %ebx
  8884. jge L_AES_GCM_decrypt_avx1_last_block_done
  8885. L_AES_GCM_decrypt_avx1_last_block_start:
  8886. vmovdqu (%rdi,%rbx,1), %xmm13
  8887. vmovdqa %xmm5, %xmm0
  8888. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm13, %xmm1
  8889. vpxor %xmm6, %xmm1, %xmm1
  8890. vmovdqu 128(%rsp), %xmm9
  8891. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
  8892. vpaddd L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
  8893. vmovdqu %xmm9, 128(%rsp)
  8894. vpxor (%r15), %xmm8, %xmm8
  8895. vpclmulqdq $16, %xmm0, %xmm1, %xmm10
  8896. vaesenc 16(%r15), %xmm8, %xmm8
  8897. vaesenc 32(%r15), %xmm8, %xmm8
  8898. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm11
  8899. vaesenc 48(%r15), %xmm8, %xmm8
  8900. vaesenc 64(%r15), %xmm8, %xmm8
  8901. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm12
  8902. vaesenc 80(%r15), %xmm8, %xmm8
  8903. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  8904. vaesenc 96(%r15), %xmm8, %xmm8
  8905. vpxor %xmm11, %xmm10, %xmm10
  8906. vpslldq $8, %xmm10, %xmm2
  8907. vpsrldq $8, %xmm10, %xmm10
  8908. vaesenc 112(%r15), %xmm8, %xmm8
  8909. vpxor %xmm12, %xmm2, %xmm2
  8910. vpxor %xmm10, %xmm1, %xmm3
  8911. vmovdqa L_avx1_aes_gcm_mod2_128(%rip), %xmm0
  8912. vpclmulqdq $16, %xmm0, %xmm2, %xmm11
  8913. vaesenc 128(%r15), %xmm8, %xmm8
  8914. vpshufd $0x4e, %xmm2, %xmm10
  8915. vpxor %xmm11, %xmm10, %xmm10
  8916. vpclmulqdq $16, %xmm0, %xmm10, %xmm11
  8917. vaesenc 144(%r15), %xmm8, %xmm8
  8918. vpshufd $0x4e, %xmm10, %xmm10
  8919. vpxor %xmm11, %xmm10, %xmm10
  8920. vpxor %xmm3, %xmm10, %xmm6
  8921. cmpl $11, %r10d
  8922. vmovdqa 160(%r15), %xmm9
  8923. jl L_AES_GCM_decrypt_avx1_aesenc_gfmul_last
  8924. vaesenc %xmm9, %xmm8, %xmm8
  8925. vaesenc 176(%r15), %xmm8, %xmm8
  8926. cmpl $13, %r10d
  8927. vmovdqa 192(%r15), %xmm9
  8928. jl L_AES_GCM_decrypt_avx1_aesenc_gfmul_last
  8929. vaesenc %xmm9, %xmm8, %xmm8
  8930. vaesenc 208(%r15), %xmm8, %xmm8
  8931. vmovdqa 224(%r15), %xmm9
  8932. L_AES_GCM_decrypt_avx1_aesenc_gfmul_last:
  8933. vaesenclast %xmm9, %xmm8, %xmm8
  8934. vmovdqa %xmm13, %xmm0
  8935. vpxor %xmm0, %xmm8, %xmm8
  8936. vmovdqu %xmm8, (%rsi,%rbx,1)
  8937. addl $16, %ebx
  8938. cmpl %r13d, %ebx
  8939. jl L_AES_GCM_decrypt_avx1_last_block_start
  8940. L_AES_GCM_decrypt_avx1_last_block_done:
  8941. movl %r9d, %ecx
  8942. movl %ecx, %edx
  8943. andl $15, %ecx
  8944. jz L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_done
  8945. vmovdqu 128(%rsp), %xmm4
  8946. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  8947. vpxor (%r15), %xmm4, %xmm4
  8948. vaesenc 16(%r15), %xmm4, %xmm4
  8949. vaesenc 32(%r15), %xmm4, %xmm4
  8950. vaesenc 48(%r15), %xmm4, %xmm4
  8951. vaesenc 64(%r15), %xmm4, %xmm4
  8952. vaesenc 80(%r15), %xmm4, %xmm4
  8953. vaesenc 96(%r15), %xmm4, %xmm4
  8954. vaesenc 112(%r15), %xmm4, %xmm4
  8955. vaesenc 128(%r15), %xmm4, %xmm4
  8956. vaesenc 144(%r15), %xmm4, %xmm4
  8957. cmpl $11, %r10d
  8958. vmovdqa 160(%r15), %xmm9
  8959. jl L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_aesenc_avx_last
  8960. vaesenc %xmm9, %xmm4, %xmm4
  8961. vaesenc 176(%r15), %xmm4, %xmm4
  8962. cmpl $13, %r10d
  8963. vmovdqa 192(%r15), %xmm9
  8964. jl L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_aesenc_avx_last
  8965. vaesenc %xmm9, %xmm4, %xmm4
  8966. vaesenc 208(%r15), %xmm4, %xmm4
  8967. vmovdqa 224(%r15), %xmm9
  8968. L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_aesenc_avx_last:
  8969. vaesenclast %xmm9, %xmm4, %xmm4
  8970. subq $32, %rsp
  8971. xorl %ecx, %ecx
  8972. vmovdqu %xmm4, (%rsp)
  8973. vpxor %xmm0, %xmm0, %xmm0
  8974. vmovdqu %xmm0, 16(%rsp)
  8975. L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_loop:
  8976. movzbl (%rdi,%rbx,1), %r13d
  8977. movb %r13b, 16(%rsp,%rcx,1)
  8978. xorb (%rsp,%rcx,1), %r13b
  8979. movb %r13b, (%rsi,%rbx,1)
  8980. incl %ebx
  8981. incl %ecx
  8982. cmpl %edx, %ebx
  8983. jl L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_loop
  8984. vmovdqu 16(%rsp), %xmm4
  8985. addq $32, %rsp
  8986. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  8987. vpxor %xmm4, %xmm6, %xmm6
  8988. # ghash_gfmul_red_avx
  8989. vpshufd $0x4e, %xmm5, %xmm9
  8990. vpshufd $0x4e, %xmm6, %xmm10
  8991. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm11
  8992. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  8993. vpxor %xmm5, %xmm9, %xmm9
  8994. vpxor %xmm6, %xmm10, %xmm10
  8995. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  8996. vpxor %xmm8, %xmm9, %xmm9
  8997. vpxor %xmm11, %xmm9, %xmm9
  8998. vpslldq $8, %xmm9, %xmm10
  8999. vpsrldq $8, %xmm9, %xmm9
  9000. vpxor %xmm10, %xmm8, %xmm8
  9001. vpxor %xmm9, %xmm11, %xmm6
  9002. vpslld $31, %xmm8, %xmm12
  9003. vpslld $30, %xmm8, %xmm13
  9004. vpslld $25, %xmm8, %xmm14
  9005. vpxor %xmm13, %xmm12, %xmm12
  9006. vpxor %xmm14, %xmm12, %xmm12
  9007. vpsrldq $4, %xmm12, %xmm13
  9008. vpslldq $12, %xmm12, %xmm12
  9009. vpxor %xmm12, %xmm8, %xmm8
  9010. vpsrld $0x01, %xmm8, %xmm14
  9011. vpsrld $2, %xmm8, %xmm10
  9012. vpsrld $7, %xmm8, %xmm9
  9013. vpxor %xmm10, %xmm14, %xmm14
  9014. vpxor %xmm9, %xmm14, %xmm14
  9015. vpxor %xmm13, %xmm14, %xmm14
  9016. vpxor %xmm8, %xmm14, %xmm14
  9017. vpxor %xmm14, %xmm6, %xmm6
  9018. L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_done:
  9019. L_AES_GCM_decrypt_avx1_done_dec:
  9020. movl %r9d, %edx
  9021. movl %r11d, %ecx
  9022. shlq $3, %rdx
  9023. shlq $3, %rcx
  9024. vmovq %rdx, %xmm0
  9025. vmovq %rcx, %xmm1
  9026. vpunpcklqdq %xmm1, %xmm0, %xmm0
  9027. vpxor %xmm0, %xmm6, %xmm6
  9028. # ghash_gfmul_red_avx
  9029. vpshufd $0x4e, %xmm5, %xmm9
  9030. vpshufd $0x4e, %xmm6, %xmm10
  9031. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm11
  9032. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  9033. vpxor %xmm5, %xmm9, %xmm9
  9034. vpxor %xmm6, %xmm10, %xmm10
  9035. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  9036. vpxor %xmm8, %xmm9, %xmm9
  9037. vpxor %xmm11, %xmm9, %xmm9
  9038. vpslldq $8, %xmm9, %xmm10
  9039. vpsrldq $8, %xmm9, %xmm9
  9040. vpxor %xmm10, %xmm8, %xmm8
  9041. vpxor %xmm9, %xmm11, %xmm6
  9042. vpslld $31, %xmm8, %xmm12
  9043. vpslld $30, %xmm8, %xmm13
  9044. vpslld $25, %xmm8, %xmm14
  9045. vpxor %xmm13, %xmm12, %xmm12
  9046. vpxor %xmm14, %xmm12, %xmm12
  9047. vpsrldq $4, %xmm12, %xmm13
  9048. vpslldq $12, %xmm12, %xmm12
  9049. vpxor %xmm12, %xmm8, %xmm8
  9050. vpsrld $0x01, %xmm8, %xmm14
  9051. vpsrld $2, %xmm8, %xmm10
  9052. vpsrld $7, %xmm8, %xmm9
  9053. vpxor %xmm10, %xmm14, %xmm14
  9054. vpxor %xmm9, %xmm14, %xmm14
  9055. vpxor %xmm13, %xmm14, %xmm14
  9056. vpxor %xmm8, %xmm14, %xmm14
  9057. vpxor %xmm14, %xmm6, %xmm6
  9058. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm6, %xmm6
  9059. vmovdqu 144(%rsp), %xmm0
  9060. vpxor %xmm6, %xmm0, %xmm0
  9061. cmpl $16, %r14d
  9062. je L_AES_GCM_decrypt_avx1_cmp_tag_16
  9063. subq $16, %rsp
  9064. xorq %rcx, %rcx
  9065. xorq %rbx, %rbx
  9066. vmovdqu %xmm0, (%rsp)
  9067. L_AES_GCM_decrypt_avx1_cmp_tag_loop:
  9068. movzbl (%rsp,%rcx,1), %r13d
  9069. xorb (%r8,%rcx,1), %r13b
  9070. orb %r13b, %bl
  9071. incl %ecx
  9072. cmpl %r14d, %ecx
  9073. jne L_AES_GCM_decrypt_avx1_cmp_tag_loop
  9074. cmpb $0x00, %bl
  9075. sete %bl
  9076. addq $16, %rsp
  9077. xorq %rcx, %rcx
  9078. jmp L_AES_GCM_decrypt_avx1_cmp_tag_done
  9079. L_AES_GCM_decrypt_avx1_cmp_tag_16:
  9080. vmovdqu (%r8), %xmm1
  9081. vpcmpeqb %xmm1, %xmm0, %xmm0
  9082. vpmovmskb %xmm0, %rdx
  9083. # %%edx == 0xFFFF then return 1 else => return 0
  9084. xorl %ebx, %ebx
  9085. cmpl $0xffff, %edx
  9086. sete %bl
  9087. L_AES_GCM_decrypt_avx1_cmp_tag_done:
  9088. movl %ebx, (%rbp)
  9089. vzeroupper
  9090. addq $0xa8, %rsp
  9091. popq %rbp
  9092. popq %r15
  9093. popq %r14
  9094. popq %rbx
  9095. popq %r12
  9096. popq %r13
  9097. repz retq
  9098. #ifndef __APPLE__
  9099. .size AES_GCM_decrypt_avx1,.-AES_GCM_decrypt_avx1
  9100. #endif /* __APPLE__ */
  9101. #ifdef WOLFSSL_AESGCM_STREAM
  9102. #ifndef __APPLE__
  9103. .text
  9104. .globl AES_GCM_init_avx1
  9105. .type AES_GCM_init_avx1,@function
  9106. .align 16
  9107. AES_GCM_init_avx1:
  9108. #else
  9109. .section __TEXT,__text
  9110. .globl _AES_GCM_init_avx1
  9111. .p2align 4
  9112. _AES_GCM_init_avx1:
  9113. #endif /* __APPLE__ */
  9114. pushq %r12
  9115. pushq %r13
  9116. movq %rdx, %r10
  9117. movl %ecx, %r11d
  9118. movq 24(%rsp), %rax
  9119. subq $16, %rsp
  9120. vpxor %xmm4, %xmm4, %xmm4
  9121. movl %r11d, %edx
  9122. cmpl $12, %edx
  9123. jne L_AES_GCM_init_avx1_iv_not_12
  9124. # # Calculate values when IV is 12 bytes
  9125. # Set counter based on IV
  9126. movl $0x1000000, %ecx
  9127. vmovq (%r10), %xmm4
  9128. vpinsrd $2, 8(%r10), %xmm4, %xmm4
  9129. vpinsrd $3, %ecx, %xmm4, %xmm4
  9130. # H = Encrypt X(=0) and T = Encrypt counter
  9131. vmovdqa (%rdi), %xmm5
  9132. vpxor %xmm5, %xmm4, %xmm1
  9133. vmovdqa 16(%rdi), %xmm6
  9134. vaesenc %xmm6, %xmm5, %xmm5
  9135. vaesenc %xmm6, %xmm1, %xmm1
  9136. vmovdqa 32(%rdi), %xmm6
  9137. vaesenc %xmm6, %xmm5, %xmm5
  9138. vaesenc %xmm6, %xmm1, %xmm1
  9139. vmovdqa 48(%rdi), %xmm6
  9140. vaesenc %xmm6, %xmm5, %xmm5
  9141. vaesenc %xmm6, %xmm1, %xmm1
  9142. vmovdqa 64(%rdi), %xmm6
  9143. vaesenc %xmm6, %xmm5, %xmm5
  9144. vaesenc %xmm6, %xmm1, %xmm1
  9145. vmovdqa 80(%rdi), %xmm6
  9146. vaesenc %xmm6, %xmm5, %xmm5
  9147. vaesenc %xmm6, %xmm1, %xmm1
  9148. vmovdqa 96(%rdi), %xmm6
  9149. vaesenc %xmm6, %xmm5, %xmm5
  9150. vaesenc %xmm6, %xmm1, %xmm1
  9151. vmovdqa 112(%rdi), %xmm6
  9152. vaesenc %xmm6, %xmm5, %xmm5
  9153. vaesenc %xmm6, %xmm1, %xmm1
  9154. vmovdqa 128(%rdi), %xmm6
  9155. vaesenc %xmm6, %xmm5, %xmm5
  9156. vaesenc %xmm6, %xmm1, %xmm1
  9157. vmovdqa 144(%rdi), %xmm6
  9158. vaesenc %xmm6, %xmm5, %xmm5
  9159. vaesenc %xmm6, %xmm1, %xmm1
  9160. cmpl $11, %esi
  9161. vmovdqa 160(%rdi), %xmm6
  9162. jl L_AES_GCM_init_avx1_calc_iv_12_last
  9163. vaesenc %xmm6, %xmm5, %xmm5
  9164. vaesenc %xmm6, %xmm1, %xmm1
  9165. vmovdqa 176(%rdi), %xmm6
  9166. vaesenc %xmm6, %xmm5, %xmm5
  9167. vaesenc %xmm6, %xmm1, %xmm1
  9168. cmpl $13, %esi
  9169. vmovdqa 192(%rdi), %xmm6
  9170. jl L_AES_GCM_init_avx1_calc_iv_12_last
  9171. vaesenc %xmm6, %xmm5, %xmm5
  9172. vaesenc %xmm6, %xmm1, %xmm1
  9173. vmovdqa 208(%rdi), %xmm6
  9174. vaesenc %xmm6, %xmm5, %xmm5
  9175. vaesenc %xmm6, %xmm1, %xmm1
  9176. vmovdqa 224(%rdi), %xmm6
  9177. L_AES_GCM_init_avx1_calc_iv_12_last:
  9178. vaesenclast %xmm6, %xmm5, %xmm5
  9179. vaesenclast %xmm6, %xmm1, %xmm1
  9180. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  9181. vmovdqu %xmm1, %xmm15
  9182. jmp L_AES_GCM_init_avx1_iv_done
  9183. L_AES_GCM_init_avx1_iv_not_12:
  9184. # Calculate values when IV is not 12 bytes
  9185. # H = Encrypt X(=0)
  9186. vmovdqa (%rdi), %xmm5
  9187. vaesenc 16(%rdi), %xmm5, %xmm5
  9188. vaesenc 32(%rdi), %xmm5, %xmm5
  9189. vaesenc 48(%rdi), %xmm5, %xmm5
  9190. vaesenc 64(%rdi), %xmm5, %xmm5
  9191. vaesenc 80(%rdi), %xmm5, %xmm5
  9192. vaesenc 96(%rdi), %xmm5, %xmm5
  9193. vaesenc 112(%rdi), %xmm5, %xmm5
  9194. vaesenc 128(%rdi), %xmm5, %xmm5
  9195. vaesenc 144(%rdi), %xmm5, %xmm5
  9196. cmpl $11, %esi
  9197. vmovdqa 160(%rdi), %xmm8
  9198. jl L_AES_GCM_init_avx1_calc_iv_1_aesenc_avx_last
  9199. vaesenc %xmm8, %xmm5, %xmm5
  9200. vaesenc 176(%rdi), %xmm5, %xmm5
  9201. cmpl $13, %esi
  9202. vmovdqa 192(%rdi), %xmm8
  9203. jl L_AES_GCM_init_avx1_calc_iv_1_aesenc_avx_last
  9204. vaesenc %xmm8, %xmm5, %xmm5
  9205. vaesenc 208(%rdi), %xmm5, %xmm5
  9206. vmovdqa 224(%rdi), %xmm8
  9207. L_AES_GCM_init_avx1_calc_iv_1_aesenc_avx_last:
  9208. vaesenclast %xmm8, %xmm5, %xmm5
  9209. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  9210. # Calc counter
  9211. # Initialization vector
  9212. cmpl $0x00, %edx
  9213. movq $0x00, %rcx
  9214. je L_AES_GCM_init_avx1_calc_iv_done
  9215. cmpl $16, %edx
  9216. jl L_AES_GCM_init_avx1_calc_iv_lt16
  9217. andl $0xfffffff0, %edx
  9218. L_AES_GCM_init_avx1_calc_iv_16_loop:
  9219. vmovdqu (%r10,%rcx,1), %xmm7
  9220. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
  9221. vpxor %xmm7, %xmm4, %xmm4
  9222. # ghash_gfmul_avx
  9223. vpshufd $0x4e, %xmm4, %xmm1
  9224. vpshufd $0x4e, %xmm5, %xmm2
  9225. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  9226. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  9227. vpxor %xmm4, %xmm1, %xmm1
  9228. vpxor %xmm5, %xmm2, %xmm2
  9229. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  9230. vpxor %xmm0, %xmm1, %xmm1
  9231. vpxor %xmm3, %xmm1, %xmm1
  9232. vmovdqa %xmm0, %xmm6
  9233. vmovdqa %xmm3, %xmm4
  9234. vpslldq $8, %xmm1, %xmm2
  9235. vpsrldq $8, %xmm1, %xmm1
  9236. vpxor %xmm2, %xmm6, %xmm6
  9237. vpxor %xmm1, %xmm4, %xmm4
  9238. vpsrld $31, %xmm6, %xmm0
  9239. vpsrld $31, %xmm4, %xmm1
  9240. vpslld $0x01, %xmm6, %xmm6
  9241. vpslld $0x01, %xmm4, %xmm4
  9242. vpsrldq $12, %xmm0, %xmm2
  9243. vpslldq $4, %xmm0, %xmm0
  9244. vpslldq $4, %xmm1, %xmm1
  9245. vpor %xmm2, %xmm4, %xmm4
  9246. vpor %xmm0, %xmm6, %xmm6
  9247. vpor %xmm1, %xmm4, %xmm4
  9248. vpslld $31, %xmm6, %xmm0
  9249. vpslld $30, %xmm6, %xmm1
  9250. vpslld $25, %xmm6, %xmm2
  9251. vpxor %xmm1, %xmm0, %xmm0
  9252. vpxor %xmm2, %xmm0, %xmm0
  9253. vmovdqa %xmm0, %xmm1
  9254. vpsrldq $4, %xmm1, %xmm1
  9255. vpslldq $12, %xmm0, %xmm0
  9256. vpxor %xmm0, %xmm6, %xmm6
  9257. vpsrld $0x01, %xmm6, %xmm2
  9258. vpsrld $2, %xmm6, %xmm3
  9259. vpsrld $7, %xmm6, %xmm0
  9260. vpxor %xmm3, %xmm2, %xmm2
  9261. vpxor %xmm0, %xmm2, %xmm2
  9262. vpxor %xmm1, %xmm2, %xmm2
  9263. vpxor %xmm6, %xmm2, %xmm2
  9264. vpxor %xmm2, %xmm4, %xmm4
  9265. addl $16, %ecx
  9266. cmpl %edx, %ecx
  9267. jl L_AES_GCM_init_avx1_calc_iv_16_loop
  9268. movl %r11d, %edx
  9269. cmpl %edx, %ecx
  9270. je L_AES_GCM_init_avx1_calc_iv_done
  9271. L_AES_GCM_init_avx1_calc_iv_lt16:
  9272. subq $16, %rsp
  9273. vpxor %xmm7, %xmm7, %xmm7
  9274. xorl %r13d, %r13d
  9275. vmovdqu %xmm7, (%rsp)
  9276. L_AES_GCM_init_avx1_calc_iv_loop:
  9277. movzbl (%r10,%rcx,1), %r12d
  9278. movb %r12b, (%rsp,%r13,1)
  9279. incl %ecx
  9280. incl %r13d
  9281. cmpl %edx, %ecx
  9282. jl L_AES_GCM_init_avx1_calc_iv_loop
  9283. vmovdqu (%rsp), %xmm7
  9284. addq $16, %rsp
  9285. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
  9286. vpxor %xmm7, %xmm4, %xmm4
  9287. # ghash_gfmul_avx
  9288. vpshufd $0x4e, %xmm4, %xmm1
  9289. vpshufd $0x4e, %xmm5, %xmm2
  9290. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  9291. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  9292. vpxor %xmm4, %xmm1, %xmm1
  9293. vpxor %xmm5, %xmm2, %xmm2
  9294. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  9295. vpxor %xmm0, %xmm1, %xmm1
  9296. vpxor %xmm3, %xmm1, %xmm1
  9297. vmovdqa %xmm0, %xmm6
  9298. vmovdqa %xmm3, %xmm4
  9299. vpslldq $8, %xmm1, %xmm2
  9300. vpsrldq $8, %xmm1, %xmm1
  9301. vpxor %xmm2, %xmm6, %xmm6
  9302. vpxor %xmm1, %xmm4, %xmm4
  9303. vpsrld $31, %xmm6, %xmm0
  9304. vpsrld $31, %xmm4, %xmm1
  9305. vpslld $0x01, %xmm6, %xmm6
  9306. vpslld $0x01, %xmm4, %xmm4
  9307. vpsrldq $12, %xmm0, %xmm2
  9308. vpslldq $4, %xmm0, %xmm0
  9309. vpslldq $4, %xmm1, %xmm1
  9310. vpor %xmm2, %xmm4, %xmm4
  9311. vpor %xmm0, %xmm6, %xmm6
  9312. vpor %xmm1, %xmm4, %xmm4
  9313. vpslld $31, %xmm6, %xmm0
  9314. vpslld $30, %xmm6, %xmm1
  9315. vpslld $25, %xmm6, %xmm2
  9316. vpxor %xmm1, %xmm0, %xmm0
  9317. vpxor %xmm2, %xmm0, %xmm0
  9318. vmovdqa %xmm0, %xmm1
  9319. vpsrldq $4, %xmm1, %xmm1
  9320. vpslldq $12, %xmm0, %xmm0
  9321. vpxor %xmm0, %xmm6, %xmm6
  9322. vpsrld $0x01, %xmm6, %xmm2
  9323. vpsrld $2, %xmm6, %xmm3
  9324. vpsrld $7, %xmm6, %xmm0
  9325. vpxor %xmm3, %xmm2, %xmm2
  9326. vpxor %xmm0, %xmm2, %xmm2
  9327. vpxor %xmm1, %xmm2, %xmm2
  9328. vpxor %xmm6, %xmm2, %xmm2
  9329. vpxor %xmm2, %xmm4, %xmm4
  9330. L_AES_GCM_init_avx1_calc_iv_done:
  9331. # T = Encrypt counter
  9332. vpxor %xmm0, %xmm0, %xmm0
  9333. shll $3, %edx
  9334. vmovq %rdx, %xmm0
  9335. vpxor %xmm0, %xmm4, %xmm4
  9336. # ghash_gfmul_avx
  9337. vpshufd $0x4e, %xmm4, %xmm1
  9338. vpshufd $0x4e, %xmm5, %xmm2
  9339. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  9340. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  9341. vpxor %xmm4, %xmm1, %xmm1
  9342. vpxor %xmm5, %xmm2, %xmm2
  9343. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  9344. vpxor %xmm0, %xmm1, %xmm1
  9345. vpxor %xmm3, %xmm1, %xmm1
  9346. vmovdqa %xmm0, %xmm6
  9347. vmovdqa %xmm3, %xmm4
  9348. vpslldq $8, %xmm1, %xmm2
  9349. vpsrldq $8, %xmm1, %xmm1
  9350. vpxor %xmm2, %xmm6, %xmm6
  9351. vpxor %xmm1, %xmm4, %xmm4
  9352. vpsrld $31, %xmm6, %xmm0
  9353. vpsrld $31, %xmm4, %xmm1
  9354. vpslld $0x01, %xmm6, %xmm6
  9355. vpslld $0x01, %xmm4, %xmm4
  9356. vpsrldq $12, %xmm0, %xmm2
  9357. vpslldq $4, %xmm0, %xmm0
  9358. vpslldq $4, %xmm1, %xmm1
  9359. vpor %xmm2, %xmm4, %xmm4
  9360. vpor %xmm0, %xmm6, %xmm6
  9361. vpor %xmm1, %xmm4, %xmm4
  9362. vpslld $31, %xmm6, %xmm0
  9363. vpslld $30, %xmm6, %xmm1
  9364. vpslld $25, %xmm6, %xmm2
  9365. vpxor %xmm1, %xmm0, %xmm0
  9366. vpxor %xmm2, %xmm0, %xmm0
  9367. vmovdqa %xmm0, %xmm1
  9368. vpsrldq $4, %xmm1, %xmm1
  9369. vpslldq $12, %xmm0, %xmm0
  9370. vpxor %xmm0, %xmm6, %xmm6
  9371. vpsrld $0x01, %xmm6, %xmm2
  9372. vpsrld $2, %xmm6, %xmm3
  9373. vpsrld $7, %xmm6, %xmm0
  9374. vpxor %xmm3, %xmm2, %xmm2
  9375. vpxor %xmm0, %xmm2, %xmm2
  9376. vpxor %xmm1, %xmm2, %xmm2
  9377. vpxor %xmm6, %xmm2, %xmm2
  9378. vpxor %xmm2, %xmm4, %xmm4
  9379. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  9380. # Encrypt counter
  9381. vmovdqa (%rdi), %xmm7
  9382. vpxor %xmm4, %xmm7, %xmm7
  9383. vaesenc 16(%rdi), %xmm7, %xmm7
  9384. vaesenc 32(%rdi), %xmm7, %xmm7
  9385. vaesenc 48(%rdi), %xmm7, %xmm7
  9386. vaesenc 64(%rdi), %xmm7, %xmm7
  9387. vaesenc 80(%rdi), %xmm7, %xmm7
  9388. vaesenc 96(%rdi), %xmm7, %xmm7
  9389. vaesenc 112(%rdi), %xmm7, %xmm7
  9390. vaesenc 128(%rdi), %xmm7, %xmm7
  9391. vaesenc 144(%rdi), %xmm7, %xmm7
  9392. cmpl $11, %esi
  9393. vmovdqa 160(%rdi), %xmm8
  9394. jl L_AES_GCM_init_avx1_calc_iv_2_aesenc_avx_last
  9395. vaesenc %xmm8, %xmm7, %xmm7
  9396. vaesenc 176(%rdi), %xmm7, %xmm7
  9397. cmpl $13, %esi
  9398. vmovdqa 192(%rdi), %xmm8
  9399. jl L_AES_GCM_init_avx1_calc_iv_2_aesenc_avx_last
  9400. vaesenc %xmm8, %xmm7, %xmm7
  9401. vaesenc 208(%rdi), %xmm7, %xmm7
  9402. vmovdqa 224(%rdi), %xmm8
  9403. L_AES_GCM_init_avx1_calc_iv_2_aesenc_avx_last:
  9404. vaesenclast %xmm8, %xmm7, %xmm7
  9405. vmovdqu %xmm7, %xmm15
  9406. L_AES_GCM_init_avx1_iv_done:
  9407. vmovdqa %xmm15, (%rax)
  9408. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  9409. vpaddd L_avx1_aes_gcm_one(%rip), %xmm4, %xmm4
  9410. vmovdqa %xmm5, (%r8)
  9411. vmovdqa %xmm4, (%r9)
  9412. vzeroupper
  9413. addq $16, %rsp
  9414. popq %r13
  9415. popq %r12
  9416. repz retq
  9417. #ifndef __APPLE__
  9418. .size AES_GCM_init_avx1,.-AES_GCM_init_avx1
  9419. #endif /* __APPLE__ */
  9420. #ifndef __APPLE__
  9421. .text
  9422. .globl AES_GCM_aad_update_avx1
  9423. .type AES_GCM_aad_update_avx1,@function
  9424. .align 16
  9425. AES_GCM_aad_update_avx1:
  9426. #else
  9427. .section __TEXT,__text
  9428. .globl _AES_GCM_aad_update_avx1
  9429. .p2align 4
  9430. _AES_GCM_aad_update_avx1:
  9431. #endif /* __APPLE__ */
  9432. movq %rcx, %rax
  9433. vmovdqa (%rdx), %xmm5
  9434. vmovdqa (%rax), %xmm6
  9435. xorl %ecx, %ecx
  9436. L_AES_GCM_aad_update_avx1_16_loop:
  9437. vmovdqu (%rdi,%rcx,1), %xmm7
  9438. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
  9439. vpxor %xmm7, %xmm5, %xmm5
  9440. # ghash_gfmul_avx
  9441. vpshufd $0x4e, %xmm5, %xmm1
  9442. vpshufd $0x4e, %xmm6, %xmm2
  9443. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm3
  9444. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm0
  9445. vpxor %xmm5, %xmm1, %xmm1
  9446. vpxor %xmm6, %xmm2, %xmm2
  9447. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  9448. vpxor %xmm0, %xmm1, %xmm1
  9449. vpxor %xmm3, %xmm1, %xmm1
  9450. vmovdqa %xmm0, %xmm4
  9451. vmovdqa %xmm3, %xmm5
  9452. vpslldq $8, %xmm1, %xmm2
  9453. vpsrldq $8, %xmm1, %xmm1
  9454. vpxor %xmm2, %xmm4, %xmm4
  9455. vpxor %xmm1, %xmm5, %xmm5
  9456. vpsrld $31, %xmm4, %xmm0
  9457. vpsrld $31, %xmm5, %xmm1
  9458. vpslld $0x01, %xmm4, %xmm4
  9459. vpslld $0x01, %xmm5, %xmm5
  9460. vpsrldq $12, %xmm0, %xmm2
  9461. vpslldq $4, %xmm0, %xmm0
  9462. vpslldq $4, %xmm1, %xmm1
  9463. vpor %xmm2, %xmm5, %xmm5
  9464. vpor %xmm0, %xmm4, %xmm4
  9465. vpor %xmm1, %xmm5, %xmm5
  9466. vpslld $31, %xmm4, %xmm0
  9467. vpslld $30, %xmm4, %xmm1
  9468. vpslld $25, %xmm4, %xmm2
  9469. vpxor %xmm1, %xmm0, %xmm0
  9470. vpxor %xmm2, %xmm0, %xmm0
  9471. vmovdqa %xmm0, %xmm1
  9472. vpsrldq $4, %xmm1, %xmm1
  9473. vpslldq $12, %xmm0, %xmm0
  9474. vpxor %xmm0, %xmm4, %xmm4
  9475. vpsrld $0x01, %xmm4, %xmm2
  9476. vpsrld $2, %xmm4, %xmm3
  9477. vpsrld $7, %xmm4, %xmm0
  9478. vpxor %xmm3, %xmm2, %xmm2
  9479. vpxor %xmm0, %xmm2, %xmm2
  9480. vpxor %xmm1, %xmm2, %xmm2
  9481. vpxor %xmm4, %xmm2, %xmm2
  9482. vpxor %xmm2, %xmm5, %xmm5
  9483. addl $16, %ecx
  9484. cmpl %esi, %ecx
  9485. jl L_AES_GCM_aad_update_avx1_16_loop
  9486. vmovdqa %xmm5, (%rdx)
  9487. vzeroupper
  9488. repz retq
  9489. #ifndef __APPLE__
  9490. .size AES_GCM_aad_update_avx1,.-AES_GCM_aad_update_avx1
  9491. #endif /* __APPLE__ */
  9492. #ifndef __APPLE__
  9493. .text
  9494. .globl AES_GCM_encrypt_block_avx1
  9495. .type AES_GCM_encrypt_block_avx1,@function
  9496. .align 16
  9497. AES_GCM_encrypt_block_avx1:
  9498. #else
  9499. .section __TEXT,__text
  9500. .globl _AES_GCM_encrypt_block_avx1
  9501. .p2align 4
  9502. _AES_GCM_encrypt_block_avx1:
  9503. #endif /* __APPLE__ */
  9504. movq %rdx, %r10
  9505. movq %rcx, %r11
  9506. vmovdqu (%r8), %xmm1
  9507. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
  9508. vpaddd L_avx1_aes_gcm_one(%rip), %xmm1, %xmm1
  9509. vmovdqu %xmm1, (%r8)
  9510. vpxor (%rdi), %xmm0, %xmm0
  9511. vaesenc 16(%rdi), %xmm0, %xmm0
  9512. vaesenc 32(%rdi), %xmm0, %xmm0
  9513. vaesenc 48(%rdi), %xmm0, %xmm0
  9514. vaesenc 64(%rdi), %xmm0, %xmm0
  9515. vaesenc 80(%rdi), %xmm0, %xmm0
  9516. vaesenc 96(%rdi), %xmm0, %xmm0
  9517. vaesenc 112(%rdi), %xmm0, %xmm0
  9518. vaesenc 128(%rdi), %xmm0, %xmm0
  9519. vaesenc 144(%rdi), %xmm0, %xmm0
  9520. cmpl $11, %esi
  9521. vmovdqa 160(%rdi), %xmm1
  9522. jl L_AES_GCM_encrypt_block_avx1_aesenc_block_last
  9523. vaesenc %xmm1, %xmm0, %xmm0
  9524. vaesenc 176(%rdi), %xmm0, %xmm0
  9525. cmpl $13, %esi
  9526. vmovdqa 192(%rdi), %xmm1
  9527. jl L_AES_GCM_encrypt_block_avx1_aesenc_block_last
  9528. vaesenc %xmm1, %xmm0, %xmm0
  9529. vaesenc 208(%rdi), %xmm0, %xmm0
  9530. vmovdqa 224(%rdi), %xmm1
  9531. L_AES_GCM_encrypt_block_avx1_aesenc_block_last:
  9532. vaesenclast %xmm1, %xmm0, %xmm0
  9533. vmovdqu (%r11), %xmm1
  9534. vpxor %xmm1, %xmm0, %xmm0
  9535. vmovdqu %xmm0, (%r10)
  9536. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  9537. vzeroupper
  9538. repz retq
  9539. #ifndef __APPLE__
  9540. .size AES_GCM_encrypt_block_avx1,.-AES_GCM_encrypt_block_avx1
  9541. #endif /* __APPLE__ */
  9542. #ifndef __APPLE__
  9543. .text
  9544. .globl AES_GCM_ghash_block_avx1
  9545. .type AES_GCM_ghash_block_avx1,@function
  9546. .align 16
  9547. AES_GCM_ghash_block_avx1:
  9548. #else
  9549. .section __TEXT,__text
  9550. .globl _AES_GCM_ghash_block_avx1
  9551. .p2align 4
  9552. _AES_GCM_ghash_block_avx1:
  9553. #endif /* __APPLE__ */
  9554. vmovdqa (%rsi), %xmm4
  9555. vmovdqa (%rdx), %xmm5
  9556. vmovdqu (%rdi), %xmm7
  9557. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
  9558. vpxor %xmm7, %xmm4, %xmm4
  9559. # ghash_gfmul_avx
  9560. vpshufd $0x4e, %xmm4, %xmm1
  9561. vpshufd $0x4e, %xmm5, %xmm2
  9562. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  9563. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  9564. vpxor %xmm4, %xmm1, %xmm1
  9565. vpxor %xmm5, %xmm2, %xmm2
  9566. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  9567. vpxor %xmm0, %xmm1, %xmm1
  9568. vpxor %xmm3, %xmm1, %xmm1
  9569. vmovdqa %xmm0, %xmm6
  9570. vmovdqa %xmm3, %xmm4
  9571. vpslldq $8, %xmm1, %xmm2
  9572. vpsrldq $8, %xmm1, %xmm1
  9573. vpxor %xmm2, %xmm6, %xmm6
  9574. vpxor %xmm1, %xmm4, %xmm4
  9575. vpsrld $31, %xmm6, %xmm0
  9576. vpsrld $31, %xmm4, %xmm1
  9577. vpslld $0x01, %xmm6, %xmm6
  9578. vpslld $0x01, %xmm4, %xmm4
  9579. vpsrldq $12, %xmm0, %xmm2
  9580. vpslldq $4, %xmm0, %xmm0
  9581. vpslldq $4, %xmm1, %xmm1
  9582. vpor %xmm2, %xmm4, %xmm4
  9583. vpor %xmm0, %xmm6, %xmm6
  9584. vpor %xmm1, %xmm4, %xmm4
  9585. vpslld $31, %xmm6, %xmm0
  9586. vpslld $30, %xmm6, %xmm1
  9587. vpslld $25, %xmm6, %xmm2
  9588. vpxor %xmm1, %xmm0, %xmm0
  9589. vpxor %xmm2, %xmm0, %xmm0
  9590. vmovdqa %xmm0, %xmm1
  9591. vpsrldq $4, %xmm1, %xmm1
  9592. vpslldq $12, %xmm0, %xmm0
  9593. vpxor %xmm0, %xmm6, %xmm6
  9594. vpsrld $0x01, %xmm6, %xmm2
  9595. vpsrld $2, %xmm6, %xmm3
  9596. vpsrld $7, %xmm6, %xmm0
  9597. vpxor %xmm3, %xmm2, %xmm2
  9598. vpxor %xmm0, %xmm2, %xmm2
  9599. vpxor %xmm1, %xmm2, %xmm2
  9600. vpxor %xmm6, %xmm2, %xmm2
  9601. vpxor %xmm2, %xmm4, %xmm4
  9602. vmovdqa %xmm4, (%rsi)
  9603. vzeroupper
  9604. repz retq
  9605. #ifndef __APPLE__
  9606. .size AES_GCM_ghash_block_avx1,.-AES_GCM_ghash_block_avx1
  9607. #endif /* __APPLE__ */
  9608. #ifndef __APPLE__
  9609. .text
  9610. .globl AES_GCM_encrypt_update_avx1
  9611. .type AES_GCM_encrypt_update_avx1,@function
  9612. .align 16
  9613. AES_GCM_encrypt_update_avx1:
  9614. #else
  9615. .section __TEXT,__text
  9616. .globl _AES_GCM_encrypt_update_avx1
  9617. .p2align 4
  9618. _AES_GCM_encrypt_update_avx1:
  9619. #endif /* __APPLE__ */
  9620. pushq %r13
  9621. pushq %r12
  9622. pushq %r14
  9623. movq %rdx, %r10
  9624. movq %rcx, %r11
  9625. movq 32(%rsp), %rax
  9626. movq 40(%rsp), %r12
  9627. subq $0xa0, %rsp
  9628. vmovdqa (%r9), %xmm6
  9629. vmovdqa (%rax), %xmm5
  9630. vpsrlq $63, %xmm5, %xmm9
  9631. vpsllq $0x01, %xmm5, %xmm8
  9632. vpslldq $8, %xmm9, %xmm9
  9633. vpor %xmm9, %xmm8, %xmm8
  9634. vpshufd $0xff, %xmm5, %xmm5
  9635. vpsrad $31, %xmm5, %xmm5
  9636. vpand L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  9637. vpxor %xmm8, %xmm5, %xmm5
  9638. xorl %r14d, %r14d
  9639. cmpl $0x80, %r8d
  9640. movl %r8d, %r13d
  9641. jl L_AES_GCM_encrypt_update_avx1_done_128
  9642. andl $0xffffff80, %r13d
  9643. vmovdqa %xmm6, %xmm2
  9644. # H ^ 1
  9645. vmovdqu %xmm5, (%rsp)
  9646. # H ^ 2
  9647. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm8
  9648. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm0
  9649. vpslld $31, %xmm8, %xmm12
  9650. vpslld $30, %xmm8, %xmm13
  9651. vpslld $25, %xmm8, %xmm14
  9652. vpxor %xmm13, %xmm12, %xmm12
  9653. vpxor %xmm14, %xmm12, %xmm12
  9654. vpsrldq $4, %xmm12, %xmm13
  9655. vpslldq $12, %xmm12, %xmm12
  9656. vpxor %xmm12, %xmm8, %xmm8
  9657. vpsrld $0x01, %xmm8, %xmm14
  9658. vpsrld $2, %xmm8, %xmm10
  9659. vpsrld $7, %xmm8, %xmm9
  9660. vpxor %xmm10, %xmm14, %xmm14
  9661. vpxor %xmm9, %xmm14, %xmm14
  9662. vpxor %xmm13, %xmm14, %xmm14
  9663. vpxor %xmm8, %xmm14, %xmm14
  9664. vpxor %xmm14, %xmm0, %xmm0
  9665. vmovdqu %xmm0, 16(%rsp)
  9666. # H ^ 3
  9667. # ghash_gfmul_red_avx
  9668. vpshufd $0x4e, %xmm5, %xmm9
  9669. vpshufd $0x4e, %xmm0, %xmm10
  9670. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm11
  9671. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm8
  9672. vpxor %xmm5, %xmm9, %xmm9
  9673. vpxor %xmm0, %xmm10, %xmm10
  9674. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  9675. vpxor %xmm8, %xmm9, %xmm9
  9676. vpxor %xmm11, %xmm9, %xmm9
  9677. vpslldq $8, %xmm9, %xmm10
  9678. vpsrldq $8, %xmm9, %xmm9
  9679. vpxor %xmm10, %xmm8, %xmm8
  9680. vpxor %xmm9, %xmm11, %xmm1
  9681. vpslld $31, %xmm8, %xmm12
  9682. vpslld $30, %xmm8, %xmm13
  9683. vpslld $25, %xmm8, %xmm14
  9684. vpxor %xmm13, %xmm12, %xmm12
  9685. vpxor %xmm14, %xmm12, %xmm12
  9686. vpsrldq $4, %xmm12, %xmm13
  9687. vpslldq $12, %xmm12, %xmm12
  9688. vpxor %xmm12, %xmm8, %xmm8
  9689. vpsrld $0x01, %xmm8, %xmm14
  9690. vpsrld $2, %xmm8, %xmm10
  9691. vpsrld $7, %xmm8, %xmm9
  9692. vpxor %xmm10, %xmm14, %xmm14
  9693. vpxor %xmm9, %xmm14, %xmm14
  9694. vpxor %xmm13, %xmm14, %xmm14
  9695. vpxor %xmm8, %xmm14, %xmm14
  9696. vpxor %xmm14, %xmm1, %xmm1
  9697. vmovdqu %xmm1, 32(%rsp)
  9698. # H ^ 4
  9699. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm8
  9700. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm3
  9701. vpslld $31, %xmm8, %xmm12
  9702. vpslld $30, %xmm8, %xmm13
  9703. vpslld $25, %xmm8, %xmm14
  9704. vpxor %xmm13, %xmm12, %xmm12
  9705. vpxor %xmm14, %xmm12, %xmm12
  9706. vpsrldq $4, %xmm12, %xmm13
  9707. vpslldq $12, %xmm12, %xmm12
  9708. vpxor %xmm12, %xmm8, %xmm8
  9709. vpsrld $0x01, %xmm8, %xmm14
  9710. vpsrld $2, %xmm8, %xmm10
  9711. vpsrld $7, %xmm8, %xmm9
  9712. vpxor %xmm10, %xmm14, %xmm14
  9713. vpxor %xmm9, %xmm14, %xmm14
  9714. vpxor %xmm13, %xmm14, %xmm14
  9715. vpxor %xmm8, %xmm14, %xmm14
  9716. vpxor %xmm14, %xmm3, %xmm3
  9717. vmovdqu %xmm3, 48(%rsp)
  9718. # H ^ 5
  9719. # ghash_gfmul_red_avx
  9720. vpshufd $0x4e, %xmm0, %xmm9
  9721. vpshufd $0x4e, %xmm1, %xmm10
  9722. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm11
  9723. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm8
  9724. vpxor %xmm0, %xmm9, %xmm9
  9725. vpxor %xmm1, %xmm10, %xmm10
  9726. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  9727. vpxor %xmm8, %xmm9, %xmm9
  9728. vpxor %xmm11, %xmm9, %xmm9
  9729. vpslldq $8, %xmm9, %xmm10
  9730. vpsrldq $8, %xmm9, %xmm9
  9731. vpxor %xmm10, %xmm8, %xmm8
  9732. vpxor %xmm9, %xmm11, %xmm7
  9733. vpslld $31, %xmm8, %xmm12
  9734. vpslld $30, %xmm8, %xmm13
  9735. vpslld $25, %xmm8, %xmm14
  9736. vpxor %xmm13, %xmm12, %xmm12
  9737. vpxor %xmm14, %xmm12, %xmm12
  9738. vpsrldq $4, %xmm12, %xmm13
  9739. vpslldq $12, %xmm12, %xmm12
  9740. vpxor %xmm12, %xmm8, %xmm8
  9741. vpsrld $0x01, %xmm8, %xmm14
  9742. vpsrld $2, %xmm8, %xmm10
  9743. vpsrld $7, %xmm8, %xmm9
  9744. vpxor %xmm10, %xmm14, %xmm14
  9745. vpxor %xmm9, %xmm14, %xmm14
  9746. vpxor %xmm13, %xmm14, %xmm14
  9747. vpxor %xmm8, %xmm14, %xmm14
  9748. vpxor %xmm14, %xmm7, %xmm7
  9749. vmovdqu %xmm7, 64(%rsp)
  9750. # H ^ 6
  9751. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm8
  9752. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm7
  9753. vpslld $31, %xmm8, %xmm12
  9754. vpslld $30, %xmm8, %xmm13
  9755. vpslld $25, %xmm8, %xmm14
  9756. vpxor %xmm13, %xmm12, %xmm12
  9757. vpxor %xmm14, %xmm12, %xmm12
  9758. vpsrldq $4, %xmm12, %xmm13
  9759. vpslldq $12, %xmm12, %xmm12
  9760. vpxor %xmm12, %xmm8, %xmm8
  9761. vpsrld $0x01, %xmm8, %xmm14
  9762. vpsrld $2, %xmm8, %xmm10
  9763. vpsrld $7, %xmm8, %xmm9
  9764. vpxor %xmm10, %xmm14, %xmm14
  9765. vpxor %xmm9, %xmm14, %xmm14
  9766. vpxor %xmm13, %xmm14, %xmm14
  9767. vpxor %xmm8, %xmm14, %xmm14
  9768. vpxor %xmm14, %xmm7, %xmm7
  9769. vmovdqu %xmm7, 80(%rsp)
  9770. # H ^ 7
  9771. # ghash_gfmul_red_avx
  9772. vpshufd $0x4e, %xmm1, %xmm9
  9773. vpshufd $0x4e, %xmm3, %xmm10
  9774. vpclmulqdq $0x11, %xmm1, %xmm3, %xmm11
  9775. vpclmulqdq $0x00, %xmm1, %xmm3, %xmm8
  9776. vpxor %xmm1, %xmm9, %xmm9
  9777. vpxor %xmm3, %xmm10, %xmm10
  9778. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  9779. vpxor %xmm8, %xmm9, %xmm9
  9780. vpxor %xmm11, %xmm9, %xmm9
  9781. vpslldq $8, %xmm9, %xmm10
  9782. vpsrldq $8, %xmm9, %xmm9
  9783. vpxor %xmm10, %xmm8, %xmm8
  9784. vpxor %xmm9, %xmm11, %xmm7
  9785. vpslld $31, %xmm8, %xmm12
  9786. vpslld $30, %xmm8, %xmm13
  9787. vpslld $25, %xmm8, %xmm14
  9788. vpxor %xmm13, %xmm12, %xmm12
  9789. vpxor %xmm14, %xmm12, %xmm12
  9790. vpsrldq $4, %xmm12, %xmm13
  9791. vpslldq $12, %xmm12, %xmm12
  9792. vpxor %xmm12, %xmm8, %xmm8
  9793. vpsrld $0x01, %xmm8, %xmm14
  9794. vpsrld $2, %xmm8, %xmm10
  9795. vpsrld $7, %xmm8, %xmm9
  9796. vpxor %xmm10, %xmm14, %xmm14
  9797. vpxor %xmm9, %xmm14, %xmm14
  9798. vpxor %xmm13, %xmm14, %xmm14
  9799. vpxor %xmm8, %xmm14, %xmm14
  9800. vpxor %xmm14, %xmm7, %xmm7
  9801. vmovdqu %xmm7, 96(%rsp)
  9802. # H ^ 8
  9803. vpclmulqdq $0x00, %xmm3, %xmm3, %xmm8
  9804. vpclmulqdq $0x11, %xmm3, %xmm3, %xmm7
  9805. vpslld $31, %xmm8, %xmm12
  9806. vpslld $30, %xmm8, %xmm13
  9807. vpslld $25, %xmm8, %xmm14
  9808. vpxor %xmm13, %xmm12, %xmm12
  9809. vpxor %xmm14, %xmm12, %xmm12
  9810. vpsrldq $4, %xmm12, %xmm13
  9811. vpslldq $12, %xmm12, %xmm12
  9812. vpxor %xmm12, %xmm8, %xmm8
  9813. vpsrld $0x01, %xmm8, %xmm14
  9814. vpsrld $2, %xmm8, %xmm10
  9815. vpsrld $7, %xmm8, %xmm9
  9816. vpxor %xmm10, %xmm14, %xmm14
  9817. vpxor %xmm9, %xmm14, %xmm14
  9818. vpxor %xmm13, %xmm14, %xmm14
  9819. vpxor %xmm8, %xmm14, %xmm14
  9820. vpxor %xmm14, %xmm7, %xmm7
  9821. vmovdqu %xmm7, 112(%rsp)
  9822. # First 128 bytes of input
  9823. vmovdqu (%r12), %xmm0
  9824. vmovdqa L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
  9825. vpshufb %xmm1, %xmm0, %xmm8
  9826. vpaddd L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
  9827. vpshufb %xmm1, %xmm9, %xmm9
  9828. vpaddd L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
  9829. vpshufb %xmm1, %xmm10, %xmm10
  9830. vpaddd L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
  9831. vpshufb %xmm1, %xmm11, %xmm11
  9832. vpaddd L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
  9833. vpshufb %xmm1, %xmm12, %xmm12
  9834. vpaddd L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
  9835. vpshufb %xmm1, %xmm13, %xmm13
  9836. vpaddd L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
  9837. vpshufb %xmm1, %xmm14, %xmm14
  9838. vpaddd L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
  9839. vpshufb %xmm1, %xmm15, %xmm15
  9840. vpaddd L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
  9841. vmovdqa (%rdi), %xmm7
  9842. vmovdqu %xmm0, (%r12)
  9843. vpxor %xmm7, %xmm8, %xmm8
  9844. vpxor %xmm7, %xmm9, %xmm9
  9845. vpxor %xmm7, %xmm10, %xmm10
  9846. vpxor %xmm7, %xmm11, %xmm11
  9847. vpxor %xmm7, %xmm12, %xmm12
  9848. vpxor %xmm7, %xmm13, %xmm13
  9849. vpxor %xmm7, %xmm14, %xmm14
  9850. vpxor %xmm7, %xmm15, %xmm15
  9851. vmovdqa 16(%rdi), %xmm7
  9852. vaesenc %xmm7, %xmm8, %xmm8
  9853. vaesenc %xmm7, %xmm9, %xmm9
  9854. vaesenc %xmm7, %xmm10, %xmm10
  9855. vaesenc %xmm7, %xmm11, %xmm11
  9856. vaesenc %xmm7, %xmm12, %xmm12
  9857. vaesenc %xmm7, %xmm13, %xmm13
  9858. vaesenc %xmm7, %xmm14, %xmm14
  9859. vaesenc %xmm7, %xmm15, %xmm15
  9860. vmovdqa 32(%rdi), %xmm7
  9861. vaesenc %xmm7, %xmm8, %xmm8
  9862. vaesenc %xmm7, %xmm9, %xmm9
  9863. vaesenc %xmm7, %xmm10, %xmm10
  9864. vaesenc %xmm7, %xmm11, %xmm11
  9865. vaesenc %xmm7, %xmm12, %xmm12
  9866. vaesenc %xmm7, %xmm13, %xmm13
  9867. vaesenc %xmm7, %xmm14, %xmm14
  9868. vaesenc %xmm7, %xmm15, %xmm15
  9869. vmovdqa 48(%rdi), %xmm7
  9870. vaesenc %xmm7, %xmm8, %xmm8
  9871. vaesenc %xmm7, %xmm9, %xmm9
  9872. vaesenc %xmm7, %xmm10, %xmm10
  9873. vaesenc %xmm7, %xmm11, %xmm11
  9874. vaesenc %xmm7, %xmm12, %xmm12
  9875. vaesenc %xmm7, %xmm13, %xmm13
  9876. vaesenc %xmm7, %xmm14, %xmm14
  9877. vaesenc %xmm7, %xmm15, %xmm15
  9878. vmovdqa 64(%rdi), %xmm7
  9879. vaesenc %xmm7, %xmm8, %xmm8
  9880. vaesenc %xmm7, %xmm9, %xmm9
  9881. vaesenc %xmm7, %xmm10, %xmm10
  9882. vaesenc %xmm7, %xmm11, %xmm11
  9883. vaesenc %xmm7, %xmm12, %xmm12
  9884. vaesenc %xmm7, %xmm13, %xmm13
  9885. vaesenc %xmm7, %xmm14, %xmm14
  9886. vaesenc %xmm7, %xmm15, %xmm15
  9887. vmovdqa 80(%rdi), %xmm7
  9888. vaesenc %xmm7, %xmm8, %xmm8
  9889. vaesenc %xmm7, %xmm9, %xmm9
  9890. vaesenc %xmm7, %xmm10, %xmm10
  9891. vaesenc %xmm7, %xmm11, %xmm11
  9892. vaesenc %xmm7, %xmm12, %xmm12
  9893. vaesenc %xmm7, %xmm13, %xmm13
  9894. vaesenc %xmm7, %xmm14, %xmm14
  9895. vaesenc %xmm7, %xmm15, %xmm15
  9896. vmovdqa 96(%rdi), %xmm7
  9897. vaesenc %xmm7, %xmm8, %xmm8
  9898. vaesenc %xmm7, %xmm9, %xmm9
  9899. vaesenc %xmm7, %xmm10, %xmm10
  9900. vaesenc %xmm7, %xmm11, %xmm11
  9901. vaesenc %xmm7, %xmm12, %xmm12
  9902. vaesenc %xmm7, %xmm13, %xmm13
  9903. vaesenc %xmm7, %xmm14, %xmm14
  9904. vaesenc %xmm7, %xmm15, %xmm15
  9905. vmovdqa 112(%rdi), %xmm7
  9906. vaesenc %xmm7, %xmm8, %xmm8
  9907. vaesenc %xmm7, %xmm9, %xmm9
  9908. vaesenc %xmm7, %xmm10, %xmm10
  9909. vaesenc %xmm7, %xmm11, %xmm11
  9910. vaesenc %xmm7, %xmm12, %xmm12
  9911. vaesenc %xmm7, %xmm13, %xmm13
  9912. vaesenc %xmm7, %xmm14, %xmm14
  9913. vaesenc %xmm7, %xmm15, %xmm15
  9914. vmovdqa 128(%rdi), %xmm7
  9915. vaesenc %xmm7, %xmm8, %xmm8
  9916. vaesenc %xmm7, %xmm9, %xmm9
  9917. vaesenc %xmm7, %xmm10, %xmm10
  9918. vaesenc %xmm7, %xmm11, %xmm11
  9919. vaesenc %xmm7, %xmm12, %xmm12
  9920. vaesenc %xmm7, %xmm13, %xmm13
  9921. vaesenc %xmm7, %xmm14, %xmm14
  9922. vaesenc %xmm7, %xmm15, %xmm15
  9923. vmovdqa 144(%rdi), %xmm7
  9924. vaesenc %xmm7, %xmm8, %xmm8
  9925. vaesenc %xmm7, %xmm9, %xmm9
  9926. vaesenc %xmm7, %xmm10, %xmm10
  9927. vaesenc %xmm7, %xmm11, %xmm11
  9928. vaesenc %xmm7, %xmm12, %xmm12
  9929. vaesenc %xmm7, %xmm13, %xmm13
  9930. vaesenc %xmm7, %xmm14, %xmm14
  9931. vaesenc %xmm7, %xmm15, %xmm15
  9932. cmpl $11, %esi
  9933. vmovdqa 160(%rdi), %xmm7
  9934. jl L_AES_GCM_encrypt_update_avx1_aesenc_128_enc_done
  9935. vaesenc %xmm7, %xmm8, %xmm8
  9936. vaesenc %xmm7, %xmm9, %xmm9
  9937. vaesenc %xmm7, %xmm10, %xmm10
  9938. vaesenc %xmm7, %xmm11, %xmm11
  9939. vaesenc %xmm7, %xmm12, %xmm12
  9940. vaesenc %xmm7, %xmm13, %xmm13
  9941. vaesenc %xmm7, %xmm14, %xmm14
  9942. vaesenc %xmm7, %xmm15, %xmm15
  9943. vmovdqa 176(%rdi), %xmm7
  9944. vaesenc %xmm7, %xmm8, %xmm8
  9945. vaesenc %xmm7, %xmm9, %xmm9
  9946. vaesenc %xmm7, %xmm10, %xmm10
  9947. vaesenc %xmm7, %xmm11, %xmm11
  9948. vaesenc %xmm7, %xmm12, %xmm12
  9949. vaesenc %xmm7, %xmm13, %xmm13
  9950. vaesenc %xmm7, %xmm14, %xmm14
  9951. vaesenc %xmm7, %xmm15, %xmm15
  9952. cmpl $13, %esi
  9953. vmovdqa 192(%rdi), %xmm7
  9954. jl L_AES_GCM_encrypt_update_avx1_aesenc_128_enc_done
  9955. vaesenc %xmm7, %xmm8, %xmm8
  9956. vaesenc %xmm7, %xmm9, %xmm9
  9957. vaesenc %xmm7, %xmm10, %xmm10
  9958. vaesenc %xmm7, %xmm11, %xmm11
  9959. vaesenc %xmm7, %xmm12, %xmm12
  9960. vaesenc %xmm7, %xmm13, %xmm13
  9961. vaesenc %xmm7, %xmm14, %xmm14
  9962. vaesenc %xmm7, %xmm15, %xmm15
  9963. vmovdqa 208(%rdi), %xmm7
  9964. vaesenc %xmm7, %xmm8, %xmm8
  9965. vaesenc %xmm7, %xmm9, %xmm9
  9966. vaesenc %xmm7, %xmm10, %xmm10
  9967. vaesenc %xmm7, %xmm11, %xmm11
  9968. vaesenc %xmm7, %xmm12, %xmm12
  9969. vaesenc %xmm7, %xmm13, %xmm13
  9970. vaesenc %xmm7, %xmm14, %xmm14
  9971. vaesenc %xmm7, %xmm15, %xmm15
  9972. vmovdqa 224(%rdi), %xmm7
  9973. L_AES_GCM_encrypt_update_avx1_aesenc_128_enc_done:
  9974. vaesenclast %xmm7, %xmm8, %xmm8
  9975. vaesenclast %xmm7, %xmm9, %xmm9
  9976. vmovdqu (%r11), %xmm0
  9977. vmovdqu 16(%r11), %xmm1
  9978. vpxor %xmm0, %xmm8, %xmm8
  9979. vpxor %xmm1, %xmm9, %xmm9
  9980. vmovdqu %xmm8, (%r10)
  9981. vmovdqu %xmm9, 16(%r10)
  9982. vaesenclast %xmm7, %xmm10, %xmm10
  9983. vaesenclast %xmm7, %xmm11, %xmm11
  9984. vmovdqu 32(%r11), %xmm0
  9985. vmovdqu 48(%r11), %xmm1
  9986. vpxor %xmm0, %xmm10, %xmm10
  9987. vpxor %xmm1, %xmm11, %xmm11
  9988. vmovdqu %xmm10, 32(%r10)
  9989. vmovdqu %xmm11, 48(%r10)
  9990. vaesenclast %xmm7, %xmm12, %xmm12
  9991. vaesenclast %xmm7, %xmm13, %xmm13
  9992. vmovdqu 64(%r11), %xmm0
  9993. vmovdqu 80(%r11), %xmm1
  9994. vpxor %xmm0, %xmm12, %xmm12
  9995. vpxor %xmm1, %xmm13, %xmm13
  9996. vmovdqu %xmm12, 64(%r10)
  9997. vmovdqu %xmm13, 80(%r10)
  9998. vaesenclast %xmm7, %xmm14, %xmm14
  9999. vaesenclast %xmm7, %xmm15, %xmm15
  10000. vmovdqu 96(%r11), %xmm0
  10001. vmovdqu 112(%r11), %xmm1
  10002. vpxor %xmm0, %xmm14, %xmm14
  10003. vpxor %xmm1, %xmm15, %xmm15
  10004. vmovdqu %xmm14, 96(%r10)
  10005. vmovdqu %xmm15, 112(%r10)
  10006. cmpl $0x80, %r13d
  10007. movl $0x80, %r14d
  10008. jle L_AES_GCM_encrypt_update_avx1_end_128
  10009. # More 128 bytes of input
  10010. L_AES_GCM_encrypt_update_avx1_ghash_128:
  10011. leaq (%r11,%r14,1), %rcx
  10012. leaq (%r10,%r14,1), %rdx
  10013. vmovdqu (%r12), %xmm0
  10014. vmovdqa L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
  10015. vpshufb %xmm1, %xmm0, %xmm8
  10016. vpaddd L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
  10017. vpshufb %xmm1, %xmm9, %xmm9
  10018. vpaddd L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
  10019. vpshufb %xmm1, %xmm10, %xmm10
  10020. vpaddd L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
  10021. vpshufb %xmm1, %xmm11, %xmm11
  10022. vpaddd L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
  10023. vpshufb %xmm1, %xmm12, %xmm12
  10024. vpaddd L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
  10025. vpshufb %xmm1, %xmm13, %xmm13
  10026. vpaddd L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
  10027. vpshufb %xmm1, %xmm14, %xmm14
  10028. vpaddd L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
  10029. vpshufb %xmm1, %xmm15, %xmm15
  10030. vpaddd L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
  10031. vmovdqa (%rdi), %xmm7
  10032. vmovdqu %xmm0, (%r12)
  10033. vpxor %xmm7, %xmm8, %xmm8
  10034. vpxor %xmm7, %xmm9, %xmm9
  10035. vpxor %xmm7, %xmm10, %xmm10
  10036. vpxor %xmm7, %xmm11, %xmm11
  10037. vpxor %xmm7, %xmm12, %xmm12
  10038. vpxor %xmm7, %xmm13, %xmm13
  10039. vpxor %xmm7, %xmm14, %xmm14
  10040. vpxor %xmm7, %xmm15, %xmm15
  10041. vmovdqu 112(%rsp), %xmm7
  10042. vmovdqu -128(%rdx), %xmm0
  10043. vaesenc 16(%rdi), %xmm8, %xmm8
  10044. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10045. vpxor %xmm2, %xmm0, %xmm0
  10046. vpshufd $0x4e, %xmm7, %xmm1
  10047. vpshufd $0x4e, %xmm0, %xmm5
  10048. vpxor %xmm7, %xmm1, %xmm1
  10049. vpxor %xmm0, %xmm5, %xmm5
  10050. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm3
  10051. vaesenc 16(%rdi), %xmm9, %xmm9
  10052. vaesenc 16(%rdi), %xmm10, %xmm10
  10053. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm2
  10054. vaesenc 16(%rdi), %xmm11, %xmm11
  10055. vaesenc 16(%rdi), %xmm12, %xmm12
  10056. vpclmulqdq $0x00, %xmm5, %xmm1, %xmm1
  10057. vaesenc 16(%rdi), %xmm13, %xmm13
  10058. vaesenc 16(%rdi), %xmm14, %xmm14
  10059. vaesenc 16(%rdi), %xmm15, %xmm15
  10060. vpxor %xmm2, %xmm1, %xmm1
  10061. vpxor %xmm3, %xmm1, %xmm1
  10062. vmovdqu 96(%rsp), %xmm7
  10063. vmovdqu -112(%rdx), %xmm0
  10064. vpshufd $0x4e, %xmm7, %xmm4
  10065. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10066. vaesenc 32(%rdi), %xmm8, %xmm8
  10067. vpxor %xmm7, %xmm4, %xmm4
  10068. vpshufd $0x4e, %xmm0, %xmm5
  10069. vpxor %xmm0, %xmm5, %xmm5
  10070. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10071. vaesenc 32(%rdi), %xmm9, %xmm9
  10072. vaesenc 32(%rdi), %xmm10, %xmm10
  10073. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10074. vaesenc 32(%rdi), %xmm11, %xmm11
  10075. vaesenc 32(%rdi), %xmm12, %xmm12
  10076. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10077. vaesenc 32(%rdi), %xmm13, %xmm13
  10078. vaesenc 32(%rdi), %xmm14, %xmm14
  10079. vaesenc 32(%rdi), %xmm15, %xmm15
  10080. vpxor %xmm7, %xmm1, %xmm1
  10081. vpxor %xmm7, %xmm2, %xmm2
  10082. vpxor %xmm6, %xmm1, %xmm1
  10083. vpxor %xmm6, %xmm3, %xmm3
  10084. vpxor %xmm4, %xmm1, %xmm1
  10085. vmovdqu 80(%rsp), %xmm7
  10086. vmovdqu -96(%rdx), %xmm0
  10087. vpshufd $0x4e, %xmm7, %xmm4
  10088. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10089. vaesenc 48(%rdi), %xmm8, %xmm8
  10090. vpxor %xmm7, %xmm4, %xmm4
  10091. vpshufd $0x4e, %xmm0, %xmm5
  10092. vpxor %xmm0, %xmm5, %xmm5
  10093. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10094. vaesenc 48(%rdi), %xmm9, %xmm9
  10095. vaesenc 48(%rdi), %xmm10, %xmm10
  10096. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10097. vaesenc 48(%rdi), %xmm11, %xmm11
  10098. vaesenc 48(%rdi), %xmm12, %xmm12
  10099. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10100. vaesenc 48(%rdi), %xmm13, %xmm13
  10101. vaesenc 48(%rdi), %xmm14, %xmm14
  10102. vaesenc 48(%rdi), %xmm15, %xmm15
  10103. vpxor %xmm7, %xmm1, %xmm1
  10104. vpxor %xmm7, %xmm2, %xmm2
  10105. vpxor %xmm6, %xmm1, %xmm1
  10106. vpxor %xmm6, %xmm3, %xmm3
  10107. vpxor %xmm4, %xmm1, %xmm1
  10108. vmovdqu 64(%rsp), %xmm7
  10109. vmovdqu -80(%rdx), %xmm0
  10110. vpshufd $0x4e, %xmm7, %xmm4
  10111. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10112. vaesenc 64(%rdi), %xmm8, %xmm8
  10113. vpxor %xmm7, %xmm4, %xmm4
  10114. vpshufd $0x4e, %xmm0, %xmm5
  10115. vpxor %xmm0, %xmm5, %xmm5
  10116. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10117. vaesenc 64(%rdi), %xmm9, %xmm9
  10118. vaesenc 64(%rdi), %xmm10, %xmm10
  10119. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10120. vaesenc 64(%rdi), %xmm11, %xmm11
  10121. vaesenc 64(%rdi), %xmm12, %xmm12
  10122. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10123. vaesenc 64(%rdi), %xmm13, %xmm13
  10124. vaesenc 64(%rdi), %xmm14, %xmm14
  10125. vaesenc 64(%rdi), %xmm15, %xmm15
  10126. vpxor %xmm7, %xmm1, %xmm1
  10127. vpxor %xmm7, %xmm2, %xmm2
  10128. vpxor %xmm6, %xmm1, %xmm1
  10129. vpxor %xmm6, %xmm3, %xmm3
  10130. vpxor %xmm4, %xmm1, %xmm1
  10131. vmovdqu 48(%rsp), %xmm7
  10132. vmovdqu -64(%rdx), %xmm0
  10133. vpshufd $0x4e, %xmm7, %xmm4
  10134. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10135. vaesenc 80(%rdi), %xmm8, %xmm8
  10136. vpxor %xmm7, %xmm4, %xmm4
  10137. vpshufd $0x4e, %xmm0, %xmm5
  10138. vpxor %xmm0, %xmm5, %xmm5
  10139. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10140. vaesenc 80(%rdi), %xmm9, %xmm9
  10141. vaesenc 80(%rdi), %xmm10, %xmm10
  10142. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10143. vaesenc 80(%rdi), %xmm11, %xmm11
  10144. vaesenc 80(%rdi), %xmm12, %xmm12
  10145. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10146. vaesenc 80(%rdi), %xmm13, %xmm13
  10147. vaesenc 80(%rdi), %xmm14, %xmm14
  10148. vaesenc 80(%rdi), %xmm15, %xmm15
  10149. vpxor %xmm7, %xmm1, %xmm1
  10150. vpxor %xmm7, %xmm2, %xmm2
  10151. vpxor %xmm6, %xmm1, %xmm1
  10152. vpxor %xmm6, %xmm3, %xmm3
  10153. vpxor %xmm4, %xmm1, %xmm1
  10154. vmovdqu 32(%rsp), %xmm7
  10155. vmovdqu -48(%rdx), %xmm0
  10156. vpshufd $0x4e, %xmm7, %xmm4
  10157. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10158. vaesenc 96(%rdi), %xmm8, %xmm8
  10159. vpxor %xmm7, %xmm4, %xmm4
  10160. vpshufd $0x4e, %xmm0, %xmm5
  10161. vpxor %xmm0, %xmm5, %xmm5
  10162. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10163. vaesenc 96(%rdi), %xmm9, %xmm9
  10164. vaesenc 96(%rdi), %xmm10, %xmm10
  10165. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10166. vaesenc 96(%rdi), %xmm11, %xmm11
  10167. vaesenc 96(%rdi), %xmm12, %xmm12
  10168. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10169. vaesenc 96(%rdi), %xmm13, %xmm13
  10170. vaesenc 96(%rdi), %xmm14, %xmm14
  10171. vaesenc 96(%rdi), %xmm15, %xmm15
  10172. vpxor %xmm7, %xmm1, %xmm1
  10173. vpxor %xmm7, %xmm2, %xmm2
  10174. vpxor %xmm6, %xmm1, %xmm1
  10175. vpxor %xmm6, %xmm3, %xmm3
  10176. vpxor %xmm4, %xmm1, %xmm1
  10177. vmovdqu 16(%rsp), %xmm7
  10178. vmovdqu -32(%rdx), %xmm0
  10179. vpshufd $0x4e, %xmm7, %xmm4
  10180. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10181. vaesenc 112(%rdi), %xmm8, %xmm8
  10182. vpxor %xmm7, %xmm4, %xmm4
  10183. vpshufd $0x4e, %xmm0, %xmm5
  10184. vpxor %xmm0, %xmm5, %xmm5
  10185. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10186. vaesenc 112(%rdi), %xmm9, %xmm9
  10187. vaesenc 112(%rdi), %xmm10, %xmm10
  10188. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10189. vaesenc 112(%rdi), %xmm11, %xmm11
  10190. vaesenc 112(%rdi), %xmm12, %xmm12
  10191. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10192. vaesenc 112(%rdi), %xmm13, %xmm13
  10193. vaesenc 112(%rdi), %xmm14, %xmm14
  10194. vaesenc 112(%rdi), %xmm15, %xmm15
  10195. vpxor %xmm7, %xmm1, %xmm1
  10196. vpxor %xmm7, %xmm2, %xmm2
  10197. vpxor %xmm6, %xmm1, %xmm1
  10198. vpxor %xmm6, %xmm3, %xmm3
  10199. vpxor %xmm4, %xmm1, %xmm1
  10200. vmovdqu (%rsp), %xmm7
  10201. vmovdqu -16(%rdx), %xmm0
  10202. vpshufd $0x4e, %xmm7, %xmm4
  10203. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10204. vaesenc 128(%rdi), %xmm8, %xmm8
  10205. vpxor %xmm7, %xmm4, %xmm4
  10206. vpshufd $0x4e, %xmm0, %xmm5
  10207. vpxor %xmm0, %xmm5, %xmm5
  10208. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10209. vaesenc 128(%rdi), %xmm9, %xmm9
  10210. vaesenc 128(%rdi), %xmm10, %xmm10
  10211. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  10212. vaesenc 128(%rdi), %xmm11, %xmm11
  10213. vaesenc 128(%rdi), %xmm12, %xmm12
  10214. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  10215. vaesenc 128(%rdi), %xmm13, %xmm13
  10216. vaesenc 128(%rdi), %xmm14, %xmm14
  10217. vaesenc 128(%rdi), %xmm15, %xmm15
  10218. vpxor %xmm7, %xmm1, %xmm1
  10219. vpxor %xmm7, %xmm2, %xmm2
  10220. vpxor %xmm6, %xmm1, %xmm1
  10221. vpxor %xmm6, %xmm3, %xmm3
  10222. vpxor %xmm4, %xmm1, %xmm1
  10223. vpslldq $8, %xmm1, %xmm5
  10224. vpsrldq $8, %xmm1, %xmm1
  10225. vaesenc 144(%rdi), %xmm8, %xmm8
  10226. vpxor %xmm5, %xmm2, %xmm2
  10227. vpxor %xmm1, %xmm3, %xmm3
  10228. vaesenc 144(%rdi), %xmm9, %xmm9
  10229. vpslld $31, %xmm2, %xmm7
  10230. vpslld $30, %xmm2, %xmm4
  10231. vpslld $25, %xmm2, %xmm5
  10232. vaesenc 144(%rdi), %xmm10, %xmm10
  10233. vpxor %xmm4, %xmm7, %xmm7
  10234. vpxor %xmm5, %xmm7, %xmm7
  10235. vaesenc 144(%rdi), %xmm11, %xmm11
  10236. vpsrldq $4, %xmm7, %xmm4
  10237. vpslldq $12, %xmm7, %xmm7
  10238. vaesenc 144(%rdi), %xmm12, %xmm12
  10239. vpxor %xmm7, %xmm2, %xmm2
  10240. vpsrld $0x01, %xmm2, %xmm5
  10241. vaesenc 144(%rdi), %xmm13, %xmm13
  10242. vpsrld $2, %xmm2, %xmm1
  10243. vpsrld $7, %xmm2, %xmm0
  10244. vaesenc 144(%rdi), %xmm14, %xmm14
  10245. vpxor %xmm1, %xmm5, %xmm5
  10246. vpxor %xmm0, %xmm5, %xmm5
  10247. vaesenc 144(%rdi), %xmm15, %xmm15
  10248. vpxor %xmm4, %xmm5, %xmm5
  10249. vpxor %xmm5, %xmm2, %xmm2
  10250. vpxor %xmm3, %xmm2, %xmm2
  10251. cmpl $11, %esi
  10252. vmovdqa 160(%rdi), %xmm7
  10253. jl L_AES_GCM_encrypt_update_avx1_aesenc_128_ghash_avx_done
  10254. vaesenc %xmm7, %xmm8, %xmm8
  10255. vaesenc %xmm7, %xmm9, %xmm9
  10256. vaesenc %xmm7, %xmm10, %xmm10
  10257. vaesenc %xmm7, %xmm11, %xmm11
  10258. vaesenc %xmm7, %xmm12, %xmm12
  10259. vaesenc %xmm7, %xmm13, %xmm13
  10260. vaesenc %xmm7, %xmm14, %xmm14
  10261. vaesenc %xmm7, %xmm15, %xmm15
  10262. vmovdqa 176(%rdi), %xmm7
  10263. vaesenc %xmm7, %xmm8, %xmm8
  10264. vaesenc %xmm7, %xmm9, %xmm9
  10265. vaesenc %xmm7, %xmm10, %xmm10
  10266. vaesenc %xmm7, %xmm11, %xmm11
  10267. vaesenc %xmm7, %xmm12, %xmm12
  10268. vaesenc %xmm7, %xmm13, %xmm13
  10269. vaesenc %xmm7, %xmm14, %xmm14
  10270. vaesenc %xmm7, %xmm15, %xmm15
  10271. cmpl $13, %esi
  10272. vmovdqa 192(%rdi), %xmm7
  10273. jl L_AES_GCM_encrypt_update_avx1_aesenc_128_ghash_avx_done
  10274. vaesenc %xmm7, %xmm8, %xmm8
  10275. vaesenc %xmm7, %xmm9, %xmm9
  10276. vaesenc %xmm7, %xmm10, %xmm10
  10277. vaesenc %xmm7, %xmm11, %xmm11
  10278. vaesenc %xmm7, %xmm12, %xmm12
  10279. vaesenc %xmm7, %xmm13, %xmm13
  10280. vaesenc %xmm7, %xmm14, %xmm14
  10281. vaesenc %xmm7, %xmm15, %xmm15
  10282. vmovdqa 208(%rdi), %xmm7
  10283. vaesenc %xmm7, %xmm8, %xmm8
  10284. vaesenc %xmm7, %xmm9, %xmm9
  10285. vaesenc %xmm7, %xmm10, %xmm10
  10286. vaesenc %xmm7, %xmm11, %xmm11
  10287. vaesenc %xmm7, %xmm12, %xmm12
  10288. vaesenc %xmm7, %xmm13, %xmm13
  10289. vaesenc %xmm7, %xmm14, %xmm14
  10290. vaesenc %xmm7, %xmm15, %xmm15
  10291. vmovdqa 224(%rdi), %xmm7
  10292. L_AES_GCM_encrypt_update_avx1_aesenc_128_ghash_avx_done:
  10293. vaesenclast %xmm7, %xmm8, %xmm8
  10294. vaesenclast %xmm7, %xmm9, %xmm9
  10295. vmovdqu (%rcx), %xmm0
  10296. vmovdqu 16(%rcx), %xmm1
  10297. vpxor %xmm0, %xmm8, %xmm8
  10298. vpxor %xmm1, %xmm9, %xmm9
  10299. vmovdqu %xmm8, (%rdx)
  10300. vmovdqu %xmm9, 16(%rdx)
  10301. vaesenclast %xmm7, %xmm10, %xmm10
  10302. vaesenclast %xmm7, %xmm11, %xmm11
  10303. vmovdqu 32(%rcx), %xmm0
  10304. vmovdqu 48(%rcx), %xmm1
  10305. vpxor %xmm0, %xmm10, %xmm10
  10306. vpxor %xmm1, %xmm11, %xmm11
  10307. vmovdqu %xmm10, 32(%rdx)
  10308. vmovdqu %xmm11, 48(%rdx)
  10309. vaesenclast %xmm7, %xmm12, %xmm12
  10310. vaesenclast %xmm7, %xmm13, %xmm13
  10311. vmovdqu 64(%rcx), %xmm0
  10312. vmovdqu 80(%rcx), %xmm1
  10313. vpxor %xmm0, %xmm12, %xmm12
  10314. vpxor %xmm1, %xmm13, %xmm13
  10315. vmovdqu %xmm12, 64(%rdx)
  10316. vmovdqu %xmm13, 80(%rdx)
  10317. vaesenclast %xmm7, %xmm14, %xmm14
  10318. vaesenclast %xmm7, %xmm15, %xmm15
  10319. vmovdqu 96(%rcx), %xmm0
  10320. vmovdqu 112(%rcx), %xmm1
  10321. vpxor %xmm0, %xmm14, %xmm14
  10322. vpxor %xmm1, %xmm15, %xmm15
  10323. vmovdqu %xmm14, 96(%rdx)
  10324. vmovdqu %xmm15, 112(%rdx)
  10325. addl $0x80, %r14d
  10326. cmpl %r13d, %r14d
  10327. jl L_AES_GCM_encrypt_update_avx1_ghash_128
  10328. L_AES_GCM_encrypt_update_avx1_end_128:
  10329. vmovdqa L_avx1_aes_gcm_bswap_mask(%rip), %xmm4
  10330. vpshufb %xmm4, %xmm8, %xmm8
  10331. vpshufb %xmm4, %xmm9, %xmm9
  10332. vpshufb %xmm4, %xmm10, %xmm10
  10333. vpshufb %xmm4, %xmm11, %xmm11
  10334. vpxor %xmm2, %xmm8, %xmm8
  10335. vpshufb %xmm4, %xmm12, %xmm12
  10336. vpshufb %xmm4, %xmm13, %xmm13
  10337. vpshufb %xmm4, %xmm14, %xmm14
  10338. vpshufb %xmm4, %xmm15, %xmm15
  10339. vmovdqu (%rsp), %xmm7
  10340. vmovdqu 16(%rsp), %xmm5
  10341. # ghash_gfmul_avx
  10342. vpshufd $0x4e, %xmm15, %xmm1
  10343. vpshufd $0x4e, %xmm7, %xmm2
  10344. vpclmulqdq $0x11, %xmm15, %xmm7, %xmm3
  10345. vpclmulqdq $0x00, %xmm15, %xmm7, %xmm0
  10346. vpxor %xmm15, %xmm1, %xmm1
  10347. vpxor %xmm7, %xmm2, %xmm2
  10348. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10349. vpxor %xmm0, %xmm1, %xmm1
  10350. vpxor %xmm3, %xmm1, %xmm1
  10351. vmovdqa %xmm0, %xmm4
  10352. vmovdqa %xmm3, %xmm6
  10353. vpslldq $8, %xmm1, %xmm2
  10354. vpsrldq $8, %xmm1, %xmm1
  10355. vpxor %xmm2, %xmm4, %xmm4
  10356. vpxor %xmm1, %xmm6, %xmm6
  10357. # ghash_gfmul_xor_avx
  10358. vpshufd $0x4e, %xmm14, %xmm1
  10359. vpshufd $0x4e, %xmm5, %xmm2
  10360. vpclmulqdq $0x11, %xmm14, %xmm5, %xmm3
  10361. vpclmulqdq $0x00, %xmm14, %xmm5, %xmm0
  10362. vpxor %xmm14, %xmm1, %xmm1
  10363. vpxor %xmm5, %xmm2, %xmm2
  10364. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10365. vpxor %xmm0, %xmm1, %xmm1
  10366. vpxor %xmm3, %xmm1, %xmm1
  10367. vpxor %xmm0, %xmm4, %xmm4
  10368. vpxor %xmm3, %xmm6, %xmm6
  10369. vpslldq $8, %xmm1, %xmm2
  10370. vpsrldq $8, %xmm1, %xmm1
  10371. vpxor %xmm2, %xmm4, %xmm4
  10372. vpxor %xmm1, %xmm6, %xmm6
  10373. vmovdqu 32(%rsp), %xmm7
  10374. vmovdqu 48(%rsp), %xmm5
  10375. # ghash_gfmul_xor_avx
  10376. vpshufd $0x4e, %xmm13, %xmm1
  10377. vpshufd $0x4e, %xmm7, %xmm2
  10378. vpclmulqdq $0x11, %xmm13, %xmm7, %xmm3
  10379. vpclmulqdq $0x00, %xmm13, %xmm7, %xmm0
  10380. vpxor %xmm13, %xmm1, %xmm1
  10381. vpxor %xmm7, %xmm2, %xmm2
  10382. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10383. vpxor %xmm0, %xmm1, %xmm1
  10384. vpxor %xmm3, %xmm1, %xmm1
  10385. vpxor %xmm0, %xmm4, %xmm4
  10386. vpxor %xmm3, %xmm6, %xmm6
  10387. vpslldq $8, %xmm1, %xmm2
  10388. vpsrldq $8, %xmm1, %xmm1
  10389. vpxor %xmm2, %xmm4, %xmm4
  10390. vpxor %xmm1, %xmm6, %xmm6
  10391. # ghash_gfmul_xor_avx
  10392. vpshufd $0x4e, %xmm12, %xmm1
  10393. vpshufd $0x4e, %xmm5, %xmm2
  10394. vpclmulqdq $0x11, %xmm12, %xmm5, %xmm3
  10395. vpclmulqdq $0x00, %xmm12, %xmm5, %xmm0
  10396. vpxor %xmm12, %xmm1, %xmm1
  10397. vpxor %xmm5, %xmm2, %xmm2
  10398. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10399. vpxor %xmm0, %xmm1, %xmm1
  10400. vpxor %xmm3, %xmm1, %xmm1
  10401. vpxor %xmm0, %xmm4, %xmm4
  10402. vpxor %xmm3, %xmm6, %xmm6
  10403. vpslldq $8, %xmm1, %xmm2
  10404. vpsrldq $8, %xmm1, %xmm1
  10405. vpxor %xmm2, %xmm4, %xmm4
  10406. vpxor %xmm1, %xmm6, %xmm6
  10407. vmovdqu 64(%rsp), %xmm7
  10408. vmovdqu 80(%rsp), %xmm5
  10409. # ghash_gfmul_xor_avx
  10410. vpshufd $0x4e, %xmm11, %xmm1
  10411. vpshufd $0x4e, %xmm7, %xmm2
  10412. vpclmulqdq $0x11, %xmm11, %xmm7, %xmm3
  10413. vpclmulqdq $0x00, %xmm11, %xmm7, %xmm0
  10414. vpxor %xmm11, %xmm1, %xmm1
  10415. vpxor %xmm7, %xmm2, %xmm2
  10416. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10417. vpxor %xmm0, %xmm1, %xmm1
  10418. vpxor %xmm3, %xmm1, %xmm1
  10419. vpxor %xmm0, %xmm4, %xmm4
  10420. vpxor %xmm3, %xmm6, %xmm6
  10421. vpslldq $8, %xmm1, %xmm2
  10422. vpsrldq $8, %xmm1, %xmm1
  10423. vpxor %xmm2, %xmm4, %xmm4
  10424. vpxor %xmm1, %xmm6, %xmm6
  10425. # ghash_gfmul_xor_avx
  10426. vpshufd $0x4e, %xmm10, %xmm1
  10427. vpshufd $0x4e, %xmm5, %xmm2
  10428. vpclmulqdq $0x11, %xmm10, %xmm5, %xmm3
  10429. vpclmulqdq $0x00, %xmm10, %xmm5, %xmm0
  10430. vpxor %xmm10, %xmm1, %xmm1
  10431. vpxor %xmm5, %xmm2, %xmm2
  10432. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10433. vpxor %xmm0, %xmm1, %xmm1
  10434. vpxor %xmm3, %xmm1, %xmm1
  10435. vpxor %xmm0, %xmm4, %xmm4
  10436. vpxor %xmm3, %xmm6, %xmm6
  10437. vpslldq $8, %xmm1, %xmm2
  10438. vpsrldq $8, %xmm1, %xmm1
  10439. vpxor %xmm2, %xmm4, %xmm4
  10440. vpxor %xmm1, %xmm6, %xmm6
  10441. vmovdqu 96(%rsp), %xmm7
  10442. vmovdqu 112(%rsp), %xmm5
  10443. # ghash_gfmul_xor_avx
  10444. vpshufd $0x4e, %xmm9, %xmm1
  10445. vpshufd $0x4e, %xmm7, %xmm2
  10446. vpclmulqdq $0x11, %xmm9, %xmm7, %xmm3
  10447. vpclmulqdq $0x00, %xmm9, %xmm7, %xmm0
  10448. vpxor %xmm9, %xmm1, %xmm1
  10449. vpxor %xmm7, %xmm2, %xmm2
  10450. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10451. vpxor %xmm0, %xmm1, %xmm1
  10452. vpxor %xmm3, %xmm1, %xmm1
  10453. vpxor %xmm0, %xmm4, %xmm4
  10454. vpxor %xmm3, %xmm6, %xmm6
  10455. vpslldq $8, %xmm1, %xmm2
  10456. vpsrldq $8, %xmm1, %xmm1
  10457. vpxor %xmm2, %xmm4, %xmm4
  10458. vpxor %xmm1, %xmm6, %xmm6
  10459. # ghash_gfmul_xor_avx
  10460. vpshufd $0x4e, %xmm8, %xmm1
  10461. vpshufd $0x4e, %xmm5, %xmm2
  10462. vpclmulqdq $0x11, %xmm8, %xmm5, %xmm3
  10463. vpclmulqdq $0x00, %xmm8, %xmm5, %xmm0
  10464. vpxor %xmm8, %xmm1, %xmm1
  10465. vpxor %xmm5, %xmm2, %xmm2
  10466. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm1
  10467. vpxor %xmm0, %xmm1, %xmm1
  10468. vpxor %xmm3, %xmm1, %xmm1
  10469. vpxor %xmm0, %xmm4, %xmm4
  10470. vpxor %xmm3, %xmm6, %xmm6
  10471. vpslldq $8, %xmm1, %xmm2
  10472. vpsrldq $8, %xmm1, %xmm1
  10473. vpxor %xmm2, %xmm4, %xmm4
  10474. vpxor %xmm1, %xmm6, %xmm6
  10475. vpslld $31, %xmm4, %xmm0
  10476. vpslld $30, %xmm4, %xmm1
  10477. vpslld $25, %xmm4, %xmm2
  10478. vpxor %xmm1, %xmm0, %xmm0
  10479. vpxor %xmm2, %xmm0, %xmm0
  10480. vmovdqa %xmm0, %xmm1
  10481. vpsrldq $4, %xmm1, %xmm1
  10482. vpslldq $12, %xmm0, %xmm0
  10483. vpxor %xmm0, %xmm4, %xmm4
  10484. vpsrld $0x01, %xmm4, %xmm2
  10485. vpsrld $2, %xmm4, %xmm3
  10486. vpsrld $7, %xmm4, %xmm0
  10487. vpxor %xmm3, %xmm2, %xmm2
  10488. vpxor %xmm0, %xmm2, %xmm2
  10489. vpxor %xmm1, %xmm2, %xmm2
  10490. vpxor %xmm4, %xmm2, %xmm2
  10491. vpxor %xmm2, %xmm6, %xmm6
  10492. vmovdqu (%rsp), %xmm5
  10493. L_AES_GCM_encrypt_update_avx1_done_128:
  10494. movl %r8d, %edx
  10495. cmpl %edx, %r14d
  10496. jge L_AES_GCM_encrypt_update_avx1_done_enc
  10497. movl %r8d, %r13d
  10498. andl $0xfffffff0, %r13d
  10499. cmpl %r13d, %r14d
  10500. jge L_AES_GCM_encrypt_update_avx1_last_block_done
  10501. vmovdqu (%r12), %xmm9
  10502. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
  10503. vpaddd L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
  10504. vmovdqu %xmm9, (%r12)
  10505. vpxor (%rdi), %xmm8, %xmm8
  10506. vaesenc 16(%rdi), %xmm8, %xmm8
  10507. vaesenc 32(%rdi), %xmm8, %xmm8
  10508. vaesenc 48(%rdi), %xmm8, %xmm8
  10509. vaesenc 64(%rdi), %xmm8, %xmm8
  10510. vaesenc 80(%rdi), %xmm8, %xmm8
  10511. vaesenc 96(%rdi), %xmm8, %xmm8
  10512. vaesenc 112(%rdi), %xmm8, %xmm8
  10513. vaesenc 128(%rdi), %xmm8, %xmm8
  10514. vaesenc 144(%rdi), %xmm8, %xmm8
  10515. cmpl $11, %esi
  10516. vmovdqa 160(%rdi), %xmm9
  10517. jl L_AES_GCM_encrypt_update_avx1_aesenc_block_last
  10518. vaesenc %xmm9, %xmm8, %xmm8
  10519. vaesenc 176(%rdi), %xmm8, %xmm8
  10520. cmpl $13, %esi
  10521. vmovdqa 192(%rdi), %xmm9
  10522. jl L_AES_GCM_encrypt_update_avx1_aesenc_block_last
  10523. vaesenc %xmm9, %xmm8, %xmm8
  10524. vaesenc 208(%rdi), %xmm8, %xmm8
  10525. vmovdqa 224(%rdi), %xmm9
  10526. L_AES_GCM_encrypt_update_avx1_aesenc_block_last:
  10527. vaesenclast %xmm9, %xmm8, %xmm8
  10528. vmovdqu (%r11,%r14,1), %xmm9
  10529. vpxor %xmm9, %xmm8, %xmm8
  10530. vmovdqu %xmm8, (%r10,%r14,1)
  10531. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  10532. vpxor %xmm8, %xmm6, %xmm6
  10533. addl $16, %r14d
  10534. cmpl %r13d, %r14d
  10535. jge L_AES_GCM_encrypt_update_avx1_last_block_ghash
  10536. L_AES_GCM_encrypt_update_avx1_last_block_start:
  10537. vmovdqu (%r11,%r14,1), %xmm13
  10538. vmovdqu (%r12), %xmm9
  10539. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
  10540. vpaddd L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
  10541. vmovdqu %xmm9, (%r12)
  10542. vpxor (%rdi), %xmm8, %xmm8
  10543. vpclmulqdq $16, %xmm5, %xmm6, %xmm10
  10544. vaesenc 16(%rdi), %xmm8, %xmm8
  10545. vaesenc 32(%rdi), %xmm8, %xmm8
  10546. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm11
  10547. vaesenc 48(%rdi), %xmm8, %xmm8
  10548. vaesenc 64(%rdi), %xmm8, %xmm8
  10549. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm12
  10550. vaesenc 80(%rdi), %xmm8, %xmm8
  10551. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm1
  10552. vaesenc 96(%rdi), %xmm8, %xmm8
  10553. vpxor %xmm11, %xmm10, %xmm10
  10554. vpslldq $8, %xmm10, %xmm2
  10555. vpsrldq $8, %xmm10, %xmm10
  10556. vaesenc 112(%rdi), %xmm8, %xmm8
  10557. vpxor %xmm12, %xmm2, %xmm2
  10558. vpxor %xmm10, %xmm1, %xmm3
  10559. vmovdqa L_avx1_aes_gcm_mod2_128(%rip), %xmm0
  10560. vpclmulqdq $16, %xmm0, %xmm2, %xmm11
  10561. vaesenc 128(%rdi), %xmm8, %xmm8
  10562. vpshufd $0x4e, %xmm2, %xmm10
  10563. vpxor %xmm11, %xmm10, %xmm10
  10564. vpclmulqdq $16, %xmm0, %xmm10, %xmm11
  10565. vaesenc 144(%rdi), %xmm8, %xmm8
  10566. vpshufd $0x4e, %xmm10, %xmm10
  10567. vpxor %xmm11, %xmm10, %xmm10
  10568. vpxor %xmm3, %xmm10, %xmm6
  10569. cmpl $11, %esi
  10570. vmovdqa 160(%rdi), %xmm9
  10571. jl L_AES_GCM_encrypt_update_avx1_aesenc_gfmul_last
  10572. vaesenc %xmm9, %xmm8, %xmm8
  10573. vaesenc 176(%rdi), %xmm8, %xmm8
  10574. cmpl $13, %esi
  10575. vmovdqa 192(%rdi), %xmm9
  10576. jl L_AES_GCM_encrypt_update_avx1_aesenc_gfmul_last
  10577. vaesenc %xmm9, %xmm8, %xmm8
  10578. vaesenc 208(%rdi), %xmm8, %xmm8
  10579. vmovdqa 224(%rdi), %xmm9
  10580. L_AES_GCM_encrypt_update_avx1_aesenc_gfmul_last:
  10581. vaesenclast %xmm9, %xmm8, %xmm8
  10582. vmovdqa %xmm13, %xmm0
  10583. vpxor %xmm0, %xmm8, %xmm8
  10584. vmovdqu %xmm8, (%r10,%r14,1)
  10585. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
  10586. addl $16, %r14d
  10587. vpxor %xmm8, %xmm6, %xmm6
  10588. cmpl %r13d, %r14d
  10589. jl L_AES_GCM_encrypt_update_avx1_last_block_start
  10590. L_AES_GCM_encrypt_update_avx1_last_block_ghash:
  10591. # ghash_gfmul_red_avx
  10592. vpshufd $0x4e, %xmm5, %xmm9
  10593. vpshufd $0x4e, %xmm6, %xmm10
  10594. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm11
  10595. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  10596. vpxor %xmm5, %xmm9, %xmm9
  10597. vpxor %xmm6, %xmm10, %xmm10
  10598. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  10599. vpxor %xmm8, %xmm9, %xmm9
  10600. vpxor %xmm11, %xmm9, %xmm9
  10601. vpslldq $8, %xmm9, %xmm10
  10602. vpsrldq $8, %xmm9, %xmm9
  10603. vpxor %xmm10, %xmm8, %xmm8
  10604. vpxor %xmm9, %xmm11, %xmm6
  10605. vpslld $31, %xmm8, %xmm12
  10606. vpslld $30, %xmm8, %xmm13
  10607. vpslld $25, %xmm8, %xmm14
  10608. vpxor %xmm13, %xmm12, %xmm12
  10609. vpxor %xmm14, %xmm12, %xmm12
  10610. vpsrldq $4, %xmm12, %xmm13
  10611. vpslldq $12, %xmm12, %xmm12
  10612. vpxor %xmm12, %xmm8, %xmm8
  10613. vpsrld $0x01, %xmm8, %xmm14
  10614. vpsrld $2, %xmm8, %xmm10
  10615. vpsrld $7, %xmm8, %xmm9
  10616. vpxor %xmm10, %xmm14, %xmm14
  10617. vpxor %xmm9, %xmm14, %xmm14
  10618. vpxor %xmm13, %xmm14, %xmm14
  10619. vpxor %xmm8, %xmm14, %xmm14
  10620. vpxor %xmm14, %xmm6, %xmm6
  10621. L_AES_GCM_encrypt_update_avx1_last_block_done:
  10622. L_AES_GCM_encrypt_update_avx1_done_enc:
  10623. vmovdqa %xmm6, (%r9)
  10624. vzeroupper
  10625. addq $0xa0, %rsp
  10626. popq %r14
  10627. popq %r12
  10628. popq %r13
  10629. repz retq
  10630. #ifndef __APPLE__
  10631. .size AES_GCM_encrypt_update_avx1,.-AES_GCM_encrypt_update_avx1
  10632. #endif /* __APPLE__ */
  10633. #ifndef __APPLE__
  10634. .text
  10635. .globl AES_GCM_encrypt_final_avx1
  10636. .type AES_GCM_encrypt_final_avx1,@function
  10637. .align 16
  10638. AES_GCM_encrypt_final_avx1:
  10639. #else
  10640. .section __TEXT,__text
  10641. .globl _AES_GCM_encrypt_final_avx1
  10642. .p2align 4
  10643. _AES_GCM_encrypt_final_avx1:
  10644. #endif /* __APPLE__ */
  10645. pushq %r13
  10646. movl %edx, %eax
  10647. movl %ecx, %r10d
  10648. movl %r8d, %r11d
  10649. movq 16(%rsp), %r8
  10650. subq $16, %rsp
  10651. vmovdqa (%rdi), %xmm4
  10652. vmovdqa (%r9), %xmm5
  10653. vmovdqa (%r8), %xmm6
  10654. vpsrlq $63, %xmm5, %xmm8
  10655. vpsllq $0x01, %xmm5, %xmm7
  10656. vpslldq $8, %xmm8, %xmm8
  10657. vpor %xmm8, %xmm7, %xmm7
  10658. vpshufd $0xff, %xmm5, %xmm5
  10659. vpsrad $31, %xmm5, %xmm5
  10660. vpand L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  10661. vpxor %xmm7, %xmm5, %xmm5
  10662. movl %r10d, %edx
  10663. movl %r11d, %ecx
  10664. shlq $3, %rdx
  10665. shlq $3, %rcx
  10666. vmovq %rdx, %xmm0
  10667. vmovq %rcx, %xmm1
  10668. vpunpcklqdq %xmm1, %xmm0, %xmm0
  10669. vpxor %xmm0, %xmm4, %xmm4
  10670. # ghash_gfmul_red_avx
  10671. vpshufd $0x4e, %xmm5, %xmm8
  10672. vpshufd $0x4e, %xmm4, %xmm9
  10673. vpclmulqdq $0x11, %xmm5, %xmm4, %xmm10
  10674. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm7
  10675. vpxor %xmm5, %xmm8, %xmm8
  10676. vpxor %xmm4, %xmm9, %xmm9
  10677. vpclmulqdq $0x00, %xmm9, %xmm8, %xmm8
  10678. vpxor %xmm7, %xmm8, %xmm8
  10679. vpxor %xmm10, %xmm8, %xmm8
  10680. vpslldq $8, %xmm8, %xmm9
  10681. vpsrldq $8, %xmm8, %xmm8
  10682. vpxor %xmm9, %xmm7, %xmm7
  10683. vpxor %xmm8, %xmm10, %xmm4
  10684. vpslld $31, %xmm7, %xmm11
  10685. vpslld $30, %xmm7, %xmm12
  10686. vpslld $25, %xmm7, %xmm13
  10687. vpxor %xmm12, %xmm11, %xmm11
  10688. vpxor %xmm13, %xmm11, %xmm11
  10689. vpsrldq $4, %xmm11, %xmm12
  10690. vpslldq $12, %xmm11, %xmm11
  10691. vpxor %xmm11, %xmm7, %xmm7
  10692. vpsrld $0x01, %xmm7, %xmm13
  10693. vpsrld $2, %xmm7, %xmm9
  10694. vpsrld $7, %xmm7, %xmm8
  10695. vpxor %xmm9, %xmm13, %xmm13
  10696. vpxor %xmm8, %xmm13, %xmm13
  10697. vpxor %xmm12, %xmm13, %xmm13
  10698. vpxor %xmm7, %xmm13, %xmm13
  10699. vpxor %xmm13, %xmm4, %xmm4
  10700. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  10701. vpxor %xmm6, %xmm4, %xmm0
  10702. cmpl $16, %eax
  10703. je L_AES_GCM_encrypt_final_avx1_store_tag_16
  10704. xorq %rcx, %rcx
  10705. vmovdqu %xmm0, (%rsp)
  10706. L_AES_GCM_encrypt_final_avx1_store_tag_loop:
  10707. movzbl (%rsp,%rcx,1), %r13d
  10708. movb %r13b, (%rsi,%rcx,1)
  10709. incl %ecx
  10710. cmpl %eax, %ecx
  10711. jne L_AES_GCM_encrypt_final_avx1_store_tag_loop
  10712. jmp L_AES_GCM_encrypt_final_avx1_store_tag_done
  10713. L_AES_GCM_encrypt_final_avx1_store_tag_16:
  10714. vmovdqu %xmm0, (%rsi)
  10715. L_AES_GCM_encrypt_final_avx1_store_tag_done:
  10716. vzeroupper
  10717. addq $16, %rsp
  10718. popq %r13
  10719. repz retq
  10720. #ifndef __APPLE__
  10721. .size AES_GCM_encrypt_final_avx1,.-AES_GCM_encrypt_final_avx1
  10722. #endif /* __APPLE__ */
  10723. #ifndef __APPLE__
  10724. .text
  10725. .globl AES_GCM_decrypt_update_avx1
  10726. .type AES_GCM_decrypt_update_avx1,@function
  10727. .align 16
  10728. AES_GCM_decrypt_update_avx1:
  10729. #else
  10730. .section __TEXT,__text
  10731. .globl _AES_GCM_decrypt_update_avx1
  10732. .p2align 4
  10733. _AES_GCM_decrypt_update_avx1:
  10734. #endif /* __APPLE__ */
  10735. pushq %r13
  10736. pushq %r12
  10737. pushq %r14
  10738. movq %rdx, %r10
  10739. movq %rcx, %r11
  10740. movq 32(%rsp), %rax
  10741. movq 40(%rsp), %r12
  10742. subq $0xa8, %rsp
  10743. vmovdqa (%r9), %xmm6
  10744. vmovdqa (%rax), %xmm5
  10745. vpsrlq $63, %xmm5, %xmm9
  10746. vpsllq $0x01, %xmm5, %xmm8
  10747. vpslldq $8, %xmm9, %xmm9
  10748. vpor %xmm9, %xmm8, %xmm8
  10749. vpshufd $0xff, %xmm5, %xmm5
  10750. vpsrad $31, %xmm5, %xmm5
  10751. vpand L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  10752. vpxor %xmm8, %xmm5, %xmm5
  10753. xorl %r14d, %r14d
  10754. cmpl $0x80, %r8d
  10755. movl %r8d, %r13d
  10756. jl L_AES_GCM_decrypt_update_avx1_done_128
  10757. andl $0xffffff80, %r13d
  10758. vmovdqa %xmm6, %xmm2
  10759. # H ^ 1
  10760. vmovdqu %xmm5, (%rsp)
  10761. # H ^ 2
  10762. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm8
  10763. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm0
  10764. vpslld $31, %xmm8, %xmm12
  10765. vpslld $30, %xmm8, %xmm13
  10766. vpslld $25, %xmm8, %xmm14
  10767. vpxor %xmm13, %xmm12, %xmm12
  10768. vpxor %xmm14, %xmm12, %xmm12
  10769. vpsrldq $4, %xmm12, %xmm13
  10770. vpslldq $12, %xmm12, %xmm12
  10771. vpxor %xmm12, %xmm8, %xmm8
  10772. vpsrld $0x01, %xmm8, %xmm14
  10773. vpsrld $2, %xmm8, %xmm10
  10774. vpsrld $7, %xmm8, %xmm9
  10775. vpxor %xmm10, %xmm14, %xmm14
  10776. vpxor %xmm9, %xmm14, %xmm14
  10777. vpxor %xmm13, %xmm14, %xmm14
  10778. vpxor %xmm8, %xmm14, %xmm14
  10779. vpxor %xmm14, %xmm0, %xmm0
  10780. vmovdqu %xmm0, 16(%rsp)
  10781. # H ^ 3
  10782. # ghash_gfmul_red_avx
  10783. vpshufd $0x4e, %xmm5, %xmm9
  10784. vpshufd $0x4e, %xmm0, %xmm10
  10785. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm11
  10786. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm8
  10787. vpxor %xmm5, %xmm9, %xmm9
  10788. vpxor %xmm0, %xmm10, %xmm10
  10789. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  10790. vpxor %xmm8, %xmm9, %xmm9
  10791. vpxor %xmm11, %xmm9, %xmm9
  10792. vpslldq $8, %xmm9, %xmm10
  10793. vpsrldq $8, %xmm9, %xmm9
  10794. vpxor %xmm10, %xmm8, %xmm8
  10795. vpxor %xmm9, %xmm11, %xmm1
  10796. vpslld $31, %xmm8, %xmm12
  10797. vpslld $30, %xmm8, %xmm13
  10798. vpslld $25, %xmm8, %xmm14
  10799. vpxor %xmm13, %xmm12, %xmm12
  10800. vpxor %xmm14, %xmm12, %xmm12
  10801. vpsrldq $4, %xmm12, %xmm13
  10802. vpslldq $12, %xmm12, %xmm12
  10803. vpxor %xmm12, %xmm8, %xmm8
  10804. vpsrld $0x01, %xmm8, %xmm14
  10805. vpsrld $2, %xmm8, %xmm10
  10806. vpsrld $7, %xmm8, %xmm9
  10807. vpxor %xmm10, %xmm14, %xmm14
  10808. vpxor %xmm9, %xmm14, %xmm14
  10809. vpxor %xmm13, %xmm14, %xmm14
  10810. vpxor %xmm8, %xmm14, %xmm14
  10811. vpxor %xmm14, %xmm1, %xmm1
  10812. vmovdqu %xmm1, 32(%rsp)
  10813. # H ^ 4
  10814. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm8
  10815. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm3
  10816. vpslld $31, %xmm8, %xmm12
  10817. vpslld $30, %xmm8, %xmm13
  10818. vpslld $25, %xmm8, %xmm14
  10819. vpxor %xmm13, %xmm12, %xmm12
  10820. vpxor %xmm14, %xmm12, %xmm12
  10821. vpsrldq $4, %xmm12, %xmm13
  10822. vpslldq $12, %xmm12, %xmm12
  10823. vpxor %xmm12, %xmm8, %xmm8
  10824. vpsrld $0x01, %xmm8, %xmm14
  10825. vpsrld $2, %xmm8, %xmm10
  10826. vpsrld $7, %xmm8, %xmm9
  10827. vpxor %xmm10, %xmm14, %xmm14
  10828. vpxor %xmm9, %xmm14, %xmm14
  10829. vpxor %xmm13, %xmm14, %xmm14
  10830. vpxor %xmm8, %xmm14, %xmm14
  10831. vpxor %xmm14, %xmm3, %xmm3
  10832. vmovdqu %xmm3, 48(%rsp)
  10833. # H ^ 5
  10834. # ghash_gfmul_red_avx
  10835. vpshufd $0x4e, %xmm0, %xmm9
  10836. vpshufd $0x4e, %xmm1, %xmm10
  10837. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm11
  10838. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm8
  10839. vpxor %xmm0, %xmm9, %xmm9
  10840. vpxor %xmm1, %xmm10, %xmm10
  10841. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  10842. vpxor %xmm8, %xmm9, %xmm9
  10843. vpxor %xmm11, %xmm9, %xmm9
  10844. vpslldq $8, %xmm9, %xmm10
  10845. vpsrldq $8, %xmm9, %xmm9
  10846. vpxor %xmm10, %xmm8, %xmm8
  10847. vpxor %xmm9, %xmm11, %xmm7
  10848. vpslld $31, %xmm8, %xmm12
  10849. vpslld $30, %xmm8, %xmm13
  10850. vpslld $25, %xmm8, %xmm14
  10851. vpxor %xmm13, %xmm12, %xmm12
  10852. vpxor %xmm14, %xmm12, %xmm12
  10853. vpsrldq $4, %xmm12, %xmm13
  10854. vpslldq $12, %xmm12, %xmm12
  10855. vpxor %xmm12, %xmm8, %xmm8
  10856. vpsrld $0x01, %xmm8, %xmm14
  10857. vpsrld $2, %xmm8, %xmm10
  10858. vpsrld $7, %xmm8, %xmm9
  10859. vpxor %xmm10, %xmm14, %xmm14
  10860. vpxor %xmm9, %xmm14, %xmm14
  10861. vpxor %xmm13, %xmm14, %xmm14
  10862. vpxor %xmm8, %xmm14, %xmm14
  10863. vpxor %xmm14, %xmm7, %xmm7
  10864. vmovdqu %xmm7, 64(%rsp)
  10865. # H ^ 6
  10866. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm8
  10867. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm7
  10868. vpslld $31, %xmm8, %xmm12
  10869. vpslld $30, %xmm8, %xmm13
  10870. vpslld $25, %xmm8, %xmm14
  10871. vpxor %xmm13, %xmm12, %xmm12
  10872. vpxor %xmm14, %xmm12, %xmm12
  10873. vpsrldq $4, %xmm12, %xmm13
  10874. vpslldq $12, %xmm12, %xmm12
  10875. vpxor %xmm12, %xmm8, %xmm8
  10876. vpsrld $0x01, %xmm8, %xmm14
  10877. vpsrld $2, %xmm8, %xmm10
  10878. vpsrld $7, %xmm8, %xmm9
  10879. vpxor %xmm10, %xmm14, %xmm14
  10880. vpxor %xmm9, %xmm14, %xmm14
  10881. vpxor %xmm13, %xmm14, %xmm14
  10882. vpxor %xmm8, %xmm14, %xmm14
  10883. vpxor %xmm14, %xmm7, %xmm7
  10884. vmovdqu %xmm7, 80(%rsp)
  10885. # H ^ 7
  10886. # ghash_gfmul_red_avx
  10887. vpshufd $0x4e, %xmm1, %xmm9
  10888. vpshufd $0x4e, %xmm3, %xmm10
  10889. vpclmulqdq $0x11, %xmm1, %xmm3, %xmm11
  10890. vpclmulqdq $0x00, %xmm1, %xmm3, %xmm8
  10891. vpxor %xmm1, %xmm9, %xmm9
  10892. vpxor %xmm3, %xmm10, %xmm10
  10893. vpclmulqdq $0x00, %xmm10, %xmm9, %xmm9
  10894. vpxor %xmm8, %xmm9, %xmm9
  10895. vpxor %xmm11, %xmm9, %xmm9
  10896. vpslldq $8, %xmm9, %xmm10
  10897. vpsrldq $8, %xmm9, %xmm9
  10898. vpxor %xmm10, %xmm8, %xmm8
  10899. vpxor %xmm9, %xmm11, %xmm7
  10900. vpslld $31, %xmm8, %xmm12
  10901. vpslld $30, %xmm8, %xmm13
  10902. vpslld $25, %xmm8, %xmm14
  10903. vpxor %xmm13, %xmm12, %xmm12
  10904. vpxor %xmm14, %xmm12, %xmm12
  10905. vpsrldq $4, %xmm12, %xmm13
  10906. vpslldq $12, %xmm12, %xmm12
  10907. vpxor %xmm12, %xmm8, %xmm8
  10908. vpsrld $0x01, %xmm8, %xmm14
  10909. vpsrld $2, %xmm8, %xmm10
  10910. vpsrld $7, %xmm8, %xmm9
  10911. vpxor %xmm10, %xmm14, %xmm14
  10912. vpxor %xmm9, %xmm14, %xmm14
  10913. vpxor %xmm13, %xmm14, %xmm14
  10914. vpxor %xmm8, %xmm14, %xmm14
  10915. vpxor %xmm14, %xmm7, %xmm7
  10916. vmovdqu %xmm7, 96(%rsp)
  10917. # H ^ 8
  10918. vpclmulqdq $0x00, %xmm3, %xmm3, %xmm8
  10919. vpclmulqdq $0x11, %xmm3, %xmm3, %xmm7
  10920. vpslld $31, %xmm8, %xmm12
  10921. vpslld $30, %xmm8, %xmm13
  10922. vpslld $25, %xmm8, %xmm14
  10923. vpxor %xmm13, %xmm12, %xmm12
  10924. vpxor %xmm14, %xmm12, %xmm12
  10925. vpsrldq $4, %xmm12, %xmm13
  10926. vpslldq $12, %xmm12, %xmm12
  10927. vpxor %xmm12, %xmm8, %xmm8
  10928. vpsrld $0x01, %xmm8, %xmm14
  10929. vpsrld $2, %xmm8, %xmm10
  10930. vpsrld $7, %xmm8, %xmm9
  10931. vpxor %xmm10, %xmm14, %xmm14
  10932. vpxor %xmm9, %xmm14, %xmm14
  10933. vpxor %xmm13, %xmm14, %xmm14
  10934. vpxor %xmm8, %xmm14, %xmm14
  10935. vpxor %xmm14, %xmm7, %xmm7
  10936. vmovdqu %xmm7, 112(%rsp)
  10937. L_AES_GCM_decrypt_update_avx1_ghash_128:
  10938. leaq (%r11,%r14,1), %rcx
  10939. leaq (%r10,%r14,1), %rdx
  10940. vmovdqu (%r12), %xmm0
  10941. vmovdqa L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
  10942. vpshufb %xmm1, %xmm0, %xmm8
  10943. vpaddd L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
  10944. vpshufb %xmm1, %xmm9, %xmm9
  10945. vpaddd L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
  10946. vpshufb %xmm1, %xmm10, %xmm10
  10947. vpaddd L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
  10948. vpshufb %xmm1, %xmm11, %xmm11
  10949. vpaddd L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
  10950. vpshufb %xmm1, %xmm12, %xmm12
  10951. vpaddd L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
  10952. vpshufb %xmm1, %xmm13, %xmm13
  10953. vpaddd L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
  10954. vpshufb %xmm1, %xmm14, %xmm14
  10955. vpaddd L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
  10956. vpshufb %xmm1, %xmm15, %xmm15
  10957. vpaddd L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
  10958. vmovdqa (%rdi), %xmm7
  10959. vmovdqu %xmm0, (%r12)
  10960. vpxor %xmm7, %xmm8, %xmm8
  10961. vpxor %xmm7, %xmm9, %xmm9
  10962. vpxor %xmm7, %xmm10, %xmm10
  10963. vpxor %xmm7, %xmm11, %xmm11
  10964. vpxor %xmm7, %xmm12, %xmm12
  10965. vpxor %xmm7, %xmm13, %xmm13
  10966. vpxor %xmm7, %xmm14, %xmm14
  10967. vpxor %xmm7, %xmm15, %xmm15
  10968. vmovdqu 112(%rsp), %xmm7
  10969. vmovdqu (%rcx), %xmm0
  10970. vaesenc 16(%rdi), %xmm8, %xmm8
  10971. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10972. vpxor %xmm2, %xmm0, %xmm0
  10973. vpshufd $0x4e, %xmm7, %xmm1
  10974. vpshufd $0x4e, %xmm0, %xmm5
  10975. vpxor %xmm7, %xmm1, %xmm1
  10976. vpxor %xmm0, %xmm5, %xmm5
  10977. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm3
  10978. vaesenc 16(%rdi), %xmm9, %xmm9
  10979. vaesenc 16(%rdi), %xmm10, %xmm10
  10980. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm2
  10981. vaesenc 16(%rdi), %xmm11, %xmm11
  10982. vaesenc 16(%rdi), %xmm12, %xmm12
  10983. vpclmulqdq $0x00, %xmm5, %xmm1, %xmm1
  10984. vaesenc 16(%rdi), %xmm13, %xmm13
  10985. vaesenc 16(%rdi), %xmm14, %xmm14
  10986. vaesenc 16(%rdi), %xmm15, %xmm15
  10987. vpxor %xmm2, %xmm1, %xmm1
  10988. vpxor %xmm3, %xmm1, %xmm1
  10989. vmovdqu 96(%rsp), %xmm7
  10990. vmovdqu 16(%rcx), %xmm0
  10991. vpshufd $0x4e, %xmm7, %xmm4
  10992. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  10993. vaesenc 32(%rdi), %xmm8, %xmm8
  10994. vpxor %xmm7, %xmm4, %xmm4
  10995. vpshufd $0x4e, %xmm0, %xmm5
  10996. vpxor %xmm0, %xmm5, %xmm5
  10997. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  10998. vaesenc 32(%rdi), %xmm9, %xmm9
  10999. vaesenc 32(%rdi), %xmm10, %xmm10
  11000. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11001. vaesenc 32(%rdi), %xmm11, %xmm11
  11002. vaesenc 32(%rdi), %xmm12, %xmm12
  11003. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11004. vaesenc 32(%rdi), %xmm13, %xmm13
  11005. vaesenc 32(%rdi), %xmm14, %xmm14
  11006. vaesenc 32(%rdi), %xmm15, %xmm15
  11007. vpxor %xmm7, %xmm1, %xmm1
  11008. vpxor %xmm7, %xmm2, %xmm2
  11009. vpxor %xmm6, %xmm1, %xmm1
  11010. vpxor %xmm6, %xmm3, %xmm3
  11011. vpxor %xmm4, %xmm1, %xmm1
  11012. vmovdqu 80(%rsp), %xmm7
  11013. vmovdqu 32(%rcx), %xmm0
  11014. vpshufd $0x4e, %xmm7, %xmm4
  11015. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11016. vaesenc 48(%rdi), %xmm8, %xmm8
  11017. vpxor %xmm7, %xmm4, %xmm4
  11018. vpshufd $0x4e, %xmm0, %xmm5
  11019. vpxor %xmm0, %xmm5, %xmm5
  11020. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  11021. vaesenc 48(%rdi), %xmm9, %xmm9
  11022. vaesenc 48(%rdi), %xmm10, %xmm10
  11023. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11024. vaesenc 48(%rdi), %xmm11, %xmm11
  11025. vaesenc 48(%rdi), %xmm12, %xmm12
  11026. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11027. vaesenc 48(%rdi), %xmm13, %xmm13
  11028. vaesenc 48(%rdi), %xmm14, %xmm14
  11029. vaesenc 48(%rdi), %xmm15, %xmm15
  11030. vpxor %xmm7, %xmm1, %xmm1
  11031. vpxor %xmm7, %xmm2, %xmm2
  11032. vpxor %xmm6, %xmm1, %xmm1
  11033. vpxor %xmm6, %xmm3, %xmm3
  11034. vpxor %xmm4, %xmm1, %xmm1
  11035. vmovdqu 64(%rsp), %xmm7
  11036. vmovdqu 48(%rcx), %xmm0
  11037. vpshufd $0x4e, %xmm7, %xmm4
  11038. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11039. vaesenc 64(%rdi), %xmm8, %xmm8
  11040. vpxor %xmm7, %xmm4, %xmm4
  11041. vpshufd $0x4e, %xmm0, %xmm5
  11042. vpxor %xmm0, %xmm5, %xmm5
  11043. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  11044. vaesenc 64(%rdi), %xmm9, %xmm9
  11045. vaesenc 64(%rdi), %xmm10, %xmm10
  11046. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11047. vaesenc 64(%rdi), %xmm11, %xmm11
  11048. vaesenc 64(%rdi), %xmm12, %xmm12
  11049. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11050. vaesenc 64(%rdi), %xmm13, %xmm13
  11051. vaesenc 64(%rdi), %xmm14, %xmm14
  11052. vaesenc 64(%rdi), %xmm15, %xmm15
  11053. vpxor %xmm7, %xmm1, %xmm1
  11054. vpxor %xmm7, %xmm2, %xmm2
  11055. vpxor %xmm6, %xmm1, %xmm1
  11056. vpxor %xmm6, %xmm3, %xmm3
  11057. vpxor %xmm4, %xmm1, %xmm1
  11058. vmovdqu 48(%rsp), %xmm7
  11059. vmovdqu 64(%rcx), %xmm0
  11060. vpshufd $0x4e, %xmm7, %xmm4
  11061. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11062. vaesenc 80(%rdi), %xmm8, %xmm8
  11063. vpxor %xmm7, %xmm4, %xmm4
  11064. vpshufd $0x4e, %xmm0, %xmm5
  11065. vpxor %xmm0, %xmm5, %xmm5
  11066. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  11067. vaesenc 80(%rdi), %xmm9, %xmm9
  11068. vaesenc 80(%rdi), %xmm10, %xmm10
  11069. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11070. vaesenc 80(%rdi), %xmm11, %xmm11
  11071. vaesenc 80(%rdi), %xmm12, %xmm12
  11072. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11073. vaesenc 80(%rdi), %xmm13, %xmm13
  11074. vaesenc 80(%rdi), %xmm14, %xmm14
  11075. vaesenc 80(%rdi), %xmm15, %xmm15
  11076. vpxor %xmm7, %xmm1, %xmm1
  11077. vpxor %xmm7, %xmm2, %xmm2
  11078. vpxor %xmm6, %xmm1, %xmm1
  11079. vpxor %xmm6, %xmm3, %xmm3
  11080. vpxor %xmm4, %xmm1, %xmm1
  11081. vmovdqu 32(%rsp), %xmm7
  11082. vmovdqu 80(%rcx), %xmm0
  11083. vpshufd $0x4e, %xmm7, %xmm4
  11084. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11085. vaesenc 96(%rdi), %xmm8, %xmm8
  11086. vpxor %xmm7, %xmm4, %xmm4
  11087. vpshufd $0x4e, %xmm0, %xmm5
  11088. vpxor %xmm0, %xmm5, %xmm5
  11089. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  11090. vaesenc 96(%rdi), %xmm9, %xmm9
  11091. vaesenc 96(%rdi), %xmm10, %xmm10
  11092. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11093. vaesenc 96(%rdi), %xmm11, %xmm11
  11094. vaesenc 96(%rdi), %xmm12, %xmm12
  11095. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11096. vaesenc 96(%rdi), %xmm13, %xmm13
  11097. vaesenc 96(%rdi), %xmm14, %xmm14
  11098. vaesenc 96(%rdi), %xmm15, %xmm15
  11099. vpxor %xmm7, %xmm1, %xmm1
  11100. vpxor %xmm7, %xmm2, %xmm2
  11101. vpxor %xmm6, %xmm1, %xmm1
  11102. vpxor %xmm6, %xmm3, %xmm3
  11103. vpxor %xmm4, %xmm1, %xmm1
  11104. vmovdqu 16(%rsp), %xmm7
  11105. vmovdqu 96(%rcx), %xmm0
  11106. vpshufd $0x4e, %xmm7, %xmm4
  11107. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11108. vaesenc 112(%rdi), %xmm8, %xmm8
  11109. vpxor %xmm7, %xmm4, %xmm4
  11110. vpshufd $0x4e, %xmm0, %xmm5
  11111. vpxor %xmm0, %xmm5, %xmm5
  11112. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  11113. vaesenc 112(%rdi), %xmm9, %xmm9
  11114. vaesenc 112(%rdi), %xmm10, %xmm10
  11115. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11116. vaesenc 112(%rdi), %xmm11, %xmm11
  11117. vaesenc 112(%rdi), %xmm12, %xmm12
  11118. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11119. vaesenc 112(%rdi), %xmm13, %xmm13
  11120. vaesenc 112(%rdi), %xmm14, %xmm14
  11121. vaesenc 112(%rdi), %xmm15, %xmm15
  11122. vpxor %xmm7, %xmm1, %xmm1
  11123. vpxor %xmm7, %xmm2, %xmm2
  11124. vpxor %xmm6, %xmm1, %xmm1
  11125. vpxor %xmm6, %xmm3, %xmm3
  11126. vpxor %xmm4, %xmm1, %xmm1
  11127. vmovdqu (%rsp), %xmm7
  11128. vmovdqu 112(%rcx), %xmm0
  11129. vpshufd $0x4e, %xmm7, %xmm4
  11130. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11131. vaesenc 128(%rdi), %xmm8, %xmm8
  11132. vpxor %xmm7, %xmm4, %xmm4
  11133. vpshufd $0x4e, %xmm0, %xmm5
  11134. vpxor %xmm0, %xmm5, %xmm5
  11135. vpclmulqdq $0x11, %xmm7, %xmm0, %xmm6
  11136. vaesenc 128(%rdi), %xmm9, %xmm9
  11137. vaesenc 128(%rdi), %xmm10, %xmm10
  11138. vpclmulqdq $0x00, %xmm7, %xmm0, %xmm7
  11139. vaesenc 128(%rdi), %xmm11, %xmm11
  11140. vaesenc 128(%rdi), %xmm12, %xmm12
  11141. vpclmulqdq $0x00, %xmm5, %xmm4, %xmm4
  11142. vaesenc 128(%rdi), %xmm13, %xmm13
  11143. vaesenc 128(%rdi), %xmm14, %xmm14
  11144. vaesenc 128(%rdi), %xmm15, %xmm15
  11145. vpxor %xmm7, %xmm1, %xmm1
  11146. vpxor %xmm7, %xmm2, %xmm2
  11147. vpxor %xmm6, %xmm1, %xmm1
  11148. vpxor %xmm6, %xmm3, %xmm3
  11149. vpxor %xmm4, %xmm1, %xmm1
  11150. vpslldq $8, %xmm1, %xmm5
  11151. vpsrldq $8, %xmm1, %xmm1
  11152. vaesenc 144(%rdi), %xmm8, %xmm8
  11153. vpxor %xmm5, %xmm2, %xmm2
  11154. vpxor %xmm1, %xmm3, %xmm3
  11155. vaesenc 144(%rdi), %xmm9, %xmm9
  11156. vpslld $31, %xmm2, %xmm7
  11157. vpslld $30, %xmm2, %xmm4
  11158. vpslld $25, %xmm2, %xmm5
  11159. vaesenc 144(%rdi), %xmm10, %xmm10
  11160. vpxor %xmm4, %xmm7, %xmm7
  11161. vpxor %xmm5, %xmm7, %xmm7
  11162. vaesenc 144(%rdi), %xmm11, %xmm11
  11163. vpsrldq $4, %xmm7, %xmm4
  11164. vpslldq $12, %xmm7, %xmm7
  11165. vaesenc 144(%rdi), %xmm12, %xmm12
  11166. vpxor %xmm7, %xmm2, %xmm2
  11167. vpsrld $0x01, %xmm2, %xmm5
  11168. vaesenc 144(%rdi), %xmm13, %xmm13
  11169. vpsrld $2, %xmm2, %xmm1
  11170. vpsrld $7, %xmm2, %xmm0
  11171. vaesenc 144(%rdi), %xmm14, %xmm14
  11172. vpxor %xmm1, %xmm5, %xmm5
  11173. vpxor %xmm0, %xmm5, %xmm5
  11174. vaesenc 144(%rdi), %xmm15, %xmm15
  11175. vpxor %xmm4, %xmm5, %xmm5
  11176. vpxor %xmm5, %xmm2, %xmm2
  11177. vpxor %xmm3, %xmm2, %xmm2
  11178. cmpl $11, %esi
  11179. vmovdqa 160(%rdi), %xmm7
  11180. jl L_AES_GCM_decrypt_update_avx1_aesenc_128_ghash_avx_done
  11181. vaesenc %xmm7, %xmm8, %xmm8
  11182. vaesenc %xmm7, %xmm9, %xmm9
  11183. vaesenc %xmm7, %xmm10, %xmm10
  11184. vaesenc %xmm7, %xmm11, %xmm11
  11185. vaesenc %xmm7, %xmm12, %xmm12
  11186. vaesenc %xmm7, %xmm13, %xmm13
  11187. vaesenc %xmm7, %xmm14, %xmm14
  11188. vaesenc %xmm7, %xmm15, %xmm15
  11189. vmovdqa 176(%rdi), %xmm7
  11190. vaesenc %xmm7, %xmm8, %xmm8
  11191. vaesenc %xmm7, %xmm9, %xmm9
  11192. vaesenc %xmm7, %xmm10, %xmm10
  11193. vaesenc %xmm7, %xmm11, %xmm11
  11194. vaesenc %xmm7, %xmm12, %xmm12
  11195. vaesenc %xmm7, %xmm13, %xmm13
  11196. vaesenc %xmm7, %xmm14, %xmm14
  11197. vaesenc %xmm7, %xmm15, %xmm15
  11198. cmpl $13, %esi
  11199. vmovdqa 192(%rdi), %xmm7
  11200. jl L_AES_GCM_decrypt_update_avx1_aesenc_128_ghash_avx_done
  11201. vaesenc %xmm7, %xmm8, %xmm8
  11202. vaesenc %xmm7, %xmm9, %xmm9
  11203. vaesenc %xmm7, %xmm10, %xmm10
  11204. vaesenc %xmm7, %xmm11, %xmm11
  11205. vaesenc %xmm7, %xmm12, %xmm12
  11206. vaesenc %xmm7, %xmm13, %xmm13
  11207. vaesenc %xmm7, %xmm14, %xmm14
  11208. vaesenc %xmm7, %xmm15, %xmm15
  11209. vmovdqa 208(%rdi), %xmm7
  11210. vaesenc %xmm7, %xmm8, %xmm8
  11211. vaesenc %xmm7, %xmm9, %xmm9
  11212. vaesenc %xmm7, %xmm10, %xmm10
  11213. vaesenc %xmm7, %xmm11, %xmm11
  11214. vaesenc %xmm7, %xmm12, %xmm12
  11215. vaesenc %xmm7, %xmm13, %xmm13
  11216. vaesenc %xmm7, %xmm14, %xmm14
  11217. vaesenc %xmm7, %xmm15, %xmm15
  11218. vmovdqa 224(%rdi), %xmm7
  11219. L_AES_GCM_decrypt_update_avx1_aesenc_128_ghash_avx_done:
  11220. vaesenclast %xmm7, %xmm8, %xmm8
  11221. vaesenclast %xmm7, %xmm9, %xmm9
  11222. vmovdqu (%rcx), %xmm0
  11223. vmovdqu 16(%rcx), %xmm1
  11224. vpxor %xmm0, %xmm8, %xmm8
  11225. vpxor %xmm1, %xmm9, %xmm9
  11226. vmovdqu %xmm8, (%rdx)
  11227. vmovdqu %xmm9, 16(%rdx)
  11228. vaesenclast %xmm7, %xmm10, %xmm10
  11229. vaesenclast %xmm7, %xmm11, %xmm11
  11230. vmovdqu 32(%rcx), %xmm0
  11231. vmovdqu 48(%rcx), %xmm1
  11232. vpxor %xmm0, %xmm10, %xmm10
  11233. vpxor %xmm1, %xmm11, %xmm11
  11234. vmovdqu %xmm10, 32(%rdx)
  11235. vmovdqu %xmm11, 48(%rdx)
  11236. vaesenclast %xmm7, %xmm12, %xmm12
  11237. vaesenclast %xmm7, %xmm13, %xmm13
  11238. vmovdqu 64(%rcx), %xmm0
  11239. vmovdqu 80(%rcx), %xmm1
  11240. vpxor %xmm0, %xmm12, %xmm12
  11241. vpxor %xmm1, %xmm13, %xmm13
  11242. vmovdqu %xmm12, 64(%rdx)
  11243. vmovdqu %xmm13, 80(%rdx)
  11244. vaesenclast %xmm7, %xmm14, %xmm14
  11245. vaesenclast %xmm7, %xmm15, %xmm15
  11246. vmovdqu 96(%rcx), %xmm0
  11247. vmovdqu 112(%rcx), %xmm1
  11248. vpxor %xmm0, %xmm14, %xmm14
  11249. vpxor %xmm1, %xmm15, %xmm15
  11250. vmovdqu %xmm14, 96(%rdx)
  11251. vmovdqu %xmm15, 112(%rdx)
  11252. addl $0x80, %r14d
  11253. cmpl %r13d, %r14d
  11254. jl L_AES_GCM_decrypt_update_avx1_ghash_128
  11255. vmovdqa %xmm2, %xmm6
  11256. vmovdqu (%rsp), %xmm5
  11257. L_AES_GCM_decrypt_update_avx1_done_128:
  11258. movl %r8d, %edx
  11259. cmpl %edx, %r14d
  11260. jge L_AES_GCM_decrypt_update_avx1_done_dec
  11261. movl %r8d, %r13d
  11262. andl $0xfffffff0, %r13d
  11263. cmpl %r13d, %r14d
  11264. jge L_AES_GCM_decrypt_update_avx1_last_block_done
  11265. L_AES_GCM_decrypt_update_avx1_last_block_start:
  11266. vmovdqu (%r11,%r14,1), %xmm13
  11267. vmovdqa %xmm5, %xmm0
  11268. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm13, %xmm1
  11269. vpxor %xmm6, %xmm1, %xmm1
  11270. vmovdqu (%r12), %xmm9
  11271. vpshufb L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
  11272. vpaddd L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
  11273. vmovdqu %xmm9, (%r12)
  11274. vpxor (%rdi), %xmm8, %xmm8
  11275. vpclmulqdq $16, %xmm0, %xmm1, %xmm10
  11276. vaesenc 16(%rdi), %xmm8, %xmm8
  11277. vaesenc 32(%rdi), %xmm8, %xmm8
  11278. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm11
  11279. vaesenc 48(%rdi), %xmm8, %xmm8
  11280. vaesenc 64(%rdi), %xmm8, %xmm8
  11281. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm12
  11282. vaesenc 80(%rdi), %xmm8, %xmm8
  11283. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  11284. vaesenc 96(%rdi), %xmm8, %xmm8
  11285. vpxor %xmm11, %xmm10, %xmm10
  11286. vpslldq $8, %xmm10, %xmm2
  11287. vpsrldq $8, %xmm10, %xmm10
  11288. vaesenc 112(%rdi), %xmm8, %xmm8
  11289. vpxor %xmm12, %xmm2, %xmm2
  11290. vpxor %xmm10, %xmm1, %xmm3
  11291. vmovdqa L_avx1_aes_gcm_mod2_128(%rip), %xmm0
  11292. vpclmulqdq $16, %xmm0, %xmm2, %xmm11
  11293. vaesenc 128(%rdi), %xmm8, %xmm8
  11294. vpshufd $0x4e, %xmm2, %xmm10
  11295. vpxor %xmm11, %xmm10, %xmm10
  11296. vpclmulqdq $16, %xmm0, %xmm10, %xmm11
  11297. vaesenc 144(%rdi), %xmm8, %xmm8
  11298. vpshufd $0x4e, %xmm10, %xmm10
  11299. vpxor %xmm11, %xmm10, %xmm10
  11300. vpxor %xmm3, %xmm10, %xmm6
  11301. cmpl $11, %esi
  11302. vmovdqa 160(%rdi), %xmm9
  11303. jl L_AES_GCM_decrypt_update_avx1_aesenc_gfmul_last
  11304. vaesenc %xmm9, %xmm8, %xmm8
  11305. vaesenc 176(%rdi), %xmm8, %xmm8
  11306. cmpl $13, %esi
  11307. vmovdqa 192(%rdi), %xmm9
  11308. jl L_AES_GCM_decrypt_update_avx1_aesenc_gfmul_last
  11309. vaesenc %xmm9, %xmm8, %xmm8
  11310. vaesenc 208(%rdi), %xmm8, %xmm8
  11311. vmovdqa 224(%rdi), %xmm9
  11312. L_AES_GCM_decrypt_update_avx1_aesenc_gfmul_last:
  11313. vaesenclast %xmm9, %xmm8, %xmm8
  11314. vmovdqa %xmm13, %xmm0
  11315. vpxor %xmm0, %xmm8, %xmm8
  11316. vmovdqu %xmm8, (%r10,%r14,1)
  11317. addl $16, %r14d
  11318. cmpl %r13d, %r14d
  11319. jl L_AES_GCM_decrypt_update_avx1_last_block_start
  11320. L_AES_GCM_decrypt_update_avx1_last_block_done:
  11321. L_AES_GCM_decrypt_update_avx1_done_dec:
  11322. vmovdqa %xmm6, (%r9)
  11323. vzeroupper
  11324. addq $0xa8, %rsp
  11325. popq %r14
  11326. popq %r12
  11327. popq %r13
  11328. repz retq
  11329. #ifndef __APPLE__
  11330. .size AES_GCM_decrypt_update_avx1,.-AES_GCM_decrypt_update_avx1
  11331. #endif /* __APPLE__ */
  11332. #ifndef __APPLE__
  11333. .text
  11334. .globl AES_GCM_decrypt_final_avx1
  11335. .type AES_GCM_decrypt_final_avx1,@function
  11336. .align 16
  11337. AES_GCM_decrypt_final_avx1:
  11338. #else
  11339. .section __TEXT,__text
  11340. .globl _AES_GCM_decrypt_final_avx1
  11341. .p2align 4
  11342. _AES_GCM_decrypt_final_avx1:
  11343. #endif /* __APPLE__ */
  11344. pushq %r13
  11345. pushq %rbp
  11346. pushq %r12
  11347. movl %edx, %eax
  11348. movl %ecx, %r10d
  11349. movl %r8d, %r11d
  11350. movq 32(%rsp), %r8
  11351. movq 40(%rsp), %rbp
  11352. subq $16, %rsp
  11353. vmovdqa (%rdi), %xmm6
  11354. vmovdqa (%r9), %xmm5
  11355. vmovdqa (%r8), %xmm15
  11356. vpsrlq $63, %xmm5, %xmm8
  11357. vpsllq $0x01, %xmm5, %xmm7
  11358. vpslldq $8, %xmm8, %xmm8
  11359. vpor %xmm8, %xmm7, %xmm7
  11360. vpshufd $0xff, %xmm5, %xmm5
  11361. vpsrad $31, %xmm5, %xmm5
  11362. vpand L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  11363. vpxor %xmm7, %xmm5, %xmm5
  11364. movl %r10d, %edx
  11365. movl %r11d, %ecx
  11366. shlq $3, %rdx
  11367. shlq $3, %rcx
  11368. vmovq %rdx, %xmm0
  11369. vmovq %rcx, %xmm1
  11370. vpunpcklqdq %xmm1, %xmm0, %xmm0
  11371. vpxor %xmm0, %xmm6, %xmm6
  11372. # ghash_gfmul_red_avx
  11373. vpshufd $0x4e, %xmm5, %xmm8
  11374. vpshufd $0x4e, %xmm6, %xmm9
  11375. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm10
  11376. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm7
  11377. vpxor %xmm5, %xmm8, %xmm8
  11378. vpxor %xmm6, %xmm9, %xmm9
  11379. vpclmulqdq $0x00, %xmm9, %xmm8, %xmm8
  11380. vpxor %xmm7, %xmm8, %xmm8
  11381. vpxor %xmm10, %xmm8, %xmm8
  11382. vpslldq $8, %xmm8, %xmm9
  11383. vpsrldq $8, %xmm8, %xmm8
  11384. vpxor %xmm9, %xmm7, %xmm7
  11385. vpxor %xmm8, %xmm10, %xmm6
  11386. vpslld $31, %xmm7, %xmm11
  11387. vpslld $30, %xmm7, %xmm12
  11388. vpslld $25, %xmm7, %xmm13
  11389. vpxor %xmm12, %xmm11, %xmm11
  11390. vpxor %xmm13, %xmm11, %xmm11
  11391. vpsrldq $4, %xmm11, %xmm12
  11392. vpslldq $12, %xmm11, %xmm11
  11393. vpxor %xmm11, %xmm7, %xmm7
  11394. vpsrld $0x01, %xmm7, %xmm13
  11395. vpsrld $2, %xmm7, %xmm9
  11396. vpsrld $7, %xmm7, %xmm8
  11397. vpxor %xmm9, %xmm13, %xmm13
  11398. vpxor %xmm8, %xmm13, %xmm13
  11399. vpxor %xmm12, %xmm13, %xmm13
  11400. vpxor %xmm7, %xmm13, %xmm13
  11401. vpxor %xmm13, %xmm6, %xmm6
  11402. vpshufb L_avx1_aes_gcm_bswap_mask(%rip), %xmm6, %xmm6
  11403. vpxor %xmm15, %xmm6, %xmm0
  11404. cmpl $16, %eax
  11405. je L_AES_GCM_decrypt_final_avx1_cmp_tag_16
  11406. subq $16, %rsp
  11407. xorq %rcx, %rcx
  11408. xorq %r12, %r12
  11409. vmovdqu %xmm0, (%rsp)
  11410. L_AES_GCM_decrypt_final_avx1_cmp_tag_loop:
  11411. movzbl (%rsp,%rcx,1), %r13d
  11412. xorb (%rsi,%rcx,1), %r13b
  11413. orb %r13b, %r12b
  11414. incl %ecx
  11415. cmpl %eax, %ecx
  11416. jne L_AES_GCM_decrypt_final_avx1_cmp_tag_loop
  11417. cmpb $0x00, %r12b
  11418. sete %r12b
  11419. addq $16, %rsp
  11420. xorq %rcx, %rcx
  11421. jmp L_AES_GCM_decrypt_final_avx1_cmp_tag_done
  11422. L_AES_GCM_decrypt_final_avx1_cmp_tag_16:
  11423. vmovdqu (%rsi), %xmm1
  11424. vpcmpeqb %xmm1, %xmm0, %xmm0
  11425. vpmovmskb %xmm0, %rdx
  11426. # %%edx == 0xFFFF then return 1 else => return 0
  11427. xorl %r12d, %r12d
  11428. cmpl $0xffff, %edx
  11429. sete %r12b
  11430. L_AES_GCM_decrypt_final_avx1_cmp_tag_done:
  11431. movl %r12d, (%rbp)
  11432. vzeroupper
  11433. addq $16, %rsp
  11434. popq %r12
  11435. popq %rbp
  11436. popq %r13
  11437. repz retq
  11438. #ifndef __APPLE__
  11439. .size AES_GCM_decrypt_final_avx1,.-AES_GCM_decrypt_final_avx1
  11440. #endif /* __APPLE__ */
  11441. #endif /* WOLFSSL_AESGCM_STREAM */
  11442. #endif /* HAVE_INTEL_AVX1 */
  11443. #ifdef HAVE_INTEL_AVX2
  11444. #ifndef __APPLE__
  11445. .data
  11446. #else
  11447. .section __DATA,__data
  11448. #endif /* __APPLE__ */
  11449. #ifndef __APPLE__
  11450. .align 16
  11451. #else
  11452. .p2align 4
  11453. #endif /* __APPLE__ */
  11454. L_avx2_aes_gcm_one:
  11455. .quad 0x0, 0x1
  11456. #ifndef __APPLE__
  11457. .data
  11458. #else
  11459. .section __DATA,__data
  11460. #endif /* __APPLE__ */
  11461. #ifndef __APPLE__
  11462. .align 16
  11463. #else
  11464. .p2align 4
  11465. #endif /* __APPLE__ */
  11466. L_avx2_aes_gcm_two:
  11467. .quad 0x0, 0x2
  11468. #ifndef __APPLE__
  11469. .data
  11470. #else
  11471. .section __DATA,__data
  11472. #endif /* __APPLE__ */
  11473. #ifndef __APPLE__
  11474. .align 16
  11475. #else
  11476. .p2align 4
  11477. #endif /* __APPLE__ */
  11478. L_avx2_aes_gcm_three:
  11479. .quad 0x0, 0x3
  11480. #ifndef __APPLE__
  11481. .data
  11482. #else
  11483. .section __DATA,__data
  11484. #endif /* __APPLE__ */
  11485. #ifndef __APPLE__
  11486. .align 16
  11487. #else
  11488. .p2align 4
  11489. #endif /* __APPLE__ */
  11490. L_avx2_aes_gcm_four:
  11491. .quad 0x0, 0x4
  11492. #ifndef __APPLE__
  11493. .data
  11494. #else
  11495. .section __DATA,__data
  11496. #endif /* __APPLE__ */
  11497. #ifndef __APPLE__
  11498. .align 16
  11499. #else
  11500. .p2align 4
  11501. #endif /* __APPLE__ */
  11502. L_avx2_aes_gcm_five:
  11503. .quad 0x0, 0x5
  11504. #ifndef __APPLE__
  11505. .data
  11506. #else
  11507. .section __DATA,__data
  11508. #endif /* __APPLE__ */
  11509. #ifndef __APPLE__
  11510. .align 16
  11511. #else
  11512. .p2align 4
  11513. #endif /* __APPLE__ */
  11514. L_avx2_aes_gcm_six:
  11515. .quad 0x0, 0x6
  11516. #ifndef __APPLE__
  11517. .data
  11518. #else
  11519. .section __DATA,__data
  11520. #endif /* __APPLE__ */
  11521. #ifndef __APPLE__
  11522. .align 16
  11523. #else
  11524. .p2align 4
  11525. #endif /* __APPLE__ */
  11526. L_avx2_aes_gcm_seven:
  11527. .quad 0x0, 0x7
  11528. #ifndef __APPLE__
  11529. .data
  11530. #else
  11531. .section __DATA,__data
  11532. #endif /* __APPLE__ */
  11533. #ifndef __APPLE__
  11534. .align 16
  11535. #else
  11536. .p2align 4
  11537. #endif /* __APPLE__ */
  11538. L_avx2_aes_gcm_eight:
  11539. .quad 0x0, 0x8
  11540. #ifndef __APPLE__
  11541. .data
  11542. #else
  11543. .section __DATA,__data
  11544. #endif /* __APPLE__ */
  11545. #ifndef __APPLE__
  11546. .align 16
  11547. #else
  11548. .p2align 4
  11549. #endif /* __APPLE__ */
  11550. L_avx2_aes_gcm_bswap_one:
  11551. .quad 0x0, 0x100000000000000
  11552. #ifndef __APPLE__
  11553. .data
  11554. #else
  11555. .section __DATA,__data
  11556. #endif /* __APPLE__ */
  11557. #ifndef __APPLE__
  11558. .align 16
  11559. #else
  11560. .p2align 4
  11561. #endif /* __APPLE__ */
  11562. L_avx2_aes_gcm_bswap_epi64:
  11563. .quad 0x1020304050607, 0x8090a0b0c0d0e0f
  11564. #ifndef __APPLE__
  11565. .data
  11566. #else
  11567. .section __DATA,__data
  11568. #endif /* __APPLE__ */
  11569. #ifndef __APPLE__
  11570. .align 16
  11571. #else
  11572. .p2align 4
  11573. #endif /* __APPLE__ */
  11574. L_avx2_aes_gcm_bswap_mask:
  11575. .quad 0x8090a0b0c0d0e0f, 0x1020304050607
  11576. #ifndef __APPLE__
  11577. .data
  11578. #else
  11579. .section __DATA,__data
  11580. #endif /* __APPLE__ */
  11581. #ifndef __APPLE__
  11582. .align 16
  11583. #else
  11584. .p2align 4
  11585. #endif /* __APPLE__ */
  11586. L_avx2_aes_gcm_mod2_128:
  11587. .quad 0x1, 0xc200000000000000
  11588. #ifndef __APPLE__
  11589. .text
  11590. .globl AES_GCM_encrypt_avx2
  11591. .type AES_GCM_encrypt_avx2,@function
  11592. .align 16
  11593. AES_GCM_encrypt_avx2:
  11594. #else
  11595. .section __TEXT,__text
  11596. .globl _AES_GCM_encrypt_avx2
  11597. .p2align 4
  11598. _AES_GCM_encrypt_avx2:
  11599. #endif /* __APPLE__ */
  11600. pushq %r13
  11601. pushq %r12
  11602. pushq %r15
  11603. pushq %rbx
  11604. pushq %r14
  11605. movq %rdx, %r12
  11606. movq %rcx, %rax
  11607. movq %r8, %r15
  11608. movq %rsi, %r8
  11609. movl %r9d, %r10d
  11610. movl 48(%rsp), %r11d
  11611. movl 56(%rsp), %ebx
  11612. movl 64(%rsp), %r14d
  11613. movq 72(%rsp), %rsi
  11614. movl 80(%rsp), %r9d
  11615. subq $0xa0, %rsp
  11616. vpxor %xmm4, %xmm4, %xmm4
  11617. vpxor %xmm6, %xmm6, %xmm6
  11618. movl %ebx, %edx
  11619. cmpl $12, %edx
  11620. je L_AES_GCM_encrypt_avx2_iv_12
  11621. # Calculate values when IV is not 12 bytes
  11622. # H = Encrypt X(=0)
  11623. vmovdqu (%rsi), %xmm5
  11624. vaesenc 16(%rsi), %xmm5, %xmm5
  11625. vaesenc 32(%rsi), %xmm5, %xmm5
  11626. vaesenc 48(%rsi), %xmm5, %xmm5
  11627. vaesenc 64(%rsi), %xmm5, %xmm5
  11628. vaesenc 80(%rsi), %xmm5, %xmm5
  11629. vaesenc 96(%rsi), %xmm5, %xmm5
  11630. vaesenc 112(%rsi), %xmm5, %xmm5
  11631. vaesenc 128(%rsi), %xmm5, %xmm5
  11632. vaesenc 144(%rsi), %xmm5, %xmm5
  11633. cmpl $11, %r9d
  11634. vmovdqu 160(%rsi), %xmm0
  11635. jl L_AES_GCM_encrypt_avx2_calc_iv_1_aesenc_avx_last
  11636. vaesenc %xmm0, %xmm5, %xmm5
  11637. vaesenc 176(%rsi), %xmm5, %xmm5
  11638. cmpl $13, %r9d
  11639. vmovdqu 192(%rsi), %xmm0
  11640. jl L_AES_GCM_encrypt_avx2_calc_iv_1_aesenc_avx_last
  11641. vaesenc %xmm0, %xmm5, %xmm5
  11642. vaesenc 208(%rsi), %xmm5, %xmm5
  11643. vmovdqu 224(%rsi), %xmm0
  11644. L_AES_GCM_encrypt_avx2_calc_iv_1_aesenc_avx_last:
  11645. vaesenclast %xmm0, %xmm5, %xmm5
  11646. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  11647. # Calc counter
  11648. # Initialization vector
  11649. cmpl $0x00, %edx
  11650. movq $0x00, %rcx
  11651. je L_AES_GCM_encrypt_avx2_calc_iv_done
  11652. cmpl $16, %edx
  11653. jl L_AES_GCM_encrypt_avx2_calc_iv_lt16
  11654. andl $0xfffffff0, %edx
  11655. L_AES_GCM_encrypt_avx2_calc_iv_16_loop:
  11656. vmovdqu (%rax,%rcx,1), %xmm0
  11657. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11658. vpxor %xmm0, %xmm4, %xmm4
  11659. # ghash_gfmul_avx
  11660. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  11661. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  11662. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  11663. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  11664. vpxor %xmm1, %xmm2, %xmm2
  11665. vpslldq $8, %xmm2, %xmm1
  11666. vpsrldq $8, %xmm2, %xmm2
  11667. vpxor %xmm1, %xmm0, %xmm7
  11668. vpxor %xmm2, %xmm3, %xmm4
  11669. # ghash_mid
  11670. vpsrld $31, %xmm7, %xmm0
  11671. vpsrld $31, %xmm4, %xmm1
  11672. vpslld $0x01, %xmm7, %xmm7
  11673. vpslld $0x01, %xmm4, %xmm4
  11674. vpsrldq $12, %xmm0, %xmm2
  11675. vpslldq $4, %xmm0, %xmm0
  11676. vpslldq $4, %xmm1, %xmm1
  11677. vpor %xmm2, %xmm4, %xmm4
  11678. vpor %xmm0, %xmm7, %xmm7
  11679. vpor %xmm1, %xmm4, %xmm4
  11680. # ghash_red
  11681. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  11682. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  11683. vpshufd $0x4e, %xmm7, %xmm1
  11684. vpxor %xmm0, %xmm1, %xmm1
  11685. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  11686. vpshufd $0x4e, %xmm1, %xmm1
  11687. vpxor %xmm0, %xmm1, %xmm1
  11688. vpxor %xmm1, %xmm4, %xmm4
  11689. addl $16, %ecx
  11690. cmpl %edx, %ecx
  11691. jl L_AES_GCM_encrypt_avx2_calc_iv_16_loop
  11692. movl %ebx, %edx
  11693. cmpl %edx, %ecx
  11694. je L_AES_GCM_encrypt_avx2_calc_iv_done
  11695. L_AES_GCM_encrypt_avx2_calc_iv_lt16:
  11696. vpxor %xmm0, %xmm0, %xmm0
  11697. xorl %ebx, %ebx
  11698. vmovdqu %xmm0, (%rsp)
  11699. L_AES_GCM_encrypt_avx2_calc_iv_loop:
  11700. movzbl (%rax,%rcx,1), %r13d
  11701. movb %r13b, (%rsp,%rbx,1)
  11702. incl %ecx
  11703. incl %ebx
  11704. cmpl %edx, %ecx
  11705. jl L_AES_GCM_encrypt_avx2_calc_iv_loop
  11706. vmovdqu (%rsp), %xmm0
  11707. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11708. vpxor %xmm0, %xmm4, %xmm4
  11709. # ghash_gfmul_avx
  11710. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  11711. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  11712. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  11713. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  11714. vpxor %xmm1, %xmm2, %xmm2
  11715. vpslldq $8, %xmm2, %xmm1
  11716. vpsrldq $8, %xmm2, %xmm2
  11717. vpxor %xmm1, %xmm0, %xmm7
  11718. vpxor %xmm2, %xmm3, %xmm4
  11719. # ghash_mid
  11720. vpsrld $31, %xmm7, %xmm0
  11721. vpsrld $31, %xmm4, %xmm1
  11722. vpslld $0x01, %xmm7, %xmm7
  11723. vpslld $0x01, %xmm4, %xmm4
  11724. vpsrldq $12, %xmm0, %xmm2
  11725. vpslldq $4, %xmm0, %xmm0
  11726. vpslldq $4, %xmm1, %xmm1
  11727. vpor %xmm2, %xmm4, %xmm4
  11728. vpor %xmm0, %xmm7, %xmm7
  11729. vpor %xmm1, %xmm4, %xmm4
  11730. # ghash_red
  11731. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  11732. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  11733. vpshufd $0x4e, %xmm7, %xmm1
  11734. vpxor %xmm0, %xmm1, %xmm1
  11735. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  11736. vpshufd $0x4e, %xmm1, %xmm1
  11737. vpxor %xmm0, %xmm1, %xmm1
  11738. vpxor %xmm1, %xmm4, %xmm4
  11739. L_AES_GCM_encrypt_avx2_calc_iv_done:
  11740. # T = Encrypt counter
  11741. vpxor %xmm0, %xmm0, %xmm0
  11742. shll $3, %edx
  11743. vmovq %rdx, %xmm0
  11744. vpxor %xmm0, %xmm4, %xmm4
  11745. # ghash_gfmul_avx
  11746. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  11747. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  11748. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  11749. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  11750. vpxor %xmm1, %xmm2, %xmm2
  11751. vpslldq $8, %xmm2, %xmm1
  11752. vpsrldq $8, %xmm2, %xmm2
  11753. vpxor %xmm1, %xmm0, %xmm7
  11754. vpxor %xmm2, %xmm3, %xmm4
  11755. # ghash_mid
  11756. vpsrld $31, %xmm7, %xmm0
  11757. vpsrld $31, %xmm4, %xmm1
  11758. vpslld $0x01, %xmm7, %xmm7
  11759. vpslld $0x01, %xmm4, %xmm4
  11760. vpsrldq $12, %xmm0, %xmm2
  11761. vpslldq $4, %xmm0, %xmm0
  11762. vpslldq $4, %xmm1, %xmm1
  11763. vpor %xmm2, %xmm4, %xmm4
  11764. vpor %xmm0, %xmm7, %xmm7
  11765. vpor %xmm1, %xmm4, %xmm4
  11766. # ghash_red
  11767. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  11768. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  11769. vpshufd $0x4e, %xmm7, %xmm1
  11770. vpxor %xmm0, %xmm1, %xmm1
  11771. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  11772. vpshufd $0x4e, %xmm1, %xmm1
  11773. vpxor %xmm0, %xmm1, %xmm1
  11774. vpxor %xmm1, %xmm4, %xmm4
  11775. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  11776. # Encrypt counter
  11777. vmovdqu (%rsi), %xmm15
  11778. vpxor %xmm4, %xmm15, %xmm15
  11779. vaesenc 16(%rsi), %xmm15, %xmm15
  11780. vaesenc 32(%rsi), %xmm15, %xmm15
  11781. vaesenc 48(%rsi), %xmm15, %xmm15
  11782. vaesenc 64(%rsi), %xmm15, %xmm15
  11783. vaesenc 80(%rsi), %xmm15, %xmm15
  11784. vaesenc 96(%rsi), %xmm15, %xmm15
  11785. vaesenc 112(%rsi), %xmm15, %xmm15
  11786. vaesenc 128(%rsi), %xmm15, %xmm15
  11787. vaesenc 144(%rsi), %xmm15, %xmm15
  11788. cmpl $11, %r9d
  11789. vmovdqu 160(%rsi), %xmm0
  11790. jl L_AES_GCM_encrypt_avx2_calc_iv_2_aesenc_avx_last
  11791. vaesenc %xmm0, %xmm15, %xmm15
  11792. vaesenc 176(%rsi), %xmm15, %xmm15
  11793. cmpl $13, %r9d
  11794. vmovdqu 192(%rsi), %xmm0
  11795. jl L_AES_GCM_encrypt_avx2_calc_iv_2_aesenc_avx_last
  11796. vaesenc %xmm0, %xmm15, %xmm15
  11797. vaesenc 208(%rsi), %xmm15, %xmm15
  11798. vmovdqu 224(%rsi), %xmm0
  11799. L_AES_GCM_encrypt_avx2_calc_iv_2_aesenc_avx_last:
  11800. vaesenclast %xmm0, %xmm15, %xmm15
  11801. jmp L_AES_GCM_encrypt_avx2_iv_done
  11802. L_AES_GCM_encrypt_avx2_iv_12:
  11803. # # Calculate values when IV is 12 bytes
  11804. # Set counter based on IV
  11805. vmovdqu L_avx2_aes_gcm_bswap_one(%rip), %xmm4
  11806. vmovdqu (%rsi), %xmm5
  11807. vpblendd $7, (%rax), %xmm4, %xmm4
  11808. # H = Encrypt X(=0) and T = Encrypt counter
  11809. vmovdqu 16(%rsi), %xmm7
  11810. vpxor %xmm5, %xmm4, %xmm15
  11811. vaesenc %xmm7, %xmm5, %xmm5
  11812. vaesenc %xmm7, %xmm15, %xmm15
  11813. vmovdqu 32(%rsi), %xmm0
  11814. vaesenc %xmm0, %xmm5, %xmm5
  11815. vaesenc %xmm0, %xmm15, %xmm15
  11816. vmovdqu 48(%rsi), %xmm0
  11817. vaesenc %xmm0, %xmm5, %xmm5
  11818. vaesenc %xmm0, %xmm15, %xmm15
  11819. vmovdqu 64(%rsi), %xmm0
  11820. vaesenc %xmm0, %xmm5, %xmm5
  11821. vaesenc %xmm0, %xmm15, %xmm15
  11822. vmovdqu 80(%rsi), %xmm0
  11823. vaesenc %xmm0, %xmm5, %xmm5
  11824. vaesenc %xmm0, %xmm15, %xmm15
  11825. vmovdqu 96(%rsi), %xmm0
  11826. vaesenc %xmm0, %xmm5, %xmm5
  11827. vaesenc %xmm0, %xmm15, %xmm15
  11828. vmovdqu 112(%rsi), %xmm0
  11829. vaesenc %xmm0, %xmm5, %xmm5
  11830. vaesenc %xmm0, %xmm15, %xmm15
  11831. vmovdqu 128(%rsi), %xmm0
  11832. vaesenc %xmm0, %xmm5, %xmm5
  11833. vaesenc %xmm0, %xmm15, %xmm15
  11834. vmovdqu 144(%rsi), %xmm0
  11835. vaesenc %xmm0, %xmm5, %xmm5
  11836. vaesenc %xmm0, %xmm15, %xmm15
  11837. cmpl $11, %r9d
  11838. vmovdqu 160(%rsi), %xmm0
  11839. jl L_AES_GCM_encrypt_avx2_calc_iv_12_last
  11840. vaesenc %xmm0, %xmm5, %xmm5
  11841. vaesenc %xmm0, %xmm15, %xmm15
  11842. vmovdqu 176(%rsi), %xmm0
  11843. vaesenc %xmm0, %xmm5, %xmm5
  11844. vaesenc %xmm0, %xmm15, %xmm15
  11845. cmpl $13, %r9d
  11846. vmovdqu 192(%rsi), %xmm0
  11847. jl L_AES_GCM_encrypt_avx2_calc_iv_12_last
  11848. vaesenc %xmm0, %xmm5, %xmm5
  11849. vaesenc %xmm0, %xmm15, %xmm15
  11850. vmovdqu 208(%rsi), %xmm0
  11851. vaesenc %xmm0, %xmm5, %xmm5
  11852. vaesenc %xmm0, %xmm15, %xmm15
  11853. vmovdqu 224(%rsi), %xmm0
  11854. L_AES_GCM_encrypt_avx2_calc_iv_12_last:
  11855. vaesenclast %xmm0, %xmm5, %xmm5
  11856. vaesenclast %xmm0, %xmm15, %xmm15
  11857. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  11858. L_AES_GCM_encrypt_avx2_iv_done:
  11859. # Additional authentication data
  11860. movl %r11d, %edx
  11861. cmpl $0x00, %edx
  11862. je L_AES_GCM_encrypt_avx2_calc_aad_done
  11863. xorl %ecx, %ecx
  11864. cmpl $16, %edx
  11865. jl L_AES_GCM_encrypt_avx2_calc_aad_lt16
  11866. andl $0xfffffff0, %edx
  11867. L_AES_GCM_encrypt_avx2_calc_aad_16_loop:
  11868. vmovdqu (%r12,%rcx,1), %xmm0
  11869. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11870. vpxor %xmm0, %xmm6, %xmm6
  11871. # ghash_gfmul_avx
  11872. vpclmulqdq $16, %xmm6, %xmm5, %xmm2
  11873. vpclmulqdq $0x01, %xmm6, %xmm5, %xmm1
  11874. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  11875. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  11876. vpxor %xmm1, %xmm2, %xmm2
  11877. vpslldq $8, %xmm2, %xmm1
  11878. vpsrldq $8, %xmm2, %xmm2
  11879. vpxor %xmm1, %xmm0, %xmm7
  11880. vpxor %xmm2, %xmm3, %xmm6
  11881. # ghash_mid
  11882. vpsrld $31, %xmm7, %xmm0
  11883. vpsrld $31, %xmm6, %xmm1
  11884. vpslld $0x01, %xmm7, %xmm7
  11885. vpslld $0x01, %xmm6, %xmm6
  11886. vpsrldq $12, %xmm0, %xmm2
  11887. vpslldq $4, %xmm0, %xmm0
  11888. vpslldq $4, %xmm1, %xmm1
  11889. vpor %xmm2, %xmm6, %xmm6
  11890. vpor %xmm0, %xmm7, %xmm7
  11891. vpor %xmm1, %xmm6, %xmm6
  11892. # ghash_red
  11893. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  11894. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  11895. vpshufd $0x4e, %xmm7, %xmm1
  11896. vpxor %xmm0, %xmm1, %xmm1
  11897. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  11898. vpshufd $0x4e, %xmm1, %xmm1
  11899. vpxor %xmm0, %xmm1, %xmm1
  11900. vpxor %xmm1, %xmm6, %xmm6
  11901. addl $16, %ecx
  11902. cmpl %edx, %ecx
  11903. jl L_AES_GCM_encrypt_avx2_calc_aad_16_loop
  11904. movl %r11d, %edx
  11905. cmpl %edx, %ecx
  11906. je L_AES_GCM_encrypt_avx2_calc_aad_done
  11907. L_AES_GCM_encrypt_avx2_calc_aad_lt16:
  11908. vpxor %xmm0, %xmm0, %xmm0
  11909. xorl %ebx, %ebx
  11910. vmovdqu %xmm0, (%rsp)
  11911. L_AES_GCM_encrypt_avx2_calc_aad_loop:
  11912. movzbl (%r12,%rcx,1), %r13d
  11913. movb %r13b, (%rsp,%rbx,1)
  11914. incl %ecx
  11915. incl %ebx
  11916. cmpl %edx, %ecx
  11917. jl L_AES_GCM_encrypt_avx2_calc_aad_loop
  11918. vmovdqu (%rsp), %xmm0
  11919. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  11920. vpxor %xmm0, %xmm6, %xmm6
  11921. # ghash_gfmul_avx
  11922. vpclmulqdq $16, %xmm6, %xmm5, %xmm2
  11923. vpclmulqdq $0x01, %xmm6, %xmm5, %xmm1
  11924. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  11925. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  11926. vpxor %xmm1, %xmm2, %xmm2
  11927. vpslldq $8, %xmm2, %xmm1
  11928. vpsrldq $8, %xmm2, %xmm2
  11929. vpxor %xmm1, %xmm0, %xmm7
  11930. vpxor %xmm2, %xmm3, %xmm6
  11931. # ghash_mid
  11932. vpsrld $31, %xmm7, %xmm0
  11933. vpsrld $31, %xmm6, %xmm1
  11934. vpslld $0x01, %xmm7, %xmm7
  11935. vpslld $0x01, %xmm6, %xmm6
  11936. vpsrldq $12, %xmm0, %xmm2
  11937. vpslldq $4, %xmm0, %xmm0
  11938. vpslldq $4, %xmm1, %xmm1
  11939. vpor %xmm2, %xmm6, %xmm6
  11940. vpor %xmm0, %xmm7, %xmm7
  11941. vpor %xmm1, %xmm6, %xmm6
  11942. # ghash_red
  11943. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  11944. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  11945. vpshufd $0x4e, %xmm7, %xmm1
  11946. vpxor %xmm0, %xmm1, %xmm1
  11947. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  11948. vpshufd $0x4e, %xmm1, %xmm1
  11949. vpxor %xmm0, %xmm1, %xmm1
  11950. vpxor %xmm1, %xmm6, %xmm6
  11951. L_AES_GCM_encrypt_avx2_calc_aad_done:
  11952. # Calculate counter and H
  11953. vpsrlq $63, %xmm5, %xmm1
  11954. vpsllq $0x01, %xmm5, %xmm0
  11955. vpslldq $8, %xmm1, %xmm1
  11956. vpor %xmm1, %xmm0, %xmm0
  11957. vpshufd $0xff, %xmm5, %xmm5
  11958. vpsrad $31, %xmm5, %xmm5
  11959. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  11960. vpand L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  11961. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  11962. vpxor %xmm0, %xmm5, %xmm5
  11963. xorl %ebx, %ebx
  11964. cmpl $0x80, %r10d
  11965. movl %r10d, %r13d
  11966. jl L_AES_GCM_encrypt_avx2_done_128
  11967. andl $0xffffff80, %r13d
  11968. vmovdqu %xmm4, 128(%rsp)
  11969. vmovdqu %xmm15, 144(%rsp)
  11970. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm3
  11971. # H ^ 1 and H ^ 2
  11972. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm9
  11973. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm10
  11974. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  11975. vpshufd $0x4e, %xmm9, %xmm9
  11976. vpxor %xmm8, %xmm9, %xmm9
  11977. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  11978. vpshufd $0x4e, %xmm9, %xmm9
  11979. vpxor %xmm8, %xmm9, %xmm9
  11980. vpxor %xmm9, %xmm10, %xmm0
  11981. vmovdqu %xmm5, (%rsp)
  11982. vmovdqu %xmm0, 16(%rsp)
  11983. # H ^ 3 and H ^ 4
  11984. vpclmulqdq $16, %xmm5, %xmm0, %xmm11
  11985. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm10
  11986. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm9
  11987. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm12
  11988. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm13
  11989. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm14
  11990. vpxor %xmm10, %xmm11, %xmm11
  11991. vpslldq $8, %xmm11, %xmm10
  11992. vpsrldq $8, %xmm11, %xmm11
  11993. vpxor %xmm9, %xmm10, %xmm10
  11994. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  11995. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  11996. vpshufd $0x4e, %xmm10, %xmm10
  11997. vpshufd $0x4e, %xmm13, %xmm13
  11998. vpxor %xmm9, %xmm10, %xmm10
  11999. vpxor %xmm8, %xmm13, %xmm13
  12000. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  12001. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  12002. vpshufd $0x4e, %xmm10, %xmm10
  12003. vpshufd $0x4e, %xmm13, %xmm13
  12004. vpxor %xmm11, %xmm12, %xmm12
  12005. vpxor %xmm8, %xmm13, %xmm13
  12006. vpxor %xmm12, %xmm10, %xmm10
  12007. vpxor %xmm14, %xmm13, %xmm2
  12008. vpxor %xmm9, %xmm10, %xmm1
  12009. vmovdqu %xmm1, 32(%rsp)
  12010. vmovdqu %xmm2, 48(%rsp)
  12011. # H ^ 5 and H ^ 6
  12012. vpclmulqdq $16, %xmm0, %xmm1, %xmm11
  12013. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm10
  12014. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm9
  12015. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm12
  12016. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm13
  12017. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm14
  12018. vpxor %xmm10, %xmm11, %xmm11
  12019. vpslldq $8, %xmm11, %xmm10
  12020. vpsrldq $8, %xmm11, %xmm11
  12021. vpxor %xmm9, %xmm10, %xmm10
  12022. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  12023. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  12024. vpshufd $0x4e, %xmm10, %xmm10
  12025. vpshufd $0x4e, %xmm13, %xmm13
  12026. vpxor %xmm9, %xmm10, %xmm10
  12027. vpxor %xmm8, %xmm13, %xmm13
  12028. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  12029. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  12030. vpshufd $0x4e, %xmm10, %xmm10
  12031. vpshufd $0x4e, %xmm13, %xmm13
  12032. vpxor %xmm11, %xmm12, %xmm12
  12033. vpxor %xmm8, %xmm13, %xmm13
  12034. vpxor %xmm12, %xmm10, %xmm10
  12035. vpxor %xmm14, %xmm13, %xmm0
  12036. vpxor %xmm9, %xmm10, %xmm7
  12037. vmovdqu %xmm7, 64(%rsp)
  12038. vmovdqu %xmm0, 80(%rsp)
  12039. # H ^ 7 and H ^ 8
  12040. vpclmulqdq $16, %xmm1, %xmm2, %xmm11
  12041. vpclmulqdq $0x01, %xmm1, %xmm2, %xmm10
  12042. vpclmulqdq $0x00, %xmm1, %xmm2, %xmm9
  12043. vpclmulqdq $0x11, %xmm1, %xmm2, %xmm12
  12044. vpclmulqdq $0x00, %xmm2, %xmm2, %xmm13
  12045. vpclmulqdq $0x11, %xmm2, %xmm2, %xmm14
  12046. vpxor %xmm10, %xmm11, %xmm11
  12047. vpslldq $8, %xmm11, %xmm10
  12048. vpsrldq $8, %xmm11, %xmm11
  12049. vpxor %xmm9, %xmm10, %xmm10
  12050. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  12051. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  12052. vpshufd $0x4e, %xmm10, %xmm10
  12053. vpshufd $0x4e, %xmm13, %xmm13
  12054. vpxor %xmm9, %xmm10, %xmm10
  12055. vpxor %xmm8, %xmm13, %xmm13
  12056. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  12057. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  12058. vpshufd $0x4e, %xmm10, %xmm10
  12059. vpshufd $0x4e, %xmm13, %xmm13
  12060. vpxor %xmm11, %xmm12, %xmm12
  12061. vpxor %xmm8, %xmm13, %xmm13
  12062. vpxor %xmm12, %xmm10, %xmm10
  12063. vpxor %xmm14, %xmm13, %xmm0
  12064. vpxor %xmm9, %xmm10, %xmm7
  12065. vmovdqu %xmm7, 96(%rsp)
  12066. vmovdqu %xmm0, 112(%rsp)
  12067. # First 128 bytes of input
  12068. # aesenc_128
  12069. # aesenc_ctr
  12070. vmovdqu 128(%rsp), %xmm0
  12071. vmovdqu L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
  12072. vpaddd L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
  12073. vpshufb %xmm1, %xmm0, %xmm8
  12074. vpaddd L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
  12075. vpshufb %xmm1, %xmm9, %xmm9
  12076. vpaddd L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
  12077. vpshufb %xmm1, %xmm10, %xmm10
  12078. vpaddd L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
  12079. vpshufb %xmm1, %xmm11, %xmm11
  12080. vpaddd L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
  12081. vpshufb %xmm1, %xmm12, %xmm12
  12082. vpaddd L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
  12083. vpshufb %xmm1, %xmm13, %xmm13
  12084. vpaddd L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
  12085. vpshufb %xmm1, %xmm14, %xmm14
  12086. vpaddd L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
  12087. vpshufb %xmm1, %xmm15, %xmm15
  12088. # aesenc_xor
  12089. vmovdqu (%rsi), %xmm7
  12090. vmovdqu %xmm0, 128(%rsp)
  12091. vpxor %xmm7, %xmm8, %xmm8
  12092. vpxor %xmm7, %xmm9, %xmm9
  12093. vpxor %xmm7, %xmm10, %xmm10
  12094. vpxor %xmm7, %xmm11, %xmm11
  12095. vpxor %xmm7, %xmm12, %xmm12
  12096. vpxor %xmm7, %xmm13, %xmm13
  12097. vpxor %xmm7, %xmm14, %xmm14
  12098. vpxor %xmm7, %xmm15, %xmm15
  12099. vmovdqu 16(%rsi), %xmm7
  12100. vaesenc %xmm7, %xmm8, %xmm8
  12101. vaesenc %xmm7, %xmm9, %xmm9
  12102. vaesenc %xmm7, %xmm10, %xmm10
  12103. vaesenc %xmm7, %xmm11, %xmm11
  12104. vaesenc %xmm7, %xmm12, %xmm12
  12105. vaesenc %xmm7, %xmm13, %xmm13
  12106. vaesenc %xmm7, %xmm14, %xmm14
  12107. vaesenc %xmm7, %xmm15, %xmm15
  12108. vmovdqu 32(%rsi), %xmm7
  12109. vaesenc %xmm7, %xmm8, %xmm8
  12110. vaesenc %xmm7, %xmm9, %xmm9
  12111. vaesenc %xmm7, %xmm10, %xmm10
  12112. vaesenc %xmm7, %xmm11, %xmm11
  12113. vaesenc %xmm7, %xmm12, %xmm12
  12114. vaesenc %xmm7, %xmm13, %xmm13
  12115. vaesenc %xmm7, %xmm14, %xmm14
  12116. vaesenc %xmm7, %xmm15, %xmm15
  12117. vmovdqu 48(%rsi), %xmm7
  12118. vaesenc %xmm7, %xmm8, %xmm8
  12119. vaesenc %xmm7, %xmm9, %xmm9
  12120. vaesenc %xmm7, %xmm10, %xmm10
  12121. vaesenc %xmm7, %xmm11, %xmm11
  12122. vaesenc %xmm7, %xmm12, %xmm12
  12123. vaesenc %xmm7, %xmm13, %xmm13
  12124. vaesenc %xmm7, %xmm14, %xmm14
  12125. vaesenc %xmm7, %xmm15, %xmm15
  12126. vmovdqu 64(%rsi), %xmm7
  12127. vaesenc %xmm7, %xmm8, %xmm8
  12128. vaesenc %xmm7, %xmm9, %xmm9
  12129. vaesenc %xmm7, %xmm10, %xmm10
  12130. vaesenc %xmm7, %xmm11, %xmm11
  12131. vaesenc %xmm7, %xmm12, %xmm12
  12132. vaesenc %xmm7, %xmm13, %xmm13
  12133. vaesenc %xmm7, %xmm14, %xmm14
  12134. vaesenc %xmm7, %xmm15, %xmm15
  12135. vmovdqu 80(%rsi), %xmm7
  12136. vaesenc %xmm7, %xmm8, %xmm8
  12137. vaesenc %xmm7, %xmm9, %xmm9
  12138. vaesenc %xmm7, %xmm10, %xmm10
  12139. vaesenc %xmm7, %xmm11, %xmm11
  12140. vaesenc %xmm7, %xmm12, %xmm12
  12141. vaesenc %xmm7, %xmm13, %xmm13
  12142. vaesenc %xmm7, %xmm14, %xmm14
  12143. vaesenc %xmm7, %xmm15, %xmm15
  12144. vmovdqu 96(%rsi), %xmm7
  12145. vaesenc %xmm7, %xmm8, %xmm8
  12146. vaesenc %xmm7, %xmm9, %xmm9
  12147. vaesenc %xmm7, %xmm10, %xmm10
  12148. vaesenc %xmm7, %xmm11, %xmm11
  12149. vaesenc %xmm7, %xmm12, %xmm12
  12150. vaesenc %xmm7, %xmm13, %xmm13
  12151. vaesenc %xmm7, %xmm14, %xmm14
  12152. vaesenc %xmm7, %xmm15, %xmm15
  12153. vmovdqu 112(%rsi), %xmm7
  12154. vaesenc %xmm7, %xmm8, %xmm8
  12155. vaesenc %xmm7, %xmm9, %xmm9
  12156. vaesenc %xmm7, %xmm10, %xmm10
  12157. vaesenc %xmm7, %xmm11, %xmm11
  12158. vaesenc %xmm7, %xmm12, %xmm12
  12159. vaesenc %xmm7, %xmm13, %xmm13
  12160. vaesenc %xmm7, %xmm14, %xmm14
  12161. vaesenc %xmm7, %xmm15, %xmm15
  12162. vmovdqu 128(%rsi), %xmm7
  12163. vaesenc %xmm7, %xmm8, %xmm8
  12164. vaesenc %xmm7, %xmm9, %xmm9
  12165. vaesenc %xmm7, %xmm10, %xmm10
  12166. vaesenc %xmm7, %xmm11, %xmm11
  12167. vaesenc %xmm7, %xmm12, %xmm12
  12168. vaesenc %xmm7, %xmm13, %xmm13
  12169. vaesenc %xmm7, %xmm14, %xmm14
  12170. vaesenc %xmm7, %xmm15, %xmm15
  12171. vmovdqu 144(%rsi), %xmm7
  12172. vaesenc %xmm7, %xmm8, %xmm8
  12173. vaesenc %xmm7, %xmm9, %xmm9
  12174. vaesenc %xmm7, %xmm10, %xmm10
  12175. vaesenc %xmm7, %xmm11, %xmm11
  12176. vaesenc %xmm7, %xmm12, %xmm12
  12177. vaesenc %xmm7, %xmm13, %xmm13
  12178. vaesenc %xmm7, %xmm14, %xmm14
  12179. vaesenc %xmm7, %xmm15, %xmm15
  12180. cmpl $11, %r9d
  12181. vmovdqu 160(%rsi), %xmm7
  12182. jl L_AES_GCM_encrypt_avx2_aesenc_128_enc_done
  12183. vaesenc %xmm7, %xmm8, %xmm8
  12184. vaesenc %xmm7, %xmm9, %xmm9
  12185. vaesenc %xmm7, %xmm10, %xmm10
  12186. vaesenc %xmm7, %xmm11, %xmm11
  12187. vaesenc %xmm7, %xmm12, %xmm12
  12188. vaesenc %xmm7, %xmm13, %xmm13
  12189. vaesenc %xmm7, %xmm14, %xmm14
  12190. vaesenc %xmm7, %xmm15, %xmm15
  12191. vmovdqu 176(%rsi), %xmm7
  12192. vaesenc %xmm7, %xmm8, %xmm8
  12193. vaesenc %xmm7, %xmm9, %xmm9
  12194. vaesenc %xmm7, %xmm10, %xmm10
  12195. vaesenc %xmm7, %xmm11, %xmm11
  12196. vaesenc %xmm7, %xmm12, %xmm12
  12197. vaesenc %xmm7, %xmm13, %xmm13
  12198. vaesenc %xmm7, %xmm14, %xmm14
  12199. vaesenc %xmm7, %xmm15, %xmm15
  12200. cmpl $13, %r9d
  12201. vmovdqu 192(%rsi), %xmm7
  12202. jl L_AES_GCM_encrypt_avx2_aesenc_128_enc_done
  12203. vaesenc %xmm7, %xmm8, %xmm8
  12204. vaesenc %xmm7, %xmm9, %xmm9
  12205. vaesenc %xmm7, %xmm10, %xmm10
  12206. vaesenc %xmm7, %xmm11, %xmm11
  12207. vaesenc %xmm7, %xmm12, %xmm12
  12208. vaesenc %xmm7, %xmm13, %xmm13
  12209. vaesenc %xmm7, %xmm14, %xmm14
  12210. vaesenc %xmm7, %xmm15, %xmm15
  12211. vmovdqu 208(%rsi), %xmm7
  12212. vaesenc %xmm7, %xmm8, %xmm8
  12213. vaesenc %xmm7, %xmm9, %xmm9
  12214. vaesenc %xmm7, %xmm10, %xmm10
  12215. vaesenc %xmm7, %xmm11, %xmm11
  12216. vaesenc %xmm7, %xmm12, %xmm12
  12217. vaesenc %xmm7, %xmm13, %xmm13
  12218. vaesenc %xmm7, %xmm14, %xmm14
  12219. vaesenc %xmm7, %xmm15, %xmm15
  12220. vmovdqu 224(%rsi), %xmm7
  12221. L_AES_GCM_encrypt_avx2_aesenc_128_enc_done:
  12222. # aesenc_last
  12223. vaesenclast %xmm7, %xmm8, %xmm8
  12224. vaesenclast %xmm7, %xmm9, %xmm9
  12225. vaesenclast %xmm7, %xmm10, %xmm10
  12226. vaesenclast %xmm7, %xmm11, %xmm11
  12227. vmovdqu (%rdi), %xmm0
  12228. vmovdqu 16(%rdi), %xmm1
  12229. vmovdqu 32(%rdi), %xmm2
  12230. vmovdqu 48(%rdi), %xmm3
  12231. vpxor %xmm0, %xmm8, %xmm8
  12232. vpxor %xmm1, %xmm9, %xmm9
  12233. vpxor %xmm2, %xmm10, %xmm10
  12234. vpxor %xmm3, %xmm11, %xmm11
  12235. vmovdqu %xmm8, (%r8)
  12236. vmovdqu %xmm9, 16(%r8)
  12237. vmovdqu %xmm10, 32(%r8)
  12238. vmovdqu %xmm11, 48(%r8)
  12239. vaesenclast %xmm7, %xmm12, %xmm12
  12240. vaesenclast %xmm7, %xmm13, %xmm13
  12241. vaesenclast %xmm7, %xmm14, %xmm14
  12242. vaesenclast %xmm7, %xmm15, %xmm15
  12243. vmovdqu 64(%rdi), %xmm0
  12244. vmovdqu 80(%rdi), %xmm1
  12245. vmovdqu 96(%rdi), %xmm2
  12246. vmovdqu 112(%rdi), %xmm3
  12247. vpxor %xmm0, %xmm12, %xmm12
  12248. vpxor %xmm1, %xmm13, %xmm13
  12249. vpxor %xmm2, %xmm14, %xmm14
  12250. vpxor %xmm3, %xmm15, %xmm15
  12251. vmovdqu %xmm12, 64(%r8)
  12252. vmovdqu %xmm13, 80(%r8)
  12253. vmovdqu %xmm14, 96(%r8)
  12254. vmovdqu %xmm15, 112(%r8)
  12255. cmpl $0x80, %r13d
  12256. movl $0x80, %ebx
  12257. jle L_AES_GCM_encrypt_avx2_end_128
  12258. # More 128 bytes of input
  12259. L_AES_GCM_encrypt_avx2_ghash_128:
  12260. # aesenc_128_ghash
  12261. leaq (%rdi,%rbx,1), %rcx
  12262. leaq (%r8,%rbx,1), %rdx
  12263. # aesenc_ctr
  12264. vmovdqu 128(%rsp), %xmm0
  12265. vmovdqu L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
  12266. vpaddd L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
  12267. vpshufb %xmm1, %xmm0, %xmm8
  12268. vpaddd L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
  12269. vpshufb %xmm1, %xmm9, %xmm9
  12270. vpaddd L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
  12271. vpshufb %xmm1, %xmm10, %xmm10
  12272. vpaddd L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
  12273. vpshufb %xmm1, %xmm11, %xmm11
  12274. vpaddd L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
  12275. vpshufb %xmm1, %xmm12, %xmm12
  12276. vpaddd L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
  12277. vpshufb %xmm1, %xmm13, %xmm13
  12278. vpaddd L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
  12279. vpshufb %xmm1, %xmm14, %xmm14
  12280. vpaddd L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
  12281. vpshufb %xmm1, %xmm15, %xmm15
  12282. # aesenc_xor
  12283. vmovdqu (%rsi), %xmm7
  12284. vmovdqu %xmm0, 128(%rsp)
  12285. vpxor %xmm7, %xmm8, %xmm8
  12286. vpxor %xmm7, %xmm9, %xmm9
  12287. vpxor %xmm7, %xmm10, %xmm10
  12288. vpxor %xmm7, %xmm11, %xmm11
  12289. vpxor %xmm7, %xmm12, %xmm12
  12290. vpxor %xmm7, %xmm13, %xmm13
  12291. vpxor %xmm7, %xmm14, %xmm14
  12292. vpxor %xmm7, %xmm15, %xmm15
  12293. # aesenc_pclmul_1
  12294. vmovdqu -128(%rdx), %xmm1
  12295. vmovdqu 16(%rsi), %xmm0
  12296. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12297. vmovdqu 112(%rsp), %xmm2
  12298. vpxor %xmm6, %xmm1, %xmm1
  12299. vpclmulqdq $16, %xmm2, %xmm1, %xmm5
  12300. vpclmulqdq $0x01, %xmm2, %xmm1, %xmm3
  12301. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm6
  12302. vpclmulqdq $0x11, %xmm2, %xmm1, %xmm7
  12303. vaesenc %xmm0, %xmm8, %xmm8
  12304. vaesenc %xmm0, %xmm9, %xmm9
  12305. vaesenc %xmm0, %xmm10, %xmm10
  12306. vaesenc %xmm0, %xmm11, %xmm11
  12307. vaesenc %xmm0, %xmm12, %xmm12
  12308. vaesenc %xmm0, %xmm13, %xmm13
  12309. vaesenc %xmm0, %xmm14, %xmm14
  12310. vaesenc %xmm0, %xmm15, %xmm15
  12311. # aesenc_pclmul_2
  12312. vmovdqu -112(%rdx), %xmm1
  12313. vmovdqu 96(%rsp), %xmm0
  12314. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12315. vpxor %xmm3, %xmm5, %xmm5
  12316. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12317. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12318. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12319. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12320. vmovdqu 32(%rsi), %xmm0
  12321. vpxor %xmm1, %xmm7, %xmm7
  12322. vaesenc %xmm0, %xmm8, %xmm8
  12323. vaesenc %xmm0, %xmm9, %xmm9
  12324. vaesenc %xmm0, %xmm10, %xmm10
  12325. vaesenc %xmm0, %xmm11, %xmm11
  12326. vaesenc %xmm0, %xmm12, %xmm12
  12327. vaesenc %xmm0, %xmm13, %xmm13
  12328. vaesenc %xmm0, %xmm14, %xmm14
  12329. vaesenc %xmm0, %xmm15, %xmm15
  12330. # aesenc_pclmul_n
  12331. vmovdqu -96(%rdx), %xmm1
  12332. vmovdqu 80(%rsp), %xmm0
  12333. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12334. vpxor %xmm2, %xmm5, %xmm5
  12335. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12336. vpxor %xmm3, %xmm5, %xmm5
  12337. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12338. vpxor %xmm4, %xmm6, %xmm6
  12339. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12340. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12341. vmovdqu 48(%rsi), %xmm0
  12342. vpxor %xmm1, %xmm7, %xmm7
  12343. vaesenc %xmm0, %xmm8, %xmm8
  12344. vaesenc %xmm0, %xmm9, %xmm9
  12345. vaesenc %xmm0, %xmm10, %xmm10
  12346. vaesenc %xmm0, %xmm11, %xmm11
  12347. vaesenc %xmm0, %xmm12, %xmm12
  12348. vaesenc %xmm0, %xmm13, %xmm13
  12349. vaesenc %xmm0, %xmm14, %xmm14
  12350. vaesenc %xmm0, %xmm15, %xmm15
  12351. # aesenc_pclmul_n
  12352. vmovdqu -80(%rdx), %xmm1
  12353. vmovdqu 64(%rsp), %xmm0
  12354. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12355. vpxor %xmm2, %xmm5, %xmm5
  12356. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12357. vpxor %xmm3, %xmm5, %xmm5
  12358. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12359. vpxor %xmm4, %xmm6, %xmm6
  12360. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12361. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12362. vmovdqu 64(%rsi), %xmm0
  12363. vpxor %xmm1, %xmm7, %xmm7
  12364. vaesenc %xmm0, %xmm8, %xmm8
  12365. vaesenc %xmm0, %xmm9, %xmm9
  12366. vaesenc %xmm0, %xmm10, %xmm10
  12367. vaesenc %xmm0, %xmm11, %xmm11
  12368. vaesenc %xmm0, %xmm12, %xmm12
  12369. vaesenc %xmm0, %xmm13, %xmm13
  12370. vaesenc %xmm0, %xmm14, %xmm14
  12371. vaesenc %xmm0, %xmm15, %xmm15
  12372. # aesenc_pclmul_n
  12373. vmovdqu -64(%rdx), %xmm1
  12374. vmovdqu 48(%rsp), %xmm0
  12375. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12376. vpxor %xmm2, %xmm5, %xmm5
  12377. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12378. vpxor %xmm3, %xmm5, %xmm5
  12379. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12380. vpxor %xmm4, %xmm6, %xmm6
  12381. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12382. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12383. vmovdqu 80(%rsi), %xmm0
  12384. vpxor %xmm1, %xmm7, %xmm7
  12385. vaesenc %xmm0, %xmm8, %xmm8
  12386. vaesenc %xmm0, %xmm9, %xmm9
  12387. vaesenc %xmm0, %xmm10, %xmm10
  12388. vaesenc %xmm0, %xmm11, %xmm11
  12389. vaesenc %xmm0, %xmm12, %xmm12
  12390. vaesenc %xmm0, %xmm13, %xmm13
  12391. vaesenc %xmm0, %xmm14, %xmm14
  12392. vaesenc %xmm0, %xmm15, %xmm15
  12393. # aesenc_pclmul_n
  12394. vmovdqu -48(%rdx), %xmm1
  12395. vmovdqu 32(%rsp), %xmm0
  12396. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12397. vpxor %xmm2, %xmm5, %xmm5
  12398. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12399. vpxor %xmm3, %xmm5, %xmm5
  12400. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12401. vpxor %xmm4, %xmm6, %xmm6
  12402. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12403. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12404. vmovdqu 96(%rsi), %xmm0
  12405. vpxor %xmm1, %xmm7, %xmm7
  12406. vaesenc %xmm0, %xmm8, %xmm8
  12407. vaesenc %xmm0, %xmm9, %xmm9
  12408. vaesenc %xmm0, %xmm10, %xmm10
  12409. vaesenc %xmm0, %xmm11, %xmm11
  12410. vaesenc %xmm0, %xmm12, %xmm12
  12411. vaesenc %xmm0, %xmm13, %xmm13
  12412. vaesenc %xmm0, %xmm14, %xmm14
  12413. vaesenc %xmm0, %xmm15, %xmm15
  12414. # aesenc_pclmul_n
  12415. vmovdqu -32(%rdx), %xmm1
  12416. vmovdqu 16(%rsp), %xmm0
  12417. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12418. vpxor %xmm2, %xmm5, %xmm5
  12419. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12420. vpxor %xmm3, %xmm5, %xmm5
  12421. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12422. vpxor %xmm4, %xmm6, %xmm6
  12423. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12424. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12425. vmovdqu 112(%rsi), %xmm0
  12426. vpxor %xmm1, %xmm7, %xmm7
  12427. vaesenc %xmm0, %xmm8, %xmm8
  12428. vaesenc %xmm0, %xmm9, %xmm9
  12429. vaesenc %xmm0, %xmm10, %xmm10
  12430. vaesenc %xmm0, %xmm11, %xmm11
  12431. vaesenc %xmm0, %xmm12, %xmm12
  12432. vaesenc %xmm0, %xmm13, %xmm13
  12433. vaesenc %xmm0, %xmm14, %xmm14
  12434. vaesenc %xmm0, %xmm15, %xmm15
  12435. # aesenc_pclmul_n
  12436. vmovdqu -16(%rdx), %xmm1
  12437. vmovdqu (%rsp), %xmm0
  12438. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  12439. vpxor %xmm2, %xmm5, %xmm5
  12440. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  12441. vpxor %xmm3, %xmm5, %xmm5
  12442. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  12443. vpxor %xmm4, %xmm6, %xmm6
  12444. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  12445. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  12446. vmovdqu 128(%rsi), %xmm0
  12447. vpxor %xmm1, %xmm7, %xmm7
  12448. vaesenc %xmm0, %xmm8, %xmm8
  12449. vaesenc %xmm0, %xmm9, %xmm9
  12450. vaesenc %xmm0, %xmm10, %xmm10
  12451. vaesenc %xmm0, %xmm11, %xmm11
  12452. vaesenc %xmm0, %xmm12, %xmm12
  12453. vaesenc %xmm0, %xmm13, %xmm13
  12454. vaesenc %xmm0, %xmm14, %xmm14
  12455. vaesenc %xmm0, %xmm15, %xmm15
  12456. # aesenc_pclmul_l
  12457. vpxor %xmm2, %xmm5, %xmm5
  12458. vpxor %xmm4, %xmm6, %xmm6
  12459. vpxor %xmm3, %xmm5, %xmm5
  12460. vpslldq $8, %xmm5, %xmm1
  12461. vpsrldq $8, %xmm5, %xmm5
  12462. vmovdqu 144(%rsi), %xmm4
  12463. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm0
  12464. vaesenc %xmm4, %xmm8, %xmm8
  12465. vpxor %xmm1, %xmm6, %xmm6
  12466. vpxor %xmm5, %xmm7, %xmm7
  12467. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  12468. vaesenc %xmm4, %xmm9, %xmm9
  12469. vaesenc %xmm4, %xmm10, %xmm10
  12470. vaesenc %xmm4, %xmm11, %xmm11
  12471. vpshufd $0x4e, %xmm6, %xmm6
  12472. vpxor %xmm3, %xmm6, %xmm6
  12473. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  12474. vaesenc %xmm4, %xmm12, %xmm12
  12475. vaesenc %xmm4, %xmm13, %xmm13
  12476. vaesenc %xmm4, %xmm14, %xmm14
  12477. vpshufd $0x4e, %xmm6, %xmm6
  12478. vpxor %xmm3, %xmm6, %xmm6
  12479. vpxor %xmm7, %xmm6, %xmm6
  12480. vaesenc %xmm4, %xmm15, %xmm15
  12481. cmpl $11, %r9d
  12482. vmovdqu 160(%rsi), %xmm7
  12483. jl L_AES_GCM_encrypt_avx2_aesenc_128_ghash_avx_done
  12484. vaesenc %xmm7, %xmm8, %xmm8
  12485. vaesenc %xmm7, %xmm9, %xmm9
  12486. vaesenc %xmm7, %xmm10, %xmm10
  12487. vaesenc %xmm7, %xmm11, %xmm11
  12488. vaesenc %xmm7, %xmm12, %xmm12
  12489. vaesenc %xmm7, %xmm13, %xmm13
  12490. vaesenc %xmm7, %xmm14, %xmm14
  12491. vaesenc %xmm7, %xmm15, %xmm15
  12492. vmovdqu 176(%rsi), %xmm7
  12493. vaesenc %xmm7, %xmm8, %xmm8
  12494. vaesenc %xmm7, %xmm9, %xmm9
  12495. vaesenc %xmm7, %xmm10, %xmm10
  12496. vaesenc %xmm7, %xmm11, %xmm11
  12497. vaesenc %xmm7, %xmm12, %xmm12
  12498. vaesenc %xmm7, %xmm13, %xmm13
  12499. vaesenc %xmm7, %xmm14, %xmm14
  12500. vaesenc %xmm7, %xmm15, %xmm15
  12501. cmpl $13, %r9d
  12502. vmovdqu 192(%rsi), %xmm7
  12503. jl L_AES_GCM_encrypt_avx2_aesenc_128_ghash_avx_done
  12504. vaesenc %xmm7, %xmm8, %xmm8
  12505. vaesenc %xmm7, %xmm9, %xmm9
  12506. vaesenc %xmm7, %xmm10, %xmm10
  12507. vaesenc %xmm7, %xmm11, %xmm11
  12508. vaesenc %xmm7, %xmm12, %xmm12
  12509. vaesenc %xmm7, %xmm13, %xmm13
  12510. vaesenc %xmm7, %xmm14, %xmm14
  12511. vaesenc %xmm7, %xmm15, %xmm15
  12512. vmovdqu 208(%rsi), %xmm7
  12513. vaesenc %xmm7, %xmm8, %xmm8
  12514. vaesenc %xmm7, %xmm9, %xmm9
  12515. vaesenc %xmm7, %xmm10, %xmm10
  12516. vaesenc %xmm7, %xmm11, %xmm11
  12517. vaesenc %xmm7, %xmm12, %xmm12
  12518. vaesenc %xmm7, %xmm13, %xmm13
  12519. vaesenc %xmm7, %xmm14, %xmm14
  12520. vaesenc %xmm7, %xmm15, %xmm15
  12521. vmovdqu 224(%rsi), %xmm7
  12522. L_AES_GCM_encrypt_avx2_aesenc_128_ghash_avx_done:
  12523. # aesenc_last
  12524. vaesenclast %xmm7, %xmm8, %xmm8
  12525. vaesenclast %xmm7, %xmm9, %xmm9
  12526. vaesenclast %xmm7, %xmm10, %xmm10
  12527. vaesenclast %xmm7, %xmm11, %xmm11
  12528. vmovdqu (%rcx), %xmm0
  12529. vmovdqu 16(%rcx), %xmm1
  12530. vmovdqu 32(%rcx), %xmm2
  12531. vmovdqu 48(%rcx), %xmm3
  12532. vpxor %xmm0, %xmm8, %xmm8
  12533. vpxor %xmm1, %xmm9, %xmm9
  12534. vpxor %xmm2, %xmm10, %xmm10
  12535. vpxor %xmm3, %xmm11, %xmm11
  12536. vmovdqu %xmm8, (%rdx)
  12537. vmovdqu %xmm9, 16(%rdx)
  12538. vmovdqu %xmm10, 32(%rdx)
  12539. vmovdqu %xmm11, 48(%rdx)
  12540. vaesenclast %xmm7, %xmm12, %xmm12
  12541. vaesenclast %xmm7, %xmm13, %xmm13
  12542. vaesenclast %xmm7, %xmm14, %xmm14
  12543. vaesenclast %xmm7, %xmm15, %xmm15
  12544. vmovdqu 64(%rcx), %xmm0
  12545. vmovdqu 80(%rcx), %xmm1
  12546. vmovdqu 96(%rcx), %xmm2
  12547. vmovdqu 112(%rcx), %xmm3
  12548. vpxor %xmm0, %xmm12, %xmm12
  12549. vpxor %xmm1, %xmm13, %xmm13
  12550. vpxor %xmm2, %xmm14, %xmm14
  12551. vpxor %xmm3, %xmm15, %xmm15
  12552. vmovdqu %xmm12, 64(%rdx)
  12553. vmovdqu %xmm13, 80(%rdx)
  12554. vmovdqu %xmm14, 96(%rdx)
  12555. vmovdqu %xmm15, 112(%rdx)
  12556. # aesenc_128_ghash - end
  12557. addl $0x80, %ebx
  12558. cmpl %r13d, %ebx
  12559. jl L_AES_GCM_encrypt_avx2_ghash_128
  12560. L_AES_GCM_encrypt_avx2_end_128:
  12561. vmovdqu L_avx2_aes_gcm_bswap_mask(%rip), %xmm4
  12562. vpshufb %xmm4, %xmm8, %xmm8
  12563. vpshufb %xmm4, %xmm9, %xmm9
  12564. vpshufb %xmm4, %xmm10, %xmm10
  12565. vpshufb %xmm4, %xmm11, %xmm11
  12566. vpshufb %xmm4, %xmm12, %xmm12
  12567. vpshufb %xmm4, %xmm13, %xmm13
  12568. vpshufb %xmm4, %xmm14, %xmm14
  12569. vpshufb %xmm4, %xmm15, %xmm15
  12570. vpxor %xmm6, %xmm8, %xmm8
  12571. vmovdqu (%rsp), %xmm7
  12572. vpclmulqdq $16, %xmm15, %xmm7, %xmm5
  12573. vpclmulqdq $0x01, %xmm15, %xmm7, %xmm1
  12574. vpclmulqdq $0x00, %xmm15, %xmm7, %xmm4
  12575. vpclmulqdq $0x11, %xmm15, %xmm7, %xmm6
  12576. vpxor %xmm1, %xmm5, %xmm5
  12577. vmovdqu 16(%rsp), %xmm7
  12578. vpclmulqdq $16, %xmm14, %xmm7, %xmm2
  12579. vpclmulqdq $0x01, %xmm14, %xmm7, %xmm1
  12580. vpclmulqdq $0x00, %xmm14, %xmm7, %xmm0
  12581. vpclmulqdq $0x11, %xmm14, %xmm7, %xmm3
  12582. vpxor %xmm1, %xmm2, %xmm2
  12583. vpxor %xmm3, %xmm6, %xmm6
  12584. vpxor %xmm2, %xmm5, %xmm5
  12585. vpxor %xmm0, %xmm4, %xmm4
  12586. vmovdqu 32(%rsp), %xmm15
  12587. vmovdqu 48(%rsp), %xmm7
  12588. vpclmulqdq $16, %xmm13, %xmm15, %xmm2
  12589. vpclmulqdq $0x01, %xmm13, %xmm15, %xmm1
  12590. vpclmulqdq $0x00, %xmm13, %xmm15, %xmm0
  12591. vpclmulqdq $0x11, %xmm13, %xmm15, %xmm3
  12592. vpxor %xmm1, %xmm2, %xmm2
  12593. vpxor %xmm3, %xmm6, %xmm6
  12594. vpxor %xmm2, %xmm5, %xmm5
  12595. vpxor %xmm0, %xmm4, %xmm4
  12596. vpclmulqdq $16, %xmm12, %xmm7, %xmm2
  12597. vpclmulqdq $0x01, %xmm12, %xmm7, %xmm1
  12598. vpclmulqdq $0x00, %xmm12, %xmm7, %xmm0
  12599. vpclmulqdq $0x11, %xmm12, %xmm7, %xmm3
  12600. vpxor %xmm1, %xmm2, %xmm2
  12601. vpxor %xmm3, %xmm6, %xmm6
  12602. vpxor %xmm2, %xmm5, %xmm5
  12603. vpxor %xmm0, %xmm4, %xmm4
  12604. vmovdqu 64(%rsp), %xmm15
  12605. vmovdqu 80(%rsp), %xmm7
  12606. vpclmulqdq $16, %xmm11, %xmm15, %xmm2
  12607. vpclmulqdq $0x01, %xmm11, %xmm15, %xmm1
  12608. vpclmulqdq $0x00, %xmm11, %xmm15, %xmm0
  12609. vpclmulqdq $0x11, %xmm11, %xmm15, %xmm3
  12610. vpxor %xmm1, %xmm2, %xmm2
  12611. vpxor %xmm3, %xmm6, %xmm6
  12612. vpxor %xmm2, %xmm5, %xmm5
  12613. vpxor %xmm0, %xmm4, %xmm4
  12614. vpclmulqdq $16, %xmm10, %xmm7, %xmm2
  12615. vpclmulqdq $0x01, %xmm10, %xmm7, %xmm1
  12616. vpclmulqdq $0x00, %xmm10, %xmm7, %xmm0
  12617. vpclmulqdq $0x11, %xmm10, %xmm7, %xmm3
  12618. vpxor %xmm1, %xmm2, %xmm2
  12619. vpxor %xmm3, %xmm6, %xmm6
  12620. vpxor %xmm2, %xmm5, %xmm5
  12621. vpxor %xmm0, %xmm4, %xmm4
  12622. vmovdqu 96(%rsp), %xmm15
  12623. vmovdqu 112(%rsp), %xmm7
  12624. vpclmulqdq $16, %xmm9, %xmm15, %xmm2
  12625. vpclmulqdq $0x01, %xmm9, %xmm15, %xmm1
  12626. vpclmulqdq $0x00, %xmm9, %xmm15, %xmm0
  12627. vpclmulqdq $0x11, %xmm9, %xmm15, %xmm3
  12628. vpxor %xmm1, %xmm2, %xmm2
  12629. vpxor %xmm3, %xmm6, %xmm6
  12630. vpxor %xmm2, %xmm5, %xmm5
  12631. vpxor %xmm0, %xmm4, %xmm4
  12632. vpclmulqdq $16, %xmm8, %xmm7, %xmm2
  12633. vpclmulqdq $0x01, %xmm8, %xmm7, %xmm1
  12634. vpclmulqdq $0x00, %xmm8, %xmm7, %xmm0
  12635. vpclmulqdq $0x11, %xmm8, %xmm7, %xmm3
  12636. vpxor %xmm1, %xmm2, %xmm2
  12637. vpxor %xmm3, %xmm6, %xmm6
  12638. vpxor %xmm2, %xmm5, %xmm5
  12639. vpxor %xmm0, %xmm4, %xmm4
  12640. vpslldq $8, %xmm5, %xmm7
  12641. vpsrldq $8, %xmm5, %xmm5
  12642. vpxor %xmm7, %xmm4, %xmm4
  12643. vpxor %xmm5, %xmm6, %xmm6
  12644. # ghash_red
  12645. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  12646. vpclmulqdq $16, %xmm2, %xmm4, %xmm0
  12647. vpshufd $0x4e, %xmm4, %xmm1
  12648. vpxor %xmm0, %xmm1, %xmm1
  12649. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  12650. vpshufd $0x4e, %xmm1, %xmm1
  12651. vpxor %xmm0, %xmm1, %xmm1
  12652. vpxor %xmm1, %xmm6, %xmm6
  12653. vmovdqu (%rsp), %xmm5
  12654. vmovdqu 128(%rsp), %xmm4
  12655. vmovdqu 144(%rsp), %xmm15
  12656. L_AES_GCM_encrypt_avx2_done_128:
  12657. cmpl %r10d, %ebx
  12658. je L_AES_GCM_encrypt_avx2_done_enc
  12659. movl %r10d, %r13d
  12660. andl $0xfffffff0, %r13d
  12661. cmpl %r13d, %ebx
  12662. jge L_AES_GCM_encrypt_avx2_last_block_done
  12663. # aesenc_block
  12664. vmovdqu %xmm4, %xmm1
  12665. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
  12666. vpaddd L_avx2_aes_gcm_one(%rip), %xmm1, %xmm1
  12667. vpxor (%rsi), %xmm0, %xmm0
  12668. vmovdqu 16(%rsi), %xmm2
  12669. vaesenc %xmm2, %xmm0, %xmm0
  12670. vmovdqu 32(%rsi), %xmm2
  12671. vaesenc %xmm2, %xmm0, %xmm0
  12672. vmovdqu 48(%rsi), %xmm2
  12673. vaesenc %xmm2, %xmm0, %xmm0
  12674. vmovdqu 64(%rsi), %xmm2
  12675. vaesenc %xmm2, %xmm0, %xmm0
  12676. vmovdqu 80(%rsi), %xmm2
  12677. vaesenc %xmm2, %xmm0, %xmm0
  12678. vmovdqu 96(%rsi), %xmm2
  12679. vaesenc %xmm2, %xmm0, %xmm0
  12680. vmovdqu 112(%rsi), %xmm2
  12681. vaesenc %xmm2, %xmm0, %xmm0
  12682. vmovdqu 128(%rsi), %xmm2
  12683. vaesenc %xmm2, %xmm0, %xmm0
  12684. vmovdqu 144(%rsi), %xmm2
  12685. vaesenc %xmm2, %xmm0, %xmm0
  12686. vmovdqu %xmm1, %xmm4
  12687. cmpl $11, %r9d
  12688. vmovdqu 160(%rsi), %xmm1
  12689. jl L_AES_GCM_encrypt_avx2_aesenc_block_last
  12690. vaesenc %xmm1, %xmm0, %xmm0
  12691. vmovdqu 176(%rsi), %xmm2
  12692. vaesenc %xmm2, %xmm0, %xmm0
  12693. cmpl $13, %r9d
  12694. vmovdqu 192(%rsi), %xmm1
  12695. jl L_AES_GCM_encrypt_avx2_aesenc_block_last
  12696. vaesenc %xmm1, %xmm0, %xmm0
  12697. vmovdqu 208(%rsi), %xmm2
  12698. vaesenc %xmm2, %xmm0, %xmm0
  12699. vmovdqu 224(%rsi), %xmm1
  12700. L_AES_GCM_encrypt_avx2_aesenc_block_last:
  12701. vaesenclast %xmm1, %xmm0, %xmm0
  12702. vmovdqu (%rdi,%rbx,1), %xmm1
  12703. vpxor %xmm1, %xmm0, %xmm0
  12704. vmovdqu %xmm0, (%r8,%rbx,1)
  12705. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  12706. vpxor %xmm0, %xmm6, %xmm6
  12707. addl $16, %ebx
  12708. cmpl %r13d, %ebx
  12709. jge L_AES_GCM_encrypt_avx2_last_block_ghash
  12710. L_AES_GCM_encrypt_avx2_last_block_start:
  12711. vmovdqu (%rdi,%rbx,1), %xmm12
  12712. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm11
  12713. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  12714. # aesenc_gfmul_sb
  12715. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm2
  12716. vpclmulqdq $16, %xmm5, %xmm6, %xmm3
  12717. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm1
  12718. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm8
  12719. vpxor (%rsi), %xmm11, %xmm11
  12720. vaesenc 16(%rsi), %xmm11, %xmm11
  12721. vpxor %xmm2, %xmm3, %xmm3
  12722. vpslldq $8, %xmm3, %xmm2
  12723. vpsrldq $8, %xmm3, %xmm3
  12724. vaesenc 32(%rsi), %xmm11, %xmm11
  12725. vpxor %xmm1, %xmm2, %xmm2
  12726. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  12727. vaesenc 48(%rsi), %xmm11, %xmm11
  12728. vaesenc 64(%rsi), %xmm11, %xmm11
  12729. vaesenc 80(%rsi), %xmm11, %xmm11
  12730. vpshufd $0x4e, %xmm2, %xmm2
  12731. vpxor %xmm1, %xmm2, %xmm2
  12732. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  12733. vaesenc 96(%rsi), %xmm11, %xmm11
  12734. vaesenc 112(%rsi), %xmm11, %xmm11
  12735. vaesenc 128(%rsi), %xmm11, %xmm11
  12736. vpshufd $0x4e, %xmm2, %xmm2
  12737. vaesenc 144(%rsi), %xmm11, %xmm11
  12738. vpxor %xmm3, %xmm8, %xmm8
  12739. vpxor %xmm8, %xmm2, %xmm2
  12740. vmovdqu 160(%rsi), %xmm0
  12741. cmpl $11, %r9d
  12742. jl L_AES_GCM_encrypt_avx2_aesenc_gfmul_sb_last
  12743. vaesenc %xmm0, %xmm11, %xmm11
  12744. vaesenc 176(%rsi), %xmm11, %xmm11
  12745. vmovdqu 192(%rsi), %xmm0
  12746. cmpl $13, %r9d
  12747. jl L_AES_GCM_encrypt_avx2_aesenc_gfmul_sb_last
  12748. vaesenc %xmm0, %xmm11, %xmm11
  12749. vaesenc 208(%rsi), %xmm11, %xmm11
  12750. vmovdqu 224(%rsi), %xmm0
  12751. L_AES_GCM_encrypt_avx2_aesenc_gfmul_sb_last:
  12752. vaesenclast %xmm0, %xmm11, %xmm11
  12753. vpxor %xmm1, %xmm2, %xmm6
  12754. vpxor %xmm12, %xmm11, %xmm11
  12755. vmovdqu %xmm11, (%r8,%rbx,1)
  12756. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm11
  12757. vpxor %xmm11, %xmm6, %xmm6
  12758. addl $16, %ebx
  12759. cmpl %r13d, %ebx
  12760. jl L_AES_GCM_encrypt_avx2_last_block_start
  12761. L_AES_GCM_encrypt_avx2_last_block_ghash:
  12762. # ghash_gfmul_red
  12763. vpclmulqdq $16, %xmm5, %xmm6, %xmm10
  12764. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm9
  12765. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  12766. vpxor %xmm9, %xmm10, %xmm10
  12767. vpslldq $8, %xmm10, %xmm9
  12768. vpsrldq $8, %xmm10, %xmm10
  12769. vpxor %xmm8, %xmm9, %xmm9
  12770. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm6
  12771. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
  12772. vpshufd $0x4e, %xmm9, %xmm9
  12773. vpxor %xmm8, %xmm9, %xmm9
  12774. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
  12775. vpshufd $0x4e, %xmm9, %xmm9
  12776. vpxor %xmm10, %xmm6, %xmm6
  12777. vpxor %xmm9, %xmm6, %xmm6
  12778. vpxor %xmm8, %xmm6, %xmm6
  12779. L_AES_GCM_encrypt_avx2_last_block_done:
  12780. movl %r10d, %ecx
  12781. movl %r10d, %edx
  12782. andl $15, %ecx
  12783. jz L_AES_GCM_encrypt_avx2_done_enc
  12784. # aesenc_last15_enc
  12785. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  12786. vpxor (%rsi), %xmm4, %xmm4
  12787. vaesenc 16(%rsi), %xmm4, %xmm4
  12788. vaesenc 32(%rsi), %xmm4, %xmm4
  12789. vaesenc 48(%rsi), %xmm4, %xmm4
  12790. vaesenc 64(%rsi), %xmm4, %xmm4
  12791. vaesenc 80(%rsi), %xmm4, %xmm4
  12792. vaesenc 96(%rsi), %xmm4, %xmm4
  12793. vaesenc 112(%rsi), %xmm4, %xmm4
  12794. vaesenc 128(%rsi), %xmm4, %xmm4
  12795. vaesenc 144(%rsi), %xmm4, %xmm4
  12796. cmpl $11, %r9d
  12797. vmovdqu 160(%rsi), %xmm0
  12798. jl L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_aesenc_avx_last
  12799. vaesenc %xmm0, %xmm4, %xmm4
  12800. vaesenc 176(%rsi), %xmm4, %xmm4
  12801. cmpl $13, %r9d
  12802. vmovdqu 192(%rsi), %xmm0
  12803. jl L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_aesenc_avx_last
  12804. vaesenc %xmm0, %xmm4, %xmm4
  12805. vaesenc 208(%rsi), %xmm4, %xmm4
  12806. vmovdqu 224(%rsi), %xmm0
  12807. L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_aesenc_avx_last:
  12808. vaesenclast %xmm0, %xmm4, %xmm4
  12809. xorl %ecx, %ecx
  12810. vpxor %xmm0, %xmm0, %xmm0
  12811. vmovdqu %xmm4, (%rsp)
  12812. vmovdqu %xmm0, 16(%rsp)
  12813. L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_loop:
  12814. movzbl (%rdi,%rbx,1), %r13d
  12815. xorb (%rsp,%rcx,1), %r13b
  12816. movb %r13b, 16(%rsp,%rcx,1)
  12817. movb %r13b, (%r8,%rbx,1)
  12818. incl %ebx
  12819. incl %ecx
  12820. cmpl %edx, %ebx
  12821. jl L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_loop
  12822. L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_finish_enc:
  12823. vmovdqu 16(%rsp), %xmm4
  12824. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  12825. vpxor %xmm4, %xmm6, %xmm6
  12826. # ghash_gfmul_red
  12827. vpclmulqdq $16, %xmm5, %xmm6, %xmm2
  12828. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm1
  12829. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm0
  12830. vpxor %xmm1, %xmm2, %xmm2
  12831. vpslldq $8, %xmm2, %xmm1
  12832. vpsrldq $8, %xmm2, %xmm2
  12833. vpxor %xmm0, %xmm1, %xmm1
  12834. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm6
  12835. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
  12836. vpshufd $0x4e, %xmm1, %xmm1
  12837. vpxor %xmm0, %xmm1, %xmm1
  12838. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
  12839. vpshufd $0x4e, %xmm1, %xmm1
  12840. vpxor %xmm2, %xmm6, %xmm6
  12841. vpxor %xmm1, %xmm6, %xmm6
  12842. vpxor %xmm0, %xmm6, %xmm6
  12843. L_AES_GCM_encrypt_avx2_done_enc:
  12844. # calc_tag
  12845. shlq $3, %r10
  12846. shlq $3, %r11
  12847. vmovq %r10, %xmm0
  12848. vmovq %r11, %xmm1
  12849. vpunpcklqdq %xmm1, %xmm0, %xmm0
  12850. vpxor %xmm6, %xmm0, %xmm0
  12851. # ghash_gfmul_red
  12852. vpclmulqdq $16, %xmm5, %xmm0, %xmm4
  12853. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm3
  12854. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm2
  12855. vpxor %xmm3, %xmm4, %xmm4
  12856. vpslldq $8, %xmm4, %xmm3
  12857. vpsrldq $8, %xmm4, %xmm4
  12858. vpxor %xmm2, %xmm3, %xmm3
  12859. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm0
  12860. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  12861. vpshufd $0x4e, %xmm3, %xmm3
  12862. vpxor %xmm2, %xmm3, %xmm3
  12863. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  12864. vpshufd $0x4e, %xmm3, %xmm3
  12865. vpxor %xmm4, %xmm0, %xmm0
  12866. vpxor %xmm3, %xmm0, %xmm0
  12867. vpxor %xmm2, %xmm0, %xmm0
  12868. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  12869. vpxor %xmm15, %xmm0, %xmm0
  12870. # store_tag
  12871. cmpl $16, %r14d
  12872. je L_AES_GCM_encrypt_avx2_store_tag_16
  12873. xorq %rcx, %rcx
  12874. vmovdqu %xmm0, (%rsp)
  12875. L_AES_GCM_encrypt_avx2_store_tag_loop:
  12876. movzbl (%rsp,%rcx,1), %r13d
  12877. movb %r13b, (%r15,%rcx,1)
  12878. incl %ecx
  12879. cmpl %r14d, %ecx
  12880. jne L_AES_GCM_encrypt_avx2_store_tag_loop
  12881. jmp L_AES_GCM_encrypt_avx2_store_tag_done
  12882. L_AES_GCM_encrypt_avx2_store_tag_16:
  12883. vmovdqu %xmm0, (%r15)
  12884. L_AES_GCM_encrypt_avx2_store_tag_done:
  12885. vzeroupper
  12886. addq $0xa0, %rsp
  12887. popq %r14
  12888. popq %rbx
  12889. popq %r15
  12890. popq %r12
  12891. popq %r13
  12892. repz retq
  12893. #ifndef __APPLE__
  12894. .size AES_GCM_encrypt_avx2,.-AES_GCM_encrypt_avx2
  12895. #endif /* __APPLE__ */
  12896. #ifndef __APPLE__
  12897. .text
  12898. .globl AES_GCM_decrypt_avx2
  12899. .type AES_GCM_decrypt_avx2,@function
  12900. .align 16
  12901. AES_GCM_decrypt_avx2:
  12902. #else
  12903. .section __TEXT,__text
  12904. .globl _AES_GCM_decrypt_avx2
  12905. .p2align 4
  12906. _AES_GCM_decrypt_avx2:
  12907. #endif /* __APPLE__ */
  12908. pushq %r13
  12909. pushq %r12
  12910. pushq %r14
  12911. pushq %rbx
  12912. pushq %r15
  12913. pushq %rbp
  12914. movq %rdx, %r12
  12915. movq %rcx, %rax
  12916. movq %r8, %r14
  12917. movq %rsi, %r8
  12918. movl %r9d, %r10d
  12919. movl 56(%rsp), %r11d
  12920. movl 64(%rsp), %ebx
  12921. movl 72(%rsp), %r15d
  12922. movq 80(%rsp), %rsi
  12923. movl 88(%rsp), %r9d
  12924. movq 96(%rsp), %rbp
  12925. subq $0xa8, %rsp
  12926. vpxor %xmm4, %xmm4, %xmm4
  12927. vpxor %xmm6, %xmm6, %xmm6
  12928. movl %ebx, %edx
  12929. cmpl $12, %edx
  12930. je L_AES_GCM_decrypt_avx2_iv_12
  12931. # Calculate values when IV is not 12 bytes
  12932. # H = Encrypt X(=0)
  12933. vmovdqu (%rsi), %xmm5
  12934. vaesenc 16(%rsi), %xmm5, %xmm5
  12935. vaesenc 32(%rsi), %xmm5, %xmm5
  12936. vaesenc 48(%rsi), %xmm5, %xmm5
  12937. vaesenc 64(%rsi), %xmm5, %xmm5
  12938. vaesenc 80(%rsi), %xmm5, %xmm5
  12939. vaesenc 96(%rsi), %xmm5, %xmm5
  12940. vaesenc 112(%rsi), %xmm5, %xmm5
  12941. vaesenc 128(%rsi), %xmm5, %xmm5
  12942. vaesenc 144(%rsi), %xmm5, %xmm5
  12943. cmpl $11, %r9d
  12944. vmovdqu 160(%rsi), %xmm0
  12945. jl L_AES_GCM_decrypt_avx2_calc_iv_1_aesenc_avx_last
  12946. vaesenc %xmm0, %xmm5, %xmm5
  12947. vaesenc 176(%rsi), %xmm5, %xmm5
  12948. cmpl $13, %r9d
  12949. vmovdqu 192(%rsi), %xmm0
  12950. jl L_AES_GCM_decrypt_avx2_calc_iv_1_aesenc_avx_last
  12951. vaesenc %xmm0, %xmm5, %xmm5
  12952. vaesenc 208(%rsi), %xmm5, %xmm5
  12953. vmovdqu 224(%rsi), %xmm0
  12954. L_AES_GCM_decrypt_avx2_calc_iv_1_aesenc_avx_last:
  12955. vaesenclast %xmm0, %xmm5, %xmm5
  12956. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  12957. # Calc counter
  12958. # Initialization vector
  12959. cmpl $0x00, %edx
  12960. movq $0x00, %rcx
  12961. je L_AES_GCM_decrypt_avx2_calc_iv_done
  12962. cmpl $16, %edx
  12963. jl L_AES_GCM_decrypt_avx2_calc_iv_lt16
  12964. andl $0xfffffff0, %edx
  12965. L_AES_GCM_decrypt_avx2_calc_iv_16_loop:
  12966. vmovdqu (%rax,%rcx,1), %xmm0
  12967. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  12968. vpxor %xmm0, %xmm4, %xmm4
  12969. # ghash_gfmul_avx
  12970. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  12971. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  12972. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  12973. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  12974. vpxor %xmm1, %xmm2, %xmm2
  12975. vpslldq $8, %xmm2, %xmm1
  12976. vpsrldq $8, %xmm2, %xmm2
  12977. vpxor %xmm1, %xmm0, %xmm7
  12978. vpxor %xmm2, %xmm3, %xmm4
  12979. # ghash_mid
  12980. vpsrld $31, %xmm7, %xmm0
  12981. vpsrld $31, %xmm4, %xmm1
  12982. vpslld $0x01, %xmm7, %xmm7
  12983. vpslld $0x01, %xmm4, %xmm4
  12984. vpsrldq $12, %xmm0, %xmm2
  12985. vpslldq $4, %xmm0, %xmm0
  12986. vpslldq $4, %xmm1, %xmm1
  12987. vpor %xmm2, %xmm4, %xmm4
  12988. vpor %xmm0, %xmm7, %xmm7
  12989. vpor %xmm1, %xmm4, %xmm4
  12990. # ghash_red
  12991. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  12992. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  12993. vpshufd $0x4e, %xmm7, %xmm1
  12994. vpxor %xmm0, %xmm1, %xmm1
  12995. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  12996. vpshufd $0x4e, %xmm1, %xmm1
  12997. vpxor %xmm0, %xmm1, %xmm1
  12998. vpxor %xmm1, %xmm4, %xmm4
  12999. addl $16, %ecx
  13000. cmpl %edx, %ecx
  13001. jl L_AES_GCM_decrypt_avx2_calc_iv_16_loop
  13002. movl %ebx, %edx
  13003. cmpl %edx, %ecx
  13004. je L_AES_GCM_decrypt_avx2_calc_iv_done
  13005. L_AES_GCM_decrypt_avx2_calc_iv_lt16:
  13006. vpxor %xmm0, %xmm0, %xmm0
  13007. xorl %ebx, %ebx
  13008. vmovdqu %xmm0, (%rsp)
  13009. L_AES_GCM_decrypt_avx2_calc_iv_loop:
  13010. movzbl (%rax,%rcx,1), %r13d
  13011. movb %r13b, (%rsp,%rbx,1)
  13012. incl %ecx
  13013. incl %ebx
  13014. cmpl %edx, %ecx
  13015. jl L_AES_GCM_decrypt_avx2_calc_iv_loop
  13016. vmovdqu (%rsp), %xmm0
  13017. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  13018. vpxor %xmm0, %xmm4, %xmm4
  13019. # ghash_gfmul_avx
  13020. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  13021. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  13022. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  13023. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  13024. vpxor %xmm1, %xmm2, %xmm2
  13025. vpslldq $8, %xmm2, %xmm1
  13026. vpsrldq $8, %xmm2, %xmm2
  13027. vpxor %xmm1, %xmm0, %xmm7
  13028. vpxor %xmm2, %xmm3, %xmm4
  13029. # ghash_mid
  13030. vpsrld $31, %xmm7, %xmm0
  13031. vpsrld $31, %xmm4, %xmm1
  13032. vpslld $0x01, %xmm7, %xmm7
  13033. vpslld $0x01, %xmm4, %xmm4
  13034. vpsrldq $12, %xmm0, %xmm2
  13035. vpslldq $4, %xmm0, %xmm0
  13036. vpslldq $4, %xmm1, %xmm1
  13037. vpor %xmm2, %xmm4, %xmm4
  13038. vpor %xmm0, %xmm7, %xmm7
  13039. vpor %xmm1, %xmm4, %xmm4
  13040. # ghash_red
  13041. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  13042. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  13043. vpshufd $0x4e, %xmm7, %xmm1
  13044. vpxor %xmm0, %xmm1, %xmm1
  13045. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  13046. vpshufd $0x4e, %xmm1, %xmm1
  13047. vpxor %xmm0, %xmm1, %xmm1
  13048. vpxor %xmm1, %xmm4, %xmm4
  13049. L_AES_GCM_decrypt_avx2_calc_iv_done:
  13050. # T = Encrypt counter
  13051. vpxor %xmm0, %xmm0, %xmm0
  13052. shll $3, %edx
  13053. vmovq %rdx, %xmm0
  13054. vpxor %xmm0, %xmm4, %xmm4
  13055. # ghash_gfmul_avx
  13056. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  13057. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  13058. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  13059. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  13060. vpxor %xmm1, %xmm2, %xmm2
  13061. vpslldq $8, %xmm2, %xmm1
  13062. vpsrldq $8, %xmm2, %xmm2
  13063. vpxor %xmm1, %xmm0, %xmm7
  13064. vpxor %xmm2, %xmm3, %xmm4
  13065. # ghash_mid
  13066. vpsrld $31, %xmm7, %xmm0
  13067. vpsrld $31, %xmm4, %xmm1
  13068. vpslld $0x01, %xmm7, %xmm7
  13069. vpslld $0x01, %xmm4, %xmm4
  13070. vpsrldq $12, %xmm0, %xmm2
  13071. vpslldq $4, %xmm0, %xmm0
  13072. vpslldq $4, %xmm1, %xmm1
  13073. vpor %xmm2, %xmm4, %xmm4
  13074. vpor %xmm0, %xmm7, %xmm7
  13075. vpor %xmm1, %xmm4, %xmm4
  13076. # ghash_red
  13077. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  13078. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  13079. vpshufd $0x4e, %xmm7, %xmm1
  13080. vpxor %xmm0, %xmm1, %xmm1
  13081. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  13082. vpshufd $0x4e, %xmm1, %xmm1
  13083. vpxor %xmm0, %xmm1, %xmm1
  13084. vpxor %xmm1, %xmm4, %xmm4
  13085. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  13086. # Encrypt counter
  13087. vmovdqu (%rsi), %xmm15
  13088. vpxor %xmm4, %xmm15, %xmm15
  13089. vaesenc 16(%rsi), %xmm15, %xmm15
  13090. vaesenc 32(%rsi), %xmm15, %xmm15
  13091. vaesenc 48(%rsi), %xmm15, %xmm15
  13092. vaesenc 64(%rsi), %xmm15, %xmm15
  13093. vaesenc 80(%rsi), %xmm15, %xmm15
  13094. vaesenc 96(%rsi), %xmm15, %xmm15
  13095. vaesenc 112(%rsi), %xmm15, %xmm15
  13096. vaesenc 128(%rsi), %xmm15, %xmm15
  13097. vaesenc 144(%rsi), %xmm15, %xmm15
  13098. cmpl $11, %r9d
  13099. vmovdqu 160(%rsi), %xmm0
  13100. jl L_AES_GCM_decrypt_avx2_calc_iv_2_aesenc_avx_last
  13101. vaesenc %xmm0, %xmm15, %xmm15
  13102. vaesenc 176(%rsi), %xmm15, %xmm15
  13103. cmpl $13, %r9d
  13104. vmovdqu 192(%rsi), %xmm0
  13105. jl L_AES_GCM_decrypt_avx2_calc_iv_2_aesenc_avx_last
  13106. vaesenc %xmm0, %xmm15, %xmm15
  13107. vaesenc 208(%rsi), %xmm15, %xmm15
  13108. vmovdqu 224(%rsi), %xmm0
  13109. L_AES_GCM_decrypt_avx2_calc_iv_2_aesenc_avx_last:
  13110. vaesenclast %xmm0, %xmm15, %xmm15
  13111. jmp L_AES_GCM_decrypt_avx2_iv_done
  13112. L_AES_GCM_decrypt_avx2_iv_12:
  13113. # # Calculate values when IV is 12 bytes
  13114. # Set counter based on IV
  13115. vmovdqu L_avx2_aes_gcm_bswap_one(%rip), %xmm4
  13116. vmovdqu (%rsi), %xmm5
  13117. vpblendd $7, (%rax), %xmm4, %xmm4
  13118. # H = Encrypt X(=0) and T = Encrypt counter
  13119. vmovdqu 16(%rsi), %xmm7
  13120. vpxor %xmm5, %xmm4, %xmm15
  13121. vaesenc %xmm7, %xmm5, %xmm5
  13122. vaesenc %xmm7, %xmm15, %xmm15
  13123. vmovdqu 32(%rsi), %xmm0
  13124. vaesenc %xmm0, %xmm5, %xmm5
  13125. vaesenc %xmm0, %xmm15, %xmm15
  13126. vmovdqu 48(%rsi), %xmm0
  13127. vaesenc %xmm0, %xmm5, %xmm5
  13128. vaesenc %xmm0, %xmm15, %xmm15
  13129. vmovdqu 64(%rsi), %xmm0
  13130. vaesenc %xmm0, %xmm5, %xmm5
  13131. vaesenc %xmm0, %xmm15, %xmm15
  13132. vmovdqu 80(%rsi), %xmm0
  13133. vaesenc %xmm0, %xmm5, %xmm5
  13134. vaesenc %xmm0, %xmm15, %xmm15
  13135. vmovdqu 96(%rsi), %xmm0
  13136. vaesenc %xmm0, %xmm5, %xmm5
  13137. vaesenc %xmm0, %xmm15, %xmm15
  13138. vmovdqu 112(%rsi), %xmm0
  13139. vaesenc %xmm0, %xmm5, %xmm5
  13140. vaesenc %xmm0, %xmm15, %xmm15
  13141. vmovdqu 128(%rsi), %xmm0
  13142. vaesenc %xmm0, %xmm5, %xmm5
  13143. vaesenc %xmm0, %xmm15, %xmm15
  13144. vmovdqu 144(%rsi), %xmm0
  13145. vaesenc %xmm0, %xmm5, %xmm5
  13146. vaesenc %xmm0, %xmm15, %xmm15
  13147. cmpl $11, %r9d
  13148. vmovdqu 160(%rsi), %xmm0
  13149. jl L_AES_GCM_decrypt_avx2_calc_iv_12_last
  13150. vaesenc %xmm0, %xmm5, %xmm5
  13151. vaesenc %xmm0, %xmm15, %xmm15
  13152. vmovdqu 176(%rsi), %xmm0
  13153. vaesenc %xmm0, %xmm5, %xmm5
  13154. vaesenc %xmm0, %xmm15, %xmm15
  13155. cmpl $13, %r9d
  13156. vmovdqu 192(%rsi), %xmm0
  13157. jl L_AES_GCM_decrypt_avx2_calc_iv_12_last
  13158. vaesenc %xmm0, %xmm5, %xmm5
  13159. vaesenc %xmm0, %xmm15, %xmm15
  13160. vmovdqu 208(%rsi), %xmm0
  13161. vaesenc %xmm0, %xmm5, %xmm5
  13162. vaesenc %xmm0, %xmm15, %xmm15
  13163. vmovdqu 224(%rsi), %xmm0
  13164. L_AES_GCM_decrypt_avx2_calc_iv_12_last:
  13165. vaesenclast %xmm0, %xmm5, %xmm5
  13166. vaesenclast %xmm0, %xmm15, %xmm15
  13167. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  13168. L_AES_GCM_decrypt_avx2_iv_done:
  13169. # Additional authentication data
  13170. movl %r11d, %edx
  13171. cmpl $0x00, %edx
  13172. je L_AES_GCM_decrypt_avx2_calc_aad_done
  13173. xorl %ecx, %ecx
  13174. cmpl $16, %edx
  13175. jl L_AES_GCM_decrypt_avx2_calc_aad_lt16
  13176. andl $0xfffffff0, %edx
  13177. L_AES_GCM_decrypt_avx2_calc_aad_16_loop:
  13178. vmovdqu (%r12,%rcx,1), %xmm0
  13179. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  13180. vpxor %xmm0, %xmm6, %xmm6
  13181. # ghash_gfmul_avx
  13182. vpclmulqdq $16, %xmm6, %xmm5, %xmm2
  13183. vpclmulqdq $0x01, %xmm6, %xmm5, %xmm1
  13184. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  13185. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  13186. vpxor %xmm1, %xmm2, %xmm2
  13187. vpslldq $8, %xmm2, %xmm1
  13188. vpsrldq $8, %xmm2, %xmm2
  13189. vpxor %xmm1, %xmm0, %xmm7
  13190. vpxor %xmm2, %xmm3, %xmm6
  13191. # ghash_mid
  13192. vpsrld $31, %xmm7, %xmm0
  13193. vpsrld $31, %xmm6, %xmm1
  13194. vpslld $0x01, %xmm7, %xmm7
  13195. vpslld $0x01, %xmm6, %xmm6
  13196. vpsrldq $12, %xmm0, %xmm2
  13197. vpslldq $4, %xmm0, %xmm0
  13198. vpslldq $4, %xmm1, %xmm1
  13199. vpor %xmm2, %xmm6, %xmm6
  13200. vpor %xmm0, %xmm7, %xmm7
  13201. vpor %xmm1, %xmm6, %xmm6
  13202. # ghash_red
  13203. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  13204. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  13205. vpshufd $0x4e, %xmm7, %xmm1
  13206. vpxor %xmm0, %xmm1, %xmm1
  13207. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  13208. vpshufd $0x4e, %xmm1, %xmm1
  13209. vpxor %xmm0, %xmm1, %xmm1
  13210. vpxor %xmm1, %xmm6, %xmm6
  13211. addl $16, %ecx
  13212. cmpl %edx, %ecx
  13213. jl L_AES_GCM_decrypt_avx2_calc_aad_16_loop
  13214. movl %r11d, %edx
  13215. cmpl %edx, %ecx
  13216. je L_AES_GCM_decrypt_avx2_calc_aad_done
  13217. L_AES_GCM_decrypt_avx2_calc_aad_lt16:
  13218. vpxor %xmm0, %xmm0, %xmm0
  13219. xorl %ebx, %ebx
  13220. vmovdqu %xmm0, (%rsp)
  13221. L_AES_GCM_decrypt_avx2_calc_aad_loop:
  13222. movzbl (%r12,%rcx,1), %r13d
  13223. movb %r13b, (%rsp,%rbx,1)
  13224. incl %ecx
  13225. incl %ebx
  13226. cmpl %edx, %ecx
  13227. jl L_AES_GCM_decrypt_avx2_calc_aad_loop
  13228. vmovdqu (%rsp), %xmm0
  13229. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  13230. vpxor %xmm0, %xmm6, %xmm6
  13231. # ghash_gfmul_avx
  13232. vpclmulqdq $16, %xmm6, %xmm5, %xmm2
  13233. vpclmulqdq $0x01, %xmm6, %xmm5, %xmm1
  13234. vpclmulqdq $0x00, %xmm6, %xmm5, %xmm0
  13235. vpclmulqdq $0x11, %xmm6, %xmm5, %xmm3
  13236. vpxor %xmm1, %xmm2, %xmm2
  13237. vpslldq $8, %xmm2, %xmm1
  13238. vpsrldq $8, %xmm2, %xmm2
  13239. vpxor %xmm1, %xmm0, %xmm7
  13240. vpxor %xmm2, %xmm3, %xmm6
  13241. # ghash_mid
  13242. vpsrld $31, %xmm7, %xmm0
  13243. vpsrld $31, %xmm6, %xmm1
  13244. vpslld $0x01, %xmm7, %xmm7
  13245. vpslld $0x01, %xmm6, %xmm6
  13246. vpsrldq $12, %xmm0, %xmm2
  13247. vpslldq $4, %xmm0, %xmm0
  13248. vpslldq $4, %xmm1, %xmm1
  13249. vpor %xmm2, %xmm6, %xmm6
  13250. vpor %xmm0, %xmm7, %xmm7
  13251. vpor %xmm1, %xmm6, %xmm6
  13252. # ghash_red
  13253. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  13254. vpclmulqdq $16, %xmm2, %xmm7, %xmm0
  13255. vpshufd $0x4e, %xmm7, %xmm1
  13256. vpxor %xmm0, %xmm1, %xmm1
  13257. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  13258. vpshufd $0x4e, %xmm1, %xmm1
  13259. vpxor %xmm0, %xmm1, %xmm1
  13260. vpxor %xmm1, %xmm6, %xmm6
  13261. L_AES_GCM_decrypt_avx2_calc_aad_done:
  13262. # Calculate counter and H
  13263. vpsrlq $63, %xmm5, %xmm1
  13264. vpsllq $0x01, %xmm5, %xmm0
  13265. vpslldq $8, %xmm1, %xmm1
  13266. vpor %xmm1, %xmm0, %xmm0
  13267. vpshufd $0xff, %xmm5, %xmm5
  13268. vpsrad $31, %xmm5, %xmm5
  13269. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  13270. vpand L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  13271. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  13272. vpxor %xmm0, %xmm5, %xmm5
  13273. xorl %ebx, %ebx
  13274. cmpl $0x80, %r10d
  13275. movl %r10d, %r13d
  13276. jl L_AES_GCM_decrypt_avx2_done_128
  13277. andl $0xffffff80, %r13d
  13278. vmovdqu %xmm4, 128(%rsp)
  13279. vmovdqu %xmm15, 144(%rsp)
  13280. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm3
  13281. # H ^ 1 and H ^ 2
  13282. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm9
  13283. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm10
  13284. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  13285. vpshufd $0x4e, %xmm9, %xmm9
  13286. vpxor %xmm8, %xmm9, %xmm9
  13287. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  13288. vpshufd $0x4e, %xmm9, %xmm9
  13289. vpxor %xmm8, %xmm9, %xmm9
  13290. vpxor %xmm9, %xmm10, %xmm0
  13291. vmovdqu %xmm5, (%rsp)
  13292. vmovdqu %xmm0, 16(%rsp)
  13293. # H ^ 3 and H ^ 4
  13294. vpclmulqdq $16, %xmm5, %xmm0, %xmm11
  13295. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm10
  13296. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm9
  13297. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm12
  13298. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm13
  13299. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm14
  13300. vpxor %xmm10, %xmm11, %xmm11
  13301. vpslldq $8, %xmm11, %xmm10
  13302. vpsrldq $8, %xmm11, %xmm11
  13303. vpxor %xmm9, %xmm10, %xmm10
  13304. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  13305. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  13306. vpshufd $0x4e, %xmm10, %xmm10
  13307. vpshufd $0x4e, %xmm13, %xmm13
  13308. vpxor %xmm9, %xmm10, %xmm10
  13309. vpxor %xmm8, %xmm13, %xmm13
  13310. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  13311. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  13312. vpshufd $0x4e, %xmm10, %xmm10
  13313. vpshufd $0x4e, %xmm13, %xmm13
  13314. vpxor %xmm11, %xmm12, %xmm12
  13315. vpxor %xmm8, %xmm13, %xmm13
  13316. vpxor %xmm12, %xmm10, %xmm10
  13317. vpxor %xmm14, %xmm13, %xmm2
  13318. vpxor %xmm9, %xmm10, %xmm1
  13319. vmovdqu %xmm1, 32(%rsp)
  13320. vmovdqu %xmm2, 48(%rsp)
  13321. # H ^ 5 and H ^ 6
  13322. vpclmulqdq $16, %xmm0, %xmm1, %xmm11
  13323. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm10
  13324. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm9
  13325. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm12
  13326. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm13
  13327. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm14
  13328. vpxor %xmm10, %xmm11, %xmm11
  13329. vpslldq $8, %xmm11, %xmm10
  13330. vpsrldq $8, %xmm11, %xmm11
  13331. vpxor %xmm9, %xmm10, %xmm10
  13332. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  13333. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  13334. vpshufd $0x4e, %xmm10, %xmm10
  13335. vpshufd $0x4e, %xmm13, %xmm13
  13336. vpxor %xmm9, %xmm10, %xmm10
  13337. vpxor %xmm8, %xmm13, %xmm13
  13338. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  13339. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  13340. vpshufd $0x4e, %xmm10, %xmm10
  13341. vpshufd $0x4e, %xmm13, %xmm13
  13342. vpxor %xmm11, %xmm12, %xmm12
  13343. vpxor %xmm8, %xmm13, %xmm13
  13344. vpxor %xmm12, %xmm10, %xmm10
  13345. vpxor %xmm14, %xmm13, %xmm0
  13346. vpxor %xmm9, %xmm10, %xmm7
  13347. vmovdqu %xmm7, 64(%rsp)
  13348. vmovdqu %xmm0, 80(%rsp)
  13349. # H ^ 7 and H ^ 8
  13350. vpclmulqdq $16, %xmm1, %xmm2, %xmm11
  13351. vpclmulqdq $0x01, %xmm1, %xmm2, %xmm10
  13352. vpclmulqdq $0x00, %xmm1, %xmm2, %xmm9
  13353. vpclmulqdq $0x11, %xmm1, %xmm2, %xmm12
  13354. vpclmulqdq $0x00, %xmm2, %xmm2, %xmm13
  13355. vpclmulqdq $0x11, %xmm2, %xmm2, %xmm14
  13356. vpxor %xmm10, %xmm11, %xmm11
  13357. vpslldq $8, %xmm11, %xmm10
  13358. vpsrldq $8, %xmm11, %xmm11
  13359. vpxor %xmm9, %xmm10, %xmm10
  13360. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  13361. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  13362. vpshufd $0x4e, %xmm10, %xmm10
  13363. vpshufd $0x4e, %xmm13, %xmm13
  13364. vpxor %xmm9, %xmm10, %xmm10
  13365. vpxor %xmm8, %xmm13, %xmm13
  13366. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  13367. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  13368. vpshufd $0x4e, %xmm10, %xmm10
  13369. vpshufd $0x4e, %xmm13, %xmm13
  13370. vpxor %xmm11, %xmm12, %xmm12
  13371. vpxor %xmm8, %xmm13, %xmm13
  13372. vpxor %xmm12, %xmm10, %xmm10
  13373. vpxor %xmm14, %xmm13, %xmm0
  13374. vpxor %xmm9, %xmm10, %xmm7
  13375. vmovdqu %xmm7, 96(%rsp)
  13376. vmovdqu %xmm0, 112(%rsp)
  13377. L_AES_GCM_decrypt_avx2_ghash_128:
  13378. # aesenc_128_ghash
  13379. leaq (%rdi,%rbx,1), %rcx
  13380. leaq (%r8,%rbx,1), %rdx
  13381. # aesenc_ctr
  13382. vmovdqu 128(%rsp), %xmm0
  13383. vmovdqu L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
  13384. vpaddd L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
  13385. vpshufb %xmm1, %xmm0, %xmm8
  13386. vpaddd L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
  13387. vpshufb %xmm1, %xmm9, %xmm9
  13388. vpaddd L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
  13389. vpshufb %xmm1, %xmm10, %xmm10
  13390. vpaddd L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
  13391. vpshufb %xmm1, %xmm11, %xmm11
  13392. vpaddd L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
  13393. vpshufb %xmm1, %xmm12, %xmm12
  13394. vpaddd L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
  13395. vpshufb %xmm1, %xmm13, %xmm13
  13396. vpaddd L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
  13397. vpshufb %xmm1, %xmm14, %xmm14
  13398. vpaddd L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
  13399. vpshufb %xmm1, %xmm15, %xmm15
  13400. # aesenc_xor
  13401. vmovdqu (%rsi), %xmm7
  13402. vmovdqu %xmm0, 128(%rsp)
  13403. vpxor %xmm7, %xmm8, %xmm8
  13404. vpxor %xmm7, %xmm9, %xmm9
  13405. vpxor %xmm7, %xmm10, %xmm10
  13406. vpxor %xmm7, %xmm11, %xmm11
  13407. vpxor %xmm7, %xmm12, %xmm12
  13408. vpxor %xmm7, %xmm13, %xmm13
  13409. vpxor %xmm7, %xmm14, %xmm14
  13410. vpxor %xmm7, %xmm15, %xmm15
  13411. # aesenc_pclmul_1
  13412. vmovdqu (%rcx), %xmm1
  13413. vmovdqu 16(%rsi), %xmm0
  13414. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13415. vmovdqu 112(%rsp), %xmm2
  13416. vpxor %xmm6, %xmm1, %xmm1
  13417. vpclmulqdq $16, %xmm2, %xmm1, %xmm5
  13418. vpclmulqdq $0x01, %xmm2, %xmm1, %xmm3
  13419. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm6
  13420. vpclmulqdq $0x11, %xmm2, %xmm1, %xmm7
  13421. vaesenc %xmm0, %xmm8, %xmm8
  13422. vaesenc %xmm0, %xmm9, %xmm9
  13423. vaesenc %xmm0, %xmm10, %xmm10
  13424. vaesenc %xmm0, %xmm11, %xmm11
  13425. vaesenc %xmm0, %xmm12, %xmm12
  13426. vaesenc %xmm0, %xmm13, %xmm13
  13427. vaesenc %xmm0, %xmm14, %xmm14
  13428. vaesenc %xmm0, %xmm15, %xmm15
  13429. # aesenc_pclmul_2
  13430. vmovdqu 16(%rcx), %xmm1
  13431. vmovdqu 96(%rsp), %xmm0
  13432. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13433. vpxor %xmm3, %xmm5, %xmm5
  13434. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13435. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13436. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13437. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13438. vmovdqu 32(%rsi), %xmm0
  13439. vpxor %xmm1, %xmm7, %xmm7
  13440. vaesenc %xmm0, %xmm8, %xmm8
  13441. vaesenc %xmm0, %xmm9, %xmm9
  13442. vaesenc %xmm0, %xmm10, %xmm10
  13443. vaesenc %xmm0, %xmm11, %xmm11
  13444. vaesenc %xmm0, %xmm12, %xmm12
  13445. vaesenc %xmm0, %xmm13, %xmm13
  13446. vaesenc %xmm0, %xmm14, %xmm14
  13447. vaesenc %xmm0, %xmm15, %xmm15
  13448. # aesenc_pclmul_n
  13449. vmovdqu 32(%rcx), %xmm1
  13450. vmovdqu 80(%rsp), %xmm0
  13451. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13452. vpxor %xmm2, %xmm5, %xmm5
  13453. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13454. vpxor %xmm3, %xmm5, %xmm5
  13455. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13456. vpxor %xmm4, %xmm6, %xmm6
  13457. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13458. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13459. vmovdqu 48(%rsi), %xmm0
  13460. vpxor %xmm1, %xmm7, %xmm7
  13461. vaesenc %xmm0, %xmm8, %xmm8
  13462. vaesenc %xmm0, %xmm9, %xmm9
  13463. vaesenc %xmm0, %xmm10, %xmm10
  13464. vaesenc %xmm0, %xmm11, %xmm11
  13465. vaesenc %xmm0, %xmm12, %xmm12
  13466. vaesenc %xmm0, %xmm13, %xmm13
  13467. vaesenc %xmm0, %xmm14, %xmm14
  13468. vaesenc %xmm0, %xmm15, %xmm15
  13469. # aesenc_pclmul_n
  13470. vmovdqu 48(%rcx), %xmm1
  13471. vmovdqu 64(%rsp), %xmm0
  13472. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13473. vpxor %xmm2, %xmm5, %xmm5
  13474. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13475. vpxor %xmm3, %xmm5, %xmm5
  13476. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13477. vpxor %xmm4, %xmm6, %xmm6
  13478. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13479. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13480. vmovdqu 64(%rsi), %xmm0
  13481. vpxor %xmm1, %xmm7, %xmm7
  13482. vaesenc %xmm0, %xmm8, %xmm8
  13483. vaesenc %xmm0, %xmm9, %xmm9
  13484. vaesenc %xmm0, %xmm10, %xmm10
  13485. vaesenc %xmm0, %xmm11, %xmm11
  13486. vaesenc %xmm0, %xmm12, %xmm12
  13487. vaesenc %xmm0, %xmm13, %xmm13
  13488. vaesenc %xmm0, %xmm14, %xmm14
  13489. vaesenc %xmm0, %xmm15, %xmm15
  13490. # aesenc_pclmul_n
  13491. vmovdqu 64(%rcx), %xmm1
  13492. vmovdqu 48(%rsp), %xmm0
  13493. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13494. vpxor %xmm2, %xmm5, %xmm5
  13495. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13496. vpxor %xmm3, %xmm5, %xmm5
  13497. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13498. vpxor %xmm4, %xmm6, %xmm6
  13499. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13500. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13501. vmovdqu 80(%rsi), %xmm0
  13502. vpxor %xmm1, %xmm7, %xmm7
  13503. vaesenc %xmm0, %xmm8, %xmm8
  13504. vaesenc %xmm0, %xmm9, %xmm9
  13505. vaesenc %xmm0, %xmm10, %xmm10
  13506. vaesenc %xmm0, %xmm11, %xmm11
  13507. vaesenc %xmm0, %xmm12, %xmm12
  13508. vaesenc %xmm0, %xmm13, %xmm13
  13509. vaesenc %xmm0, %xmm14, %xmm14
  13510. vaesenc %xmm0, %xmm15, %xmm15
  13511. # aesenc_pclmul_n
  13512. vmovdqu 80(%rcx), %xmm1
  13513. vmovdqu 32(%rsp), %xmm0
  13514. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13515. vpxor %xmm2, %xmm5, %xmm5
  13516. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13517. vpxor %xmm3, %xmm5, %xmm5
  13518. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13519. vpxor %xmm4, %xmm6, %xmm6
  13520. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13521. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13522. vmovdqu 96(%rsi), %xmm0
  13523. vpxor %xmm1, %xmm7, %xmm7
  13524. vaesenc %xmm0, %xmm8, %xmm8
  13525. vaesenc %xmm0, %xmm9, %xmm9
  13526. vaesenc %xmm0, %xmm10, %xmm10
  13527. vaesenc %xmm0, %xmm11, %xmm11
  13528. vaesenc %xmm0, %xmm12, %xmm12
  13529. vaesenc %xmm0, %xmm13, %xmm13
  13530. vaesenc %xmm0, %xmm14, %xmm14
  13531. vaesenc %xmm0, %xmm15, %xmm15
  13532. # aesenc_pclmul_n
  13533. vmovdqu 96(%rcx), %xmm1
  13534. vmovdqu 16(%rsp), %xmm0
  13535. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13536. vpxor %xmm2, %xmm5, %xmm5
  13537. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13538. vpxor %xmm3, %xmm5, %xmm5
  13539. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13540. vpxor %xmm4, %xmm6, %xmm6
  13541. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13542. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13543. vmovdqu 112(%rsi), %xmm0
  13544. vpxor %xmm1, %xmm7, %xmm7
  13545. vaesenc %xmm0, %xmm8, %xmm8
  13546. vaesenc %xmm0, %xmm9, %xmm9
  13547. vaesenc %xmm0, %xmm10, %xmm10
  13548. vaesenc %xmm0, %xmm11, %xmm11
  13549. vaesenc %xmm0, %xmm12, %xmm12
  13550. vaesenc %xmm0, %xmm13, %xmm13
  13551. vaesenc %xmm0, %xmm14, %xmm14
  13552. vaesenc %xmm0, %xmm15, %xmm15
  13553. # aesenc_pclmul_n
  13554. vmovdqu 112(%rcx), %xmm1
  13555. vmovdqu (%rsp), %xmm0
  13556. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  13557. vpxor %xmm2, %xmm5, %xmm5
  13558. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  13559. vpxor %xmm3, %xmm5, %xmm5
  13560. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  13561. vpxor %xmm4, %xmm6, %xmm6
  13562. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  13563. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  13564. vmovdqu 128(%rsi), %xmm0
  13565. vpxor %xmm1, %xmm7, %xmm7
  13566. vaesenc %xmm0, %xmm8, %xmm8
  13567. vaesenc %xmm0, %xmm9, %xmm9
  13568. vaesenc %xmm0, %xmm10, %xmm10
  13569. vaesenc %xmm0, %xmm11, %xmm11
  13570. vaesenc %xmm0, %xmm12, %xmm12
  13571. vaesenc %xmm0, %xmm13, %xmm13
  13572. vaesenc %xmm0, %xmm14, %xmm14
  13573. vaesenc %xmm0, %xmm15, %xmm15
  13574. # aesenc_pclmul_l
  13575. vpxor %xmm2, %xmm5, %xmm5
  13576. vpxor %xmm4, %xmm6, %xmm6
  13577. vpxor %xmm3, %xmm5, %xmm5
  13578. vpslldq $8, %xmm5, %xmm1
  13579. vpsrldq $8, %xmm5, %xmm5
  13580. vmovdqu 144(%rsi), %xmm4
  13581. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm0
  13582. vaesenc %xmm4, %xmm8, %xmm8
  13583. vpxor %xmm1, %xmm6, %xmm6
  13584. vpxor %xmm5, %xmm7, %xmm7
  13585. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  13586. vaesenc %xmm4, %xmm9, %xmm9
  13587. vaesenc %xmm4, %xmm10, %xmm10
  13588. vaesenc %xmm4, %xmm11, %xmm11
  13589. vpshufd $0x4e, %xmm6, %xmm6
  13590. vpxor %xmm3, %xmm6, %xmm6
  13591. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  13592. vaesenc %xmm4, %xmm12, %xmm12
  13593. vaesenc %xmm4, %xmm13, %xmm13
  13594. vaesenc %xmm4, %xmm14, %xmm14
  13595. vpshufd $0x4e, %xmm6, %xmm6
  13596. vpxor %xmm3, %xmm6, %xmm6
  13597. vpxor %xmm7, %xmm6, %xmm6
  13598. vaesenc %xmm4, %xmm15, %xmm15
  13599. cmpl $11, %r9d
  13600. vmovdqu 160(%rsi), %xmm7
  13601. jl L_AES_GCM_decrypt_avx2_aesenc_128_ghash_avx_done
  13602. vaesenc %xmm7, %xmm8, %xmm8
  13603. vaesenc %xmm7, %xmm9, %xmm9
  13604. vaesenc %xmm7, %xmm10, %xmm10
  13605. vaesenc %xmm7, %xmm11, %xmm11
  13606. vaesenc %xmm7, %xmm12, %xmm12
  13607. vaesenc %xmm7, %xmm13, %xmm13
  13608. vaesenc %xmm7, %xmm14, %xmm14
  13609. vaesenc %xmm7, %xmm15, %xmm15
  13610. vmovdqu 176(%rsi), %xmm7
  13611. vaesenc %xmm7, %xmm8, %xmm8
  13612. vaesenc %xmm7, %xmm9, %xmm9
  13613. vaesenc %xmm7, %xmm10, %xmm10
  13614. vaesenc %xmm7, %xmm11, %xmm11
  13615. vaesenc %xmm7, %xmm12, %xmm12
  13616. vaesenc %xmm7, %xmm13, %xmm13
  13617. vaesenc %xmm7, %xmm14, %xmm14
  13618. vaesenc %xmm7, %xmm15, %xmm15
  13619. cmpl $13, %r9d
  13620. vmovdqu 192(%rsi), %xmm7
  13621. jl L_AES_GCM_decrypt_avx2_aesenc_128_ghash_avx_done
  13622. vaesenc %xmm7, %xmm8, %xmm8
  13623. vaesenc %xmm7, %xmm9, %xmm9
  13624. vaesenc %xmm7, %xmm10, %xmm10
  13625. vaesenc %xmm7, %xmm11, %xmm11
  13626. vaesenc %xmm7, %xmm12, %xmm12
  13627. vaesenc %xmm7, %xmm13, %xmm13
  13628. vaesenc %xmm7, %xmm14, %xmm14
  13629. vaesenc %xmm7, %xmm15, %xmm15
  13630. vmovdqu 208(%rsi), %xmm7
  13631. vaesenc %xmm7, %xmm8, %xmm8
  13632. vaesenc %xmm7, %xmm9, %xmm9
  13633. vaesenc %xmm7, %xmm10, %xmm10
  13634. vaesenc %xmm7, %xmm11, %xmm11
  13635. vaesenc %xmm7, %xmm12, %xmm12
  13636. vaesenc %xmm7, %xmm13, %xmm13
  13637. vaesenc %xmm7, %xmm14, %xmm14
  13638. vaesenc %xmm7, %xmm15, %xmm15
  13639. vmovdqu 224(%rsi), %xmm7
  13640. L_AES_GCM_decrypt_avx2_aesenc_128_ghash_avx_done:
  13641. # aesenc_last
  13642. vaesenclast %xmm7, %xmm8, %xmm8
  13643. vaesenclast %xmm7, %xmm9, %xmm9
  13644. vaesenclast %xmm7, %xmm10, %xmm10
  13645. vaesenclast %xmm7, %xmm11, %xmm11
  13646. vmovdqu (%rcx), %xmm0
  13647. vmovdqu 16(%rcx), %xmm1
  13648. vmovdqu 32(%rcx), %xmm2
  13649. vmovdqu 48(%rcx), %xmm3
  13650. vpxor %xmm0, %xmm8, %xmm8
  13651. vpxor %xmm1, %xmm9, %xmm9
  13652. vpxor %xmm2, %xmm10, %xmm10
  13653. vpxor %xmm3, %xmm11, %xmm11
  13654. vmovdqu %xmm8, (%rdx)
  13655. vmovdqu %xmm9, 16(%rdx)
  13656. vmovdqu %xmm10, 32(%rdx)
  13657. vmovdqu %xmm11, 48(%rdx)
  13658. vaesenclast %xmm7, %xmm12, %xmm12
  13659. vaesenclast %xmm7, %xmm13, %xmm13
  13660. vaesenclast %xmm7, %xmm14, %xmm14
  13661. vaesenclast %xmm7, %xmm15, %xmm15
  13662. vmovdqu 64(%rcx), %xmm0
  13663. vmovdqu 80(%rcx), %xmm1
  13664. vmovdqu 96(%rcx), %xmm2
  13665. vmovdqu 112(%rcx), %xmm3
  13666. vpxor %xmm0, %xmm12, %xmm12
  13667. vpxor %xmm1, %xmm13, %xmm13
  13668. vpxor %xmm2, %xmm14, %xmm14
  13669. vpxor %xmm3, %xmm15, %xmm15
  13670. vmovdqu %xmm12, 64(%rdx)
  13671. vmovdqu %xmm13, 80(%rdx)
  13672. vmovdqu %xmm14, 96(%rdx)
  13673. vmovdqu %xmm15, 112(%rdx)
  13674. # aesenc_128_ghash - end
  13675. addl $0x80, %ebx
  13676. cmpl %r13d, %ebx
  13677. jl L_AES_GCM_decrypt_avx2_ghash_128
  13678. vmovdqu (%rsp), %xmm5
  13679. vmovdqu 128(%rsp), %xmm4
  13680. vmovdqu 144(%rsp), %xmm15
  13681. L_AES_GCM_decrypt_avx2_done_128:
  13682. cmpl %r10d, %ebx
  13683. jge L_AES_GCM_decrypt_avx2_done_dec
  13684. movl %r10d, %r13d
  13685. andl $0xfffffff0, %r13d
  13686. cmpl %r13d, %ebx
  13687. jge L_AES_GCM_decrypt_avx2_last_block_done
  13688. L_AES_GCM_decrypt_avx2_last_block_start:
  13689. vmovdqu (%rdi,%rbx,1), %xmm11
  13690. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm10
  13691. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm12
  13692. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  13693. vpxor %xmm6, %xmm12, %xmm12
  13694. # aesenc_gfmul_sb
  13695. vpclmulqdq $0x01, %xmm5, %xmm12, %xmm2
  13696. vpclmulqdq $16, %xmm5, %xmm12, %xmm3
  13697. vpclmulqdq $0x00, %xmm5, %xmm12, %xmm1
  13698. vpclmulqdq $0x11, %xmm5, %xmm12, %xmm8
  13699. vpxor (%rsi), %xmm10, %xmm10
  13700. vaesenc 16(%rsi), %xmm10, %xmm10
  13701. vpxor %xmm2, %xmm3, %xmm3
  13702. vpslldq $8, %xmm3, %xmm2
  13703. vpsrldq $8, %xmm3, %xmm3
  13704. vaesenc 32(%rsi), %xmm10, %xmm10
  13705. vpxor %xmm1, %xmm2, %xmm2
  13706. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  13707. vaesenc 48(%rsi), %xmm10, %xmm10
  13708. vaesenc 64(%rsi), %xmm10, %xmm10
  13709. vaesenc 80(%rsi), %xmm10, %xmm10
  13710. vpshufd $0x4e, %xmm2, %xmm2
  13711. vpxor %xmm1, %xmm2, %xmm2
  13712. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  13713. vaesenc 96(%rsi), %xmm10, %xmm10
  13714. vaesenc 112(%rsi), %xmm10, %xmm10
  13715. vaesenc 128(%rsi), %xmm10, %xmm10
  13716. vpshufd $0x4e, %xmm2, %xmm2
  13717. vaesenc 144(%rsi), %xmm10, %xmm10
  13718. vpxor %xmm3, %xmm8, %xmm8
  13719. vpxor %xmm8, %xmm2, %xmm2
  13720. vmovdqu 160(%rsi), %xmm0
  13721. cmpl $11, %r9d
  13722. jl L_AES_GCM_decrypt_avx2_aesenc_gfmul_sb_last
  13723. vaesenc %xmm0, %xmm10, %xmm10
  13724. vaesenc 176(%rsi), %xmm10, %xmm10
  13725. vmovdqu 192(%rsi), %xmm0
  13726. cmpl $13, %r9d
  13727. jl L_AES_GCM_decrypt_avx2_aesenc_gfmul_sb_last
  13728. vaesenc %xmm0, %xmm10, %xmm10
  13729. vaesenc 208(%rsi), %xmm10, %xmm10
  13730. vmovdqu 224(%rsi), %xmm0
  13731. L_AES_GCM_decrypt_avx2_aesenc_gfmul_sb_last:
  13732. vaesenclast %xmm0, %xmm10, %xmm10
  13733. vpxor %xmm1, %xmm2, %xmm6
  13734. vpxor %xmm11, %xmm10, %xmm10
  13735. vmovdqu %xmm10, (%r8,%rbx,1)
  13736. addl $16, %ebx
  13737. cmpl %r13d, %ebx
  13738. jl L_AES_GCM_decrypt_avx2_last_block_start
  13739. L_AES_GCM_decrypt_avx2_last_block_done:
  13740. movl %r10d, %ecx
  13741. movl %r10d, %edx
  13742. andl $15, %ecx
  13743. jz L_AES_GCM_decrypt_avx2_done_dec
  13744. # aesenc_last15_dec
  13745. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  13746. vpxor (%rsi), %xmm4, %xmm4
  13747. vaesenc 16(%rsi), %xmm4, %xmm4
  13748. vaesenc 32(%rsi), %xmm4, %xmm4
  13749. vaesenc 48(%rsi), %xmm4, %xmm4
  13750. vaesenc 64(%rsi), %xmm4, %xmm4
  13751. vaesenc 80(%rsi), %xmm4, %xmm4
  13752. vaesenc 96(%rsi), %xmm4, %xmm4
  13753. vaesenc 112(%rsi), %xmm4, %xmm4
  13754. vaesenc 128(%rsi), %xmm4, %xmm4
  13755. vaesenc 144(%rsi), %xmm4, %xmm4
  13756. cmpl $11, %r9d
  13757. vmovdqu 160(%rsi), %xmm1
  13758. jl L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_aesenc_avx_last
  13759. vaesenc %xmm1, %xmm4, %xmm4
  13760. vaesenc 176(%rsi), %xmm4, %xmm4
  13761. cmpl $13, %r9d
  13762. vmovdqu 192(%rsi), %xmm1
  13763. jl L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_aesenc_avx_last
  13764. vaesenc %xmm1, %xmm4, %xmm4
  13765. vaesenc 208(%rsi), %xmm4, %xmm4
  13766. vmovdqu 224(%rsi), %xmm1
  13767. L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_aesenc_avx_last:
  13768. vaesenclast %xmm1, %xmm4, %xmm4
  13769. xorl %ecx, %ecx
  13770. vpxor %xmm0, %xmm0, %xmm0
  13771. vmovdqu %xmm4, (%rsp)
  13772. vmovdqu %xmm0, 16(%rsp)
  13773. L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_loop:
  13774. movzbl (%rdi,%rbx,1), %r13d
  13775. movb %r13b, 16(%rsp,%rcx,1)
  13776. xorb (%rsp,%rcx,1), %r13b
  13777. movb %r13b, (%r8,%rbx,1)
  13778. incl %ebx
  13779. incl %ecx
  13780. cmpl %edx, %ebx
  13781. jl L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_loop
  13782. vmovdqu 16(%rsp), %xmm4
  13783. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  13784. vpxor %xmm4, %xmm6, %xmm6
  13785. # ghash_gfmul_red
  13786. vpclmulqdq $16, %xmm5, %xmm6, %xmm2
  13787. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm1
  13788. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm0
  13789. vpxor %xmm1, %xmm2, %xmm2
  13790. vpslldq $8, %xmm2, %xmm1
  13791. vpsrldq $8, %xmm2, %xmm2
  13792. vpxor %xmm0, %xmm1, %xmm1
  13793. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm6
  13794. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
  13795. vpshufd $0x4e, %xmm1, %xmm1
  13796. vpxor %xmm0, %xmm1, %xmm1
  13797. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
  13798. vpshufd $0x4e, %xmm1, %xmm1
  13799. vpxor %xmm2, %xmm6, %xmm6
  13800. vpxor %xmm1, %xmm6, %xmm6
  13801. vpxor %xmm0, %xmm6, %xmm6
  13802. L_AES_GCM_decrypt_avx2_done_dec:
  13803. # calc_tag
  13804. shlq $3, %r10
  13805. shlq $3, %r11
  13806. vmovq %r10, %xmm0
  13807. vmovq %r11, %xmm1
  13808. vpunpcklqdq %xmm1, %xmm0, %xmm0
  13809. vpxor %xmm6, %xmm0, %xmm0
  13810. # ghash_gfmul_red
  13811. vpclmulqdq $16, %xmm5, %xmm0, %xmm4
  13812. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm3
  13813. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm2
  13814. vpxor %xmm3, %xmm4, %xmm4
  13815. vpslldq $8, %xmm4, %xmm3
  13816. vpsrldq $8, %xmm4, %xmm4
  13817. vpxor %xmm2, %xmm3, %xmm3
  13818. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm0
  13819. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  13820. vpshufd $0x4e, %xmm3, %xmm3
  13821. vpxor %xmm2, %xmm3, %xmm3
  13822. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  13823. vpshufd $0x4e, %xmm3, %xmm3
  13824. vpxor %xmm4, %xmm0, %xmm0
  13825. vpxor %xmm3, %xmm0, %xmm0
  13826. vpxor %xmm2, %xmm0, %xmm0
  13827. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  13828. vpxor %xmm15, %xmm0, %xmm0
  13829. # cmp_tag
  13830. cmpl $16, %r15d
  13831. je L_AES_GCM_decrypt_avx2_cmp_tag_16
  13832. xorq %rdx, %rdx
  13833. xorq %rax, %rax
  13834. vmovdqu %xmm0, (%rsp)
  13835. L_AES_GCM_decrypt_avx2_cmp_tag_loop:
  13836. movzbl (%rsp,%rdx,1), %r13d
  13837. xorb (%r14,%rdx,1), %r13b
  13838. orb %r13b, %al
  13839. incl %edx
  13840. cmpl %r15d, %edx
  13841. jne L_AES_GCM_decrypt_avx2_cmp_tag_loop
  13842. cmpb $0x00, %al
  13843. sete %al
  13844. jmp L_AES_GCM_decrypt_avx2_cmp_tag_done
  13845. L_AES_GCM_decrypt_avx2_cmp_tag_16:
  13846. vmovdqu (%r14), %xmm1
  13847. vpcmpeqb %xmm1, %xmm0, %xmm0
  13848. vpmovmskb %xmm0, %rdx
  13849. # %%edx == 0xFFFF then return 1 else => return 0
  13850. xorl %eax, %eax
  13851. cmpl $0xffff, %edx
  13852. sete %al
  13853. L_AES_GCM_decrypt_avx2_cmp_tag_done:
  13854. movl %eax, (%rbp)
  13855. vzeroupper
  13856. addq $0xa8, %rsp
  13857. popq %rbp
  13858. popq %r15
  13859. popq %rbx
  13860. popq %r14
  13861. popq %r12
  13862. popq %r13
  13863. repz retq
  13864. #ifndef __APPLE__
  13865. .size AES_GCM_decrypt_avx2,.-AES_GCM_decrypt_avx2
  13866. #endif /* __APPLE__ */
  13867. #ifdef WOLFSSL_AESGCM_STREAM
  13868. #ifndef __APPLE__
  13869. .text
  13870. .globl AES_GCM_init_avx2
  13871. .type AES_GCM_init_avx2,@function
  13872. .align 16
  13873. AES_GCM_init_avx2:
  13874. #else
  13875. .section __TEXT,__text
  13876. .globl _AES_GCM_init_avx2
  13877. .p2align 4
  13878. _AES_GCM_init_avx2:
  13879. #endif /* __APPLE__ */
  13880. pushq %rbx
  13881. pushq %r12
  13882. movq %rdx, %r10
  13883. movl %ecx, %r11d
  13884. movq 24(%rsp), %rax
  13885. subq $16, %rsp
  13886. vpxor %xmm4, %xmm4, %xmm4
  13887. movl %r11d, %edx
  13888. cmpl $12, %edx
  13889. je L_AES_GCM_init_avx2_iv_12
  13890. # Calculate values when IV is not 12 bytes
  13891. # H = Encrypt X(=0)
  13892. vmovdqu (%rdi), %xmm5
  13893. vaesenc 16(%rdi), %xmm5, %xmm5
  13894. vaesenc 32(%rdi), %xmm5, %xmm5
  13895. vaesenc 48(%rdi), %xmm5, %xmm5
  13896. vaesenc 64(%rdi), %xmm5, %xmm5
  13897. vaesenc 80(%rdi), %xmm5, %xmm5
  13898. vaesenc 96(%rdi), %xmm5, %xmm5
  13899. vaesenc 112(%rdi), %xmm5, %xmm5
  13900. vaesenc 128(%rdi), %xmm5, %xmm5
  13901. vaesenc 144(%rdi), %xmm5, %xmm5
  13902. cmpl $11, %esi
  13903. vmovdqu 160(%rdi), %xmm0
  13904. jl L_AES_GCM_init_avx2_calc_iv_1_aesenc_avx_last
  13905. vaesenc %xmm0, %xmm5, %xmm5
  13906. vaesenc 176(%rdi), %xmm5, %xmm5
  13907. cmpl $13, %esi
  13908. vmovdqu 192(%rdi), %xmm0
  13909. jl L_AES_GCM_init_avx2_calc_iv_1_aesenc_avx_last
  13910. vaesenc %xmm0, %xmm5, %xmm5
  13911. vaesenc 208(%rdi), %xmm5, %xmm5
  13912. vmovdqu 224(%rdi), %xmm0
  13913. L_AES_GCM_init_avx2_calc_iv_1_aesenc_avx_last:
  13914. vaesenclast %xmm0, %xmm5, %xmm5
  13915. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  13916. # Calc counter
  13917. # Initialization vector
  13918. cmpl $0x00, %edx
  13919. movq $0x00, %rcx
  13920. je L_AES_GCM_init_avx2_calc_iv_done
  13921. cmpl $16, %edx
  13922. jl L_AES_GCM_init_avx2_calc_iv_lt16
  13923. andl $0xfffffff0, %edx
  13924. L_AES_GCM_init_avx2_calc_iv_16_loop:
  13925. vmovdqu (%r10,%rcx,1), %xmm0
  13926. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  13927. vpxor %xmm0, %xmm4, %xmm4
  13928. # ghash_gfmul_avx
  13929. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  13930. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  13931. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  13932. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  13933. vpxor %xmm1, %xmm2, %xmm2
  13934. vpslldq $8, %xmm2, %xmm1
  13935. vpsrldq $8, %xmm2, %xmm2
  13936. vpxor %xmm1, %xmm0, %xmm6
  13937. vpxor %xmm2, %xmm3, %xmm4
  13938. # ghash_mid
  13939. vpsrld $31, %xmm6, %xmm0
  13940. vpsrld $31, %xmm4, %xmm1
  13941. vpslld $0x01, %xmm6, %xmm6
  13942. vpslld $0x01, %xmm4, %xmm4
  13943. vpsrldq $12, %xmm0, %xmm2
  13944. vpslldq $4, %xmm0, %xmm0
  13945. vpslldq $4, %xmm1, %xmm1
  13946. vpor %xmm2, %xmm4, %xmm4
  13947. vpor %xmm0, %xmm6, %xmm6
  13948. vpor %xmm1, %xmm4, %xmm4
  13949. # ghash_red
  13950. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  13951. vpclmulqdq $16, %xmm2, %xmm6, %xmm0
  13952. vpshufd $0x4e, %xmm6, %xmm1
  13953. vpxor %xmm0, %xmm1, %xmm1
  13954. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  13955. vpshufd $0x4e, %xmm1, %xmm1
  13956. vpxor %xmm0, %xmm1, %xmm1
  13957. vpxor %xmm1, %xmm4, %xmm4
  13958. addl $16, %ecx
  13959. cmpl %edx, %ecx
  13960. jl L_AES_GCM_init_avx2_calc_iv_16_loop
  13961. movl %r11d, %edx
  13962. cmpl %edx, %ecx
  13963. je L_AES_GCM_init_avx2_calc_iv_done
  13964. L_AES_GCM_init_avx2_calc_iv_lt16:
  13965. vpxor %xmm0, %xmm0, %xmm0
  13966. xorl %ebx, %ebx
  13967. vmovdqu %xmm0, (%rsp)
  13968. L_AES_GCM_init_avx2_calc_iv_loop:
  13969. movzbl (%r10,%rcx,1), %r12d
  13970. movb %r12b, (%rsp,%rbx,1)
  13971. incl %ecx
  13972. incl %ebx
  13973. cmpl %edx, %ecx
  13974. jl L_AES_GCM_init_avx2_calc_iv_loop
  13975. vmovdqu (%rsp), %xmm0
  13976. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  13977. vpxor %xmm0, %xmm4, %xmm4
  13978. # ghash_gfmul_avx
  13979. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  13980. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  13981. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  13982. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  13983. vpxor %xmm1, %xmm2, %xmm2
  13984. vpslldq $8, %xmm2, %xmm1
  13985. vpsrldq $8, %xmm2, %xmm2
  13986. vpxor %xmm1, %xmm0, %xmm6
  13987. vpxor %xmm2, %xmm3, %xmm4
  13988. # ghash_mid
  13989. vpsrld $31, %xmm6, %xmm0
  13990. vpsrld $31, %xmm4, %xmm1
  13991. vpslld $0x01, %xmm6, %xmm6
  13992. vpslld $0x01, %xmm4, %xmm4
  13993. vpsrldq $12, %xmm0, %xmm2
  13994. vpslldq $4, %xmm0, %xmm0
  13995. vpslldq $4, %xmm1, %xmm1
  13996. vpor %xmm2, %xmm4, %xmm4
  13997. vpor %xmm0, %xmm6, %xmm6
  13998. vpor %xmm1, %xmm4, %xmm4
  13999. # ghash_red
  14000. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  14001. vpclmulqdq $16, %xmm2, %xmm6, %xmm0
  14002. vpshufd $0x4e, %xmm6, %xmm1
  14003. vpxor %xmm0, %xmm1, %xmm1
  14004. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  14005. vpshufd $0x4e, %xmm1, %xmm1
  14006. vpxor %xmm0, %xmm1, %xmm1
  14007. vpxor %xmm1, %xmm4, %xmm4
  14008. L_AES_GCM_init_avx2_calc_iv_done:
  14009. # T = Encrypt counter
  14010. vpxor %xmm0, %xmm0, %xmm0
  14011. shll $3, %edx
  14012. vmovq %rdx, %xmm0
  14013. vpxor %xmm0, %xmm4, %xmm4
  14014. # ghash_gfmul_avx
  14015. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  14016. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  14017. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  14018. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  14019. vpxor %xmm1, %xmm2, %xmm2
  14020. vpslldq $8, %xmm2, %xmm1
  14021. vpsrldq $8, %xmm2, %xmm2
  14022. vpxor %xmm1, %xmm0, %xmm6
  14023. vpxor %xmm2, %xmm3, %xmm4
  14024. # ghash_mid
  14025. vpsrld $31, %xmm6, %xmm0
  14026. vpsrld $31, %xmm4, %xmm1
  14027. vpslld $0x01, %xmm6, %xmm6
  14028. vpslld $0x01, %xmm4, %xmm4
  14029. vpsrldq $12, %xmm0, %xmm2
  14030. vpslldq $4, %xmm0, %xmm0
  14031. vpslldq $4, %xmm1, %xmm1
  14032. vpor %xmm2, %xmm4, %xmm4
  14033. vpor %xmm0, %xmm6, %xmm6
  14034. vpor %xmm1, %xmm4, %xmm4
  14035. # ghash_red
  14036. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  14037. vpclmulqdq $16, %xmm2, %xmm6, %xmm0
  14038. vpshufd $0x4e, %xmm6, %xmm1
  14039. vpxor %xmm0, %xmm1, %xmm1
  14040. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  14041. vpshufd $0x4e, %xmm1, %xmm1
  14042. vpxor %xmm0, %xmm1, %xmm1
  14043. vpxor %xmm1, %xmm4, %xmm4
  14044. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
  14045. # Encrypt counter
  14046. vmovdqu (%rdi), %xmm7
  14047. vpxor %xmm4, %xmm7, %xmm7
  14048. vaesenc 16(%rdi), %xmm7, %xmm7
  14049. vaesenc 32(%rdi), %xmm7, %xmm7
  14050. vaesenc 48(%rdi), %xmm7, %xmm7
  14051. vaesenc 64(%rdi), %xmm7, %xmm7
  14052. vaesenc 80(%rdi), %xmm7, %xmm7
  14053. vaesenc 96(%rdi), %xmm7, %xmm7
  14054. vaesenc 112(%rdi), %xmm7, %xmm7
  14055. vaesenc 128(%rdi), %xmm7, %xmm7
  14056. vaesenc 144(%rdi), %xmm7, %xmm7
  14057. cmpl $11, %esi
  14058. vmovdqu 160(%rdi), %xmm0
  14059. jl L_AES_GCM_init_avx2_calc_iv_2_aesenc_avx_last
  14060. vaesenc %xmm0, %xmm7, %xmm7
  14061. vaesenc 176(%rdi), %xmm7, %xmm7
  14062. cmpl $13, %esi
  14063. vmovdqu 192(%rdi), %xmm0
  14064. jl L_AES_GCM_init_avx2_calc_iv_2_aesenc_avx_last
  14065. vaesenc %xmm0, %xmm7, %xmm7
  14066. vaesenc 208(%rdi), %xmm7, %xmm7
  14067. vmovdqu 224(%rdi), %xmm0
  14068. L_AES_GCM_init_avx2_calc_iv_2_aesenc_avx_last:
  14069. vaesenclast %xmm0, %xmm7, %xmm7
  14070. jmp L_AES_GCM_init_avx2_iv_done
  14071. L_AES_GCM_init_avx2_iv_12:
  14072. # # Calculate values when IV is 12 bytes
  14073. # Set counter based on IV
  14074. vmovdqu L_avx2_aes_gcm_bswap_one(%rip), %xmm4
  14075. vmovdqu (%rdi), %xmm5
  14076. vpblendd $7, (%r10), %xmm4, %xmm4
  14077. # H = Encrypt X(=0) and T = Encrypt counter
  14078. vmovdqu 16(%rdi), %xmm6
  14079. vpxor %xmm5, %xmm4, %xmm7
  14080. vaesenc %xmm6, %xmm5, %xmm5
  14081. vaesenc %xmm6, %xmm7, %xmm7
  14082. vmovdqu 32(%rdi), %xmm0
  14083. vaesenc %xmm0, %xmm5, %xmm5
  14084. vaesenc %xmm0, %xmm7, %xmm7
  14085. vmovdqu 48(%rdi), %xmm0
  14086. vaesenc %xmm0, %xmm5, %xmm5
  14087. vaesenc %xmm0, %xmm7, %xmm7
  14088. vmovdqu 64(%rdi), %xmm0
  14089. vaesenc %xmm0, %xmm5, %xmm5
  14090. vaesenc %xmm0, %xmm7, %xmm7
  14091. vmovdqu 80(%rdi), %xmm0
  14092. vaesenc %xmm0, %xmm5, %xmm5
  14093. vaesenc %xmm0, %xmm7, %xmm7
  14094. vmovdqu 96(%rdi), %xmm0
  14095. vaesenc %xmm0, %xmm5, %xmm5
  14096. vaesenc %xmm0, %xmm7, %xmm7
  14097. vmovdqu 112(%rdi), %xmm0
  14098. vaesenc %xmm0, %xmm5, %xmm5
  14099. vaesenc %xmm0, %xmm7, %xmm7
  14100. vmovdqu 128(%rdi), %xmm0
  14101. vaesenc %xmm0, %xmm5, %xmm5
  14102. vaesenc %xmm0, %xmm7, %xmm7
  14103. vmovdqu 144(%rdi), %xmm0
  14104. vaesenc %xmm0, %xmm5, %xmm5
  14105. vaesenc %xmm0, %xmm7, %xmm7
  14106. cmpl $11, %esi
  14107. vmovdqu 160(%rdi), %xmm0
  14108. jl L_AES_GCM_init_avx2_calc_iv_12_last
  14109. vaesenc %xmm0, %xmm5, %xmm5
  14110. vaesenc %xmm0, %xmm7, %xmm7
  14111. vmovdqu 176(%rdi), %xmm0
  14112. vaesenc %xmm0, %xmm5, %xmm5
  14113. vaesenc %xmm0, %xmm7, %xmm7
  14114. cmpl $13, %esi
  14115. vmovdqu 192(%rdi), %xmm0
  14116. jl L_AES_GCM_init_avx2_calc_iv_12_last
  14117. vaesenc %xmm0, %xmm5, %xmm5
  14118. vaesenc %xmm0, %xmm7, %xmm7
  14119. vmovdqu 208(%rdi), %xmm0
  14120. vaesenc %xmm0, %xmm5, %xmm5
  14121. vaesenc %xmm0, %xmm7, %xmm7
  14122. vmovdqu 224(%rdi), %xmm0
  14123. L_AES_GCM_init_avx2_calc_iv_12_last:
  14124. vaesenclast %xmm0, %xmm5, %xmm5
  14125. vaesenclast %xmm0, %xmm7, %xmm7
  14126. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
  14127. L_AES_GCM_init_avx2_iv_done:
  14128. vmovdqu %xmm7, (%rax)
  14129. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
  14130. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  14131. vmovdqu %xmm5, (%r8)
  14132. vmovdqu %xmm4, (%r9)
  14133. vzeroupper
  14134. addq $16, %rsp
  14135. popq %r12
  14136. popq %rbx
  14137. repz retq
  14138. #ifndef __APPLE__
  14139. .size AES_GCM_init_avx2,.-AES_GCM_init_avx2
  14140. #endif /* __APPLE__ */
  14141. #ifndef __APPLE__
  14142. .text
  14143. .globl AES_GCM_aad_update_avx2
  14144. .type AES_GCM_aad_update_avx2,@function
  14145. .align 16
  14146. AES_GCM_aad_update_avx2:
  14147. #else
  14148. .section __TEXT,__text
  14149. .globl _AES_GCM_aad_update_avx2
  14150. .p2align 4
  14151. _AES_GCM_aad_update_avx2:
  14152. #endif /* __APPLE__ */
  14153. movq %rcx, %rax
  14154. vmovdqu (%rdx), %xmm4
  14155. vmovdqu (%rax), %xmm5
  14156. xorl %ecx, %ecx
  14157. L_AES_GCM_aad_update_avx2_16_loop:
  14158. vmovdqu (%rdi,%rcx,1), %xmm0
  14159. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  14160. vpxor %xmm0, %xmm4, %xmm4
  14161. # ghash_gfmul_avx
  14162. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  14163. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  14164. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  14165. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  14166. vpxor %xmm1, %xmm2, %xmm2
  14167. vpslldq $8, %xmm2, %xmm1
  14168. vpsrldq $8, %xmm2, %xmm2
  14169. vpxor %xmm1, %xmm0, %xmm6
  14170. vpxor %xmm2, %xmm3, %xmm4
  14171. # ghash_mid
  14172. vpsrld $31, %xmm6, %xmm0
  14173. vpsrld $31, %xmm4, %xmm1
  14174. vpslld $0x01, %xmm6, %xmm6
  14175. vpslld $0x01, %xmm4, %xmm4
  14176. vpsrldq $12, %xmm0, %xmm2
  14177. vpslldq $4, %xmm0, %xmm0
  14178. vpslldq $4, %xmm1, %xmm1
  14179. vpor %xmm2, %xmm4, %xmm4
  14180. vpor %xmm0, %xmm6, %xmm6
  14181. vpor %xmm1, %xmm4, %xmm4
  14182. # ghash_red
  14183. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  14184. vpclmulqdq $16, %xmm2, %xmm6, %xmm0
  14185. vpshufd $0x4e, %xmm6, %xmm1
  14186. vpxor %xmm0, %xmm1, %xmm1
  14187. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  14188. vpshufd $0x4e, %xmm1, %xmm1
  14189. vpxor %xmm0, %xmm1, %xmm1
  14190. vpxor %xmm1, %xmm4, %xmm4
  14191. addl $16, %ecx
  14192. cmpl %esi, %ecx
  14193. jl L_AES_GCM_aad_update_avx2_16_loop
  14194. vmovdqu %xmm4, (%rdx)
  14195. vzeroupper
  14196. repz retq
  14197. #ifndef __APPLE__
  14198. .size AES_GCM_aad_update_avx2,.-AES_GCM_aad_update_avx2
  14199. #endif /* __APPLE__ */
  14200. #ifndef __APPLE__
  14201. .text
  14202. .globl AES_GCM_encrypt_block_avx2
  14203. .type AES_GCM_encrypt_block_avx2,@function
  14204. .align 16
  14205. AES_GCM_encrypt_block_avx2:
  14206. #else
  14207. .section __TEXT,__text
  14208. .globl _AES_GCM_encrypt_block_avx2
  14209. .p2align 4
  14210. _AES_GCM_encrypt_block_avx2:
  14211. #endif /* __APPLE__ */
  14212. movq %rdx, %r10
  14213. movq %rcx, %r11
  14214. subq $0x98, %rsp
  14215. vmovdqu (%r8), %xmm3
  14216. # aesenc_block
  14217. vmovdqu %xmm3, %xmm1
  14218. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
  14219. vpaddd L_avx2_aes_gcm_one(%rip), %xmm1, %xmm1
  14220. vpxor (%rdi), %xmm0, %xmm0
  14221. vmovdqu 16(%rdi), %xmm2
  14222. vaesenc %xmm2, %xmm0, %xmm0
  14223. vmovdqu 32(%rdi), %xmm2
  14224. vaesenc %xmm2, %xmm0, %xmm0
  14225. vmovdqu 48(%rdi), %xmm2
  14226. vaesenc %xmm2, %xmm0, %xmm0
  14227. vmovdqu 64(%rdi), %xmm2
  14228. vaesenc %xmm2, %xmm0, %xmm0
  14229. vmovdqu 80(%rdi), %xmm2
  14230. vaesenc %xmm2, %xmm0, %xmm0
  14231. vmovdqu 96(%rdi), %xmm2
  14232. vaesenc %xmm2, %xmm0, %xmm0
  14233. vmovdqu 112(%rdi), %xmm2
  14234. vaesenc %xmm2, %xmm0, %xmm0
  14235. vmovdqu 128(%rdi), %xmm2
  14236. vaesenc %xmm2, %xmm0, %xmm0
  14237. vmovdqu 144(%rdi), %xmm2
  14238. vaesenc %xmm2, %xmm0, %xmm0
  14239. vmovdqu %xmm1, %xmm3
  14240. cmpl $11, %esi
  14241. vmovdqu 160(%rdi), %xmm1
  14242. jl L_AES_GCM_encrypt_block_avx2_aesenc_block_last
  14243. vaesenc %xmm1, %xmm0, %xmm0
  14244. vmovdqu 176(%rdi), %xmm2
  14245. vaesenc %xmm2, %xmm0, %xmm0
  14246. cmpl $13, %esi
  14247. vmovdqu 192(%rdi), %xmm1
  14248. jl L_AES_GCM_encrypt_block_avx2_aesenc_block_last
  14249. vaesenc %xmm1, %xmm0, %xmm0
  14250. vmovdqu 208(%rdi), %xmm2
  14251. vaesenc %xmm2, %xmm0, %xmm0
  14252. vmovdqu 224(%rdi), %xmm1
  14253. L_AES_GCM_encrypt_block_avx2_aesenc_block_last:
  14254. vaesenclast %xmm1, %xmm0, %xmm0
  14255. vmovdqu (%r11), %xmm1
  14256. vpxor %xmm1, %xmm0, %xmm0
  14257. vmovdqu %xmm0, (%r10)
  14258. vmovdqu %xmm3, (%r8)
  14259. vzeroupper
  14260. addq $0x98, %rsp
  14261. repz retq
  14262. #ifndef __APPLE__
  14263. .size AES_GCM_encrypt_block_avx2,.-AES_GCM_encrypt_block_avx2
  14264. #endif /* __APPLE__ */
  14265. #ifndef __APPLE__
  14266. .text
  14267. .globl AES_GCM_ghash_block_avx2
  14268. .type AES_GCM_ghash_block_avx2,@function
  14269. .align 16
  14270. AES_GCM_ghash_block_avx2:
  14271. #else
  14272. .section __TEXT,__text
  14273. .globl _AES_GCM_ghash_block_avx2
  14274. .p2align 4
  14275. _AES_GCM_ghash_block_avx2:
  14276. #endif /* __APPLE__ */
  14277. vmovdqu (%rsi), %xmm4
  14278. vmovdqu (%rdx), %xmm5
  14279. vmovdqu (%rdi), %xmm0
  14280. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  14281. vpxor %xmm0, %xmm4, %xmm4
  14282. # ghash_gfmul_avx
  14283. vpclmulqdq $16, %xmm4, %xmm5, %xmm2
  14284. vpclmulqdq $0x01, %xmm4, %xmm5, %xmm1
  14285. vpclmulqdq $0x00, %xmm4, %xmm5, %xmm0
  14286. vpclmulqdq $0x11, %xmm4, %xmm5, %xmm3
  14287. vpxor %xmm1, %xmm2, %xmm2
  14288. vpslldq $8, %xmm2, %xmm1
  14289. vpsrldq $8, %xmm2, %xmm2
  14290. vpxor %xmm1, %xmm0, %xmm6
  14291. vpxor %xmm2, %xmm3, %xmm4
  14292. # ghash_mid
  14293. vpsrld $31, %xmm6, %xmm0
  14294. vpsrld $31, %xmm4, %xmm1
  14295. vpslld $0x01, %xmm6, %xmm6
  14296. vpslld $0x01, %xmm4, %xmm4
  14297. vpsrldq $12, %xmm0, %xmm2
  14298. vpslldq $4, %xmm0, %xmm0
  14299. vpslldq $4, %xmm1, %xmm1
  14300. vpor %xmm2, %xmm4, %xmm4
  14301. vpor %xmm0, %xmm6, %xmm6
  14302. vpor %xmm1, %xmm4, %xmm4
  14303. # ghash_red
  14304. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  14305. vpclmulqdq $16, %xmm2, %xmm6, %xmm0
  14306. vpshufd $0x4e, %xmm6, %xmm1
  14307. vpxor %xmm0, %xmm1, %xmm1
  14308. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  14309. vpshufd $0x4e, %xmm1, %xmm1
  14310. vpxor %xmm0, %xmm1, %xmm1
  14311. vpxor %xmm1, %xmm4, %xmm4
  14312. vmovdqu %xmm4, (%rsi)
  14313. vzeroupper
  14314. repz retq
  14315. #ifndef __APPLE__
  14316. .size AES_GCM_ghash_block_avx2,.-AES_GCM_ghash_block_avx2
  14317. #endif /* __APPLE__ */
  14318. #ifndef __APPLE__
  14319. .text
  14320. .globl AES_GCM_encrypt_update_avx2
  14321. .type AES_GCM_encrypt_update_avx2,@function
  14322. .align 16
  14323. AES_GCM_encrypt_update_avx2:
  14324. #else
  14325. .section __TEXT,__text
  14326. .globl _AES_GCM_encrypt_update_avx2
  14327. .p2align 4
  14328. _AES_GCM_encrypt_update_avx2:
  14329. #endif /* __APPLE__ */
  14330. pushq %r12
  14331. pushq %r13
  14332. pushq %r14
  14333. movq %rdx, %r10
  14334. movq %rcx, %r11
  14335. movq 32(%rsp), %rax
  14336. movq 40(%rsp), %r12
  14337. subq $0x98, %rsp
  14338. vmovdqu (%r9), %xmm6
  14339. vmovdqu (%rax), %xmm5
  14340. vmovdqu (%r12), %xmm4
  14341. vpsrlq $63, %xmm5, %xmm1
  14342. vpsllq $0x01, %xmm5, %xmm0
  14343. vpslldq $8, %xmm1, %xmm1
  14344. vpor %xmm1, %xmm0, %xmm0
  14345. vpshufd $0xff, %xmm5, %xmm5
  14346. vpsrad $31, %xmm5, %xmm5
  14347. vpand L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  14348. vpxor %xmm0, %xmm5, %xmm5
  14349. xorl %r14d, %r14d
  14350. cmpl $0x80, %r8d
  14351. movl %r8d, %r13d
  14352. jl L_AES_GCM_encrypt_update_avx2_done_128
  14353. andl $0xffffff80, %r13d
  14354. vmovdqu %xmm4, 128(%rsp)
  14355. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm3
  14356. # H ^ 1 and H ^ 2
  14357. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm9
  14358. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm10
  14359. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  14360. vpshufd $0x4e, %xmm9, %xmm9
  14361. vpxor %xmm8, %xmm9, %xmm9
  14362. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  14363. vpshufd $0x4e, %xmm9, %xmm9
  14364. vpxor %xmm8, %xmm9, %xmm9
  14365. vpxor %xmm9, %xmm10, %xmm0
  14366. vmovdqu %xmm5, (%rsp)
  14367. vmovdqu %xmm0, 16(%rsp)
  14368. # H ^ 3 and H ^ 4
  14369. vpclmulqdq $16, %xmm5, %xmm0, %xmm11
  14370. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm10
  14371. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm9
  14372. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm12
  14373. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm13
  14374. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm14
  14375. vpxor %xmm10, %xmm11, %xmm11
  14376. vpslldq $8, %xmm11, %xmm10
  14377. vpsrldq $8, %xmm11, %xmm11
  14378. vpxor %xmm9, %xmm10, %xmm10
  14379. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  14380. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  14381. vpshufd $0x4e, %xmm10, %xmm10
  14382. vpshufd $0x4e, %xmm13, %xmm13
  14383. vpxor %xmm9, %xmm10, %xmm10
  14384. vpxor %xmm8, %xmm13, %xmm13
  14385. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  14386. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  14387. vpshufd $0x4e, %xmm10, %xmm10
  14388. vpshufd $0x4e, %xmm13, %xmm13
  14389. vpxor %xmm11, %xmm12, %xmm12
  14390. vpxor %xmm8, %xmm13, %xmm13
  14391. vpxor %xmm12, %xmm10, %xmm10
  14392. vpxor %xmm14, %xmm13, %xmm2
  14393. vpxor %xmm9, %xmm10, %xmm1
  14394. vmovdqu %xmm1, 32(%rsp)
  14395. vmovdqu %xmm2, 48(%rsp)
  14396. # H ^ 5 and H ^ 6
  14397. vpclmulqdq $16, %xmm0, %xmm1, %xmm11
  14398. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm10
  14399. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm9
  14400. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm12
  14401. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm13
  14402. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm14
  14403. vpxor %xmm10, %xmm11, %xmm11
  14404. vpslldq $8, %xmm11, %xmm10
  14405. vpsrldq $8, %xmm11, %xmm11
  14406. vpxor %xmm9, %xmm10, %xmm10
  14407. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  14408. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  14409. vpshufd $0x4e, %xmm10, %xmm10
  14410. vpshufd $0x4e, %xmm13, %xmm13
  14411. vpxor %xmm9, %xmm10, %xmm10
  14412. vpxor %xmm8, %xmm13, %xmm13
  14413. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  14414. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  14415. vpshufd $0x4e, %xmm10, %xmm10
  14416. vpshufd $0x4e, %xmm13, %xmm13
  14417. vpxor %xmm11, %xmm12, %xmm12
  14418. vpxor %xmm8, %xmm13, %xmm13
  14419. vpxor %xmm12, %xmm10, %xmm10
  14420. vpxor %xmm14, %xmm13, %xmm0
  14421. vpxor %xmm9, %xmm10, %xmm7
  14422. vmovdqu %xmm7, 64(%rsp)
  14423. vmovdqu %xmm0, 80(%rsp)
  14424. # H ^ 7 and H ^ 8
  14425. vpclmulqdq $16, %xmm1, %xmm2, %xmm11
  14426. vpclmulqdq $0x01, %xmm1, %xmm2, %xmm10
  14427. vpclmulqdq $0x00, %xmm1, %xmm2, %xmm9
  14428. vpclmulqdq $0x11, %xmm1, %xmm2, %xmm12
  14429. vpclmulqdq $0x00, %xmm2, %xmm2, %xmm13
  14430. vpclmulqdq $0x11, %xmm2, %xmm2, %xmm14
  14431. vpxor %xmm10, %xmm11, %xmm11
  14432. vpslldq $8, %xmm11, %xmm10
  14433. vpsrldq $8, %xmm11, %xmm11
  14434. vpxor %xmm9, %xmm10, %xmm10
  14435. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  14436. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  14437. vpshufd $0x4e, %xmm10, %xmm10
  14438. vpshufd $0x4e, %xmm13, %xmm13
  14439. vpxor %xmm9, %xmm10, %xmm10
  14440. vpxor %xmm8, %xmm13, %xmm13
  14441. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  14442. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  14443. vpshufd $0x4e, %xmm10, %xmm10
  14444. vpshufd $0x4e, %xmm13, %xmm13
  14445. vpxor %xmm11, %xmm12, %xmm12
  14446. vpxor %xmm8, %xmm13, %xmm13
  14447. vpxor %xmm12, %xmm10, %xmm10
  14448. vpxor %xmm14, %xmm13, %xmm0
  14449. vpxor %xmm9, %xmm10, %xmm7
  14450. vmovdqu %xmm7, 96(%rsp)
  14451. vmovdqu %xmm0, 112(%rsp)
  14452. # First 128 bytes of input
  14453. # aesenc_128
  14454. # aesenc_ctr
  14455. vmovdqu 128(%rsp), %xmm0
  14456. vmovdqu L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
  14457. vpaddd L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
  14458. vpshufb %xmm1, %xmm0, %xmm8
  14459. vpaddd L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
  14460. vpshufb %xmm1, %xmm9, %xmm9
  14461. vpaddd L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
  14462. vpshufb %xmm1, %xmm10, %xmm10
  14463. vpaddd L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
  14464. vpshufb %xmm1, %xmm11, %xmm11
  14465. vpaddd L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
  14466. vpshufb %xmm1, %xmm12, %xmm12
  14467. vpaddd L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
  14468. vpshufb %xmm1, %xmm13, %xmm13
  14469. vpaddd L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
  14470. vpshufb %xmm1, %xmm14, %xmm14
  14471. vpaddd L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
  14472. vpshufb %xmm1, %xmm15, %xmm15
  14473. # aesenc_xor
  14474. vmovdqu (%rdi), %xmm7
  14475. vmovdqu %xmm0, 128(%rsp)
  14476. vpxor %xmm7, %xmm8, %xmm8
  14477. vpxor %xmm7, %xmm9, %xmm9
  14478. vpxor %xmm7, %xmm10, %xmm10
  14479. vpxor %xmm7, %xmm11, %xmm11
  14480. vpxor %xmm7, %xmm12, %xmm12
  14481. vpxor %xmm7, %xmm13, %xmm13
  14482. vpxor %xmm7, %xmm14, %xmm14
  14483. vpxor %xmm7, %xmm15, %xmm15
  14484. vmovdqu 16(%rdi), %xmm7
  14485. vaesenc %xmm7, %xmm8, %xmm8
  14486. vaesenc %xmm7, %xmm9, %xmm9
  14487. vaesenc %xmm7, %xmm10, %xmm10
  14488. vaesenc %xmm7, %xmm11, %xmm11
  14489. vaesenc %xmm7, %xmm12, %xmm12
  14490. vaesenc %xmm7, %xmm13, %xmm13
  14491. vaesenc %xmm7, %xmm14, %xmm14
  14492. vaesenc %xmm7, %xmm15, %xmm15
  14493. vmovdqu 32(%rdi), %xmm7
  14494. vaesenc %xmm7, %xmm8, %xmm8
  14495. vaesenc %xmm7, %xmm9, %xmm9
  14496. vaesenc %xmm7, %xmm10, %xmm10
  14497. vaesenc %xmm7, %xmm11, %xmm11
  14498. vaesenc %xmm7, %xmm12, %xmm12
  14499. vaesenc %xmm7, %xmm13, %xmm13
  14500. vaesenc %xmm7, %xmm14, %xmm14
  14501. vaesenc %xmm7, %xmm15, %xmm15
  14502. vmovdqu 48(%rdi), %xmm7
  14503. vaesenc %xmm7, %xmm8, %xmm8
  14504. vaesenc %xmm7, %xmm9, %xmm9
  14505. vaesenc %xmm7, %xmm10, %xmm10
  14506. vaesenc %xmm7, %xmm11, %xmm11
  14507. vaesenc %xmm7, %xmm12, %xmm12
  14508. vaesenc %xmm7, %xmm13, %xmm13
  14509. vaesenc %xmm7, %xmm14, %xmm14
  14510. vaesenc %xmm7, %xmm15, %xmm15
  14511. vmovdqu 64(%rdi), %xmm7
  14512. vaesenc %xmm7, %xmm8, %xmm8
  14513. vaesenc %xmm7, %xmm9, %xmm9
  14514. vaesenc %xmm7, %xmm10, %xmm10
  14515. vaesenc %xmm7, %xmm11, %xmm11
  14516. vaesenc %xmm7, %xmm12, %xmm12
  14517. vaesenc %xmm7, %xmm13, %xmm13
  14518. vaesenc %xmm7, %xmm14, %xmm14
  14519. vaesenc %xmm7, %xmm15, %xmm15
  14520. vmovdqu 80(%rdi), %xmm7
  14521. vaesenc %xmm7, %xmm8, %xmm8
  14522. vaesenc %xmm7, %xmm9, %xmm9
  14523. vaesenc %xmm7, %xmm10, %xmm10
  14524. vaesenc %xmm7, %xmm11, %xmm11
  14525. vaesenc %xmm7, %xmm12, %xmm12
  14526. vaesenc %xmm7, %xmm13, %xmm13
  14527. vaesenc %xmm7, %xmm14, %xmm14
  14528. vaesenc %xmm7, %xmm15, %xmm15
  14529. vmovdqu 96(%rdi), %xmm7
  14530. vaesenc %xmm7, %xmm8, %xmm8
  14531. vaesenc %xmm7, %xmm9, %xmm9
  14532. vaesenc %xmm7, %xmm10, %xmm10
  14533. vaesenc %xmm7, %xmm11, %xmm11
  14534. vaesenc %xmm7, %xmm12, %xmm12
  14535. vaesenc %xmm7, %xmm13, %xmm13
  14536. vaesenc %xmm7, %xmm14, %xmm14
  14537. vaesenc %xmm7, %xmm15, %xmm15
  14538. vmovdqu 112(%rdi), %xmm7
  14539. vaesenc %xmm7, %xmm8, %xmm8
  14540. vaesenc %xmm7, %xmm9, %xmm9
  14541. vaesenc %xmm7, %xmm10, %xmm10
  14542. vaesenc %xmm7, %xmm11, %xmm11
  14543. vaesenc %xmm7, %xmm12, %xmm12
  14544. vaesenc %xmm7, %xmm13, %xmm13
  14545. vaesenc %xmm7, %xmm14, %xmm14
  14546. vaesenc %xmm7, %xmm15, %xmm15
  14547. vmovdqu 128(%rdi), %xmm7
  14548. vaesenc %xmm7, %xmm8, %xmm8
  14549. vaesenc %xmm7, %xmm9, %xmm9
  14550. vaesenc %xmm7, %xmm10, %xmm10
  14551. vaesenc %xmm7, %xmm11, %xmm11
  14552. vaesenc %xmm7, %xmm12, %xmm12
  14553. vaesenc %xmm7, %xmm13, %xmm13
  14554. vaesenc %xmm7, %xmm14, %xmm14
  14555. vaesenc %xmm7, %xmm15, %xmm15
  14556. vmovdqu 144(%rdi), %xmm7
  14557. vaesenc %xmm7, %xmm8, %xmm8
  14558. vaesenc %xmm7, %xmm9, %xmm9
  14559. vaesenc %xmm7, %xmm10, %xmm10
  14560. vaesenc %xmm7, %xmm11, %xmm11
  14561. vaesenc %xmm7, %xmm12, %xmm12
  14562. vaesenc %xmm7, %xmm13, %xmm13
  14563. vaesenc %xmm7, %xmm14, %xmm14
  14564. vaesenc %xmm7, %xmm15, %xmm15
  14565. cmpl $11, %esi
  14566. vmovdqu 160(%rdi), %xmm7
  14567. jl L_AES_GCM_encrypt_update_avx2_aesenc_128_enc_done
  14568. vaesenc %xmm7, %xmm8, %xmm8
  14569. vaesenc %xmm7, %xmm9, %xmm9
  14570. vaesenc %xmm7, %xmm10, %xmm10
  14571. vaesenc %xmm7, %xmm11, %xmm11
  14572. vaesenc %xmm7, %xmm12, %xmm12
  14573. vaesenc %xmm7, %xmm13, %xmm13
  14574. vaesenc %xmm7, %xmm14, %xmm14
  14575. vaesenc %xmm7, %xmm15, %xmm15
  14576. vmovdqu 176(%rdi), %xmm7
  14577. vaesenc %xmm7, %xmm8, %xmm8
  14578. vaesenc %xmm7, %xmm9, %xmm9
  14579. vaesenc %xmm7, %xmm10, %xmm10
  14580. vaesenc %xmm7, %xmm11, %xmm11
  14581. vaesenc %xmm7, %xmm12, %xmm12
  14582. vaesenc %xmm7, %xmm13, %xmm13
  14583. vaesenc %xmm7, %xmm14, %xmm14
  14584. vaesenc %xmm7, %xmm15, %xmm15
  14585. cmpl $13, %esi
  14586. vmovdqu 192(%rdi), %xmm7
  14587. jl L_AES_GCM_encrypt_update_avx2_aesenc_128_enc_done
  14588. vaesenc %xmm7, %xmm8, %xmm8
  14589. vaesenc %xmm7, %xmm9, %xmm9
  14590. vaesenc %xmm7, %xmm10, %xmm10
  14591. vaesenc %xmm7, %xmm11, %xmm11
  14592. vaesenc %xmm7, %xmm12, %xmm12
  14593. vaesenc %xmm7, %xmm13, %xmm13
  14594. vaesenc %xmm7, %xmm14, %xmm14
  14595. vaesenc %xmm7, %xmm15, %xmm15
  14596. vmovdqu 208(%rdi), %xmm7
  14597. vaesenc %xmm7, %xmm8, %xmm8
  14598. vaesenc %xmm7, %xmm9, %xmm9
  14599. vaesenc %xmm7, %xmm10, %xmm10
  14600. vaesenc %xmm7, %xmm11, %xmm11
  14601. vaesenc %xmm7, %xmm12, %xmm12
  14602. vaesenc %xmm7, %xmm13, %xmm13
  14603. vaesenc %xmm7, %xmm14, %xmm14
  14604. vaesenc %xmm7, %xmm15, %xmm15
  14605. vmovdqu 224(%rdi), %xmm7
  14606. L_AES_GCM_encrypt_update_avx2_aesenc_128_enc_done:
  14607. # aesenc_last
  14608. vaesenclast %xmm7, %xmm8, %xmm8
  14609. vaesenclast %xmm7, %xmm9, %xmm9
  14610. vaesenclast %xmm7, %xmm10, %xmm10
  14611. vaesenclast %xmm7, %xmm11, %xmm11
  14612. vmovdqu (%r11), %xmm0
  14613. vmovdqu 16(%r11), %xmm1
  14614. vmovdqu 32(%r11), %xmm2
  14615. vmovdqu 48(%r11), %xmm3
  14616. vpxor %xmm0, %xmm8, %xmm8
  14617. vpxor %xmm1, %xmm9, %xmm9
  14618. vpxor %xmm2, %xmm10, %xmm10
  14619. vpxor %xmm3, %xmm11, %xmm11
  14620. vmovdqu %xmm8, (%r10)
  14621. vmovdqu %xmm9, 16(%r10)
  14622. vmovdqu %xmm10, 32(%r10)
  14623. vmovdqu %xmm11, 48(%r10)
  14624. vaesenclast %xmm7, %xmm12, %xmm12
  14625. vaesenclast %xmm7, %xmm13, %xmm13
  14626. vaesenclast %xmm7, %xmm14, %xmm14
  14627. vaesenclast %xmm7, %xmm15, %xmm15
  14628. vmovdqu 64(%r11), %xmm0
  14629. vmovdqu 80(%r11), %xmm1
  14630. vmovdqu 96(%r11), %xmm2
  14631. vmovdqu 112(%r11), %xmm3
  14632. vpxor %xmm0, %xmm12, %xmm12
  14633. vpxor %xmm1, %xmm13, %xmm13
  14634. vpxor %xmm2, %xmm14, %xmm14
  14635. vpxor %xmm3, %xmm15, %xmm15
  14636. vmovdqu %xmm12, 64(%r10)
  14637. vmovdqu %xmm13, 80(%r10)
  14638. vmovdqu %xmm14, 96(%r10)
  14639. vmovdqu %xmm15, 112(%r10)
  14640. cmpl $0x80, %r13d
  14641. movl $0x80, %r14d
  14642. jle L_AES_GCM_encrypt_update_avx2_end_128
  14643. # More 128 bytes of input
  14644. L_AES_GCM_encrypt_update_avx2_ghash_128:
  14645. # aesenc_128_ghash
  14646. leaq (%r11,%r14,1), %rcx
  14647. leaq (%r10,%r14,1), %rdx
  14648. # aesenc_ctr
  14649. vmovdqu 128(%rsp), %xmm0
  14650. vmovdqu L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
  14651. vpaddd L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
  14652. vpshufb %xmm1, %xmm0, %xmm8
  14653. vpaddd L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
  14654. vpshufb %xmm1, %xmm9, %xmm9
  14655. vpaddd L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
  14656. vpshufb %xmm1, %xmm10, %xmm10
  14657. vpaddd L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
  14658. vpshufb %xmm1, %xmm11, %xmm11
  14659. vpaddd L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
  14660. vpshufb %xmm1, %xmm12, %xmm12
  14661. vpaddd L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
  14662. vpshufb %xmm1, %xmm13, %xmm13
  14663. vpaddd L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
  14664. vpshufb %xmm1, %xmm14, %xmm14
  14665. vpaddd L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
  14666. vpshufb %xmm1, %xmm15, %xmm15
  14667. # aesenc_xor
  14668. vmovdqu (%rdi), %xmm7
  14669. vmovdqu %xmm0, 128(%rsp)
  14670. vpxor %xmm7, %xmm8, %xmm8
  14671. vpxor %xmm7, %xmm9, %xmm9
  14672. vpxor %xmm7, %xmm10, %xmm10
  14673. vpxor %xmm7, %xmm11, %xmm11
  14674. vpxor %xmm7, %xmm12, %xmm12
  14675. vpxor %xmm7, %xmm13, %xmm13
  14676. vpxor %xmm7, %xmm14, %xmm14
  14677. vpxor %xmm7, %xmm15, %xmm15
  14678. # aesenc_pclmul_1
  14679. vmovdqu -128(%rdx), %xmm1
  14680. vmovdqu 16(%rdi), %xmm0
  14681. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14682. vmovdqu 112(%rsp), %xmm2
  14683. vpxor %xmm6, %xmm1, %xmm1
  14684. vpclmulqdq $16, %xmm2, %xmm1, %xmm5
  14685. vpclmulqdq $0x01, %xmm2, %xmm1, %xmm3
  14686. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm6
  14687. vpclmulqdq $0x11, %xmm2, %xmm1, %xmm7
  14688. vaesenc %xmm0, %xmm8, %xmm8
  14689. vaesenc %xmm0, %xmm9, %xmm9
  14690. vaesenc %xmm0, %xmm10, %xmm10
  14691. vaesenc %xmm0, %xmm11, %xmm11
  14692. vaesenc %xmm0, %xmm12, %xmm12
  14693. vaesenc %xmm0, %xmm13, %xmm13
  14694. vaesenc %xmm0, %xmm14, %xmm14
  14695. vaesenc %xmm0, %xmm15, %xmm15
  14696. # aesenc_pclmul_2
  14697. vmovdqu -112(%rdx), %xmm1
  14698. vmovdqu 96(%rsp), %xmm0
  14699. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14700. vpxor %xmm3, %xmm5, %xmm5
  14701. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14702. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14703. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14704. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14705. vmovdqu 32(%rdi), %xmm0
  14706. vpxor %xmm1, %xmm7, %xmm7
  14707. vaesenc %xmm0, %xmm8, %xmm8
  14708. vaesenc %xmm0, %xmm9, %xmm9
  14709. vaesenc %xmm0, %xmm10, %xmm10
  14710. vaesenc %xmm0, %xmm11, %xmm11
  14711. vaesenc %xmm0, %xmm12, %xmm12
  14712. vaesenc %xmm0, %xmm13, %xmm13
  14713. vaesenc %xmm0, %xmm14, %xmm14
  14714. vaesenc %xmm0, %xmm15, %xmm15
  14715. # aesenc_pclmul_n
  14716. vmovdqu -96(%rdx), %xmm1
  14717. vmovdqu 80(%rsp), %xmm0
  14718. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14719. vpxor %xmm2, %xmm5, %xmm5
  14720. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14721. vpxor %xmm3, %xmm5, %xmm5
  14722. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14723. vpxor %xmm4, %xmm6, %xmm6
  14724. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14725. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14726. vmovdqu 48(%rdi), %xmm0
  14727. vpxor %xmm1, %xmm7, %xmm7
  14728. vaesenc %xmm0, %xmm8, %xmm8
  14729. vaesenc %xmm0, %xmm9, %xmm9
  14730. vaesenc %xmm0, %xmm10, %xmm10
  14731. vaesenc %xmm0, %xmm11, %xmm11
  14732. vaesenc %xmm0, %xmm12, %xmm12
  14733. vaesenc %xmm0, %xmm13, %xmm13
  14734. vaesenc %xmm0, %xmm14, %xmm14
  14735. vaesenc %xmm0, %xmm15, %xmm15
  14736. # aesenc_pclmul_n
  14737. vmovdqu -80(%rdx), %xmm1
  14738. vmovdqu 64(%rsp), %xmm0
  14739. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14740. vpxor %xmm2, %xmm5, %xmm5
  14741. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14742. vpxor %xmm3, %xmm5, %xmm5
  14743. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14744. vpxor %xmm4, %xmm6, %xmm6
  14745. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14746. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14747. vmovdqu 64(%rdi), %xmm0
  14748. vpxor %xmm1, %xmm7, %xmm7
  14749. vaesenc %xmm0, %xmm8, %xmm8
  14750. vaesenc %xmm0, %xmm9, %xmm9
  14751. vaesenc %xmm0, %xmm10, %xmm10
  14752. vaesenc %xmm0, %xmm11, %xmm11
  14753. vaesenc %xmm0, %xmm12, %xmm12
  14754. vaesenc %xmm0, %xmm13, %xmm13
  14755. vaesenc %xmm0, %xmm14, %xmm14
  14756. vaesenc %xmm0, %xmm15, %xmm15
  14757. # aesenc_pclmul_n
  14758. vmovdqu -64(%rdx), %xmm1
  14759. vmovdqu 48(%rsp), %xmm0
  14760. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14761. vpxor %xmm2, %xmm5, %xmm5
  14762. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14763. vpxor %xmm3, %xmm5, %xmm5
  14764. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14765. vpxor %xmm4, %xmm6, %xmm6
  14766. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14767. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14768. vmovdqu 80(%rdi), %xmm0
  14769. vpxor %xmm1, %xmm7, %xmm7
  14770. vaesenc %xmm0, %xmm8, %xmm8
  14771. vaesenc %xmm0, %xmm9, %xmm9
  14772. vaesenc %xmm0, %xmm10, %xmm10
  14773. vaesenc %xmm0, %xmm11, %xmm11
  14774. vaesenc %xmm0, %xmm12, %xmm12
  14775. vaesenc %xmm0, %xmm13, %xmm13
  14776. vaesenc %xmm0, %xmm14, %xmm14
  14777. vaesenc %xmm0, %xmm15, %xmm15
  14778. # aesenc_pclmul_n
  14779. vmovdqu -48(%rdx), %xmm1
  14780. vmovdqu 32(%rsp), %xmm0
  14781. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14782. vpxor %xmm2, %xmm5, %xmm5
  14783. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14784. vpxor %xmm3, %xmm5, %xmm5
  14785. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14786. vpxor %xmm4, %xmm6, %xmm6
  14787. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14788. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14789. vmovdqu 96(%rdi), %xmm0
  14790. vpxor %xmm1, %xmm7, %xmm7
  14791. vaesenc %xmm0, %xmm8, %xmm8
  14792. vaesenc %xmm0, %xmm9, %xmm9
  14793. vaesenc %xmm0, %xmm10, %xmm10
  14794. vaesenc %xmm0, %xmm11, %xmm11
  14795. vaesenc %xmm0, %xmm12, %xmm12
  14796. vaesenc %xmm0, %xmm13, %xmm13
  14797. vaesenc %xmm0, %xmm14, %xmm14
  14798. vaesenc %xmm0, %xmm15, %xmm15
  14799. # aesenc_pclmul_n
  14800. vmovdqu -32(%rdx), %xmm1
  14801. vmovdqu 16(%rsp), %xmm0
  14802. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14803. vpxor %xmm2, %xmm5, %xmm5
  14804. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14805. vpxor %xmm3, %xmm5, %xmm5
  14806. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14807. vpxor %xmm4, %xmm6, %xmm6
  14808. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14809. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14810. vmovdqu 112(%rdi), %xmm0
  14811. vpxor %xmm1, %xmm7, %xmm7
  14812. vaesenc %xmm0, %xmm8, %xmm8
  14813. vaesenc %xmm0, %xmm9, %xmm9
  14814. vaesenc %xmm0, %xmm10, %xmm10
  14815. vaesenc %xmm0, %xmm11, %xmm11
  14816. vaesenc %xmm0, %xmm12, %xmm12
  14817. vaesenc %xmm0, %xmm13, %xmm13
  14818. vaesenc %xmm0, %xmm14, %xmm14
  14819. vaesenc %xmm0, %xmm15, %xmm15
  14820. # aesenc_pclmul_n
  14821. vmovdqu -16(%rdx), %xmm1
  14822. vmovdqu (%rsp), %xmm0
  14823. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  14824. vpxor %xmm2, %xmm5, %xmm5
  14825. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  14826. vpxor %xmm3, %xmm5, %xmm5
  14827. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  14828. vpxor %xmm4, %xmm6, %xmm6
  14829. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  14830. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  14831. vmovdqu 128(%rdi), %xmm0
  14832. vpxor %xmm1, %xmm7, %xmm7
  14833. vaesenc %xmm0, %xmm8, %xmm8
  14834. vaesenc %xmm0, %xmm9, %xmm9
  14835. vaesenc %xmm0, %xmm10, %xmm10
  14836. vaesenc %xmm0, %xmm11, %xmm11
  14837. vaesenc %xmm0, %xmm12, %xmm12
  14838. vaesenc %xmm0, %xmm13, %xmm13
  14839. vaesenc %xmm0, %xmm14, %xmm14
  14840. vaesenc %xmm0, %xmm15, %xmm15
  14841. # aesenc_pclmul_l
  14842. vpxor %xmm2, %xmm5, %xmm5
  14843. vpxor %xmm4, %xmm6, %xmm6
  14844. vpxor %xmm3, %xmm5, %xmm5
  14845. vpslldq $8, %xmm5, %xmm1
  14846. vpsrldq $8, %xmm5, %xmm5
  14847. vmovdqu 144(%rdi), %xmm4
  14848. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm0
  14849. vaesenc %xmm4, %xmm8, %xmm8
  14850. vpxor %xmm1, %xmm6, %xmm6
  14851. vpxor %xmm5, %xmm7, %xmm7
  14852. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  14853. vaesenc %xmm4, %xmm9, %xmm9
  14854. vaesenc %xmm4, %xmm10, %xmm10
  14855. vaesenc %xmm4, %xmm11, %xmm11
  14856. vpshufd $0x4e, %xmm6, %xmm6
  14857. vpxor %xmm3, %xmm6, %xmm6
  14858. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  14859. vaesenc %xmm4, %xmm12, %xmm12
  14860. vaesenc %xmm4, %xmm13, %xmm13
  14861. vaesenc %xmm4, %xmm14, %xmm14
  14862. vpshufd $0x4e, %xmm6, %xmm6
  14863. vpxor %xmm3, %xmm6, %xmm6
  14864. vpxor %xmm7, %xmm6, %xmm6
  14865. vaesenc %xmm4, %xmm15, %xmm15
  14866. cmpl $11, %esi
  14867. vmovdqu 160(%rdi), %xmm7
  14868. jl L_AES_GCM_encrypt_update_avx2_aesenc_128_ghash_avx_done
  14869. vaesenc %xmm7, %xmm8, %xmm8
  14870. vaesenc %xmm7, %xmm9, %xmm9
  14871. vaesenc %xmm7, %xmm10, %xmm10
  14872. vaesenc %xmm7, %xmm11, %xmm11
  14873. vaesenc %xmm7, %xmm12, %xmm12
  14874. vaesenc %xmm7, %xmm13, %xmm13
  14875. vaesenc %xmm7, %xmm14, %xmm14
  14876. vaesenc %xmm7, %xmm15, %xmm15
  14877. vmovdqu 176(%rdi), %xmm7
  14878. vaesenc %xmm7, %xmm8, %xmm8
  14879. vaesenc %xmm7, %xmm9, %xmm9
  14880. vaesenc %xmm7, %xmm10, %xmm10
  14881. vaesenc %xmm7, %xmm11, %xmm11
  14882. vaesenc %xmm7, %xmm12, %xmm12
  14883. vaesenc %xmm7, %xmm13, %xmm13
  14884. vaesenc %xmm7, %xmm14, %xmm14
  14885. vaesenc %xmm7, %xmm15, %xmm15
  14886. cmpl $13, %esi
  14887. vmovdqu 192(%rdi), %xmm7
  14888. jl L_AES_GCM_encrypt_update_avx2_aesenc_128_ghash_avx_done
  14889. vaesenc %xmm7, %xmm8, %xmm8
  14890. vaesenc %xmm7, %xmm9, %xmm9
  14891. vaesenc %xmm7, %xmm10, %xmm10
  14892. vaesenc %xmm7, %xmm11, %xmm11
  14893. vaesenc %xmm7, %xmm12, %xmm12
  14894. vaesenc %xmm7, %xmm13, %xmm13
  14895. vaesenc %xmm7, %xmm14, %xmm14
  14896. vaesenc %xmm7, %xmm15, %xmm15
  14897. vmovdqu 208(%rdi), %xmm7
  14898. vaesenc %xmm7, %xmm8, %xmm8
  14899. vaesenc %xmm7, %xmm9, %xmm9
  14900. vaesenc %xmm7, %xmm10, %xmm10
  14901. vaesenc %xmm7, %xmm11, %xmm11
  14902. vaesenc %xmm7, %xmm12, %xmm12
  14903. vaesenc %xmm7, %xmm13, %xmm13
  14904. vaesenc %xmm7, %xmm14, %xmm14
  14905. vaesenc %xmm7, %xmm15, %xmm15
  14906. vmovdqu 224(%rdi), %xmm7
  14907. L_AES_GCM_encrypt_update_avx2_aesenc_128_ghash_avx_done:
  14908. # aesenc_last
  14909. vaesenclast %xmm7, %xmm8, %xmm8
  14910. vaesenclast %xmm7, %xmm9, %xmm9
  14911. vaesenclast %xmm7, %xmm10, %xmm10
  14912. vaesenclast %xmm7, %xmm11, %xmm11
  14913. vmovdqu (%rcx), %xmm0
  14914. vmovdqu 16(%rcx), %xmm1
  14915. vmovdqu 32(%rcx), %xmm2
  14916. vmovdqu 48(%rcx), %xmm3
  14917. vpxor %xmm0, %xmm8, %xmm8
  14918. vpxor %xmm1, %xmm9, %xmm9
  14919. vpxor %xmm2, %xmm10, %xmm10
  14920. vpxor %xmm3, %xmm11, %xmm11
  14921. vmovdqu %xmm8, (%rdx)
  14922. vmovdqu %xmm9, 16(%rdx)
  14923. vmovdqu %xmm10, 32(%rdx)
  14924. vmovdqu %xmm11, 48(%rdx)
  14925. vaesenclast %xmm7, %xmm12, %xmm12
  14926. vaesenclast %xmm7, %xmm13, %xmm13
  14927. vaesenclast %xmm7, %xmm14, %xmm14
  14928. vaesenclast %xmm7, %xmm15, %xmm15
  14929. vmovdqu 64(%rcx), %xmm0
  14930. vmovdqu 80(%rcx), %xmm1
  14931. vmovdqu 96(%rcx), %xmm2
  14932. vmovdqu 112(%rcx), %xmm3
  14933. vpxor %xmm0, %xmm12, %xmm12
  14934. vpxor %xmm1, %xmm13, %xmm13
  14935. vpxor %xmm2, %xmm14, %xmm14
  14936. vpxor %xmm3, %xmm15, %xmm15
  14937. vmovdqu %xmm12, 64(%rdx)
  14938. vmovdqu %xmm13, 80(%rdx)
  14939. vmovdqu %xmm14, 96(%rdx)
  14940. vmovdqu %xmm15, 112(%rdx)
  14941. # aesenc_128_ghash - end
  14942. addl $0x80, %r14d
  14943. cmpl %r13d, %r14d
  14944. jl L_AES_GCM_encrypt_update_avx2_ghash_128
  14945. L_AES_GCM_encrypt_update_avx2_end_128:
  14946. vmovdqu L_avx2_aes_gcm_bswap_mask(%rip), %xmm4
  14947. vpshufb %xmm4, %xmm8, %xmm8
  14948. vpshufb %xmm4, %xmm9, %xmm9
  14949. vpshufb %xmm4, %xmm10, %xmm10
  14950. vpshufb %xmm4, %xmm11, %xmm11
  14951. vpshufb %xmm4, %xmm12, %xmm12
  14952. vpshufb %xmm4, %xmm13, %xmm13
  14953. vpshufb %xmm4, %xmm14, %xmm14
  14954. vpshufb %xmm4, %xmm15, %xmm15
  14955. vpxor %xmm6, %xmm8, %xmm8
  14956. vmovdqu (%rsp), %xmm7
  14957. vpclmulqdq $16, %xmm15, %xmm7, %xmm5
  14958. vpclmulqdq $0x01, %xmm15, %xmm7, %xmm1
  14959. vpclmulqdq $0x00, %xmm15, %xmm7, %xmm4
  14960. vpclmulqdq $0x11, %xmm15, %xmm7, %xmm6
  14961. vpxor %xmm1, %xmm5, %xmm5
  14962. vmovdqu 16(%rsp), %xmm7
  14963. vpclmulqdq $16, %xmm14, %xmm7, %xmm2
  14964. vpclmulqdq $0x01, %xmm14, %xmm7, %xmm1
  14965. vpclmulqdq $0x00, %xmm14, %xmm7, %xmm0
  14966. vpclmulqdq $0x11, %xmm14, %xmm7, %xmm3
  14967. vpxor %xmm1, %xmm2, %xmm2
  14968. vpxor %xmm3, %xmm6, %xmm6
  14969. vpxor %xmm2, %xmm5, %xmm5
  14970. vpxor %xmm0, %xmm4, %xmm4
  14971. vmovdqu 32(%rsp), %xmm15
  14972. vmovdqu 48(%rsp), %xmm7
  14973. vpclmulqdq $16, %xmm13, %xmm15, %xmm2
  14974. vpclmulqdq $0x01, %xmm13, %xmm15, %xmm1
  14975. vpclmulqdq $0x00, %xmm13, %xmm15, %xmm0
  14976. vpclmulqdq $0x11, %xmm13, %xmm15, %xmm3
  14977. vpxor %xmm1, %xmm2, %xmm2
  14978. vpxor %xmm3, %xmm6, %xmm6
  14979. vpxor %xmm2, %xmm5, %xmm5
  14980. vpxor %xmm0, %xmm4, %xmm4
  14981. vpclmulqdq $16, %xmm12, %xmm7, %xmm2
  14982. vpclmulqdq $0x01, %xmm12, %xmm7, %xmm1
  14983. vpclmulqdq $0x00, %xmm12, %xmm7, %xmm0
  14984. vpclmulqdq $0x11, %xmm12, %xmm7, %xmm3
  14985. vpxor %xmm1, %xmm2, %xmm2
  14986. vpxor %xmm3, %xmm6, %xmm6
  14987. vpxor %xmm2, %xmm5, %xmm5
  14988. vpxor %xmm0, %xmm4, %xmm4
  14989. vmovdqu 64(%rsp), %xmm15
  14990. vmovdqu 80(%rsp), %xmm7
  14991. vpclmulqdq $16, %xmm11, %xmm15, %xmm2
  14992. vpclmulqdq $0x01, %xmm11, %xmm15, %xmm1
  14993. vpclmulqdq $0x00, %xmm11, %xmm15, %xmm0
  14994. vpclmulqdq $0x11, %xmm11, %xmm15, %xmm3
  14995. vpxor %xmm1, %xmm2, %xmm2
  14996. vpxor %xmm3, %xmm6, %xmm6
  14997. vpxor %xmm2, %xmm5, %xmm5
  14998. vpxor %xmm0, %xmm4, %xmm4
  14999. vpclmulqdq $16, %xmm10, %xmm7, %xmm2
  15000. vpclmulqdq $0x01, %xmm10, %xmm7, %xmm1
  15001. vpclmulqdq $0x00, %xmm10, %xmm7, %xmm0
  15002. vpclmulqdq $0x11, %xmm10, %xmm7, %xmm3
  15003. vpxor %xmm1, %xmm2, %xmm2
  15004. vpxor %xmm3, %xmm6, %xmm6
  15005. vpxor %xmm2, %xmm5, %xmm5
  15006. vpxor %xmm0, %xmm4, %xmm4
  15007. vmovdqu 96(%rsp), %xmm15
  15008. vmovdqu 112(%rsp), %xmm7
  15009. vpclmulqdq $16, %xmm9, %xmm15, %xmm2
  15010. vpclmulqdq $0x01, %xmm9, %xmm15, %xmm1
  15011. vpclmulqdq $0x00, %xmm9, %xmm15, %xmm0
  15012. vpclmulqdq $0x11, %xmm9, %xmm15, %xmm3
  15013. vpxor %xmm1, %xmm2, %xmm2
  15014. vpxor %xmm3, %xmm6, %xmm6
  15015. vpxor %xmm2, %xmm5, %xmm5
  15016. vpxor %xmm0, %xmm4, %xmm4
  15017. vpclmulqdq $16, %xmm8, %xmm7, %xmm2
  15018. vpclmulqdq $0x01, %xmm8, %xmm7, %xmm1
  15019. vpclmulqdq $0x00, %xmm8, %xmm7, %xmm0
  15020. vpclmulqdq $0x11, %xmm8, %xmm7, %xmm3
  15021. vpxor %xmm1, %xmm2, %xmm2
  15022. vpxor %xmm3, %xmm6, %xmm6
  15023. vpxor %xmm2, %xmm5, %xmm5
  15024. vpxor %xmm0, %xmm4, %xmm4
  15025. vpslldq $8, %xmm5, %xmm7
  15026. vpsrldq $8, %xmm5, %xmm5
  15027. vpxor %xmm7, %xmm4, %xmm4
  15028. vpxor %xmm5, %xmm6, %xmm6
  15029. # ghash_red
  15030. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm2
  15031. vpclmulqdq $16, %xmm2, %xmm4, %xmm0
  15032. vpshufd $0x4e, %xmm4, %xmm1
  15033. vpxor %xmm0, %xmm1, %xmm1
  15034. vpclmulqdq $16, %xmm2, %xmm1, %xmm0
  15035. vpshufd $0x4e, %xmm1, %xmm1
  15036. vpxor %xmm0, %xmm1, %xmm1
  15037. vpxor %xmm1, %xmm6, %xmm6
  15038. vmovdqu (%rsp), %xmm5
  15039. vmovdqu 128(%rsp), %xmm4
  15040. L_AES_GCM_encrypt_update_avx2_done_128:
  15041. cmpl %r8d, %r14d
  15042. je L_AES_GCM_encrypt_update_avx2_done_enc
  15043. movl %r8d, %r13d
  15044. andl $0xfffffff0, %r13d
  15045. cmpl %r13d, %r14d
  15046. jge L_AES_GCM_encrypt_update_avx2_last_block_done
  15047. # aesenc_block
  15048. vmovdqu %xmm4, %xmm1
  15049. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
  15050. vpaddd L_avx2_aes_gcm_one(%rip), %xmm1, %xmm1
  15051. vpxor (%rdi), %xmm0, %xmm0
  15052. vmovdqu 16(%rdi), %xmm2
  15053. vaesenc %xmm2, %xmm0, %xmm0
  15054. vmovdqu 32(%rdi), %xmm2
  15055. vaesenc %xmm2, %xmm0, %xmm0
  15056. vmovdqu 48(%rdi), %xmm2
  15057. vaesenc %xmm2, %xmm0, %xmm0
  15058. vmovdqu 64(%rdi), %xmm2
  15059. vaesenc %xmm2, %xmm0, %xmm0
  15060. vmovdqu 80(%rdi), %xmm2
  15061. vaesenc %xmm2, %xmm0, %xmm0
  15062. vmovdqu 96(%rdi), %xmm2
  15063. vaesenc %xmm2, %xmm0, %xmm0
  15064. vmovdqu 112(%rdi), %xmm2
  15065. vaesenc %xmm2, %xmm0, %xmm0
  15066. vmovdqu 128(%rdi), %xmm2
  15067. vaesenc %xmm2, %xmm0, %xmm0
  15068. vmovdqu 144(%rdi), %xmm2
  15069. vaesenc %xmm2, %xmm0, %xmm0
  15070. vmovdqu %xmm1, %xmm4
  15071. cmpl $11, %esi
  15072. vmovdqu 160(%rdi), %xmm1
  15073. jl L_AES_GCM_encrypt_update_avx2_aesenc_block_last
  15074. vaesenc %xmm1, %xmm0, %xmm0
  15075. vmovdqu 176(%rdi), %xmm2
  15076. vaesenc %xmm2, %xmm0, %xmm0
  15077. cmpl $13, %esi
  15078. vmovdqu 192(%rdi), %xmm1
  15079. jl L_AES_GCM_encrypt_update_avx2_aesenc_block_last
  15080. vaesenc %xmm1, %xmm0, %xmm0
  15081. vmovdqu 208(%rdi), %xmm2
  15082. vaesenc %xmm2, %xmm0, %xmm0
  15083. vmovdqu 224(%rdi), %xmm1
  15084. L_AES_GCM_encrypt_update_avx2_aesenc_block_last:
  15085. vaesenclast %xmm1, %xmm0, %xmm0
  15086. vmovdqu (%r11,%r14,1), %xmm1
  15087. vpxor %xmm1, %xmm0, %xmm0
  15088. vmovdqu %xmm0, (%r10,%r14,1)
  15089. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  15090. vpxor %xmm0, %xmm6, %xmm6
  15091. addl $16, %r14d
  15092. cmpl %r13d, %r14d
  15093. jge L_AES_GCM_encrypt_update_avx2_last_block_ghash
  15094. L_AES_GCM_encrypt_update_avx2_last_block_start:
  15095. vmovdqu (%r11,%r14,1), %xmm12
  15096. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm11
  15097. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  15098. # aesenc_gfmul_sb
  15099. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm2
  15100. vpclmulqdq $16, %xmm5, %xmm6, %xmm3
  15101. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm1
  15102. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm8
  15103. vpxor (%rdi), %xmm11, %xmm11
  15104. vaesenc 16(%rdi), %xmm11, %xmm11
  15105. vpxor %xmm2, %xmm3, %xmm3
  15106. vpslldq $8, %xmm3, %xmm2
  15107. vpsrldq $8, %xmm3, %xmm3
  15108. vaesenc 32(%rdi), %xmm11, %xmm11
  15109. vpxor %xmm1, %xmm2, %xmm2
  15110. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  15111. vaesenc 48(%rdi), %xmm11, %xmm11
  15112. vaesenc 64(%rdi), %xmm11, %xmm11
  15113. vaesenc 80(%rdi), %xmm11, %xmm11
  15114. vpshufd $0x4e, %xmm2, %xmm2
  15115. vpxor %xmm1, %xmm2, %xmm2
  15116. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  15117. vaesenc 96(%rdi), %xmm11, %xmm11
  15118. vaesenc 112(%rdi), %xmm11, %xmm11
  15119. vaesenc 128(%rdi), %xmm11, %xmm11
  15120. vpshufd $0x4e, %xmm2, %xmm2
  15121. vaesenc 144(%rdi), %xmm11, %xmm11
  15122. vpxor %xmm3, %xmm8, %xmm8
  15123. vpxor %xmm8, %xmm2, %xmm2
  15124. vmovdqu 160(%rdi), %xmm0
  15125. cmpl $11, %esi
  15126. jl L_AES_GCM_encrypt_update_avx2_aesenc_gfmul_sb_last
  15127. vaesenc %xmm0, %xmm11, %xmm11
  15128. vaesenc 176(%rdi), %xmm11, %xmm11
  15129. vmovdqu 192(%rdi), %xmm0
  15130. cmpl $13, %esi
  15131. jl L_AES_GCM_encrypt_update_avx2_aesenc_gfmul_sb_last
  15132. vaesenc %xmm0, %xmm11, %xmm11
  15133. vaesenc 208(%rdi), %xmm11, %xmm11
  15134. vmovdqu 224(%rdi), %xmm0
  15135. L_AES_GCM_encrypt_update_avx2_aesenc_gfmul_sb_last:
  15136. vaesenclast %xmm0, %xmm11, %xmm11
  15137. vpxor %xmm1, %xmm2, %xmm6
  15138. vpxor %xmm12, %xmm11, %xmm11
  15139. vmovdqu %xmm11, (%r10,%r14,1)
  15140. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm11
  15141. vpxor %xmm11, %xmm6, %xmm6
  15142. addl $16, %r14d
  15143. cmpl %r13d, %r14d
  15144. jl L_AES_GCM_encrypt_update_avx2_last_block_start
  15145. L_AES_GCM_encrypt_update_avx2_last_block_ghash:
  15146. # ghash_gfmul_red
  15147. vpclmulqdq $16, %xmm5, %xmm6, %xmm10
  15148. vpclmulqdq $0x01, %xmm5, %xmm6, %xmm9
  15149. vpclmulqdq $0x00, %xmm5, %xmm6, %xmm8
  15150. vpxor %xmm9, %xmm10, %xmm10
  15151. vpslldq $8, %xmm10, %xmm9
  15152. vpsrldq $8, %xmm10, %xmm10
  15153. vpxor %xmm8, %xmm9, %xmm9
  15154. vpclmulqdq $0x11, %xmm5, %xmm6, %xmm6
  15155. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
  15156. vpshufd $0x4e, %xmm9, %xmm9
  15157. vpxor %xmm8, %xmm9, %xmm9
  15158. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
  15159. vpshufd $0x4e, %xmm9, %xmm9
  15160. vpxor %xmm10, %xmm6, %xmm6
  15161. vpxor %xmm9, %xmm6, %xmm6
  15162. vpxor %xmm8, %xmm6, %xmm6
  15163. L_AES_GCM_encrypt_update_avx2_last_block_done:
  15164. L_AES_GCM_encrypt_update_avx2_done_enc:
  15165. vmovdqu %xmm6, (%r9)
  15166. vmovdqu %xmm4, (%r12)
  15167. vzeroupper
  15168. addq $0x98, %rsp
  15169. popq %r14
  15170. popq %r13
  15171. popq %r12
  15172. repz retq
  15173. #ifndef __APPLE__
  15174. .size AES_GCM_encrypt_update_avx2,.-AES_GCM_encrypt_update_avx2
  15175. #endif /* __APPLE__ */
  15176. #ifndef __APPLE__
  15177. .text
  15178. .globl AES_GCM_encrypt_final_avx2
  15179. .type AES_GCM_encrypt_final_avx2,@function
  15180. .align 16
  15181. AES_GCM_encrypt_final_avx2:
  15182. #else
  15183. .section __TEXT,__text
  15184. .globl _AES_GCM_encrypt_final_avx2
  15185. .p2align 4
  15186. _AES_GCM_encrypt_final_avx2:
  15187. #endif /* __APPLE__ */
  15188. movq 8(%rsp), %rax
  15189. subq $16, %rsp
  15190. vmovdqu (%rdi), %xmm4
  15191. vmovdqu (%r9), %xmm5
  15192. vmovdqu (%rax), %xmm6
  15193. vpsrlq $63, %xmm5, %xmm1
  15194. vpsllq $0x01, %xmm5, %xmm0
  15195. vpslldq $8, %xmm1, %xmm1
  15196. vpor %xmm1, %xmm0, %xmm0
  15197. vpshufd $0xff, %xmm5, %xmm5
  15198. vpsrad $31, %xmm5, %xmm5
  15199. vpand L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  15200. vpxor %xmm0, %xmm5, %xmm5
  15201. # calc_tag
  15202. shlq $3, %rcx
  15203. shlq $3, %r8
  15204. vmovq %rcx, %xmm0
  15205. vmovq %r8, %xmm1
  15206. vpunpcklqdq %xmm1, %xmm0, %xmm0
  15207. vpxor %xmm4, %xmm0, %xmm0
  15208. # ghash_gfmul_red
  15209. vpclmulqdq $16, %xmm5, %xmm0, %xmm7
  15210. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm3
  15211. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm2
  15212. vpxor %xmm3, %xmm7, %xmm7
  15213. vpslldq $8, %xmm7, %xmm3
  15214. vpsrldq $8, %xmm7, %xmm7
  15215. vpxor %xmm2, %xmm3, %xmm3
  15216. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm0
  15217. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  15218. vpshufd $0x4e, %xmm3, %xmm3
  15219. vpxor %xmm2, %xmm3, %xmm3
  15220. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  15221. vpshufd $0x4e, %xmm3, %xmm3
  15222. vpxor %xmm7, %xmm0, %xmm0
  15223. vpxor %xmm3, %xmm0, %xmm0
  15224. vpxor %xmm2, %xmm0, %xmm0
  15225. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  15226. vpxor %xmm6, %xmm0, %xmm0
  15227. # store_tag
  15228. cmpl $16, %edx
  15229. je L_AES_GCM_encrypt_final_avx2_store_tag_16
  15230. xorq %r10, %r10
  15231. vmovdqu %xmm0, (%rsp)
  15232. L_AES_GCM_encrypt_final_avx2_store_tag_loop:
  15233. movzbl (%rsp,%r10,1), %r11d
  15234. movb %r11b, (%rsi,%r10,1)
  15235. incl %r10d
  15236. cmpl %edx, %r10d
  15237. jne L_AES_GCM_encrypt_final_avx2_store_tag_loop
  15238. jmp L_AES_GCM_encrypt_final_avx2_store_tag_done
  15239. L_AES_GCM_encrypt_final_avx2_store_tag_16:
  15240. vmovdqu %xmm0, (%rsi)
  15241. L_AES_GCM_encrypt_final_avx2_store_tag_done:
  15242. vzeroupper
  15243. addq $16, %rsp
  15244. repz retq
  15245. #ifndef __APPLE__
  15246. .size AES_GCM_encrypt_final_avx2,.-AES_GCM_encrypt_final_avx2
  15247. #endif /* __APPLE__ */
  15248. #ifndef __APPLE__
  15249. .text
  15250. .globl AES_GCM_decrypt_update_avx2
  15251. .type AES_GCM_decrypt_update_avx2,@function
  15252. .align 16
  15253. AES_GCM_decrypt_update_avx2:
  15254. #else
  15255. .section __TEXT,__text
  15256. .globl _AES_GCM_decrypt_update_avx2
  15257. .p2align 4
  15258. _AES_GCM_decrypt_update_avx2:
  15259. #endif /* __APPLE__ */
  15260. pushq %r13
  15261. pushq %r12
  15262. pushq %r14
  15263. movq %rdx, %r10
  15264. movq %rcx, %r11
  15265. movq 32(%rsp), %rax
  15266. movq 40(%rsp), %r12
  15267. subq $0xa8, %rsp
  15268. vmovdqu (%r9), %xmm6
  15269. vmovdqu (%rax), %xmm5
  15270. vmovdqu (%r12), %xmm4
  15271. # Calculate H
  15272. vpsrlq $63, %xmm5, %xmm1
  15273. vpsllq $0x01, %xmm5, %xmm0
  15274. vpslldq $8, %xmm1, %xmm1
  15275. vpor %xmm1, %xmm0, %xmm0
  15276. vpshufd $0xff, %xmm5, %xmm5
  15277. vpsrad $31, %xmm5, %xmm5
  15278. vpand L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  15279. vpxor %xmm0, %xmm5, %xmm5
  15280. xorl %r14d, %r14d
  15281. cmpl $0x80, %r8d
  15282. movl %r8d, %r13d
  15283. jl L_AES_GCM_decrypt_update_avx2_done_128
  15284. andl $0xffffff80, %r13d
  15285. vmovdqu %xmm4, 128(%rsp)
  15286. vmovdqu %xmm15, 144(%rsp)
  15287. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm3
  15288. # H ^ 1 and H ^ 2
  15289. vpclmulqdq $0x00, %xmm5, %xmm5, %xmm9
  15290. vpclmulqdq $0x11, %xmm5, %xmm5, %xmm10
  15291. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  15292. vpshufd $0x4e, %xmm9, %xmm9
  15293. vpxor %xmm8, %xmm9, %xmm9
  15294. vpclmulqdq $16, %xmm3, %xmm9, %xmm8
  15295. vpshufd $0x4e, %xmm9, %xmm9
  15296. vpxor %xmm8, %xmm9, %xmm9
  15297. vpxor %xmm9, %xmm10, %xmm0
  15298. vmovdqu %xmm5, (%rsp)
  15299. vmovdqu %xmm0, 16(%rsp)
  15300. # H ^ 3 and H ^ 4
  15301. vpclmulqdq $16, %xmm5, %xmm0, %xmm11
  15302. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm10
  15303. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm9
  15304. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm12
  15305. vpclmulqdq $0x00, %xmm0, %xmm0, %xmm13
  15306. vpclmulqdq $0x11, %xmm0, %xmm0, %xmm14
  15307. vpxor %xmm10, %xmm11, %xmm11
  15308. vpslldq $8, %xmm11, %xmm10
  15309. vpsrldq $8, %xmm11, %xmm11
  15310. vpxor %xmm9, %xmm10, %xmm10
  15311. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  15312. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  15313. vpshufd $0x4e, %xmm10, %xmm10
  15314. vpshufd $0x4e, %xmm13, %xmm13
  15315. vpxor %xmm9, %xmm10, %xmm10
  15316. vpxor %xmm8, %xmm13, %xmm13
  15317. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  15318. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  15319. vpshufd $0x4e, %xmm10, %xmm10
  15320. vpshufd $0x4e, %xmm13, %xmm13
  15321. vpxor %xmm11, %xmm12, %xmm12
  15322. vpxor %xmm8, %xmm13, %xmm13
  15323. vpxor %xmm12, %xmm10, %xmm10
  15324. vpxor %xmm14, %xmm13, %xmm2
  15325. vpxor %xmm9, %xmm10, %xmm1
  15326. vmovdqu %xmm1, 32(%rsp)
  15327. vmovdqu %xmm2, 48(%rsp)
  15328. # H ^ 5 and H ^ 6
  15329. vpclmulqdq $16, %xmm0, %xmm1, %xmm11
  15330. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm10
  15331. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm9
  15332. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm12
  15333. vpclmulqdq $0x00, %xmm1, %xmm1, %xmm13
  15334. vpclmulqdq $0x11, %xmm1, %xmm1, %xmm14
  15335. vpxor %xmm10, %xmm11, %xmm11
  15336. vpslldq $8, %xmm11, %xmm10
  15337. vpsrldq $8, %xmm11, %xmm11
  15338. vpxor %xmm9, %xmm10, %xmm10
  15339. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  15340. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  15341. vpshufd $0x4e, %xmm10, %xmm10
  15342. vpshufd $0x4e, %xmm13, %xmm13
  15343. vpxor %xmm9, %xmm10, %xmm10
  15344. vpxor %xmm8, %xmm13, %xmm13
  15345. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  15346. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  15347. vpshufd $0x4e, %xmm10, %xmm10
  15348. vpshufd $0x4e, %xmm13, %xmm13
  15349. vpxor %xmm11, %xmm12, %xmm12
  15350. vpxor %xmm8, %xmm13, %xmm13
  15351. vpxor %xmm12, %xmm10, %xmm10
  15352. vpxor %xmm14, %xmm13, %xmm0
  15353. vpxor %xmm9, %xmm10, %xmm7
  15354. vmovdqu %xmm7, 64(%rsp)
  15355. vmovdqu %xmm0, 80(%rsp)
  15356. # H ^ 7 and H ^ 8
  15357. vpclmulqdq $16, %xmm1, %xmm2, %xmm11
  15358. vpclmulqdq $0x01, %xmm1, %xmm2, %xmm10
  15359. vpclmulqdq $0x00, %xmm1, %xmm2, %xmm9
  15360. vpclmulqdq $0x11, %xmm1, %xmm2, %xmm12
  15361. vpclmulqdq $0x00, %xmm2, %xmm2, %xmm13
  15362. vpclmulqdq $0x11, %xmm2, %xmm2, %xmm14
  15363. vpxor %xmm10, %xmm11, %xmm11
  15364. vpslldq $8, %xmm11, %xmm10
  15365. vpsrldq $8, %xmm11, %xmm11
  15366. vpxor %xmm9, %xmm10, %xmm10
  15367. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  15368. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  15369. vpshufd $0x4e, %xmm10, %xmm10
  15370. vpshufd $0x4e, %xmm13, %xmm13
  15371. vpxor %xmm9, %xmm10, %xmm10
  15372. vpxor %xmm8, %xmm13, %xmm13
  15373. vpclmulqdq $16, %xmm3, %xmm10, %xmm9
  15374. vpclmulqdq $16, %xmm3, %xmm13, %xmm8
  15375. vpshufd $0x4e, %xmm10, %xmm10
  15376. vpshufd $0x4e, %xmm13, %xmm13
  15377. vpxor %xmm11, %xmm12, %xmm12
  15378. vpxor %xmm8, %xmm13, %xmm13
  15379. vpxor %xmm12, %xmm10, %xmm10
  15380. vpxor %xmm14, %xmm13, %xmm0
  15381. vpxor %xmm9, %xmm10, %xmm7
  15382. vmovdqu %xmm7, 96(%rsp)
  15383. vmovdqu %xmm0, 112(%rsp)
  15384. L_AES_GCM_decrypt_update_avx2_ghash_128:
  15385. # aesenc_128_ghash
  15386. leaq (%r11,%r14,1), %rcx
  15387. leaq (%r10,%r14,1), %rdx
  15388. # aesenc_ctr
  15389. vmovdqu 128(%rsp), %xmm0
  15390. vmovdqu L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
  15391. vpaddd L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
  15392. vpshufb %xmm1, %xmm0, %xmm8
  15393. vpaddd L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
  15394. vpshufb %xmm1, %xmm9, %xmm9
  15395. vpaddd L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
  15396. vpshufb %xmm1, %xmm10, %xmm10
  15397. vpaddd L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
  15398. vpshufb %xmm1, %xmm11, %xmm11
  15399. vpaddd L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
  15400. vpshufb %xmm1, %xmm12, %xmm12
  15401. vpaddd L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
  15402. vpshufb %xmm1, %xmm13, %xmm13
  15403. vpaddd L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
  15404. vpshufb %xmm1, %xmm14, %xmm14
  15405. vpaddd L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
  15406. vpshufb %xmm1, %xmm15, %xmm15
  15407. # aesenc_xor
  15408. vmovdqu (%rdi), %xmm7
  15409. vmovdqu %xmm0, 128(%rsp)
  15410. vpxor %xmm7, %xmm8, %xmm8
  15411. vpxor %xmm7, %xmm9, %xmm9
  15412. vpxor %xmm7, %xmm10, %xmm10
  15413. vpxor %xmm7, %xmm11, %xmm11
  15414. vpxor %xmm7, %xmm12, %xmm12
  15415. vpxor %xmm7, %xmm13, %xmm13
  15416. vpxor %xmm7, %xmm14, %xmm14
  15417. vpxor %xmm7, %xmm15, %xmm15
  15418. # aesenc_pclmul_1
  15419. vmovdqu (%rcx), %xmm1
  15420. vmovdqu 16(%rdi), %xmm0
  15421. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15422. vmovdqu 112(%rsp), %xmm2
  15423. vpxor %xmm6, %xmm1, %xmm1
  15424. vpclmulqdq $16, %xmm2, %xmm1, %xmm5
  15425. vpclmulqdq $0x01, %xmm2, %xmm1, %xmm3
  15426. vpclmulqdq $0x00, %xmm2, %xmm1, %xmm6
  15427. vpclmulqdq $0x11, %xmm2, %xmm1, %xmm7
  15428. vaesenc %xmm0, %xmm8, %xmm8
  15429. vaesenc %xmm0, %xmm9, %xmm9
  15430. vaesenc %xmm0, %xmm10, %xmm10
  15431. vaesenc %xmm0, %xmm11, %xmm11
  15432. vaesenc %xmm0, %xmm12, %xmm12
  15433. vaesenc %xmm0, %xmm13, %xmm13
  15434. vaesenc %xmm0, %xmm14, %xmm14
  15435. vaesenc %xmm0, %xmm15, %xmm15
  15436. # aesenc_pclmul_2
  15437. vmovdqu 16(%rcx), %xmm1
  15438. vmovdqu 96(%rsp), %xmm0
  15439. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15440. vpxor %xmm3, %xmm5, %xmm5
  15441. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15442. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15443. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15444. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15445. vmovdqu 32(%rdi), %xmm0
  15446. vpxor %xmm1, %xmm7, %xmm7
  15447. vaesenc %xmm0, %xmm8, %xmm8
  15448. vaesenc %xmm0, %xmm9, %xmm9
  15449. vaesenc %xmm0, %xmm10, %xmm10
  15450. vaesenc %xmm0, %xmm11, %xmm11
  15451. vaesenc %xmm0, %xmm12, %xmm12
  15452. vaesenc %xmm0, %xmm13, %xmm13
  15453. vaesenc %xmm0, %xmm14, %xmm14
  15454. vaesenc %xmm0, %xmm15, %xmm15
  15455. # aesenc_pclmul_n
  15456. vmovdqu 32(%rcx), %xmm1
  15457. vmovdqu 80(%rsp), %xmm0
  15458. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15459. vpxor %xmm2, %xmm5, %xmm5
  15460. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15461. vpxor %xmm3, %xmm5, %xmm5
  15462. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15463. vpxor %xmm4, %xmm6, %xmm6
  15464. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15465. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15466. vmovdqu 48(%rdi), %xmm0
  15467. vpxor %xmm1, %xmm7, %xmm7
  15468. vaesenc %xmm0, %xmm8, %xmm8
  15469. vaesenc %xmm0, %xmm9, %xmm9
  15470. vaesenc %xmm0, %xmm10, %xmm10
  15471. vaesenc %xmm0, %xmm11, %xmm11
  15472. vaesenc %xmm0, %xmm12, %xmm12
  15473. vaesenc %xmm0, %xmm13, %xmm13
  15474. vaesenc %xmm0, %xmm14, %xmm14
  15475. vaesenc %xmm0, %xmm15, %xmm15
  15476. # aesenc_pclmul_n
  15477. vmovdqu 48(%rcx), %xmm1
  15478. vmovdqu 64(%rsp), %xmm0
  15479. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15480. vpxor %xmm2, %xmm5, %xmm5
  15481. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15482. vpxor %xmm3, %xmm5, %xmm5
  15483. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15484. vpxor %xmm4, %xmm6, %xmm6
  15485. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15486. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15487. vmovdqu 64(%rdi), %xmm0
  15488. vpxor %xmm1, %xmm7, %xmm7
  15489. vaesenc %xmm0, %xmm8, %xmm8
  15490. vaesenc %xmm0, %xmm9, %xmm9
  15491. vaesenc %xmm0, %xmm10, %xmm10
  15492. vaesenc %xmm0, %xmm11, %xmm11
  15493. vaesenc %xmm0, %xmm12, %xmm12
  15494. vaesenc %xmm0, %xmm13, %xmm13
  15495. vaesenc %xmm0, %xmm14, %xmm14
  15496. vaesenc %xmm0, %xmm15, %xmm15
  15497. # aesenc_pclmul_n
  15498. vmovdqu 64(%rcx), %xmm1
  15499. vmovdqu 48(%rsp), %xmm0
  15500. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15501. vpxor %xmm2, %xmm5, %xmm5
  15502. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15503. vpxor %xmm3, %xmm5, %xmm5
  15504. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15505. vpxor %xmm4, %xmm6, %xmm6
  15506. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15507. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15508. vmovdqu 80(%rdi), %xmm0
  15509. vpxor %xmm1, %xmm7, %xmm7
  15510. vaesenc %xmm0, %xmm8, %xmm8
  15511. vaesenc %xmm0, %xmm9, %xmm9
  15512. vaesenc %xmm0, %xmm10, %xmm10
  15513. vaesenc %xmm0, %xmm11, %xmm11
  15514. vaesenc %xmm0, %xmm12, %xmm12
  15515. vaesenc %xmm0, %xmm13, %xmm13
  15516. vaesenc %xmm0, %xmm14, %xmm14
  15517. vaesenc %xmm0, %xmm15, %xmm15
  15518. # aesenc_pclmul_n
  15519. vmovdqu 80(%rcx), %xmm1
  15520. vmovdqu 32(%rsp), %xmm0
  15521. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15522. vpxor %xmm2, %xmm5, %xmm5
  15523. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15524. vpxor %xmm3, %xmm5, %xmm5
  15525. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15526. vpxor %xmm4, %xmm6, %xmm6
  15527. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15528. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15529. vmovdqu 96(%rdi), %xmm0
  15530. vpxor %xmm1, %xmm7, %xmm7
  15531. vaesenc %xmm0, %xmm8, %xmm8
  15532. vaesenc %xmm0, %xmm9, %xmm9
  15533. vaesenc %xmm0, %xmm10, %xmm10
  15534. vaesenc %xmm0, %xmm11, %xmm11
  15535. vaesenc %xmm0, %xmm12, %xmm12
  15536. vaesenc %xmm0, %xmm13, %xmm13
  15537. vaesenc %xmm0, %xmm14, %xmm14
  15538. vaesenc %xmm0, %xmm15, %xmm15
  15539. # aesenc_pclmul_n
  15540. vmovdqu 96(%rcx), %xmm1
  15541. vmovdqu 16(%rsp), %xmm0
  15542. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15543. vpxor %xmm2, %xmm5, %xmm5
  15544. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15545. vpxor %xmm3, %xmm5, %xmm5
  15546. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15547. vpxor %xmm4, %xmm6, %xmm6
  15548. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15549. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15550. vmovdqu 112(%rdi), %xmm0
  15551. vpxor %xmm1, %xmm7, %xmm7
  15552. vaesenc %xmm0, %xmm8, %xmm8
  15553. vaesenc %xmm0, %xmm9, %xmm9
  15554. vaesenc %xmm0, %xmm10, %xmm10
  15555. vaesenc %xmm0, %xmm11, %xmm11
  15556. vaesenc %xmm0, %xmm12, %xmm12
  15557. vaesenc %xmm0, %xmm13, %xmm13
  15558. vaesenc %xmm0, %xmm14, %xmm14
  15559. vaesenc %xmm0, %xmm15, %xmm15
  15560. # aesenc_pclmul_n
  15561. vmovdqu 112(%rcx), %xmm1
  15562. vmovdqu (%rsp), %xmm0
  15563. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
  15564. vpxor %xmm2, %xmm5, %xmm5
  15565. vpclmulqdq $16, %xmm0, %xmm1, %xmm2
  15566. vpxor %xmm3, %xmm5, %xmm5
  15567. vpclmulqdq $0x01, %xmm0, %xmm1, %xmm3
  15568. vpxor %xmm4, %xmm6, %xmm6
  15569. vpclmulqdq $0x00, %xmm0, %xmm1, %xmm4
  15570. vpclmulqdq $0x11, %xmm0, %xmm1, %xmm1
  15571. vmovdqu 128(%rdi), %xmm0
  15572. vpxor %xmm1, %xmm7, %xmm7
  15573. vaesenc %xmm0, %xmm8, %xmm8
  15574. vaesenc %xmm0, %xmm9, %xmm9
  15575. vaesenc %xmm0, %xmm10, %xmm10
  15576. vaesenc %xmm0, %xmm11, %xmm11
  15577. vaesenc %xmm0, %xmm12, %xmm12
  15578. vaesenc %xmm0, %xmm13, %xmm13
  15579. vaesenc %xmm0, %xmm14, %xmm14
  15580. vaesenc %xmm0, %xmm15, %xmm15
  15581. # aesenc_pclmul_l
  15582. vpxor %xmm2, %xmm5, %xmm5
  15583. vpxor %xmm4, %xmm6, %xmm6
  15584. vpxor %xmm3, %xmm5, %xmm5
  15585. vpslldq $8, %xmm5, %xmm1
  15586. vpsrldq $8, %xmm5, %xmm5
  15587. vmovdqu 144(%rdi), %xmm4
  15588. vmovdqu L_avx2_aes_gcm_mod2_128(%rip), %xmm0
  15589. vaesenc %xmm4, %xmm8, %xmm8
  15590. vpxor %xmm1, %xmm6, %xmm6
  15591. vpxor %xmm5, %xmm7, %xmm7
  15592. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  15593. vaesenc %xmm4, %xmm9, %xmm9
  15594. vaesenc %xmm4, %xmm10, %xmm10
  15595. vaesenc %xmm4, %xmm11, %xmm11
  15596. vpshufd $0x4e, %xmm6, %xmm6
  15597. vpxor %xmm3, %xmm6, %xmm6
  15598. vpclmulqdq $16, %xmm0, %xmm6, %xmm3
  15599. vaesenc %xmm4, %xmm12, %xmm12
  15600. vaesenc %xmm4, %xmm13, %xmm13
  15601. vaesenc %xmm4, %xmm14, %xmm14
  15602. vpshufd $0x4e, %xmm6, %xmm6
  15603. vpxor %xmm3, %xmm6, %xmm6
  15604. vpxor %xmm7, %xmm6, %xmm6
  15605. vaesenc %xmm4, %xmm15, %xmm15
  15606. cmpl $11, %esi
  15607. vmovdqu 160(%rdi), %xmm7
  15608. jl L_AES_GCM_decrypt_update_avx2_aesenc_128_ghash_avx_done
  15609. vaesenc %xmm7, %xmm8, %xmm8
  15610. vaesenc %xmm7, %xmm9, %xmm9
  15611. vaesenc %xmm7, %xmm10, %xmm10
  15612. vaesenc %xmm7, %xmm11, %xmm11
  15613. vaesenc %xmm7, %xmm12, %xmm12
  15614. vaesenc %xmm7, %xmm13, %xmm13
  15615. vaesenc %xmm7, %xmm14, %xmm14
  15616. vaesenc %xmm7, %xmm15, %xmm15
  15617. vmovdqu 176(%rdi), %xmm7
  15618. vaesenc %xmm7, %xmm8, %xmm8
  15619. vaesenc %xmm7, %xmm9, %xmm9
  15620. vaesenc %xmm7, %xmm10, %xmm10
  15621. vaesenc %xmm7, %xmm11, %xmm11
  15622. vaesenc %xmm7, %xmm12, %xmm12
  15623. vaesenc %xmm7, %xmm13, %xmm13
  15624. vaesenc %xmm7, %xmm14, %xmm14
  15625. vaesenc %xmm7, %xmm15, %xmm15
  15626. cmpl $13, %esi
  15627. vmovdqu 192(%rdi), %xmm7
  15628. jl L_AES_GCM_decrypt_update_avx2_aesenc_128_ghash_avx_done
  15629. vaesenc %xmm7, %xmm8, %xmm8
  15630. vaesenc %xmm7, %xmm9, %xmm9
  15631. vaesenc %xmm7, %xmm10, %xmm10
  15632. vaesenc %xmm7, %xmm11, %xmm11
  15633. vaesenc %xmm7, %xmm12, %xmm12
  15634. vaesenc %xmm7, %xmm13, %xmm13
  15635. vaesenc %xmm7, %xmm14, %xmm14
  15636. vaesenc %xmm7, %xmm15, %xmm15
  15637. vmovdqu 208(%rdi), %xmm7
  15638. vaesenc %xmm7, %xmm8, %xmm8
  15639. vaesenc %xmm7, %xmm9, %xmm9
  15640. vaesenc %xmm7, %xmm10, %xmm10
  15641. vaesenc %xmm7, %xmm11, %xmm11
  15642. vaesenc %xmm7, %xmm12, %xmm12
  15643. vaesenc %xmm7, %xmm13, %xmm13
  15644. vaesenc %xmm7, %xmm14, %xmm14
  15645. vaesenc %xmm7, %xmm15, %xmm15
  15646. vmovdqu 224(%rdi), %xmm7
  15647. L_AES_GCM_decrypt_update_avx2_aesenc_128_ghash_avx_done:
  15648. # aesenc_last
  15649. vaesenclast %xmm7, %xmm8, %xmm8
  15650. vaesenclast %xmm7, %xmm9, %xmm9
  15651. vaesenclast %xmm7, %xmm10, %xmm10
  15652. vaesenclast %xmm7, %xmm11, %xmm11
  15653. vmovdqu (%rcx), %xmm0
  15654. vmovdqu 16(%rcx), %xmm1
  15655. vmovdqu 32(%rcx), %xmm2
  15656. vmovdqu 48(%rcx), %xmm3
  15657. vpxor %xmm0, %xmm8, %xmm8
  15658. vpxor %xmm1, %xmm9, %xmm9
  15659. vpxor %xmm2, %xmm10, %xmm10
  15660. vpxor %xmm3, %xmm11, %xmm11
  15661. vmovdqu %xmm8, (%rdx)
  15662. vmovdqu %xmm9, 16(%rdx)
  15663. vmovdqu %xmm10, 32(%rdx)
  15664. vmovdqu %xmm11, 48(%rdx)
  15665. vaesenclast %xmm7, %xmm12, %xmm12
  15666. vaesenclast %xmm7, %xmm13, %xmm13
  15667. vaesenclast %xmm7, %xmm14, %xmm14
  15668. vaesenclast %xmm7, %xmm15, %xmm15
  15669. vmovdqu 64(%rcx), %xmm0
  15670. vmovdqu 80(%rcx), %xmm1
  15671. vmovdqu 96(%rcx), %xmm2
  15672. vmovdqu 112(%rcx), %xmm3
  15673. vpxor %xmm0, %xmm12, %xmm12
  15674. vpxor %xmm1, %xmm13, %xmm13
  15675. vpxor %xmm2, %xmm14, %xmm14
  15676. vpxor %xmm3, %xmm15, %xmm15
  15677. vmovdqu %xmm12, 64(%rdx)
  15678. vmovdqu %xmm13, 80(%rdx)
  15679. vmovdqu %xmm14, 96(%rdx)
  15680. vmovdqu %xmm15, 112(%rdx)
  15681. # aesenc_128_ghash - end
  15682. addl $0x80, %r14d
  15683. cmpl %r13d, %r14d
  15684. jl L_AES_GCM_decrypt_update_avx2_ghash_128
  15685. vmovdqu (%rsp), %xmm5
  15686. vmovdqu 128(%rsp), %xmm4
  15687. vmovdqu 144(%rsp), %xmm15
  15688. L_AES_GCM_decrypt_update_avx2_done_128:
  15689. cmpl %r8d, %r14d
  15690. jge L_AES_GCM_decrypt_update_avx2_done_dec
  15691. movl %r8d, %r13d
  15692. andl $0xfffffff0, %r13d
  15693. cmpl %r13d, %r14d
  15694. jge L_AES_GCM_decrypt_update_avx2_last_block_done
  15695. L_AES_GCM_decrypt_update_avx2_last_block_start:
  15696. vmovdqu (%r11,%r14,1), %xmm11
  15697. vpshufb L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm10
  15698. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm12
  15699. vpaddd L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
  15700. vpxor %xmm6, %xmm12, %xmm12
  15701. # aesenc_gfmul_sb
  15702. vpclmulqdq $0x01, %xmm5, %xmm12, %xmm2
  15703. vpclmulqdq $16, %xmm5, %xmm12, %xmm3
  15704. vpclmulqdq $0x00, %xmm5, %xmm12, %xmm1
  15705. vpclmulqdq $0x11, %xmm5, %xmm12, %xmm8
  15706. vpxor (%rdi), %xmm10, %xmm10
  15707. vaesenc 16(%rdi), %xmm10, %xmm10
  15708. vpxor %xmm2, %xmm3, %xmm3
  15709. vpslldq $8, %xmm3, %xmm2
  15710. vpsrldq $8, %xmm3, %xmm3
  15711. vaesenc 32(%rdi), %xmm10, %xmm10
  15712. vpxor %xmm1, %xmm2, %xmm2
  15713. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  15714. vaesenc 48(%rdi), %xmm10, %xmm10
  15715. vaesenc 64(%rdi), %xmm10, %xmm10
  15716. vaesenc 80(%rdi), %xmm10, %xmm10
  15717. vpshufd $0x4e, %xmm2, %xmm2
  15718. vpxor %xmm1, %xmm2, %xmm2
  15719. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
  15720. vaesenc 96(%rdi), %xmm10, %xmm10
  15721. vaesenc 112(%rdi), %xmm10, %xmm10
  15722. vaesenc 128(%rdi), %xmm10, %xmm10
  15723. vpshufd $0x4e, %xmm2, %xmm2
  15724. vaesenc 144(%rdi), %xmm10, %xmm10
  15725. vpxor %xmm3, %xmm8, %xmm8
  15726. vpxor %xmm8, %xmm2, %xmm2
  15727. vmovdqu 160(%rdi), %xmm0
  15728. cmpl $11, %esi
  15729. jl L_AES_GCM_decrypt_update_avx2_aesenc_gfmul_sb_last
  15730. vaesenc %xmm0, %xmm10, %xmm10
  15731. vaesenc 176(%rdi), %xmm10, %xmm10
  15732. vmovdqu 192(%rdi), %xmm0
  15733. cmpl $13, %esi
  15734. jl L_AES_GCM_decrypt_update_avx2_aesenc_gfmul_sb_last
  15735. vaesenc %xmm0, %xmm10, %xmm10
  15736. vaesenc 208(%rdi), %xmm10, %xmm10
  15737. vmovdqu 224(%rdi), %xmm0
  15738. L_AES_GCM_decrypt_update_avx2_aesenc_gfmul_sb_last:
  15739. vaesenclast %xmm0, %xmm10, %xmm10
  15740. vpxor %xmm1, %xmm2, %xmm6
  15741. vpxor %xmm11, %xmm10, %xmm10
  15742. vmovdqu %xmm10, (%r10,%r14,1)
  15743. addl $16, %r14d
  15744. cmpl %r13d, %r14d
  15745. jl L_AES_GCM_decrypt_update_avx2_last_block_start
  15746. L_AES_GCM_decrypt_update_avx2_last_block_done:
  15747. L_AES_GCM_decrypt_update_avx2_done_dec:
  15748. vmovdqu %xmm6, (%r9)
  15749. vmovdqu %xmm4, (%r12)
  15750. vzeroupper
  15751. addq $0xa8, %rsp
  15752. popq %r14
  15753. popq %r12
  15754. popq %r13
  15755. repz retq
  15756. #ifndef __APPLE__
  15757. .size AES_GCM_decrypt_update_avx2,.-AES_GCM_decrypt_update_avx2
  15758. #endif /* __APPLE__ */
  15759. #ifndef __APPLE__
  15760. .text
  15761. .globl AES_GCM_decrypt_final_avx2
  15762. .type AES_GCM_decrypt_final_avx2,@function
  15763. .align 16
  15764. AES_GCM_decrypt_final_avx2:
  15765. #else
  15766. .section __TEXT,__text
  15767. .globl _AES_GCM_decrypt_final_avx2
  15768. .p2align 4
  15769. _AES_GCM_decrypt_final_avx2:
  15770. #endif /* __APPLE__ */
  15771. pushq %r12
  15772. movq 16(%rsp), %rax
  15773. movq 24(%rsp), %r10
  15774. subq $16, %rsp
  15775. vmovdqu (%rdi), %xmm4
  15776. vmovdqu (%r9), %xmm5
  15777. vmovdqu (%rax), %xmm6
  15778. vpsrlq $63, %xmm5, %xmm1
  15779. vpsllq $0x01, %xmm5, %xmm0
  15780. vpslldq $8, %xmm1, %xmm1
  15781. vpor %xmm1, %xmm0, %xmm0
  15782. vpshufd $0xff, %xmm5, %xmm5
  15783. vpsrad $31, %xmm5, %xmm5
  15784. vpand L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
  15785. vpxor %xmm0, %xmm5, %xmm5
  15786. # calc_tag
  15787. shlq $3, %rcx
  15788. shlq $3, %r8
  15789. vmovq %rcx, %xmm0
  15790. vmovq %r8, %xmm1
  15791. vpunpcklqdq %xmm1, %xmm0, %xmm0
  15792. vpxor %xmm4, %xmm0, %xmm0
  15793. # ghash_gfmul_red
  15794. vpclmulqdq $16, %xmm5, %xmm0, %xmm7
  15795. vpclmulqdq $0x01, %xmm5, %xmm0, %xmm3
  15796. vpclmulqdq $0x00, %xmm5, %xmm0, %xmm2
  15797. vpxor %xmm3, %xmm7, %xmm7
  15798. vpslldq $8, %xmm7, %xmm3
  15799. vpsrldq $8, %xmm7, %xmm7
  15800. vpxor %xmm2, %xmm3, %xmm3
  15801. vpclmulqdq $0x11, %xmm5, %xmm0, %xmm0
  15802. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  15803. vpshufd $0x4e, %xmm3, %xmm3
  15804. vpxor %xmm2, %xmm3, %xmm3
  15805. vpclmulqdq $16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
  15806. vpshufd $0x4e, %xmm3, %xmm3
  15807. vpxor %xmm7, %xmm0, %xmm0
  15808. vpxor %xmm3, %xmm0, %xmm0
  15809. vpxor %xmm2, %xmm0, %xmm0
  15810. vpshufb L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
  15811. vpxor %xmm6, %xmm0, %xmm0
  15812. # cmp_tag
  15813. cmpl $16, %edx
  15814. je L_AES_GCM_decrypt_final_avx2_cmp_tag_16
  15815. xorq %r11, %r11
  15816. xorq %r9, %r9
  15817. vmovdqu %xmm0, (%rsp)
  15818. L_AES_GCM_decrypt_final_avx2_cmp_tag_loop:
  15819. movzbl (%rsp,%r11,1), %r12d
  15820. xorb (%rsi,%r11,1), %r12b
  15821. orb %r12b, %r9b
  15822. incl %r11d
  15823. cmpl %edx, %r11d
  15824. jne L_AES_GCM_decrypt_final_avx2_cmp_tag_loop
  15825. cmpb $0x00, %r9b
  15826. sete %r9b
  15827. jmp L_AES_GCM_decrypt_final_avx2_cmp_tag_done
  15828. L_AES_GCM_decrypt_final_avx2_cmp_tag_16:
  15829. vmovdqu (%rsi), %xmm1
  15830. vpcmpeqb %xmm1, %xmm0, %xmm0
  15831. vpmovmskb %xmm0, %r11
  15832. # %%edx == 0xFFFF then return 1 else => return 0
  15833. xorl %r9d, %r9d
  15834. cmpl $0xffff, %r11d
  15835. sete %r9b
  15836. L_AES_GCM_decrypt_final_avx2_cmp_tag_done:
  15837. movl %r9d, (%r10)
  15838. vzeroupper
  15839. addq $16, %rsp
  15840. popq %r12
  15841. repz retq
  15842. #ifndef __APPLE__
  15843. .size AES_GCM_decrypt_final_avx2,.-AES_GCM_decrypt_final_avx2
  15844. #endif /* __APPLE__ */
  15845. #endif /* WOLFSSL_AESGCM_STREAM */
  15846. #endif /* HAVE_INTEL_AVX2 */
  15847. #endif /* WOLFSSL_X86_64_BUILD */
  15848. #if defined(__linux__) && defined(__ELF__)
  15849. .section .note.GNU-stack,"",%progbits
  15850. #endif