• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.machine	"any"
2.abiversion	2
3.text
4
5.globl	ChaCha20_ctr32_int
6.type	ChaCha20_ctr32_int,@function
7.align	5
8ChaCha20_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
346ChaCha20_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
952ChaCha20_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