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