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