aesni-x86_64.s 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474
  1. .text
  2. .globl aesni_encrypt
  3. .type aesni_encrypt,@function
  4. .align 16
  5. aesni_encrypt:
  6. .cfi_startproc
  7. movups (%rdi),%xmm2
  8. movl 240(%rdx),%eax
  9. movups (%rdx),%xmm0
  10. movups 16(%rdx),%xmm1
  11. leaq 32(%rdx),%rdx
  12. xorps %xmm0,%xmm2
  13. .Loop_enc1_1:
  14. .byte 102,15,56,220,209
  15. decl %eax
  16. movups (%rdx),%xmm1
  17. leaq 16(%rdx),%rdx
  18. jnz .Loop_enc1_1
  19. .byte 102,15,56,221,209
  20. pxor %xmm0,%xmm0
  21. pxor %xmm1,%xmm1
  22. movups %xmm2,(%rsi)
  23. pxor %xmm2,%xmm2
  24. .byte 0xf3,0xc3
  25. .cfi_endproc
  26. .size aesni_encrypt,.-aesni_encrypt
  27. .globl aesni_decrypt
  28. .type aesni_decrypt,@function
  29. .align 16
  30. aesni_decrypt:
  31. .cfi_startproc
  32. movups (%rdi),%xmm2
  33. movl 240(%rdx),%eax
  34. movups (%rdx),%xmm0
  35. movups 16(%rdx),%xmm1
  36. leaq 32(%rdx),%rdx
  37. xorps %xmm0,%xmm2
  38. .Loop_dec1_2:
  39. .byte 102,15,56,222,209
  40. decl %eax
  41. movups (%rdx),%xmm1
  42. leaq 16(%rdx),%rdx
  43. jnz .Loop_dec1_2
  44. .byte 102,15,56,223,209
  45. pxor %xmm0,%xmm0
  46. pxor %xmm1,%xmm1
  47. movups %xmm2,(%rsi)
  48. pxor %xmm2,%xmm2
  49. .byte 0xf3,0xc3
  50. .cfi_endproc
  51. .size aesni_decrypt, .-aesni_decrypt
  52. .type _aesni_encrypt2,@function
  53. .align 16
  54. _aesni_encrypt2:
  55. .cfi_startproc
  56. movups (%rcx),%xmm0
  57. shll $4,%eax
  58. movups 16(%rcx),%xmm1
  59. xorps %xmm0,%xmm2
  60. xorps %xmm0,%xmm3
  61. movups 32(%rcx),%xmm0
  62. leaq 32(%rcx,%rax,1),%rcx
  63. negq %rax
  64. addq $16,%rax
  65. .Lenc_loop2:
  66. .byte 102,15,56,220,209
  67. .byte 102,15,56,220,217
  68. movups (%rcx,%rax,1),%xmm1
  69. addq $32,%rax
  70. .byte 102,15,56,220,208
  71. .byte 102,15,56,220,216
  72. movups -16(%rcx,%rax,1),%xmm0
  73. jnz .Lenc_loop2
  74. .byte 102,15,56,220,209
  75. .byte 102,15,56,220,217
  76. .byte 102,15,56,221,208
  77. .byte 102,15,56,221,216
  78. .byte 0xf3,0xc3
  79. .cfi_endproc
  80. .size _aesni_encrypt2,.-_aesni_encrypt2
  81. .type _aesni_decrypt2,@function
  82. .align 16
  83. _aesni_decrypt2:
  84. .cfi_startproc
  85. movups (%rcx),%xmm0
  86. shll $4,%eax
  87. movups 16(%rcx),%xmm1
  88. xorps %xmm0,%xmm2
  89. xorps %xmm0,%xmm3
  90. movups 32(%rcx),%xmm0
  91. leaq 32(%rcx,%rax,1),%rcx
  92. negq %rax
  93. addq $16,%rax
  94. .Ldec_loop2:
  95. .byte 102,15,56,222,209
  96. .byte 102,15,56,222,217
  97. movups (%rcx,%rax,1),%xmm1
  98. addq $32,%rax
  99. .byte 102,15,56,222,208
  100. .byte 102,15,56,222,216
  101. movups -16(%rcx,%rax,1),%xmm0
  102. jnz .Ldec_loop2
  103. .byte 102,15,56,222,209
  104. .byte 102,15,56,222,217
  105. .byte 102,15,56,223,208
  106. .byte 102,15,56,223,216
  107. .byte 0xf3,0xc3
  108. .cfi_endproc
  109. .size _aesni_decrypt2,.-_aesni_decrypt2
  110. .type _aesni_encrypt3,@function
  111. .align 16
  112. _aesni_encrypt3:
  113. .cfi_startproc
  114. movups (%rcx),%xmm0
  115. shll $4,%eax
  116. movups 16(%rcx),%xmm1
  117. xorps %xmm0,%xmm2
  118. xorps %xmm0,%xmm3
  119. xorps %xmm0,%xmm4
  120. movups 32(%rcx),%xmm0
  121. leaq 32(%rcx,%rax,1),%rcx
  122. negq %rax
  123. addq $16,%rax
  124. .Lenc_loop3:
  125. .byte 102,15,56,220,209
  126. .byte 102,15,56,220,217
  127. .byte 102,15,56,220,225
  128. movups (%rcx,%rax,1),%xmm1
  129. addq $32,%rax
  130. .byte 102,15,56,220,208
  131. .byte 102,15,56,220,216
  132. .byte 102,15,56,220,224
  133. movups -16(%rcx,%rax,1),%xmm0
  134. jnz .Lenc_loop3
  135. .byte 102,15,56,220,209
  136. .byte 102,15,56,220,217
  137. .byte 102,15,56,220,225
  138. .byte 102,15,56,221,208
  139. .byte 102,15,56,221,216
  140. .byte 102,15,56,221,224
  141. .byte 0xf3,0xc3
  142. .cfi_endproc
  143. .size _aesni_encrypt3,.-_aesni_encrypt3
  144. .type _aesni_decrypt3,@function
  145. .align 16
  146. _aesni_decrypt3:
  147. .cfi_startproc
  148. movups (%rcx),%xmm0
  149. shll $4,%eax
  150. movups 16(%rcx),%xmm1
  151. xorps %xmm0,%xmm2
  152. xorps %xmm0,%xmm3
  153. xorps %xmm0,%xmm4
  154. movups 32(%rcx),%xmm0
  155. leaq 32(%rcx,%rax,1),%rcx
  156. negq %rax
  157. addq $16,%rax
  158. .Ldec_loop3:
  159. .byte 102,15,56,222,209
  160. .byte 102,15,56,222,217
  161. .byte 102,15,56,222,225
  162. movups (%rcx,%rax,1),%xmm1
  163. addq $32,%rax
  164. .byte 102,15,56,222,208
  165. .byte 102,15,56,222,216
  166. .byte 102,15,56,222,224
  167. movups -16(%rcx,%rax,1),%xmm0
  168. jnz .Ldec_loop3
  169. .byte 102,15,56,222,209
  170. .byte 102,15,56,222,217
  171. .byte 102,15,56,222,225
  172. .byte 102,15,56,223,208
  173. .byte 102,15,56,223,216
  174. .byte 102,15,56,223,224
  175. .byte 0xf3,0xc3
  176. .cfi_endproc
  177. .size _aesni_decrypt3,.-_aesni_decrypt3
  178. .type _aesni_encrypt4,@function
  179. .align 16
  180. _aesni_encrypt4:
  181. .cfi_startproc
  182. movups (%rcx),%xmm0
  183. shll $4,%eax
  184. movups 16(%rcx),%xmm1
  185. xorps %xmm0,%xmm2
  186. xorps %xmm0,%xmm3
  187. xorps %xmm0,%xmm4
  188. xorps %xmm0,%xmm5
  189. movups 32(%rcx),%xmm0
  190. leaq 32(%rcx,%rax,1),%rcx
  191. negq %rax
  192. .byte 0x0f,0x1f,0x00
  193. addq $16,%rax
  194. .Lenc_loop4:
  195. .byte 102,15,56,220,209
  196. .byte 102,15,56,220,217
  197. .byte 102,15,56,220,225
  198. .byte 102,15,56,220,233
  199. movups (%rcx,%rax,1),%xmm1
  200. addq $32,%rax
  201. .byte 102,15,56,220,208
  202. .byte 102,15,56,220,216
  203. .byte 102,15,56,220,224
  204. .byte 102,15,56,220,232
  205. movups -16(%rcx,%rax,1),%xmm0
  206. jnz .Lenc_loop4
  207. .byte 102,15,56,220,209
  208. .byte 102,15,56,220,217
  209. .byte 102,15,56,220,225
  210. .byte 102,15,56,220,233
  211. .byte 102,15,56,221,208
  212. .byte 102,15,56,221,216
  213. .byte 102,15,56,221,224
  214. .byte 102,15,56,221,232
  215. .byte 0xf3,0xc3
  216. .cfi_endproc
  217. .size _aesni_encrypt4,.-_aesni_encrypt4
  218. .type _aesni_decrypt4,@function
  219. .align 16
  220. _aesni_decrypt4:
  221. .cfi_startproc
  222. movups (%rcx),%xmm0
  223. shll $4,%eax
  224. movups 16(%rcx),%xmm1
  225. xorps %xmm0,%xmm2
  226. xorps %xmm0,%xmm3
  227. xorps %xmm0,%xmm4
  228. xorps %xmm0,%xmm5
  229. movups 32(%rcx),%xmm0
  230. leaq 32(%rcx,%rax,1),%rcx
  231. negq %rax
  232. .byte 0x0f,0x1f,0x00
  233. addq $16,%rax
  234. .Ldec_loop4:
  235. .byte 102,15,56,222,209
  236. .byte 102,15,56,222,217
  237. .byte 102,15,56,222,225
  238. .byte 102,15,56,222,233
  239. movups (%rcx,%rax,1),%xmm1
  240. addq $32,%rax
  241. .byte 102,15,56,222,208
  242. .byte 102,15,56,222,216
  243. .byte 102,15,56,222,224
  244. .byte 102,15,56,222,232
  245. movups -16(%rcx,%rax,1),%xmm0
  246. jnz .Ldec_loop4
  247. .byte 102,15,56,222,209
  248. .byte 102,15,56,222,217
  249. .byte 102,15,56,222,225
  250. .byte 102,15,56,222,233
  251. .byte 102,15,56,223,208
  252. .byte 102,15,56,223,216
  253. .byte 102,15,56,223,224
  254. .byte 102,15,56,223,232
  255. .byte 0xf3,0xc3
  256. .cfi_endproc
  257. .size _aesni_decrypt4,.-_aesni_decrypt4
  258. .type _aesni_encrypt6,@function
  259. .align 16
  260. _aesni_encrypt6:
  261. .cfi_startproc
  262. movups (%rcx),%xmm0
  263. shll $4,%eax
  264. movups 16(%rcx),%xmm1
  265. xorps %xmm0,%xmm2
  266. pxor %xmm0,%xmm3
  267. pxor %xmm0,%xmm4
  268. .byte 102,15,56,220,209
  269. leaq 32(%rcx,%rax,1),%rcx
  270. negq %rax
  271. .byte 102,15,56,220,217
  272. pxor %xmm0,%xmm5
  273. pxor %xmm0,%xmm6
  274. .byte 102,15,56,220,225
  275. pxor %xmm0,%xmm7
  276. movups (%rcx,%rax,1),%xmm0
  277. addq $16,%rax
  278. jmp .Lenc_loop6_enter
  279. .align 16
  280. .Lenc_loop6:
  281. .byte 102,15,56,220,209
  282. .byte 102,15,56,220,217
  283. .byte 102,15,56,220,225
  284. .Lenc_loop6_enter:
  285. .byte 102,15,56,220,233
  286. .byte 102,15,56,220,241
  287. .byte 102,15,56,220,249
  288. movups (%rcx,%rax,1),%xmm1
  289. addq $32,%rax
  290. .byte 102,15,56,220,208
  291. .byte 102,15,56,220,216
  292. .byte 102,15,56,220,224
  293. .byte 102,15,56,220,232
  294. .byte 102,15,56,220,240
  295. .byte 102,15,56,220,248
  296. movups -16(%rcx,%rax,1),%xmm0
  297. jnz .Lenc_loop6
  298. .byte 102,15,56,220,209
  299. .byte 102,15,56,220,217
  300. .byte 102,15,56,220,225
  301. .byte 102,15,56,220,233
  302. .byte 102,15,56,220,241
  303. .byte 102,15,56,220,249
  304. .byte 102,15,56,221,208
  305. .byte 102,15,56,221,216
  306. .byte 102,15,56,221,224
  307. .byte 102,15,56,221,232
  308. .byte 102,15,56,221,240
  309. .byte 102,15,56,221,248
  310. .byte 0xf3,0xc3
  311. .cfi_endproc
  312. .size _aesni_encrypt6,.-_aesni_encrypt6
  313. .type _aesni_decrypt6,@function
  314. .align 16
  315. _aesni_decrypt6:
  316. .cfi_startproc
  317. movups (%rcx),%xmm0
  318. shll $4,%eax
  319. movups 16(%rcx),%xmm1
  320. xorps %xmm0,%xmm2
  321. pxor %xmm0,%xmm3
  322. pxor %xmm0,%xmm4
  323. .byte 102,15,56,222,209
  324. leaq 32(%rcx,%rax,1),%rcx
  325. negq %rax
  326. .byte 102,15,56,222,217
  327. pxor %xmm0,%xmm5
  328. pxor %xmm0,%xmm6
  329. .byte 102,15,56,222,225
  330. pxor %xmm0,%xmm7
  331. movups (%rcx,%rax,1),%xmm0
  332. addq $16,%rax
  333. jmp .Ldec_loop6_enter
  334. .align 16
  335. .Ldec_loop6:
  336. .byte 102,15,56,222,209
  337. .byte 102,15,56,222,217
  338. .byte 102,15,56,222,225
  339. .Ldec_loop6_enter:
  340. .byte 102,15,56,222,233
  341. .byte 102,15,56,222,241
  342. .byte 102,15,56,222,249
  343. movups (%rcx,%rax,1),%xmm1
  344. addq $32,%rax
  345. .byte 102,15,56,222,208
  346. .byte 102,15,56,222,216
  347. .byte 102,15,56,222,224
  348. .byte 102,15,56,222,232
  349. .byte 102,15,56,222,240
  350. .byte 102,15,56,222,248
  351. movups -16(%rcx,%rax,1),%xmm0
  352. jnz .Ldec_loop6
  353. .byte 102,15,56,222,209
  354. .byte 102,15,56,222,217
  355. .byte 102,15,56,222,225
  356. .byte 102,15,56,222,233
  357. .byte 102,15,56,222,241
  358. .byte 102,15,56,222,249
  359. .byte 102,15,56,223,208
  360. .byte 102,15,56,223,216
  361. .byte 102,15,56,223,224
  362. .byte 102,15,56,223,232
  363. .byte 102,15,56,223,240
  364. .byte 102,15,56,223,248
  365. .byte 0xf3,0xc3
  366. .cfi_endproc
  367. .size _aesni_decrypt6,.-_aesni_decrypt6
  368. .type _aesni_encrypt8,@function
  369. .align 16
  370. _aesni_encrypt8:
  371. .cfi_startproc
  372. movups (%rcx),%xmm0
  373. shll $4,%eax
  374. movups 16(%rcx),%xmm1
  375. xorps %xmm0,%xmm2
  376. xorps %xmm0,%xmm3
  377. pxor %xmm0,%xmm4
  378. pxor %xmm0,%xmm5
  379. pxor %xmm0,%xmm6
  380. leaq 32(%rcx,%rax,1),%rcx
  381. negq %rax
  382. .byte 102,15,56,220,209
  383. pxor %xmm0,%xmm7
  384. pxor %xmm0,%xmm8
  385. .byte 102,15,56,220,217
  386. pxor %xmm0,%xmm9
  387. movups (%rcx,%rax,1),%xmm0
  388. addq $16,%rax
  389. jmp .Lenc_loop8_inner
  390. .align 16
  391. .Lenc_loop8:
  392. .byte 102,15,56,220,209
  393. .byte 102,15,56,220,217
  394. .Lenc_loop8_inner:
  395. .byte 102,15,56,220,225
  396. .byte 102,15,56,220,233
  397. .byte 102,15,56,220,241
  398. .byte 102,15,56,220,249
  399. .byte 102,68,15,56,220,193
  400. .byte 102,68,15,56,220,201
  401. .Lenc_loop8_enter:
  402. movups (%rcx,%rax,1),%xmm1
  403. addq $32,%rax
  404. .byte 102,15,56,220,208
  405. .byte 102,15,56,220,216
  406. .byte 102,15,56,220,224
  407. .byte 102,15,56,220,232
  408. .byte 102,15,56,220,240
  409. .byte 102,15,56,220,248
  410. .byte 102,68,15,56,220,192
  411. .byte 102,68,15,56,220,200
  412. movups -16(%rcx,%rax,1),%xmm0
  413. jnz .Lenc_loop8
  414. .byte 102,15,56,220,209
  415. .byte 102,15,56,220,217
  416. .byte 102,15,56,220,225
  417. .byte 102,15,56,220,233
  418. .byte 102,15,56,220,241
  419. .byte 102,15,56,220,249
  420. .byte 102,68,15,56,220,193
  421. .byte 102,68,15,56,220,201
  422. .byte 102,15,56,221,208
  423. .byte 102,15,56,221,216
  424. .byte 102,15,56,221,224
  425. .byte 102,15,56,221,232
  426. .byte 102,15,56,221,240
  427. .byte 102,15,56,221,248
  428. .byte 102,68,15,56,221,192
  429. .byte 102,68,15,56,221,200
  430. .byte 0xf3,0xc3
  431. .cfi_endproc
  432. .size _aesni_encrypt8,.-_aesni_encrypt8
  433. .type _aesni_decrypt8,@function
  434. .align 16
  435. _aesni_decrypt8:
  436. .cfi_startproc
  437. movups (%rcx),%xmm0
  438. shll $4,%eax
  439. movups 16(%rcx),%xmm1
  440. xorps %xmm0,%xmm2
  441. xorps %xmm0,%xmm3
  442. pxor %xmm0,%xmm4
  443. pxor %xmm0,%xmm5
  444. pxor %xmm0,%xmm6
  445. leaq 32(%rcx,%rax,1),%rcx
  446. negq %rax
  447. .byte 102,15,56,222,209
  448. pxor %xmm0,%xmm7
  449. pxor %xmm0,%xmm8
  450. .byte 102,15,56,222,217
  451. pxor %xmm0,%xmm9
  452. movups (%rcx,%rax,1),%xmm0
  453. addq $16,%rax
  454. jmp .Ldec_loop8_inner
  455. .align 16
  456. .Ldec_loop8:
  457. .byte 102,15,56,222,209
  458. .byte 102,15,56,222,217
  459. .Ldec_loop8_inner:
  460. .byte 102,15,56,222,225
  461. .byte 102,15,56,222,233
  462. .byte 102,15,56,222,241
  463. .byte 102,15,56,222,249
  464. .byte 102,68,15,56,222,193
  465. .byte 102,68,15,56,222,201
  466. .Ldec_loop8_enter:
  467. movups (%rcx,%rax,1),%xmm1
  468. addq $32,%rax
  469. .byte 102,15,56,222,208
  470. .byte 102,15,56,222,216
  471. .byte 102,15,56,222,224
  472. .byte 102,15,56,222,232
  473. .byte 102,15,56,222,240
  474. .byte 102,15,56,222,248
  475. .byte 102,68,15,56,222,192
  476. .byte 102,68,15,56,222,200
  477. movups -16(%rcx,%rax,1),%xmm0
  478. jnz .Ldec_loop8
  479. .byte 102,15,56,222,209
  480. .byte 102,15,56,222,217
  481. .byte 102,15,56,222,225
  482. .byte 102,15,56,222,233
  483. .byte 102,15,56,222,241
  484. .byte 102,15,56,222,249
  485. .byte 102,68,15,56,222,193
  486. .byte 102,68,15,56,222,201
  487. .byte 102,15,56,223,208
  488. .byte 102,15,56,223,216
  489. .byte 102,15,56,223,224
  490. .byte 102,15,56,223,232
  491. .byte 102,15,56,223,240
  492. .byte 102,15,56,223,248
  493. .byte 102,68,15,56,223,192
  494. .byte 102,68,15,56,223,200
  495. .byte 0xf3,0xc3
  496. .cfi_endproc
  497. .size _aesni_decrypt8,.-_aesni_decrypt8
  498. .globl aesni_ecb_encrypt
  499. .type aesni_ecb_encrypt,@function
  500. .align 16
  501. aesni_ecb_encrypt:
  502. .cfi_startproc
  503. andq $-16,%rdx
  504. jz .Lecb_ret
  505. movl 240(%rcx),%eax
  506. movups (%rcx),%xmm0
  507. movq %rcx,%r11
  508. movl %eax,%r10d
  509. testl %r8d,%r8d
  510. jz .Lecb_decrypt
  511. cmpq $0x80,%rdx
  512. jb .Lecb_enc_tail
  513. movdqu (%rdi),%xmm2
  514. movdqu 16(%rdi),%xmm3
  515. movdqu 32(%rdi),%xmm4
  516. movdqu 48(%rdi),%xmm5
  517. movdqu 64(%rdi),%xmm6
  518. movdqu 80(%rdi),%xmm7
  519. movdqu 96(%rdi),%xmm8
  520. movdqu 112(%rdi),%xmm9
  521. leaq 128(%rdi),%rdi
  522. subq $0x80,%rdx
  523. jmp .Lecb_enc_loop8_enter
  524. .align 16
  525. .Lecb_enc_loop8:
  526. movups %xmm2,(%rsi)
  527. movq %r11,%rcx
  528. movdqu (%rdi),%xmm2
  529. movl %r10d,%eax
  530. movups %xmm3,16(%rsi)
  531. movdqu 16(%rdi),%xmm3
  532. movups %xmm4,32(%rsi)
  533. movdqu 32(%rdi),%xmm4
  534. movups %xmm5,48(%rsi)
  535. movdqu 48(%rdi),%xmm5
  536. movups %xmm6,64(%rsi)
  537. movdqu 64(%rdi),%xmm6
  538. movups %xmm7,80(%rsi)
  539. movdqu 80(%rdi),%xmm7
  540. movups %xmm8,96(%rsi)
  541. movdqu 96(%rdi),%xmm8
  542. movups %xmm9,112(%rsi)
  543. leaq 128(%rsi),%rsi
  544. movdqu 112(%rdi),%xmm9
  545. leaq 128(%rdi),%rdi
  546. .Lecb_enc_loop8_enter:
  547. call _aesni_encrypt8
  548. subq $0x80,%rdx
  549. jnc .Lecb_enc_loop8
  550. movups %xmm2,(%rsi)
  551. movq %r11,%rcx
  552. movups %xmm3,16(%rsi)
  553. movl %r10d,%eax
  554. movups %xmm4,32(%rsi)
  555. movups %xmm5,48(%rsi)
  556. movups %xmm6,64(%rsi)
  557. movups %xmm7,80(%rsi)
  558. movups %xmm8,96(%rsi)
  559. movups %xmm9,112(%rsi)
  560. leaq 128(%rsi),%rsi
  561. addq $0x80,%rdx
  562. jz .Lecb_ret
  563. .Lecb_enc_tail:
  564. movups (%rdi),%xmm2
  565. cmpq $0x20,%rdx
  566. jb .Lecb_enc_one
  567. movups 16(%rdi),%xmm3
  568. je .Lecb_enc_two
  569. movups 32(%rdi),%xmm4
  570. cmpq $0x40,%rdx
  571. jb .Lecb_enc_three
  572. movups 48(%rdi),%xmm5
  573. je .Lecb_enc_four
  574. movups 64(%rdi),%xmm6
  575. cmpq $0x60,%rdx
  576. jb .Lecb_enc_five
  577. movups 80(%rdi),%xmm7
  578. je .Lecb_enc_six
  579. movdqu 96(%rdi),%xmm8
  580. xorps %xmm9,%xmm9
  581. call _aesni_encrypt8
  582. movups %xmm2,(%rsi)
  583. movups %xmm3,16(%rsi)
  584. movups %xmm4,32(%rsi)
  585. movups %xmm5,48(%rsi)
  586. movups %xmm6,64(%rsi)
  587. movups %xmm7,80(%rsi)
  588. movups %xmm8,96(%rsi)
  589. jmp .Lecb_ret
  590. .align 16
  591. .Lecb_enc_one:
  592. movups (%rcx),%xmm0
  593. movups 16(%rcx),%xmm1
  594. leaq 32(%rcx),%rcx
  595. xorps %xmm0,%xmm2
  596. .Loop_enc1_3:
  597. .byte 102,15,56,220,209
  598. decl %eax
  599. movups (%rcx),%xmm1
  600. leaq 16(%rcx),%rcx
  601. jnz .Loop_enc1_3
  602. .byte 102,15,56,221,209
  603. movups %xmm2,(%rsi)
  604. jmp .Lecb_ret
  605. .align 16
  606. .Lecb_enc_two:
  607. call _aesni_encrypt2
  608. movups %xmm2,(%rsi)
  609. movups %xmm3,16(%rsi)
  610. jmp .Lecb_ret
  611. .align 16
  612. .Lecb_enc_three:
  613. call _aesni_encrypt3
  614. movups %xmm2,(%rsi)
  615. movups %xmm3,16(%rsi)
  616. movups %xmm4,32(%rsi)
  617. jmp .Lecb_ret
  618. .align 16
  619. .Lecb_enc_four:
  620. call _aesni_encrypt4
  621. movups %xmm2,(%rsi)
  622. movups %xmm3,16(%rsi)
  623. movups %xmm4,32(%rsi)
  624. movups %xmm5,48(%rsi)
  625. jmp .Lecb_ret
  626. .align 16
  627. .Lecb_enc_five:
  628. xorps %xmm7,%xmm7
  629. call _aesni_encrypt6
  630. movups %xmm2,(%rsi)
  631. movups %xmm3,16(%rsi)
  632. movups %xmm4,32(%rsi)
  633. movups %xmm5,48(%rsi)
  634. movups %xmm6,64(%rsi)
  635. jmp .Lecb_ret
  636. .align 16
  637. .Lecb_enc_six:
  638. call _aesni_encrypt6
  639. movups %xmm2,(%rsi)
  640. movups %xmm3,16(%rsi)
  641. movups %xmm4,32(%rsi)
  642. movups %xmm5,48(%rsi)
  643. movups %xmm6,64(%rsi)
  644. movups %xmm7,80(%rsi)
  645. jmp .Lecb_ret
  646. .align 16
  647. .Lecb_decrypt:
  648. cmpq $0x80,%rdx
  649. jb .Lecb_dec_tail
  650. movdqu (%rdi),%xmm2
  651. movdqu 16(%rdi),%xmm3
  652. movdqu 32(%rdi),%xmm4
  653. movdqu 48(%rdi),%xmm5
  654. movdqu 64(%rdi),%xmm6
  655. movdqu 80(%rdi),%xmm7
  656. movdqu 96(%rdi),%xmm8
  657. movdqu 112(%rdi),%xmm9
  658. leaq 128(%rdi),%rdi
  659. subq $0x80,%rdx
  660. jmp .Lecb_dec_loop8_enter
  661. .align 16
  662. .Lecb_dec_loop8:
  663. movups %xmm2,(%rsi)
  664. movq %r11,%rcx
  665. movdqu (%rdi),%xmm2
  666. movl %r10d,%eax
  667. movups %xmm3,16(%rsi)
  668. movdqu 16(%rdi),%xmm3
  669. movups %xmm4,32(%rsi)
  670. movdqu 32(%rdi),%xmm4
  671. movups %xmm5,48(%rsi)
  672. movdqu 48(%rdi),%xmm5
  673. movups %xmm6,64(%rsi)
  674. movdqu 64(%rdi),%xmm6
  675. movups %xmm7,80(%rsi)
  676. movdqu 80(%rdi),%xmm7
  677. movups %xmm8,96(%rsi)
  678. movdqu 96(%rdi),%xmm8
  679. movups %xmm9,112(%rsi)
  680. leaq 128(%rsi),%rsi
  681. movdqu 112(%rdi),%xmm9
  682. leaq 128(%rdi),%rdi
  683. .Lecb_dec_loop8_enter:
  684. call _aesni_decrypt8
  685. movups (%r11),%xmm0
  686. subq $0x80,%rdx
  687. jnc .Lecb_dec_loop8
  688. movups %xmm2,(%rsi)
  689. pxor %xmm2,%xmm2
  690. movq %r11,%rcx
  691. movups %xmm3,16(%rsi)
  692. pxor %xmm3,%xmm3
  693. movl %r10d,%eax
  694. movups %xmm4,32(%rsi)
  695. pxor %xmm4,%xmm4
  696. movups %xmm5,48(%rsi)
  697. pxor %xmm5,%xmm5
  698. movups %xmm6,64(%rsi)
  699. pxor %xmm6,%xmm6
  700. movups %xmm7,80(%rsi)
  701. pxor %xmm7,%xmm7
  702. movups %xmm8,96(%rsi)
  703. pxor %xmm8,%xmm8
  704. movups %xmm9,112(%rsi)
  705. pxor %xmm9,%xmm9
  706. leaq 128(%rsi),%rsi
  707. addq $0x80,%rdx
  708. jz .Lecb_ret
  709. .Lecb_dec_tail:
  710. movups (%rdi),%xmm2
  711. cmpq $0x20,%rdx
  712. jb .Lecb_dec_one
  713. movups 16(%rdi),%xmm3
  714. je .Lecb_dec_two
  715. movups 32(%rdi),%xmm4
  716. cmpq $0x40,%rdx
  717. jb .Lecb_dec_three
  718. movups 48(%rdi),%xmm5
  719. je .Lecb_dec_four
  720. movups 64(%rdi),%xmm6
  721. cmpq $0x60,%rdx
  722. jb .Lecb_dec_five
  723. movups 80(%rdi),%xmm7
  724. je .Lecb_dec_six
  725. movups 96(%rdi),%xmm8
  726. movups (%rcx),%xmm0
  727. xorps %xmm9,%xmm9
  728. call _aesni_decrypt8
  729. movups %xmm2,(%rsi)
  730. pxor %xmm2,%xmm2
  731. movups %xmm3,16(%rsi)
  732. pxor %xmm3,%xmm3
  733. movups %xmm4,32(%rsi)
  734. pxor %xmm4,%xmm4
  735. movups %xmm5,48(%rsi)
  736. pxor %xmm5,%xmm5
  737. movups %xmm6,64(%rsi)
  738. pxor %xmm6,%xmm6
  739. movups %xmm7,80(%rsi)
  740. pxor %xmm7,%xmm7
  741. movups %xmm8,96(%rsi)
  742. pxor %xmm8,%xmm8
  743. pxor %xmm9,%xmm9
  744. jmp .Lecb_ret
  745. .align 16
  746. .Lecb_dec_one:
  747. movups (%rcx),%xmm0
  748. movups 16(%rcx),%xmm1
  749. leaq 32(%rcx),%rcx
  750. xorps %xmm0,%xmm2
  751. .Loop_dec1_4:
  752. .byte 102,15,56,222,209
  753. decl %eax
  754. movups (%rcx),%xmm1
  755. leaq 16(%rcx),%rcx
  756. jnz .Loop_dec1_4
  757. .byte 102,15,56,223,209
  758. movups %xmm2,(%rsi)
  759. pxor %xmm2,%xmm2
  760. jmp .Lecb_ret
  761. .align 16
  762. .Lecb_dec_two:
  763. call _aesni_decrypt2
  764. movups %xmm2,(%rsi)
  765. pxor %xmm2,%xmm2
  766. movups %xmm3,16(%rsi)
  767. pxor %xmm3,%xmm3
  768. jmp .Lecb_ret
  769. .align 16
  770. .Lecb_dec_three:
  771. call _aesni_decrypt3
  772. movups %xmm2,(%rsi)
  773. pxor %xmm2,%xmm2
  774. movups %xmm3,16(%rsi)
  775. pxor %xmm3,%xmm3
  776. movups %xmm4,32(%rsi)
  777. pxor %xmm4,%xmm4
  778. jmp .Lecb_ret
  779. .align 16
  780. .Lecb_dec_four:
  781. call _aesni_decrypt4
  782. movups %xmm2,(%rsi)
  783. pxor %xmm2,%xmm2
  784. movups %xmm3,16(%rsi)
  785. pxor %xmm3,%xmm3
  786. movups %xmm4,32(%rsi)
  787. pxor %xmm4,%xmm4
  788. movups %xmm5,48(%rsi)
  789. pxor %xmm5,%xmm5
  790. jmp .Lecb_ret
  791. .align 16
  792. .Lecb_dec_five:
  793. xorps %xmm7,%xmm7
  794. call _aesni_decrypt6
  795. movups %xmm2,(%rsi)
  796. pxor %xmm2,%xmm2
  797. movups %xmm3,16(%rsi)
  798. pxor %xmm3,%xmm3
  799. movups %xmm4,32(%rsi)
  800. pxor %xmm4,%xmm4
  801. movups %xmm5,48(%rsi)
  802. pxor %xmm5,%xmm5
  803. movups %xmm6,64(%rsi)
  804. pxor %xmm6,%xmm6
  805. pxor %xmm7,%xmm7
  806. jmp .Lecb_ret
  807. .align 16
  808. .Lecb_dec_six:
  809. call _aesni_decrypt6
  810. movups %xmm2,(%rsi)
  811. pxor %xmm2,%xmm2
  812. movups %xmm3,16(%rsi)
  813. pxor %xmm3,%xmm3
  814. movups %xmm4,32(%rsi)
  815. pxor %xmm4,%xmm4
  816. movups %xmm5,48(%rsi)
  817. pxor %xmm5,%xmm5
  818. movups %xmm6,64(%rsi)
  819. pxor %xmm6,%xmm6
  820. movups %xmm7,80(%rsi)
  821. pxor %xmm7,%xmm7
  822. .Lecb_ret:
  823. xorps %xmm0,%xmm0
  824. pxor %xmm1,%xmm1
  825. .byte 0xf3,0xc3
  826. .cfi_endproc
  827. .size aesni_ecb_encrypt,.-aesni_ecb_encrypt
  828. .globl aesni_ccm64_encrypt_blocks
  829. .type aesni_ccm64_encrypt_blocks,@function
  830. .align 16
  831. aesni_ccm64_encrypt_blocks:
  832. .cfi_startproc
  833. movl 240(%rcx),%eax
  834. movdqu (%r8),%xmm6
  835. movdqa .Lincrement64(%rip),%xmm9
  836. movdqa .Lbswap_mask(%rip),%xmm7
  837. shll $4,%eax
  838. movl $16,%r10d
  839. leaq 0(%rcx),%r11
  840. movdqu (%r9),%xmm3
  841. movdqa %xmm6,%xmm2
  842. leaq 32(%rcx,%rax,1),%rcx
  843. .byte 102,15,56,0,247
  844. subq %rax,%r10
  845. jmp .Lccm64_enc_outer
  846. .align 16
  847. .Lccm64_enc_outer:
  848. movups (%r11),%xmm0
  849. movq %r10,%rax
  850. movups (%rdi),%xmm8
  851. xorps %xmm0,%xmm2
  852. movups 16(%r11),%xmm1
  853. xorps %xmm8,%xmm0
  854. xorps %xmm0,%xmm3
  855. movups 32(%r11),%xmm0
  856. .Lccm64_enc2_loop:
  857. .byte 102,15,56,220,209
  858. .byte 102,15,56,220,217
  859. movups (%rcx,%rax,1),%xmm1
  860. addq $32,%rax
  861. .byte 102,15,56,220,208
  862. .byte 102,15,56,220,216
  863. movups -16(%rcx,%rax,1),%xmm0
  864. jnz .Lccm64_enc2_loop
  865. .byte 102,15,56,220,209
  866. .byte 102,15,56,220,217
  867. paddq %xmm9,%xmm6
  868. decq %rdx
  869. .byte 102,15,56,221,208
  870. .byte 102,15,56,221,216
  871. leaq 16(%rdi),%rdi
  872. xorps %xmm2,%xmm8
  873. movdqa %xmm6,%xmm2
  874. movups %xmm8,(%rsi)
  875. .byte 102,15,56,0,215
  876. leaq 16(%rsi),%rsi
  877. jnz .Lccm64_enc_outer
  878. pxor %xmm0,%xmm0
  879. pxor %xmm1,%xmm1
  880. pxor %xmm2,%xmm2
  881. movups %xmm3,(%r9)
  882. pxor %xmm3,%xmm3
  883. pxor %xmm8,%xmm8
  884. pxor %xmm6,%xmm6
  885. .byte 0xf3,0xc3
  886. .cfi_endproc
  887. .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks
  888. .globl aesni_ccm64_decrypt_blocks
  889. .type aesni_ccm64_decrypt_blocks,@function
  890. .align 16
  891. aesni_ccm64_decrypt_blocks:
  892. .cfi_startproc
  893. movl 240(%rcx),%eax
  894. movups (%r8),%xmm6
  895. movdqu (%r9),%xmm3
  896. movdqa .Lincrement64(%rip),%xmm9
  897. movdqa .Lbswap_mask(%rip),%xmm7
  898. movaps %xmm6,%xmm2
  899. movl %eax,%r10d
  900. movq %rcx,%r11
  901. .byte 102,15,56,0,247
  902. movups (%rcx),%xmm0
  903. movups 16(%rcx),%xmm1
  904. leaq 32(%rcx),%rcx
  905. xorps %xmm0,%xmm2
  906. .Loop_enc1_5:
  907. .byte 102,15,56,220,209
  908. decl %eax
  909. movups (%rcx),%xmm1
  910. leaq 16(%rcx),%rcx
  911. jnz .Loop_enc1_5
  912. .byte 102,15,56,221,209
  913. shll $4,%r10d
  914. movl $16,%eax
  915. movups (%rdi),%xmm8
  916. paddq %xmm9,%xmm6
  917. leaq 16(%rdi),%rdi
  918. subq %r10,%rax
  919. leaq 32(%r11,%r10,1),%rcx
  920. movq %rax,%r10
  921. jmp .Lccm64_dec_outer
  922. .align 16
  923. .Lccm64_dec_outer:
  924. xorps %xmm2,%xmm8
  925. movdqa %xmm6,%xmm2
  926. movups %xmm8,(%rsi)
  927. leaq 16(%rsi),%rsi
  928. .byte 102,15,56,0,215
  929. subq $1,%rdx
  930. jz .Lccm64_dec_break
  931. movups (%r11),%xmm0
  932. movq %r10,%rax
  933. movups 16(%r11),%xmm1
  934. xorps %xmm0,%xmm8
  935. xorps %xmm0,%xmm2
  936. xorps %xmm8,%xmm3
  937. movups 32(%r11),%xmm0
  938. jmp .Lccm64_dec2_loop
  939. .align 16
  940. .Lccm64_dec2_loop:
  941. .byte 102,15,56,220,209
  942. .byte 102,15,56,220,217
  943. movups (%rcx,%rax,1),%xmm1
  944. addq $32,%rax
  945. .byte 102,15,56,220,208
  946. .byte 102,15,56,220,216
  947. movups -16(%rcx,%rax,1),%xmm0
  948. jnz .Lccm64_dec2_loop
  949. movups (%rdi),%xmm8
  950. paddq %xmm9,%xmm6
  951. .byte 102,15,56,220,209
  952. .byte 102,15,56,220,217
  953. .byte 102,15,56,221,208
  954. .byte 102,15,56,221,216
  955. leaq 16(%rdi),%rdi
  956. jmp .Lccm64_dec_outer
  957. .align 16
  958. .Lccm64_dec_break:
  959. movl 240(%r11),%eax
  960. movups (%r11),%xmm0
  961. movups 16(%r11),%xmm1
  962. xorps %xmm0,%xmm8
  963. leaq 32(%r11),%r11
  964. xorps %xmm8,%xmm3
  965. .Loop_enc1_6:
  966. .byte 102,15,56,220,217
  967. decl %eax
  968. movups (%r11),%xmm1
  969. leaq 16(%r11),%r11
  970. jnz .Loop_enc1_6
  971. .byte 102,15,56,221,217
  972. pxor %xmm0,%xmm0
  973. pxor %xmm1,%xmm1
  974. pxor %xmm2,%xmm2
  975. movups %xmm3,(%r9)
  976. pxor %xmm3,%xmm3
  977. pxor %xmm8,%xmm8
  978. pxor %xmm6,%xmm6
  979. .byte 0xf3,0xc3
  980. .cfi_endproc
  981. .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks
  982. .globl aesni_ctr32_encrypt_blocks
  983. .type aesni_ctr32_encrypt_blocks,@function
  984. .align 16
  985. aesni_ctr32_encrypt_blocks:
  986. .cfi_startproc
  987. cmpq $1,%rdx
  988. jne .Lctr32_bulk
  989. movups (%r8),%xmm2
  990. movups (%rdi),%xmm3
  991. movl 240(%rcx),%edx
  992. movups (%rcx),%xmm0
  993. movups 16(%rcx),%xmm1
  994. leaq 32(%rcx),%rcx
  995. xorps %xmm0,%xmm2
  996. .Loop_enc1_7:
  997. .byte 102,15,56,220,209
  998. decl %edx
  999. movups (%rcx),%xmm1
  1000. leaq 16(%rcx),%rcx
  1001. jnz .Loop_enc1_7
  1002. .byte 102,15,56,221,209
  1003. pxor %xmm0,%xmm0
  1004. pxor %xmm1,%xmm1
  1005. xorps %xmm3,%xmm2
  1006. pxor %xmm3,%xmm3
  1007. movups %xmm2,(%rsi)
  1008. xorps %xmm2,%xmm2
  1009. jmp .Lctr32_epilogue
  1010. .align 16
  1011. .Lctr32_bulk:
  1012. leaq (%rsp),%r11
  1013. .cfi_def_cfa_register %r11
  1014. pushq %rbp
  1015. .cfi_offset %rbp,-16
  1016. subq $128,%rsp
  1017. andq $-16,%rsp
  1018. movdqu (%r8),%xmm2
  1019. movdqu (%rcx),%xmm0
  1020. movl 12(%r8),%r8d
  1021. pxor %xmm0,%xmm2
  1022. movl 12(%rcx),%ebp
  1023. movdqa %xmm2,0(%rsp)
  1024. bswapl %r8d
  1025. movdqa %xmm2,%xmm3
  1026. movdqa %xmm2,%xmm4
  1027. movdqa %xmm2,%xmm5
  1028. movdqa %xmm2,64(%rsp)
  1029. movdqa %xmm2,80(%rsp)
  1030. movdqa %xmm2,96(%rsp)
  1031. movq %rdx,%r10
  1032. movdqa %xmm2,112(%rsp)
  1033. leaq 1(%r8),%rax
  1034. leaq 2(%r8),%rdx
  1035. bswapl %eax
  1036. bswapl %edx
  1037. xorl %ebp,%eax
  1038. xorl %ebp,%edx
  1039. .byte 102,15,58,34,216,3
  1040. leaq 3(%r8),%rax
  1041. movdqa %xmm3,16(%rsp)
  1042. .byte 102,15,58,34,226,3
  1043. bswapl %eax
  1044. movq %r10,%rdx
  1045. leaq 4(%r8),%r10
  1046. movdqa %xmm4,32(%rsp)
  1047. xorl %ebp,%eax
  1048. bswapl %r10d
  1049. .byte 102,15,58,34,232,3
  1050. xorl %ebp,%r10d
  1051. movdqa %xmm5,48(%rsp)
  1052. leaq 5(%r8),%r9
  1053. movl %r10d,64+12(%rsp)
  1054. bswapl %r9d
  1055. leaq 6(%r8),%r10
  1056. movl 240(%rcx),%eax
  1057. xorl %ebp,%r9d
  1058. bswapl %r10d
  1059. movl %r9d,80+12(%rsp)
  1060. xorl %ebp,%r10d
  1061. leaq 7(%r8),%r9
  1062. movl %r10d,96+12(%rsp)
  1063. bswapl %r9d
  1064. movl OPENSSL_ia32cap_P+4(%rip),%r10d
  1065. xorl %ebp,%r9d
  1066. andl $71303168,%r10d
  1067. movl %r9d,112+12(%rsp)
  1068. movups 16(%rcx),%xmm1
  1069. movdqa 64(%rsp),%xmm6
  1070. movdqa 80(%rsp),%xmm7
  1071. cmpq $8,%rdx
  1072. jb .Lctr32_tail
  1073. subq $6,%rdx
  1074. cmpl $4194304,%r10d
  1075. je .Lctr32_6x
  1076. leaq 128(%rcx),%rcx
  1077. subq $2,%rdx
  1078. jmp .Lctr32_loop8
  1079. .align 16
  1080. .Lctr32_6x:
  1081. shll $4,%eax
  1082. movl $48,%r10d
  1083. bswapl %ebp
  1084. leaq 32(%rcx,%rax,1),%rcx
  1085. subq %rax,%r10
  1086. jmp .Lctr32_loop6
  1087. .align 16
  1088. .Lctr32_loop6:
  1089. addl $6,%r8d
  1090. movups -48(%rcx,%r10,1),%xmm0
  1091. .byte 102,15,56,220,209
  1092. movl %r8d,%eax
  1093. xorl %ebp,%eax
  1094. .byte 102,15,56,220,217
  1095. .byte 0x0f,0x38,0xf1,0x44,0x24,12
  1096. leal 1(%r8),%eax
  1097. .byte 102,15,56,220,225
  1098. xorl %ebp,%eax
  1099. .byte 0x0f,0x38,0xf1,0x44,0x24,28
  1100. .byte 102,15,56,220,233
  1101. leal 2(%r8),%eax
  1102. xorl %ebp,%eax
  1103. .byte 102,15,56,220,241
  1104. .byte 0x0f,0x38,0xf1,0x44,0x24,44
  1105. leal 3(%r8),%eax
  1106. .byte 102,15,56,220,249
  1107. movups -32(%rcx,%r10,1),%xmm1
  1108. xorl %ebp,%eax
  1109. .byte 102,15,56,220,208
  1110. .byte 0x0f,0x38,0xf1,0x44,0x24,60
  1111. leal 4(%r8),%eax
  1112. .byte 102,15,56,220,216
  1113. xorl %ebp,%eax
  1114. .byte 0x0f,0x38,0xf1,0x44,0x24,76
  1115. .byte 102,15,56,220,224
  1116. leal 5(%r8),%eax
  1117. xorl %ebp,%eax
  1118. .byte 102,15,56,220,232
  1119. .byte 0x0f,0x38,0xf1,0x44,0x24,92
  1120. movq %r10,%rax
  1121. .byte 102,15,56,220,240
  1122. .byte 102,15,56,220,248
  1123. movups -16(%rcx,%r10,1),%xmm0
  1124. call .Lenc_loop6
  1125. movdqu (%rdi),%xmm8
  1126. movdqu 16(%rdi),%xmm9
  1127. movdqu 32(%rdi),%xmm10
  1128. movdqu 48(%rdi),%xmm11
  1129. movdqu 64(%rdi),%xmm12
  1130. movdqu 80(%rdi),%xmm13
  1131. leaq 96(%rdi),%rdi
  1132. movups -64(%rcx,%r10,1),%xmm1
  1133. pxor %xmm2,%xmm8
  1134. movaps 0(%rsp),%xmm2
  1135. pxor %xmm3,%xmm9
  1136. movaps 16(%rsp),%xmm3
  1137. pxor %xmm4,%xmm10
  1138. movaps 32(%rsp),%xmm4
  1139. pxor %xmm5,%xmm11
  1140. movaps 48(%rsp),%xmm5
  1141. pxor %xmm6,%xmm12
  1142. movaps 64(%rsp),%xmm6
  1143. pxor %xmm7,%xmm13
  1144. movaps 80(%rsp),%xmm7
  1145. movdqu %xmm8,(%rsi)
  1146. movdqu %xmm9,16(%rsi)
  1147. movdqu %xmm10,32(%rsi)
  1148. movdqu %xmm11,48(%rsi)
  1149. movdqu %xmm12,64(%rsi)
  1150. movdqu %xmm13,80(%rsi)
  1151. leaq 96(%rsi),%rsi
  1152. subq $6,%rdx
  1153. jnc .Lctr32_loop6
  1154. addq $6,%rdx
  1155. jz .Lctr32_done
  1156. leal -48(%r10),%eax
  1157. leaq -80(%rcx,%r10,1),%rcx
  1158. negl %eax
  1159. shrl $4,%eax
  1160. jmp .Lctr32_tail
  1161. .align 32
  1162. .Lctr32_loop8:
  1163. addl $8,%r8d
  1164. movdqa 96(%rsp),%xmm8
  1165. .byte 102,15,56,220,209
  1166. movl %r8d,%r9d
  1167. movdqa 112(%rsp),%xmm9
  1168. .byte 102,15,56,220,217
  1169. bswapl %r9d
  1170. movups 32-128(%rcx),%xmm0
  1171. .byte 102,15,56,220,225
  1172. xorl %ebp,%r9d
  1173. nop
  1174. .byte 102,15,56,220,233
  1175. movl %r9d,0+12(%rsp)
  1176. leaq 1(%r8),%r9
  1177. .byte 102,15,56,220,241
  1178. .byte 102,15,56,220,249
  1179. .byte 102,68,15,56,220,193
  1180. .byte 102,68,15,56,220,201
  1181. movups 48-128(%rcx),%xmm1
  1182. bswapl %r9d
  1183. .byte 102,15,56,220,208
  1184. .byte 102,15,56,220,216
  1185. xorl %ebp,%r9d
  1186. .byte 0x66,0x90
  1187. .byte 102,15,56,220,224
  1188. .byte 102,15,56,220,232
  1189. movl %r9d,16+12(%rsp)
  1190. leaq 2(%r8),%r9
  1191. .byte 102,15,56,220,240
  1192. .byte 102,15,56,220,248
  1193. .byte 102,68,15,56,220,192
  1194. .byte 102,68,15,56,220,200
  1195. movups 64-128(%rcx),%xmm0
  1196. bswapl %r9d
  1197. .byte 102,15,56,220,209
  1198. .byte 102,15,56,220,217
  1199. xorl %ebp,%r9d
  1200. .byte 0x66,0x90
  1201. .byte 102,15,56,220,225
  1202. .byte 102,15,56,220,233
  1203. movl %r9d,32+12(%rsp)
  1204. leaq 3(%r8),%r9
  1205. .byte 102,15,56,220,241
  1206. .byte 102,15,56,220,249
  1207. .byte 102,68,15,56,220,193
  1208. .byte 102,68,15,56,220,201
  1209. movups 80-128(%rcx),%xmm1
  1210. bswapl %r9d
  1211. .byte 102,15,56,220,208
  1212. .byte 102,15,56,220,216
  1213. xorl %ebp,%r9d
  1214. .byte 0x66,0x90
  1215. .byte 102,15,56,220,224
  1216. .byte 102,15,56,220,232
  1217. movl %r9d,48+12(%rsp)
  1218. leaq 4(%r8),%r9
  1219. .byte 102,15,56,220,240
  1220. .byte 102,15,56,220,248
  1221. .byte 102,68,15,56,220,192
  1222. .byte 102,68,15,56,220,200
  1223. movups 96-128(%rcx),%xmm0
  1224. bswapl %r9d
  1225. .byte 102,15,56,220,209
  1226. .byte 102,15,56,220,217
  1227. xorl %ebp,%r9d
  1228. .byte 0x66,0x90
  1229. .byte 102,15,56,220,225
  1230. .byte 102,15,56,220,233
  1231. movl %r9d,64+12(%rsp)
  1232. leaq 5(%r8),%r9
  1233. .byte 102,15,56,220,241
  1234. .byte 102,15,56,220,249
  1235. .byte 102,68,15,56,220,193
  1236. .byte 102,68,15,56,220,201
  1237. movups 112-128(%rcx),%xmm1
  1238. bswapl %r9d
  1239. .byte 102,15,56,220,208
  1240. .byte 102,15,56,220,216
  1241. xorl %ebp,%r9d
  1242. .byte 0x66,0x90
  1243. .byte 102,15,56,220,224
  1244. .byte 102,15,56,220,232
  1245. movl %r9d,80+12(%rsp)
  1246. leaq 6(%r8),%r9
  1247. .byte 102,15,56,220,240
  1248. .byte 102,15,56,220,248
  1249. .byte 102,68,15,56,220,192
  1250. .byte 102,68,15,56,220,200
  1251. movups 128-128(%rcx),%xmm0
  1252. bswapl %r9d
  1253. .byte 102,15,56,220,209
  1254. .byte 102,15,56,220,217
  1255. xorl %ebp,%r9d
  1256. .byte 0x66,0x90
  1257. .byte 102,15,56,220,225
  1258. .byte 102,15,56,220,233
  1259. movl %r9d,96+12(%rsp)
  1260. leaq 7(%r8),%r9
  1261. .byte 102,15,56,220,241
  1262. .byte 102,15,56,220,249
  1263. .byte 102,68,15,56,220,193
  1264. .byte 102,68,15,56,220,201
  1265. movups 144-128(%rcx),%xmm1
  1266. bswapl %r9d
  1267. .byte 102,15,56,220,208
  1268. .byte 102,15,56,220,216
  1269. .byte 102,15,56,220,224
  1270. xorl %ebp,%r9d
  1271. movdqu 0(%rdi),%xmm10
  1272. .byte 102,15,56,220,232
  1273. movl %r9d,112+12(%rsp)
  1274. cmpl $11,%eax
  1275. .byte 102,15,56,220,240
  1276. .byte 102,15,56,220,248
  1277. .byte 102,68,15,56,220,192
  1278. .byte 102,68,15,56,220,200
  1279. movups 160-128(%rcx),%xmm0
  1280. jb .Lctr32_enc_done
  1281. .byte 102,15,56,220,209
  1282. .byte 102,15,56,220,217
  1283. .byte 102,15,56,220,225
  1284. .byte 102,15,56,220,233
  1285. .byte 102,15,56,220,241
  1286. .byte 102,15,56,220,249
  1287. .byte 102,68,15,56,220,193
  1288. .byte 102,68,15,56,220,201
  1289. movups 176-128(%rcx),%xmm1
  1290. .byte 102,15,56,220,208
  1291. .byte 102,15,56,220,216
  1292. .byte 102,15,56,220,224
  1293. .byte 102,15,56,220,232
  1294. .byte 102,15,56,220,240
  1295. .byte 102,15,56,220,248
  1296. .byte 102,68,15,56,220,192
  1297. .byte 102,68,15,56,220,200
  1298. movups 192-128(%rcx),%xmm0
  1299. je .Lctr32_enc_done
  1300. .byte 102,15,56,220,209
  1301. .byte 102,15,56,220,217
  1302. .byte 102,15,56,220,225
  1303. .byte 102,15,56,220,233
  1304. .byte 102,15,56,220,241
  1305. .byte 102,15,56,220,249
  1306. .byte 102,68,15,56,220,193
  1307. .byte 102,68,15,56,220,201
  1308. movups 208-128(%rcx),%xmm1
  1309. .byte 102,15,56,220,208
  1310. .byte 102,15,56,220,216
  1311. .byte 102,15,56,220,224
  1312. .byte 102,15,56,220,232
  1313. .byte 102,15,56,220,240
  1314. .byte 102,15,56,220,248
  1315. .byte 102,68,15,56,220,192
  1316. .byte 102,68,15,56,220,200
  1317. movups 224-128(%rcx),%xmm0
  1318. jmp .Lctr32_enc_done
  1319. .align 16
  1320. .Lctr32_enc_done:
  1321. movdqu 16(%rdi),%xmm11
  1322. pxor %xmm0,%xmm10
  1323. movdqu 32(%rdi),%xmm12
  1324. pxor %xmm0,%xmm11
  1325. movdqu 48(%rdi),%xmm13
  1326. pxor %xmm0,%xmm12
  1327. movdqu 64(%rdi),%xmm14
  1328. pxor %xmm0,%xmm13
  1329. movdqu 80(%rdi),%xmm15
  1330. pxor %xmm0,%xmm14
  1331. pxor %xmm0,%xmm15
  1332. .byte 102,15,56,220,209
  1333. .byte 102,15,56,220,217
  1334. .byte 102,15,56,220,225
  1335. .byte 102,15,56,220,233
  1336. .byte 102,15,56,220,241
  1337. .byte 102,15,56,220,249
  1338. .byte 102,68,15,56,220,193
  1339. .byte 102,68,15,56,220,201
  1340. movdqu 96(%rdi),%xmm1
  1341. leaq 128(%rdi),%rdi
  1342. .byte 102,65,15,56,221,210
  1343. pxor %xmm0,%xmm1
  1344. movdqu 112-128(%rdi),%xmm10
  1345. .byte 102,65,15,56,221,219
  1346. pxor %xmm0,%xmm10
  1347. movdqa 0(%rsp),%xmm11
  1348. .byte 102,65,15,56,221,228
  1349. .byte 102,65,15,56,221,237
  1350. movdqa 16(%rsp),%xmm12
  1351. movdqa 32(%rsp),%xmm13
  1352. .byte 102,65,15,56,221,246
  1353. .byte 102,65,15,56,221,255
  1354. movdqa 48(%rsp),%xmm14
  1355. movdqa 64(%rsp),%xmm15
  1356. .byte 102,68,15,56,221,193
  1357. movdqa 80(%rsp),%xmm0
  1358. movups 16-128(%rcx),%xmm1
  1359. .byte 102,69,15,56,221,202
  1360. movups %xmm2,(%rsi)
  1361. movdqa %xmm11,%xmm2
  1362. movups %xmm3,16(%rsi)
  1363. movdqa %xmm12,%xmm3
  1364. movups %xmm4,32(%rsi)
  1365. movdqa %xmm13,%xmm4
  1366. movups %xmm5,48(%rsi)
  1367. movdqa %xmm14,%xmm5
  1368. movups %xmm6,64(%rsi)
  1369. movdqa %xmm15,%xmm6
  1370. movups %xmm7,80(%rsi)
  1371. movdqa %xmm0,%xmm7
  1372. movups %xmm8,96(%rsi)
  1373. movups %xmm9,112(%rsi)
  1374. leaq 128(%rsi),%rsi
  1375. subq $8,%rdx
  1376. jnc .Lctr32_loop8
  1377. addq $8,%rdx
  1378. jz .Lctr32_done
  1379. leaq -128(%rcx),%rcx
  1380. .Lctr32_tail:
  1381. leaq 16(%rcx),%rcx
  1382. cmpq $4,%rdx
  1383. jb .Lctr32_loop3
  1384. je .Lctr32_loop4
  1385. shll $4,%eax
  1386. movdqa 96(%rsp),%xmm8
  1387. pxor %xmm9,%xmm9
  1388. movups 16(%rcx),%xmm0
  1389. .byte 102,15,56,220,209
  1390. .byte 102,15,56,220,217
  1391. leaq 32-16(%rcx,%rax,1),%rcx
  1392. negq %rax
  1393. .byte 102,15,56,220,225
  1394. addq $16,%rax
  1395. movups (%rdi),%xmm10
  1396. .byte 102,15,56,220,233
  1397. .byte 102,15,56,220,241
  1398. movups 16(%rdi),%xmm11
  1399. movups 32(%rdi),%xmm12
  1400. .byte 102,15,56,220,249
  1401. .byte 102,68,15,56,220,193
  1402. call .Lenc_loop8_enter
  1403. movdqu 48(%rdi),%xmm13
  1404. pxor %xmm10,%xmm2
  1405. movdqu 64(%rdi),%xmm10
  1406. pxor %xmm11,%xmm3
  1407. movdqu %xmm2,(%rsi)
  1408. pxor %xmm12,%xmm4
  1409. movdqu %xmm3,16(%rsi)
  1410. pxor %xmm13,%xmm5
  1411. movdqu %xmm4,32(%rsi)
  1412. pxor %xmm10,%xmm6
  1413. movdqu %xmm5,48(%rsi)
  1414. movdqu %xmm6,64(%rsi)
  1415. cmpq $6,%rdx
  1416. jb .Lctr32_done
  1417. movups 80(%rdi),%xmm11
  1418. xorps %xmm11,%xmm7
  1419. movups %xmm7,80(%rsi)
  1420. je .Lctr32_done
  1421. movups 96(%rdi),%xmm12
  1422. xorps %xmm12,%xmm8
  1423. movups %xmm8,96(%rsi)
  1424. jmp .Lctr32_done
  1425. .align 32
  1426. .Lctr32_loop4:
  1427. .byte 102,15,56,220,209
  1428. leaq 16(%rcx),%rcx
  1429. decl %eax
  1430. .byte 102,15,56,220,217
  1431. .byte 102,15,56,220,225
  1432. .byte 102,15,56,220,233
  1433. movups (%rcx),%xmm1
  1434. jnz .Lctr32_loop4
  1435. .byte 102,15,56,221,209
  1436. .byte 102,15,56,221,217
  1437. movups (%rdi),%xmm10
  1438. movups 16(%rdi),%xmm11
  1439. .byte 102,15,56,221,225
  1440. .byte 102,15,56,221,233
  1441. movups 32(%rdi),%xmm12
  1442. movups 48(%rdi),%xmm13
  1443. xorps %xmm10,%xmm2
  1444. movups %xmm2,(%rsi)
  1445. xorps %xmm11,%xmm3
  1446. movups %xmm3,16(%rsi)
  1447. pxor %xmm12,%xmm4
  1448. movdqu %xmm4,32(%rsi)
  1449. pxor %xmm13,%xmm5
  1450. movdqu %xmm5,48(%rsi)
  1451. jmp .Lctr32_done
  1452. .align 32
  1453. .Lctr32_loop3:
  1454. .byte 102,15,56,220,209
  1455. leaq 16(%rcx),%rcx
  1456. decl %eax
  1457. .byte 102,15,56,220,217
  1458. .byte 102,15,56,220,225
  1459. movups (%rcx),%xmm1
  1460. jnz .Lctr32_loop3
  1461. .byte 102,15,56,221,209
  1462. .byte 102,15,56,221,217
  1463. .byte 102,15,56,221,225
  1464. movups (%rdi),%xmm10
  1465. xorps %xmm10,%xmm2
  1466. movups %xmm2,(%rsi)
  1467. cmpq $2,%rdx
  1468. jb .Lctr32_done
  1469. movups 16(%rdi),%xmm11
  1470. xorps %xmm11,%xmm3
  1471. movups %xmm3,16(%rsi)
  1472. je .Lctr32_done
  1473. movups 32(%rdi),%xmm12
  1474. xorps %xmm12,%xmm4
  1475. movups %xmm4,32(%rsi)
  1476. .Lctr32_done:
  1477. xorps %xmm0,%xmm0
  1478. xorl %ebp,%ebp
  1479. pxor %xmm1,%xmm1
  1480. pxor %xmm2,%xmm2
  1481. pxor %xmm3,%xmm3
  1482. pxor %xmm4,%xmm4
  1483. pxor %xmm5,%xmm5
  1484. pxor %xmm6,%xmm6
  1485. pxor %xmm7,%xmm7
  1486. movaps %xmm0,0(%rsp)
  1487. pxor %xmm8,%xmm8
  1488. movaps %xmm0,16(%rsp)
  1489. pxor %xmm9,%xmm9
  1490. movaps %xmm0,32(%rsp)
  1491. pxor %xmm10,%xmm10
  1492. movaps %xmm0,48(%rsp)
  1493. pxor %xmm11,%xmm11
  1494. movaps %xmm0,64(%rsp)
  1495. pxor %xmm12,%xmm12
  1496. movaps %xmm0,80(%rsp)
  1497. pxor %xmm13,%xmm13
  1498. movaps %xmm0,96(%rsp)
  1499. pxor %xmm14,%xmm14
  1500. movaps %xmm0,112(%rsp)
  1501. pxor %xmm15,%xmm15
  1502. movq -8(%r11),%rbp
  1503. .cfi_restore %rbp
  1504. leaq (%r11),%rsp
  1505. .cfi_def_cfa_register %rsp
  1506. .Lctr32_epilogue:
  1507. .byte 0xf3,0xc3
  1508. .cfi_endproc
  1509. .size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks
  1510. .globl aesni_xts_encrypt
  1511. .type aesni_xts_encrypt,@function
  1512. .align 16
  1513. aesni_xts_encrypt:
  1514. .cfi_startproc
  1515. leaq (%rsp),%r11
  1516. .cfi_def_cfa_register %r11
  1517. pushq %rbp
  1518. .cfi_offset %rbp,-16
  1519. subq $112,%rsp
  1520. andq $-16,%rsp
  1521. movups (%r9),%xmm2
  1522. movl 240(%r8),%eax
  1523. movl 240(%rcx),%r10d
  1524. movups (%r8),%xmm0
  1525. movups 16(%r8),%xmm1
  1526. leaq 32(%r8),%r8
  1527. xorps %xmm0,%xmm2
  1528. .Loop_enc1_8:
  1529. .byte 102,15,56,220,209
  1530. decl %eax
  1531. movups (%r8),%xmm1
  1532. leaq 16(%r8),%r8
  1533. jnz .Loop_enc1_8
  1534. .byte 102,15,56,221,209
  1535. movups (%rcx),%xmm0
  1536. movq %rcx,%rbp
  1537. movl %r10d,%eax
  1538. shll $4,%r10d
  1539. movq %rdx,%r9
  1540. andq $-16,%rdx
  1541. movups 16(%rcx,%r10,1),%xmm1
  1542. movdqa .Lxts_magic(%rip),%xmm8
  1543. movdqa %xmm2,%xmm15
  1544. pshufd $0x5f,%xmm2,%xmm9
  1545. pxor %xmm0,%xmm1
  1546. movdqa %xmm9,%xmm14
  1547. paddd %xmm9,%xmm9
  1548. movdqa %xmm15,%xmm10
  1549. psrad $31,%xmm14
  1550. paddq %xmm15,%xmm15
  1551. pand %xmm8,%xmm14
  1552. pxor %xmm0,%xmm10
  1553. pxor %xmm14,%xmm15
  1554. movdqa %xmm9,%xmm14
  1555. paddd %xmm9,%xmm9
  1556. movdqa %xmm15,%xmm11
  1557. psrad $31,%xmm14
  1558. paddq %xmm15,%xmm15
  1559. pand %xmm8,%xmm14
  1560. pxor %xmm0,%xmm11
  1561. pxor %xmm14,%xmm15
  1562. movdqa %xmm9,%xmm14
  1563. paddd %xmm9,%xmm9
  1564. movdqa %xmm15,%xmm12
  1565. psrad $31,%xmm14
  1566. paddq %xmm15,%xmm15
  1567. pand %xmm8,%xmm14
  1568. pxor %xmm0,%xmm12
  1569. pxor %xmm14,%xmm15
  1570. movdqa %xmm9,%xmm14
  1571. paddd %xmm9,%xmm9
  1572. movdqa %xmm15,%xmm13
  1573. psrad $31,%xmm14
  1574. paddq %xmm15,%xmm15
  1575. pand %xmm8,%xmm14
  1576. pxor %xmm0,%xmm13
  1577. pxor %xmm14,%xmm15
  1578. movdqa %xmm15,%xmm14
  1579. psrad $31,%xmm9
  1580. paddq %xmm15,%xmm15
  1581. pand %xmm8,%xmm9
  1582. pxor %xmm0,%xmm14
  1583. pxor %xmm9,%xmm15
  1584. movaps %xmm1,96(%rsp)
  1585. subq $96,%rdx
  1586. jc .Lxts_enc_short
  1587. movl $16+96,%eax
  1588. leaq 32(%rbp,%r10,1),%rcx
  1589. subq %r10,%rax
  1590. movups 16(%rbp),%xmm1
  1591. movq %rax,%r10
  1592. leaq .Lxts_magic(%rip),%r8
  1593. jmp .Lxts_enc_grandloop
  1594. .align 32
  1595. .Lxts_enc_grandloop:
  1596. movdqu 0(%rdi),%xmm2
  1597. movdqa %xmm0,%xmm8
  1598. movdqu 16(%rdi),%xmm3
  1599. pxor %xmm10,%xmm2
  1600. movdqu 32(%rdi),%xmm4
  1601. pxor %xmm11,%xmm3
  1602. .byte 102,15,56,220,209
  1603. movdqu 48(%rdi),%xmm5
  1604. pxor %xmm12,%xmm4
  1605. .byte 102,15,56,220,217
  1606. movdqu 64(%rdi),%xmm6
  1607. pxor %xmm13,%xmm5
  1608. .byte 102,15,56,220,225
  1609. movdqu 80(%rdi),%xmm7
  1610. pxor %xmm15,%xmm8
  1611. movdqa 96(%rsp),%xmm9
  1612. pxor %xmm14,%xmm6
  1613. .byte 102,15,56,220,233
  1614. movups 32(%rbp),%xmm0
  1615. leaq 96(%rdi),%rdi
  1616. pxor %xmm8,%xmm7
  1617. pxor %xmm9,%xmm10
  1618. .byte 102,15,56,220,241
  1619. pxor %xmm9,%xmm11
  1620. movdqa %xmm10,0(%rsp)
  1621. .byte 102,15,56,220,249
  1622. movups 48(%rbp),%xmm1
  1623. pxor %xmm9,%xmm12
  1624. .byte 102,15,56,220,208
  1625. pxor %xmm9,%xmm13
  1626. movdqa %xmm11,16(%rsp)
  1627. .byte 102,15,56,220,216
  1628. pxor %xmm9,%xmm14
  1629. movdqa %xmm12,32(%rsp)
  1630. .byte 102,15,56,220,224
  1631. .byte 102,15,56,220,232
  1632. pxor %xmm9,%xmm8
  1633. movdqa %xmm14,64(%rsp)
  1634. .byte 102,15,56,220,240
  1635. .byte 102,15,56,220,248
  1636. movups 64(%rbp),%xmm0
  1637. movdqa %xmm8,80(%rsp)
  1638. pshufd $0x5f,%xmm15,%xmm9
  1639. jmp .Lxts_enc_loop6
  1640. .align 32
  1641. .Lxts_enc_loop6:
  1642. .byte 102,15,56,220,209
  1643. .byte 102,15,56,220,217
  1644. .byte 102,15,56,220,225
  1645. .byte 102,15,56,220,233
  1646. .byte 102,15,56,220,241
  1647. .byte 102,15,56,220,249
  1648. movups -64(%rcx,%rax,1),%xmm1
  1649. addq $32,%rax
  1650. .byte 102,15,56,220,208
  1651. .byte 102,15,56,220,216
  1652. .byte 102,15,56,220,224
  1653. .byte 102,15,56,220,232
  1654. .byte 102,15,56,220,240
  1655. .byte 102,15,56,220,248
  1656. movups -80(%rcx,%rax,1),%xmm0
  1657. jnz .Lxts_enc_loop6
  1658. movdqa (%r8),%xmm8
  1659. movdqa %xmm9,%xmm14
  1660. paddd %xmm9,%xmm9
  1661. .byte 102,15,56,220,209
  1662. paddq %xmm15,%xmm15
  1663. psrad $31,%xmm14
  1664. .byte 102,15,56,220,217
  1665. pand %xmm8,%xmm14
  1666. movups (%rbp),%xmm10
  1667. .byte 102,15,56,220,225
  1668. .byte 102,15,56,220,233
  1669. .byte 102,15,56,220,241
  1670. pxor %xmm14,%xmm15
  1671. movaps %xmm10,%xmm11
  1672. .byte 102,15,56,220,249
  1673. movups -64(%rcx),%xmm1
  1674. movdqa %xmm9,%xmm14
  1675. .byte 102,15,56,220,208
  1676. paddd %xmm9,%xmm9
  1677. pxor %xmm15,%xmm10
  1678. .byte 102,15,56,220,216
  1679. psrad $31,%xmm14
  1680. paddq %xmm15,%xmm15
  1681. .byte 102,15,56,220,224
  1682. .byte 102,15,56,220,232
  1683. pand %xmm8,%xmm14
  1684. movaps %xmm11,%xmm12
  1685. .byte 102,15,56,220,240
  1686. pxor %xmm14,%xmm15
  1687. movdqa %xmm9,%xmm14
  1688. .byte 102,15,56,220,248
  1689. movups -48(%rcx),%xmm0
  1690. paddd %xmm9,%xmm9
  1691. .byte 102,15,56,220,209
  1692. pxor %xmm15,%xmm11
  1693. psrad $31,%xmm14
  1694. .byte 102,15,56,220,217
  1695. paddq %xmm15,%xmm15
  1696. pand %xmm8,%xmm14
  1697. .byte 102,15,56,220,225
  1698. .byte 102,15,56,220,233
  1699. movdqa %xmm13,48(%rsp)
  1700. pxor %xmm14,%xmm15
  1701. .byte 102,15,56,220,241
  1702. movaps %xmm12,%xmm13
  1703. movdqa %xmm9,%xmm14
  1704. .byte 102,15,56,220,249
  1705. movups -32(%rcx),%xmm1
  1706. paddd %xmm9,%xmm9
  1707. .byte 102,15,56,220,208
  1708. pxor %xmm15,%xmm12
  1709. psrad $31,%xmm14
  1710. .byte 102,15,56,220,216
  1711. paddq %xmm15,%xmm15
  1712. pand %xmm8,%xmm14
  1713. .byte 102,15,56,220,224
  1714. .byte 102,15,56,220,232
  1715. .byte 102,15,56,220,240
  1716. pxor %xmm14,%xmm15
  1717. movaps %xmm13,%xmm14
  1718. .byte 102,15,56,220,248
  1719. movdqa %xmm9,%xmm0
  1720. paddd %xmm9,%xmm9
  1721. .byte 102,15,56,220,209
  1722. pxor %xmm15,%xmm13
  1723. psrad $31,%xmm0
  1724. .byte 102,15,56,220,217
  1725. paddq %xmm15,%xmm15
  1726. pand %xmm8,%xmm0
  1727. .byte 102,15,56,220,225
  1728. .byte 102,15,56,220,233
  1729. pxor %xmm0,%xmm15
  1730. movups (%rbp),%xmm0
  1731. .byte 102,15,56,220,241
  1732. .byte 102,15,56,220,249
  1733. movups 16(%rbp),%xmm1
  1734. pxor %xmm15,%xmm14
  1735. .byte 102,15,56,221,84,36,0
  1736. psrad $31,%xmm9
  1737. paddq %xmm15,%xmm15
  1738. .byte 102,15,56,221,92,36,16
  1739. .byte 102,15,56,221,100,36,32
  1740. pand %xmm8,%xmm9
  1741. movq %r10,%rax
  1742. .byte 102,15,56,221,108,36,48
  1743. .byte 102,15,56,221,116,36,64
  1744. .byte 102,15,56,221,124,36,80
  1745. pxor %xmm9,%xmm15
  1746. leaq 96(%rsi),%rsi
  1747. movups %xmm2,-96(%rsi)
  1748. movups %xmm3,-80(%rsi)
  1749. movups %xmm4,-64(%rsi)
  1750. movups %xmm5,-48(%rsi)
  1751. movups %xmm6,-32(%rsi)
  1752. movups %xmm7,-16(%rsi)
  1753. subq $96,%rdx
  1754. jnc .Lxts_enc_grandloop
  1755. movl $16+96,%eax
  1756. subl %r10d,%eax
  1757. movq %rbp,%rcx
  1758. shrl $4,%eax
  1759. .Lxts_enc_short:
  1760. movl %eax,%r10d
  1761. pxor %xmm0,%xmm10
  1762. addq $96,%rdx
  1763. jz .Lxts_enc_done
  1764. pxor %xmm0,%xmm11
  1765. cmpq $0x20,%rdx
  1766. jb .Lxts_enc_one
  1767. pxor %xmm0,%xmm12
  1768. je .Lxts_enc_two
  1769. pxor %xmm0,%xmm13
  1770. cmpq $0x40,%rdx
  1771. jb .Lxts_enc_three
  1772. pxor %xmm0,%xmm14
  1773. je .Lxts_enc_four
  1774. movdqu (%rdi),%xmm2
  1775. movdqu 16(%rdi),%xmm3
  1776. movdqu 32(%rdi),%xmm4
  1777. pxor %xmm10,%xmm2
  1778. movdqu 48(%rdi),%xmm5
  1779. pxor %xmm11,%xmm3
  1780. movdqu 64(%rdi),%xmm6
  1781. leaq 80(%rdi),%rdi
  1782. pxor %xmm12,%xmm4
  1783. pxor %xmm13,%xmm5
  1784. pxor %xmm14,%xmm6
  1785. pxor %xmm7,%xmm7
  1786. call _aesni_encrypt6
  1787. xorps %xmm10,%xmm2
  1788. movdqa %xmm15,%xmm10
  1789. xorps %xmm11,%xmm3
  1790. xorps %xmm12,%xmm4
  1791. movdqu %xmm2,(%rsi)
  1792. xorps %xmm13,%xmm5
  1793. movdqu %xmm3,16(%rsi)
  1794. xorps %xmm14,%xmm6
  1795. movdqu %xmm4,32(%rsi)
  1796. movdqu %xmm5,48(%rsi)
  1797. movdqu %xmm6,64(%rsi)
  1798. leaq 80(%rsi),%rsi
  1799. jmp .Lxts_enc_done
  1800. .align 16
  1801. .Lxts_enc_one:
  1802. movups (%rdi),%xmm2
  1803. leaq 16(%rdi),%rdi
  1804. xorps %xmm10,%xmm2
  1805. movups (%rcx),%xmm0
  1806. movups 16(%rcx),%xmm1
  1807. leaq 32(%rcx),%rcx
  1808. xorps %xmm0,%xmm2
  1809. .Loop_enc1_9:
  1810. .byte 102,15,56,220,209
  1811. decl %eax
  1812. movups (%rcx),%xmm1
  1813. leaq 16(%rcx),%rcx
  1814. jnz .Loop_enc1_9
  1815. .byte 102,15,56,221,209
  1816. xorps %xmm10,%xmm2
  1817. movdqa %xmm11,%xmm10
  1818. movups %xmm2,(%rsi)
  1819. leaq 16(%rsi),%rsi
  1820. jmp .Lxts_enc_done
  1821. .align 16
  1822. .Lxts_enc_two:
  1823. movups (%rdi),%xmm2
  1824. movups 16(%rdi),%xmm3
  1825. leaq 32(%rdi),%rdi
  1826. xorps %xmm10,%xmm2
  1827. xorps %xmm11,%xmm3
  1828. call _aesni_encrypt2
  1829. xorps %xmm10,%xmm2
  1830. movdqa %xmm12,%xmm10
  1831. xorps %xmm11,%xmm3
  1832. movups %xmm2,(%rsi)
  1833. movups %xmm3,16(%rsi)
  1834. leaq 32(%rsi),%rsi
  1835. jmp .Lxts_enc_done
  1836. .align 16
  1837. .Lxts_enc_three:
  1838. movups (%rdi),%xmm2
  1839. movups 16(%rdi),%xmm3
  1840. movups 32(%rdi),%xmm4
  1841. leaq 48(%rdi),%rdi
  1842. xorps %xmm10,%xmm2
  1843. xorps %xmm11,%xmm3
  1844. xorps %xmm12,%xmm4
  1845. call _aesni_encrypt3
  1846. xorps %xmm10,%xmm2
  1847. movdqa %xmm13,%xmm10
  1848. xorps %xmm11,%xmm3
  1849. xorps %xmm12,%xmm4
  1850. movups %xmm2,(%rsi)
  1851. movups %xmm3,16(%rsi)
  1852. movups %xmm4,32(%rsi)
  1853. leaq 48(%rsi),%rsi
  1854. jmp .Lxts_enc_done
  1855. .align 16
  1856. .Lxts_enc_four:
  1857. movups (%rdi),%xmm2
  1858. movups 16(%rdi),%xmm3
  1859. movups 32(%rdi),%xmm4
  1860. xorps %xmm10,%xmm2
  1861. movups 48(%rdi),%xmm5
  1862. leaq 64(%rdi),%rdi
  1863. xorps %xmm11,%xmm3
  1864. xorps %xmm12,%xmm4
  1865. xorps %xmm13,%xmm5
  1866. call _aesni_encrypt4
  1867. pxor %xmm10,%xmm2
  1868. movdqa %xmm14,%xmm10
  1869. pxor %xmm11,%xmm3
  1870. pxor %xmm12,%xmm4
  1871. movdqu %xmm2,(%rsi)
  1872. pxor %xmm13,%xmm5
  1873. movdqu %xmm3,16(%rsi)
  1874. movdqu %xmm4,32(%rsi)
  1875. movdqu %xmm5,48(%rsi)
  1876. leaq 64(%rsi),%rsi
  1877. jmp .Lxts_enc_done
  1878. .align 16
  1879. .Lxts_enc_done:
  1880. andq $15,%r9
  1881. jz .Lxts_enc_ret
  1882. movq %r9,%rdx
  1883. .Lxts_enc_steal:
  1884. movzbl (%rdi),%eax
  1885. movzbl -16(%rsi),%ecx
  1886. leaq 1(%rdi),%rdi
  1887. movb %al,-16(%rsi)
  1888. movb %cl,0(%rsi)
  1889. leaq 1(%rsi),%rsi
  1890. subq $1,%rdx
  1891. jnz .Lxts_enc_steal
  1892. subq %r9,%rsi
  1893. movq %rbp,%rcx
  1894. movl %r10d,%eax
  1895. movups -16(%rsi),%xmm2
  1896. xorps %xmm10,%xmm2
  1897. movups (%rcx),%xmm0
  1898. movups 16(%rcx),%xmm1
  1899. leaq 32(%rcx),%rcx
  1900. xorps %xmm0,%xmm2
  1901. .Loop_enc1_10:
  1902. .byte 102,15,56,220,209
  1903. decl %eax
  1904. movups (%rcx),%xmm1
  1905. leaq 16(%rcx),%rcx
  1906. jnz .Loop_enc1_10
  1907. .byte 102,15,56,221,209
  1908. xorps %xmm10,%xmm2
  1909. movups %xmm2,-16(%rsi)
  1910. .Lxts_enc_ret:
  1911. xorps %xmm0,%xmm0
  1912. pxor %xmm1,%xmm1
  1913. pxor %xmm2,%xmm2
  1914. pxor %xmm3,%xmm3
  1915. pxor %xmm4,%xmm4
  1916. pxor %xmm5,%xmm5
  1917. pxor %xmm6,%xmm6
  1918. pxor %xmm7,%xmm7
  1919. movaps %xmm0,0(%rsp)
  1920. pxor %xmm8,%xmm8
  1921. movaps %xmm0,16(%rsp)
  1922. pxor %xmm9,%xmm9
  1923. movaps %xmm0,32(%rsp)
  1924. pxor %xmm10,%xmm10
  1925. movaps %xmm0,48(%rsp)
  1926. pxor %xmm11,%xmm11
  1927. movaps %xmm0,64(%rsp)
  1928. pxor %xmm12,%xmm12
  1929. movaps %xmm0,80(%rsp)
  1930. pxor %xmm13,%xmm13
  1931. movaps %xmm0,96(%rsp)
  1932. pxor %xmm14,%xmm14
  1933. pxor %xmm15,%xmm15
  1934. movq -8(%r11),%rbp
  1935. .cfi_restore %rbp
  1936. leaq (%r11),%rsp
  1937. .cfi_def_cfa_register %rsp
  1938. .Lxts_enc_epilogue:
  1939. .byte 0xf3,0xc3
  1940. .cfi_endproc
  1941. .size aesni_xts_encrypt,.-aesni_xts_encrypt
  1942. .globl aesni_xts_decrypt
  1943. .type aesni_xts_decrypt,@function
  1944. .align 16
  1945. aesni_xts_decrypt:
  1946. .cfi_startproc
  1947. leaq (%rsp),%r11
  1948. .cfi_def_cfa_register %r11
  1949. pushq %rbp
  1950. .cfi_offset %rbp,-16
  1951. subq $112,%rsp
  1952. andq $-16,%rsp
  1953. movups (%r9),%xmm2
  1954. movl 240(%r8),%eax
  1955. movl 240(%rcx),%r10d
  1956. movups (%r8),%xmm0
  1957. movups 16(%r8),%xmm1
  1958. leaq 32(%r8),%r8
  1959. xorps %xmm0,%xmm2
  1960. .Loop_enc1_11:
  1961. .byte 102,15,56,220,209
  1962. decl %eax
  1963. movups (%r8),%xmm1
  1964. leaq 16(%r8),%r8
  1965. jnz .Loop_enc1_11
  1966. .byte 102,15,56,221,209
  1967. xorl %eax,%eax
  1968. testq $15,%rdx
  1969. setnz %al
  1970. shlq $4,%rax
  1971. subq %rax,%rdx
  1972. movups (%rcx),%xmm0
  1973. movq %rcx,%rbp
  1974. movl %r10d,%eax
  1975. shll $4,%r10d
  1976. movq %rdx,%r9
  1977. andq $-16,%rdx
  1978. movups 16(%rcx,%r10,1),%xmm1
  1979. movdqa .Lxts_magic(%rip),%xmm8
  1980. movdqa %xmm2,%xmm15
  1981. pshufd $0x5f,%xmm2,%xmm9
  1982. pxor %xmm0,%xmm1
  1983. movdqa %xmm9,%xmm14
  1984. paddd %xmm9,%xmm9
  1985. movdqa %xmm15,%xmm10
  1986. psrad $31,%xmm14
  1987. paddq %xmm15,%xmm15
  1988. pand %xmm8,%xmm14
  1989. pxor %xmm0,%xmm10
  1990. pxor %xmm14,%xmm15
  1991. movdqa %xmm9,%xmm14
  1992. paddd %xmm9,%xmm9
  1993. movdqa %xmm15,%xmm11
  1994. psrad $31,%xmm14
  1995. paddq %xmm15,%xmm15
  1996. pand %xmm8,%xmm14
  1997. pxor %xmm0,%xmm11
  1998. pxor %xmm14,%xmm15
  1999. movdqa %xmm9,%xmm14
  2000. paddd %xmm9,%xmm9
  2001. movdqa %xmm15,%xmm12
  2002. psrad $31,%xmm14
  2003. paddq %xmm15,%xmm15
  2004. pand %xmm8,%xmm14
  2005. pxor %xmm0,%xmm12
  2006. pxor %xmm14,%xmm15
  2007. movdqa %xmm9,%xmm14
  2008. paddd %xmm9,%xmm9
  2009. movdqa %xmm15,%xmm13
  2010. psrad $31,%xmm14
  2011. paddq %xmm15,%xmm15
  2012. pand %xmm8,%xmm14
  2013. pxor %xmm0,%xmm13
  2014. pxor %xmm14,%xmm15
  2015. movdqa %xmm15,%xmm14
  2016. psrad $31,%xmm9
  2017. paddq %xmm15,%xmm15
  2018. pand %xmm8,%xmm9
  2019. pxor %xmm0,%xmm14
  2020. pxor %xmm9,%xmm15
  2021. movaps %xmm1,96(%rsp)
  2022. subq $96,%rdx
  2023. jc .Lxts_dec_short
  2024. movl $16+96,%eax
  2025. leaq 32(%rbp,%r10,1),%rcx
  2026. subq %r10,%rax
  2027. movups 16(%rbp),%xmm1
  2028. movq %rax,%r10
  2029. leaq .Lxts_magic(%rip),%r8
  2030. jmp .Lxts_dec_grandloop
  2031. .align 32
  2032. .Lxts_dec_grandloop:
  2033. movdqu 0(%rdi),%xmm2
  2034. movdqa %xmm0,%xmm8
  2035. movdqu 16(%rdi),%xmm3
  2036. pxor %xmm10,%xmm2
  2037. movdqu 32(%rdi),%xmm4
  2038. pxor %xmm11,%xmm3
  2039. .byte 102,15,56,222,209
  2040. movdqu 48(%rdi),%xmm5
  2041. pxor %xmm12,%xmm4
  2042. .byte 102,15,56,222,217
  2043. movdqu 64(%rdi),%xmm6
  2044. pxor %xmm13,%xmm5
  2045. .byte 102,15,56,222,225
  2046. movdqu 80(%rdi),%xmm7
  2047. pxor %xmm15,%xmm8
  2048. movdqa 96(%rsp),%xmm9
  2049. pxor %xmm14,%xmm6
  2050. .byte 102,15,56,222,233
  2051. movups 32(%rbp),%xmm0
  2052. leaq 96(%rdi),%rdi
  2053. pxor %xmm8,%xmm7
  2054. pxor %xmm9,%xmm10
  2055. .byte 102,15,56,222,241
  2056. pxor %xmm9,%xmm11
  2057. movdqa %xmm10,0(%rsp)
  2058. .byte 102,15,56,222,249
  2059. movups 48(%rbp),%xmm1
  2060. pxor %xmm9,%xmm12
  2061. .byte 102,15,56,222,208
  2062. pxor %xmm9,%xmm13
  2063. movdqa %xmm11,16(%rsp)
  2064. .byte 102,15,56,222,216
  2065. pxor %xmm9,%xmm14
  2066. movdqa %xmm12,32(%rsp)
  2067. .byte 102,15,56,222,224
  2068. .byte 102,15,56,222,232
  2069. pxor %xmm9,%xmm8
  2070. movdqa %xmm14,64(%rsp)
  2071. .byte 102,15,56,222,240
  2072. .byte 102,15,56,222,248
  2073. movups 64(%rbp),%xmm0
  2074. movdqa %xmm8,80(%rsp)
  2075. pshufd $0x5f,%xmm15,%xmm9
  2076. jmp .Lxts_dec_loop6
  2077. .align 32
  2078. .Lxts_dec_loop6:
  2079. .byte 102,15,56,222,209
  2080. .byte 102,15,56,222,217
  2081. .byte 102,15,56,222,225
  2082. .byte 102,15,56,222,233
  2083. .byte 102,15,56,222,241
  2084. .byte 102,15,56,222,249
  2085. movups -64(%rcx,%rax,1),%xmm1
  2086. addq $32,%rax
  2087. .byte 102,15,56,222,208
  2088. .byte 102,15,56,222,216
  2089. .byte 102,15,56,222,224
  2090. .byte 102,15,56,222,232
  2091. .byte 102,15,56,222,240
  2092. .byte 102,15,56,222,248
  2093. movups -80(%rcx,%rax,1),%xmm0
  2094. jnz .Lxts_dec_loop6
  2095. movdqa (%r8),%xmm8
  2096. movdqa %xmm9,%xmm14
  2097. paddd %xmm9,%xmm9
  2098. .byte 102,15,56,222,209
  2099. paddq %xmm15,%xmm15
  2100. psrad $31,%xmm14
  2101. .byte 102,15,56,222,217
  2102. pand %xmm8,%xmm14
  2103. movups (%rbp),%xmm10
  2104. .byte 102,15,56,222,225
  2105. .byte 102,15,56,222,233
  2106. .byte 102,15,56,222,241
  2107. pxor %xmm14,%xmm15
  2108. movaps %xmm10,%xmm11
  2109. .byte 102,15,56,222,249
  2110. movups -64(%rcx),%xmm1
  2111. movdqa %xmm9,%xmm14
  2112. .byte 102,15,56,222,208
  2113. paddd %xmm9,%xmm9
  2114. pxor %xmm15,%xmm10
  2115. .byte 102,15,56,222,216
  2116. psrad $31,%xmm14
  2117. paddq %xmm15,%xmm15
  2118. .byte 102,15,56,222,224
  2119. .byte 102,15,56,222,232
  2120. pand %xmm8,%xmm14
  2121. movaps %xmm11,%xmm12
  2122. .byte 102,15,56,222,240
  2123. pxor %xmm14,%xmm15
  2124. movdqa %xmm9,%xmm14
  2125. .byte 102,15,56,222,248
  2126. movups -48(%rcx),%xmm0
  2127. paddd %xmm9,%xmm9
  2128. .byte 102,15,56,222,209
  2129. pxor %xmm15,%xmm11
  2130. psrad $31,%xmm14
  2131. .byte 102,15,56,222,217
  2132. paddq %xmm15,%xmm15
  2133. pand %xmm8,%xmm14
  2134. .byte 102,15,56,222,225
  2135. .byte 102,15,56,222,233
  2136. movdqa %xmm13,48(%rsp)
  2137. pxor %xmm14,%xmm15
  2138. .byte 102,15,56,222,241
  2139. movaps %xmm12,%xmm13
  2140. movdqa %xmm9,%xmm14
  2141. .byte 102,15,56,222,249
  2142. movups -32(%rcx),%xmm1
  2143. paddd %xmm9,%xmm9
  2144. .byte 102,15,56,222,208
  2145. pxor %xmm15,%xmm12
  2146. psrad $31,%xmm14
  2147. .byte 102,15,56,222,216
  2148. paddq %xmm15,%xmm15
  2149. pand %xmm8,%xmm14
  2150. .byte 102,15,56,222,224
  2151. .byte 102,15,56,222,232
  2152. .byte 102,15,56,222,240
  2153. pxor %xmm14,%xmm15
  2154. movaps %xmm13,%xmm14
  2155. .byte 102,15,56,222,248
  2156. movdqa %xmm9,%xmm0
  2157. paddd %xmm9,%xmm9
  2158. .byte 102,15,56,222,209
  2159. pxor %xmm15,%xmm13
  2160. psrad $31,%xmm0
  2161. .byte 102,15,56,222,217
  2162. paddq %xmm15,%xmm15
  2163. pand %xmm8,%xmm0
  2164. .byte 102,15,56,222,225
  2165. .byte 102,15,56,222,233
  2166. pxor %xmm0,%xmm15
  2167. movups (%rbp),%xmm0
  2168. .byte 102,15,56,222,241
  2169. .byte 102,15,56,222,249
  2170. movups 16(%rbp),%xmm1
  2171. pxor %xmm15,%xmm14
  2172. .byte 102,15,56,223,84,36,0
  2173. psrad $31,%xmm9
  2174. paddq %xmm15,%xmm15
  2175. .byte 102,15,56,223,92,36,16
  2176. .byte 102,15,56,223,100,36,32
  2177. pand %xmm8,%xmm9
  2178. movq %r10,%rax
  2179. .byte 102,15,56,223,108,36,48
  2180. .byte 102,15,56,223,116,36,64
  2181. .byte 102,15,56,223,124,36,80
  2182. pxor %xmm9,%xmm15
  2183. leaq 96(%rsi),%rsi
  2184. movups %xmm2,-96(%rsi)
  2185. movups %xmm3,-80(%rsi)
  2186. movups %xmm4,-64(%rsi)
  2187. movups %xmm5,-48(%rsi)
  2188. movups %xmm6,-32(%rsi)
  2189. movups %xmm7,-16(%rsi)
  2190. subq $96,%rdx
  2191. jnc .Lxts_dec_grandloop
  2192. movl $16+96,%eax
  2193. subl %r10d,%eax
  2194. movq %rbp,%rcx
  2195. shrl $4,%eax
  2196. .Lxts_dec_short:
  2197. movl %eax,%r10d
  2198. pxor %xmm0,%xmm10
  2199. pxor %xmm0,%xmm11
  2200. addq $96,%rdx
  2201. jz .Lxts_dec_done
  2202. pxor %xmm0,%xmm12
  2203. cmpq $0x20,%rdx
  2204. jb .Lxts_dec_one
  2205. pxor %xmm0,%xmm13
  2206. je .Lxts_dec_two
  2207. pxor %xmm0,%xmm14
  2208. cmpq $0x40,%rdx
  2209. jb .Lxts_dec_three
  2210. je .Lxts_dec_four
  2211. movdqu (%rdi),%xmm2
  2212. movdqu 16(%rdi),%xmm3
  2213. movdqu 32(%rdi),%xmm4
  2214. pxor %xmm10,%xmm2
  2215. movdqu 48(%rdi),%xmm5
  2216. pxor %xmm11,%xmm3
  2217. movdqu 64(%rdi),%xmm6
  2218. leaq 80(%rdi),%rdi
  2219. pxor %xmm12,%xmm4
  2220. pxor %xmm13,%xmm5
  2221. pxor %xmm14,%xmm6
  2222. call _aesni_decrypt6
  2223. xorps %xmm10,%xmm2
  2224. xorps %xmm11,%xmm3
  2225. xorps %xmm12,%xmm4
  2226. movdqu %xmm2,(%rsi)
  2227. xorps %xmm13,%xmm5
  2228. movdqu %xmm3,16(%rsi)
  2229. xorps %xmm14,%xmm6
  2230. movdqu %xmm4,32(%rsi)
  2231. pxor %xmm14,%xmm14
  2232. movdqu %xmm5,48(%rsi)
  2233. pcmpgtd %xmm15,%xmm14
  2234. movdqu %xmm6,64(%rsi)
  2235. leaq 80(%rsi),%rsi
  2236. pshufd $0x13,%xmm14,%xmm11
  2237. andq $15,%r9
  2238. jz .Lxts_dec_ret
  2239. movdqa %xmm15,%xmm10
  2240. paddq %xmm15,%xmm15
  2241. pand %xmm8,%xmm11
  2242. pxor %xmm15,%xmm11
  2243. jmp .Lxts_dec_done2
  2244. .align 16
  2245. .Lxts_dec_one:
  2246. movups (%rdi),%xmm2
  2247. leaq 16(%rdi),%rdi
  2248. xorps %xmm10,%xmm2
  2249. movups (%rcx),%xmm0
  2250. movups 16(%rcx),%xmm1
  2251. leaq 32(%rcx),%rcx
  2252. xorps %xmm0,%xmm2
  2253. .Loop_dec1_12:
  2254. .byte 102,15,56,222,209
  2255. decl %eax
  2256. movups (%rcx),%xmm1
  2257. leaq 16(%rcx),%rcx
  2258. jnz .Loop_dec1_12
  2259. .byte 102,15,56,223,209
  2260. xorps %xmm10,%xmm2
  2261. movdqa %xmm11,%xmm10
  2262. movups %xmm2,(%rsi)
  2263. movdqa %xmm12,%xmm11
  2264. leaq 16(%rsi),%rsi
  2265. jmp .Lxts_dec_done
  2266. .align 16
  2267. .Lxts_dec_two:
  2268. movups (%rdi),%xmm2
  2269. movups 16(%rdi),%xmm3
  2270. leaq 32(%rdi),%rdi
  2271. xorps %xmm10,%xmm2
  2272. xorps %xmm11,%xmm3
  2273. call _aesni_decrypt2
  2274. xorps %xmm10,%xmm2
  2275. movdqa %xmm12,%xmm10
  2276. xorps %xmm11,%xmm3
  2277. movdqa %xmm13,%xmm11
  2278. movups %xmm2,(%rsi)
  2279. movups %xmm3,16(%rsi)
  2280. leaq 32(%rsi),%rsi
  2281. jmp .Lxts_dec_done
  2282. .align 16
  2283. .Lxts_dec_three:
  2284. movups (%rdi),%xmm2
  2285. movups 16(%rdi),%xmm3
  2286. movups 32(%rdi),%xmm4
  2287. leaq 48(%rdi),%rdi
  2288. xorps %xmm10,%xmm2
  2289. xorps %xmm11,%xmm3
  2290. xorps %xmm12,%xmm4
  2291. call _aesni_decrypt3
  2292. xorps %xmm10,%xmm2
  2293. movdqa %xmm13,%xmm10
  2294. xorps %xmm11,%xmm3
  2295. movdqa %xmm14,%xmm11
  2296. xorps %xmm12,%xmm4
  2297. movups %xmm2,(%rsi)
  2298. movups %xmm3,16(%rsi)
  2299. movups %xmm4,32(%rsi)
  2300. leaq 48(%rsi),%rsi
  2301. jmp .Lxts_dec_done
  2302. .align 16
  2303. .Lxts_dec_four:
  2304. movups (%rdi),%xmm2
  2305. movups 16(%rdi),%xmm3
  2306. movups 32(%rdi),%xmm4
  2307. xorps %xmm10,%xmm2
  2308. movups 48(%rdi),%xmm5
  2309. leaq 64(%rdi),%rdi
  2310. xorps %xmm11,%xmm3
  2311. xorps %xmm12,%xmm4
  2312. xorps %xmm13,%xmm5
  2313. call _aesni_decrypt4
  2314. pxor %xmm10,%xmm2
  2315. movdqa %xmm14,%xmm10
  2316. pxor %xmm11,%xmm3
  2317. movdqa %xmm15,%xmm11
  2318. pxor %xmm12,%xmm4
  2319. movdqu %xmm2,(%rsi)
  2320. pxor %xmm13,%xmm5
  2321. movdqu %xmm3,16(%rsi)
  2322. movdqu %xmm4,32(%rsi)
  2323. movdqu %xmm5,48(%rsi)
  2324. leaq 64(%rsi),%rsi
  2325. jmp .Lxts_dec_done
  2326. .align 16
  2327. .Lxts_dec_done:
  2328. andq $15,%r9
  2329. jz .Lxts_dec_ret
  2330. .Lxts_dec_done2:
  2331. movq %r9,%rdx
  2332. movq %rbp,%rcx
  2333. movl %r10d,%eax
  2334. movups (%rdi),%xmm2
  2335. xorps %xmm11,%xmm2
  2336. movups (%rcx),%xmm0
  2337. movups 16(%rcx),%xmm1
  2338. leaq 32(%rcx),%rcx
  2339. xorps %xmm0,%xmm2
  2340. .Loop_dec1_13:
  2341. .byte 102,15,56,222,209
  2342. decl %eax
  2343. movups (%rcx),%xmm1
  2344. leaq 16(%rcx),%rcx
  2345. jnz .Loop_dec1_13
  2346. .byte 102,15,56,223,209
  2347. xorps %xmm11,%xmm2
  2348. movups %xmm2,(%rsi)
  2349. .Lxts_dec_steal:
  2350. movzbl 16(%rdi),%eax
  2351. movzbl (%rsi),%ecx
  2352. leaq 1(%rdi),%rdi
  2353. movb %al,(%rsi)
  2354. movb %cl,16(%rsi)
  2355. leaq 1(%rsi),%rsi
  2356. subq $1,%rdx
  2357. jnz .Lxts_dec_steal
  2358. subq %r9,%rsi
  2359. movq %rbp,%rcx
  2360. movl %r10d,%eax
  2361. movups (%rsi),%xmm2
  2362. xorps %xmm10,%xmm2
  2363. movups (%rcx),%xmm0
  2364. movups 16(%rcx),%xmm1
  2365. leaq 32(%rcx),%rcx
  2366. xorps %xmm0,%xmm2
  2367. .Loop_dec1_14:
  2368. .byte 102,15,56,222,209
  2369. decl %eax
  2370. movups (%rcx),%xmm1
  2371. leaq 16(%rcx),%rcx
  2372. jnz .Loop_dec1_14
  2373. .byte 102,15,56,223,209
  2374. xorps %xmm10,%xmm2
  2375. movups %xmm2,(%rsi)
  2376. .Lxts_dec_ret:
  2377. xorps %xmm0,%xmm0
  2378. pxor %xmm1,%xmm1
  2379. pxor %xmm2,%xmm2
  2380. pxor %xmm3,%xmm3
  2381. pxor %xmm4,%xmm4
  2382. pxor %xmm5,%xmm5
  2383. pxor %xmm6,%xmm6
  2384. pxor %xmm7,%xmm7
  2385. movaps %xmm0,0(%rsp)
  2386. pxor %xmm8,%xmm8
  2387. movaps %xmm0,16(%rsp)
  2388. pxor %xmm9,%xmm9
  2389. movaps %xmm0,32(%rsp)
  2390. pxor %xmm10,%xmm10
  2391. movaps %xmm0,48(%rsp)
  2392. pxor %xmm11,%xmm11
  2393. movaps %xmm0,64(%rsp)
  2394. pxor %xmm12,%xmm12
  2395. movaps %xmm0,80(%rsp)
  2396. pxor %xmm13,%xmm13
  2397. movaps %xmm0,96(%rsp)
  2398. pxor %xmm14,%xmm14
  2399. pxor %xmm15,%xmm15
  2400. movq -8(%r11),%rbp
  2401. .cfi_restore %rbp
  2402. leaq (%r11),%rsp
  2403. .cfi_def_cfa_register %rsp
  2404. .Lxts_dec_epilogue:
  2405. .byte 0xf3,0xc3
  2406. .cfi_endproc
  2407. .size aesni_xts_decrypt,.-aesni_xts_decrypt
  2408. .globl aesni_ocb_encrypt
  2409. .type aesni_ocb_encrypt,@function
  2410. .align 32
  2411. aesni_ocb_encrypt:
  2412. .cfi_startproc
  2413. leaq (%rsp),%rax
  2414. pushq %rbx
  2415. .cfi_adjust_cfa_offset 8
  2416. .cfi_offset %rbx,-16
  2417. pushq %rbp
  2418. .cfi_adjust_cfa_offset 8
  2419. .cfi_offset %rbp,-24
  2420. pushq %r12
  2421. .cfi_adjust_cfa_offset 8
  2422. .cfi_offset %r12,-32
  2423. pushq %r13
  2424. .cfi_adjust_cfa_offset 8
  2425. .cfi_offset %r13,-40
  2426. pushq %r14
  2427. .cfi_adjust_cfa_offset 8
  2428. .cfi_offset %r14,-48
  2429. movq 8(%rax),%rbx
  2430. movq 8+8(%rax),%rbp
  2431. movl 240(%rcx),%r10d
  2432. movq %rcx,%r11
  2433. shll $4,%r10d
  2434. movups (%rcx),%xmm9
  2435. movups 16(%rcx,%r10,1),%xmm1
  2436. movdqu (%r9),%xmm15
  2437. pxor %xmm1,%xmm9
  2438. pxor %xmm1,%xmm15
  2439. movl $16+32,%eax
  2440. leaq 32(%r11,%r10,1),%rcx
  2441. movups 16(%r11),%xmm1
  2442. subq %r10,%rax
  2443. movq %rax,%r10
  2444. movdqu (%rbx),%xmm10
  2445. movdqu (%rbp),%xmm8
  2446. testq $1,%r8
  2447. jnz .Locb_enc_odd
  2448. bsfq %r8,%r12
  2449. addq $1,%r8
  2450. shlq $4,%r12
  2451. movdqu (%rbx,%r12,1),%xmm7
  2452. movdqu (%rdi),%xmm2
  2453. leaq 16(%rdi),%rdi
  2454. call __ocb_encrypt1
  2455. movdqa %xmm7,%xmm15
  2456. movups %xmm2,(%rsi)
  2457. leaq 16(%rsi),%rsi
  2458. subq $1,%rdx
  2459. jz .Locb_enc_done
  2460. .Locb_enc_odd:
  2461. leaq 1(%r8),%r12
  2462. leaq 3(%r8),%r13
  2463. leaq 5(%r8),%r14
  2464. leaq 6(%r8),%r8
  2465. bsfq %r12,%r12
  2466. bsfq %r13,%r13
  2467. bsfq %r14,%r14
  2468. shlq $4,%r12
  2469. shlq $4,%r13
  2470. shlq $4,%r14
  2471. subq $6,%rdx
  2472. jc .Locb_enc_short
  2473. jmp .Locb_enc_grandloop
  2474. .align 32
  2475. .Locb_enc_grandloop:
  2476. movdqu 0(%rdi),%xmm2
  2477. movdqu 16(%rdi),%xmm3
  2478. movdqu 32(%rdi),%xmm4
  2479. movdqu 48(%rdi),%xmm5
  2480. movdqu 64(%rdi),%xmm6
  2481. movdqu 80(%rdi),%xmm7
  2482. leaq 96(%rdi),%rdi
  2483. call __ocb_encrypt6
  2484. movups %xmm2,0(%rsi)
  2485. movups %xmm3,16(%rsi)
  2486. movups %xmm4,32(%rsi)
  2487. movups %xmm5,48(%rsi)
  2488. movups %xmm6,64(%rsi)
  2489. movups %xmm7,80(%rsi)
  2490. leaq 96(%rsi),%rsi
  2491. subq $6,%rdx
  2492. jnc .Locb_enc_grandloop
  2493. .Locb_enc_short:
  2494. addq $6,%rdx
  2495. jz .Locb_enc_done
  2496. movdqu 0(%rdi),%xmm2
  2497. cmpq $2,%rdx
  2498. jb .Locb_enc_one
  2499. movdqu 16(%rdi),%xmm3
  2500. je .Locb_enc_two
  2501. movdqu 32(%rdi),%xmm4
  2502. cmpq $4,%rdx
  2503. jb .Locb_enc_three
  2504. movdqu 48(%rdi),%xmm5
  2505. je .Locb_enc_four
  2506. movdqu 64(%rdi),%xmm6
  2507. pxor %xmm7,%xmm7
  2508. call __ocb_encrypt6
  2509. movdqa %xmm14,%xmm15
  2510. movups %xmm2,0(%rsi)
  2511. movups %xmm3,16(%rsi)
  2512. movups %xmm4,32(%rsi)
  2513. movups %xmm5,48(%rsi)
  2514. movups %xmm6,64(%rsi)
  2515. jmp .Locb_enc_done
  2516. .align 16
  2517. .Locb_enc_one:
  2518. movdqa %xmm10,%xmm7
  2519. call __ocb_encrypt1
  2520. movdqa %xmm7,%xmm15
  2521. movups %xmm2,0(%rsi)
  2522. jmp .Locb_enc_done
  2523. .align 16
  2524. .Locb_enc_two:
  2525. pxor %xmm4,%xmm4
  2526. pxor %xmm5,%xmm5
  2527. call __ocb_encrypt4
  2528. movdqa %xmm11,%xmm15
  2529. movups %xmm2,0(%rsi)
  2530. movups %xmm3,16(%rsi)
  2531. jmp .Locb_enc_done
  2532. .align 16
  2533. .Locb_enc_three:
  2534. pxor %xmm5,%xmm5
  2535. call __ocb_encrypt4
  2536. movdqa %xmm12,%xmm15
  2537. movups %xmm2,0(%rsi)
  2538. movups %xmm3,16(%rsi)
  2539. movups %xmm4,32(%rsi)
  2540. jmp .Locb_enc_done
  2541. .align 16
  2542. .Locb_enc_four:
  2543. call __ocb_encrypt4
  2544. movdqa %xmm13,%xmm15
  2545. movups %xmm2,0(%rsi)
  2546. movups %xmm3,16(%rsi)
  2547. movups %xmm4,32(%rsi)
  2548. movups %xmm5,48(%rsi)
  2549. .Locb_enc_done:
  2550. pxor %xmm0,%xmm15
  2551. movdqu %xmm8,(%rbp)
  2552. movdqu %xmm15,(%r9)
  2553. xorps %xmm0,%xmm0
  2554. pxor %xmm1,%xmm1
  2555. pxor %xmm2,%xmm2
  2556. pxor %xmm3,%xmm3
  2557. pxor %xmm4,%xmm4
  2558. pxor %xmm5,%xmm5
  2559. pxor %xmm6,%xmm6
  2560. pxor %xmm7,%xmm7
  2561. pxor %xmm8,%xmm8
  2562. pxor %xmm9,%xmm9
  2563. pxor %xmm10,%xmm10
  2564. pxor %xmm11,%xmm11
  2565. pxor %xmm12,%xmm12
  2566. pxor %xmm13,%xmm13
  2567. pxor %xmm14,%xmm14
  2568. pxor %xmm15,%xmm15
  2569. leaq 40(%rsp),%rax
  2570. .cfi_def_cfa %rax,8
  2571. movq -40(%rax),%r14
  2572. .cfi_restore %r14
  2573. movq -32(%rax),%r13
  2574. .cfi_restore %r13
  2575. movq -24(%rax),%r12
  2576. .cfi_restore %r12
  2577. movq -16(%rax),%rbp
  2578. .cfi_restore %rbp
  2579. movq -8(%rax),%rbx
  2580. .cfi_restore %rbx
  2581. leaq (%rax),%rsp
  2582. .cfi_def_cfa_register %rsp
  2583. .Locb_enc_epilogue:
  2584. .byte 0xf3,0xc3
  2585. .cfi_endproc
  2586. .size aesni_ocb_encrypt,.-aesni_ocb_encrypt
  2587. .type __ocb_encrypt6,@function
  2588. .align 32
  2589. __ocb_encrypt6:
  2590. .cfi_startproc
  2591. pxor %xmm9,%xmm15
  2592. movdqu (%rbx,%r12,1),%xmm11
  2593. movdqa %xmm10,%xmm12
  2594. movdqu (%rbx,%r13,1),%xmm13
  2595. movdqa %xmm10,%xmm14
  2596. pxor %xmm15,%xmm10
  2597. movdqu (%rbx,%r14,1),%xmm15
  2598. pxor %xmm10,%xmm11
  2599. pxor %xmm2,%xmm8
  2600. pxor %xmm10,%xmm2
  2601. pxor %xmm11,%xmm12
  2602. pxor %xmm3,%xmm8
  2603. pxor %xmm11,%xmm3
  2604. pxor %xmm12,%xmm13
  2605. pxor %xmm4,%xmm8
  2606. pxor %xmm12,%xmm4
  2607. pxor %xmm13,%xmm14
  2608. pxor %xmm5,%xmm8
  2609. pxor %xmm13,%xmm5
  2610. pxor %xmm14,%xmm15
  2611. pxor %xmm6,%xmm8
  2612. pxor %xmm14,%xmm6
  2613. pxor %xmm7,%xmm8
  2614. pxor %xmm15,%xmm7
  2615. movups 32(%r11),%xmm0
  2616. leaq 1(%r8),%r12
  2617. leaq 3(%r8),%r13
  2618. leaq 5(%r8),%r14
  2619. addq $6,%r8
  2620. pxor %xmm9,%xmm10
  2621. bsfq %r12,%r12
  2622. bsfq %r13,%r13
  2623. bsfq %r14,%r14
  2624. .byte 102,15,56,220,209
  2625. .byte 102,15,56,220,217
  2626. .byte 102,15,56,220,225
  2627. .byte 102,15,56,220,233
  2628. pxor %xmm9,%xmm11
  2629. pxor %xmm9,%xmm12
  2630. .byte 102,15,56,220,241
  2631. pxor %xmm9,%xmm13
  2632. pxor %xmm9,%xmm14
  2633. .byte 102,15,56,220,249
  2634. movups 48(%r11),%xmm1
  2635. pxor %xmm9,%xmm15
  2636. .byte 102,15,56,220,208
  2637. .byte 102,15,56,220,216
  2638. .byte 102,15,56,220,224
  2639. .byte 102,15,56,220,232
  2640. .byte 102,15,56,220,240
  2641. .byte 102,15,56,220,248
  2642. movups 64(%r11),%xmm0
  2643. shlq $4,%r12
  2644. shlq $4,%r13
  2645. jmp .Locb_enc_loop6
  2646. .align 32
  2647. .Locb_enc_loop6:
  2648. .byte 102,15,56,220,209
  2649. .byte 102,15,56,220,217
  2650. .byte 102,15,56,220,225
  2651. .byte 102,15,56,220,233
  2652. .byte 102,15,56,220,241
  2653. .byte 102,15,56,220,249
  2654. movups (%rcx,%rax,1),%xmm1
  2655. addq $32,%rax
  2656. .byte 102,15,56,220,208
  2657. .byte 102,15,56,220,216
  2658. .byte 102,15,56,220,224
  2659. .byte 102,15,56,220,232
  2660. .byte 102,15,56,220,240
  2661. .byte 102,15,56,220,248
  2662. movups -16(%rcx,%rax,1),%xmm0
  2663. jnz .Locb_enc_loop6
  2664. .byte 102,15,56,220,209
  2665. .byte 102,15,56,220,217
  2666. .byte 102,15,56,220,225
  2667. .byte 102,15,56,220,233
  2668. .byte 102,15,56,220,241
  2669. .byte 102,15,56,220,249
  2670. movups 16(%r11),%xmm1
  2671. shlq $4,%r14
  2672. .byte 102,65,15,56,221,210
  2673. movdqu (%rbx),%xmm10
  2674. movq %r10,%rax
  2675. .byte 102,65,15,56,221,219
  2676. .byte 102,65,15,56,221,228
  2677. .byte 102,65,15,56,221,237
  2678. .byte 102,65,15,56,221,246
  2679. .byte 102,65,15,56,221,255
  2680. .byte 0xf3,0xc3
  2681. .cfi_endproc
  2682. .size __ocb_encrypt6,.-__ocb_encrypt6
  2683. .type __ocb_encrypt4,@function
  2684. .align 32
  2685. __ocb_encrypt4:
  2686. .cfi_startproc
  2687. pxor %xmm9,%xmm15
  2688. movdqu (%rbx,%r12,1),%xmm11
  2689. movdqa %xmm10,%xmm12
  2690. movdqu (%rbx,%r13,1),%xmm13
  2691. pxor %xmm15,%xmm10
  2692. pxor %xmm10,%xmm11
  2693. pxor %xmm2,%xmm8
  2694. pxor %xmm10,%xmm2
  2695. pxor %xmm11,%xmm12
  2696. pxor %xmm3,%xmm8
  2697. pxor %xmm11,%xmm3
  2698. pxor %xmm12,%xmm13
  2699. pxor %xmm4,%xmm8
  2700. pxor %xmm12,%xmm4
  2701. pxor %xmm5,%xmm8
  2702. pxor %xmm13,%xmm5
  2703. movups 32(%r11),%xmm0
  2704. pxor %xmm9,%xmm10
  2705. pxor %xmm9,%xmm11
  2706. pxor %xmm9,%xmm12
  2707. pxor %xmm9,%xmm13
  2708. .byte 102,15,56,220,209
  2709. .byte 102,15,56,220,217
  2710. .byte 102,15,56,220,225
  2711. .byte 102,15,56,220,233
  2712. movups 48(%r11),%xmm1
  2713. .byte 102,15,56,220,208
  2714. .byte 102,15,56,220,216
  2715. .byte 102,15,56,220,224
  2716. .byte 102,15,56,220,232
  2717. movups 64(%r11),%xmm0
  2718. jmp .Locb_enc_loop4
  2719. .align 32
  2720. .Locb_enc_loop4:
  2721. .byte 102,15,56,220,209
  2722. .byte 102,15,56,220,217
  2723. .byte 102,15,56,220,225
  2724. .byte 102,15,56,220,233
  2725. movups (%rcx,%rax,1),%xmm1
  2726. addq $32,%rax
  2727. .byte 102,15,56,220,208
  2728. .byte 102,15,56,220,216
  2729. .byte 102,15,56,220,224
  2730. .byte 102,15,56,220,232
  2731. movups -16(%rcx,%rax,1),%xmm0
  2732. jnz .Locb_enc_loop4
  2733. .byte 102,15,56,220,209
  2734. .byte 102,15,56,220,217
  2735. .byte 102,15,56,220,225
  2736. .byte 102,15,56,220,233
  2737. movups 16(%r11),%xmm1
  2738. movq %r10,%rax
  2739. .byte 102,65,15,56,221,210
  2740. .byte 102,65,15,56,221,219
  2741. .byte 102,65,15,56,221,228
  2742. .byte 102,65,15,56,221,237
  2743. .byte 0xf3,0xc3
  2744. .cfi_endproc
  2745. .size __ocb_encrypt4,.-__ocb_encrypt4
  2746. .type __ocb_encrypt1,@function
  2747. .align 32
  2748. __ocb_encrypt1:
  2749. .cfi_startproc
  2750. pxor %xmm15,%xmm7
  2751. pxor %xmm9,%xmm7
  2752. pxor %xmm2,%xmm8
  2753. pxor %xmm7,%xmm2
  2754. movups 32(%r11),%xmm0
  2755. .byte 102,15,56,220,209
  2756. movups 48(%r11),%xmm1
  2757. pxor %xmm9,%xmm7
  2758. .byte 102,15,56,220,208
  2759. movups 64(%r11),%xmm0
  2760. jmp .Locb_enc_loop1
  2761. .align 32
  2762. .Locb_enc_loop1:
  2763. .byte 102,15,56,220,209
  2764. movups (%rcx,%rax,1),%xmm1
  2765. addq $32,%rax
  2766. .byte 102,15,56,220,208
  2767. movups -16(%rcx,%rax,1),%xmm0
  2768. jnz .Locb_enc_loop1
  2769. .byte 102,15,56,220,209
  2770. movups 16(%r11),%xmm1
  2771. movq %r10,%rax
  2772. .byte 102,15,56,221,215
  2773. .byte 0xf3,0xc3
  2774. .cfi_endproc
  2775. .size __ocb_encrypt1,.-__ocb_encrypt1
  2776. .globl aesni_ocb_decrypt
  2777. .type aesni_ocb_decrypt,@function
  2778. .align 32
  2779. aesni_ocb_decrypt:
  2780. .cfi_startproc
  2781. leaq (%rsp),%rax
  2782. pushq %rbx
  2783. .cfi_adjust_cfa_offset 8
  2784. .cfi_offset %rbx,-16
  2785. pushq %rbp
  2786. .cfi_adjust_cfa_offset 8
  2787. .cfi_offset %rbp,-24
  2788. pushq %r12
  2789. .cfi_adjust_cfa_offset 8
  2790. .cfi_offset %r12,-32
  2791. pushq %r13
  2792. .cfi_adjust_cfa_offset 8
  2793. .cfi_offset %r13,-40
  2794. pushq %r14
  2795. .cfi_adjust_cfa_offset 8
  2796. .cfi_offset %r14,-48
  2797. movq 8(%rax),%rbx
  2798. movq 8+8(%rax),%rbp
  2799. movl 240(%rcx),%r10d
  2800. movq %rcx,%r11
  2801. shll $4,%r10d
  2802. movups (%rcx),%xmm9
  2803. movups 16(%rcx,%r10,1),%xmm1
  2804. movdqu (%r9),%xmm15
  2805. pxor %xmm1,%xmm9
  2806. pxor %xmm1,%xmm15
  2807. movl $16+32,%eax
  2808. leaq 32(%r11,%r10,1),%rcx
  2809. movups 16(%r11),%xmm1
  2810. subq %r10,%rax
  2811. movq %rax,%r10
  2812. movdqu (%rbx),%xmm10
  2813. movdqu (%rbp),%xmm8
  2814. testq $1,%r8
  2815. jnz .Locb_dec_odd
  2816. bsfq %r8,%r12
  2817. addq $1,%r8
  2818. shlq $4,%r12
  2819. movdqu (%rbx,%r12,1),%xmm7
  2820. movdqu (%rdi),%xmm2
  2821. leaq 16(%rdi),%rdi
  2822. call __ocb_decrypt1
  2823. movdqa %xmm7,%xmm15
  2824. movups %xmm2,(%rsi)
  2825. xorps %xmm2,%xmm8
  2826. leaq 16(%rsi),%rsi
  2827. subq $1,%rdx
  2828. jz .Locb_dec_done
  2829. .Locb_dec_odd:
  2830. leaq 1(%r8),%r12
  2831. leaq 3(%r8),%r13
  2832. leaq 5(%r8),%r14
  2833. leaq 6(%r8),%r8
  2834. bsfq %r12,%r12
  2835. bsfq %r13,%r13
  2836. bsfq %r14,%r14
  2837. shlq $4,%r12
  2838. shlq $4,%r13
  2839. shlq $4,%r14
  2840. subq $6,%rdx
  2841. jc .Locb_dec_short
  2842. jmp .Locb_dec_grandloop
  2843. .align 32
  2844. .Locb_dec_grandloop:
  2845. movdqu 0(%rdi),%xmm2
  2846. movdqu 16(%rdi),%xmm3
  2847. movdqu 32(%rdi),%xmm4
  2848. movdqu 48(%rdi),%xmm5
  2849. movdqu 64(%rdi),%xmm6
  2850. movdqu 80(%rdi),%xmm7
  2851. leaq 96(%rdi),%rdi
  2852. call __ocb_decrypt6
  2853. movups %xmm2,0(%rsi)
  2854. pxor %xmm2,%xmm8
  2855. movups %xmm3,16(%rsi)
  2856. pxor %xmm3,%xmm8
  2857. movups %xmm4,32(%rsi)
  2858. pxor %xmm4,%xmm8
  2859. movups %xmm5,48(%rsi)
  2860. pxor %xmm5,%xmm8
  2861. movups %xmm6,64(%rsi)
  2862. pxor %xmm6,%xmm8
  2863. movups %xmm7,80(%rsi)
  2864. pxor %xmm7,%xmm8
  2865. leaq 96(%rsi),%rsi
  2866. subq $6,%rdx
  2867. jnc .Locb_dec_grandloop
  2868. .Locb_dec_short:
  2869. addq $6,%rdx
  2870. jz .Locb_dec_done
  2871. movdqu 0(%rdi),%xmm2
  2872. cmpq $2,%rdx
  2873. jb .Locb_dec_one
  2874. movdqu 16(%rdi),%xmm3
  2875. je .Locb_dec_two
  2876. movdqu 32(%rdi),%xmm4
  2877. cmpq $4,%rdx
  2878. jb .Locb_dec_three
  2879. movdqu 48(%rdi),%xmm5
  2880. je .Locb_dec_four
  2881. movdqu 64(%rdi),%xmm6
  2882. pxor %xmm7,%xmm7
  2883. call __ocb_decrypt6
  2884. movdqa %xmm14,%xmm15
  2885. movups %xmm2,0(%rsi)
  2886. pxor %xmm2,%xmm8
  2887. movups %xmm3,16(%rsi)
  2888. pxor %xmm3,%xmm8
  2889. movups %xmm4,32(%rsi)
  2890. pxor %xmm4,%xmm8
  2891. movups %xmm5,48(%rsi)
  2892. pxor %xmm5,%xmm8
  2893. movups %xmm6,64(%rsi)
  2894. pxor %xmm6,%xmm8
  2895. jmp .Locb_dec_done
  2896. .align 16
  2897. .Locb_dec_one:
  2898. movdqa %xmm10,%xmm7
  2899. call __ocb_decrypt1
  2900. movdqa %xmm7,%xmm15
  2901. movups %xmm2,0(%rsi)
  2902. xorps %xmm2,%xmm8
  2903. jmp .Locb_dec_done
  2904. .align 16
  2905. .Locb_dec_two:
  2906. pxor %xmm4,%xmm4
  2907. pxor %xmm5,%xmm5
  2908. call __ocb_decrypt4
  2909. movdqa %xmm11,%xmm15
  2910. movups %xmm2,0(%rsi)
  2911. xorps %xmm2,%xmm8
  2912. movups %xmm3,16(%rsi)
  2913. xorps %xmm3,%xmm8
  2914. jmp .Locb_dec_done
  2915. .align 16
  2916. .Locb_dec_three:
  2917. pxor %xmm5,%xmm5
  2918. call __ocb_decrypt4
  2919. movdqa %xmm12,%xmm15
  2920. movups %xmm2,0(%rsi)
  2921. xorps %xmm2,%xmm8
  2922. movups %xmm3,16(%rsi)
  2923. xorps %xmm3,%xmm8
  2924. movups %xmm4,32(%rsi)
  2925. xorps %xmm4,%xmm8
  2926. jmp .Locb_dec_done
  2927. .align 16
  2928. .Locb_dec_four:
  2929. call __ocb_decrypt4
  2930. movdqa %xmm13,%xmm15
  2931. movups %xmm2,0(%rsi)
  2932. pxor %xmm2,%xmm8
  2933. movups %xmm3,16(%rsi)
  2934. pxor %xmm3,%xmm8
  2935. movups %xmm4,32(%rsi)
  2936. pxor %xmm4,%xmm8
  2937. movups %xmm5,48(%rsi)
  2938. pxor %xmm5,%xmm8
  2939. .Locb_dec_done:
  2940. pxor %xmm0,%xmm15
  2941. movdqu %xmm8,(%rbp)
  2942. movdqu %xmm15,(%r9)
  2943. xorps %xmm0,%xmm0
  2944. pxor %xmm1,%xmm1
  2945. pxor %xmm2,%xmm2
  2946. pxor %xmm3,%xmm3
  2947. pxor %xmm4,%xmm4
  2948. pxor %xmm5,%xmm5
  2949. pxor %xmm6,%xmm6
  2950. pxor %xmm7,%xmm7
  2951. pxor %xmm8,%xmm8
  2952. pxor %xmm9,%xmm9
  2953. pxor %xmm10,%xmm10
  2954. pxor %xmm11,%xmm11
  2955. pxor %xmm12,%xmm12
  2956. pxor %xmm13,%xmm13
  2957. pxor %xmm14,%xmm14
  2958. pxor %xmm15,%xmm15
  2959. leaq 40(%rsp),%rax
  2960. .cfi_def_cfa %rax,8
  2961. movq -40(%rax),%r14
  2962. .cfi_restore %r14
  2963. movq -32(%rax),%r13
  2964. .cfi_restore %r13
  2965. movq -24(%rax),%r12
  2966. .cfi_restore %r12
  2967. movq -16(%rax),%rbp
  2968. .cfi_restore %rbp
  2969. movq -8(%rax),%rbx
  2970. .cfi_restore %rbx
  2971. leaq (%rax),%rsp
  2972. .cfi_def_cfa_register %rsp
  2973. .Locb_dec_epilogue:
  2974. .byte 0xf3,0xc3
  2975. .cfi_endproc
  2976. .size aesni_ocb_decrypt,.-aesni_ocb_decrypt
  2977. .type __ocb_decrypt6,@function
  2978. .align 32
  2979. __ocb_decrypt6:
  2980. .cfi_startproc
  2981. pxor %xmm9,%xmm15
  2982. movdqu (%rbx,%r12,1),%xmm11
  2983. movdqa %xmm10,%xmm12
  2984. movdqu (%rbx,%r13,1),%xmm13
  2985. movdqa %xmm10,%xmm14
  2986. pxor %xmm15,%xmm10
  2987. movdqu (%rbx,%r14,1),%xmm15
  2988. pxor %xmm10,%xmm11
  2989. pxor %xmm10,%xmm2
  2990. pxor %xmm11,%xmm12
  2991. pxor %xmm11,%xmm3
  2992. pxor %xmm12,%xmm13
  2993. pxor %xmm12,%xmm4
  2994. pxor %xmm13,%xmm14
  2995. pxor %xmm13,%xmm5
  2996. pxor %xmm14,%xmm15
  2997. pxor %xmm14,%xmm6
  2998. pxor %xmm15,%xmm7
  2999. movups 32(%r11),%xmm0
  3000. leaq 1(%r8),%r12
  3001. leaq 3(%r8),%r13
  3002. leaq 5(%r8),%r14
  3003. addq $6,%r8
  3004. pxor %xmm9,%xmm10
  3005. bsfq %r12,%r12
  3006. bsfq %r13,%r13
  3007. bsfq %r14,%r14
  3008. .byte 102,15,56,222,209
  3009. .byte 102,15,56,222,217
  3010. .byte 102,15,56,222,225
  3011. .byte 102,15,56,222,233
  3012. pxor %xmm9,%xmm11
  3013. pxor %xmm9,%xmm12
  3014. .byte 102,15,56,222,241
  3015. pxor %xmm9,%xmm13
  3016. pxor %xmm9,%xmm14
  3017. .byte 102,15,56,222,249
  3018. movups 48(%r11),%xmm1
  3019. pxor %xmm9,%xmm15
  3020. .byte 102,15,56,222,208
  3021. .byte 102,15,56,222,216
  3022. .byte 102,15,56,222,224
  3023. .byte 102,15,56,222,232
  3024. .byte 102,15,56,222,240
  3025. .byte 102,15,56,222,248
  3026. movups 64(%r11),%xmm0
  3027. shlq $4,%r12
  3028. shlq $4,%r13
  3029. jmp .Locb_dec_loop6
  3030. .align 32
  3031. .Locb_dec_loop6:
  3032. .byte 102,15,56,222,209
  3033. .byte 102,15,56,222,217
  3034. .byte 102,15,56,222,225
  3035. .byte 102,15,56,222,233
  3036. .byte 102,15,56,222,241
  3037. .byte 102,15,56,222,249
  3038. movups (%rcx,%rax,1),%xmm1
  3039. addq $32,%rax
  3040. .byte 102,15,56,222,208
  3041. .byte 102,15,56,222,216
  3042. .byte 102,15,56,222,224
  3043. .byte 102,15,56,222,232
  3044. .byte 102,15,56,222,240
  3045. .byte 102,15,56,222,248
  3046. movups -16(%rcx,%rax,1),%xmm0
  3047. jnz .Locb_dec_loop6
  3048. .byte 102,15,56,222,209
  3049. .byte 102,15,56,222,217
  3050. .byte 102,15,56,222,225
  3051. .byte 102,15,56,222,233
  3052. .byte 102,15,56,222,241
  3053. .byte 102,15,56,222,249
  3054. movups 16(%r11),%xmm1
  3055. shlq $4,%r14
  3056. .byte 102,65,15,56,223,210
  3057. movdqu (%rbx),%xmm10
  3058. movq %r10,%rax
  3059. .byte 102,65,15,56,223,219
  3060. .byte 102,65,15,56,223,228
  3061. .byte 102,65,15,56,223,237
  3062. .byte 102,65,15,56,223,246
  3063. .byte 102,65,15,56,223,255
  3064. .byte 0xf3,0xc3
  3065. .cfi_endproc
  3066. .size __ocb_decrypt6,.-__ocb_decrypt6
  3067. .type __ocb_decrypt4,@function
  3068. .align 32
  3069. __ocb_decrypt4:
  3070. .cfi_startproc
  3071. pxor %xmm9,%xmm15
  3072. movdqu (%rbx,%r12,1),%xmm11
  3073. movdqa %xmm10,%xmm12
  3074. movdqu (%rbx,%r13,1),%xmm13
  3075. pxor %xmm15,%xmm10
  3076. pxor %xmm10,%xmm11
  3077. pxor %xmm10,%xmm2
  3078. pxor %xmm11,%xmm12
  3079. pxor %xmm11,%xmm3
  3080. pxor %xmm12,%xmm13
  3081. pxor %xmm12,%xmm4
  3082. pxor %xmm13,%xmm5
  3083. movups 32(%r11),%xmm0
  3084. pxor %xmm9,%xmm10
  3085. pxor %xmm9,%xmm11
  3086. pxor %xmm9,%xmm12
  3087. pxor %xmm9,%xmm13
  3088. .byte 102,15,56,222,209
  3089. .byte 102,15,56,222,217
  3090. .byte 102,15,56,222,225
  3091. .byte 102,15,56,222,233
  3092. movups 48(%r11),%xmm1
  3093. .byte 102,15,56,222,208
  3094. .byte 102,15,56,222,216
  3095. .byte 102,15,56,222,224
  3096. .byte 102,15,56,222,232
  3097. movups 64(%r11),%xmm0
  3098. jmp .Locb_dec_loop4
  3099. .align 32
  3100. .Locb_dec_loop4:
  3101. .byte 102,15,56,222,209
  3102. .byte 102,15,56,222,217
  3103. .byte 102,15,56,222,225
  3104. .byte 102,15,56,222,233
  3105. movups (%rcx,%rax,1),%xmm1
  3106. addq $32,%rax
  3107. .byte 102,15,56,222,208
  3108. .byte 102,15,56,222,216
  3109. .byte 102,15,56,222,224
  3110. .byte 102,15,56,222,232
  3111. movups -16(%rcx,%rax,1),%xmm0
  3112. jnz .Locb_dec_loop4
  3113. .byte 102,15,56,222,209
  3114. .byte 102,15,56,222,217
  3115. .byte 102,15,56,222,225
  3116. .byte 102,15,56,222,233
  3117. movups 16(%r11),%xmm1
  3118. movq %r10,%rax
  3119. .byte 102,65,15,56,223,210
  3120. .byte 102,65,15,56,223,219
  3121. .byte 102,65,15,56,223,228
  3122. .byte 102,65,15,56,223,237
  3123. .byte 0xf3,0xc3
  3124. .cfi_endproc
  3125. .size __ocb_decrypt4,.-__ocb_decrypt4
  3126. .type __ocb_decrypt1,@function
  3127. .align 32
  3128. __ocb_decrypt1:
  3129. .cfi_startproc
  3130. pxor %xmm15,%xmm7
  3131. pxor %xmm9,%xmm7
  3132. pxor %xmm7,%xmm2
  3133. movups 32(%r11),%xmm0
  3134. .byte 102,15,56,222,209
  3135. movups 48(%r11),%xmm1
  3136. pxor %xmm9,%xmm7
  3137. .byte 102,15,56,222,208
  3138. movups 64(%r11),%xmm0
  3139. jmp .Locb_dec_loop1
  3140. .align 32
  3141. .Locb_dec_loop1:
  3142. .byte 102,15,56,222,209
  3143. movups (%rcx,%rax,1),%xmm1
  3144. addq $32,%rax
  3145. .byte 102,15,56,222,208
  3146. movups -16(%rcx,%rax,1),%xmm0
  3147. jnz .Locb_dec_loop1
  3148. .byte 102,15,56,222,209
  3149. movups 16(%r11),%xmm1
  3150. movq %r10,%rax
  3151. .byte 102,15,56,223,215
  3152. .byte 0xf3,0xc3
  3153. .cfi_endproc
  3154. .size __ocb_decrypt1,.-__ocb_decrypt1
  3155. .globl aesni_cbc_encrypt
  3156. .type aesni_cbc_encrypt,@function
  3157. .align 16
  3158. aesni_cbc_encrypt:
  3159. .cfi_startproc
  3160. testq %rdx,%rdx
  3161. jz .Lcbc_ret
  3162. movl 240(%rcx),%r10d
  3163. movq %rcx,%r11
  3164. testl %r9d,%r9d
  3165. jz .Lcbc_decrypt
  3166. movups (%r8),%xmm2
  3167. movl %r10d,%eax
  3168. cmpq $16,%rdx
  3169. jb .Lcbc_enc_tail
  3170. subq $16,%rdx
  3171. jmp .Lcbc_enc_loop
  3172. .align 16
  3173. .Lcbc_enc_loop:
  3174. movups (%rdi),%xmm3
  3175. leaq 16(%rdi),%rdi
  3176. movups (%rcx),%xmm0
  3177. movups 16(%rcx),%xmm1
  3178. xorps %xmm0,%xmm3
  3179. leaq 32(%rcx),%rcx
  3180. xorps %xmm3,%xmm2
  3181. .Loop_enc1_15:
  3182. .byte 102,15,56,220,209
  3183. decl %eax
  3184. movups (%rcx),%xmm1
  3185. leaq 16(%rcx),%rcx
  3186. jnz .Loop_enc1_15
  3187. .byte 102,15,56,221,209
  3188. movl %r10d,%eax
  3189. movq %r11,%rcx
  3190. movups %xmm2,0(%rsi)
  3191. leaq 16(%rsi),%rsi
  3192. subq $16,%rdx
  3193. jnc .Lcbc_enc_loop
  3194. addq $16,%rdx
  3195. jnz .Lcbc_enc_tail
  3196. pxor %xmm0,%xmm0
  3197. pxor %xmm1,%xmm1
  3198. movups %xmm2,(%r8)
  3199. pxor %xmm2,%xmm2
  3200. pxor %xmm3,%xmm3
  3201. jmp .Lcbc_ret
  3202. .Lcbc_enc_tail:
  3203. movq %rdx,%rcx
  3204. xchgq %rdi,%rsi
  3205. .long 0x9066A4F3
  3206. movl $16,%ecx
  3207. subq %rdx,%rcx
  3208. xorl %eax,%eax
  3209. .long 0x9066AAF3
  3210. leaq -16(%rdi),%rdi
  3211. movl %r10d,%eax
  3212. movq %rdi,%rsi
  3213. movq %r11,%rcx
  3214. xorq %rdx,%rdx
  3215. jmp .Lcbc_enc_loop
  3216. .align 16
  3217. .Lcbc_decrypt:
  3218. cmpq $16,%rdx
  3219. jne .Lcbc_decrypt_bulk
  3220. movdqu (%rdi),%xmm2
  3221. movdqu (%r8),%xmm3
  3222. movdqa %xmm2,%xmm4
  3223. movups (%rcx),%xmm0
  3224. movups 16(%rcx),%xmm1
  3225. leaq 32(%rcx),%rcx
  3226. xorps %xmm0,%xmm2
  3227. .Loop_dec1_16:
  3228. .byte 102,15,56,222,209
  3229. decl %r10d
  3230. movups (%rcx),%xmm1
  3231. leaq 16(%rcx),%rcx
  3232. jnz .Loop_dec1_16
  3233. .byte 102,15,56,223,209
  3234. pxor %xmm0,%xmm0
  3235. pxor %xmm1,%xmm1
  3236. movdqu %xmm4,(%r8)
  3237. xorps %xmm3,%xmm2
  3238. pxor %xmm3,%xmm3
  3239. movups %xmm2,(%rsi)
  3240. pxor %xmm2,%xmm2
  3241. jmp .Lcbc_ret
  3242. .align 16
  3243. .Lcbc_decrypt_bulk:
  3244. leaq (%rsp),%r11
  3245. .cfi_def_cfa_register %r11
  3246. pushq %rbp
  3247. .cfi_offset %rbp,-16
  3248. subq $16,%rsp
  3249. andq $-16,%rsp
  3250. movq %rcx,%rbp
  3251. movups (%r8),%xmm10
  3252. movl %r10d,%eax
  3253. cmpq $0x50,%rdx
  3254. jbe .Lcbc_dec_tail
  3255. movups (%rcx),%xmm0
  3256. movdqu 0(%rdi),%xmm2
  3257. movdqu 16(%rdi),%xmm3
  3258. movdqa %xmm2,%xmm11
  3259. movdqu 32(%rdi),%xmm4
  3260. movdqa %xmm3,%xmm12
  3261. movdqu 48(%rdi),%xmm5
  3262. movdqa %xmm4,%xmm13
  3263. movdqu 64(%rdi),%xmm6
  3264. movdqa %xmm5,%xmm14
  3265. movdqu 80(%rdi),%xmm7
  3266. movdqa %xmm6,%xmm15
  3267. movl OPENSSL_ia32cap_P+4(%rip),%r9d
  3268. cmpq $0x70,%rdx
  3269. jbe .Lcbc_dec_six_or_seven
  3270. andl $71303168,%r9d
  3271. subq $0x50,%rdx
  3272. cmpl $4194304,%r9d
  3273. je .Lcbc_dec_loop6_enter
  3274. subq $0x20,%rdx
  3275. leaq 112(%rcx),%rcx
  3276. jmp .Lcbc_dec_loop8_enter
  3277. .align 16
  3278. .Lcbc_dec_loop8:
  3279. movups %xmm9,(%rsi)
  3280. leaq 16(%rsi),%rsi
  3281. .Lcbc_dec_loop8_enter:
  3282. movdqu 96(%rdi),%xmm8
  3283. pxor %xmm0,%xmm2
  3284. movdqu 112(%rdi),%xmm9
  3285. pxor %xmm0,%xmm3
  3286. movups 16-112(%rcx),%xmm1
  3287. pxor %xmm0,%xmm4
  3288. movq $-1,%rbp
  3289. cmpq $0x70,%rdx
  3290. pxor %xmm0,%xmm5
  3291. pxor %xmm0,%xmm6
  3292. pxor %xmm0,%xmm7
  3293. pxor %xmm0,%xmm8
  3294. .byte 102,15,56,222,209
  3295. pxor %xmm0,%xmm9
  3296. movups 32-112(%rcx),%xmm0
  3297. .byte 102,15,56,222,217
  3298. .byte 102,15,56,222,225
  3299. .byte 102,15,56,222,233
  3300. .byte 102,15,56,222,241
  3301. .byte 102,15,56,222,249
  3302. .byte 102,68,15,56,222,193
  3303. adcq $0,%rbp
  3304. andq $128,%rbp
  3305. .byte 102,68,15,56,222,201
  3306. addq %rdi,%rbp
  3307. movups 48-112(%rcx),%xmm1
  3308. .byte 102,15,56,222,208
  3309. .byte 102,15,56,222,216
  3310. .byte 102,15,56,222,224
  3311. .byte 102,15,56,222,232
  3312. .byte 102,15,56,222,240
  3313. .byte 102,15,56,222,248
  3314. .byte 102,68,15,56,222,192
  3315. .byte 102,68,15,56,222,200
  3316. movups 64-112(%rcx),%xmm0
  3317. nop
  3318. .byte 102,15,56,222,209
  3319. .byte 102,15,56,222,217
  3320. .byte 102,15,56,222,225
  3321. .byte 102,15,56,222,233
  3322. .byte 102,15,56,222,241
  3323. .byte 102,15,56,222,249
  3324. .byte 102,68,15,56,222,193
  3325. .byte 102,68,15,56,222,201
  3326. movups 80-112(%rcx),%xmm1
  3327. nop
  3328. .byte 102,15,56,222,208
  3329. .byte 102,15,56,222,216
  3330. .byte 102,15,56,222,224
  3331. .byte 102,15,56,222,232
  3332. .byte 102,15,56,222,240
  3333. .byte 102,15,56,222,248
  3334. .byte 102,68,15,56,222,192
  3335. .byte 102,68,15,56,222,200
  3336. movups 96-112(%rcx),%xmm0
  3337. nop
  3338. .byte 102,15,56,222,209
  3339. .byte 102,15,56,222,217
  3340. .byte 102,15,56,222,225
  3341. .byte 102,15,56,222,233
  3342. .byte 102,15,56,222,241
  3343. .byte 102,15,56,222,249
  3344. .byte 102,68,15,56,222,193
  3345. .byte 102,68,15,56,222,201
  3346. movups 112-112(%rcx),%xmm1
  3347. nop
  3348. .byte 102,15,56,222,208
  3349. .byte 102,15,56,222,216
  3350. .byte 102,15,56,222,224
  3351. .byte 102,15,56,222,232
  3352. .byte 102,15,56,222,240
  3353. .byte 102,15,56,222,248
  3354. .byte 102,68,15,56,222,192
  3355. .byte 102,68,15,56,222,200
  3356. movups 128-112(%rcx),%xmm0
  3357. nop
  3358. .byte 102,15,56,222,209
  3359. .byte 102,15,56,222,217
  3360. .byte 102,15,56,222,225
  3361. .byte 102,15,56,222,233
  3362. .byte 102,15,56,222,241
  3363. .byte 102,15,56,222,249
  3364. .byte 102,68,15,56,222,193
  3365. .byte 102,68,15,56,222,201
  3366. movups 144-112(%rcx),%xmm1
  3367. cmpl $11,%eax
  3368. .byte 102,15,56,222,208
  3369. .byte 102,15,56,222,216
  3370. .byte 102,15,56,222,224
  3371. .byte 102,15,56,222,232
  3372. .byte 102,15,56,222,240
  3373. .byte 102,15,56,222,248
  3374. .byte 102,68,15,56,222,192
  3375. .byte 102,68,15,56,222,200
  3376. movups 160-112(%rcx),%xmm0
  3377. jb .Lcbc_dec_done
  3378. .byte 102,15,56,222,209
  3379. .byte 102,15,56,222,217
  3380. .byte 102,15,56,222,225
  3381. .byte 102,15,56,222,233
  3382. .byte 102,15,56,222,241
  3383. .byte 102,15,56,222,249
  3384. .byte 102,68,15,56,222,193
  3385. .byte 102,68,15,56,222,201
  3386. movups 176-112(%rcx),%xmm1
  3387. nop
  3388. .byte 102,15,56,222,208
  3389. .byte 102,15,56,222,216
  3390. .byte 102,15,56,222,224
  3391. .byte 102,15,56,222,232
  3392. .byte 102,15,56,222,240
  3393. .byte 102,15,56,222,248
  3394. .byte 102,68,15,56,222,192
  3395. .byte 102,68,15,56,222,200
  3396. movups 192-112(%rcx),%xmm0
  3397. je .Lcbc_dec_done
  3398. .byte 102,15,56,222,209
  3399. .byte 102,15,56,222,217
  3400. .byte 102,15,56,222,225
  3401. .byte 102,15,56,222,233
  3402. .byte 102,15,56,222,241
  3403. .byte 102,15,56,222,249
  3404. .byte 102,68,15,56,222,193
  3405. .byte 102,68,15,56,222,201
  3406. movups 208-112(%rcx),%xmm1
  3407. nop
  3408. .byte 102,15,56,222,208
  3409. .byte 102,15,56,222,216
  3410. .byte 102,15,56,222,224
  3411. .byte 102,15,56,222,232
  3412. .byte 102,15,56,222,240
  3413. .byte 102,15,56,222,248
  3414. .byte 102,68,15,56,222,192
  3415. .byte 102,68,15,56,222,200
  3416. movups 224-112(%rcx),%xmm0
  3417. jmp .Lcbc_dec_done
  3418. .align 16
  3419. .Lcbc_dec_done:
  3420. .byte 102,15,56,222,209
  3421. .byte 102,15,56,222,217
  3422. pxor %xmm0,%xmm10
  3423. pxor %xmm0,%xmm11
  3424. .byte 102,15,56,222,225
  3425. .byte 102,15,56,222,233
  3426. pxor %xmm0,%xmm12
  3427. pxor %xmm0,%xmm13
  3428. .byte 102,15,56,222,241
  3429. .byte 102,15,56,222,249
  3430. pxor %xmm0,%xmm14
  3431. pxor %xmm0,%xmm15
  3432. .byte 102,68,15,56,222,193
  3433. .byte 102,68,15,56,222,201
  3434. movdqu 80(%rdi),%xmm1
  3435. .byte 102,65,15,56,223,210
  3436. movdqu 96(%rdi),%xmm10
  3437. pxor %xmm0,%xmm1
  3438. .byte 102,65,15,56,223,219
  3439. pxor %xmm0,%xmm10
  3440. movdqu 112(%rdi),%xmm0
  3441. .byte 102,65,15,56,223,228
  3442. leaq 128(%rdi),%rdi
  3443. movdqu 0(%rbp),%xmm11
  3444. .byte 102,65,15,56,223,237
  3445. .byte 102,65,15,56,223,246
  3446. movdqu 16(%rbp),%xmm12
  3447. movdqu 32(%rbp),%xmm13
  3448. .byte 102,65,15,56,223,255
  3449. .byte 102,68,15,56,223,193
  3450. movdqu 48(%rbp),%xmm14
  3451. movdqu 64(%rbp),%xmm15
  3452. .byte 102,69,15,56,223,202
  3453. movdqa %xmm0,%xmm10
  3454. movdqu 80(%rbp),%xmm1
  3455. movups -112(%rcx),%xmm0
  3456. movups %xmm2,(%rsi)
  3457. movdqa %xmm11,%xmm2
  3458. movups %xmm3,16(%rsi)
  3459. movdqa %xmm12,%xmm3
  3460. movups %xmm4,32(%rsi)
  3461. movdqa %xmm13,%xmm4
  3462. movups %xmm5,48(%rsi)
  3463. movdqa %xmm14,%xmm5
  3464. movups %xmm6,64(%rsi)
  3465. movdqa %xmm15,%xmm6
  3466. movups %xmm7,80(%rsi)
  3467. movdqa %xmm1,%xmm7
  3468. movups %xmm8,96(%rsi)
  3469. leaq 112(%rsi),%rsi
  3470. subq $0x80,%rdx
  3471. ja .Lcbc_dec_loop8
  3472. movaps %xmm9,%xmm2
  3473. leaq -112(%rcx),%rcx
  3474. addq $0x70,%rdx
  3475. jle .Lcbc_dec_clear_tail_collected
  3476. movups %xmm9,(%rsi)
  3477. leaq 16(%rsi),%rsi
  3478. cmpq $0x50,%rdx
  3479. jbe .Lcbc_dec_tail
  3480. movaps %xmm11,%xmm2
  3481. .Lcbc_dec_six_or_seven:
  3482. cmpq $0x60,%rdx
  3483. ja .Lcbc_dec_seven
  3484. movaps %xmm7,%xmm8
  3485. call _aesni_decrypt6
  3486. pxor %xmm10,%xmm2
  3487. movaps %xmm8,%xmm10
  3488. pxor %xmm11,%xmm3
  3489. movdqu %xmm2,(%rsi)
  3490. pxor %xmm12,%xmm4
  3491. movdqu %xmm3,16(%rsi)
  3492. pxor %xmm3,%xmm3
  3493. pxor %xmm13,%xmm5
  3494. movdqu %xmm4,32(%rsi)
  3495. pxor %xmm4,%xmm4
  3496. pxor %xmm14,%xmm6
  3497. movdqu %xmm5,48(%rsi)
  3498. pxor %xmm5,%xmm5
  3499. pxor %xmm15,%xmm7
  3500. movdqu %xmm6,64(%rsi)
  3501. pxor %xmm6,%xmm6
  3502. leaq 80(%rsi),%rsi
  3503. movdqa %xmm7,%xmm2
  3504. pxor %xmm7,%xmm7
  3505. jmp .Lcbc_dec_tail_collected
  3506. .align 16
  3507. .Lcbc_dec_seven:
  3508. movups 96(%rdi),%xmm8
  3509. xorps %xmm9,%xmm9
  3510. call _aesni_decrypt8
  3511. movups 80(%rdi),%xmm9
  3512. pxor %xmm10,%xmm2
  3513. movups 96(%rdi),%xmm10
  3514. pxor %xmm11,%xmm3
  3515. movdqu %xmm2,(%rsi)
  3516. pxor %xmm12,%xmm4
  3517. movdqu %xmm3,16(%rsi)
  3518. pxor %xmm3,%xmm3
  3519. pxor %xmm13,%xmm5
  3520. movdqu %xmm4,32(%rsi)
  3521. pxor %xmm4,%xmm4
  3522. pxor %xmm14,%xmm6
  3523. movdqu %xmm5,48(%rsi)
  3524. pxor %xmm5,%xmm5
  3525. pxor %xmm15,%xmm7
  3526. movdqu %xmm6,64(%rsi)
  3527. pxor %xmm6,%xmm6
  3528. pxor %xmm9,%xmm8
  3529. movdqu %xmm7,80(%rsi)
  3530. pxor %xmm7,%xmm7
  3531. leaq 96(%rsi),%rsi
  3532. movdqa %xmm8,%xmm2
  3533. pxor %xmm8,%xmm8
  3534. pxor %xmm9,%xmm9
  3535. jmp .Lcbc_dec_tail_collected
  3536. .align 16
  3537. .Lcbc_dec_loop6:
  3538. movups %xmm7,(%rsi)
  3539. leaq 16(%rsi),%rsi
  3540. movdqu 0(%rdi),%xmm2
  3541. movdqu 16(%rdi),%xmm3
  3542. movdqa %xmm2,%xmm11
  3543. movdqu 32(%rdi),%xmm4
  3544. movdqa %xmm3,%xmm12
  3545. movdqu 48(%rdi),%xmm5
  3546. movdqa %xmm4,%xmm13
  3547. movdqu 64(%rdi),%xmm6
  3548. movdqa %xmm5,%xmm14
  3549. movdqu 80(%rdi),%xmm7
  3550. movdqa %xmm6,%xmm15
  3551. .Lcbc_dec_loop6_enter:
  3552. leaq 96(%rdi),%rdi
  3553. movdqa %xmm7,%xmm8
  3554. call _aesni_decrypt6
  3555. pxor %xmm10,%xmm2
  3556. movdqa %xmm8,%xmm10
  3557. pxor %xmm11,%xmm3
  3558. movdqu %xmm2,(%rsi)
  3559. pxor %xmm12,%xmm4
  3560. movdqu %xmm3,16(%rsi)
  3561. pxor %xmm13,%xmm5
  3562. movdqu %xmm4,32(%rsi)
  3563. pxor %xmm14,%xmm6
  3564. movq %rbp,%rcx
  3565. movdqu %xmm5,48(%rsi)
  3566. pxor %xmm15,%xmm7
  3567. movl %r10d,%eax
  3568. movdqu %xmm6,64(%rsi)
  3569. leaq 80(%rsi),%rsi
  3570. subq $0x60,%rdx
  3571. ja .Lcbc_dec_loop6
  3572. movdqa %xmm7,%xmm2
  3573. addq $0x50,%rdx
  3574. jle .Lcbc_dec_clear_tail_collected
  3575. movups %xmm7,(%rsi)
  3576. leaq 16(%rsi),%rsi
  3577. .Lcbc_dec_tail:
  3578. movups (%rdi),%xmm2
  3579. subq $0x10,%rdx
  3580. jbe .Lcbc_dec_one
  3581. movups 16(%rdi),%xmm3
  3582. movaps %xmm2,%xmm11
  3583. subq $0x10,%rdx
  3584. jbe .Lcbc_dec_two
  3585. movups 32(%rdi),%xmm4
  3586. movaps %xmm3,%xmm12
  3587. subq $0x10,%rdx
  3588. jbe .Lcbc_dec_three
  3589. movups 48(%rdi),%xmm5
  3590. movaps %xmm4,%xmm13
  3591. subq $0x10,%rdx
  3592. jbe .Lcbc_dec_four
  3593. movups 64(%rdi),%xmm6
  3594. movaps %xmm5,%xmm14
  3595. movaps %xmm6,%xmm15
  3596. xorps %xmm7,%xmm7
  3597. call _aesni_decrypt6
  3598. pxor %xmm10,%xmm2
  3599. movaps %xmm15,%xmm10
  3600. pxor %xmm11,%xmm3
  3601. movdqu %xmm2,(%rsi)
  3602. pxor %xmm12,%xmm4
  3603. movdqu %xmm3,16(%rsi)
  3604. pxor %xmm3,%xmm3
  3605. pxor %xmm13,%xmm5
  3606. movdqu %xmm4,32(%rsi)
  3607. pxor %xmm4,%xmm4
  3608. pxor %xmm14,%xmm6
  3609. movdqu %xmm5,48(%rsi)
  3610. pxor %xmm5,%xmm5
  3611. leaq 64(%rsi),%rsi
  3612. movdqa %xmm6,%xmm2
  3613. pxor %xmm6,%xmm6
  3614. pxor %xmm7,%xmm7
  3615. subq $0x10,%rdx
  3616. jmp .Lcbc_dec_tail_collected
  3617. .align 16
  3618. .Lcbc_dec_one:
  3619. movaps %xmm2,%xmm11
  3620. movups (%rcx),%xmm0
  3621. movups 16(%rcx),%xmm1
  3622. leaq 32(%rcx),%rcx
  3623. xorps %xmm0,%xmm2
  3624. .Loop_dec1_17:
  3625. .byte 102,15,56,222,209
  3626. decl %eax
  3627. movups (%rcx),%xmm1
  3628. leaq 16(%rcx),%rcx
  3629. jnz .Loop_dec1_17
  3630. .byte 102,15,56,223,209
  3631. xorps %xmm10,%xmm2
  3632. movaps %xmm11,%xmm10
  3633. jmp .Lcbc_dec_tail_collected
  3634. .align 16
  3635. .Lcbc_dec_two:
  3636. movaps %xmm3,%xmm12
  3637. call _aesni_decrypt2
  3638. pxor %xmm10,%xmm2
  3639. movaps %xmm12,%xmm10
  3640. pxor %xmm11,%xmm3
  3641. movdqu %xmm2,(%rsi)
  3642. movdqa %xmm3,%xmm2
  3643. pxor %xmm3,%xmm3
  3644. leaq 16(%rsi),%rsi
  3645. jmp .Lcbc_dec_tail_collected
  3646. .align 16
  3647. .Lcbc_dec_three:
  3648. movaps %xmm4,%xmm13
  3649. call _aesni_decrypt3
  3650. pxor %xmm10,%xmm2
  3651. movaps %xmm13,%xmm10
  3652. pxor %xmm11,%xmm3
  3653. movdqu %xmm2,(%rsi)
  3654. pxor %xmm12,%xmm4
  3655. movdqu %xmm3,16(%rsi)
  3656. pxor %xmm3,%xmm3
  3657. movdqa %xmm4,%xmm2
  3658. pxor %xmm4,%xmm4
  3659. leaq 32(%rsi),%rsi
  3660. jmp .Lcbc_dec_tail_collected
  3661. .align 16
  3662. .Lcbc_dec_four:
  3663. movaps %xmm5,%xmm14
  3664. call _aesni_decrypt4
  3665. pxor %xmm10,%xmm2
  3666. movaps %xmm14,%xmm10
  3667. pxor %xmm11,%xmm3
  3668. movdqu %xmm2,(%rsi)
  3669. pxor %xmm12,%xmm4
  3670. movdqu %xmm3,16(%rsi)
  3671. pxor %xmm3,%xmm3
  3672. pxor %xmm13,%xmm5
  3673. movdqu %xmm4,32(%rsi)
  3674. pxor %xmm4,%xmm4
  3675. movdqa %xmm5,%xmm2
  3676. pxor %xmm5,%xmm5
  3677. leaq 48(%rsi),%rsi
  3678. jmp .Lcbc_dec_tail_collected
  3679. .align 16
  3680. .Lcbc_dec_clear_tail_collected:
  3681. pxor %xmm3,%xmm3
  3682. pxor %xmm4,%xmm4
  3683. pxor %xmm5,%xmm5
  3684. pxor %xmm6,%xmm6
  3685. pxor %xmm7,%xmm7
  3686. pxor %xmm8,%xmm8
  3687. pxor %xmm9,%xmm9
  3688. .Lcbc_dec_tail_collected:
  3689. movups %xmm10,(%r8)
  3690. andq $15,%rdx
  3691. jnz .Lcbc_dec_tail_partial
  3692. movups %xmm2,(%rsi)
  3693. pxor %xmm2,%xmm2
  3694. jmp .Lcbc_dec_ret
  3695. .align 16
  3696. .Lcbc_dec_tail_partial:
  3697. movaps %xmm2,(%rsp)
  3698. pxor %xmm2,%xmm2
  3699. movq $16,%rcx
  3700. movq %rsi,%rdi
  3701. subq %rdx,%rcx
  3702. leaq (%rsp),%rsi
  3703. .long 0x9066A4F3
  3704. movdqa %xmm2,(%rsp)
  3705. .Lcbc_dec_ret:
  3706. xorps %xmm0,%xmm0
  3707. pxor %xmm1,%xmm1
  3708. movq -8(%r11),%rbp
  3709. .cfi_restore %rbp
  3710. leaq (%r11),%rsp
  3711. .cfi_def_cfa_register %rsp
  3712. .Lcbc_ret:
  3713. .byte 0xf3,0xc3
  3714. .cfi_endproc
  3715. .size aesni_cbc_encrypt,.-aesni_cbc_encrypt
  3716. .globl aesni_set_decrypt_key
  3717. .type aesni_set_decrypt_key,@function
  3718. .align 16
  3719. aesni_set_decrypt_key:
  3720. .cfi_startproc
  3721. .byte 0x48,0x83,0xEC,0x08
  3722. .cfi_adjust_cfa_offset 8
  3723. call __aesni_set_encrypt_key
  3724. shll $4,%esi
  3725. testl %eax,%eax
  3726. jnz .Ldec_key_ret
  3727. leaq 16(%rdx,%rsi,1),%rdi
  3728. movups (%rdx),%xmm0
  3729. movups (%rdi),%xmm1
  3730. movups %xmm0,(%rdi)
  3731. movups %xmm1,(%rdx)
  3732. leaq 16(%rdx),%rdx
  3733. leaq -16(%rdi),%rdi
  3734. .Ldec_key_inverse:
  3735. movups (%rdx),%xmm0
  3736. movups (%rdi),%xmm1
  3737. .byte 102,15,56,219,192
  3738. .byte 102,15,56,219,201
  3739. leaq 16(%rdx),%rdx
  3740. leaq -16(%rdi),%rdi
  3741. movups %xmm0,16(%rdi)
  3742. movups %xmm1,-16(%rdx)
  3743. cmpq %rdx,%rdi
  3744. ja .Ldec_key_inverse
  3745. movups (%rdx),%xmm0
  3746. .byte 102,15,56,219,192
  3747. pxor %xmm1,%xmm1
  3748. movups %xmm0,(%rdi)
  3749. pxor %xmm0,%xmm0
  3750. .Ldec_key_ret:
  3751. addq $8,%rsp
  3752. .cfi_adjust_cfa_offset -8
  3753. .byte 0xf3,0xc3
  3754. .cfi_endproc
  3755. .LSEH_end_set_decrypt_key:
  3756. .size aesni_set_decrypt_key,.-aesni_set_decrypt_key
  3757. .globl aesni_set_encrypt_key
  3758. .type aesni_set_encrypt_key,@function
  3759. .align 16
  3760. aesni_set_encrypt_key:
  3761. __aesni_set_encrypt_key:
  3762. .cfi_startproc
  3763. .byte 0x48,0x83,0xEC,0x08
  3764. .cfi_adjust_cfa_offset 8
  3765. movq $-1,%rax
  3766. testq %rdi,%rdi
  3767. jz .Lenc_key_ret
  3768. testq %rdx,%rdx
  3769. jz .Lenc_key_ret
  3770. movl $268437504,%r10d
  3771. movups (%rdi),%xmm0
  3772. xorps %xmm4,%xmm4
  3773. andl OPENSSL_ia32cap_P+4(%rip),%r10d
  3774. leaq 16(%rdx),%rax
  3775. cmpl $256,%esi
  3776. je .L14rounds
  3777. cmpl $192,%esi
  3778. je .L12rounds
  3779. cmpl $128,%esi
  3780. jne .Lbad_keybits
  3781. .L10rounds:
  3782. movl $9,%esi
  3783. cmpl $268435456,%r10d
  3784. je .L10rounds_alt
  3785. movups %xmm0,(%rdx)
  3786. .byte 102,15,58,223,200,1
  3787. call .Lkey_expansion_128_cold
  3788. .byte 102,15,58,223,200,2
  3789. call .Lkey_expansion_128
  3790. .byte 102,15,58,223,200,4
  3791. call .Lkey_expansion_128
  3792. .byte 102,15,58,223,200,8
  3793. call .Lkey_expansion_128
  3794. .byte 102,15,58,223,200,16
  3795. call .Lkey_expansion_128
  3796. .byte 102,15,58,223,200,32
  3797. call .Lkey_expansion_128
  3798. .byte 102,15,58,223,200,64
  3799. call .Lkey_expansion_128
  3800. .byte 102,15,58,223,200,128
  3801. call .Lkey_expansion_128
  3802. .byte 102,15,58,223,200,27
  3803. call .Lkey_expansion_128
  3804. .byte 102,15,58,223,200,54
  3805. call .Lkey_expansion_128
  3806. movups %xmm0,(%rax)
  3807. movl %esi,80(%rax)
  3808. xorl %eax,%eax
  3809. jmp .Lenc_key_ret
  3810. .align 16
  3811. .L10rounds_alt:
  3812. movdqa .Lkey_rotate(%rip),%xmm5
  3813. movl $8,%r10d
  3814. movdqa .Lkey_rcon1(%rip),%xmm4
  3815. movdqa %xmm0,%xmm2
  3816. movdqu %xmm0,(%rdx)
  3817. jmp .Loop_key128
  3818. .align 16
  3819. .Loop_key128:
  3820. .byte 102,15,56,0,197
  3821. .byte 102,15,56,221,196
  3822. pslld $1,%xmm4
  3823. leaq 16(%rax),%rax
  3824. movdqa %xmm2,%xmm3
  3825. pslldq $4,%xmm2
  3826. pxor %xmm2,%xmm3
  3827. pslldq $4,%xmm2
  3828. pxor %xmm2,%xmm3
  3829. pslldq $4,%xmm2
  3830. pxor %xmm3,%xmm2
  3831. pxor %xmm2,%xmm0
  3832. movdqu %xmm0,-16(%rax)
  3833. movdqa %xmm0,%xmm2
  3834. decl %r10d
  3835. jnz .Loop_key128
  3836. movdqa .Lkey_rcon1b(%rip),%xmm4
  3837. .byte 102,15,56,0,197
  3838. .byte 102,15,56,221,196
  3839. pslld $1,%xmm4
  3840. movdqa %xmm2,%xmm3
  3841. pslldq $4,%xmm2
  3842. pxor %xmm2,%xmm3
  3843. pslldq $4,%xmm2
  3844. pxor %xmm2,%xmm3
  3845. pslldq $4,%xmm2
  3846. pxor %xmm3,%xmm2
  3847. pxor %xmm2,%xmm0
  3848. movdqu %xmm0,(%rax)
  3849. movdqa %xmm0,%xmm2
  3850. .byte 102,15,56,0,197
  3851. .byte 102,15,56,221,196
  3852. movdqa %xmm2,%xmm3
  3853. pslldq $4,%xmm2
  3854. pxor %xmm2,%xmm3
  3855. pslldq $4,%xmm2
  3856. pxor %xmm2,%xmm3
  3857. pslldq $4,%xmm2
  3858. pxor %xmm3,%xmm2
  3859. pxor %xmm2,%xmm0
  3860. movdqu %xmm0,16(%rax)
  3861. movl %esi,96(%rax)
  3862. xorl %eax,%eax
  3863. jmp .Lenc_key_ret
  3864. .align 16
  3865. .L12rounds:
  3866. movq 16(%rdi),%xmm2
  3867. movl $11,%esi
  3868. cmpl $268435456,%r10d
  3869. je .L12rounds_alt
  3870. movups %xmm0,(%rdx)
  3871. .byte 102,15,58,223,202,1
  3872. call .Lkey_expansion_192a_cold
  3873. .byte 102,15,58,223,202,2
  3874. call .Lkey_expansion_192b
  3875. .byte 102,15,58,223,202,4
  3876. call .Lkey_expansion_192a
  3877. .byte 102,15,58,223,202,8
  3878. call .Lkey_expansion_192b
  3879. .byte 102,15,58,223,202,16
  3880. call .Lkey_expansion_192a
  3881. .byte 102,15,58,223,202,32
  3882. call .Lkey_expansion_192b
  3883. .byte 102,15,58,223,202,64
  3884. call .Lkey_expansion_192a
  3885. .byte 102,15,58,223,202,128
  3886. call .Lkey_expansion_192b
  3887. movups %xmm0,(%rax)
  3888. movl %esi,48(%rax)
  3889. xorq %rax,%rax
  3890. jmp .Lenc_key_ret
  3891. .align 16
  3892. .L12rounds_alt:
  3893. movdqa .Lkey_rotate192(%rip),%xmm5
  3894. movdqa .Lkey_rcon1(%rip),%xmm4
  3895. movl $8,%r10d
  3896. movdqu %xmm0,(%rdx)
  3897. jmp .Loop_key192
  3898. .align 16
  3899. .Loop_key192:
  3900. movq %xmm2,0(%rax)
  3901. movdqa %xmm2,%xmm1
  3902. .byte 102,15,56,0,213
  3903. .byte 102,15,56,221,212
  3904. pslld $1,%xmm4
  3905. leaq 24(%rax),%rax
  3906. movdqa %xmm0,%xmm3
  3907. pslldq $4,%xmm0
  3908. pxor %xmm0,%xmm3
  3909. pslldq $4,%xmm0
  3910. pxor %xmm0,%xmm3
  3911. pslldq $4,%xmm0
  3912. pxor %xmm3,%xmm0
  3913. pshufd $0xff,%xmm0,%xmm3
  3914. pxor %xmm1,%xmm3
  3915. pslldq $4,%xmm1
  3916. pxor %xmm1,%xmm3
  3917. pxor %xmm2,%xmm0
  3918. pxor %xmm3,%xmm2
  3919. movdqu %xmm0,-16(%rax)
  3920. decl %r10d
  3921. jnz .Loop_key192
  3922. movl %esi,32(%rax)
  3923. xorl %eax,%eax
  3924. jmp .Lenc_key_ret
  3925. .align 16
  3926. .L14rounds:
  3927. movups 16(%rdi),%xmm2
  3928. movl $13,%esi
  3929. leaq 16(%rax),%rax
  3930. cmpl $268435456,%r10d
  3931. je .L14rounds_alt
  3932. movups %xmm0,(%rdx)
  3933. movups %xmm2,16(%rdx)
  3934. .byte 102,15,58,223,202,1
  3935. call .Lkey_expansion_256a_cold
  3936. .byte 102,15,58,223,200,1
  3937. call .Lkey_expansion_256b
  3938. .byte 102,15,58,223,202,2
  3939. call .Lkey_expansion_256a
  3940. .byte 102,15,58,223,200,2
  3941. call .Lkey_expansion_256b
  3942. .byte 102,15,58,223,202,4
  3943. call .Lkey_expansion_256a
  3944. .byte 102,15,58,223,200,4
  3945. call .Lkey_expansion_256b
  3946. .byte 102,15,58,223,202,8
  3947. call .Lkey_expansion_256a
  3948. .byte 102,15,58,223,200,8
  3949. call .Lkey_expansion_256b
  3950. .byte 102,15,58,223,202,16
  3951. call .Lkey_expansion_256a
  3952. .byte 102,15,58,223,200,16
  3953. call .Lkey_expansion_256b
  3954. .byte 102,15,58,223,202,32
  3955. call .Lkey_expansion_256a
  3956. .byte 102,15,58,223,200,32
  3957. call .Lkey_expansion_256b
  3958. .byte 102,15,58,223,202,64
  3959. call .Lkey_expansion_256a
  3960. movups %xmm0,(%rax)
  3961. movl %esi,16(%rax)
  3962. xorq %rax,%rax
  3963. jmp .Lenc_key_ret
  3964. .align 16
  3965. .L14rounds_alt:
  3966. movdqa .Lkey_rotate(%rip),%xmm5
  3967. movdqa .Lkey_rcon1(%rip),%xmm4
  3968. movl $7,%r10d
  3969. movdqu %xmm0,0(%rdx)
  3970. movdqa %xmm2,%xmm1
  3971. movdqu %xmm2,16(%rdx)
  3972. jmp .Loop_key256
  3973. .align 16
  3974. .Loop_key256:
  3975. .byte 102,15,56,0,213
  3976. .byte 102,15,56,221,212
  3977. movdqa %xmm0,%xmm3
  3978. pslldq $4,%xmm0
  3979. pxor %xmm0,%xmm3
  3980. pslldq $4,%xmm0
  3981. pxor %xmm0,%xmm3
  3982. pslldq $4,%xmm0
  3983. pxor %xmm3,%xmm0
  3984. pslld $1,%xmm4
  3985. pxor %xmm2,%xmm0
  3986. movdqu %xmm0,(%rax)
  3987. decl %r10d
  3988. jz .Ldone_key256
  3989. pshufd $0xff,%xmm0,%xmm2
  3990. pxor %xmm3,%xmm3
  3991. .byte 102,15,56,221,211
  3992. movdqa %xmm1,%xmm3
  3993. pslldq $4,%xmm1
  3994. pxor %xmm1,%xmm3
  3995. pslldq $4,%xmm1
  3996. pxor %xmm1,%xmm3
  3997. pslldq $4,%xmm1
  3998. pxor %xmm3,%xmm1
  3999. pxor %xmm1,%xmm2
  4000. movdqu %xmm2,16(%rax)
  4001. leaq 32(%rax),%rax
  4002. movdqa %xmm2,%xmm1
  4003. jmp .Loop_key256
  4004. .Ldone_key256:
  4005. movl %esi,16(%rax)
  4006. xorl %eax,%eax
  4007. jmp .Lenc_key_ret
  4008. .align 16
  4009. .Lbad_keybits:
  4010. movq $-2,%rax
  4011. .Lenc_key_ret:
  4012. pxor %xmm0,%xmm0
  4013. pxor %xmm1,%xmm1
  4014. pxor %xmm2,%xmm2
  4015. pxor %xmm3,%xmm3
  4016. pxor %xmm4,%xmm4
  4017. pxor %xmm5,%xmm5
  4018. addq $8,%rsp
  4019. .cfi_adjust_cfa_offset -8
  4020. .byte 0xf3,0xc3
  4021. .LSEH_end_set_encrypt_key:
  4022. .align 16
  4023. .Lkey_expansion_128:
  4024. movups %xmm0,(%rax)
  4025. leaq 16(%rax),%rax
  4026. .Lkey_expansion_128_cold:
  4027. shufps $16,%xmm0,%xmm4
  4028. xorps %xmm4,%xmm0
  4029. shufps $140,%xmm0,%xmm4
  4030. xorps %xmm4,%xmm0
  4031. shufps $255,%xmm1,%xmm1
  4032. xorps %xmm1,%xmm0
  4033. .byte 0xf3,0xc3
  4034. .align 16
  4035. .Lkey_expansion_192a:
  4036. movups %xmm0,(%rax)
  4037. leaq 16(%rax),%rax
  4038. .Lkey_expansion_192a_cold:
  4039. movaps %xmm2,%xmm5
  4040. .Lkey_expansion_192b_warm:
  4041. shufps $16,%xmm0,%xmm4
  4042. movdqa %xmm2,%xmm3
  4043. xorps %xmm4,%xmm0
  4044. shufps $140,%xmm0,%xmm4
  4045. pslldq $4,%xmm3
  4046. xorps %xmm4,%xmm0
  4047. pshufd $85,%xmm1,%xmm1
  4048. pxor %xmm3,%xmm2
  4049. pxor %xmm1,%xmm0
  4050. pshufd $255,%xmm0,%xmm3
  4051. pxor %xmm3,%xmm2
  4052. .byte 0xf3,0xc3
  4053. .align 16
  4054. .Lkey_expansion_192b:
  4055. movaps %xmm0,%xmm3
  4056. shufps $68,%xmm0,%xmm5
  4057. movups %xmm5,(%rax)
  4058. shufps $78,%xmm2,%xmm3
  4059. movups %xmm3,16(%rax)
  4060. leaq 32(%rax),%rax
  4061. jmp .Lkey_expansion_192b_warm
  4062. .align 16
  4063. .Lkey_expansion_256a:
  4064. movups %xmm2,(%rax)
  4065. leaq 16(%rax),%rax
  4066. .Lkey_expansion_256a_cold:
  4067. shufps $16,%xmm0,%xmm4
  4068. xorps %xmm4,%xmm0
  4069. shufps $140,%xmm0,%xmm4
  4070. xorps %xmm4,%xmm0
  4071. shufps $255,%xmm1,%xmm1
  4072. xorps %xmm1,%xmm0
  4073. .byte 0xf3,0xc3
  4074. .align 16
  4075. .Lkey_expansion_256b:
  4076. movups %xmm0,(%rax)
  4077. leaq 16(%rax),%rax
  4078. shufps $16,%xmm2,%xmm4
  4079. xorps %xmm4,%xmm2
  4080. shufps $140,%xmm2,%xmm4
  4081. xorps %xmm4,%xmm2
  4082. shufps $170,%xmm1,%xmm1
  4083. xorps %xmm1,%xmm2
  4084. .byte 0xf3,0xc3
  4085. .cfi_endproc
  4086. .size aesni_set_encrypt_key,.-aesni_set_encrypt_key
  4087. .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key
  4088. .align 64
  4089. .Lbswap_mask:
  4090. .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
  4091. .Lincrement32:
  4092. .long 6,6,6,0
  4093. .Lincrement64:
  4094. .long 1,0,0,0
  4095. .Lxts_magic:
  4096. .long 0x87,0,1,0
  4097. .Lincrement1:
  4098. .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
  4099. .Lkey_rotate:
  4100. .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
  4101. .Lkey_rotate192:
  4102. .long 0x04070605,0x04070605,0x04070605,0x04070605
  4103. .Lkey_rcon1:
  4104. .long 1,1,1,1
  4105. .Lkey_rcon1b:
  4106. .long 0x1b,0x1b,0x1b,0x1b
  4107. .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
  4108. .align 64