aesp8-ppc.S 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__has_feature)
  4. #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
  5. #define OPENSSL_NO_ASM
  6. #endif
  7. #endif
  8. #if !defined(OPENSSL_NO_ASM) && defined(__powerpc64__)
  9. .machine "any"
  10. .abiversion 2
  11. .text
  12. .align 7
  13. .Lrcon:
  14. .byte 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01
  15. .byte 0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b
  16. .byte 0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d
  17. .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  18. .Lconsts:
  19. mflr 0
  20. bcl 20,31,$+4
  21. mflr 6
  22. addi 6,6,-0x48
  23. mtlr 0
  24. blr
  25. .long 0
  26. .byte 0,12,0x14,0,0,0,0,0
  27. .byte 65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,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
  28. .align 2
  29. .globl aes_hw_set_encrypt_key
  30. .type aes_hw_set_encrypt_key,@function
  31. .align 5
  32. aes_hw_set_encrypt_key:
  33. .localentry aes_hw_set_encrypt_key,0
  34. .Lset_encrypt_key:
  35. mflr 11
  36. std 11,16(1)
  37. li 6,-1
  38. cmpldi 3,0
  39. beq- .Lenc_key_abort
  40. cmpldi 5,0
  41. beq- .Lenc_key_abort
  42. li 6,-2
  43. cmpwi 4,128
  44. blt- .Lenc_key_abort
  45. cmpwi 4,256
  46. bgt- .Lenc_key_abort
  47. andi. 0,4,0x3f
  48. bne- .Lenc_key_abort
  49. lis 0,0xfff0
  50. li 12,-1
  51. or 0,0,0
  52. bl .Lconsts
  53. mtlr 11
  54. neg 9,3
  55. lvx 1,0,3
  56. addi 3,3,15
  57. lvsr 3,0,9
  58. li 8,0x20
  59. cmpwi 4,192
  60. lvx 2,0,3
  61. vspltisb 5,0x0f
  62. lvx 4,0,6
  63. vxor 3,3,5
  64. lvx 5,8,6
  65. addi 6,6,0x10
  66. vperm 1,1,2,3
  67. li 7,8
  68. vxor 0,0,0
  69. mtctr 7
  70. lvsl 8,0,5
  71. vspltisb 9,-1
  72. lvx 10,0,5
  73. vperm 9,9,0,8
  74. blt .Loop128
  75. addi 3,3,8
  76. beq .L192
  77. addi 3,3,8
  78. b .L256
  79. .align 4
  80. .Loop128:
  81. vperm 3,1,1,5
  82. vsldoi 6,0,1,12
  83. vperm 11,1,1,8
  84. vsel 7,10,11,9
  85. vor 10,11,11
  86. .long 0x10632509
  87. stvx 7,0,5
  88. addi 5,5,16
  89. vxor 1,1,6
  90. vsldoi 6,0,6,12
  91. vxor 1,1,6
  92. vsldoi 6,0,6,12
  93. vxor 1,1,6
  94. vadduwm 4,4,4
  95. vxor 1,1,3
  96. bdnz .Loop128
  97. lvx 4,0,6
  98. vperm 3,1,1,5
  99. vsldoi 6,0,1,12
  100. vperm 11,1,1,8
  101. vsel 7,10,11,9
  102. vor 10,11,11
  103. .long 0x10632509
  104. stvx 7,0,5
  105. addi 5,5,16
  106. vxor 1,1,6
  107. vsldoi 6,0,6,12
  108. vxor 1,1,6
  109. vsldoi 6,0,6,12
  110. vxor 1,1,6
  111. vadduwm 4,4,4
  112. vxor 1,1,3
  113. vperm 3,1,1,5
  114. vsldoi 6,0,1,12
  115. vperm 11,1,1,8
  116. vsel 7,10,11,9
  117. vor 10,11,11
  118. .long 0x10632509
  119. stvx 7,0,5
  120. addi 5,5,16
  121. vxor 1,1,6
  122. vsldoi 6,0,6,12
  123. vxor 1,1,6
  124. vsldoi 6,0,6,12
  125. vxor 1,1,6
  126. vxor 1,1,3
  127. vperm 11,1,1,8
  128. vsel 7,10,11,9
  129. vor 10,11,11
  130. stvx 7,0,5
  131. addi 3,5,15
  132. addi 5,5,0x50
  133. li 8,10
  134. b .Ldone
  135. .align 4
  136. .L192:
  137. lvx 6,0,3
  138. li 7,4
  139. vperm 11,1,1,8
  140. vsel 7,10,11,9
  141. vor 10,11,11
  142. stvx 7,0,5
  143. addi 5,5,16
  144. vperm 2,2,6,3
  145. vspltisb 3,8
  146. mtctr 7
  147. vsububm 5,5,3
  148. .Loop192:
  149. vperm 3,2,2,5
  150. vsldoi 6,0,1,12
  151. .long 0x10632509
  152. vxor 1,1,6
  153. vsldoi 6,0,6,12
  154. vxor 1,1,6
  155. vsldoi 6,0,6,12
  156. vxor 1,1,6
  157. vsldoi 7,0,2,8
  158. vspltw 6,1,3
  159. vxor 6,6,2
  160. vsldoi 2,0,2,12
  161. vadduwm 4,4,4
  162. vxor 2,2,6
  163. vxor 1,1,3
  164. vxor 2,2,3
  165. vsldoi 7,7,1,8
  166. vperm 3,2,2,5
  167. vsldoi 6,0,1,12
  168. vperm 11,7,7,8
  169. vsel 7,10,11,9
  170. vor 10,11,11
  171. .long 0x10632509
  172. stvx 7,0,5
  173. addi 5,5,16
  174. vsldoi 7,1,2,8
  175. vxor 1,1,6
  176. vsldoi 6,0,6,12
  177. vperm 11,7,7,8
  178. vsel 7,10,11,9
  179. vor 10,11,11
  180. vxor 1,1,6
  181. vsldoi 6,0,6,12
  182. vxor 1,1,6
  183. stvx 7,0,5
  184. addi 5,5,16
  185. vspltw 6,1,3
  186. vxor 6,6,2
  187. vsldoi 2,0,2,12
  188. vadduwm 4,4,4
  189. vxor 2,2,6
  190. vxor 1,1,3
  191. vxor 2,2,3
  192. vperm 11,1,1,8
  193. vsel 7,10,11,9
  194. vor 10,11,11
  195. stvx 7,0,5
  196. addi 3,5,15
  197. addi 5,5,16
  198. bdnz .Loop192
  199. li 8,12
  200. addi 5,5,0x20
  201. b .Ldone
  202. .align 4
  203. .L256:
  204. lvx 6,0,3
  205. li 7,7
  206. li 8,14
  207. vperm 11,1,1,8
  208. vsel 7,10,11,9
  209. vor 10,11,11
  210. stvx 7,0,5
  211. addi 5,5,16
  212. vperm 2,2,6,3
  213. mtctr 7
  214. .Loop256:
  215. vperm 3,2,2,5
  216. vsldoi 6,0,1,12
  217. vperm 11,2,2,8
  218. vsel 7,10,11,9
  219. vor 10,11,11
  220. .long 0x10632509
  221. stvx 7,0,5
  222. addi 5,5,16
  223. vxor 1,1,6
  224. vsldoi 6,0,6,12
  225. vxor 1,1,6
  226. vsldoi 6,0,6,12
  227. vxor 1,1,6
  228. vadduwm 4,4,4
  229. vxor 1,1,3
  230. vperm 11,1,1,8
  231. vsel 7,10,11,9
  232. vor 10,11,11
  233. stvx 7,0,5
  234. addi 3,5,15
  235. addi 5,5,16
  236. bdz .Ldone
  237. vspltw 3,1,3
  238. vsldoi 6,0,2,12
  239. .long 0x106305C8
  240. vxor 2,2,6
  241. vsldoi 6,0,6,12
  242. vxor 2,2,6
  243. vsldoi 6,0,6,12
  244. vxor 2,2,6
  245. vxor 2,2,3
  246. b .Loop256
  247. .align 4
  248. .Ldone:
  249. lvx 2,0,3
  250. vsel 2,10,2,9
  251. stvx 2,0,3
  252. li 6,0
  253. or 12,12,12
  254. stw 8,0(5)
  255. .Lenc_key_abort:
  256. mr 3,6
  257. blr
  258. .long 0
  259. .byte 0,12,0x14,1,0,0,3,0
  260. .long 0
  261. .size aes_hw_set_encrypt_key,.-aes_hw_set_encrypt_key
  262. .globl aes_hw_set_decrypt_key
  263. .type aes_hw_set_decrypt_key,@function
  264. .align 5
  265. aes_hw_set_decrypt_key:
  266. .localentry aes_hw_set_decrypt_key,0
  267. stdu 1,-64(1)
  268. mflr 10
  269. std 10,80(1)
  270. bl .Lset_encrypt_key
  271. mtlr 10
  272. cmpwi 3,0
  273. bne- .Ldec_key_abort
  274. slwi 7,8,4
  275. subi 3,5,240
  276. srwi 8,8,1
  277. add 5,3,7
  278. mtctr 8
  279. .Ldeckey:
  280. lwz 0, 0(3)
  281. lwz 6, 4(3)
  282. lwz 7, 8(3)
  283. lwz 8, 12(3)
  284. addi 3,3,16
  285. lwz 9, 0(5)
  286. lwz 10,4(5)
  287. lwz 11,8(5)
  288. lwz 12,12(5)
  289. stw 0, 0(5)
  290. stw 6, 4(5)
  291. stw 7, 8(5)
  292. stw 8, 12(5)
  293. subi 5,5,16
  294. stw 9, -16(3)
  295. stw 10,-12(3)
  296. stw 11,-8(3)
  297. stw 12,-4(3)
  298. bdnz .Ldeckey
  299. xor 3,3,3
  300. .Ldec_key_abort:
  301. addi 1,1,64
  302. blr
  303. .long 0
  304. .byte 0,12,4,1,0x80,0,3,0
  305. .long 0
  306. .size aes_hw_set_decrypt_key,.-aes_hw_set_decrypt_key
  307. .globl aes_hw_encrypt
  308. .type aes_hw_encrypt,@function
  309. .align 5
  310. aes_hw_encrypt:
  311. .localentry aes_hw_encrypt,0
  312. lwz 6,240(5)
  313. lis 0,0xfc00
  314. li 12,-1
  315. li 7,15
  316. or 0,0,0
  317. lvx 0,0,3
  318. neg 11,4
  319. lvx 1,7,3
  320. lvsl 2,0,3
  321. vspltisb 4,0x0f
  322. lvsr 3,0,11
  323. vxor 2,2,4
  324. li 7,16
  325. vperm 0,0,1,2
  326. lvx 1,0,5
  327. lvsr 5,0,5
  328. srwi 6,6,1
  329. lvx 2,7,5
  330. addi 7,7,16
  331. subi 6,6,1
  332. vperm 1,2,1,5
  333. vxor 0,0,1
  334. lvx 1,7,5
  335. addi 7,7,16
  336. mtctr 6
  337. .Loop_enc:
  338. vperm 2,1,2,5
  339. .long 0x10001508
  340. lvx 2,7,5
  341. addi 7,7,16
  342. vperm 1,2,1,5
  343. .long 0x10000D08
  344. lvx 1,7,5
  345. addi 7,7,16
  346. bdnz .Loop_enc
  347. vperm 2,1,2,5
  348. .long 0x10001508
  349. lvx 2,7,5
  350. vperm 1,2,1,5
  351. .long 0x10000D09
  352. vspltisb 2,-1
  353. vxor 1,1,1
  354. li 7,15
  355. vperm 2,2,1,3
  356. vxor 3,3,4
  357. lvx 1,0,4
  358. vperm 0,0,0,3
  359. vsel 1,1,0,2
  360. lvx 4,7,4
  361. stvx 1,0,4
  362. vsel 0,0,4,2
  363. stvx 0,7,4
  364. or 12,12,12
  365. blr
  366. .long 0
  367. .byte 0,12,0x14,0,0,0,3,0
  368. .long 0
  369. .size aes_hw_encrypt,.-aes_hw_encrypt
  370. .globl aes_hw_decrypt
  371. .type aes_hw_decrypt,@function
  372. .align 5
  373. aes_hw_decrypt:
  374. .localentry aes_hw_decrypt,0
  375. lwz 6,240(5)
  376. lis 0,0xfc00
  377. li 12,-1
  378. li 7,15
  379. or 0,0,0
  380. lvx 0,0,3
  381. neg 11,4
  382. lvx 1,7,3
  383. lvsl 2,0,3
  384. vspltisb 4,0x0f
  385. lvsr 3,0,11
  386. vxor 2,2,4
  387. li 7,16
  388. vperm 0,0,1,2
  389. lvx 1,0,5
  390. lvsr 5,0,5
  391. srwi 6,6,1
  392. lvx 2,7,5
  393. addi 7,7,16
  394. subi 6,6,1
  395. vperm 1,2,1,5
  396. vxor 0,0,1
  397. lvx 1,7,5
  398. addi 7,7,16
  399. mtctr 6
  400. .Loop_dec:
  401. vperm 2,1,2,5
  402. .long 0x10001548
  403. lvx 2,7,5
  404. addi 7,7,16
  405. vperm 1,2,1,5
  406. .long 0x10000D48
  407. lvx 1,7,5
  408. addi 7,7,16
  409. bdnz .Loop_dec
  410. vperm 2,1,2,5
  411. .long 0x10001548
  412. lvx 2,7,5
  413. vperm 1,2,1,5
  414. .long 0x10000D49
  415. vspltisb 2,-1
  416. vxor 1,1,1
  417. li 7,15
  418. vperm 2,2,1,3
  419. vxor 3,3,4
  420. lvx 1,0,4
  421. vperm 0,0,0,3
  422. vsel 1,1,0,2
  423. lvx 4,7,4
  424. stvx 1,0,4
  425. vsel 0,0,4,2
  426. stvx 0,7,4
  427. or 12,12,12
  428. blr
  429. .long 0
  430. .byte 0,12,0x14,0,0,0,3,0
  431. .long 0
  432. .size aes_hw_decrypt,.-aes_hw_decrypt
  433. .globl aes_hw_cbc_encrypt
  434. .type aes_hw_cbc_encrypt,@function
  435. .align 5
  436. aes_hw_cbc_encrypt:
  437. .localentry aes_hw_cbc_encrypt,0
  438. cmpldi 5,16
  439. .long 0x4dc00020
  440. cmpwi 8,0
  441. lis 0,0xffe0
  442. li 12,-1
  443. or 0,0,0
  444. li 10,15
  445. vxor 0,0,0
  446. vspltisb 3,0x0f
  447. lvx 4,0,7
  448. lvsl 6,0,7
  449. lvx 5,10,7
  450. vxor 6,6,3
  451. vperm 4,4,5,6
  452. neg 11,3
  453. lvsr 10,0,6
  454. lwz 9,240(6)
  455. lvsr 6,0,11
  456. lvx 5,0,3
  457. addi 3,3,15
  458. vxor 6,6,3
  459. lvsl 8,0,4
  460. vspltisb 9,-1
  461. lvx 7,0,4
  462. vperm 9,9,0,8
  463. vxor 8,8,3
  464. srwi 9,9,1
  465. li 10,16
  466. subi 9,9,1
  467. beq .Lcbc_dec
  468. .Lcbc_enc:
  469. vor 2,5,5
  470. lvx 5,0,3
  471. addi 3,3,16
  472. mtctr 9
  473. subi 5,5,16
  474. lvx 0,0,6
  475. vperm 2,2,5,6
  476. lvx 1,10,6
  477. addi 10,10,16
  478. vperm 0,1,0,10
  479. vxor 2,2,0
  480. lvx 0,10,6
  481. addi 10,10,16
  482. vxor 2,2,4
  483. .Loop_cbc_enc:
  484. vperm 1,0,1,10
  485. .long 0x10420D08
  486. lvx 1,10,6
  487. addi 10,10,16
  488. vperm 0,1,0,10
  489. .long 0x10420508
  490. lvx 0,10,6
  491. addi 10,10,16
  492. bdnz .Loop_cbc_enc
  493. vperm 1,0,1,10
  494. .long 0x10420D08
  495. lvx 1,10,6
  496. li 10,16
  497. vperm 0,1,0,10
  498. .long 0x10820509
  499. cmpldi 5,16
  500. vperm 3,4,4,8
  501. vsel 2,7,3,9
  502. vor 7,3,3
  503. stvx 2,0,4
  504. addi 4,4,16
  505. bge .Lcbc_enc
  506. b .Lcbc_done
  507. .align 4
  508. .Lcbc_dec:
  509. cmpldi 5,128
  510. bge _aesp8_cbc_decrypt8x
  511. vor 3,5,5
  512. lvx 5,0,3
  513. addi 3,3,16
  514. mtctr 9
  515. subi 5,5,16
  516. lvx 0,0,6
  517. vperm 3,3,5,6
  518. lvx 1,10,6
  519. addi 10,10,16
  520. vperm 0,1,0,10
  521. vxor 2,3,0
  522. lvx 0,10,6
  523. addi 10,10,16
  524. .Loop_cbc_dec:
  525. vperm 1,0,1,10
  526. .long 0x10420D48
  527. lvx 1,10,6
  528. addi 10,10,16
  529. vperm 0,1,0,10
  530. .long 0x10420548
  531. lvx 0,10,6
  532. addi 10,10,16
  533. bdnz .Loop_cbc_dec
  534. vperm 1,0,1,10
  535. .long 0x10420D48
  536. lvx 1,10,6
  537. li 10,16
  538. vperm 0,1,0,10
  539. .long 0x10420549
  540. cmpldi 5,16
  541. vxor 2,2,4
  542. vor 4,3,3
  543. vperm 3,2,2,8
  544. vsel 2,7,3,9
  545. vor 7,3,3
  546. stvx 2,0,4
  547. addi 4,4,16
  548. bge .Lcbc_dec
  549. .Lcbc_done:
  550. addi 4,4,-1
  551. lvx 2,0,4
  552. vsel 2,7,2,9
  553. stvx 2,0,4
  554. neg 8,7
  555. li 10,15
  556. vxor 0,0,0
  557. vspltisb 9,-1
  558. vspltisb 3,0x0f
  559. lvsr 8,0,8
  560. vperm 9,9,0,8
  561. vxor 8,8,3
  562. lvx 7,0,7
  563. vperm 4,4,4,8
  564. vsel 2,7,4,9
  565. lvx 5,10,7
  566. stvx 2,0,7
  567. vsel 2,4,5,9
  568. stvx 2,10,7
  569. or 12,12,12
  570. blr
  571. .long 0
  572. .byte 0,12,0x14,0,0,0,6,0
  573. .long 0
  574. .align 5
  575. _aesp8_cbc_decrypt8x:
  576. stdu 1,-448(1)
  577. li 10,207
  578. li 11,223
  579. stvx 20,10,1
  580. addi 10,10,32
  581. stvx 21,11,1
  582. addi 11,11,32
  583. stvx 22,10,1
  584. addi 10,10,32
  585. stvx 23,11,1
  586. addi 11,11,32
  587. stvx 24,10,1
  588. addi 10,10,32
  589. stvx 25,11,1
  590. addi 11,11,32
  591. stvx 26,10,1
  592. addi 10,10,32
  593. stvx 27,11,1
  594. addi 11,11,32
  595. stvx 28,10,1
  596. addi 10,10,32
  597. stvx 29,11,1
  598. addi 11,11,32
  599. stvx 30,10,1
  600. stvx 31,11,1
  601. li 0,-1
  602. stw 12,396(1)
  603. li 8,0x10
  604. std 26,400(1)
  605. li 26,0x20
  606. std 27,408(1)
  607. li 27,0x30
  608. std 28,416(1)
  609. li 28,0x40
  610. std 29,424(1)
  611. li 29,0x50
  612. std 30,432(1)
  613. li 30,0x60
  614. std 31,440(1)
  615. li 31,0x70
  616. or 0,0,0
  617. subi 9,9,3
  618. subi 5,5,128
  619. lvx 23,0,6
  620. lvx 30,8,6
  621. addi 6,6,0x20
  622. lvx 31,0,6
  623. vperm 23,30,23,10
  624. addi 11,1,79
  625. mtctr 9
  626. .Load_cbc_dec_key:
  627. vperm 24,31,30,10
  628. lvx 30,8,6
  629. addi 6,6,0x20
  630. stvx 24,0,11
  631. vperm 25,30,31,10
  632. lvx 31,0,6
  633. stvx 25,8,11
  634. addi 11,11,0x20
  635. bdnz .Load_cbc_dec_key
  636. lvx 26,8,6
  637. vperm 24,31,30,10
  638. lvx 27,26,6
  639. stvx 24,0,11
  640. vperm 25,26,31,10
  641. lvx 28,27,6
  642. stvx 25,8,11
  643. addi 11,1,79
  644. vperm 26,27,26,10
  645. lvx 29,28,6
  646. vperm 27,28,27,10
  647. lvx 30,29,6
  648. vperm 28,29,28,10
  649. lvx 31,30,6
  650. vperm 29,30,29,10
  651. lvx 14,31,6
  652. vperm 30,31,30,10
  653. lvx 24,0,11
  654. vperm 31,14,31,10
  655. lvx 25,8,11
  656. subi 3,3,15
  657. li 10,8
  658. .long 0x7C001E99
  659. lvsl 6,0,10
  660. vspltisb 3,0x0f
  661. .long 0x7C281E99
  662. vxor 6,6,3
  663. .long 0x7C5A1E99
  664. vperm 0,0,0,6
  665. .long 0x7C7B1E99
  666. vperm 1,1,1,6
  667. .long 0x7D5C1E99
  668. vperm 2,2,2,6
  669. vxor 14,0,23
  670. .long 0x7D7D1E99
  671. vperm 3,3,3,6
  672. vxor 15,1,23
  673. .long 0x7D9E1E99
  674. vperm 10,10,10,6
  675. vxor 16,2,23
  676. .long 0x7DBF1E99
  677. addi 3,3,0x80
  678. vperm 11,11,11,6
  679. vxor 17,3,23
  680. vperm 12,12,12,6
  681. vxor 18,10,23
  682. vperm 13,13,13,6
  683. vxor 19,11,23
  684. vxor 20,12,23
  685. vxor 21,13,23
  686. mtctr 9
  687. b .Loop_cbc_dec8x
  688. .align 5
  689. .Loop_cbc_dec8x:
  690. .long 0x11CEC548
  691. .long 0x11EFC548
  692. .long 0x1210C548
  693. .long 0x1231C548
  694. .long 0x1252C548
  695. .long 0x1273C548
  696. .long 0x1294C548
  697. .long 0x12B5C548
  698. lvx 24,26,11
  699. addi 11,11,0x20
  700. .long 0x11CECD48
  701. .long 0x11EFCD48
  702. .long 0x1210CD48
  703. .long 0x1231CD48
  704. .long 0x1252CD48
  705. .long 0x1273CD48
  706. .long 0x1294CD48
  707. .long 0x12B5CD48
  708. lvx 25,8,11
  709. bdnz .Loop_cbc_dec8x
  710. subic 5,5,128
  711. .long 0x11CEC548
  712. .long 0x11EFC548
  713. .long 0x1210C548
  714. .long 0x1231C548
  715. .long 0x1252C548
  716. .long 0x1273C548
  717. .long 0x1294C548
  718. .long 0x12B5C548
  719. subfe. 0,0,0
  720. .long 0x11CECD48
  721. .long 0x11EFCD48
  722. .long 0x1210CD48
  723. .long 0x1231CD48
  724. .long 0x1252CD48
  725. .long 0x1273CD48
  726. .long 0x1294CD48
  727. .long 0x12B5CD48
  728. and 0,0,5
  729. .long 0x11CED548
  730. .long 0x11EFD548
  731. .long 0x1210D548
  732. .long 0x1231D548
  733. .long 0x1252D548
  734. .long 0x1273D548
  735. .long 0x1294D548
  736. .long 0x12B5D548
  737. add 3,3,0
  738. .long 0x11CEDD48
  739. .long 0x11EFDD48
  740. .long 0x1210DD48
  741. .long 0x1231DD48
  742. .long 0x1252DD48
  743. .long 0x1273DD48
  744. .long 0x1294DD48
  745. .long 0x12B5DD48
  746. addi 11,1,79
  747. .long 0x11CEE548
  748. .long 0x11EFE548
  749. .long 0x1210E548
  750. .long 0x1231E548
  751. .long 0x1252E548
  752. .long 0x1273E548
  753. .long 0x1294E548
  754. .long 0x12B5E548
  755. lvx 24,0,11
  756. .long 0x11CEED48
  757. .long 0x11EFED48
  758. .long 0x1210ED48
  759. .long 0x1231ED48
  760. .long 0x1252ED48
  761. .long 0x1273ED48
  762. .long 0x1294ED48
  763. .long 0x12B5ED48
  764. lvx 25,8,11
  765. .long 0x11CEF548
  766. vxor 4,4,31
  767. .long 0x11EFF548
  768. vxor 0,0,31
  769. .long 0x1210F548
  770. vxor 1,1,31
  771. .long 0x1231F548
  772. vxor 2,2,31
  773. .long 0x1252F548
  774. vxor 3,3,31
  775. .long 0x1273F548
  776. vxor 10,10,31
  777. .long 0x1294F548
  778. vxor 11,11,31
  779. .long 0x12B5F548
  780. vxor 12,12,31
  781. .long 0x11CE2549
  782. .long 0x11EF0549
  783. .long 0x7C001E99
  784. .long 0x12100D49
  785. .long 0x7C281E99
  786. .long 0x12311549
  787. vperm 0,0,0,6
  788. .long 0x7C5A1E99
  789. .long 0x12521D49
  790. vperm 1,1,1,6
  791. .long 0x7C7B1E99
  792. .long 0x12735549
  793. vperm 2,2,2,6
  794. .long 0x7D5C1E99
  795. .long 0x12945D49
  796. vperm 3,3,3,6
  797. .long 0x7D7D1E99
  798. .long 0x12B56549
  799. vperm 10,10,10,6
  800. .long 0x7D9E1E99
  801. vor 4,13,13
  802. vperm 11,11,11,6
  803. .long 0x7DBF1E99
  804. addi 3,3,0x80
  805. vperm 14,14,14,6
  806. vperm 15,15,15,6
  807. .long 0x7DC02799
  808. vperm 12,12,12,6
  809. vxor 14,0,23
  810. vperm 16,16,16,6
  811. .long 0x7DE82799
  812. vperm 13,13,13,6
  813. vxor 15,1,23
  814. vperm 17,17,17,6
  815. .long 0x7E1A2799
  816. vxor 16,2,23
  817. vperm 18,18,18,6
  818. .long 0x7E3B2799
  819. vxor 17,3,23
  820. vperm 19,19,19,6
  821. .long 0x7E5C2799
  822. vxor 18,10,23
  823. vperm 20,20,20,6
  824. .long 0x7E7D2799
  825. vxor 19,11,23
  826. vperm 21,21,21,6
  827. .long 0x7E9E2799
  828. vxor 20,12,23
  829. .long 0x7EBF2799
  830. addi 4,4,0x80
  831. vxor 21,13,23
  832. mtctr 9
  833. beq .Loop_cbc_dec8x
  834. addic. 5,5,128
  835. beq .Lcbc_dec8x_done
  836. nop
  837. nop
  838. .Loop_cbc_dec8x_tail:
  839. .long 0x11EFC548
  840. .long 0x1210C548
  841. .long 0x1231C548
  842. .long 0x1252C548
  843. .long 0x1273C548
  844. .long 0x1294C548
  845. .long 0x12B5C548
  846. lvx 24,26,11
  847. addi 11,11,0x20
  848. .long 0x11EFCD48
  849. .long 0x1210CD48
  850. .long 0x1231CD48
  851. .long 0x1252CD48
  852. .long 0x1273CD48
  853. .long 0x1294CD48
  854. .long 0x12B5CD48
  855. lvx 25,8,11
  856. bdnz .Loop_cbc_dec8x_tail
  857. .long 0x11EFC548
  858. .long 0x1210C548
  859. .long 0x1231C548
  860. .long 0x1252C548
  861. .long 0x1273C548
  862. .long 0x1294C548
  863. .long 0x12B5C548
  864. .long 0x11EFCD48
  865. .long 0x1210CD48
  866. .long 0x1231CD48
  867. .long 0x1252CD48
  868. .long 0x1273CD48
  869. .long 0x1294CD48
  870. .long 0x12B5CD48
  871. .long 0x11EFD548
  872. .long 0x1210D548
  873. .long 0x1231D548
  874. .long 0x1252D548
  875. .long 0x1273D548
  876. .long 0x1294D548
  877. .long 0x12B5D548
  878. .long 0x11EFDD48
  879. .long 0x1210DD48
  880. .long 0x1231DD48
  881. .long 0x1252DD48
  882. .long 0x1273DD48
  883. .long 0x1294DD48
  884. .long 0x12B5DD48
  885. .long 0x11EFE548
  886. .long 0x1210E548
  887. .long 0x1231E548
  888. .long 0x1252E548
  889. .long 0x1273E548
  890. .long 0x1294E548
  891. .long 0x12B5E548
  892. .long 0x11EFED48
  893. .long 0x1210ED48
  894. .long 0x1231ED48
  895. .long 0x1252ED48
  896. .long 0x1273ED48
  897. .long 0x1294ED48
  898. .long 0x12B5ED48
  899. .long 0x11EFF548
  900. vxor 4,4,31
  901. .long 0x1210F548
  902. vxor 1,1,31
  903. .long 0x1231F548
  904. vxor 2,2,31
  905. .long 0x1252F548
  906. vxor 3,3,31
  907. .long 0x1273F548
  908. vxor 10,10,31
  909. .long 0x1294F548
  910. vxor 11,11,31
  911. .long 0x12B5F548
  912. vxor 12,12,31
  913. cmplwi 5,32
  914. blt .Lcbc_dec8x_one
  915. nop
  916. beq .Lcbc_dec8x_two
  917. cmplwi 5,64
  918. blt .Lcbc_dec8x_three
  919. nop
  920. beq .Lcbc_dec8x_four
  921. cmplwi 5,96
  922. blt .Lcbc_dec8x_five
  923. nop
  924. beq .Lcbc_dec8x_six
  925. .Lcbc_dec8x_seven:
  926. .long 0x11EF2549
  927. .long 0x12100D49
  928. .long 0x12311549
  929. .long 0x12521D49
  930. .long 0x12735549
  931. .long 0x12945D49
  932. .long 0x12B56549
  933. vor 4,13,13
  934. vperm 15,15,15,6
  935. vperm 16,16,16,6
  936. .long 0x7DE02799
  937. vperm 17,17,17,6
  938. .long 0x7E082799
  939. vperm 18,18,18,6
  940. .long 0x7E3A2799
  941. vperm 19,19,19,6
  942. .long 0x7E5B2799
  943. vperm 20,20,20,6
  944. .long 0x7E7C2799
  945. vperm 21,21,21,6
  946. .long 0x7E9D2799
  947. .long 0x7EBE2799
  948. addi 4,4,0x70
  949. b .Lcbc_dec8x_done
  950. .align 5
  951. .Lcbc_dec8x_six:
  952. .long 0x12102549
  953. .long 0x12311549
  954. .long 0x12521D49
  955. .long 0x12735549
  956. .long 0x12945D49
  957. .long 0x12B56549
  958. vor 4,13,13
  959. vperm 16,16,16,6
  960. vperm 17,17,17,6
  961. .long 0x7E002799
  962. vperm 18,18,18,6
  963. .long 0x7E282799
  964. vperm 19,19,19,6
  965. .long 0x7E5A2799
  966. vperm 20,20,20,6
  967. .long 0x7E7B2799
  968. vperm 21,21,21,6
  969. .long 0x7E9C2799
  970. .long 0x7EBD2799
  971. addi 4,4,0x60
  972. b .Lcbc_dec8x_done
  973. .align 5
  974. .Lcbc_dec8x_five:
  975. .long 0x12312549
  976. .long 0x12521D49
  977. .long 0x12735549
  978. .long 0x12945D49
  979. .long 0x12B56549
  980. vor 4,13,13
  981. vperm 17,17,17,6
  982. vperm 18,18,18,6
  983. .long 0x7E202799
  984. vperm 19,19,19,6
  985. .long 0x7E482799
  986. vperm 20,20,20,6
  987. .long 0x7E7A2799
  988. vperm 21,21,21,6
  989. .long 0x7E9B2799
  990. .long 0x7EBC2799
  991. addi 4,4,0x50
  992. b .Lcbc_dec8x_done
  993. .align 5
  994. .Lcbc_dec8x_four:
  995. .long 0x12522549
  996. .long 0x12735549
  997. .long 0x12945D49
  998. .long 0x12B56549
  999. vor 4,13,13
  1000. vperm 18,18,18,6
  1001. vperm 19,19,19,6
  1002. .long 0x7E402799
  1003. vperm 20,20,20,6
  1004. .long 0x7E682799
  1005. vperm 21,21,21,6
  1006. .long 0x7E9A2799
  1007. .long 0x7EBB2799
  1008. addi 4,4,0x40
  1009. b .Lcbc_dec8x_done
  1010. .align 5
  1011. .Lcbc_dec8x_three:
  1012. .long 0x12732549
  1013. .long 0x12945D49
  1014. .long 0x12B56549
  1015. vor 4,13,13
  1016. vperm 19,19,19,6
  1017. vperm 20,20,20,6
  1018. .long 0x7E602799
  1019. vperm 21,21,21,6
  1020. .long 0x7E882799
  1021. .long 0x7EBA2799
  1022. addi 4,4,0x30
  1023. b .Lcbc_dec8x_done
  1024. .align 5
  1025. .Lcbc_dec8x_two:
  1026. .long 0x12942549
  1027. .long 0x12B56549
  1028. vor 4,13,13
  1029. vperm 20,20,20,6
  1030. vperm 21,21,21,6
  1031. .long 0x7E802799
  1032. .long 0x7EA82799
  1033. addi 4,4,0x20
  1034. b .Lcbc_dec8x_done
  1035. .align 5
  1036. .Lcbc_dec8x_one:
  1037. .long 0x12B52549
  1038. vor 4,13,13
  1039. vperm 21,21,21,6
  1040. .long 0x7EA02799
  1041. addi 4,4,0x10
  1042. .Lcbc_dec8x_done:
  1043. vperm 4,4,4,6
  1044. .long 0x7C803F99
  1045. li 10,79
  1046. li 11,95
  1047. stvx 6,10,1
  1048. addi 10,10,32
  1049. stvx 6,11,1
  1050. addi 11,11,32
  1051. stvx 6,10,1
  1052. addi 10,10,32
  1053. stvx 6,11,1
  1054. addi 11,11,32
  1055. stvx 6,10,1
  1056. addi 10,10,32
  1057. stvx 6,11,1
  1058. addi 11,11,32
  1059. stvx 6,10,1
  1060. addi 10,10,32
  1061. stvx 6,11,1
  1062. addi 11,11,32
  1063. or 12,12,12
  1064. lvx 20,10,1
  1065. addi 10,10,32
  1066. lvx 21,11,1
  1067. addi 11,11,32
  1068. lvx 22,10,1
  1069. addi 10,10,32
  1070. lvx 23,11,1
  1071. addi 11,11,32
  1072. lvx 24,10,1
  1073. addi 10,10,32
  1074. lvx 25,11,1
  1075. addi 11,11,32
  1076. lvx 26,10,1
  1077. addi 10,10,32
  1078. lvx 27,11,1
  1079. addi 11,11,32
  1080. lvx 28,10,1
  1081. addi 10,10,32
  1082. lvx 29,11,1
  1083. addi 11,11,32
  1084. lvx 30,10,1
  1085. lvx 31,11,1
  1086. ld 26,400(1)
  1087. ld 27,408(1)
  1088. ld 28,416(1)
  1089. ld 29,424(1)
  1090. ld 30,432(1)
  1091. ld 31,440(1)
  1092. addi 1,1,448
  1093. blr
  1094. .long 0
  1095. .byte 0,12,0x04,0,0x80,6,6,0
  1096. .long 0
  1097. .size aes_hw_cbc_encrypt,.-aes_hw_cbc_encrypt
  1098. .globl aes_hw_ctr32_encrypt_blocks
  1099. .type aes_hw_ctr32_encrypt_blocks,@function
  1100. .align 5
  1101. aes_hw_ctr32_encrypt_blocks:
  1102. .localentry aes_hw_ctr32_encrypt_blocks,0
  1103. cmpldi 5,1
  1104. .long 0x4dc00020
  1105. lis 0,0xfff0
  1106. li 12,-1
  1107. or 0,0,0
  1108. li 10,15
  1109. vxor 0,0,0
  1110. vspltisb 3,0x0f
  1111. lvx 4,0,7
  1112. lvsl 6,0,7
  1113. lvx 5,10,7
  1114. vspltisb 11,1
  1115. vxor 6,6,3
  1116. vperm 4,4,5,6
  1117. vsldoi 11,0,11,1
  1118. neg 11,3
  1119. lvsr 10,0,6
  1120. lwz 9,240(6)
  1121. lvsr 6,0,11
  1122. lvx 5,0,3
  1123. addi 3,3,15
  1124. vxor 6,6,3
  1125. srwi 9,9,1
  1126. li 10,16
  1127. subi 9,9,1
  1128. cmpldi 5,8
  1129. bge _aesp8_ctr32_encrypt8x
  1130. lvsl 8,0,4
  1131. vspltisb 9,-1
  1132. lvx 7,0,4
  1133. vperm 9,9,0,8
  1134. vxor 8,8,3
  1135. lvx 0,0,6
  1136. mtctr 9
  1137. lvx 1,10,6
  1138. addi 10,10,16
  1139. vperm 0,1,0,10
  1140. vxor 2,4,0
  1141. lvx 0,10,6
  1142. addi 10,10,16
  1143. b .Loop_ctr32_enc
  1144. .align 5
  1145. .Loop_ctr32_enc:
  1146. vperm 1,0,1,10
  1147. .long 0x10420D08
  1148. lvx 1,10,6
  1149. addi 10,10,16
  1150. vperm 0,1,0,10
  1151. .long 0x10420508
  1152. lvx 0,10,6
  1153. addi 10,10,16
  1154. bdnz .Loop_ctr32_enc
  1155. vadduwm 4,4,11
  1156. vor 3,5,5
  1157. lvx 5,0,3
  1158. addi 3,3,16
  1159. subic. 5,5,1
  1160. vperm 1,0,1,10
  1161. .long 0x10420D08
  1162. lvx 1,10,6
  1163. vperm 3,3,5,6
  1164. li 10,16
  1165. vperm 1,1,0,10
  1166. lvx 0,0,6
  1167. vxor 3,3,1
  1168. .long 0x10421D09
  1169. lvx 1,10,6
  1170. addi 10,10,16
  1171. vperm 2,2,2,8
  1172. vsel 3,7,2,9
  1173. mtctr 9
  1174. vperm 0,1,0,10
  1175. vor 7,2,2
  1176. vxor 2,4,0
  1177. lvx 0,10,6
  1178. addi 10,10,16
  1179. stvx 3,0,4
  1180. addi 4,4,16
  1181. bne .Loop_ctr32_enc
  1182. addi 4,4,-1
  1183. lvx 2,0,4
  1184. vsel 2,7,2,9
  1185. stvx 2,0,4
  1186. or 12,12,12
  1187. blr
  1188. .long 0
  1189. .byte 0,12,0x14,0,0,0,6,0
  1190. .long 0
  1191. .align 5
  1192. _aesp8_ctr32_encrypt8x:
  1193. stdu 1,-448(1)
  1194. li 10,207
  1195. li 11,223
  1196. stvx 20,10,1
  1197. addi 10,10,32
  1198. stvx 21,11,1
  1199. addi 11,11,32
  1200. stvx 22,10,1
  1201. addi 10,10,32
  1202. stvx 23,11,1
  1203. addi 11,11,32
  1204. stvx 24,10,1
  1205. addi 10,10,32
  1206. stvx 25,11,1
  1207. addi 11,11,32
  1208. stvx 26,10,1
  1209. addi 10,10,32
  1210. stvx 27,11,1
  1211. addi 11,11,32
  1212. stvx 28,10,1
  1213. addi 10,10,32
  1214. stvx 29,11,1
  1215. addi 11,11,32
  1216. stvx 30,10,1
  1217. stvx 31,11,1
  1218. li 0,-1
  1219. stw 12,396(1)
  1220. li 8,0x10
  1221. std 26,400(1)
  1222. li 26,0x20
  1223. std 27,408(1)
  1224. li 27,0x30
  1225. std 28,416(1)
  1226. li 28,0x40
  1227. std 29,424(1)
  1228. li 29,0x50
  1229. std 30,432(1)
  1230. li 30,0x60
  1231. std 31,440(1)
  1232. li 31,0x70
  1233. or 0,0,0
  1234. subi 9,9,3
  1235. lvx 23,0,6
  1236. lvx 30,8,6
  1237. addi 6,6,0x20
  1238. lvx 31,0,6
  1239. vperm 23,30,23,10
  1240. addi 11,1,79
  1241. mtctr 9
  1242. .Load_ctr32_enc_key:
  1243. vperm 24,31,30,10
  1244. lvx 30,8,6
  1245. addi 6,6,0x20
  1246. stvx 24,0,11
  1247. vperm 25,30,31,10
  1248. lvx 31,0,6
  1249. stvx 25,8,11
  1250. addi 11,11,0x20
  1251. bdnz .Load_ctr32_enc_key
  1252. lvx 26,8,6
  1253. vperm 24,31,30,10
  1254. lvx 27,26,6
  1255. stvx 24,0,11
  1256. vperm 25,26,31,10
  1257. lvx 28,27,6
  1258. stvx 25,8,11
  1259. addi 11,1,79
  1260. vperm 26,27,26,10
  1261. lvx 29,28,6
  1262. vperm 27,28,27,10
  1263. lvx 30,29,6
  1264. vperm 28,29,28,10
  1265. lvx 31,30,6
  1266. vperm 29,30,29,10
  1267. lvx 15,31,6
  1268. vperm 30,31,30,10
  1269. lvx 24,0,11
  1270. vperm 31,15,31,10
  1271. lvx 25,8,11
  1272. vadduwm 7,11,11
  1273. subi 3,3,15
  1274. sldi 5,5,4
  1275. vadduwm 16,4,11
  1276. vadduwm 17,4,7
  1277. vxor 15,4,23
  1278. li 10,8
  1279. vadduwm 18,16,7
  1280. vxor 16,16,23
  1281. lvsl 6,0,10
  1282. vadduwm 19,17,7
  1283. vxor 17,17,23
  1284. vspltisb 3,0x0f
  1285. vadduwm 20,18,7
  1286. vxor 18,18,23
  1287. vxor 6,6,3
  1288. vadduwm 21,19,7
  1289. vxor 19,19,23
  1290. vadduwm 22,20,7
  1291. vxor 20,20,23
  1292. vadduwm 4,21,7
  1293. vxor 21,21,23
  1294. vxor 22,22,23
  1295. mtctr 9
  1296. b .Loop_ctr32_enc8x
  1297. .align 5
  1298. .Loop_ctr32_enc8x:
  1299. .long 0x11EFC508
  1300. .long 0x1210C508
  1301. .long 0x1231C508
  1302. .long 0x1252C508
  1303. .long 0x1273C508
  1304. .long 0x1294C508
  1305. .long 0x12B5C508
  1306. .long 0x12D6C508
  1307. .Loop_ctr32_enc8x_middle:
  1308. lvx 24,26,11
  1309. addi 11,11,0x20
  1310. .long 0x11EFCD08
  1311. .long 0x1210CD08
  1312. .long 0x1231CD08
  1313. .long 0x1252CD08
  1314. .long 0x1273CD08
  1315. .long 0x1294CD08
  1316. .long 0x12B5CD08
  1317. .long 0x12D6CD08
  1318. lvx 25,8,11
  1319. bdnz .Loop_ctr32_enc8x
  1320. subic 11,5,256
  1321. .long 0x11EFC508
  1322. .long 0x1210C508
  1323. .long 0x1231C508
  1324. .long 0x1252C508
  1325. .long 0x1273C508
  1326. .long 0x1294C508
  1327. .long 0x12B5C508
  1328. .long 0x12D6C508
  1329. subfe 0,0,0
  1330. .long 0x11EFCD08
  1331. .long 0x1210CD08
  1332. .long 0x1231CD08
  1333. .long 0x1252CD08
  1334. .long 0x1273CD08
  1335. .long 0x1294CD08
  1336. .long 0x12B5CD08
  1337. .long 0x12D6CD08
  1338. and 0,0,11
  1339. addi 11,1,79
  1340. .long 0x11EFD508
  1341. .long 0x1210D508
  1342. .long 0x1231D508
  1343. .long 0x1252D508
  1344. .long 0x1273D508
  1345. .long 0x1294D508
  1346. .long 0x12B5D508
  1347. .long 0x12D6D508
  1348. lvx 24,0,11
  1349. subic 5,5,129
  1350. .long 0x11EFDD08
  1351. addi 5,5,1
  1352. .long 0x1210DD08
  1353. .long 0x1231DD08
  1354. .long 0x1252DD08
  1355. .long 0x1273DD08
  1356. .long 0x1294DD08
  1357. .long 0x12B5DD08
  1358. .long 0x12D6DD08
  1359. lvx 25,8,11
  1360. .long 0x11EFE508
  1361. .long 0x7C001E99
  1362. .long 0x1210E508
  1363. .long 0x7C281E99
  1364. .long 0x1231E508
  1365. .long 0x7C5A1E99
  1366. .long 0x1252E508
  1367. .long 0x7C7B1E99
  1368. .long 0x1273E508
  1369. .long 0x7D5C1E99
  1370. .long 0x1294E508
  1371. .long 0x7D9D1E99
  1372. .long 0x12B5E508
  1373. .long 0x7DBE1E99
  1374. .long 0x12D6E508
  1375. .long 0x7DDF1E99
  1376. addi 3,3,0x80
  1377. .long 0x11EFED08
  1378. vperm 0,0,0,6
  1379. .long 0x1210ED08
  1380. vperm 1,1,1,6
  1381. .long 0x1231ED08
  1382. vperm 2,2,2,6
  1383. .long 0x1252ED08
  1384. vperm 3,3,3,6
  1385. .long 0x1273ED08
  1386. vperm 10,10,10,6
  1387. .long 0x1294ED08
  1388. vperm 12,12,12,6
  1389. .long 0x12B5ED08
  1390. vperm 13,13,13,6
  1391. .long 0x12D6ED08
  1392. vperm 14,14,14,6
  1393. add 3,3,0
  1394. subfe. 0,0,0
  1395. .long 0x11EFF508
  1396. vxor 0,0,31
  1397. .long 0x1210F508
  1398. vxor 1,1,31
  1399. .long 0x1231F508
  1400. vxor 2,2,31
  1401. .long 0x1252F508
  1402. vxor 3,3,31
  1403. .long 0x1273F508
  1404. vxor 10,10,31
  1405. .long 0x1294F508
  1406. vxor 12,12,31
  1407. .long 0x12B5F508
  1408. vxor 13,13,31
  1409. .long 0x12D6F508
  1410. vxor 14,14,31
  1411. bne .Lctr32_enc8x_break
  1412. .long 0x100F0509
  1413. .long 0x10300D09
  1414. vadduwm 16,4,11
  1415. .long 0x10511509
  1416. vadduwm 17,4,7
  1417. vxor 15,4,23
  1418. .long 0x10721D09
  1419. vadduwm 18,16,7
  1420. vxor 16,16,23
  1421. .long 0x11535509
  1422. vadduwm 19,17,7
  1423. vxor 17,17,23
  1424. .long 0x11946509
  1425. vadduwm 20,18,7
  1426. vxor 18,18,23
  1427. .long 0x11B56D09
  1428. vadduwm 21,19,7
  1429. vxor 19,19,23
  1430. .long 0x11D67509
  1431. vadduwm 22,20,7
  1432. vxor 20,20,23
  1433. vperm 0,0,0,6
  1434. vadduwm 4,21,7
  1435. vxor 21,21,23
  1436. vperm 1,1,1,6
  1437. vxor 22,22,23
  1438. mtctr 9
  1439. .long 0x11EFC508
  1440. .long 0x7C002799
  1441. vperm 2,2,2,6
  1442. .long 0x1210C508
  1443. .long 0x7C282799
  1444. vperm 3,3,3,6
  1445. .long 0x1231C508
  1446. .long 0x7C5A2799
  1447. vperm 10,10,10,6
  1448. .long 0x1252C508
  1449. .long 0x7C7B2799
  1450. vperm 12,12,12,6
  1451. .long 0x1273C508
  1452. .long 0x7D5C2799
  1453. vperm 13,13,13,6
  1454. .long 0x1294C508
  1455. .long 0x7D9D2799
  1456. vperm 14,14,14,6
  1457. .long 0x12B5C508
  1458. .long 0x7DBE2799
  1459. .long 0x12D6C508
  1460. .long 0x7DDF2799
  1461. addi 4,4,0x80
  1462. b .Loop_ctr32_enc8x_middle
  1463. .align 5
  1464. .Lctr32_enc8x_break:
  1465. cmpwi 5,-0x60
  1466. blt .Lctr32_enc8x_one
  1467. nop
  1468. beq .Lctr32_enc8x_two
  1469. cmpwi 5,-0x40
  1470. blt .Lctr32_enc8x_three
  1471. nop
  1472. beq .Lctr32_enc8x_four
  1473. cmpwi 5,-0x20
  1474. blt .Lctr32_enc8x_five
  1475. nop
  1476. beq .Lctr32_enc8x_six
  1477. cmpwi 5,0x00
  1478. blt .Lctr32_enc8x_seven
  1479. .Lctr32_enc8x_eight:
  1480. .long 0x11EF0509
  1481. .long 0x12100D09
  1482. .long 0x12311509
  1483. .long 0x12521D09
  1484. .long 0x12735509
  1485. .long 0x12946509
  1486. .long 0x12B56D09
  1487. .long 0x12D67509
  1488. vperm 15,15,15,6
  1489. vperm 16,16,16,6
  1490. .long 0x7DE02799
  1491. vperm 17,17,17,6
  1492. .long 0x7E082799
  1493. vperm 18,18,18,6
  1494. .long 0x7E3A2799
  1495. vperm 19,19,19,6
  1496. .long 0x7E5B2799
  1497. vperm 20,20,20,6
  1498. .long 0x7E7C2799
  1499. vperm 21,21,21,6
  1500. .long 0x7E9D2799
  1501. vperm 22,22,22,6
  1502. .long 0x7EBE2799
  1503. .long 0x7EDF2799
  1504. addi 4,4,0x80
  1505. b .Lctr32_enc8x_done
  1506. .align 5
  1507. .Lctr32_enc8x_seven:
  1508. .long 0x11EF0D09
  1509. .long 0x12101509
  1510. .long 0x12311D09
  1511. .long 0x12525509
  1512. .long 0x12736509
  1513. .long 0x12946D09
  1514. .long 0x12B57509
  1515. vperm 15,15,15,6
  1516. vperm 16,16,16,6
  1517. .long 0x7DE02799
  1518. vperm 17,17,17,6
  1519. .long 0x7E082799
  1520. vperm 18,18,18,6
  1521. .long 0x7E3A2799
  1522. vperm 19,19,19,6
  1523. .long 0x7E5B2799
  1524. vperm 20,20,20,6
  1525. .long 0x7E7C2799
  1526. vperm 21,21,21,6
  1527. .long 0x7E9D2799
  1528. .long 0x7EBE2799
  1529. addi 4,4,0x70
  1530. b .Lctr32_enc8x_done
  1531. .align 5
  1532. .Lctr32_enc8x_six:
  1533. .long 0x11EF1509
  1534. .long 0x12101D09
  1535. .long 0x12315509
  1536. .long 0x12526509
  1537. .long 0x12736D09
  1538. .long 0x12947509
  1539. vperm 15,15,15,6
  1540. vperm 16,16,16,6
  1541. .long 0x7DE02799
  1542. vperm 17,17,17,6
  1543. .long 0x7E082799
  1544. vperm 18,18,18,6
  1545. .long 0x7E3A2799
  1546. vperm 19,19,19,6
  1547. .long 0x7E5B2799
  1548. vperm 20,20,20,6
  1549. .long 0x7E7C2799
  1550. .long 0x7E9D2799
  1551. addi 4,4,0x60
  1552. b .Lctr32_enc8x_done
  1553. .align 5
  1554. .Lctr32_enc8x_five:
  1555. .long 0x11EF1D09
  1556. .long 0x12105509
  1557. .long 0x12316509
  1558. .long 0x12526D09
  1559. .long 0x12737509
  1560. vperm 15,15,15,6
  1561. vperm 16,16,16,6
  1562. .long 0x7DE02799
  1563. vperm 17,17,17,6
  1564. .long 0x7E082799
  1565. vperm 18,18,18,6
  1566. .long 0x7E3A2799
  1567. vperm 19,19,19,6
  1568. .long 0x7E5B2799
  1569. .long 0x7E7C2799
  1570. addi 4,4,0x50
  1571. b .Lctr32_enc8x_done
  1572. .align 5
  1573. .Lctr32_enc8x_four:
  1574. .long 0x11EF5509
  1575. .long 0x12106509
  1576. .long 0x12316D09
  1577. .long 0x12527509
  1578. vperm 15,15,15,6
  1579. vperm 16,16,16,6
  1580. .long 0x7DE02799
  1581. vperm 17,17,17,6
  1582. .long 0x7E082799
  1583. vperm 18,18,18,6
  1584. .long 0x7E3A2799
  1585. .long 0x7E5B2799
  1586. addi 4,4,0x40
  1587. b .Lctr32_enc8x_done
  1588. .align 5
  1589. .Lctr32_enc8x_three:
  1590. .long 0x11EF6509
  1591. .long 0x12106D09
  1592. .long 0x12317509
  1593. vperm 15,15,15,6
  1594. vperm 16,16,16,6
  1595. .long 0x7DE02799
  1596. vperm 17,17,17,6
  1597. .long 0x7E082799
  1598. .long 0x7E3A2799
  1599. addi 4,4,0x30
  1600. b .Lctr32_enc8x_done
  1601. .align 5
  1602. .Lctr32_enc8x_two:
  1603. .long 0x11EF6D09
  1604. .long 0x12107509
  1605. vperm 15,15,15,6
  1606. vperm 16,16,16,6
  1607. .long 0x7DE02799
  1608. .long 0x7E082799
  1609. addi 4,4,0x20
  1610. b .Lctr32_enc8x_done
  1611. .align 5
  1612. .Lctr32_enc8x_one:
  1613. .long 0x11EF7509
  1614. vperm 15,15,15,6
  1615. .long 0x7DE02799
  1616. addi 4,4,0x10
  1617. .Lctr32_enc8x_done:
  1618. li 10,79
  1619. li 11,95
  1620. stvx 6,10,1
  1621. addi 10,10,32
  1622. stvx 6,11,1
  1623. addi 11,11,32
  1624. stvx 6,10,1
  1625. addi 10,10,32
  1626. stvx 6,11,1
  1627. addi 11,11,32
  1628. stvx 6,10,1
  1629. addi 10,10,32
  1630. stvx 6,11,1
  1631. addi 11,11,32
  1632. stvx 6,10,1
  1633. addi 10,10,32
  1634. stvx 6,11,1
  1635. addi 11,11,32
  1636. or 12,12,12
  1637. lvx 20,10,1
  1638. addi 10,10,32
  1639. lvx 21,11,1
  1640. addi 11,11,32
  1641. lvx 22,10,1
  1642. addi 10,10,32
  1643. lvx 23,11,1
  1644. addi 11,11,32
  1645. lvx 24,10,1
  1646. addi 10,10,32
  1647. lvx 25,11,1
  1648. addi 11,11,32
  1649. lvx 26,10,1
  1650. addi 10,10,32
  1651. lvx 27,11,1
  1652. addi 11,11,32
  1653. lvx 28,10,1
  1654. addi 10,10,32
  1655. lvx 29,11,1
  1656. addi 11,11,32
  1657. lvx 30,10,1
  1658. lvx 31,11,1
  1659. ld 26,400(1)
  1660. ld 27,408(1)
  1661. ld 28,416(1)
  1662. ld 29,424(1)
  1663. ld 30,432(1)
  1664. ld 31,440(1)
  1665. addi 1,1,448
  1666. blr
  1667. .long 0
  1668. .byte 0,12,0x04,0,0x80,6,6,0
  1669. .long 0
  1670. .size aes_hw_ctr32_encrypt_blocks,.-aes_hw_ctr32_encrypt_blocks
  1671. .globl aes_hw_xts_encrypt
  1672. .type aes_hw_xts_encrypt,@function
  1673. .align 5
  1674. aes_hw_xts_encrypt:
  1675. .localentry aes_hw_xts_encrypt,0
  1676. mr 10,3
  1677. li 3,-1
  1678. cmpldi 5,16
  1679. .long 0x4dc00020
  1680. lis 0,0xfff0
  1681. li 12,-1
  1682. li 11,0
  1683. or 0,0,0
  1684. vspltisb 9,0x07
  1685. lvsl 6,11,11
  1686. vspltisb 11,0x0f
  1687. vxor 6,6,9
  1688. li 3,15
  1689. lvx 8,0,8
  1690. lvsl 5,0,8
  1691. lvx 4,3,8
  1692. vxor 5,5,11
  1693. vperm 8,8,4,5
  1694. neg 11,10
  1695. lvsr 5,0,11
  1696. lvx 2,0,10
  1697. addi 10,10,15
  1698. vxor 5,5,11
  1699. cmpldi 7,0
  1700. beq .Lxts_enc_no_key2
  1701. lvsr 7,0,7
  1702. lwz 9,240(7)
  1703. srwi 9,9,1
  1704. subi 9,9,1
  1705. li 3,16
  1706. lvx 0,0,7
  1707. lvx 1,3,7
  1708. addi 3,3,16
  1709. vperm 0,1,0,7
  1710. vxor 8,8,0
  1711. lvx 0,3,7
  1712. addi 3,3,16
  1713. mtctr 9
  1714. .Ltweak_xts_enc:
  1715. vperm 1,0,1,7
  1716. .long 0x11080D08
  1717. lvx 1,3,7
  1718. addi 3,3,16
  1719. vperm 0,1,0,7
  1720. .long 0x11080508
  1721. lvx 0,3,7
  1722. addi 3,3,16
  1723. bdnz .Ltweak_xts_enc
  1724. vperm 1,0,1,7
  1725. .long 0x11080D08
  1726. lvx 1,3,7
  1727. vperm 0,1,0,7
  1728. .long 0x11080509
  1729. li 8,0
  1730. b .Lxts_enc
  1731. .Lxts_enc_no_key2:
  1732. li 3,-16
  1733. and 5,5,3
  1734. .Lxts_enc:
  1735. lvx 4,0,10
  1736. addi 10,10,16
  1737. lvsr 7,0,6
  1738. lwz 9,240(6)
  1739. srwi 9,9,1
  1740. subi 9,9,1
  1741. li 3,16
  1742. vslb 10,9,9
  1743. vor 10,10,9
  1744. vspltisb 11,1
  1745. vsldoi 10,10,11,15
  1746. cmpldi 5,96
  1747. bge _aesp8_xts_encrypt6x
  1748. andi. 7,5,15
  1749. subic 0,5,32
  1750. subi 7,7,16
  1751. subfe 0,0,0
  1752. and 0,0,7
  1753. add 10,10,0
  1754. lvx 0,0,6
  1755. lvx 1,3,6
  1756. addi 3,3,16
  1757. vperm 2,2,4,5
  1758. vperm 0,1,0,7
  1759. vxor 2,2,8
  1760. vxor 2,2,0
  1761. lvx 0,3,6
  1762. addi 3,3,16
  1763. mtctr 9
  1764. b .Loop_xts_enc
  1765. .align 5
  1766. .Loop_xts_enc:
  1767. vperm 1,0,1,7
  1768. .long 0x10420D08
  1769. lvx 1,3,6
  1770. addi 3,3,16
  1771. vperm 0,1,0,7
  1772. .long 0x10420508
  1773. lvx 0,3,6
  1774. addi 3,3,16
  1775. bdnz .Loop_xts_enc
  1776. vperm 1,0,1,7
  1777. .long 0x10420D08
  1778. lvx 1,3,6
  1779. li 3,16
  1780. vperm 0,1,0,7
  1781. vxor 0,0,8
  1782. .long 0x10620509
  1783. vperm 11,3,3,6
  1784. .long 0x7D602799
  1785. addi 4,4,16
  1786. subic. 5,5,16
  1787. beq .Lxts_enc_done
  1788. vor 2,4,4
  1789. lvx 4,0,10
  1790. addi 10,10,16
  1791. lvx 0,0,6
  1792. lvx 1,3,6
  1793. addi 3,3,16
  1794. subic 0,5,32
  1795. subfe 0,0,0
  1796. and 0,0,7
  1797. add 10,10,0
  1798. vsrab 11,8,9
  1799. vaddubm 8,8,8
  1800. vsldoi 11,11,11,15
  1801. vand 11,11,10
  1802. vxor 8,8,11
  1803. vperm 2,2,4,5
  1804. vperm 0,1,0,7
  1805. vxor 2,2,8
  1806. vxor 3,3,0
  1807. vxor 2,2,0
  1808. lvx 0,3,6
  1809. addi 3,3,16
  1810. mtctr 9
  1811. cmpldi 5,16
  1812. bge .Loop_xts_enc
  1813. vxor 3,3,8
  1814. lvsr 5,0,5
  1815. vxor 4,4,4
  1816. vspltisb 11,-1
  1817. vperm 4,4,11,5
  1818. vsel 2,2,3,4
  1819. subi 11,4,17
  1820. subi 4,4,16
  1821. mtctr 5
  1822. li 5,16
  1823. .Loop_xts_enc_steal:
  1824. lbzu 0,1(11)
  1825. stb 0,16(11)
  1826. bdnz .Loop_xts_enc_steal
  1827. mtctr 9
  1828. b .Loop_xts_enc
  1829. .Lxts_enc_done:
  1830. cmpldi 8,0
  1831. beq .Lxts_enc_ret
  1832. vsrab 11,8,9
  1833. vaddubm 8,8,8
  1834. vsldoi 11,11,11,15
  1835. vand 11,11,10
  1836. vxor 8,8,11
  1837. vperm 8,8,8,6
  1838. .long 0x7D004799
  1839. .Lxts_enc_ret:
  1840. or 12,12,12
  1841. li 3,0
  1842. blr
  1843. .long 0
  1844. .byte 0,12,0x04,0,0x80,6,6,0
  1845. .long 0
  1846. .size aes_hw_xts_encrypt,.-aes_hw_xts_encrypt
  1847. .globl aes_hw_xts_decrypt
  1848. .type aes_hw_xts_decrypt,@function
  1849. .align 5
  1850. aes_hw_xts_decrypt:
  1851. .localentry aes_hw_xts_decrypt,0
  1852. mr 10,3
  1853. li 3,-1
  1854. cmpldi 5,16
  1855. .long 0x4dc00020
  1856. lis 0,0xfff8
  1857. li 12,-1
  1858. li 11,0
  1859. or 0,0,0
  1860. andi. 0,5,15
  1861. neg 0,0
  1862. andi. 0,0,16
  1863. sub 5,5,0
  1864. vspltisb 9,0x07
  1865. lvsl 6,11,11
  1866. vspltisb 11,0x0f
  1867. vxor 6,6,9
  1868. li 3,15
  1869. lvx 8,0,8
  1870. lvsl 5,0,8
  1871. lvx 4,3,8
  1872. vxor 5,5,11
  1873. vperm 8,8,4,5
  1874. neg 11,10
  1875. lvsr 5,0,11
  1876. lvx 2,0,10
  1877. addi 10,10,15
  1878. vxor 5,5,11
  1879. cmpldi 7,0
  1880. beq .Lxts_dec_no_key2
  1881. lvsr 7,0,7
  1882. lwz 9,240(7)
  1883. srwi 9,9,1
  1884. subi 9,9,1
  1885. li 3,16
  1886. lvx 0,0,7
  1887. lvx 1,3,7
  1888. addi 3,3,16
  1889. vperm 0,1,0,7
  1890. vxor 8,8,0
  1891. lvx 0,3,7
  1892. addi 3,3,16
  1893. mtctr 9
  1894. .Ltweak_xts_dec:
  1895. vperm 1,0,1,7
  1896. .long 0x11080D08
  1897. lvx 1,3,7
  1898. addi 3,3,16
  1899. vperm 0,1,0,7
  1900. .long 0x11080508
  1901. lvx 0,3,7
  1902. addi 3,3,16
  1903. bdnz .Ltweak_xts_dec
  1904. vperm 1,0,1,7
  1905. .long 0x11080D08
  1906. lvx 1,3,7
  1907. vperm 0,1,0,7
  1908. .long 0x11080509
  1909. li 8,0
  1910. b .Lxts_dec
  1911. .Lxts_dec_no_key2:
  1912. neg 3,5
  1913. andi. 3,3,15
  1914. add 5,5,3
  1915. .Lxts_dec:
  1916. lvx 4,0,10
  1917. addi 10,10,16
  1918. lvsr 7,0,6
  1919. lwz 9,240(6)
  1920. srwi 9,9,1
  1921. subi 9,9,1
  1922. li 3,16
  1923. vslb 10,9,9
  1924. vor 10,10,9
  1925. vspltisb 11,1
  1926. vsldoi 10,10,11,15
  1927. cmpldi 5,96
  1928. bge _aesp8_xts_decrypt6x
  1929. lvx 0,0,6
  1930. lvx 1,3,6
  1931. addi 3,3,16
  1932. vperm 2,2,4,5
  1933. vperm 0,1,0,7
  1934. vxor 2,2,8
  1935. vxor 2,2,0
  1936. lvx 0,3,6
  1937. addi 3,3,16
  1938. mtctr 9
  1939. cmpldi 5,16
  1940. blt .Ltail_xts_dec
  1941. .align 5
  1942. .Loop_xts_dec:
  1943. vperm 1,0,1,7
  1944. .long 0x10420D48
  1945. lvx 1,3,6
  1946. addi 3,3,16
  1947. vperm 0,1,0,7
  1948. .long 0x10420548
  1949. lvx 0,3,6
  1950. addi 3,3,16
  1951. bdnz .Loop_xts_dec
  1952. vperm 1,0,1,7
  1953. .long 0x10420D48
  1954. lvx 1,3,6
  1955. li 3,16
  1956. vperm 0,1,0,7
  1957. vxor 0,0,8
  1958. .long 0x10620549
  1959. vperm 11,3,3,6
  1960. .long 0x7D602799
  1961. addi 4,4,16
  1962. subic. 5,5,16
  1963. beq .Lxts_dec_done
  1964. vor 2,4,4
  1965. lvx 4,0,10
  1966. addi 10,10,16
  1967. lvx 0,0,6
  1968. lvx 1,3,6
  1969. addi 3,3,16
  1970. vsrab 11,8,9
  1971. vaddubm 8,8,8
  1972. vsldoi 11,11,11,15
  1973. vand 11,11,10
  1974. vxor 8,8,11
  1975. vperm 2,2,4,5
  1976. vperm 0,1,0,7
  1977. vxor 2,2,8
  1978. vxor 2,2,0
  1979. lvx 0,3,6
  1980. addi 3,3,16
  1981. mtctr 9
  1982. cmpldi 5,16
  1983. bge .Loop_xts_dec
  1984. .Ltail_xts_dec:
  1985. vsrab 11,8,9
  1986. vaddubm 12,8,8
  1987. vsldoi 11,11,11,15
  1988. vand 11,11,10
  1989. vxor 12,12,11
  1990. subi 10,10,16
  1991. add 10,10,5
  1992. vxor 2,2,8
  1993. vxor 2,2,12
  1994. .Loop_xts_dec_short:
  1995. vperm 1,0,1,7
  1996. .long 0x10420D48
  1997. lvx 1,3,6
  1998. addi 3,3,16
  1999. vperm 0,1,0,7
  2000. .long 0x10420548
  2001. lvx 0,3,6
  2002. addi 3,3,16
  2003. bdnz .Loop_xts_dec_short
  2004. vperm 1,0,1,7
  2005. .long 0x10420D48
  2006. lvx 1,3,6
  2007. li 3,16
  2008. vperm 0,1,0,7
  2009. vxor 0,0,12
  2010. .long 0x10620549
  2011. vperm 11,3,3,6
  2012. .long 0x7D602799
  2013. vor 2,4,4
  2014. lvx 4,0,10
  2015. lvx 0,0,6
  2016. lvx 1,3,6
  2017. addi 3,3,16
  2018. vperm 2,2,4,5
  2019. vperm 0,1,0,7
  2020. lvsr 5,0,5
  2021. vxor 4,4,4
  2022. vspltisb 11,-1
  2023. vperm 4,4,11,5
  2024. vsel 2,2,3,4
  2025. vxor 0,0,8
  2026. vxor 2,2,0
  2027. lvx 0,3,6
  2028. addi 3,3,16
  2029. subi 11,4,1
  2030. mtctr 5
  2031. li 5,16
  2032. .Loop_xts_dec_steal:
  2033. lbzu 0,1(11)
  2034. stb 0,16(11)
  2035. bdnz .Loop_xts_dec_steal
  2036. mtctr 9
  2037. b .Loop_xts_dec
  2038. .Lxts_dec_done:
  2039. cmpldi 8,0
  2040. beq .Lxts_dec_ret
  2041. vsrab 11,8,9
  2042. vaddubm 8,8,8
  2043. vsldoi 11,11,11,15
  2044. vand 11,11,10
  2045. vxor 8,8,11
  2046. vperm 8,8,8,6
  2047. .long 0x7D004799
  2048. .Lxts_dec_ret:
  2049. or 12,12,12
  2050. li 3,0
  2051. blr
  2052. .long 0
  2053. .byte 0,12,0x04,0,0x80,6,6,0
  2054. .long 0
  2055. .size aes_hw_xts_decrypt,.-aes_hw_xts_decrypt
  2056. .align 5
  2057. _aesp8_xts_encrypt6x:
  2058. stdu 1,-448(1)
  2059. mflr 11
  2060. li 7,207
  2061. li 3,223
  2062. std 11,464(1)
  2063. stvx 20,7,1
  2064. addi 7,7,32
  2065. stvx 21,3,1
  2066. addi 3,3,32
  2067. stvx 22,7,1
  2068. addi 7,7,32
  2069. stvx 23,3,1
  2070. addi 3,3,32
  2071. stvx 24,7,1
  2072. addi 7,7,32
  2073. stvx 25,3,1
  2074. addi 3,3,32
  2075. stvx 26,7,1
  2076. addi 7,7,32
  2077. stvx 27,3,1
  2078. addi 3,3,32
  2079. stvx 28,7,1
  2080. addi 7,7,32
  2081. stvx 29,3,1
  2082. addi 3,3,32
  2083. stvx 30,7,1
  2084. stvx 31,3,1
  2085. li 0,-1
  2086. stw 12,396(1)
  2087. li 3,0x10
  2088. std 26,400(1)
  2089. li 26,0x20
  2090. std 27,408(1)
  2091. li 27,0x30
  2092. std 28,416(1)
  2093. li 28,0x40
  2094. std 29,424(1)
  2095. li 29,0x50
  2096. std 30,432(1)
  2097. li 30,0x60
  2098. std 31,440(1)
  2099. li 31,0x70
  2100. or 0,0,0
  2101. subi 9,9,3
  2102. lvx 23,0,6
  2103. lvx 30,3,6
  2104. addi 6,6,0x20
  2105. lvx 31,0,6
  2106. vperm 23,30,23,7
  2107. addi 7,1,79
  2108. mtctr 9
  2109. .Load_xts_enc_key:
  2110. vperm 24,31,30,7
  2111. lvx 30,3,6
  2112. addi 6,6,0x20
  2113. stvx 24,0,7
  2114. vperm 25,30,31,7
  2115. lvx 31,0,6
  2116. stvx 25,3,7
  2117. addi 7,7,0x20
  2118. bdnz .Load_xts_enc_key
  2119. lvx 26,3,6
  2120. vperm 24,31,30,7
  2121. lvx 27,26,6
  2122. stvx 24,0,7
  2123. vperm 25,26,31,7
  2124. lvx 28,27,6
  2125. stvx 25,3,7
  2126. addi 7,1,79
  2127. vperm 26,27,26,7
  2128. lvx 29,28,6
  2129. vperm 27,28,27,7
  2130. lvx 30,29,6
  2131. vperm 28,29,28,7
  2132. lvx 31,30,6
  2133. vperm 29,30,29,7
  2134. lvx 22,31,6
  2135. vperm 30,31,30,7
  2136. lvx 24,0,7
  2137. vperm 31,22,31,7
  2138. lvx 25,3,7
  2139. vperm 0,2,4,5
  2140. subi 10,10,31
  2141. vxor 17,8,23
  2142. vsrab 11,8,9
  2143. vaddubm 8,8,8
  2144. vsldoi 11,11,11,15
  2145. vand 11,11,10
  2146. vxor 7,0,17
  2147. vxor 8,8,11
  2148. .long 0x7C235699
  2149. vxor 18,8,23
  2150. vsrab 11,8,9
  2151. vaddubm 8,8,8
  2152. vsldoi 11,11,11,15
  2153. vperm 1,1,1,6
  2154. vand 11,11,10
  2155. vxor 12,1,18
  2156. vxor 8,8,11
  2157. .long 0x7C5A5699
  2158. andi. 31,5,15
  2159. vxor 19,8,23
  2160. vsrab 11,8,9
  2161. vaddubm 8,8,8
  2162. vsldoi 11,11,11,15
  2163. vperm 2,2,2,6
  2164. vand 11,11,10
  2165. vxor 13,2,19
  2166. vxor 8,8,11
  2167. .long 0x7C7B5699
  2168. sub 5,5,31
  2169. vxor 20,8,23
  2170. vsrab 11,8,9
  2171. vaddubm 8,8,8
  2172. vsldoi 11,11,11,15
  2173. vperm 3,3,3,6
  2174. vand 11,11,10
  2175. vxor 14,3,20
  2176. vxor 8,8,11
  2177. .long 0x7C9C5699
  2178. subi 5,5,0x60
  2179. vxor 21,8,23
  2180. vsrab 11,8,9
  2181. vaddubm 8,8,8
  2182. vsldoi 11,11,11,15
  2183. vperm 4,4,4,6
  2184. vand 11,11,10
  2185. vxor 15,4,21
  2186. vxor 8,8,11
  2187. .long 0x7CBD5699
  2188. addi 10,10,0x60
  2189. vxor 22,8,23
  2190. vsrab 11,8,9
  2191. vaddubm 8,8,8
  2192. vsldoi 11,11,11,15
  2193. vperm 5,5,5,6
  2194. vand 11,11,10
  2195. vxor 16,5,22
  2196. vxor 8,8,11
  2197. vxor 31,31,23
  2198. mtctr 9
  2199. b .Loop_xts_enc6x
  2200. .align 5
  2201. .Loop_xts_enc6x:
  2202. .long 0x10E7C508
  2203. .long 0x118CC508
  2204. .long 0x11ADC508
  2205. .long 0x11CEC508
  2206. .long 0x11EFC508
  2207. .long 0x1210C508
  2208. lvx 24,26,7
  2209. addi 7,7,0x20
  2210. .long 0x10E7CD08
  2211. .long 0x118CCD08
  2212. .long 0x11ADCD08
  2213. .long 0x11CECD08
  2214. .long 0x11EFCD08
  2215. .long 0x1210CD08
  2216. lvx 25,3,7
  2217. bdnz .Loop_xts_enc6x
  2218. subic 5,5,96
  2219. vxor 0,17,31
  2220. .long 0x10E7C508
  2221. .long 0x118CC508
  2222. vsrab 11,8,9
  2223. vxor 17,8,23
  2224. vaddubm 8,8,8
  2225. .long 0x11ADC508
  2226. .long 0x11CEC508
  2227. vsldoi 11,11,11,15
  2228. .long 0x11EFC508
  2229. .long 0x1210C508
  2230. subfe. 0,0,0
  2231. vand 11,11,10
  2232. .long 0x10E7CD08
  2233. .long 0x118CCD08
  2234. vxor 8,8,11
  2235. .long 0x11ADCD08
  2236. .long 0x11CECD08
  2237. vxor 1,18,31
  2238. vsrab 11,8,9
  2239. vxor 18,8,23
  2240. .long 0x11EFCD08
  2241. .long 0x1210CD08
  2242. and 0,0,5
  2243. vaddubm 8,8,8
  2244. vsldoi 11,11,11,15
  2245. .long 0x10E7D508
  2246. .long 0x118CD508
  2247. vand 11,11,10
  2248. .long 0x11ADD508
  2249. .long 0x11CED508
  2250. vxor 8,8,11
  2251. .long 0x11EFD508
  2252. .long 0x1210D508
  2253. add 10,10,0
  2254. vxor 2,19,31
  2255. vsrab 11,8,9
  2256. vxor 19,8,23
  2257. vaddubm 8,8,8
  2258. .long 0x10E7DD08
  2259. .long 0x118CDD08
  2260. vsldoi 11,11,11,15
  2261. .long 0x11ADDD08
  2262. .long 0x11CEDD08
  2263. vand 11,11,10
  2264. .long 0x11EFDD08
  2265. .long 0x1210DD08
  2266. addi 7,1,79
  2267. vxor 8,8,11
  2268. .long 0x10E7E508
  2269. .long 0x118CE508
  2270. vxor 3,20,31
  2271. vsrab 11,8,9
  2272. vxor 20,8,23
  2273. .long 0x11ADE508
  2274. .long 0x11CEE508
  2275. vaddubm 8,8,8
  2276. vsldoi 11,11,11,15
  2277. .long 0x11EFE508
  2278. .long 0x1210E508
  2279. lvx 24,0,7
  2280. vand 11,11,10
  2281. .long 0x10E7ED08
  2282. .long 0x118CED08
  2283. vxor 8,8,11
  2284. .long 0x11ADED08
  2285. .long 0x11CEED08
  2286. vxor 4,21,31
  2287. vsrab 11,8,9
  2288. vxor 21,8,23
  2289. .long 0x11EFED08
  2290. .long 0x1210ED08
  2291. lvx 25,3,7
  2292. vaddubm 8,8,8
  2293. vsldoi 11,11,11,15
  2294. .long 0x10E7F508
  2295. .long 0x118CF508
  2296. vand 11,11,10
  2297. .long 0x11ADF508
  2298. .long 0x11CEF508
  2299. vxor 8,8,11
  2300. .long 0x11EFF508
  2301. .long 0x1210F508
  2302. vxor 5,22,31
  2303. vsrab 11,8,9
  2304. vxor 22,8,23
  2305. .long 0x10E70509
  2306. .long 0x7C005699
  2307. vaddubm 8,8,8
  2308. vsldoi 11,11,11,15
  2309. .long 0x118C0D09
  2310. .long 0x7C235699
  2311. .long 0x11AD1509
  2312. vperm 0,0,0,6
  2313. .long 0x7C5A5699
  2314. vand 11,11,10
  2315. .long 0x11CE1D09
  2316. vperm 1,1,1,6
  2317. .long 0x7C7B5699
  2318. .long 0x11EF2509
  2319. vperm 2,2,2,6
  2320. .long 0x7C9C5699
  2321. vxor 8,8,11
  2322. .long 0x11702D09
  2323. vperm 3,3,3,6
  2324. .long 0x7CBD5699
  2325. addi 10,10,0x60
  2326. vperm 4,4,4,6
  2327. vperm 5,5,5,6
  2328. vperm 7,7,7,6
  2329. vperm 12,12,12,6
  2330. .long 0x7CE02799
  2331. vxor 7,0,17
  2332. vperm 13,13,13,6
  2333. .long 0x7D832799
  2334. vxor 12,1,18
  2335. vperm 14,14,14,6
  2336. .long 0x7DBA2799
  2337. vxor 13,2,19
  2338. vperm 15,15,15,6
  2339. .long 0x7DDB2799
  2340. vxor 14,3,20
  2341. vperm 16,11,11,6
  2342. .long 0x7DFC2799
  2343. vxor 15,4,21
  2344. .long 0x7E1D2799
  2345. vxor 16,5,22
  2346. addi 4,4,0x60
  2347. mtctr 9
  2348. beq .Loop_xts_enc6x
  2349. addic. 5,5,0x60
  2350. beq .Lxts_enc6x_zero
  2351. cmpwi 5,0x20
  2352. blt .Lxts_enc6x_one
  2353. nop
  2354. beq .Lxts_enc6x_two
  2355. cmpwi 5,0x40
  2356. blt .Lxts_enc6x_three
  2357. nop
  2358. beq .Lxts_enc6x_four
  2359. .Lxts_enc6x_five:
  2360. vxor 7,1,17
  2361. vxor 12,2,18
  2362. vxor 13,3,19
  2363. vxor 14,4,20
  2364. vxor 15,5,21
  2365. bl _aesp8_xts_enc5x
  2366. vperm 7,7,7,6
  2367. vor 17,22,22
  2368. vperm 12,12,12,6
  2369. .long 0x7CE02799
  2370. vperm 13,13,13,6
  2371. .long 0x7D832799
  2372. vperm 14,14,14,6
  2373. .long 0x7DBA2799
  2374. vxor 11,15,22
  2375. vperm 15,15,15,6
  2376. .long 0x7DDB2799
  2377. .long 0x7DFC2799
  2378. addi 4,4,0x50
  2379. bne .Lxts_enc6x_steal
  2380. b .Lxts_enc6x_done
  2381. .align 4
  2382. .Lxts_enc6x_four:
  2383. vxor 7,2,17
  2384. vxor 12,3,18
  2385. vxor 13,4,19
  2386. vxor 14,5,20
  2387. vxor 15,15,15
  2388. bl _aesp8_xts_enc5x
  2389. vperm 7,7,7,6
  2390. vor 17,21,21
  2391. vperm 12,12,12,6
  2392. .long 0x7CE02799
  2393. vperm 13,13,13,6
  2394. .long 0x7D832799
  2395. vxor 11,14,21
  2396. vperm 14,14,14,6
  2397. .long 0x7DBA2799
  2398. .long 0x7DDB2799
  2399. addi 4,4,0x40
  2400. bne .Lxts_enc6x_steal
  2401. b .Lxts_enc6x_done
  2402. .align 4
  2403. .Lxts_enc6x_three:
  2404. vxor 7,3,17
  2405. vxor 12,4,18
  2406. vxor 13,5,19
  2407. vxor 14,14,14
  2408. vxor 15,15,15
  2409. bl _aesp8_xts_enc5x
  2410. vperm 7,7,7,6
  2411. vor 17,20,20
  2412. vperm 12,12,12,6
  2413. .long 0x7CE02799
  2414. vxor 11,13,20
  2415. vperm 13,13,13,6
  2416. .long 0x7D832799
  2417. .long 0x7DBA2799
  2418. addi 4,4,0x30
  2419. bne .Lxts_enc6x_steal
  2420. b .Lxts_enc6x_done
  2421. .align 4
  2422. .Lxts_enc6x_two:
  2423. vxor 7,4,17
  2424. vxor 12,5,18
  2425. vxor 13,13,13
  2426. vxor 14,14,14
  2427. vxor 15,15,15
  2428. bl _aesp8_xts_enc5x
  2429. vperm 7,7,7,6
  2430. vor 17,19,19
  2431. vxor 11,12,19
  2432. vperm 12,12,12,6
  2433. .long 0x7CE02799
  2434. .long 0x7D832799
  2435. addi 4,4,0x20
  2436. bne .Lxts_enc6x_steal
  2437. b .Lxts_enc6x_done
  2438. .align 4
  2439. .Lxts_enc6x_one:
  2440. vxor 7,5,17
  2441. nop
  2442. .Loop_xts_enc1x:
  2443. .long 0x10E7C508
  2444. lvx 24,26,7
  2445. addi 7,7,0x20
  2446. .long 0x10E7CD08
  2447. lvx 25,3,7
  2448. bdnz .Loop_xts_enc1x
  2449. add 10,10,31
  2450. cmpwi 31,0
  2451. .long 0x10E7C508
  2452. subi 10,10,16
  2453. .long 0x10E7CD08
  2454. lvsr 5,0,31
  2455. .long 0x10E7D508
  2456. .long 0x7C005699
  2457. .long 0x10E7DD08
  2458. addi 7,1,79
  2459. .long 0x10E7E508
  2460. lvx 24,0,7
  2461. .long 0x10E7ED08
  2462. lvx 25,3,7
  2463. vxor 17,17,31
  2464. vperm 0,0,0,6
  2465. .long 0x10E7F508
  2466. vperm 0,0,0,5
  2467. .long 0x10E78D09
  2468. vor 17,18,18
  2469. vxor 11,7,18
  2470. vperm 7,7,7,6
  2471. .long 0x7CE02799
  2472. addi 4,4,0x10
  2473. bne .Lxts_enc6x_steal
  2474. b .Lxts_enc6x_done
  2475. .align 4
  2476. .Lxts_enc6x_zero:
  2477. cmpwi 31,0
  2478. beq .Lxts_enc6x_done
  2479. add 10,10,31
  2480. subi 10,10,16
  2481. .long 0x7C005699
  2482. lvsr 5,0,31
  2483. vperm 0,0,0,6
  2484. vperm 0,0,0,5
  2485. vxor 11,11,17
  2486. .Lxts_enc6x_steal:
  2487. vxor 0,0,17
  2488. vxor 7,7,7
  2489. vspltisb 12,-1
  2490. vperm 7,7,12,5
  2491. vsel 7,0,11,7
  2492. subi 30,4,17
  2493. subi 4,4,16
  2494. mtctr 31
  2495. .Loop_xts_enc6x_steal:
  2496. lbzu 0,1(30)
  2497. stb 0,16(30)
  2498. bdnz .Loop_xts_enc6x_steal
  2499. li 31,0
  2500. mtctr 9
  2501. b .Loop_xts_enc1x
  2502. .align 4
  2503. .Lxts_enc6x_done:
  2504. cmpldi 8,0
  2505. beq .Lxts_enc6x_ret
  2506. vxor 8,17,23
  2507. vperm 8,8,8,6
  2508. .long 0x7D004799
  2509. .Lxts_enc6x_ret:
  2510. mtlr 11
  2511. li 10,79
  2512. li 11,95
  2513. stvx 9,10,1
  2514. addi 10,10,32
  2515. stvx 9,11,1
  2516. addi 11,11,32
  2517. stvx 9,10,1
  2518. addi 10,10,32
  2519. stvx 9,11,1
  2520. addi 11,11,32
  2521. stvx 9,10,1
  2522. addi 10,10,32
  2523. stvx 9,11,1
  2524. addi 11,11,32
  2525. stvx 9,10,1
  2526. addi 10,10,32
  2527. stvx 9,11,1
  2528. addi 11,11,32
  2529. or 12,12,12
  2530. lvx 20,10,1
  2531. addi 10,10,32
  2532. lvx 21,11,1
  2533. addi 11,11,32
  2534. lvx 22,10,1
  2535. addi 10,10,32
  2536. lvx 23,11,1
  2537. addi 11,11,32
  2538. lvx 24,10,1
  2539. addi 10,10,32
  2540. lvx 25,11,1
  2541. addi 11,11,32
  2542. lvx 26,10,1
  2543. addi 10,10,32
  2544. lvx 27,11,1
  2545. addi 11,11,32
  2546. lvx 28,10,1
  2547. addi 10,10,32
  2548. lvx 29,11,1
  2549. addi 11,11,32
  2550. lvx 30,10,1
  2551. lvx 31,11,1
  2552. ld 26,400(1)
  2553. ld 27,408(1)
  2554. ld 28,416(1)
  2555. ld 29,424(1)
  2556. ld 30,432(1)
  2557. ld 31,440(1)
  2558. addi 1,1,448
  2559. blr
  2560. .long 0
  2561. .byte 0,12,0x04,1,0x80,6,6,0
  2562. .long 0
  2563. .align 5
  2564. _aesp8_xts_enc5x:
  2565. .long 0x10E7C508
  2566. .long 0x118CC508
  2567. .long 0x11ADC508
  2568. .long 0x11CEC508
  2569. .long 0x11EFC508
  2570. lvx 24,26,7
  2571. addi 7,7,0x20
  2572. .long 0x10E7CD08
  2573. .long 0x118CCD08
  2574. .long 0x11ADCD08
  2575. .long 0x11CECD08
  2576. .long 0x11EFCD08
  2577. lvx 25,3,7
  2578. bdnz _aesp8_xts_enc5x
  2579. add 10,10,31
  2580. cmpwi 31,0
  2581. .long 0x10E7C508
  2582. .long 0x118CC508
  2583. .long 0x11ADC508
  2584. .long 0x11CEC508
  2585. .long 0x11EFC508
  2586. subi 10,10,16
  2587. .long 0x10E7CD08
  2588. .long 0x118CCD08
  2589. .long 0x11ADCD08
  2590. .long 0x11CECD08
  2591. .long 0x11EFCD08
  2592. vxor 17,17,31
  2593. .long 0x10E7D508
  2594. lvsr 5,0,31
  2595. .long 0x118CD508
  2596. .long 0x11ADD508
  2597. .long 0x11CED508
  2598. .long 0x11EFD508
  2599. vxor 1,18,31
  2600. .long 0x10E7DD08
  2601. .long 0x7C005699
  2602. .long 0x118CDD08
  2603. .long 0x11ADDD08
  2604. .long 0x11CEDD08
  2605. .long 0x11EFDD08
  2606. vxor 2,19,31
  2607. addi 7,1,79
  2608. .long 0x10E7E508
  2609. .long 0x118CE508
  2610. .long 0x11ADE508
  2611. .long 0x11CEE508
  2612. .long 0x11EFE508
  2613. lvx 24,0,7
  2614. vxor 3,20,31
  2615. .long 0x10E7ED08
  2616. vperm 0,0,0,6
  2617. .long 0x118CED08
  2618. .long 0x11ADED08
  2619. .long 0x11CEED08
  2620. .long 0x11EFED08
  2621. lvx 25,3,7
  2622. vxor 4,21,31
  2623. .long 0x10E7F508
  2624. vperm 0,0,0,5
  2625. .long 0x118CF508
  2626. .long 0x11ADF508
  2627. .long 0x11CEF508
  2628. .long 0x11EFF508
  2629. .long 0x10E78D09
  2630. .long 0x118C0D09
  2631. .long 0x11AD1509
  2632. .long 0x11CE1D09
  2633. .long 0x11EF2509
  2634. blr
  2635. .long 0
  2636. .byte 0,12,0x14,0,0,0,0,0
  2637. .align 5
  2638. _aesp8_xts_decrypt6x:
  2639. stdu 1,-448(1)
  2640. mflr 11
  2641. li 7,207
  2642. li 3,223
  2643. std 11,464(1)
  2644. stvx 20,7,1
  2645. addi 7,7,32
  2646. stvx 21,3,1
  2647. addi 3,3,32
  2648. stvx 22,7,1
  2649. addi 7,7,32
  2650. stvx 23,3,1
  2651. addi 3,3,32
  2652. stvx 24,7,1
  2653. addi 7,7,32
  2654. stvx 25,3,1
  2655. addi 3,3,32
  2656. stvx 26,7,1
  2657. addi 7,7,32
  2658. stvx 27,3,1
  2659. addi 3,3,32
  2660. stvx 28,7,1
  2661. addi 7,7,32
  2662. stvx 29,3,1
  2663. addi 3,3,32
  2664. stvx 30,7,1
  2665. stvx 31,3,1
  2666. li 0,-1
  2667. stw 12,396(1)
  2668. li 3,0x10
  2669. std 26,400(1)
  2670. li 26,0x20
  2671. std 27,408(1)
  2672. li 27,0x30
  2673. std 28,416(1)
  2674. li 28,0x40
  2675. std 29,424(1)
  2676. li 29,0x50
  2677. std 30,432(1)
  2678. li 30,0x60
  2679. std 31,440(1)
  2680. li 31,0x70
  2681. or 0,0,0
  2682. subi 9,9,3
  2683. lvx 23,0,6
  2684. lvx 30,3,6
  2685. addi 6,6,0x20
  2686. lvx 31,0,6
  2687. vperm 23,30,23,7
  2688. addi 7,1,79
  2689. mtctr 9
  2690. .Load_xts_dec_key:
  2691. vperm 24,31,30,7
  2692. lvx 30,3,6
  2693. addi 6,6,0x20
  2694. stvx 24,0,7
  2695. vperm 25,30,31,7
  2696. lvx 31,0,6
  2697. stvx 25,3,7
  2698. addi 7,7,0x20
  2699. bdnz .Load_xts_dec_key
  2700. lvx 26,3,6
  2701. vperm 24,31,30,7
  2702. lvx 27,26,6
  2703. stvx 24,0,7
  2704. vperm 25,26,31,7
  2705. lvx 28,27,6
  2706. stvx 25,3,7
  2707. addi 7,1,79
  2708. vperm 26,27,26,7
  2709. lvx 29,28,6
  2710. vperm 27,28,27,7
  2711. lvx 30,29,6
  2712. vperm 28,29,28,7
  2713. lvx 31,30,6
  2714. vperm 29,30,29,7
  2715. lvx 22,31,6
  2716. vperm 30,31,30,7
  2717. lvx 24,0,7
  2718. vperm 31,22,31,7
  2719. lvx 25,3,7
  2720. vperm 0,2,4,5
  2721. subi 10,10,31
  2722. vxor 17,8,23
  2723. vsrab 11,8,9
  2724. vaddubm 8,8,8
  2725. vsldoi 11,11,11,15
  2726. vand 11,11,10
  2727. vxor 7,0,17
  2728. vxor 8,8,11
  2729. .long 0x7C235699
  2730. vxor 18,8,23
  2731. vsrab 11,8,9
  2732. vaddubm 8,8,8
  2733. vsldoi 11,11,11,15
  2734. vperm 1,1,1,6
  2735. vand 11,11,10
  2736. vxor 12,1,18
  2737. vxor 8,8,11
  2738. .long 0x7C5A5699
  2739. andi. 31,5,15
  2740. vxor 19,8,23
  2741. vsrab 11,8,9
  2742. vaddubm 8,8,8
  2743. vsldoi 11,11,11,15
  2744. vperm 2,2,2,6
  2745. vand 11,11,10
  2746. vxor 13,2,19
  2747. vxor 8,8,11
  2748. .long 0x7C7B5699
  2749. sub 5,5,31
  2750. vxor 20,8,23
  2751. vsrab 11,8,9
  2752. vaddubm 8,8,8
  2753. vsldoi 11,11,11,15
  2754. vperm 3,3,3,6
  2755. vand 11,11,10
  2756. vxor 14,3,20
  2757. vxor 8,8,11
  2758. .long 0x7C9C5699
  2759. subi 5,5,0x60
  2760. vxor 21,8,23
  2761. vsrab 11,8,9
  2762. vaddubm 8,8,8
  2763. vsldoi 11,11,11,15
  2764. vperm 4,4,4,6
  2765. vand 11,11,10
  2766. vxor 15,4,21
  2767. vxor 8,8,11
  2768. .long 0x7CBD5699
  2769. addi 10,10,0x60
  2770. vxor 22,8,23
  2771. vsrab 11,8,9
  2772. vaddubm 8,8,8
  2773. vsldoi 11,11,11,15
  2774. vperm 5,5,5,6
  2775. vand 11,11,10
  2776. vxor 16,5,22
  2777. vxor 8,8,11
  2778. vxor 31,31,23
  2779. mtctr 9
  2780. b .Loop_xts_dec6x
  2781. .align 5
  2782. .Loop_xts_dec6x:
  2783. .long 0x10E7C548
  2784. .long 0x118CC548
  2785. .long 0x11ADC548
  2786. .long 0x11CEC548
  2787. .long 0x11EFC548
  2788. .long 0x1210C548
  2789. lvx 24,26,7
  2790. addi 7,7,0x20
  2791. .long 0x10E7CD48
  2792. .long 0x118CCD48
  2793. .long 0x11ADCD48
  2794. .long 0x11CECD48
  2795. .long 0x11EFCD48
  2796. .long 0x1210CD48
  2797. lvx 25,3,7
  2798. bdnz .Loop_xts_dec6x
  2799. subic 5,5,96
  2800. vxor 0,17,31
  2801. .long 0x10E7C548
  2802. .long 0x118CC548
  2803. vsrab 11,8,9
  2804. vxor 17,8,23
  2805. vaddubm 8,8,8
  2806. .long 0x11ADC548
  2807. .long 0x11CEC548
  2808. vsldoi 11,11,11,15
  2809. .long 0x11EFC548
  2810. .long 0x1210C548
  2811. subfe. 0,0,0
  2812. vand 11,11,10
  2813. .long 0x10E7CD48
  2814. .long 0x118CCD48
  2815. vxor 8,8,11
  2816. .long 0x11ADCD48
  2817. .long 0x11CECD48
  2818. vxor 1,18,31
  2819. vsrab 11,8,9
  2820. vxor 18,8,23
  2821. .long 0x11EFCD48
  2822. .long 0x1210CD48
  2823. and 0,0,5
  2824. vaddubm 8,8,8
  2825. vsldoi 11,11,11,15
  2826. .long 0x10E7D548
  2827. .long 0x118CD548
  2828. vand 11,11,10
  2829. .long 0x11ADD548
  2830. .long 0x11CED548
  2831. vxor 8,8,11
  2832. .long 0x11EFD548
  2833. .long 0x1210D548
  2834. add 10,10,0
  2835. vxor 2,19,31
  2836. vsrab 11,8,9
  2837. vxor 19,8,23
  2838. vaddubm 8,8,8
  2839. .long 0x10E7DD48
  2840. .long 0x118CDD48
  2841. vsldoi 11,11,11,15
  2842. .long 0x11ADDD48
  2843. .long 0x11CEDD48
  2844. vand 11,11,10
  2845. .long 0x11EFDD48
  2846. .long 0x1210DD48
  2847. addi 7,1,79
  2848. vxor 8,8,11
  2849. .long 0x10E7E548
  2850. .long 0x118CE548
  2851. vxor 3,20,31
  2852. vsrab 11,8,9
  2853. vxor 20,8,23
  2854. .long 0x11ADE548
  2855. .long 0x11CEE548
  2856. vaddubm 8,8,8
  2857. vsldoi 11,11,11,15
  2858. .long 0x11EFE548
  2859. .long 0x1210E548
  2860. lvx 24,0,7
  2861. vand 11,11,10
  2862. .long 0x10E7ED48
  2863. .long 0x118CED48
  2864. vxor 8,8,11
  2865. .long 0x11ADED48
  2866. .long 0x11CEED48
  2867. vxor 4,21,31
  2868. vsrab 11,8,9
  2869. vxor 21,8,23
  2870. .long 0x11EFED48
  2871. .long 0x1210ED48
  2872. lvx 25,3,7
  2873. vaddubm 8,8,8
  2874. vsldoi 11,11,11,15
  2875. .long 0x10E7F548
  2876. .long 0x118CF548
  2877. vand 11,11,10
  2878. .long 0x11ADF548
  2879. .long 0x11CEF548
  2880. vxor 8,8,11
  2881. .long 0x11EFF548
  2882. .long 0x1210F548
  2883. vxor 5,22,31
  2884. vsrab 11,8,9
  2885. vxor 22,8,23
  2886. .long 0x10E70549
  2887. .long 0x7C005699
  2888. vaddubm 8,8,8
  2889. vsldoi 11,11,11,15
  2890. .long 0x118C0D49
  2891. .long 0x7C235699
  2892. .long 0x11AD1549
  2893. vperm 0,0,0,6
  2894. .long 0x7C5A5699
  2895. vand 11,11,10
  2896. .long 0x11CE1D49
  2897. vperm 1,1,1,6
  2898. .long 0x7C7B5699
  2899. .long 0x11EF2549
  2900. vperm 2,2,2,6
  2901. .long 0x7C9C5699
  2902. vxor 8,8,11
  2903. .long 0x12102D49
  2904. vperm 3,3,3,6
  2905. .long 0x7CBD5699
  2906. addi 10,10,0x60
  2907. vperm 4,4,4,6
  2908. vperm 5,5,5,6
  2909. vperm 7,7,7,6
  2910. vperm 12,12,12,6
  2911. .long 0x7CE02799
  2912. vxor 7,0,17
  2913. vperm 13,13,13,6
  2914. .long 0x7D832799
  2915. vxor 12,1,18
  2916. vperm 14,14,14,6
  2917. .long 0x7DBA2799
  2918. vxor 13,2,19
  2919. vperm 15,15,15,6
  2920. .long 0x7DDB2799
  2921. vxor 14,3,20
  2922. vperm 16,16,16,6
  2923. .long 0x7DFC2799
  2924. vxor 15,4,21
  2925. .long 0x7E1D2799
  2926. vxor 16,5,22
  2927. addi 4,4,0x60
  2928. mtctr 9
  2929. beq .Loop_xts_dec6x
  2930. addic. 5,5,0x60
  2931. beq .Lxts_dec6x_zero
  2932. cmpwi 5,0x20
  2933. blt .Lxts_dec6x_one
  2934. nop
  2935. beq .Lxts_dec6x_two
  2936. cmpwi 5,0x40
  2937. blt .Lxts_dec6x_three
  2938. nop
  2939. beq .Lxts_dec6x_four
  2940. .Lxts_dec6x_five:
  2941. vxor 7,1,17
  2942. vxor 12,2,18
  2943. vxor 13,3,19
  2944. vxor 14,4,20
  2945. vxor 15,5,21
  2946. bl _aesp8_xts_dec5x
  2947. vperm 7,7,7,6
  2948. vor 17,22,22
  2949. vxor 18,8,23
  2950. vperm 12,12,12,6
  2951. .long 0x7CE02799
  2952. vxor 7,0,18
  2953. vperm 13,13,13,6
  2954. .long 0x7D832799
  2955. vperm 14,14,14,6
  2956. .long 0x7DBA2799
  2957. vperm 15,15,15,6
  2958. .long 0x7DDB2799
  2959. .long 0x7DFC2799
  2960. addi 4,4,0x50
  2961. bne .Lxts_dec6x_steal
  2962. b .Lxts_dec6x_done
  2963. .align 4
  2964. .Lxts_dec6x_four:
  2965. vxor 7,2,17
  2966. vxor 12,3,18
  2967. vxor 13,4,19
  2968. vxor 14,5,20
  2969. vxor 15,15,15
  2970. bl _aesp8_xts_dec5x
  2971. vperm 7,7,7,6
  2972. vor 17,21,21
  2973. vor 18,22,22
  2974. vperm 12,12,12,6
  2975. .long 0x7CE02799
  2976. vxor 7,0,22
  2977. vperm 13,13,13,6
  2978. .long 0x7D832799
  2979. vperm 14,14,14,6
  2980. .long 0x7DBA2799
  2981. .long 0x7DDB2799
  2982. addi 4,4,0x40
  2983. bne .Lxts_dec6x_steal
  2984. b .Lxts_dec6x_done
  2985. .align 4
  2986. .Lxts_dec6x_three:
  2987. vxor 7,3,17
  2988. vxor 12,4,18
  2989. vxor 13,5,19
  2990. vxor 14,14,14
  2991. vxor 15,15,15
  2992. bl _aesp8_xts_dec5x
  2993. vperm 7,7,7,6
  2994. vor 17,20,20
  2995. vor 18,21,21
  2996. vperm 12,12,12,6
  2997. .long 0x7CE02799
  2998. vxor 7,0,21
  2999. vperm 13,13,13,6
  3000. .long 0x7D832799
  3001. .long 0x7DBA2799
  3002. addi 4,4,0x30
  3003. bne .Lxts_dec6x_steal
  3004. b .Lxts_dec6x_done
  3005. .align 4
  3006. .Lxts_dec6x_two:
  3007. vxor 7,4,17
  3008. vxor 12,5,18
  3009. vxor 13,13,13
  3010. vxor 14,14,14
  3011. vxor 15,15,15
  3012. bl _aesp8_xts_dec5x
  3013. vperm 7,7,7,6
  3014. vor 17,19,19
  3015. vor 18,20,20
  3016. vperm 12,12,12,6
  3017. .long 0x7CE02799
  3018. vxor 7,0,20
  3019. .long 0x7D832799
  3020. addi 4,4,0x20
  3021. bne .Lxts_dec6x_steal
  3022. b .Lxts_dec6x_done
  3023. .align 4
  3024. .Lxts_dec6x_one:
  3025. vxor 7,5,17
  3026. nop
  3027. .Loop_xts_dec1x:
  3028. .long 0x10E7C548
  3029. lvx 24,26,7
  3030. addi 7,7,0x20
  3031. .long 0x10E7CD48
  3032. lvx 25,3,7
  3033. bdnz .Loop_xts_dec1x
  3034. subi 0,31,1
  3035. .long 0x10E7C548
  3036. andi. 0,0,16
  3037. cmpwi 31,0
  3038. .long 0x10E7CD48
  3039. sub 10,10,0
  3040. .long 0x10E7D548
  3041. .long 0x7C005699
  3042. .long 0x10E7DD48
  3043. addi 7,1,79
  3044. .long 0x10E7E548
  3045. lvx 24,0,7
  3046. .long 0x10E7ED48
  3047. lvx 25,3,7
  3048. vxor 17,17,31
  3049. vperm 0,0,0,6
  3050. .long 0x10E7F548
  3051. mtctr 9
  3052. .long 0x10E78D49
  3053. vor 17,18,18
  3054. vor 18,19,19
  3055. vperm 7,7,7,6
  3056. .long 0x7CE02799
  3057. addi 4,4,0x10
  3058. vxor 7,0,19
  3059. bne .Lxts_dec6x_steal
  3060. b .Lxts_dec6x_done
  3061. .align 4
  3062. .Lxts_dec6x_zero:
  3063. cmpwi 31,0
  3064. beq .Lxts_dec6x_done
  3065. .long 0x7C005699
  3066. vperm 0,0,0,6
  3067. vxor 7,0,18
  3068. .Lxts_dec6x_steal:
  3069. .long 0x10E7C548
  3070. lvx 24,26,7
  3071. addi 7,7,0x20
  3072. .long 0x10E7CD48
  3073. lvx 25,3,7
  3074. bdnz .Lxts_dec6x_steal
  3075. add 10,10,31
  3076. .long 0x10E7C548
  3077. cmpwi 31,0
  3078. .long 0x10E7CD48
  3079. .long 0x7C005699
  3080. .long 0x10E7D548
  3081. lvsr 5,0,31
  3082. .long 0x10E7DD48
  3083. addi 7,1,79
  3084. .long 0x10E7E548
  3085. lvx 24,0,7
  3086. .long 0x10E7ED48
  3087. lvx 25,3,7
  3088. vxor 18,18,31
  3089. vperm 0,0,0,6
  3090. .long 0x10E7F548
  3091. vperm 0,0,0,5
  3092. .long 0x11679549
  3093. vperm 7,11,11,6
  3094. .long 0x7CE02799
  3095. vxor 7,7,7
  3096. vspltisb 12,-1
  3097. vperm 7,7,12,5
  3098. vsel 7,0,11,7
  3099. vxor 7,7,17
  3100. subi 30,4,1
  3101. mtctr 31
  3102. .Loop_xts_dec6x_steal:
  3103. lbzu 0,1(30)
  3104. stb 0,16(30)
  3105. bdnz .Loop_xts_dec6x_steal
  3106. li 31,0
  3107. mtctr 9
  3108. b .Loop_xts_dec1x
  3109. .align 4
  3110. .Lxts_dec6x_done:
  3111. cmpldi 8,0
  3112. beq .Lxts_dec6x_ret
  3113. vxor 8,17,23
  3114. vperm 8,8,8,6
  3115. .long 0x7D004799
  3116. .Lxts_dec6x_ret:
  3117. mtlr 11
  3118. li 10,79
  3119. li 11,95
  3120. stvx 9,10,1
  3121. addi 10,10,32
  3122. stvx 9,11,1
  3123. addi 11,11,32
  3124. stvx 9,10,1
  3125. addi 10,10,32
  3126. stvx 9,11,1
  3127. addi 11,11,32
  3128. stvx 9,10,1
  3129. addi 10,10,32
  3130. stvx 9,11,1
  3131. addi 11,11,32
  3132. stvx 9,10,1
  3133. addi 10,10,32
  3134. stvx 9,11,1
  3135. addi 11,11,32
  3136. or 12,12,12
  3137. lvx 20,10,1
  3138. addi 10,10,32
  3139. lvx 21,11,1
  3140. addi 11,11,32
  3141. lvx 22,10,1
  3142. addi 10,10,32
  3143. lvx 23,11,1
  3144. addi 11,11,32
  3145. lvx 24,10,1
  3146. addi 10,10,32
  3147. lvx 25,11,1
  3148. addi 11,11,32
  3149. lvx 26,10,1
  3150. addi 10,10,32
  3151. lvx 27,11,1
  3152. addi 11,11,32
  3153. lvx 28,10,1
  3154. addi 10,10,32
  3155. lvx 29,11,1
  3156. addi 11,11,32
  3157. lvx 30,10,1
  3158. lvx 31,11,1
  3159. ld 26,400(1)
  3160. ld 27,408(1)
  3161. ld 28,416(1)
  3162. ld 29,424(1)
  3163. ld 30,432(1)
  3164. ld 31,440(1)
  3165. addi 1,1,448
  3166. blr
  3167. .long 0
  3168. .byte 0,12,0x04,1,0x80,6,6,0
  3169. .long 0
  3170. .align 5
  3171. _aesp8_xts_dec5x:
  3172. .long 0x10E7C548
  3173. .long 0x118CC548
  3174. .long 0x11ADC548
  3175. .long 0x11CEC548
  3176. .long 0x11EFC548
  3177. lvx 24,26,7
  3178. addi 7,7,0x20
  3179. .long 0x10E7CD48
  3180. .long 0x118CCD48
  3181. .long 0x11ADCD48
  3182. .long 0x11CECD48
  3183. .long 0x11EFCD48
  3184. lvx 25,3,7
  3185. bdnz _aesp8_xts_dec5x
  3186. subi 0,31,1
  3187. .long 0x10E7C548
  3188. .long 0x118CC548
  3189. .long 0x11ADC548
  3190. .long 0x11CEC548
  3191. .long 0x11EFC548
  3192. andi. 0,0,16
  3193. cmpwi 31,0
  3194. .long 0x10E7CD48
  3195. .long 0x118CCD48
  3196. .long 0x11ADCD48
  3197. .long 0x11CECD48
  3198. .long 0x11EFCD48
  3199. vxor 17,17,31
  3200. sub 10,10,0
  3201. .long 0x10E7D548
  3202. .long 0x118CD548
  3203. .long 0x11ADD548
  3204. .long 0x11CED548
  3205. .long 0x11EFD548
  3206. vxor 1,18,31
  3207. .long 0x10E7DD48
  3208. .long 0x7C005699
  3209. .long 0x118CDD48
  3210. .long 0x11ADDD48
  3211. .long 0x11CEDD48
  3212. .long 0x11EFDD48
  3213. vxor 2,19,31
  3214. addi 7,1,79
  3215. .long 0x10E7E548
  3216. .long 0x118CE548
  3217. .long 0x11ADE548
  3218. .long 0x11CEE548
  3219. .long 0x11EFE548
  3220. lvx 24,0,7
  3221. vxor 3,20,31
  3222. .long 0x10E7ED48
  3223. vperm 0,0,0,6
  3224. .long 0x118CED48
  3225. .long 0x11ADED48
  3226. .long 0x11CEED48
  3227. .long 0x11EFED48
  3228. lvx 25,3,7
  3229. vxor 4,21,31
  3230. .long 0x10E7F548
  3231. .long 0x118CF548
  3232. .long 0x11ADF548
  3233. .long 0x11CEF548
  3234. .long 0x11EFF548
  3235. .long 0x10E78D49
  3236. .long 0x118C0D49
  3237. .long 0x11AD1549
  3238. .long 0x11CE1D49
  3239. .long 0x11EF2549
  3240. mtctr 9
  3241. blr
  3242. .long 0
  3243. .byte 0,12,0x14,0,0,0,0,0
  3244. #endif // !OPENSSL_NO_ASM && __powerpc64__
  3245. .section .note.GNU-stack,"",@progbits