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