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