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