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