aesp8-ppc.s 49 KB

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