1.machine  "any"
2.text
3
4.globl    ChaCha20_ctr32_int
5.type     ChaCha20_ctr32_int,@function
6.align    5
7ChaCha20_ctr32_int:
8__ChaCha20_ctr32_int:
9          cmplwi    5,0
10          beqlr
11
12          stwu      1,-160(1)
13          mflr      0
14
15          stw       14,88(1)
16          stw       15,92(1)
17          stw       16,96(1)
18          stw       17,100(1)
19          stw       18,104(1)
20          stw       19,108(1)
21          stw       20,112(1)
22          stw       21,116(1)
23          stw       22,120(1)
24          stw       23,124(1)
25          stw       24,128(1)
26          stw       25,132(1)
27          stw       26,136(1)
28          stw       27,140(1)
29          stw       28,144(1)
30          stw       29,148(1)
31          stw       30,152(1)
32          stw       31,156(1)
33          stw       0,164(1)
34
35          lwz       11,0(7)
36          lwz       12,4(7)
37          lwz       14,8(7)
38          lwz       15,12(7)
39
40          bl        __ChaCha20_1x
41
42          lwz       0,164(1)
43          lwz       14,88(1)
44          lwz       15,92(1)
45          lwz       16,96(1)
46          lwz       17,100(1)
47          lwz       18,104(1)
48          lwz       19,108(1)
49          lwz       20,112(1)
50          lwz       21,116(1)
51          lwz       22,120(1)
52          lwz       23,124(1)
53          lwz       24,128(1)
54          lwz       25,132(1)
55          lwz       26,136(1)
56          lwz       27,140(1)
57          lwz       28,144(1)
58          lwz       29,148(1)
59          lwz       30,152(1)
60          lwz       31,156(1)
61          mtlr      0
62          addi      1,1,160
63          blr
64.long     0
65.byte     0,12,4,1,0x80,18,5,0
66.long     0
67
68
69.align    5
70__ChaCha20_1x:
71.Loop_outer:
72          lis       16,0x6170
73          lis       17,0x3320
74          lis       18,0x7962
75          lis       19,0x6b20
76          ori       16,16,0x7865
77          ori       17,17,0x646e
78          ori       18,18,0x2d32
79          ori       19,19,0x6574
80
81          li        0,10
82          lwz       20,0(6)
83          lwz       21,4(6)
84          lwz       22,8(6)
85          lwz       23,12(6)
86          lwz       24,16(6)
87          mr        28,11
88          lwz       25,20(6)
89          mr        29,12
90          lwz       26,24(6)
91          mr        30,14
92          lwz       27,28(6)
93          mr        31,15
94
95          mr        7,20
96          mr        8,21
97          mr        9,22
98          mr        10,23
99
100          mtctr     0
101.Loop:
102          add       16,16,20
103          add       17,17,21
104          add       18,18,22
105          add       19,19,23
106          xor       28,28,16
107          xor       29,29,17
108          xor       30,30,18
109          xor       31,31,19
110          rotlwi    28,28,16
111          rotlwi    29,29,16
112          rotlwi    30,30,16
113          rotlwi    31,31,16
114          add       24,24,28
115          add       25,25,29
116          add       26,26,30
117          add       27,27,31
118          xor       20,20,24
119          xor       21,21,25
120          xor       22,22,26
121          xor       23,23,27
122          rotlwi    20,20,12
123          rotlwi    21,21,12
124          rotlwi    22,22,12
125          rotlwi    23,23,12
126          add       16,16,20
127          add       17,17,21
128          add       18,18,22
129          add       19,19,23
130          xor       28,28,16
131          xor       29,29,17
132          xor       30,30,18
133          xor       31,31,19
134          rotlwi    28,28,8
135          rotlwi    29,29,8
136          rotlwi    30,30,8
137          rotlwi    31,31,8
138          add       24,24,28
139          add       25,25,29
140          add       26,26,30
141          add       27,27,31
142          xor       20,20,24
143          xor       21,21,25
144          xor       22,22,26
145          xor       23,23,27
146          rotlwi    20,20,7
147          rotlwi    21,21,7
148          rotlwi    22,22,7
149          rotlwi    23,23,7
150          add       16,16,21
151          add       17,17,22
152          add       18,18,23
153          add       19,19,20
154          xor       31,31,16
155          xor       28,28,17
156          xor       29,29,18
157          xor       30,30,19
158          rotlwi    31,31,16
159          rotlwi    28,28,16
160          rotlwi    29,29,16
161          rotlwi    30,30,16
162          add       26,26,31
163          add       27,27,28
164          add       24,24,29
165          add       25,25,30
166          xor       21,21,26
167          xor       22,22,27
168          xor       23,23,24
169          xor       20,20,25
170          rotlwi    21,21,12
171          rotlwi    22,22,12
172          rotlwi    23,23,12
173          rotlwi    20,20,12
174          add       16,16,21
175          add       17,17,22
176          add       18,18,23
177          add       19,19,20
178          xor       31,31,16
179          xor       28,28,17
180          xor       29,29,18
181          xor       30,30,19
182          rotlwi    31,31,8
183          rotlwi    28,28,8
184          rotlwi    29,29,8
185          rotlwi    30,30,8
186          add       26,26,31
187          add       27,27,28
188          add       24,24,29
189          add       25,25,30
190          xor       21,21,26
191          xor       22,22,27
192          xor       23,23,24
193          xor       20,20,25
194          rotlwi    21,21,7
195          rotlwi    22,22,7
196          rotlwi    23,23,7
197          rotlwi    20,20,7
198          bc        16,0,.Loop
199
200          subic     5,5,64
201          addi      16,16,0x7865
202          addi      17,17,0x646e
203          addi      18,18,0x2d32
204          addi      19,19,0x6574
205          addis     16,16,0x6170
206          addis     17,17,0x3320
207          addis     18,18,0x7962
208          addis     19,19,0x6b20
209
210          subfe.    0,0,0
211          add       20,20,7
212          lwz       7,16(6)
213          add       21,21,8
214          lwz       8,20(6)
215          add       22,22,9
216          lwz       9,24(6)
217          add       23,23,10
218          lwz       10,28(6)
219          add       24,24,7
220          add       25,25,8
221          add       26,26,9
222          add       27,27,10
223
224          add       28,28,11
225          add       29,29,12
226          add       30,30,14
227          add       31,31,15
228          addi      11,11,1
229          mr        7,16
230          rotlwi    16,16,8
231          rlwimi    16,7,24,0,7
232          rlwimi    16,7,24,16,23
233          mr        8,17
234          rotlwi    17,17,8
235          rlwimi    17,8,24,0,7
236          rlwimi    17,8,24,16,23
237          mr        9,18
238          rotlwi    18,18,8
239          rlwimi    18,9,24,0,7
240          rlwimi    18,9,24,16,23
241          mr        10,19
242          rotlwi    19,19,8
243          rlwimi    19,10,24,0,7
244          rlwimi    19,10,24,16,23
245          mr        7,20
246          rotlwi    20,20,8
247          rlwimi    20,7,24,0,7
248          rlwimi    20,7,24,16,23
249          mr        8,21
250          rotlwi    21,21,8
251          rlwimi    21,8,24,0,7
252          rlwimi    21,8,24,16,23
253          mr        9,22
254          rotlwi    22,22,8
255          rlwimi    22,9,24,0,7
256          rlwimi    22,9,24,16,23
257          mr        10,23
258          rotlwi    23,23,8
259          rlwimi    23,10,24,0,7
260          rlwimi    23,10,24,16,23
261          mr        7,24
262          rotlwi    24,24,8
263          rlwimi    24,7,24,0,7
264          rlwimi    24,7,24,16,23
265          mr        8,25
266          rotlwi    25,25,8
267          rlwimi    25,8,24,0,7
268          rlwimi    25,8,24,16,23
269          mr        9,26
270          rotlwi    26,26,8
271          rlwimi    26,9,24,0,7
272          rlwimi    26,9,24,16,23
273          mr        10,27
274          rotlwi    27,27,8
275          rlwimi    27,10,24,0,7
276          rlwimi    27,10,24,16,23
277          mr        7,28
278          rotlwi    28,28,8
279          rlwimi    28,7,24,0,7
280          rlwimi    28,7,24,16,23
281          mr        8,29
282          rotlwi    29,29,8
283          rlwimi    29,8,24,0,7
284          rlwimi    29,8,24,16,23
285          mr        9,30
286          rotlwi    30,30,8
287          rlwimi    30,9,24,0,7
288          rlwimi    30,9,24,16,23
289          mr        10,31
290          rotlwi    31,31,8
291          rlwimi    31,10,24,0,7
292          rlwimi    31,10,24,16,23
293          bne       .Ltail
294
295          lwz       7,0(4)
296          lwz       8,4(4)
297          cmplwi    5,0
298          lwz       9,8(4)
299          lwz       10,12(4)
300          xor       16,16,7
301          lwz       7,16(4)
302          xor       17,17,8
303          lwz       8,20(4)
304          xor       18,18,9
305          lwz       9,24(4)
306          xor       19,19,10
307          lwz       10,28(4)
308          xor       20,20,7
309          lwz       7,32(4)
310          xor       21,21,8
311          lwz       8,36(4)
312          xor       22,22,9
313          lwz       9,40(4)
314          xor       23,23,10
315          lwz       10,44(4)
316          xor       24,24,7
317          lwz       7,48(4)
318          xor       25,25,8
319          lwz       8,52(4)
320          xor       26,26,9
321          lwz       9,56(4)
322          xor       27,27,10
323          lwz       10,60(4)
324          xor       28,28,7
325          stw       16,0(3)
326          xor       29,29,8
327          stw       17,4(3)
328          xor       30,30,9
329          stw       18,8(3)
330          xor       31,31,10
331          stw       19,12(3)
332          stw       20,16(3)
333          stw       21,20(3)
334          stw       22,24(3)
335          stw       23,28(3)
336          stw       24,32(3)
337          stw       25,36(3)
338          stw       26,40(3)
339          stw       27,44(3)
340          stw       28,48(3)
341          stw       29,52(3)
342          stw       30,56(3)
343          addi      4,4,64
344          stw       31,60(3)
345          addi      3,3,64
346
347          bne       .Loop_outer
348
349          blr
350
351.align    4
352.Ltail:
353          addi      5,5,64
354          subi      4,4,1
355          subi      3,3,1
356          addi      7,1,24-1
357          mtctr     5
358
359          stw       16,24(1)
360          stw       17,28(1)
361          stw       18,32(1)
362          stw       19,36(1)
363          stw       20,40(1)
364          stw       21,44(1)
365          stw       22,48(1)
366          stw       23,52(1)
367          stw       24,56(1)
368          stw       25,60(1)
369          stw       26,64(1)
370          stw       27,68(1)
371          stw       28,72(1)
372          stw       29,76(1)
373          stw       30,80(1)
374          stw       31,84(1)
375
376.Loop_tail:
377          lbzu      11,1(4)
378          lbzu      16,1(7)
379          xor       12,11,16
380          stbu      12,1(3)
381          bc        16,0,.Loop_tail
382
383          stw       1,24(1)
384          stw       1,28(1)
385          stw       1,32(1)
386          stw       1,36(1)
387          stw       1,40(1)
388          stw       1,44(1)
389          stw       1,48(1)
390          stw       1,52(1)
391          stw       1,56(1)
392          stw       1,60(1)
393          stw       1,64(1)
394          stw       1,68(1)
395          stw       1,72(1)
396          stw       1,76(1)
397          stw       1,80(1)
398          stw       1,84(1)
399
400          blr
401.long     0
402.byte     0,12,0x14,0,0,0,0,0
403
404.globl    ChaCha20_ctr32_vmx
405.type     ChaCha20_ctr32_vmx,@function
406.align    5
407ChaCha20_ctr32_vmx:
408          cmplwi    5,256
409          blt       __ChaCha20_ctr32_int
410
411          stwu      1,-320(1)
412          mflr      0
413          li        10,103
414          li        11,119
415          mfspr     12,256
416          stvx      23,10,1
417          addi      10,10,32
418          stvx      24,11,1
419          addi      11,11,32
420          stvx      25,10,1
421          addi      10,10,32
422          stvx      26,11,1
423          addi      11,11,32
424          stvx      27,10,1
425          addi      10,10,32
426          stvx      28,11,1
427          addi      11,11,32
428          stvx      29,10,1
429          addi      10,10,32
430          stvx      30,11,1
431          stvx      31,10,1
432          stw       12,244(1)
433          stw       14,248(1)
434          stw       15,252(1)
435          stw       16,256(1)
436          stw       17,260(1)
437          stw       18,264(1)
438          stw       19,268(1)
439          stw       20,272(1)
440          stw       21,276(1)
441          stw       22,280(1)
442          stw       23,284(1)
443          stw       24,288(1)
444          stw       25,292(1)
445          stw       26,296(1)
446          stw       27,300(1)
447          stw       28,304(1)
448          stw       29,308(1)
449          stw       30,312(1)
450          stw       31,316(1)
451          li        12,-4096+511
452          stw       0, 324(1)
453          mtspr     256,12
454
455          bl        .Lconsts
456          li        16,16
457          li        17,32
458          li        18,48
459          li        19,64
460          li        20,31
461          li        21,15
462
463          lvx       13,0,6
464          lvsl      29,0,6
465          lvx       14,16,6
466          lvx       27,20,6
467
468          lvx       15,0,7
469          lvsl      30,0,7
470          lvx       28,21,7
471
472          lvx       12,0,12
473          lvx       17,16,12
474          lvx       18,17,12
475          lvx       19,18,12
476          lvx       23,19,12
477
478          vperm     13,13,14,29
479          vperm     14,14,27,29
480          vperm     15,15,28,30
481
482          lwz       11,0(7)
483          lwz       12,4(7)
484          vadduwm   15,15,17
485          lwz       14,8(7)
486          vadduwm   16,15,17
487          lwz       15,12(7)
488          vadduwm   17,16,17
489
490          vxor      29,29,29
491          vspltisw  26,-1
492          lvsl      24,0,4
493          lvsr      25,0,3
494          vperm     26,29,26,25
495
496          lvsl      29,0,16
497          vspltisb  30,3
498          vxor      29,29,30
499          vxor      25,25,30
500          vperm     24,24,24,29
501
502          li        0,10
503          b         .Loop_outer_vmx
504
505.align    4
506.Loop_outer_vmx:
507          lis       16,0x6170
508          lis       17,0x3320
509          vor       0,12,12
510          lis       18,0x7962
511          lis       19,0x6b20
512          vor       4,12,12
513          ori       16,16,0x7865
514          ori       17,17,0x646e
515          vor       8,12,12
516          ori       18,18,0x2d32
517          ori       19,19,0x6574
518          vor       1,13,13
519
520          lwz       20,0(6)
521          vor       5,13,13
522          lwz       21,4(6)
523          vor       9,13,13
524          lwz       22,8(6)
525          vor       2,14,14
526          lwz       23,12(6)
527          vor       6,14,14
528          lwz       24,16(6)
529          vor       10,14,14
530          mr        28,11
531          lwz       25,20(6)
532          vor       3,15,15
533          mr        29,12
534          lwz       26,24(6)
535          vor       7,16,16
536          mr        30,14
537          lwz       27,28(6)
538          vor       11,17,17
539          mr        31,15
540
541          mr        7,20
542          mr        8,21
543          mr        9,22
544          mr        10,23
545
546          vspltisw  27,12
547          vspltisw  28,7
548
549          mtctr     0
550          nop
551.Loop_vmx:
552          vadduwm   0,0,1
553          vadduwm   4,4,5
554          vadduwm   8,8,9
555          add       16,16,20
556          add       17,17,21
557          add       18,18,22
558          vxor      3,3,0
559          vxor      7,7,4
560          vxor      11,11,8
561          add       19,19,23
562          xor       28,28,16
563          xor       29,29,17
564          vperm     3,3,3,19
565          vperm     7,7,7,19
566          vperm     11,11,11,19
567          xor       30,30,18
568          xor       31,31,19
569          rotlwi    28,28,16
570          vadduwm   2,2,3
571          vadduwm   6,6,7
572          vadduwm   10,10,11
573          rotlwi    29,29,16
574          rotlwi    30,30,16
575          rotlwi    31,31,16
576          vxor      1,1,2
577          vxor      5,5,6
578          vxor      9,9,10
579          add       24,24,28
580          add       25,25,29
581          add       26,26,30
582          vrlw      1,1,27
583          vrlw      5,5,27
584          vrlw      9,9,27
585          add       27,27,31
586          xor       20,20,24
587          xor       21,21,25
588          vadduwm   0,0,1
589          vadduwm   4,4,5
590          vadduwm   8,8,9
591          xor       22,22,26
592          xor       23,23,27
593          rotlwi    20,20,12
594          vxor      3,3,0
595          vxor      7,7,4
596          vxor      11,11,8
597          rotlwi    21,21,12
598          rotlwi    22,22,12
599          rotlwi    23,23,12
600          vperm     3,3,3,23
601          vperm     7,7,7,23
602          vperm     11,11,11,23
603          add       16,16,20
604          add       17,17,21
605          add       18,18,22
606          vadduwm   2,2,3
607          vadduwm   6,6,7
608          vadduwm   10,10,11
609          add       19,19,23
610          xor       28,28,16
611          xor       29,29,17
612          vxor      1,1,2
613          vxor      5,5,6
614          vxor      9,9,10
615          xor       30,30,18
616          xor       31,31,19
617          rotlwi    28,28,8
618          vrlw      1,1,28
619          vrlw      5,5,28
620          vrlw      9,9,28
621          rotlwi    29,29,8
622          rotlwi    30,30,8
623          rotlwi    31,31,8
624          vsldoi    2,2,2, 16-8
625          vsldoi    6,6,6, 16-8
626          vsldoi    10,10,10, 16-8
627          add       24,24,28
628          add       25,25,29
629          add       26,26,30
630          vsldoi    1,1,1, 16-12
631          vsldoi    5,5,5, 16-12
632          vsldoi    9,9,9, 16-12
633          add       27,27,31
634          xor       20,20,24
635          xor       21,21,25
636          vsldoi    3,3,3, 16-4
637          vsldoi    7,7,7, 16-4
638          vsldoi    11,11,11, 16-4
639          xor       22,22,26
640          xor       23,23,27
641          rotlwi    20,20,7
642          rotlwi    21,21,7
643          rotlwi    22,22,7
644          rotlwi    23,23,7
645          vadduwm   0,0,1
646          vadduwm   4,4,5
647          vadduwm   8,8,9
648          add       16,16,21
649          add       17,17,22
650          add       18,18,23
651          vxor      3,3,0
652          vxor      7,7,4
653          vxor      11,11,8
654          add       19,19,20
655          xor       31,31,16
656          xor       28,28,17
657          vperm     3,3,3,19
658          vperm     7,7,7,19
659          vperm     11,11,11,19
660          xor       29,29,18
661          xor       30,30,19
662          rotlwi    31,31,16
663          vadduwm   2,2,3
664          vadduwm   6,6,7
665          vadduwm   10,10,11
666          rotlwi    28,28,16
667          rotlwi    29,29,16
668          rotlwi    30,30,16
669          vxor      1,1,2
670          vxor      5,5,6
671          vxor      9,9,10
672          add       26,26,31
673          add       27,27,28
674          add       24,24,29
675          vrlw      1,1,27
676          vrlw      5,5,27
677          vrlw      9,9,27
678          add       25,25,30
679          xor       21,21,26
680          xor       22,22,27
681          vadduwm   0,0,1
682          vadduwm   4,4,5
683          vadduwm   8,8,9
684          xor       23,23,24
685          xor       20,20,25
686          rotlwi    21,21,12
687          vxor      3,3,0
688          vxor      7,7,4
689          vxor      11,11,8
690          rotlwi    22,22,12
691          rotlwi    23,23,12
692          rotlwi    20,20,12
693          vperm     3,3,3,23
694          vperm     7,7,7,23
695          vperm     11,11,11,23
696          add       16,16,21
697          add       17,17,22
698          add       18,18,23
699          vadduwm   2,2,3
700          vadduwm   6,6,7
701          vadduwm   10,10,11
702          add       19,19,20
703          xor       31,31,16
704          xor       28,28,17
705          vxor      1,1,2
706          vxor      5,5,6
707          vxor      9,9,10
708          xor       29,29,18
709          xor       30,30,19
710          rotlwi    31,31,8
711          vrlw      1,1,28
712          vrlw      5,5,28
713          vrlw      9,9,28
714          rotlwi    28,28,8
715          rotlwi    29,29,8
716          rotlwi    30,30,8
717          vsldoi    2,2,2, 16-8
718          vsldoi    6,6,6, 16-8
719          vsldoi    10,10,10, 16-8
720          add       26,26,31
721          add       27,27,28
722          add       24,24,29
723          vsldoi    1,1,1, 16-4
724          vsldoi    5,5,5, 16-4
725          vsldoi    9,9,9, 16-4
726          add       25,25,30
727          xor       21,21,26
728          xor       22,22,27
729          vsldoi    3,3,3, 16-12
730          vsldoi    7,7,7, 16-12
731          vsldoi    11,11,11, 16-12
732          xor       23,23,24
733          xor       20,20,25
734          rotlwi    21,21,7
735          rotlwi    22,22,7
736          rotlwi    23,23,7
737          rotlwi    20,20,7
738          bc        16,0,.Loop_vmx
739
740          subi      5,5,256
741          addi      16,16,0x7865
742          addi      17,17,0x646e
743          addi      18,18,0x2d32
744          addi      19,19,0x6574
745          addis     16,16,0x6170
746          addis     17,17,0x3320
747          addis     18,18,0x7962
748          addis     19,19,0x6b20
749          add       20,20,7
750          lwz       7,16(6)
751          add       21,21,8
752          lwz       8,20(6)
753          add       22,22,9
754          lwz       9,24(6)
755          add       23,23,10
756          lwz       10,28(6)
757          add       24,24,7
758          add       25,25,8
759          add       26,26,9
760          add       27,27,10
761          add       28,28,11
762          add       29,29,12
763          add       30,30,14
764          add       31,31,15
765
766          vadduwm   0,0,12
767          vadduwm   4,4,12
768          vadduwm   8,8,12
769          vadduwm   1,1,13
770          vadduwm   5,5,13
771          vadduwm   9,9,13
772          vadduwm   2,2,14
773          vadduwm   6,6,14
774          vadduwm   10,10,14
775          vadduwm   3,3,15
776          vadduwm   7,7,16
777          vadduwm   11,11,17
778
779          addi      11,11,4
780          vadduwm   15,15,18
781          vadduwm   16,16,18
782          vadduwm   17,17,18
783
784          mr        7,16
785          rotlwi    16,16,8
786          rlwimi    16,7,24,0,7
787          rlwimi    16,7,24,16,23
788          mr        8,17
789          rotlwi    17,17,8
790          rlwimi    17,8,24,0,7
791          rlwimi    17,8,24,16,23
792          mr        9,18
793          rotlwi    18,18,8
794          rlwimi    18,9,24,0,7
795          rlwimi    18,9,24,16,23
796          mr        10,19
797          rotlwi    19,19,8
798          rlwimi    19,10,24,0,7
799          rlwimi    19,10,24,16,23
800          mr        7,20
801          rotlwi    20,20,8
802          rlwimi    20,7,24,0,7
803          rlwimi    20,7,24,16,23
804          mr        8,21
805          rotlwi    21,21,8
806          rlwimi    21,8,24,0,7
807          rlwimi    21,8,24,16,23
808          mr        9,22
809          rotlwi    22,22,8
810          rlwimi    22,9,24,0,7
811          rlwimi    22,9,24,16,23
812          mr        10,23
813          rotlwi    23,23,8
814          rlwimi    23,10,24,0,7
815          rlwimi    23,10,24,16,23
816          mr        7,24
817          rotlwi    24,24,8
818          rlwimi    24,7,24,0,7
819          rlwimi    24,7,24,16,23
820          mr        8,25
821          rotlwi    25,25,8
822          rlwimi    25,8,24,0,7
823          rlwimi    25,8,24,16,23
824          mr        9,26
825          rotlwi    26,26,8
826          rlwimi    26,9,24,0,7
827          rlwimi    26,9,24,16,23
828          mr        10,27
829          rotlwi    27,27,8
830          rlwimi    27,10,24,0,7
831          rlwimi    27,10,24,16,23
832          mr        7,28
833          rotlwi    28,28,8
834          rlwimi    28,7,24,0,7
835          rlwimi    28,7,24,16,23
836          mr        8,29
837          rotlwi    29,29,8
838          rlwimi    29,8,24,0,7
839          rlwimi    29,8,24,16,23
840          mr        9,30
841          rotlwi    30,30,8
842          rlwimi    30,9,24,0,7
843          rlwimi    30,9,24,16,23
844          mr        10,31
845          rotlwi    31,31,8
846          rlwimi    31,10,24,0,7
847          rlwimi    31,10,24,16,23
848          lwz       7,0(4)
849          lwz       8,4(4)
850          lwz       9,8(4)
851          lwz       10,12(4)
852          xor       16,16,7
853          lwz       7,16(4)
854          xor       17,17,8
855          lwz       8,20(4)
856          xor       18,18,9
857          lwz       9,24(4)
858          xor       19,19,10
859          lwz       10,28(4)
860          xor       20,20,7
861          lwz       7,32(4)
862          xor       21,21,8
863          lwz       8,36(4)
864          xor       22,22,9
865          lwz       9,40(4)
866          xor       23,23,10
867          lwz       10,44(4)
868          xor       24,24,7
869          lwz       7,48(4)
870          xor       25,25,8
871          lwz       8,52(4)
872          xor       26,26,9
873          lwz       9,56(4)
874          xor       27,27,10
875          lwz       10,60(4)
876          xor       28,28,7
877          stw       16,0(3)
878          xor       29,29,8
879          stw       17,4(3)
880          xor       30,30,9
881          stw       18,8(3)
882          xor       31,31,10
883          stw       19,12(3)
884          addi      4,4,64
885          stw       20,16(3)
886          li        7,16
887          stw       21,20(3)
888          li        8,32
889          stw       22,24(3)
890          li        9,48
891          stw       23,28(3)
892          li        10,64
893          stw       24,32(3)
894          stw       25,36(3)
895          stw       26,40(3)
896          stw       27,44(3)
897          stw       28,48(3)
898          stw       29,52(3)
899          stw       30,56(3)
900          stw       31,60(3)
901          addi      3,3,64
902
903          lvx       27,0,4
904          lvx       28,7,4
905          lvx       29,8,4
906          lvx       30,9,4
907          lvx       31,10,4
908          addi      4,4,64
909
910          vperm     27,27,28,24
911          vperm     28,28,29,24
912          vperm     29,29,30,24
913          vperm     30,30,31,24
914          vxor      0,0,27
915          vxor      1,1,28
916          lvx       28,7,4
917          vxor      2,2,29
918          lvx       29,8,4
919          vxor      3,3,30
920          lvx       30,9,4
921          lvx       27,10,4
922          addi      4,4,64
923          li        10,63
924          vperm     0,0,0,25
925          vperm     1,1,1,25
926          vperm     2,2,2,25
927          vperm     3,3,3,25
928
929          vperm     31,31,28,24
930          vperm     28,28,29,24
931          vperm     29,29,30,24
932          vperm     30,30,27,24
933          vxor      4,4,31
934          vxor      5,5,28
935          lvx       28,7,4
936          vxor      6,6,29
937          lvx       29,8,4
938          vxor      7,7,30
939          lvx       30,9,4
940          lvx       31,10,4
941          addi      4,4,64
942          vperm     4,4,4,25
943          vperm     5,5,5,25
944          vperm     6,6,6,25
945          vperm     7,7,7,25
946
947          vperm     27,27,28,24
948          vperm     28,28,29,24
949          vperm     29,29,30,24
950          vperm     30,30,31,24
951          vxor      8,8,27
952          vxor      9,9,28
953          vxor      10,10,29
954          vxor      11,11,30
955          vperm     8,8,8,25
956          vperm     9,9,9,25
957          vperm     10,10,10,25
958          vperm     11,11,11,25
959
960          andi.     17,3,15
961          mr        16,3
962
963          vsel      27,0,1,26
964          vsel      28,1,2,26
965          vsel      29,2,3,26
966          vsel      30,3,4,26
967          vsel      1,4,5,26
968          vsel      2,5,6,26
969          vsel      3,6,7,26
970          vsel      4,7,8,26
971          vsel      5,8,9,26
972          vsel      6,9,10,26
973          vsel      7,10,11,26
974
975
976          stvx      27,7,3
977          stvx      28,8,3
978          stvx      29,9,3
979          addi      3,3,64
980          stvx      30,0,3
981          stvx      1,7,3
982          stvx      2,8,3
983          stvx      3,9,3
984          addi      3,3,64
985          stvx      4,0,3
986          stvx      5,7,3
987          stvx      6,8,3
988          stvx      7,9,3
989          addi      3,3,64
990
991          beq       .Laligned_vmx
992
993          sub       18,3,17
994          li        19,0
995.Lunaligned_tail_vmx:
996          stvebx    11,19,18
997          addi      19,19,1
998          cmpw      19,17
999          bne       .Lunaligned_tail_vmx
1000
1001          sub       18,16,17
1002.Lunaligned_head_vmx:
1003          stvebx    0,17,18
1004          cmpwi     17,15
1005          addi      17,17,1
1006          bne       .Lunaligned_head_vmx
1007
1008          cmplwi    5,255
1009          bgt       .Loop_outer_vmx
1010
1011          b         .Ldone_vmx
1012
1013.align    4
1014.Laligned_vmx:
1015          stvx      0,0,16
1016
1017          cmplwi    5,255
1018          bgt       .Loop_outer_vmx
1019          nop
1020
1021.Ldone_vmx:
1022          cmplwi    5,0
1023          bnel      __ChaCha20_1x
1024
1025          lwz       12,244(1)
1026          li        10,103
1027          li        11,119
1028          mtspr     256,12
1029          lvx       23,10,1
1030          addi      10,10,32
1031          lvx       24,11,1
1032          addi      11,11,32
1033          lvx       25,10,1
1034          addi      10,10,32
1035          lvx       26,11,1
1036          addi      11,11,32
1037          lvx       27,10,1
1038          addi      10,10,32
1039          lvx       28,11,1
1040          addi      11,11,32
1041          lvx       29,10,1
1042          addi      10,10,32
1043          lvx       30,11,1
1044          lvx       31,10,1
1045          lwz       0, 324(1)
1046          lwz       14,248(1)
1047          lwz       15,252(1)
1048          lwz       16,256(1)
1049          lwz       17,260(1)
1050          lwz       18,264(1)
1051          lwz       19,268(1)
1052          lwz       20,272(1)
1053          lwz       21,276(1)
1054          lwz       22,280(1)
1055          lwz       23,284(1)
1056          lwz       24,288(1)
1057          lwz       25,292(1)
1058          lwz       26,296(1)
1059          lwz       27,300(1)
1060          lwz       28,304(1)
1061          lwz       29,308(1)
1062          lwz       30,312(1)
1063          lwz       31,316(1)
1064          mtlr      0
1065          addi      1,1,320
1066          blr
1067.long     0
1068.byte     0,12,0x04,1,0x80,18,5,0
1069.long     0
1070
1071
1072.globl    ChaCha20_ctr32_vsx
1073.type     ChaCha20_ctr32_vsx,@function
1074.align    5
1075ChaCha20_ctr32_vsx:
1076          stwu      1,-200(1)
1077          mflr      0
1078          li        10,103
1079          li        11,119
1080          mfspr     12,256
1081          stvx      26,10,1
1082          addi      10,10,32
1083          stvx      27,11,1
1084          addi      11,11,32
1085          stvx      28,10,1
1086          addi      10,10,32
1087          stvx      29,11,1
1088          addi      11,11,32
1089          stvx      30,10,1
1090          stvx      31,11,1
1091          stw       12,196(1)
1092          li        12,-4096+63
1093          stw       0, 204(1)
1094          mtspr     256,12
1095
1096          bl        .Lconsts
1097.long     0x7E006619
1098          addi      12,12,0x50
1099          li        8,16
1100          li        9,32
1101          li        10,48
1102          li        11,64
1103
1104.long     0x7E203619
1105.long     0x7E483619
1106.long     0x7E603E19
1107
1108          vxor      27,27,27
1109.long     0x7F8B6619
1110          vspltw    26,19,0
1111          vsldoi    19,19,27,4
1112          vsldoi    19,27,19,12
1113          vadduwm   26,26,28
1114
1115          lvsl      31,0,8
1116          vspltisb  27,3
1117          vxor      31,31,27
1118
1119          li        0,10
1120          mtctr     0
1121          b         .Loop_outer_vsx
1122
1123.align    5
1124.Loop_outer_vsx:
1125          lvx       0,0,12
1126          lvx       1,8,12
1127          lvx       2,9,12
1128          lvx       3,10,12
1129
1130          vspltw    4,17,0
1131          vspltw    5,17,1
1132          vspltw    6,17,2
1133          vspltw    7,17,3
1134
1135          vspltw    8,18,0
1136          vspltw    9,18,1
1137          vspltw    10,18,2
1138          vspltw    11,18,3
1139
1140          vor       12,26,26
1141          vspltw    13,19,1
1142          vspltw    14,19,2
1143          vspltw    15,19,3
1144
1145          vspltisw  27,-16
1146          vspltisw  28,12
1147          vspltisw  29,8
1148          vspltisw  30,7
1149
1150.Loop_vsx:
1151          vadduwm   0,0,4
1152          vadduwm   1,1,5
1153          vadduwm   2,2,6
1154          vadduwm   3,3,7
1155          vxor      12,12,0
1156          vxor      13,13,1
1157          vxor      14,14,2
1158          vxor      15,15,3
1159          vrlw      12,12,27
1160          vrlw      13,13,27
1161          vrlw      14,14,27
1162          vrlw      15,15,27
1163          vadduwm   8,8,12
1164          vadduwm   9,9,13
1165          vadduwm   10,10,14
1166          vadduwm   11,11,15
1167          vxor      4,4,8
1168          vxor      5,5,9
1169          vxor      6,6,10
1170          vxor      7,7,11
1171          vrlw      4,4,28
1172          vrlw      5,5,28
1173          vrlw      6,6,28
1174          vrlw      7,7,28
1175          vadduwm   0,0,4
1176          vadduwm   1,1,5
1177          vadduwm   2,2,6
1178          vadduwm   3,3,7
1179          vxor      12,12,0
1180          vxor      13,13,1
1181          vxor      14,14,2
1182          vxor      15,15,3
1183          vrlw      12,12,29
1184          vrlw      13,13,29
1185          vrlw      14,14,29
1186          vrlw      15,15,29
1187          vadduwm   8,8,12
1188          vadduwm   9,9,13
1189          vadduwm   10,10,14
1190          vadduwm   11,11,15
1191          vxor      4,4,8
1192          vxor      5,5,9
1193          vxor      6,6,10
1194          vxor      7,7,11
1195          vrlw      4,4,30
1196          vrlw      5,5,30
1197          vrlw      6,6,30
1198          vrlw      7,7,30
1199          vadduwm   0,0,5
1200          vadduwm   1,1,6
1201          vadduwm   2,2,7
1202          vadduwm   3,3,4
1203          vxor      15,15,0
1204          vxor      12,12,1
1205          vxor      13,13,2
1206          vxor      14,14,3
1207          vrlw      15,15,27
1208          vrlw      12,12,27
1209          vrlw      13,13,27
1210          vrlw      14,14,27
1211          vadduwm   10,10,15
1212          vadduwm   11,11,12
1213          vadduwm   8,8,13
1214          vadduwm   9,9,14
1215          vxor      5,5,10
1216          vxor      6,6,11
1217          vxor      7,7,8
1218          vxor      4,4,9
1219          vrlw      5,5,28
1220          vrlw      6,6,28
1221          vrlw      7,7,28
1222          vrlw      4,4,28
1223          vadduwm   0,0,5
1224          vadduwm   1,1,6
1225          vadduwm   2,2,7
1226          vadduwm   3,3,4
1227          vxor      15,15,0
1228          vxor      12,12,1
1229          vxor      13,13,2
1230          vxor      14,14,3
1231          vrlw      15,15,29
1232          vrlw      12,12,29
1233          vrlw      13,13,29
1234          vrlw      14,14,29
1235          vadduwm   10,10,15
1236          vadduwm   11,11,12
1237          vadduwm   8,8,13
1238          vadduwm   9,9,14
1239          vxor      5,5,10
1240          vxor      6,6,11
1241          vxor      7,7,8
1242          vxor      4,4,9
1243          vrlw      5,5,30
1244          vrlw      6,6,30
1245          vrlw      7,7,30
1246          vrlw      4,4,30
1247          bc        16,0,.Loop_vsx
1248
1249          vadduwm   12,12,26
1250
1251.long     0x13600F8C
1252.long     0x13821F8C
1253.long     0x10000E8C
1254.long     0x10421E8C
1255.long     0x13A42F8C
1256.long     0x13C63F8C
1257.long     0xF0201057
1258.long     0xF0601357
1259.long     0xF01BE057
1260.long     0xF05BE357
1261
1262.long     0x10842E8C
1263.long     0x10C63E8C
1264.long     0x13684F8C
1265.long     0x138A5F8C
1266.long     0xF0A43057
1267.long     0xF0E43357
1268.long     0xF09DF057
1269.long     0xF0DDF357
1270
1271.long     0x11084E8C
1272.long     0x114A5E8C
1273.long     0x13AC6F8C
1274.long     0x13CE7F8C
1275.long     0xF1285057
1276.long     0xF1685357
1277.long     0xF11BE057
1278.long     0xF15BE357
1279
1280.long     0x118C6E8C
1281.long     0x11CE7E8C
1282          vspltisw  27,4
1283          vadduwm   26,26,27
1284.long     0xF1AC7057
1285.long     0xF1EC7357
1286.long     0xF19DF057
1287.long     0xF1DDF357
1288
1289          vadduwm   0,0,16
1290          vadduwm   4,4,17
1291          vadduwm   8,8,18
1292          vadduwm   12,12,19
1293
1294          vperm     0,0,0,31
1295          vperm     4,4,4,31
1296          vperm     8,8,8,31
1297          vperm     12,12,12,31
1298
1299          cmplwi    5,0x40
1300          blt       .Ltail_vsx
1301
1302.long     0x7F602619
1303.long     0x7F882619
1304.long     0x7FA92619
1305.long     0x7FCA2619
1306
1307          vxor      27,27,0
1308          vxor      28,28,4
1309          vxor      29,29,8
1310          vxor      30,30,12
1311
1312.long     0x7F601F19
1313.long     0x7F881F19
1314          addi      4,4,0x40
1315.long     0x7FA91F19
1316          subi      5,5,0x40
1317.long     0x7FCA1F19
1318          addi      3,3,0x40
1319          beq       .Ldone_vsx
1320
1321          vadduwm   0,1,16
1322          vadduwm   4,5,17
1323          vadduwm   8,9,18
1324          vadduwm   12,13,19
1325
1326          vperm     0,0,0,31
1327          vperm     4,4,4,31
1328          vperm     8,8,8,31
1329          vperm     12,12,12,31
1330
1331          cmplwi    5,0x40
1332          blt       .Ltail_vsx
1333
1334.long     0x7F602619
1335.long     0x7F882619
1336.long     0x7FA92619
1337.long     0x7FCA2619
1338
1339          vxor      27,27,0
1340          vxor      28,28,4
1341          vxor      29,29,8
1342          vxor      30,30,12
1343
1344.long     0x7F601F19
1345.long     0x7F881F19
1346          addi      4,4,0x40
1347.long     0x7FA91F19
1348          subi      5,5,0x40
1349.long     0x7FCA1F19
1350          addi      3,3,0x40
1351          beq       .Ldone_vsx
1352
1353          vadduwm   0,2,16
1354          vadduwm   4,6,17
1355          vadduwm   8,10,18
1356          vadduwm   12,14,19
1357
1358          vperm     0,0,0,31
1359          vperm     4,4,4,31
1360          vperm     8,8,8,31
1361          vperm     12,12,12,31
1362
1363          cmplwi    5,0x40
1364          blt       .Ltail_vsx
1365
1366.long     0x7F602619
1367.long     0x7F882619
1368.long     0x7FA92619
1369.long     0x7FCA2619
1370
1371          vxor      27,27,0
1372          vxor      28,28,4
1373          vxor      29,29,8
1374          vxor      30,30,12
1375
1376.long     0x7F601F19
1377.long     0x7F881F19
1378          addi      4,4,0x40
1379.long     0x7FA91F19
1380          subi      5,5,0x40
1381.long     0x7FCA1F19
1382          addi      3,3,0x40
1383          beq       .Ldone_vsx
1384
1385          vadduwm   0,3,16
1386          vadduwm   4,7,17
1387          vadduwm   8,11,18
1388          vadduwm   12,15,19
1389
1390          vperm     0,0,0,31
1391          vperm     4,4,4,31
1392          vperm     8,8,8,31
1393          vperm     12,12,12,31
1394
1395          cmplwi    5,0x40
1396          blt       .Ltail_vsx
1397
1398.long     0x7F602619
1399.long     0x7F882619
1400.long     0x7FA92619
1401.long     0x7FCA2619
1402
1403          vxor      27,27,0
1404          vxor      28,28,4
1405          vxor      29,29,8
1406          vxor      30,30,12
1407
1408.long     0x7F601F19
1409.long     0x7F881F19
1410          addi      4,4,0x40
1411.long     0x7FA91F19
1412          subi      5,5,0x40
1413.long     0x7FCA1F19
1414          addi      3,3,0x40
1415          mtctr     0
1416          bne       .Loop_outer_vsx
1417
1418.Ldone_vsx:
1419          lwz       12,196(1)
1420          li        10,103
1421          li        11,119
1422          lwz       0, 204(1)
1423          mtspr     256,12
1424          lvx       26,10,1
1425          addi      10,10,32
1426          lvx       27,11,1
1427          addi      11,11,32
1428          lvx       28,10,1
1429          addi      10,10,32
1430          lvx       29,11,1
1431          addi      11,11,32
1432          lvx       30,10,1
1433          lvx       31,11,1
1434          mtlr      0
1435          addi      1,1,200
1436          blr
1437
1438.align    4
1439.Ltail_vsx:
1440          addi      11,1,24
1441          mtctr     5
1442.long     0x7C005F19
1443.long     0x7C885F19
1444.long     0x7D095F19
1445.long     0x7D8A5F19
1446          subi      12,11,1
1447          subi      4,4,1
1448          subi      3,3,1
1449
1450.Loop_tail_vsx:
1451          lbzu      6,1(12)
1452          lbzu      7,1(4)
1453          xor       6,6,7
1454          stbu      6,1(3)
1455          bc        16,0,.Loop_tail_vsx
1456
1457.long     0x7E005F19
1458.long     0x7E085F19
1459.long     0x7E095F19
1460.long     0x7E0A5F19
1461
1462          b         .Ldone_vsx
1463.long     0
1464.byte     0,12,0x04,1,0x80,0,5,0
1465.long     0
1466
1467.align    5
1468.Lconsts:
1469          mflr      0
1470          bcl       20,31,$+4
1471          mflr      12
1472          addi      12,12,56
1473          mtlr      0
1474          blr
1475.long     0
1476.byte     0,12,0x14,0,0,0,0,0
1477.space    28
1478.Lsigma:
1479.long     0x61707865,0x3320646e,0x79622d32,0x6b206574
1480.long     1,0,0,0
1481.long     4,0,0,0
1482.long     0x02030001,0x06070405,0x0a0b0809,0x0e0f0c0d
1483.long     0x01020300,0x05060704,0x090a0b08,0x0d0e0f0c
1484.long     0x61707865,0x61707865,0x61707865,0x61707865
1485.long     0x3320646e,0x3320646e,0x3320646e,0x3320646e
1486.long     0x79622d32,0x79622d32,0x79622d32,0x79622d32
1487.long     0x6b206574,0x6b206574,0x6b206574,0x6b206574
1488.long     0,1,2,3
1489.byte     67,104,97,67,104,97,50,48,32,102,111,114,32,80,111,119,101,114,80,67,47,65,108,116,105,86,101,99,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1490.align    2
1491.align    2
1492