vpaes-ppc.s 21 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478
  1. .machine "any"
  2. .abiversion 2
  3. .text
  4. .align 7
  5. _vpaes_consts:
  6. .Lk_mc_forward:
  7. .byte 0x0e,0x0d,0x0c,0x0f,0x0a,0x09,0x08,0x0b,0x06,0x05,0x04,0x07,0x02,0x01,0x00,0x03
  8. .byte 0x0a,0x09,0x08,0x0b,0x06,0x05,0x04,0x07,0x02,0x01,0x00,0x03,0x0e,0x0d,0x0c,0x0f
  9. .byte 0x06,0x05,0x04,0x07,0x02,0x01,0x00,0x03,0x0e,0x0d,0x0c,0x0f,0x0a,0x09,0x08,0x0b
  10. .byte 0x02,0x01,0x00,0x03,0x0e,0x0d,0x0c,0x0f,0x0a,0x09,0x08,0x0b,0x06,0x05,0x04,0x07
  11. .Lk_mc_backward:
  12. .byte 0x0c,0x0f,0x0e,0x0d,0x08,0x0b,0x0a,0x09,0x04,0x07,0x06,0x05,0x00,0x03,0x02,0x01
  13. .byte 0x00,0x03,0x02,0x01,0x0c,0x0f,0x0e,0x0d,0x08,0x0b,0x0a,0x09,0x04,0x07,0x06,0x05
  14. .byte 0x04,0x07,0x06,0x05,0x00,0x03,0x02,0x01,0x0c,0x0f,0x0e,0x0d,0x08,0x0b,0x0a,0x09
  15. .byte 0x08,0x0b,0x0a,0x09,0x04,0x07,0x06,0x05,0x00,0x03,0x02,0x01,0x0c,0x0f,0x0e,0x0d
  16. .Lk_sr:
  17. .byte 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
  18. .byte 0x0f,0x0a,0x05,0x00,0x0b,0x06,0x01,0x0c,0x07,0x02,0x0d,0x08,0x03,0x0e,0x09,0x04
  19. .byte 0x0f,0x06,0x0d,0x04,0x0b,0x02,0x09,0x00,0x07,0x0e,0x05,0x0c,0x03,0x0a,0x01,0x08
  20. .byte 0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d,0x00,0x03,0x06,0x09,0x0c
  21. .Lk_inv:
  22. .byte 0x04,0x07,0x03,0x09,0x0a,0x0b,0x0c,0x02,0x0e,0x05,0x06,0x0f,0x0d,0x08,0x01,0xf0
  23. .byte 0x03,0x0d,0x0e,0x0c,0x02,0x05,0x08,0x09,0x01,0x04,0x0a,0x06,0x0f,0x0b,0x07,0xf0
  24. .Lk_ipt:
  25. .byte 0xca,0xba,0xe0,0x90,0x52,0x22,0x78,0x08,0xc2,0xb2,0xe8,0x98,0x5a,0x2a,0x70,0x00
  26. .byte 0xcd,0x80,0xb1,0xfc,0xb0,0xfd,0xcc,0x81,0x4c,0x01,0x30,0x7d,0x31,0x7c,0x4d,0x00
  27. .Lk_sbo:
  28. .byte 0x15,0xaa,0xbf,0x7a,0xc5,0x02,0xa8,0x78,0xd0,0xd2,0x6d,0x17,0x6f,0xbd,0xc7,0x00
  29. .byte 0x8e,0x1e,0x90,0xd1,0x41,0x2b,0x35,0xfa,0xcf,0xe4,0x74,0xa5,0x5f,0xbb,0x6a,0x00
  30. .Lk_sb1:
  31. .byte 0x3b,0xf7,0xcc,0xc1,0x0d,0x2e,0xd9,0xef,0x36,0x18,0xd4,0x15,0xfa,0xe2,0x23,0x00
  32. .byte 0xa5,0xdf,0x7a,0x6e,0x14,0x2a,0xf5,0x44,0xb1,0x9b,0xe1,0x8f,0xcb,0x50,0x3e,0x00
  33. .Lk_sb2:
  34. .byte 0xc2,0xa1,0x63,0xc8,0xab,0x82,0x23,0x4a,0x69,0xeb,0x88,0x40,0x0a,0xe1,0x29,0x00
  35. .byte 0x5e,0xb7,0xe9,0x55,0xbc,0x98,0x2f,0xcd,0xe2,0x7a,0x93,0xc6,0x0b,0x71,0x24,0x00
  36. .Lk_dipt:
  37. .byte 0x15,0x4a,0x41,0x1e,0x11,0x4e,0x45,0x1a,0x0f,0x50,0x5b,0x04,0x0b,0x54,0x5f,0x00
  38. .byte 0x12,0x77,0x17,0x72,0xf4,0x91,0xf1,0x94,0x86,0xe3,0x83,0xe6,0x60,0x05,0x65,0x00
  39. .Lk_dsbo:
  40. .byte 0xc7,0xaa,0x6d,0xb9,0xd4,0x94,0x3e,0x2d,0x13,0x87,0xea,0x53,0x7e,0xf9,0x40,0x00
  41. .byte 0xca,0x4b,0x81,0x59,0xd8,0xc5,0x8e,0x9c,0x12,0xd7,0x56,0x0f,0x93,0x44,0x1d,0x00
  42. .Lk_dsb9:
  43. .byte 0xca,0xd5,0x1f,0x50,0x4f,0x99,0x4c,0xc9,0x85,0x1c,0x03,0x53,0x9a,0x86,0xd6,0x00
  44. .byte 0x72,0x5e,0x2c,0x9e,0xb2,0xfb,0xa5,0x65,0xc0,0x3b,0x17,0x89,0xec,0xd7,0x49,0x00
  45. .Lk_dsbd:
  46. .byte 0xf5,0x6e,0x9b,0x13,0x88,0x2a,0x44,0x39,0x7d,0x57,0xcc,0xdf,0xe6,0xb1,0xa2,0x00
  47. .byte 0x29,0x31,0x18,0x0d,0x15,0xde,0xef,0xd3,0x3c,0xe2,0xfa,0xf7,0x24,0xc6,0xcb,0x00
  48. .Lk_dsbb:
  49. .byte 0x60,0x26,0x46,0xf6,0xb0,0xf2,0xd4,0x04,0xd0,0x22,0x64,0x92,0x96,0xb4,0x42,0x00
  50. .byte 0xf3,0xff,0x0c,0x3e,0x32,0x55,0xaa,0x6b,0xc1,0x94,0x98,0xa6,0xcd,0x59,0x67,0x00
  51. .Lk_dsbe:
  52. .byte 0x22,0x42,0x60,0x04,0x64,0xb4,0xf6,0xb0,0x46,0xf2,0x92,0x96,0x26,0xd4,0xd0,0x00
  53. .byte 0x94,0x67,0xf3,0x6b,0x98,0x59,0x3e,0x32,0x0c,0x55,0xa6,0xcd,0xff,0xaa,0xc1,0x00
  54. .Lk_dksd:
  55. .byte 0x07,0x40,0xe3,0xa4,0x5a,0x1d,0xbe,0xf9,0xfe,0xb9,0x1a,0x5d,0xa3,0xe4,0x47,0x00
  56. .byte 0x5f,0xdc,0x69,0xea,0xab,0x28,0x9d,0x1e,0x41,0xc2,0x77,0xf4,0xb5,0x36,0x83,0x00
  57. .Lk_dksb:
  58. .byte 0x03,0xd6,0x53,0x86,0x1c,0xc9,0x4c,0x99,0x9a,0x4f,0xca,0x1f,0x85,0x50,0xd5,0x00
  59. .byte 0xd9,0x93,0x25,0x6f,0x7e,0x34,0x82,0xc8,0x11,0x5b,0xed,0xa7,0xb6,0xfc,0x4a,0x00
  60. .Lk_dkse:
  61. .byte 0x53,0x85,0x9a,0x4c,0x99,0x4f,0x50,0x86,0xd5,0x03,0x1c,0xca,0x1f,0xc9,0xd6,0x00
  62. .byte 0xcd,0x5e,0xf9,0x6a,0x20,0xb3,0x14,0x87,0xa2,0x31,0x96,0x05,0x4f,0xdc,0x7b,0xe8
  63. .Lk_dks9:
  64. .byte 0x4a,0xed,0x93,0x34,0x82,0x25,0x5b,0xfc,0xb6,0x11,0x6f,0xc8,0x7e,0xd9,0xa7,0x00
  65. .byte 0x8b,0xb8,0x9f,0xac,0xe9,0xda,0xfd,0xce,0x45,0x76,0x51,0x62,0x27,0x14,0x33,0x00
  66. .Lk_rcon:
  67. .byte 0xb6,0xee,0x9d,0xaf,0xb9,0x91,0x83,0x1f,0x81,0x7d,0x7c,0x4d,0x08,0x98,0x2a,0x70
  68. .Lk_s63:
  69. .byte 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b
  70. .Lk_opt:
  71. .byte 0xf7,0x97,0x41,0x21,0xde,0xbe,0x68,0x08,0xff,0x9f,0x49,0x29,0xd6,0xb6,0x60,0x00
  72. .byte 0xe1,0x0d,0x5d,0xb1,0xb0,0x5c,0x0c,0xe0,0x01,0xed,0xbd,0x51,0x50,0xbc,0xec,0x00
  73. .Lk_deskew:
  74. .byte 0x1d,0xfe,0xb9,0x5a,0x5d,0xbe,0xf9,0x1a,0x07,0xe4,0xa3,0x40,0x47,0xa4,0xe3,0x00
  75. .byte 0x28,0x41,0xc2,0xab,0xf4,0x9d,0x1e,0x77,0x5f,0x36,0xb5,0xdc,0x83,0xea,0x69,0x00
  76. .align 5
  77. .Lconsts:
  78. mflr 0
  79. bcl 20,31,$+4
  80. mflr 12
  81. addi 12,12,-0x308
  82. mtlr 0
  83. blr
  84. .long 0
  85. .byte 0,12,0x14,0,0,0,0,0
  86. .byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105,111,110,32,65,69,83,32,102,111,114,32,65,108,116,105,86,101,99,44,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0
  87. .align 2
  88. .align 6
  89. .align 4
  90. _vpaes_encrypt_preheat:
  91. mflr 8
  92. bl .Lconsts
  93. mtlr 8
  94. li 11, 0xc0
  95. li 10, 0xd0
  96. li 9, 0xe0
  97. li 8, 0xf0
  98. vxor 7, 7, 7
  99. vspltisb 8,4
  100. vspltisb 9,0x0f
  101. lvx 10, 12, 11
  102. li 11, 0x100
  103. lvx 11, 12, 10
  104. li 10, 0x110
  105. lvx 12, 12, 9
  106. li 9, 0x120
  107. lvx 13, 12, 8
  108. li 8, 0x130
  109. lvx 14, 12, 11
  110. li 11, 0x140
  111. lvx 15, 12, 10
  112. li 10, 0x150
  113. lvx 16, 12, 9
  114. lvx 17, 12, 8
  115. lvx 18, 12, 11
  116. lvx 19, 12, 10
  117. blr
  118. .long 0
  119. .byte 0,12,0x14,0,0,0,0,0
  120. .align 5
  121. _vpaes_encrypt_core:
  122. lwz 8, 240(5)
  123. li 9, 16
  124. lvx 5, 0, 5
  125. li 11, 0x10
  126. lvx 6, 9, 5
  127. addi 9, 9, 16
  128. vperm 5, 6, 5, 31
  129. addi 10, 11, 0x40
  130. vsrb 1, 0, 8
  131. vperm 0, 12, 12, 0
  132. vperm 1, 13, 13, 1
  133. vxor 0, 0, 5
  134. vxor 0, 0, 1
  135. mtctr 8
  136. b .Lenc_entry
  137. .align 4
  138. .Lenc_loop:
  139. vperm 4, 17, 7, 2
  140. lvx 1, 12, 11
  141. addi 11, 11, 16
  142. vperm 0, 16, 7, 3
  143. vxor 4, 4, 5
  144. andi. 11, 11, 0x30
  145. vperm 5, 19, 7, 2
  146. vxor 0, 0, 4
  147. vperm 2, 18, 7, 3
  148. lvx 4, 12, 10
  149. addi 10, 11, 0x40
  150. vperm 3, 0, 7, 1
  151. vxor 2, 2, 5
  152. vperm 0, 0, 7, 4
  153. vxor 3, 3, 2
  154. vperm 4, 3, 7, 1
  155. vxor 0, 0, 3
  156. vxor 0, 0, 4
  157. .Lenc_entry:
  158. vsrb 1, 0, 8
  159. vperm 5, 11, 11, 0
  160. vxor 0, 0, 1
  161. vperm 3, 10, 10, 1
  162. vperm 4, 10, 10, 0
  163. vand 0, 0, 9
  164. vxor 3, 3, 5
  165. vxor 4, 4, 5
  166. vperm 2, 10, 7, 3
  167. vor 5,6,6
  168. lvx 6, 9, 5
  169. vperm 3, 10, 7, 4
  170. addi 9, 9, 16
  171. vxor 2, 2, 0
  172. vperm 5, 6, 5, 31
  173. vxor 3, 3, 1
  174. bdnz .Lenc_loop
  175. addi 10, 11, 0x80
  176. vperm 4, 14, 7, 2
  177. lvx 1, 12, 10
  178. vperm 0, 15, 7, 3
  179. vxor 4, 4, 5
  180. vxor 0, 0, 4
  181. vperm 0, 0, 7, 1
  182. blr
  183. .long 0
  184. .byte 0,12,0x14,0,0,0,0,0
  185. .globl vpaes_encrypt
  186. .type vpaes_encrypt,@function
  187. .align 5
  188. vpaes_encrypt:
  189. .localentry vpaes_encrypt,0
  190. stdu 1,-256(1)
  191. li 10,63
  192. li 11,79
  193. mflr 6
  194. li 7,-1
  195. stvx 20,10,1
  196. addi 10,10,32
  197. stvx 21,11,1
  198. addi 11,11,32
  199. stvx 22,10,1
  200. addi 10,10,32
  201. stvx 23,11,1
  202. addi 11,11,32
  203. stvx 24,10,1
  204. addi 10,10,32
  205. stvx 25,11,1
  206. addi 11,11,32
  207. stvx 26,10,1
  208. addi 10,10,32
  209. stvx 27,11,1
  210. addi 11,11,32
  211. stvx 28,10,1
  212. addi 10,10,32
  213. stvx 29,11,1
  214. addi 11,11,32
  215. stvx 30,10,1
  216. stvx 31,11,1
  217. stw 7,252(1)
  218. li 0, -1
  219. std 6,272(1)
  220. or 0,0,0
  221. bl _vpaes_encrypt_preheat
  222. lvsr 27, 0, 3
  223. lvx 0, 0, 3
  224. addi 3, 3, 15
  225. lvsl 29, 0, 4
  226. lvsr 31, 0, 5
  227. lvx 26, 0, 3
  228. vperm 0, 26, 0, 27
  229. bl _vpaes_encrypt_core
  230. andi. 8, 4, 15
  231. li 9, 16
  232. beq .Lenc_out_aligned
  233. vperm 0, 0, 0, 29
  234. mtctr 9
  235. .Lenc_out_unaligned:
  236. stvebx 0, 0, 4
  237. addi 4, 4, 1
  238. bdnz .Lenc_out_unaligned
  239. b .Lenc_done
  240. .align 4
  241. .Lenc_out_aligned:
  242. stvx 0, 0, 4
  243. .Lenc_done:
  244. li 10,63
  245. li 11,79
  246. mtlr 6
  247. or 7,7,7
  248. lvx 20,10,1
  249. addi 10,10,32
  250. lvx 21,11,1
  251. addi 11,11,32
  252. lvx 22,10,1
  253. addi 10,10,32
  254. lvx 23,11,1
  255. addi 11,11,32
  256. lvx 24,10,1
  257. addi 10,10,32
  258. lvx 25,11,1
  259. addi 11,11,32
  260. lvx 26,10,1
  261. addi 10,10,32
  262. lvx 27,11,1
  263. addi 11,11,32
  264. lvx 28,10,1
  265. addi 10,10,32
  266. lvx 29,11,1
  267. addi 11,11,32
  268. lvx 30,10,1
  269. lvx 31,11,1
  270. addi 1,1,256
  271. blr
  272. .long 0
  273. .byte 0,12,0x04,1,0x80,0,3,0
  274. .long 0
  275. .size vpaes_encrypt,.-vpaes_encrypt
  276. .align 4
  277. _vpaes_decrypt_preheat:
  278. mflr 8
  279. bl .Lconsts
  280. mtlr 8
  281. li 11, 0xc0
  282. li 10, 0xd0
  283. li 9, 0x160
  284. li 8, 0x170
  285. vxor 7, 7, 7
  286. vspltisb 8,4
  287. vspltisb 9,0x0f
  288. lvx 10, 12, 11
  289. li 11, 0x180
  290. lvx 11, 12, 10
  291. li 10, 0x190
  292. lvx 12, 12, 9
  293. li 9, 0x1a0
  294. lvx 13, 12, 8
  295. li 8, 0x1b0
  296. lvx 14, 12, 11
  297. li 11, 0x1c0
  298. lvx 15, 12, 10
  299. li 10, 0x1d0
  300. lvx 16, 12, 9
  301. li 9, 0x1e0
  302. lvx 17, 12, 8
  303. li 8, 0x1f0
  304. lvx 18, 12, 11
  305. li 11, 0x200
  306. lvx 19, 12, 10
  307. li 10, 0x210
  308. lvx 20, 12, 9
  309. lvx 21, 12, 8
  310. lvx 22, 12, 11
  311. lvx 23, 12, 10
  312. blr
  313. .long 0
  314. .byte 0,12,0x14,0,0,0,0,0
  315. .align 4
  316. _vpaes_decrypt_core:
  317. lwz 8, 240(5)
  318. li 9, 16
  319. lvx 5, 0, 5
  320. li 11, 0x30
  321. lvx 6, 9, 5
  322. addi 9, 9, 16
  323. vperm 5, 6, 5, 31
  324. vsrb 1, 0, 8
  325. vperm 0, 12, 12, 0
  326. vperm 1, 13, 13, 1
  327. vxor 0, 0, 5
  328. vxor 0, 0, 1
  329. mtctr 8
  330. b .Ldec_entry
  331. .align 4
  332. .Ldec_loop:
  333. lvx 0, 12, 11
  334. vperm 4, 16, 7, 2
  335. subi 11, 11, 16
  336. vperm 1, 17, 7, 3
  337. andi. 11, 11, 0x30
  338. vxor 5, 5, 4
  339. vxor 5, 5, 1
  340. vperm 4, 18, 7, 2
  341. vperm 5, 5, 7, 0
  342. vperm 1, 19, 7, 3
  343. vxor 5, 5, 4
  344. vxor 5, 5, 1
  345. vperm 4, 20, 7, 2
  346. vperm 5, 5, 7, 0
  347. vperm 1, 21, 7, 3
  348. vxor 5, 5, 4
  349. vxor 5, 5, 1
  350. vperm 4, 22, 7, 2
  351. vperm 5, 5, 7, 0
  352. vperm 1, 23, 7, 3
  353. vxor 0, 5, 4
  354. vxor 0, 0, 1
  355. .Ldec_entry:
  356. vsrb 1, 0, 8
  357. vperm 2, 11, 11, 0
  358. vxor 0, 0, 1
  359. vperm 3, 10, 10, 1
  360. vperm 4, 10, 10, 0
  361. vand 0, 0, 9
  362. vxor 3, 3, 2
  363. vxor 4, 4, 2
  364. vperm 2, 10, 7, 3
  365. vor 5,6,6
  366. lvx 6, 9, 5
  367. vperm 3, 10, 7, 4
  368. addi 9, 9, 16
  369. vxor 2, 2, 0
  370. vperm 5, 6, 5, 31
  371. vxor 3, 3, 1
  372. bdnz .Ldec_loop
  373. addi 10, 11, 0x80
  374. vperm 4, 14, 7, 2
  375. lvx 2, 12, 10
  376. vperm 1, 15, 7, 3
  377. vxor 4, 4, 5
  378. vxor 0, 1, 4
  379. vperm 0, 0, 7, 2
  380. blr
  381. .long 0
  382. .byte 0,12,0x14,0,0,0,0,0
  383. .globl vpaes_decrypt
  384. .type vpaes_decrypt,@function
  385. .align 5
  386. vpaes_decrypt:
  387. .localentry vpaes_decrypt,0
  388. stdu 1,-256(1)
  389. li 10,63
  390. li 11,79
  391. mflr 6
  392. li 7,-1
  393. stvx 20,10,1
  394. addi 10,10,32
  395. stvx 21,11,1
  396. addi 11,11,32
  397. stvx 22,10,1
  398. addi 10,10,32
  399. stvx 23,11,1
  400. addi 11,11,32
  401. stvx 24,10,1
  402. addi 10,10,32
  403. stvx 25,11,1
  404. addi 11,11,32
  405. stvx 26,10,1
  406. addi 10,10,32
  407. stvx 27,11,1
  408. addi 11,11,32
  409. stvx 28,10,1
  410. addi 10,10,32
  411. stvx 29,11,1
  412. addi 11,11,32
  413. stvx 30,10,1
  414. stvx 31,11,1
  415. stw 7,252(1)
  416. li 0, -1
  417. std 6,272(1)
  418. or 0,0,0
  419. bl _vpaes_decrypt_preheat
  420. lvsr 27, 0, 3
  421. lvx 0, 0, 3
  422. addi 3, 3, 15
  423. lvsl 29, 0, 4
  424. lvsr 31, 0, 5
  425. lvx 26, 0, 3
  426. vperm 0, 26, 0, 27
  427. bl _vpaes_decrypt_core
  428. andi. 8, 4, 15
  429. li 9, 16
  430. beq .Ldec_out_aligned
  431. vperm 0, 0, 0, 29
  432. mtctr 9
  433. .Ldec_out_unaligned:
  434. stvebx 0, 0, 4
  435. addi 4, 4, 1
  436. bdnz .Ldec_out_unaligned
  437. b .Ldec_done
  438. .align 4
  439. .Ldec_out_aligned:
  440. stvx 0, 0, 4
  441. .Ldec_done:
  442. li 10,63
  443. li 11,79
  444. mtlr 6
  445. or 7,7,7
  446. lvx 20,10,1
  447. addi 10,10,32
  448. lvx 21,11,1
  449. addi 11,11,32
  450. lvx 22,10,1
  451. addi 10,10,32
  452. lvx 23,11,1
  453. addi 11,11,32
  454. lvx 24,10,1
  455. addi 10,10,32
  456. lvx 25,11,1
  457. addi 11,11,32
  458. lvx 26,10,1
  459. addi 10,10,32
  460. lvx 27,11,1
  461. addi 11,11,32
  462. lvx 28,10,1
  463. addi 10,10,32
  464. lvx 29,11,1
  465. addi 11,11,32
  466. lvx 30,10,1
  467. lvx 31,11,1
  468. addi 1,1,256
  469. blr
  470. .long 0
  471. .byte 0,12,0x04,1,0x80,0,3,0
  472. .long 0
  473. .size vpaes_decrypt,.-vpaes_decrypt
  474. .globl vpaes_cbc_encrypt
  475. .type vpaes_cbc_encrypt,@function
  476. .align 5
  477. vpaes_cbc_encrypt:
  478. .localentry vpaes_cbc_encrypt,0
  479. cmpldi 5,16
  480. .long 0x4dc00020
  481. stdu 1,-272(1)
  482. mflr 0
  483. li 10,63
  484. li 11,79
  485. li 12,-1
  486. stvx 20,10,1
  487. addi 10,10,32
  488. stvx 21,11,1
  489. addi 11,11,32
  490. stvx 22,10,1
  491. addi 10,10,32
  492. stvx 23,11,1
  493. addi 11,11,32
  494. stvx 24,10,1
  495. addi 10,10,32
  496. stvx 25,11,1
  497. addi 11,11,32
  498. stvx 26,10,1
  499. addi 10,10,32
  500. stvx 27,11,1
  501. addi 11,11,32
  502. stvx 28,10,1
  503. addi 10,10,32
  504. stvx 29,11,1
  505. addi 11,11,32
  506. stvx 30,10,1
  507. stvx 31,11,1
  508. stw 12,252(1)
  509. std 30,256(1)
  510. std 31,264(1)
  511. li 9, -16
  512. std 0, 288(1)
  513. and 30, 5, 9
  514. andi. 9, 4, 15
  515. mr 5, 6
  516. mr 31, 7
  517. li 6, -1
  518. mcrf 1, 0
  519. mr 7, 12
  520. or 6,6,6
  521. lvx 24, 0, 31
  522. li 9, 15
  523. lvsr 27, 0, 31
  524. lvx 25, 9, 31
  525. vperm 24, 25, 24, 27
  526. cmpwi 8, 0
  527. neg 8, 3
  528. vxor 7, 7, 7
  529. lvsr 31, 0, 5
  530. lvsl 29, 0, 4
  531. lvsl 27, 0, 8
  532. vnor 30, 7, 7
  533. lvx 26, 0, 3
  534. vperm 30, 30, 7, 29
  535. addi 3, 3, 15
  536. beq .Lcbc_decrypt
  537. bl _vpaes_encrypt_preheat
  538. li 0, 16
  539. beq 1, .Lcbc_enc_loop
  540. vor 0,26,26
  541. lvx 26, 0, 3
  542. addi 3, 3, 16
  543. vperm 0, 26, 0, 27
  544. vxor 0, 0, 24
  545. bl _vpaes_encrypt_core
  546. andi. 8, 4, 15
  547. vor 24,0,0
  548. sub 9, 4, 8
  549. vperm 28, 0, 0, 29
  550. .Lcbc_enc_head:
  551. stvebx 28, 8, 9
  552. cmpwi 8, 15
  553. addi 8, 8, 1
  554. bne .Lcbc_enc_head
  555. sub. 30, 30, 0
  556. addi 4, 4, 16
  557. beq .Lcbc_unaligned_done
  558. .Lcbc_enc_loop:
  559. vor 0,26,26
  560. lvx 26, 0, 3
  561. addi 3, 3, 16
  562. vperm 0, 26, 0, 27
  563. vxor 0, 0, 24
  564. bl _vpaes_encrypt_core
  565. vor 24,0,0
  566. sub. 30, 30, 0
  567. vperm 0, 0, 0, 29
  568. vsel 1, 28, 0, 30
  569. vor 28,0,0
  570. stvx 1, 0, 4
  571. addi 4, 4, 16
  572. bne .Lcbc_enc_loop
  573. b .Lcbc_done
  574. .align 5
  575. .Lcbc_decrypt:
  576. bl _vpaes_decrypt_preheat
  577. li 0, 16
  578. beq 1, .Lcbc_dec_loop
  579. vor 0,26,26
  580. lvx 26, 0, 3
  581. addi 3, 3, 16
  582. vperm 0, 26, 0, 27
  583. vor 25,0,0
  584. bl _vpaes_decrypt_core
  585. andi. 8, 4, 15
  586. vxor 0, 0, 24
  587. vor 24,25,25
  588. sub 9, 4, 8
  589. vperm 28, 0, 0, 29
  590. .Lcbc_dec_head:
  591. stvebx 28, 8, 9
  592. cmpwi 8, 15
  593. addi 8, 8, 1
  594. bne .Lcbc_dec_head
  595. sub. 30, 30, 0
  596. addi 4, 4, 16
  597. beq .Lcbc_unaligned_done
  598. .Lcbc_dec_loop:
  599. vor 0,26,26
  600. lvx 26, 0, 3
  601. addi 3, 3, 16
  602. vperm 0, 26, 0, 27
  603. vor 25,0,0
  604. bl _vpaes_decrypt_core
  605. vxor 0, 0, 24
  606. vor 24,25,25
  607. sub. 30, 30, 0
  608. vperm 0, 0, 0, 29
  609. vsel 1, 28, 0, 30
  610. vor 28,0,0
  611. stvx 1, 0, 4
  612. addi 4, 4, 16
  613. bne .Lcbc_dec_loop
  614. .Lcbc_done:
  615. beq 1, .Lcbc_write_iv
  616. .Lcbc_unaligned_done:
  617. andi. 8, 4, 15
  618. sub 4, 4, 8
  619. li 9, 0
  620. .Lcbc_tail:
  621. stvebx 28, 9, 4
  622. addi 9, 9, 1
  623. cmpw 9, 8
  624. bne .Lcbc_tail
  625. .Lcbc_write_iv:
  626. neg 8, 31
  627. li 10, 4
  628. lvsr 29, 0, 8
  629. li 11, 8
  630. li 12, 12
  631. vperm 24, 24, 24, 29
  632. stvewx 24, 0, 31
  633. stvewx 24, 10, 31
  634. stvewx 24, 11, 31
  635. stvewx 24, 12, 31
  636. or 7,7,7
  637. li 10,63
  638. li 11,79
  639. lvx 20,10,1
  640. addi 10,10,32
  641. lvx 21,11,1
  642. addi 11,11,32
  643. lvx 22,10,1
  644. addi 10,10,32
  645. lvx 23,11,1
  646. addi 11,11,32
  647. lvx 24,10,1
  648. addi 10,10,32
  649. lvx 25,11,1
  650. addi 11,11,32
  651. lvx 26,10,1
  652. addi 10,10,32
  653. lvx 27,11,1
  654. addi 11,11,32
  655. lvx 28,10,1
  656. addi 10,10,32
  657. lvx 29,11,1
  658. addi 11,11,32
  659. lvx 30,10,1
  660. lvx 31,11,1
  661. .Lcbc_abort:
  662. ld 0, 288(1)
  663. ld 30,256(1)
  664. ld 31,264(1)
  665. mtlr 0
  666. addi 1,1,272
  667. blr
  668. .long 0
  669. .byte 0,12,0x04,1,0x80,2,6,0
  670. .long 0
  671. .size vpaes_cbc_encrypt,.-vpaes_cbc_encrypt
  672. .align 4
  673. _vpaes_key_preheat:
  674. mflr 8
  675. bl .Lconsts
  676. mtlr 8
  677. li 11, 0xc0
  678. li 10, 0xd0
  679. li 9, 0xe0
  680. li 8, 0xf0
  681. vspltisb 8,4
  682. vxor 9,9,9
  683. lvx 10, 12, 11
  684. li 11, 0x120
  685. lvx 11, 12, 10
  686. li 10, 0x130
  687. lvx 12, 12, 9
  688. li 9, 0x220
  689. lvx 13, 12, 8
  690. li 8, 0x230
  691. lvx 14, 12, 11
  692. li 11, 0x240
  693. lvx 15, 12, 10
  694. li 10, 0x250
  695. lvx 16, 12, 9
  696. li 9, 0x260
  697. lvx 17, 12, 8
  698. li 8, 0x270
  699. lvx 18, 12, 11
  700. li 11, 0x280
  701. lvx 19, 12, 10
  702. li 10, 0x290
  703. lvx 20, 12, 9
  704. li 9, 0x2a0
  705. lvx 21, 12, 8
  706. li 8, 0x2b0
  707. lvx 22, 12, 11
  708. lvx 23, 12, 10
  709. lvx 24, 12, 9
  710. lvx 25, 0, 12
  711. lvx 26, 12, 8
  712. blr
  713. .long 0
  714. .byte 0,12,0x14,0,0,0,0,0
  715. .align 4
  716. _vpaes_schedule_core:
  717. mflr 7
  718. bl _vpaes_key_preheat
  719. neg 8, 3
  720. lvx 0, 0, 3
  721. addi 3, 3, 15
  722. lvsl 27, 0, 8
  723. lvx 6, 0, 3
  724. addi 3, 3, 8
  725. vperm 0, 6, 0, 27
  726. vor 3,0,0
  727. bl _vpaes_schedule_transform
  728. vor 7,0,0
  729. bne 1, .Lschedule_am_decrypting
  730. li 8, 0x30
  731. li 9, 4
  732. li 10, 8
  733. li 11, 12
  734. lvsl 29, 0, 5
  735. vnor 30, 9, 9
  736. vperm 30, 30, 9, 29
  737. vperm 28, 0, 0, 29
  738. stvewx 28, 0, 5
  739. stvewx 28, 9, 5
  740. stvewx 28, 10, 5
  741. addi 10, 12, 0x80
  742. stvewx 28, 11, 5
  743. b .Lschedule_go
  744. .Lschedule_am_decrypting:
  745. srwi 8, 4, 1
  746. andi. 8, 8, 32
  747. xori 8, 8, 32
  748. addi 10, 12, 0x80
  749. lvx 1, 8, 10
  750. li 9, 4
  751. li 10, 8
  752. li 11, 12
  753. vperm 4, 3, 3, 1
  754. neg 0, 5
  755. lvsr 29, 0, 0
  756. vnor 30, 9, 9
  757. vperm 30, 9, 30, 29
  758. vperm 28, 4, 4, 29
  759. stvewx 28, 0, 5
  760. stvewx 28, 9, 5
  761. stvewx 28, 10, 5
  762. addi 10, 12, 0x80
  763. stvewx 28, 11, 5
  764. addi 5, 5, 15
  765. xori 8, 8, 0x30
  766. .Lschedule_go:
  767. cmplwi 4, 192
  768. bgt .Lschedule_256
  769. beq .Lschedule_192
  770. .Lschedule_128:
  771. li 0, 10
  772. mtctr 0
  773. .Loop_schedule_128:
  774. bl _vpaes_schedule_round
  775. bdz .Lschedule_mangle_last
  776. bl _vpaes_schedule_mangle
  777. b .Loop_schedule_128
  778. .align 4
  779. .Lschedule_192:
  780. li 0, 4
  781. lvx 0, 0, 3
  782. vperm 0, 0, 6, 27
  783. vsldoi 0, 0, 3, 16-8
  784. bl _vpaes_schedule_transform
  785. vsldoi 6, 9, 0, 16-8
  786. vsldoi 6, 6, 9, 16-8
  787. mtctr 0
  788. .Loop_schedule_192:
  789. bl _vpaes_schedule_round
  790. vsldoi 0, 0, 6, 16-8
  791. bl _vpaes_schedule_mangle
  792. bl _vpaes_schedule_192_smear
  793. bl _vpaes_schedule_mangle
  794. bl _vpaes_schedule_round
  795. bdz .Lschedule_mangle_last
  796. bl _vpaes_schedule_mangle
  797. bl _vpaes_schedule_192_smear
  798. b .Loop_schedule_192
  799. .align 4
  800. .Lschedule_256:
  801. li 0, 7
  802. addi 3, 3, 8
  803. lvx 0, 0, 3
  804. vperm 0, 0, 6, 27
  805. bl _vpaes_schedule_transform
  806. mtctr 0
  807. .Loop_schedule_256:
  808. bl _vpaes_schedule_mangle
  809. vor 6,0,0
  810. bl _vpaes_schedule_round
  811. bdz .Lschedule_mangle_last
  812. bl _vpaes_schedule_mangle
  813. vspltw 0, 0, 3-3
  814. vor 5,7,7
  815. vor 7,6,6
  816. bl _vpaes_schedule_low_round
  817. vor 7,5,5
  818. b .Loop_schedule_256
  819. .align 4
  820. .Lschedule_mangle_last:
  821. li 11, 0x2e0
  822. li 9, 0x2f0
  823. bne 1, .Lschedule_mangle_last_dec
  824. lvx 1, 8, 10
  825. li 11, 0x2c0
  826. li 9, 0x2d0
  827. vperm 0, 0, 0, 1
  828. lvx 12, 11, 12
  829. lvx 13, 9, 12
  830. addi 5, 5, 16
  831. vxor 0, 0, 26
  832. bl _vpaes_schedule_transform
  833. vperm 0, 0, 0, 29
  834. li 10, 4
  835. vsel 2, 28, 0, 30
  836. li 11, 8
  837. stvx 2, 0, 5
  838. li 12, 12
  839. stvewx 0, 0, 5
  840. stvewx 0, 10, 5
  841. stvewx 0, 11, 5
  842. stvewx 0, 12, 5
  843. b .Lschedule_mangle_done
  844. .align 4
  845. .Lschedule_mangle_last_dec:
  846. lvx 12, 11, 12
  847. lvx 13, 9, 12
  848. addi 5, 5, -16
  849. vxor 0, 0, 26
  850. bl _vpaes_schedule_transform
  851. addi 9, 5, -15
  852. vperm 0, 0, 0, 29
  853. li 10, 4
  854. vsel 2, 28, 0, 30
  855. li 11, 8
  856. stvx 2, 0, 5
  857. li 12, 12
  858. stvewx 0, 0, 9
  859. stvewx 0, 10, 9
  860. stvewx 0, 11, 9
  861. stvewx 0, 12, 9
  862. .Lschedule_mangle_done:
  863. mtlr 7
  864. vxor 0, 0, 0
  865. vxor 1, 1, 1
  866. vxor 2, 2, 2
  867. vxor 3, 3, 3
  868. vxor 4, 4, 4
  869. vxor 5, 5, 5
  870. vxor 6, 6, 6
  871. vxor 7, 7, 7
  872. blr
  873. .long 0
  874. .byte 0,12,0x14,0,0,0,0,0
  875. .align 4
  876. _vpaes_schedule_192_smear:
  877. vspltw 0, 7, 3-3
  878. vsldoi 1, 6, 9, 16-12
  879. vsldoi 0, 0, 7, 16-8
  880. vxor 6, 6, 1
  881. vxor 6, 6, 0
  882. vor 0,6,6
  883. vsldoi 6, 9, 6, 16-8
  884. vsldoi 6, 6, 9, 16-8
  885. blr
  886. .long 0
  887. .byte 0,12,0x14,0,0,0,0,0
  888. .align 4
  889. _vpaes_schedule_round:
  890. vsldoi 1, 9, 24, 16-15
  891. vsldoi 24, 24, 24, 16-15
  892. vxor 7, 7, 1
  893. vspltw 0, 0, 3-3
  894. vsldoi 0, 0, 0, 16-1
  895. _vpaes_schedule_low_round:
  896. vsldoi 1, 7, 9, 16-12
  897. vxor 7, 7, 1
  898. vspltisb 1, 0x0f
  899. vsldoi 4, 7, 9, 16-8
  900. vand 1, 1, 0
  901. vsrb 0, 0, 8
  902. vxor 7, 7, 4
  903. vperm 2, 11, 9, 1
  904. vxor 1, 1, 0
  905. vperm 3, 10, 9, 0
  906. vxor 3, 3, 2
  907. vperm 4, 10, 9, 1
  908. vxor 7, 7, 26
  909. vperm 3, 10, 9, 3
  910. vxor 4, 4, 2
  911. vperm 2, 10, 9, 4
  912. vxor 3, 3, 1
  913. vxor 2, 2, 0
  914. vperm 4, 15, 9, 3
  915. vperm 1, 14, 9, 2
  916. vxor 1, 1, 4
  917. vxor 0, 1, 7
  918. vxor 7, 1, 7
  919. blr
  920. .long 0
  921. .byte 0,12,0x14,0,0,0,0,0
  922. .align 4
  923. _vpaes_schedule_transform:
  924. vsrb 2, 0, 8
  925. vperm 0, 12, 12, 0
  926. vperm 2, 13, 13, 2
  927. vxor 0, 0, 2
  928. blr
  929. .long 0
  930. .byte 0,12,0x14,0,0,0,0,0
  931. .align 4
  932. _vpaes_schedule_mangle:
  933. bne 1, .Lschedule_mangle_dec
  934. vxor 4, 0, 26
  935. addi 5, 5, 16
  936. vperm 4, 4, 4, 25
  937. vperm 1, 4, 4, 25
  938. vperm 3, 1, 1, 25
  939. vxor 4, 4, 1
  940. lvx 1, 8, 10
  941. vxor 3, 3, 4
  942. vperm 3, 3, 3, 1
  943. addi 8, 8, -16
  944. andi. 8, 8, 0x30
  945. vperm 1, 3, 3, 29
  946. vsel 2, 28, 1, 30
  947. vor 28,1,1
  948. stvx 2, 0, 5
  949. blr
  950. .align 4
  951. .Lschedule_mangle_dec:
  952. vsrb 1, 0, 8
  953. vperm 2, 16, 16, 0
  954. vperm 3, 17, 17, 1
  955. vxor 3, 3, 2
  956. vperm 3, 3, 9, 25
  957. vperm 2, 18, 18, 0
  958. vxor 2, 2, 3
  959. vperm 3, 19, 19, 1
  960. vxor 3, 3, 2
  961. vperm 3, 3, 9, 25
  962. vperm 2, 20, 20, 0
  963. vxor 2, 2, 3
  964. vperm 3, 21, 21, 1
  965. vxor 3, 3, 2
  966. vperm 2, 22, 22, 0
  967. vperm 3, 3, 9, 25
  968. vperm 4, 23, 23, 1
  969. lvx 1, 8, 10
  970. vxor 2, 2, 3
  971. vxor 3, 4, 2
  972. addi 5, 5, -16
  973. vperm 3, 3, 3, 1
  974. addi 8, 8, -16
  975. andi. 8, 8, 0x30
  976. vperm 1, 3, 3, 29
  977. vsel 2, 28, 1, 30
  978. vor 28,1,1
  979. stvx 2, 0, 5
  980. blr
  981. .long 0
  982. .byte 0,12,0x14,0,0,0,0,0
  983. .globl vpaes_set_encrypt_key
  984. .type vpaes_set_encrypt_key,@function
  985. .align 5
  986. vpaes_set_encrypt_key:
  987. .localentry vpaes_set_encrypt_key,0
  988. stdu 1,-256(1)
  989. li 10,63
  990. li 11,79
  991. mflr 0
  992. li 6,-1
  993. stvx 20,10,1
  994. addi 10,10,32
  995. stvx 21,11,1
  996. addi 11,11,32
  997. stvx 22,10,1
  998. addi 10,10,32
  999. stvx 23,11,1
  1000. addi 11,11,32
  1001. stvx 24,10,1
  1002. addi 10,10,32
  1003. stvx 25,11,1
  1004. addi 11,11,32
  1005. stvx 26,10,1
  1006. addi 10,10,32
  1007. stvx 27,11,1
  1008. addi 11,11,32
  1009. stvx 28,10,1
  1010. addi 10,10,32
  1011. stvx 29,11,1
  1012. addi 11,11,32
  1013. stvx 30,10,1
  1014. stvx 31,11,1
  1015. stw 6,252(1)
  1016. li 7, -1
  1017. std 0, 272(1)
  1018. or 7,7,7
  1019. srwi 9, 4, 5
  1020. addi 9, 9, 6
  1021. stw 9, 240(5)
  1022. cmplw 1,4,4
  1023. li 8, 0x30
  1024. bl _vpaes_schedule_core
  1025. ld 0, 272(1)
  1026. li 10,63
  1027. li 11,79
  1028. or 6,6,6
  1029. mtlr 0
  1030. xor 3, 3, 3
  1031. lvx 20,10,1
  1032. addi 10,10,32
  1033. lvx 21,11,1
  1034. addi 11,11,32
  1035. lvx 22,10,1
  1036. addi 10,10,32
  1037. lvx 23,11,1
  1038. addi 11,11,32
  1039. lvx 24,10,1
  1040. addi 10,10,32
  1041. lvx 25,11,1
  1042. addi 11,11,32
  1043. lvx 26,10,1
  1044. addi 10,10,32
  1045. lvx 27,11,1
  1046. addi 11,11,32
  1047. lvx 28,10,1
  1048. addi 10,10,32
  1049. lvx 29,11,1
  1050. addi 11,11,32
  1051. lvx 30,10,1
  1052. lvx 31,11,1
  1053. addi 1,1,256
  1054. blr
  1055. .long 0
  1056. .byte 0,12,0x04,1,0x80,0,3,0
  1057. .long 0
  1058. .size vpaes_set_encrypt_key,.-vpaes_set_encrypt_key
  1059. .globl vpaes_set_decrypt_key
  1060. .type vpaes_set_decrypt_key,@function
  1061. .align 4
  1062. vpaes_set_decrypt_key:
  1063. .localentry vpaes_set_decrypt_key,0
  1064. stdu 1,-256(1)
  1065. li 10,63
  1066. li 11,79
  1067. mflr 0
  1068. li 6,-1
  1069. stvx 20,10,1
  1070. addi 10,10,32
  1071. stvx 21,11,1
  1072. addi 11,11,32
  1073. stvx 22,10,1
  1074. addi 10,10,32
  1075. stvx 23,11,1
  1076. addi 11,11,32
  1077. stvx 24,10,1
  1078. addi 10,10,32
  1079. stvx 25,11,1
  1080. addi 11,11,32
  1081. stvx 26,10,1
  1082. addi 10,10,32
  1083. stvx 27,11,1
  1084. addi 11,11,32
  1085. stvx 28,10,1
  1086. addi 10,10,32
  1087. stvx 29,11,1
  1088. addi 11,11,32
  1089. stvx 30,10,1
  1090. stvx 31,11,1
  1091. stw 6,252(1)
  1092. li 7, -1
  1093. std 0, 272(1)
  1094. or 7,7,7
  1095. srwi 9, 4, 5
  1096. addi 9, 9, 6
  1097. stw 9, 240(5)
  1098. slwi 9, 9, 4
  1099. add 5, 5, 9
  1100. cmplwi 1, 4, 0
  1101. srwi 8, 4, 1
  1102. andi. 8, 8, 32
  1103. xori 8, 8, 32
  1104. bl _vpaes_schedule_core
  1105. ld 0, 272(1)
  1106. li 10,63
  1107. li 11,79
  1108. or 6,6,6
  1109. mtlr 0
  1110. xor 3, 3, 3
  1111. lvx 20,10,1
  1112. addi 10,10,32
  1113. lvx 21,11,1
  1114. addi 11,11,32
  1115. lvx 22,10,1
  1116. addi 10,10,32
  1117. lvx 23,11,1
  1118. addi 11,11,32
  1119. lvx 24,10,1
  1120. addi 10,10,32
  1121. lvx 25,11,1
  1122. addi 11,11,32
  1123. lvx 26,10,1
  1124. addi 10,10,32
  1125. lvx 27,11,1
  1126. addi 11,11,32
  1127. lvx 28,10,1
  1128. addi 10,10,32
  1129. lvx 29,11,1
  1130. addi 11,11,32
  1131. lvx 30,10,1
  1132. lvx 31,11,1
  1133. addi 1,1,256
  1134. blr
  1135. .long 0
  1136. .byte 0,12,0x04,1,0x80,0,3,0
  1137. .long 0
  1138. .size vpaes_set_decrypt_key,.-vpaes_set_decrypt_key