xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/chacha-ppc.S (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1.machine	"any"
2.text
3
4.globl	ChaCha20_ctr32_int
5.type	ChaCha20_ctr32_int,@function
6.align	5
7ChaCha20_ctr32_int:
8__ChaCha20_ctr32_int:
9	cmplwi	5,0
10	beqlr
11
12	stwu	1,-160(1)
13	mflr	0
14
15	stw	14,88(1)
16	stw	15,92(1)
17	stw	16,96(1)
18	stw	17,100(1)
19	stw	18,104(1)
20	stw	19,108(1)
21	stw	20,112(1)
22	stw	21,116(1)
23	stw	22,120(1)
24	stw	23,124(1)
25	stw	24,128(1)
26	stw	25,132(1)
27	stw	26,136(1)
28	stw	27,140(1)
29	stw	28,144(1)
30	stw	29,148(1)
31	stw	30,152(1)
32	stw	31,156(1)
33	stw	0,164(1)
34
35	lwz	11,0(7)
36	lwz	12,4(7)
37	lwz	14,8(7)
38	lwz	15,12(7)
39
40	bl	__ChaCha20_1x
41
42	lwz	0,164(1)
43	lwz	14,88(1)
44	lwz	15,92(1)
45	lwz	16,96(1)
46	lwz	17,100(1)
47	lwz	18,104(1)
48	lwz	19,108(1)
49	lwz	20,112(1)
50	lwz	21,116(1)
51	lwz	22,120(1)
52	lwz	23,124(1)
53	lwz	24,128(1)
54	lwz	25,132(1)
55	lwz	26,136(1)
56	lwz	27,140(1)
57	lwz	28,144(1)
58	lwz	29,148(1)
59	lwz	30,152(1)
60	lwz	31,156(1)
61	mtlr	0
62	addi	1,1,160
63	blr
64.long	0
65.byte	0,12,4,1,0x80,18,5,0
66.long	0
67
68
69.align	5
70__ChaCha20_1x:
71.Loop_outer:
72	lis	16,0x6170
73	lis	17,0x3320
74	lis	18,0x7962
75	lis	19,0x6b20
76	ori	16,16,0x7865
77	ori	17,17,0x646e
78	ori	18,18,0x2d32
79	ori	19,19,0x6574
80
81	li	0,10
82	lwz	20,0(6)
83	lwz	21,4(6)
84	lwz	22,8(6)
85	lwz	23,12(6)
86	lwz	24,16(6)
87	mr	28,11
88	lwz	25,20(6)
89	mr	29,12
90	lwz	26,24(6)
91	mr	30,14
92	lwz	27,28(6)
93	mr	31,15
94
95	mr	7,20
96	mr	8,21
97	mr	9,22
98	mr	10,23
99
100	mtctr	0
101.Loop:
102	add	16,16,20
103	add	17,17,21
104	add	18,18,22
105	add	19,19,23
106	xor	28,28,16
107	xor	29,29,17
108	xor	30,30,18
109	xor	31,31,19
110	rotlwi	28,28,16
111	rotlwi	29,29,16
112	rotlwi	30,30,16
113	rotlwi	31,31,16
114	add	24,24,28
115	add	25,25,29
116	add	26,26,30
117	add	27,27,31
118	xor	20,20,24
119	xor	21,21,25
120	xor	22,22,26
121	xor	23,23,27
122	rotlwi	20,20,12
123	rotlwi	21,21,12
124	rotlwi	22,22,12
125	rotlwi	23,23,12
126	add	16,16,20
127	add	17,17,21
128	add	18,18,22
129	add	19,19,23
130	xor	28,28,16
131	xor	29,29,17
132	xor	30,30,18
133	xor	31,31,19
134	rotlwi	28,28,8
135	rotlwi	29,29,8
136	rotlwi	30,30,8
137	rotlwi	31,31,8
138	add	24,24,28
139	add	25,25,29
140	add	26,26,30
141	add	27,27,31
142	xor	20,20,24
143	xor	21,21,25
144	xor	22,22,26
145	xor	23,23,27
146	rotlwi	20,20,7
147	rotlwi	21,21,7
148	rotlwi	22,22,7
149	rotlwi	23,23,7
150	add	16,16,21
151	add	17,17,22
152	add	18,18,23
153	add	19,19,20
154	xor	31,31,16
155	xor	28,28,17
156	xor	29,29,18
157	xor	30,30,19
158	rotlwi	31,31,16
159	rotlwi	28,28,16
160	rotlwi	29,29,16
161	rotlwi	30,30,16
162	add	26,26,31
163	add	27,27,28
164	add	24,24,29
165	add	25,25,30
166	xor	21,21,26
167	xor	22,22,27
168	xor	23,23,24
169	xor	20,20,25
170	rotlwi	21,21,12
171	rotlwi	22,22,12
172	rotlwi	23,23,12
173	rotlwi	20,20,12
174	add	16,16,21
175	add	17,17,22
176	add	18,18,23
177	add	19,19,20
178	xor	31,31,16
179	xor	28,28,17
180	xor	29,29,18
181	xor	30,30,19
182	rotlwi	31,31,8
183	rotlwi	28,28,8
184	rotlwi	29,29,8
185	rotlwi	30,30,8
186	add	26,26,31
187	add	27,27,28
188	add	24,24,29
189	add	25,25,30
190	xor	21,21,26
191	xor	22,22,27
192	xor	23,23,24
193	xor	20,20,25
194	rotlwi	21,21,7
195	rotlwi	22,22,7
196	rotlwi	23,23,7
197	rotlwi	20,20,7
198	bc	16,0,.Loop
199
200	subic	5,5,64
201	addi	16,16,0x7865
202	addi	17,17,0x646e
203	addi	18,18,0x2d32
204	addi	19,19,0x6574
205	addis	16,16,0x6170
206	addis	17,17,0x3320
207	addis	18,18,0x7962
208	addis	19,19,0x6b20
209
210	subfe.	0,0,0
211	add	20,20,7
212	lwz	7,16(6)
213	add	21,21,8
214	lwz	8,20(6)
215	add	22,22,9
216	lwz	9,24(6)
217	add	23,23,10
218	lwz	10,28(6)
219	add	24,24,7
220	add	25,25,8
221	add	26,26,9
222	add	27,27,10
223
224	add	28,28,11
225	add	29,29,12
226	add	30,30,14
227	add	31,31,15
228	addi	11,11,1
229	mr	7,16
230	rotlwi	16,16,8
231	rlwimi	16,7,24,0,7
232	rlwimi	16,7,24,16,23
233	mr	8,17
234	rotlwi	17,17,8
235	rlwimi	17,8,24,0,7
236	rlwimi	17,8,24,16,23
237	mr	9,18
238	rotlwi	18,18,8
239	rlwimi	18,9,24,0,7
240	rlwimi	18,9,24,16,23
241	mr	10,19
242	rotlwi	19,19,8
243	rlwimi	19,10,24,0,7
244	rlwimi	19,10,24,16,23
245	mr	7,20
246	rotlwi	20,20,8
247	rlwimi	20,7,24,0,7
248	rlwimi	20,7,24,16,23
249	mr	8,21
250	rotlwi	21,21,8
251	rlwimi	21,8,24,0,7
252	rlwimi	21,8,24,16,23
253	mr	9,22
254	rotlwi	22,22,8
255	rlwimi	22,9,24,0,7
256	rlwimi	22,9,24,16,23
257	mr	10,23
258	rotlwi	23,23,8
259	rlwimi	23,10,24,0,7
260	rlwimi	23,10,24,16,23
261	mr	7,24
262	rotlwi	24,24,8
263	rlwimi	24,7,24,0,7
264	rlwimi	24,7,24,16,23
265	mr	8,25
266	rotlwi	25,25,8
267	rlwimi	25,8,24,0,7
268	rlwimi	25,8,24,16,23
269	mr	9,26
270	rotlwi	26,26,8
271	rlwimi	26,9,24,0,7
272	rlwimi	26,9,24,16,23
273	mr	10,27
274	rotlwi	27,27,8
275	rlwimi	27,10,24,0,7
276	rlwimi	27,10,24,16,23
277	mr	7,28
278	rotlwi	28,28,8
279	rlwimi	28,7,24,0,7
280	rlwimi	28,7,24,16,23
281	mr	8,29
282	rotlwi	29,29,8
283	rlwimi	29,8,24,0,7
284	rlwimi	29,8,24,16,23
285	mr	9,30
286	rotlwi	30,30,8
287	rlwimi	30,9,24,0,7
288	rlwimi	30,9,24,16,23
289	mr	10,31
290	rotlwi	31,31,8
291	rlwimi	31,10,24,0,7
292	rlwimi	31,10,24,16,23
293	bne	.Ltail
294
295	lwz	7,0(4)
296	lwz	8,4(4)
297	cmplwi	5,0
298	lwz	9,8(4)
299	lwz	10,12(4)
300	xor	16,16,7
301	lwz	7,16(4)
302	xor	17,17,8
303	lwz	8,20(4)
304	xor	18,18,9
305	lwz	9,24(4)
306	xor	19,19,10
307	lwz	10,28(4)
308	xor	20,20,7
309	lwz	7,32(4)
310	xor	21,21,8
311	lwz	8,36(4)
312	xor	22,22,9
313	lwz	9,40(4)
314	xor	23,23,10
315	lwz	10,44(4)
316	xor	24,24,7
317	lwz	7,48(4)
318	xor	25,25,8
319	lwz	8,52(4)
320	xor	26,26,9
321	lwz	9,56(4)
322	xor	27,27,10
323	lwz	10,60(4)
324	xor	28,28,7
325	stw	16,0(3)
326	xor	29,29,8
327	stw	17,4(3)
328	xor	30,30,9
329	stw	18,8(3)
330	xor	31,31,10
331	stw	19,12(3)
332	stw	20,16(3)
333	stw	21,20(3)
334	stw	22,24(3)
335	stw	23,28(3)
336	stw	24,32(3)
337	stw	25,36(3)
338	stw	26,40(3)
339	stw	27,44(3)
340	stw	28,48(3)
341	stw	29,52(3)
342	stw	30,56(3)
343	addi	4,4,64
344	stw	31,60(3)
345	addi	3,3,64
346
347	bne	.Loop_outer
348
349	blr
350
351.align	4
352.Ltail:
353	addi	5,5,64
354	subi	4,4,1
355	subi	3,3,1
356	addi	7,1,24-1
357	mtctr	5
358
359	stw	16,24(1)
360	stw	17,28(1)
361	stw	18,32(1)
362	stw	19,36(1)
363	stw	20,40(1)
364	stw	21,44(1)
365	stw	22,48(1)
366	stw	23,52(1)
367	stw	24,56(1)
368	stw	25,60(1)
369	stw	26,64(1)
370	stw	27,68(1)
371	stw	28,72(1)
372	stw	29,76(1)
373	stw	30,80(1)
374	stw	31,84(1)
375
376.Loop_tail:
377	lbzu	11,1(4)
378	lbzu	16,1(7)
379	xor	12,11,16
380	stbu	12,1(3)
381	bc	16,0,.Loop_tail
382
383	stw	1,24(1)
384	stw	1,28(1)
385	stw	1,32(1)
386	stw	1,36(1)
387	stw	1,40(1)
388	stw	1,44(1)
389	stw	1,48(1)
390	stw	1,52(1)
391	stw	1,56(1)
392	stw	1,60(1)
393	stw	1,64(1)
394	stw	1,68(1)
395	stw	1,72(1)
396	stw	1,76(1)
397	stw	1,80(1)
398	stw	1,84(1)
399
400	blr
401.long	0
402.byte	0,12,0x14,0,0,0,0,0
403
404.globl	ChaCha20_ctr32_vmx
405.type	ChaCha20_ctr32_vmx,@function
406.align	5
407ChaCha20_ctr32_vmx:
408	cmplwi	5,256
409	blt	__ChaCha20_ctr32_int
410
411	stwu	1,-368(1)
412	mflr	0
413	li	10,103
414	li	11,119
415	mfspr	12,256
416	stvx	20,10,1
417	addi	10,10,32
418	stvx	21,11,1
419	addi	11,11,32
420	stvx	22,10,1
421	addi	10,10,32
422	stvx	23,11,1
423	addi	11,11,32
424	stvx	24,10,1
425	addi	10,10,32
426	stvx	25,11,1
427	addi	11,11,32
428	stvx	26,10,1
429	addi	10,10,32
430	stvx	27,11,1
431	addi	11,11,32
432	stvx	28,10,1
433	addi	10,10,32
434	stvx	29,11,1
435	addi	11,11,32
436	stvx	30,10,1
437	stvx	31,11,1
438	stw	12,292(1)
439	stw	14,296(1)
440	stw	15,300(1)
441	stw	16,304(1)
442	stw	17,308(1)
443	stw	18,312(1)
444	stw	19,316(1)
445	stw	20,320(1)
446	stw	21,324(1)
447	stw	22,328(1)
448	stw	23,332(1)
449	stw	24,336(1)
450	stw	25,340(1)
451	stw	26,344(1)
452	stw	27,348(1)
453	stw	28,352(1)
454	stw	29,356(1)
455	stw	30,360(1)
456	stw	31,364(1)
457	li	12,-1
458	stw	0, 372(1)
459	mtspr	256,12
460
461	bl	.Lconsts
462	li	16,16
463	li	17,32
464	li	18,48
465	li	19,64
466	li	20,31
467	li	21,15
468
469	lvx	16,0,6
470	lvsl	12,0,6
471	lvx	17,16,6
472	lvx	31,20,6
473
474	lvx	18,0,7
475	lvsl	13,0,7
476	lvx	27,21,7
477
478	lvx	15,0,12
479	lvx	20,16,12
480	lvx	21,17,12
481	lvx	22,18,12
482	lvx	23,19,12
483
484	vperm	16,16,17,12
485	vperm	17,17,31,12
486	vperm	18,18,27,13
487
488	lwz	11,0(7)
489	lwz	12,4(7)
490	vadduwm	18,18,20
491	lwz	14,8(7)
492	vadduwm	19,18,20
493	lwz	15,12(7)
494	vadduwm	20,19,20
495
496	vspltisw	24,-12
497	vspltisw	25,12
498	vspltisw	26,-7
499
500
501	vxor	12,12,12
502	vspltisw	30,-1
503	lvsl	28,0,4
504	lvsr	29,0,3
505	vperm	30,12,30,29
506
507	lvsl	12,0,16
508	vspltisb	13,3
509	vxor	12,12,13
510	vxor	29,29,13
511	vperm	28,28,28,12
512
513	b	.Loop_outer_vmx
514
515.align	4
516.Loop_outer_vmx:
517	lis	16,0x6170
518	lis	17,0x3320
519	vor	0,15,15
520	lis	18,0x7962
521	lis	19,0x6b20
522	vor	4,15,15
523	ori	16,16,0x7865
524	ori	17,17,0x646e
525	vor	8,15,15
526	ori	18,18,0x2d32
527	ori	19,19,0x6574
528	vor	1,16,16
529
530	li	0,10
531	lwz	20,0(6)
532	vor	5,16,16
533	lwz	21,4(6)
534	vor	9,16,16
535	lwz	22,8(6)
536	vor	2,17,17
537	lwz	23,12(6)
538	vor	6,17,17
539	lwz	24,16(6)
540	vor	10,17,17
541	mr	28,11
542	lwz	25,20(6)
543	vor	3,18,18
544	mr	29,12
545	lwz	26,24(6)
546	vor	7,19,19
547	mr	30,14
548	lwz	27,28(6)
549	vor	11,20,20
550	mr	31,15
551
552	mr	7,20
553	mr	8,21
554	mr	9,22
555	mr	10,23
556	vspltisw	27,7
557
558	mtctr	0
559	nop
560.Loop_vmx:
561	vadduwm	0,0,1
562	add	16,16,20
563	vadduwm	4,4,5
564	add	17,17,21
565	vadduwm	8,8,9
566	add	18,18,22
567	vxor	3,3,0
568	add	19,19,23
569	vxor	7,7,4
570	xor	28,28,16
571	vxor	11,11,8
572	xor	29,29,17
573	vperm	3,3,3,22
574	xor	30,30,18
575	vperm	7,7,7,22
576	xor	31,31,19
577	vperm	11,11,11,22
578	rotlwi	28,28,16
579	vadduwm	2,2,3
580	rotlwi	29,29,16
581	vadduwm	6,6,7
582	rotlwi	30,30,16
583	vadduwm	10,10,11
584	rotlwi	31,31,16
585	vxor	12,1,2
586	add	24,24,28
587	vxor	13,5,6
588	add	25,25,29
589	vxor	14,9,10
590	add	26,26,30
591	vsrw	1,12,24
592	add	27,27,31
593	vsrw	5,13,24
594	xor	20,20,24
595	vsrw	9,14,24
596	xor	21,21,25
597	vslw	12,12,25
598	xor	22,22,26
599	vslw	13,13,25
600	xor	23,23,27
601	vslw	14,14,25
602	rotlwi	20,20,12
603	vor	1,1,12
604	rotlwi	21,21,12
605	vor	5,5,13
606	rotlwi	22,22,12
607	vor	9,9,14
608	rotlwi	23,23,12
609	vadduwm	0,0,1
610	add	16,16,20
611	vadduwm	4,4,5
612	add	17,17,21
613	vadduwm	8,8,9
614	add	18,18,22
615	vxor	3,3,0
616	add	19,19,23
617	vxor	7,7,4
618	xor	28,28,16
619	vxor	11,11,8
620	xor	29,29,17
621	vperm	3,3,3,23
622	xor	30,30,18
623	vperm	7,7,7,23
624	xor	31,31,19
625	vperm	11,11,11,23
626	rotlwi	28,28,8
627	vadduwm	2,2,3
628	rotlwi	29,29,8
629	vadduwm	6,6,7
630	rotlwi	30,30,8
631	vadduwm	10,10,11
632	rotlwi	31,31,8
633	vxor	12,1,2
634	add	24,24,28
635	vxor	13,5,6
636	add	25,25,29
637	vxor	14,9,10
638	add	26,26,30
639	vsrw	1,12,26
640	add	27,27,31
641	vsrw	5,13,26
642	xor	20,20,24
643	vsrw	9,14,26
644	xor	21,21,25
645	vslw	12,12,27
646	xor	22,22,26
647	vslw	13,13,27
648	xor	23,23,27
649	vslw	14,14,27
650	rotlwi	20,20,7
651	vor	1,1,12
652	rotlwi	21,21,7
653	vor	5,5,13
654	rotlwi	22,22,7
655	vor	9,9,14
656	rotlwi	23,23,7
657	vsldoi	2,2,2, 16-8
658	vsldoi	6,6,6, 16-8
659	vsldoi	10,10,10, 16-8
660	vsldoi	1,1,1, 16-12
661	vsldoi	5,5,5, 16-12
662	vsldoi	9,9,9, 16-12
663	vsldoi	3,3,3, 16-4
664	vsldoi	7,7,7, 16-4
665	vsldoi	11,11,11, 16-4
666	vadduwm	0,0,1
667	add	16,16,21
668	vadduwm	4,4,5
669	add	17,17,22
670	vadduwm	8,8,9
671	add	18,18,23
672	vxor	3,3,0
673	add	19,19,20
674	vxor	7,7,4
675	xor	31,31,16
676	vxor	11,11,8
677	xor	28,28,17
678	vperm	3,3,3,22
679	xor	29,29,18
680	vperm	7,7,7,22
681	xor	30,30,19
682	vperm	11,11,11,22
683	rotlwi	31,31,16
684	vadduwm	2,2,3
685	rotlwi	28,28,16
686	vadduwm	6,6,7
687	rotlwi	29,29,16
688	vadduwm	10,10,11
689	rotlwi	30,30,16
690	vxor	12,1,2
691	add	26,26,31
692	vxor	13,5,6
693	add	27,27,28
694	vxor	14,9,10
695	add	24,24,29
696	vsrw	1,12,24
697	add	25,25,30
698	vsrw	5,13,24
699	xor	21,21,26
700	vsrw	9,14,24
701	xor	22,22,27
702	vslw	12,12,25
703	xor	23,23,24
704	vslw	13,13,25
705	xor	20,20,25
706	vslw	14,14,25
707	rotlwi	21,21,12
708	vor	1,1,12
709	rotlwi	22,22,12
710	vor	5,5,13
711	rotlwi	23,23,12
712	vor	9,9,14
713	rotlwi	20,20,12
714	vadduwm	0,0,1
715	add	16,16,21
716	vadduwm	4,4,5
717	add	17,17,22
718	vadduwm	8,8,9
719	add	18,18,23
720	vxor	3,3,0
721	add	19,19,20
722	vxor	7,7,4
723	xor	31,31,16
724	vxor	11,11,8
725	xor	28,28,17
726	vperm	3,3,3,23
727	xor	29,29,18
728	vperm	7,7,7,23
729	xor	30,30,19
730	vperm	11,11,11,23
731	rotlwi	31,31,8
732	vadduwm	2,2,3
733	rotlwi	28,28,8
734	vadduwm	6,6,7
735	rotlwi	29,29,8
736	vadduwm	10,10,11
737	rotlwi	30,30,8
738	vxor	12,1,2
739	add	26,26,31
740	vxor	13,5,6
741	add	27,27,28
742	vxor	14,9,10
743	add	24,24,29
744	vsrw	1,12,26
745	add	25,25,30
746	vsrw	5,13,26
747	xor	21,21,26
748	vsrw	9,14,26
749	xor	22,22,27
750	vslw	12,12,27
751	xor	23,23,24
752	vslw	13,13,27
753	xor	20,20,25
754	vslw	14,14,27
755	rotlwi	21,21,7
756	vor	1,1,12
757	rotlwi	22,22,7
758	vor	5,5,13
759	rotlwi	23,23,7
760	vor	9,9,14
761	rotlwi	20,20,7
762	vsldoi	2,2,2, 16-8
763	vsldoi	6,6,6, 16-8
764	vsldoi	10,10,10, 16-8
765	vsldoi	1,1,1, 16-4
766	vsldoi	5,5,5, 16-4
767	vsldoi	9,9,9, 16-4
768	vsldoi	3,3,3, 16-12
769	vsldoi	7,7,7, 16-12
770	vsldoi	11,11,11, 16-12
771	bc	16,0,.Loop_vmx
772
773	subi	5,5,256
774	addi	16,16,0x7865
775	addi	17,17,0x646e
776	addi	18,18,0x2d32
777	addi	19,19,0x6574
778	addis	16,16,0x6170
779	addis	17,17,0x3320
780	addis	18,18,0x7962
781	addis	19,19,0x6b20
782	add	20,20,7
783	lwz	7,16(6)
784	add	21,21,8
785	lwz	8,20(6)
786	add	22,22,9
787	lwz	9,24(6)
788	add	23,23,10
789	lwz	10,28(6)
790	add	24,24,7
791	add	25,25,8
792	add	26,26,9
793	add	27,27,10
794	add	28,28,11
795	add	29,29,12
796	add	30,30,14
797	add	31,31,15
798
799	vadduwm	0,0,15
800	vadduwm	4,4,15
801	vadduwm	8,8,15
802	vadduwm	1,1,16
803	vadduwm	5,5,16
804	vadduwm	9,9,16
805	vadduwm	2,2,17
806	vadduwm	6,6,17
807	vadduwm	10,10,17
808	vadduwm	3,3,18
809	vadduwm	7,7,19
810	vadduwm	11,11,20
811
812	addi	11,11,4
813	vadduwm	18,18,21
814	vadduwm	19,19,21
815	vadduwm	20,20,21
816
817	mr	7,16
818	rotlwi	16,16,8
819	rlwimi	16,7,24,0,7
820	rlwimi	16,7,24,16,23
821	mr	8,17
822	rotlwi	17,17,8
823	rlwimi	17,8,24,0,7
824	rlwimi	17,8,24,16,23
825	mr	9,18
826	rotlwi	18,18,8
827	rlwimi	18,9,24,0,7
828	rlwimi	18,9,24,16,23
829	mr	10,19
830	rotlwi	19,19,8
831	rlwimi	19,10,24,0,7
832	rlwimi	19,10,24,16,23
833	mr	7,20
834	rotlwi	20,20,8
835	rlwimi	20,7,24,0,7
836	rlwimi	20,7,24,16,23
837	mr	8,21
838	rotlwi	21,21,8
839	rlwimi	21,8,24,0,7
840	rlwimi	21,8,24,16,23
841	mr	9,22
842	rotlwi	22,22,8
843	rlwimi	22,9,24,0,7
844	rlwimi	22,9,24,16,23
845	mr	10,23
846	rotlwi	23,23,8
847	rlwimi	23,10,24,0,7
848	rlwimi	23,10,24,16,23
849	mr	7,24
850	rotlwi	24,24,8
851	rlwimi	24,7,24,0,7
852	rlwimi	24,7,24,16,23
853	mr	8,25
854	rotlwi	25,25,8
855	rlwimi	25,8,24,0,7
856	rlwimi	25,8,24,16,23
857	mr	9,26
858	rotlwi	26,26,8
859	rlwimi	26,9,24,0,7
860	rlwimi	26,9,24,16,23
861	mr	10,27
862	rotlwi	27,27,8
863	rlwimi	27,10,24,0,7
864	rlwimi	27,10,24,16,23
865	mr	7,28
866	rotlwi	28,28,8
867	rlwimi	28,7,24,0,7
868	rlwimi	28,7,24,16,23
869	mr	8,29
870	rotlwi	29,29,8
871	rlwimi	29,8,24,0,7
872	rlwimi	29,8,24,16,23
873	mr	9,30
874	rotlwi	30,30,8
875	rlwimi	30,9,24,0,7
876	rlwimi	30,9,24,16,23
877	mr	10,31
878	rotlwi	31,31,8
879	rlwimi	31,10,24,0,7
880	rlwimi	31,10,24,16,23
881	lwz	7,0(4)
882	lwz	8,4(4)
883	lwz	9,8(4)
884	lwz	10,12(4)
885	xor	16,16,7
886	lwz	7,16(4)
887	xor	17,17,8
888	lwz	8,20(4)
889	xor	18,18,9
890	lwz	9,24(4)
891	xor	19,19,10
892	lwz	10,28(4)
893	xor	20,20,7
894	lwz	7,32(4)
895	xor	21,21,8
896	lwz	8,36(4)
897	xor	22,22,9
898	lwz	9,40(4)
899	xor	23,23,10
900	lwz	10,44(4)
901	xor	24,24,7
902	lwz	7,48(4)
903	xor	25,25,8
904	lwz	8,52(4)
905	xor	26,26,9
906	lwz	9,56(4)
907	xor	27,27,10
908	lwz	10,60(4)
909	xor	28,28,7
910	stw	16,0(3)
911	xor	29,29,8
912	stw	17,4(3)
913	xor	30,30,9
914	stw	18,8(3)
915	xor	31,31,10
916	stw	19,12(3)
917	addi	4,4,64
918	stw	20,16(3)
919	li	7,16
920	stw	21,20(3)
921	li	8,32
922	stw	22,24(3)
923	li	9,48
924	stw	23,28(3)
925	li	10,64
926	stw	24,32(3)
927	stw	25,36(3)
928	stw	26,40(3)
929	stw	27,44(3)
930	stw	28,48(3)
931	stw	29,52(3)
932	stw	30,56(3)
933	stw	31,60(3)
934	addi	3,3,64
935
936	lvx	31,0,4
937	lvx	27,7,4
938	lvx	12,8,4
939	lvx	13,9,4
940	lvx	14,10,4
941	addi	4,4,64
942
943	vperm	31,31,27,28
944	vperm	27,27,12,28
945	vperm	12,12,13,28
946	vperm	13,13,14,28
947	vxor	0,0,31
948	vxor	1,1,27
949	lvx	27,7,4
950	vxor	2,2,12
951	lvx	12,8,4
952	vxor	3,3,13
953	lvx	13,9,4
954	lvx	31,10,4
955	addi	4,4,64
956	li	10,63
957	vperm	0,0,0,29
958	vperm	1,1,1,29
959	vperm	2,2,2,29
960	vperm	3,3,3,29
961
962	vperm	14,14,27,28
963	vperm	27,27,12,28
964	vperm	12,12,13,28
965	vperm	13,13,31,28
966	vxor	4,4,14
967	vxor	5,5,27
968	lvx	27,7,4
969	vxor	6,6,12
970	lvx	12,8,4
971	vxor	7,7,13
972	lvx	13,9,4
973	lvx	14,10,4
974	addi	4,4,64
975	vperm	4,4,4,29
976	vperm	5,5,5,29
977	vperm	6,6,6,29
978	vperm	7,7,7,29
979
980	vperm	31,31,27,28
981	vperm	27,27,12,28
982	vperm	12,12,13,28
983	vperm	13,13,14,28
984	vxor	8,8,31
985	vxor	9,9,27
986	vxor	10,10,12
987	vxor	11,11,13
988	vperm	8,8,8,29
989	vperm	9,9,9,29
990	vperm	10,10,10,29
991	vperm	11,11,11,29
992
993	andi.	17,3,15
994	mr	16,3
995
996	vsel	31,0,1,30
997	vsel	27,1,2,30
998	vsel	12,2,3,30
999	vsel	13,3,4,30
1000	vsel	1,4,5,30
1001	vsel	2,5,6,30
1002	vsel	3,6,7,30
1003	vsel	4,7,8,30
1004	vsel	5,8,9,30
1005	vsel	6,9,10,30
1006	vsel	7,10,11,30
1007
1008
1009	stvx	31,7,3
1010	stvx	27,8,3
1011	stvx	12,9,3
1012	addi	3,3,64
1013	stvx	13,0,3
1014	stvx	1,7,3
1015	stvx	2,8,3
1016	stvx	3,9,3
1017	addi	3,3,64
1018	stvx	4,0,3
1019	stvx	5,7,3
1020	stvx	6,8,3
1021	stvx	7,9,3
1022	addi	3,3,64
1023
1024	beq	.Laligned_vmx
1025
1026	sub	18,3,17
1027	li	19,0
1028.Lunaligned_tail_vmx:
1029	stvebx	11,19,18
1030	addi	19,19,1
1031	cmpw	19,17
1032	bne	.Lunaligned_tail_vmx
1033
1034	sub	18,16,17
1035.Lunaligned_head_vmx:
1036	stvebx	0,17,18
1037	cmpwi	17,15
1038	addi	17,17,1
1039	bne	.Lunaligned_head_vmx
1040
1041	cmplwi	5,255
1042	bgt	.Loop_outer_vmx
1043
1044	b	.Ldone_vmx
1045
1046.align	4
1047.Laligned_vmx:
1048	stvx	0,0,16
1049
1050	cmplwi	5,255
1051	bgt	.Loop_outer_vmx
1052	nop
1053
1054.Ldone_vmx:
1055	cmplwi	5,0
1056	bnel	__ChaCha20_1x
1057
1058	lwz	12,292(1)
1059	li	10,103
1060	li	11,119
1061	mtspr	256,12
1062	lvx	20,10,1
1063	addi	10,10,32
1064	lvx	21,11,1
1065	addi	11,11,32
1066	lvx	22,10,1
1067	addi	10,10,32
1068	lvx	23,11,1
1069	addi	11,11,32
1070	lvx	24,10,1
1071	addi	10,10,32
1072	lvx	25,11,1
1073	addi	11,11,32
1074	lvx	26,10,1
1075	addi	10,10,32
1076	lvx	27,11,1
1077	addi	11,11,32
1078	lvx	28,10,1
1079	addi	10,10,32
1080	lvx	29,11,1
1081	addi	11,11,32
1082	lvx	30,10,1
1083	lvx	31,11,1
1084	lwz	0, 372(1)
1085	lwz	14,296(1)
1086	lwz	15,300(1)
1087	lwz	16,304(1)
1088	lwz	17,308(1)
1089	lwz	18,312(1)
1090	lwz	19,316(1)
1091	lwz	20,320(1)
1092	lwz	21,324(1)
1093	lwz	22,328(1)
1094	lwz	23,332(1)
1095	lwz	24,336(1)
1096	lwz	25,340(1)
1097	lwz	26,344(1)
1098	lwz	27,348(1)
1099	lwz	28,352(1)
1100	lwz	29,356(1)
1101	lwz	30,360(1)
1102	lwz	31,364(1)
1103	mtlr	0
1104	addi	1,1,368
1105	blr
1106.long	0
1107.byte	0,12,0x04,1,0x80,18,5,0
1108.long	0
1109
1110
1111.align	5
1112.Lconsts:
1113	mflr	0
1114	bcl	20,31,$+4
1115	mflr	12
1116	addi	12,12,56
1117	mtlr	0
1118	blr
1119.long	0
1120.byte	0,12,0x14,0,0,0,0,0
1121.space	28
1122.Lsigma:
1123.long	0x61707865,0x3320646e,0x79622d32,0x6b206574
1124.long	1,0,0,0
1125.long	4,0,0,0
1126.long	0x02030001,0x06070405,0x0a0b0809,0x0e0f0c0d
1127.long	0x01020300,0x05060704,0x090a0b08,0x0d0e0f0c
1128.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,32,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
1129.align	2
1130.align	2
1131