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